From 9ef3e1d140b6f471d3b3e870f93fde7be109bff2 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Sun, 24 Dec 2023 00:22:35 -0800 Subject: [PATCH 01/84] cnidarium: add filterable grpc streaming of state changes This commit adds a new RPC to cnidarium that provides grpc streaming of state changes, with server-side filtering using regexes on the keys. Also, there's stub code in pcli that will consume it. --- Cargo.lock | 8 + crates/bin/pcli/Cargo.toml | 13 +- crates/bin/pcli/src/command/query.rs | 80 ++- crates/cnidarium/Cargo.toml | 1 + crates/cnidarium/src/cache.rs | 19 + .../src/gen/penumbra.cnidarium.v1alpha1.rs | 188 ++++++- .../gen/penumbra.cnidarium.v1alpha1.serde.rs | 499 ++++++++++++++++++ .../src/gen/proto_descriptor.bin.no_lfs | Bin 79128 -> 81667 bytes crates/cnidarium/src/rpc.rs | 87 ++- crates/cnidarium/src/storage.rs | 65 ++- .../src/gen/penumbra.cnidarium.v1alpha1.rs | 188 ++++++- .../gen/penumbra.cnidarium.v1alpha1.serde.rs | 499 ++++++++++++++++++ .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 336062 -> 338473 bytes .../cnidarium/v1alpha1/cnidarium.pb.go | 496 +++++++++++++++-- .../gen/penumbra/core/app/v1alpha1/app.pb.go | 2 +- .../penumbra/core/asset/v1alpha1/asset.pb.go | 2 +- .../core/component/chain/v1alpha1/chain.pb.go | 2 +- .../v1alpha1/compact_block.pb.go | 278 +++++----- .../core/component/dao/v1alpha1/dao.pb.go | 2 +- .../core/component/dex/v1alpha1/dex.pb.go | 2 +- .../v1alpha1/distributions.pb.go | 2 +- .../core/component/fee/v1alpha1/fee.pb.go | 2 +- .../governance/v1alpha1/governance.pb.go | 2 +- .../core/component/ibc/v1alpha1/ibc.pb.go | 2 +- .../core/component/sct/v1alpha1/sct.pb.go | 222 ++++---- .../v1alpha1/shielded_pool.pb.go | 2 +- .../core/component/stake/v1alpha1/stake.pb.go | 2 +- .../penumbra/core/keys/v1alpha1/keys.pb.go | 2 +- .../gen/penumbra/core/num/v1alpha1/num.pb.go | 2 +- .../transaction/v1alpha1/transaction.pb.go | 2 +- .../decaf377_fmd/v1alpha1/decaf377_fmd.pb.go | 2 +- .../v1alpha1/decaf377_frost.pb.go | 2 +- .../v1alpha1/decaf377_rdsa.pb.go | 2 +- .../penumbra/crypto/tct/v1alpha1/tct.pb.go | 2 +- .../threshold/v1alpha1/threshold.pb.go | 2 +- .../penumbra/custody/v1alpha1/custody.pb.go | 2 +- .../tools/summoning/v1alpha1/summoning.pb.go | 2 +- .../v1alpha1/tendermint_proxy.pb.go | 2 +- .../go/gen/penumbra/view/v1alpha1/view.pb.go | 2 +- .../cnidarium/v1alpha1/cnidarium.proto | 49 +- 40 files changed, 2374 insertions(+), 364 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4a8a8087eb..cb3f145775 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1514,6 +1514,7 @@ dependencies = [ "pbjson 0.5.1", "pin-project", "prost", + "regex", "rocksdb", "serde", "sha2 0.10.8", @@ -4692,6 +4693,7 @@ dependencies = [ "serde_json", "serde_with 1.14.0", "sha2 0.9.9", + "simple-base64", "tempfile", "tendermint", "tokio", @@ -7614,6 +7616,12 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "simple-base64" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6385ef05b7bbfddaa8bf6306d059adac087990d659576c73b7da802d9a6ce91f" + [[package]] name = "sized-chunks" version = "0.6.5" diff --git a/crates/bin/pcli/Cargo.toml b/crates/bin/pcli/Cargo.toml index 0f98adfde2..01e385b30b 100644 --- a/crates/bin/pcli/Cargo.toml +++ b/crates/bin/pcli/Cargo.toml @@ -16,7 +16,17 @@ default = ["std", "parallel", "download-proving-keys"] download-proving-keys = ["penumbra-proof-params/download-proving-keys"] sct-divergence-check = ["penumbra-view/sct-divergence-check"] std = ["ark-ff/std", "ibc-types/std"] -parallel = ["penumbra-proof-params/parallel", "decaf377/parallel", "penumbra-shielded-pool/parallel", "penumbra-dex/parallel", "penumbra-governance/parallel", "penumbra-stake/parallel", "penumbra-transaction/parallel", "penumbra-wallet/parallel", "penumbra-proof-setup/parallel"] +parallel = [ + "penumbra-proof-params/parallel", + "decaf377/parallel", + "penumbra-shielded-pool/parallel", + "penumbra-dex/parallel", + "penumbra-governance/parallel", + "penumbra-stake/parallel", + "penumbra-transaction/parallel", + "penumbra-wallet/parallel", + "penumbra-proof-setup/parallel", +] [dependencies] # Workspace dependencies @@ -60,6 +70,7 @@ async-stream = "0.2" bincode = "1.3.3" blake2b_simd = "0.5" base64 = "0.21" +simple-base64 = "0.23" bytes = "1" comfy-table = "5" directories = "4.0.1" diff --git a/crates/bin/pcli/src/command/query.rs b/crates/bin/pcli/src/command/query.rs index 110bc792f0..974a4592a9 100644 --- a/crates/bin/pcli/src/command/query.rs +++ b/crates/bin/pcli/src/command/query.rs @@ -1,4 +1,4 @@ -use anyhow::{Context, Result}; +use anyhow::{anyhow, Context, Result}; mod shielded_pool; use shielded_pool::ShieldedPool; @@ -61,10 +61,31 @@ pub enum QueryCmd { /// Queries information about IBC. #[clap(subcommand)] Ibc(IbcCmd), + /// Subscribes to a filtered stream of state changes. + Watch { + /// The regex to filter keys in verifiable storage. + /// + /// The empty string matches all keys; the pattern $^ matches no keys. + #[clap(long, default_value = "")] + key_regex: String, + /// The regex to filter keys in nonverifiable storage. + /// + /// The empty string matches all keys; the pattern $^ matches no keys. + #[clap(long, default_value = "")] + nv_key_regex: String, + }, } impl QueryCmd { pub async fn exec(&self, app: &mut App) -> Result<()> { + if let QueryCmd::Watch { + key_regex, + nv_key_regex, + } = self + { + return watch(key_regex.clone(), nv_key_regex.clone(), app).await; + } + // Special-case: this is a Tendermint query if let QueryCmd::Tx(tx) = self { return tx.exec(app).await; @@ -101,6 +122,7 @@ impl QueryCmd { | QueryCmd::Dex(_) | QueryCmd::Governance(_) | QueryCmd::Dao(_) + | QueryCmd::Watch { .. } | QueryCmd::Ibc(_) => { unreachable!("query handled in guard"); } @@ -138,6 +160,7 @@ impl QueryCmd { | QueryCmd::ShieldedPool { .. } | QueryCmd::Governance { .. } | QueryCmd::Key { .. } + | QueryCmd::Watch { .. } | QueryCmd::Ibc(_) => true, } } @@ -154,6 +177,7 @@ impl QueryCmd { | QueryCmd::Dex { .. } | QueryCmd::Governance { .. } | QueryCmd::Dao { .. } + | QueryCmd::Watch { .. } | QueryCmd::Ibc(_) => { unreachable!("query is special cased") } @@ -162,3 +186,57 @@ impl QueryCmd { Ok(()) } } + +// this code (not just this function, the whole module) is pretty shitty, +// but that's maybe okay for the moment. it exists to consume the rpc. +async fn watch(key_regex: String, nv_key_regex: String, app: &mut App) -> Result<()> { + use penumbra_proto::cnidarium::v1alpha1::{ + query_service_client::QueryServiceClient, watch_response as wr, + }; + let mut client = QueryServiceClient::new(app.pd_channel().await?); + + let req = penumbra_proto::cnidarium::v1alpha1::WatchRequest { + key_regex, + nv_key_regex, + }; + + tracing::debug!(?req); + + let mut stream = client.watch(req).await?.into_inner(); + + while let Some(rsp) = stream.message().await? { + match rsp.entry { + Some(wr::Entry::Kv(kv)) => { + if kv.deleted { + println!("{} KV {} -> DELETED", rsp.version, kv.key); + } else { + println!( + "{} KV {} -> {}", + rsp.version, + kv.key, + simple_base64::encode(&kv.value) + ); + } + } + Some(wr::Entry::NvKv(nv_kv)) => { + let key = simple_base64::encode(&nv_kv.key); + + if nv_kv.deleted { + println!("{} NVKV {} -> DELETED", rsp.version, key); + } else { + println!( + "{} NVKV {} -> {}", + rsp.version, + key, + simple_base64::encode(&nv_kv.value) + ); + } + } + None => { + return Err(anyhow!("server returned None event")); + } + } + } + + Ok(()) +} diff --git a/crates/cnidarium/Cargo.toml b/crates/cnidarium/Cargo.toml index d8b735d5ab..da4c345343 100644 --- a/crates/cnidarium/Cargo.toml +++ b/crates/cnidarium/Cargo.toml @@ -40,6 +40,7 @@ prost = { version = "0.12.3", optional = true } serde = { version = "1", optional = true } pbjson = { version = "0.5", optional = true } ibc-proto = { version = "0.39.0", default-features = false, features = ["serde"], optional = true } +regex = "1.10.2" [dev-dependencies] tempfile = "3.3.0" diff --git a/crates/cnidarium/src/cache.rs b/crates/cnidarium/src/cache.rs index 1a76c9dd6f..f9817d7716 100644 --- a/crates/cnidarium/src/cache.rs +++ b/crates/cnidarium/src/cache.rs @@ -23,6 +23,16 @@ pub struct Cache { } impl Cache { + /// Inspect the cache of unwritten changes to the verifiable state. + pub fn unwritten_changes(&self) -> &BTreeMap>> { + &self.unwritten_changes + } + + /// Inspect the cache of unwritten changes to the nonverifiable state. + pub fn nonverifiable_changes(&self) -> &BTreeMap, Option>> { + &self.nonverifiable_changes + } + /// Merge the given cache with this one, taking its writes in place of ours. pub fn merge(&mut self, other: Cache) { // One might ask, why does this exist separately from `apply_to`? The @@ -103,4 +113,13 @@ impl Cache { } changes_by_substore } + + pub(crate) fn clone_changes(&self) -> Self { + Self { + unwritten_changes: self.unwritten_changes.clone(), + nonverifiable_changes: self.nonverifiable_changes.clone(), + ephemeral_objects: Default::default(), + events: Default::default(), + } + } } diff --git a/crates/cnidarium/src/gen/penumbra.cnidarium.v1alpha1.rs b/crates/cnidarium/src/gen/penumbra.cnidarium.v1alpha1.rs index 6edd6f9cbc..33b0e9efef 100644 --- a/crates/cnidarium/src/gen/penumbra.cnidarium.v1alpha1.rs +++ b/crates/cnidarium/src/gen/penumbra.cnidarium.v1alpha1.rs @@ -91,6 +91,106 @@ impl ::prost::Name for PrefixValueResponse { ::prost::alloc::format!("penumbra.cnidarium.v1alpha1.{}", Self::NAME) } } +/// Requests a stream of new key-value pairs that have been committed to the state. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct WatchRequest { + /// A regex for keys in the verifiable storage. + /// + /// Only key-value updates whose keys match this regex will be returned. + /// Note that the empty string matches all keys. + /// To exclude all keys, use the regex "$^", which matches no strings. + #[prost(string, tag = "1")] + pub key_regex: ::prost::alloc::string::String, + /// A regex for keys in the nonverifiable storage. + /// + /// Only key-value updates whose keys match this regex will be returned. + /// Note that the empty string matches all keys. + /// To exclude all keys, use the regex "$^", which matches no strings. + #[prost(string, tag = "2")] + pub nv_key_regex: ::prost::alloc::string::String, +} +impl ::prost::Name for WatchRequest { + const NAME: &'static str = "WatchRequest"; + const PACKAGE: &'static str = "penumbra.cnidarium.v1alpha1"; + fn full_name() -> ::prost::alloc::string::String { + ::prost::alloc::format!("penumbra.cnidarium.v1alpha1.{}", Self::NAME) + } +} +/// A key-value pair that has been committed to the state. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct WatchResponse { + /// The state version the key-value pair was committed at. + #[prost(uint64, tag = "1")] + pub version: u64, + /// The entry that was committed. + #[prost(oneof = "watch_response::Entry", tags = "5, 6")] + pub entry: ::core::option::Option, +} +/// Nested message and enum types in `WatchResponse`. +pub mod watch_response { + /// Elements of the verifiable storage have string keys. + #[allow(clippy::derive_partial_eq_without_eq)] + #[derive(Clone, PartialEq, ::prost::Message)] + pub struct KeyValue { + #[prost(string, tag = "1")] + pub key: ::prost::alloc::string::String, + #[prost(bytes = "vec", tag = "2")] + pub value: ::prost::alloc::vec::Vec, + /// If set to true, the key-value pair was deleted. + /// This allows distinguishing a deleted key-value pair from a key-value pair whose value is empty. + #[prost(bool, tag = "3")] + pub deleted: bool, + } + impl ::prost::Name for KeyValue { + const NAME: &'static str = "KeyValue"; + const PACKAGE: &'static str = "penumbra.cnidarium.v1alpha1"; + fn full_name() -> ::prost::alloc::string::String { + ::prost::alloc::format!( + "penumbra.cnidarium.v1alpha1.WatchResponse.{}", Self::NAME + ) + } + } + /// Elements of the nonverifiable storage have byte keys. + #[allow(clippy::derive_partial_eq_without_eq)] + #[derive(Clone, PartialEq, ::prost::Message)] + pub struct NvKeyValue { + #[prost(bytes = "vec", tag = "1")] + pub key: ::prost::alloc::vec::Vec, + #[prost(bytes = "vec", tag = "2")] + pub value: ::prost::alloc::vec::Vec, + /// If set to true, the key-value pair was deleted. + /// This allows distinguishing a deleted key-value pair from a key-value pair whose value is empty. + #[prost(bool, tag = "3")] + pub deleted: bool, + } + impl ::prost::Name for NvKeyValue { + const NAME: &'static str = "NvKeyValue"; + const PACKAGE: &'static str = "penumbra.cnidarium.v1alpha1"; + fn full_name() -> ::prost::alloc::string::String { + ::prost::alloc::format!( + "penumbra.cnidarium.v1alpha1.WatchResponse.{}", Self::NAME + ) + } + } + /// The entry that was committed. + #[allow(clippy::derive_partial_eq_without_eq)] + #[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Entry { + #[prost(message, tag = "5")] + Kv(KeyValue), + #[prost(message, tag = "6")] + NvKv(NvKeyValue), + } +} +impl ::prost::Name for WatchResponse { + const NAME: &'static str = "WatchResponse"; + const PACKAGE: &'static str = "penumbra.cnidarium.v1alpha1"; + fn full_name() -> ::prost::alloc::string::String { + ::prost::alloc::format!("penumbra.cnidarium.v1alpha1.{}", Self::NAME) + } +} /// Generated client implementations. #[cfg(feature = "rpc")] pub mod query_service_client { @@ -211,7 +311,6 @@ pub mod query_service_client { } /// General-purpose prefixed key-value state query API, that can be used to query /// arbitrary prefixes in the JMT storage. - /// Returns a stream of `PrefixValueResponse`s. pub async fn prefix_value( &mut self, request: impl tonic::IntoRequest, @@ -242,6 +341,34 @@ pub mod query_service_client { ); self.inner.server_streaming(req, path, codec).await } + /// Subscribes to a stream of key-value updates, with regex filtering on keys. + pub async fn watch( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response>, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/penumbra.cnidarium.v1alpha1.QueryService/Watch", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new("penumbra.cnidarium.v1alpha1.QueryService", "Watch"), + ); + self.inner.server_streaming(req, path, codec).await + } } } /// Generated server implementations. @@ -269,7 +396,6 @@ pub mod query_service_server { + 'static; /// General-purpose prefixed key-value state query API, that can be used to query /// arbitrary prefixes in the JMT storage. - /// Returns a stream of `PrefixValueResponse`s. async fn prefix_value( &self, request: tonic::Request, @@ -277,6 +403,17 @@ pub mod query_service_server { tonic::Response, tonic::Status, >; + /// Server streaming response type for the Watch method. + type WatchStream: tonic::codegen::tokio_stream::Stream< + Item = std::result::Result, + > + + Send + + 'static; + /// Subscribes to a stream of key-value updates, with regex filtering on keys. + async fn watch( + &self, + request: tonic::Request, + ) -> std::result::Result, tonic::Status>; } #[derive(Debug)] pub struct QueryServiceServer { @@ -450,6 +587,53 @@ pub mod query_service_server { }; Box::pin(fut) } + "/penumbra.cnidarium.v1alpha1.QueryService/Watch" => { + #[allow(non_camel_case_types)] + struct WatchSvc(pub Arc); + impl< + T: QueryService, + > tonic::server::ServerStreamingService + for WatchSvc { + type Response = super::WatchResponse; + type ResponseStream = T::WatchStream; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::watch(&inner, request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = WatchSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.server_streaming(method, req).await; + Ok(res) + }; + Box::pin(fut) + } _ => { Box::pin(async move { Ok( diff --git a/crates/cnidarium/src/gen/penumbra.cnidarium.v1alpha1.serde.rs b/crates/cnidarium/src/gen/penumbra.cnidarium.v1alpha1.serde.rs index b762affecd..c3fb51ff5b 100644 --- a/crates/cnidarium/src/gen/penumbra.cnidarium.v1alpha1.serde.rs +++ b/crates/cnidarium/src/gen/penumbra.cnidarium.v1alpha1.serde.rs @@ -546,3 +546,502 @@ impl<'de> serde::Deserialize<'de> for PrefixValueResponse { deserializer.deserialize_struct("penumbra.cnidarium.v1alpha1.PrefixValueResponse", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for WatchRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.key_regex.is_empty() { + len += 1; + } + if !self.nv_key_regex.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.cnidarium.v1alpha1.WatchRequest", len)?; + if !self.key_regex.is_empty() { + struct_ser.serialize_field("keyRegex", &self.key_regex)?; + } + if !self.nv_key_regex.is_empty() { + struct_ser.serialize_field("nvKeyRegex", &self.nv_key_regex)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for WatchRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "key_regex", + "keyRegex", + "nv_key_regex", + "nvKeyRegex", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + KeyRegex, + NvKeyRegex, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "keyRegex" | "key_regex" => Ok(GeneratedField::KeyRegex), + "nvKeyRegex" | "nv_key_regex" => Ok(GeneratedField::NvKeyRegex), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = WatchRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.cnidarium.v1alpha1.WatchRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut key_regex__ = None; + let mut nv_key_regex__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::KeyRegex => { + if key_regex__.is_some() { + return Err(serde::de::Error::duplicate_field("keyRegex")); + } + key_regex__ = Some(map_.next_value()?); + } + GeneratedField::NvKeyRegex => { + if nv_key_regex__.is_some() { + return Err(serde::de::Error::duplicate_field("nvKeyRegex")); + } + nv_key_regex__ = Some(map_.next_value()?); + } + } + } + Ok(WatchRequest { + key_regex: key_regex__.unwrap_or_default(), + nv_key_regex: nv_key_regex__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.cnidarium.v1alpha1.WatchRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for WatchResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.version != 0 { + len += 1; + } + if self.entry.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.cnidarium.v1alpha1.WatchResponse", len)?; + if self.version != 0 { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("version", ToString::to_string(&self.version).as_str())?; + } + if let Some(v) = self.entry.as_ref() { + match v { + watch_response::Entry::Kv(v) => { + struct_ser.serialize_field("kv", v)?; + } + watch_response::Entry::NvKv(v) => { + struct_ser.serialize_field("nvKv", v)?; + } + } + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for WatchResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "version", + "kv", + "nv_kv", + "nvKv", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Version, + Kv, + NvKv, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "version" => Ok(GeneratedField::Version), + "kv" => Ok(GeneratedField::Kv), + "nvKv" | "nv_kv" => Ok(GeneratedField::NvKv), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = WatchResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.cnidarium.v1alpha1.WatchResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut version__ = None; + let mut entry__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Version => { + if version__.is_some() { + return Err(serde::de::Error::duplicate_field("version")); + } + version__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::Kv => { + if entry__.is_some() { + return Err(serde::de::Error::duplicate_field("kv")); + } + entry__ = map_.next_value::<::std::option::Option<_>>()?.map(watch_response::Entry::Kv) +; + } + GeneratedField::NvKv => { + if entry__.is_some() { + return Err(serde::de::Error::duplicate_field("nvKv")); + } + entry__ = map_.next_value::<::std::option::Option<_>>()?.map(watch_response::Entry::NvKv) +; + } + } + } + Ok(WatchResponse { + version: version__.unwrap_or_default(), + entry: entry__, + }) + } + } + deserializer.deserialize_struct("penumbra.cnidarium.v1alpha1.WatchResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for watch_response::KeyValue { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.key.is_empty() { + len += 1; + } + if !self.value.is_empty() { + len += 1; + } + if self.deleted { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.cnidarium.v1alpha1.WatchResponse.KeyValue", len)?; + if !self.key.is_empty() { + struct_ser.serialize_field("key", &self.key)?; + } + if !self.value.is_empty() { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("value", pbjson::private::base64::encode(&self.value).as_str())?; + } + if self.deleted { + struct_ser.serialize_field("deleted", &self.deleted)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for watch_response::KeyValue { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "key", + "value", + "deleted", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Key, + Value, + Deleted, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "key" => Ok(GeneratedField::Key), + "value" => Ok(GeneratedField::Value), + "deleted" => Ok(GeneratedField::Deleted), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = watch_response::KeyValue; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.cnidarium.v1alpha1.WatchResponse.KeyValue") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut key__ = None; + let mut value__ = None; + let mut deleted__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Key => { + if key__.is_some() { + return Err(serde::de::Error::duplicate_field("key")); + } + key__ = Some(map_.next_value()?); + } + GeneratedField::Value => { + if value__.is_some() { + return Err(serde::de::Error::duplicate_field("value")); + } + value__ = + Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) + ; + } + GeneratedField::Deleted => { + if deleted__.is_some() { + return Err(serde::de::Error::duplicate_field("deleted")); + } + deleted__ = Some(map_.next_value()?); + } + } + } + Ok(watch_response::KeyValue { + key: key__.unwrap_or_default(), + value: value__.unwrap_or_default(), + deleted: deleted__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.cnidarium.v1alpha1.WatchResponse.KeyValue", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for watch_response::NvKeyValue { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.key.is_empty() { + len += 1; + } + if !self.value.is_empty() { + len += 1; + } + if self.deleted { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.cnidarium.v1alpha1.WatchResponse.NvKeyValue", len)?; + if !self.key.is_empty() { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("key", pbjson::private::base64::encode(&self.key).as_str())?; + } + if !self.value.is_empty() { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("value", pbjson::private::base64::encode(&self.value).as_str())?; + } + if self.deleted { + struct_ser.serialize_field("deleted", &self.deleted)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for watch_response::NvKeyValue { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "key", + "value", + "deleted", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Key, + Value, + Deleted, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "key" => Ok(GeneratedField::Key), + "value" => Ok(GeneratedField::Value), + "deleted" => Ok(GeneratedField::Deleted), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = watch_response::NvKeyValue; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.cnidarium.v1alpha1.WatchResponse.NvKeyValue") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut key__ = None; + let mut value__ = None; + let mut deleted__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Key => { + if key__.is_some() { + return Err(serde::de::Error::duplicate_field("key")); + } + key__ = + Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) + ; + } + GeneratedField::Value => { + if value__.is_some() { + return Err(serde::de::Error::duplicate_field("value")); + } + value__ = + Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) + ; + } + GeneratedField::Deleted => { + if deleted__.is_some() { + return Err(serde::de::Error::duplicate_field("deleted")); + } + deleted__ = Some(map_.next_value()?); + } + } + } + Ok(watch_response::NvKeyValue { + key: key__.unwrap_or_default(), + value: value__.unwrap_or_default(), + deleted: deleted__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.cnidarium.v1alpha1.WatchResponse.NvKeyValue", FIELDS, GeneratedVisitor) + } +} diff --git a/crates/cnidarium/src/gen/proto_descriptor.bin.no_lfs b/crates/cnidarium/src/gen/proto_descriptor.bin.no_lfs index 5f11bb6b3b41301429ed50eb3447a0945c9b044c..ad8745ec01f5af5a5d47cdbc6c4512e6b2345e35 100644 GIT binary patch delta 3213 zcmcIm&rcjx9N#zdcG-RWo&w!YseK^DvcOWwd%W;jYqOD=ooRVEt=6F7W#&w~IokltiBkeOe z|8bU`nLMPMh1r!txo+Kz<+YuLaZAL>eIuPvDwmYX_+gbLiX~Fwh^%4W63OtN|G^|1 zJ5M2PS!K($w$eH*CG!z9mxO2;c=r5{v2(}DzSSn;R@JTT&wQu(Urw@L+l_}Ju7WYf zRAgOYWQtfbqyC*b6zv7J@YSG57(5m$_`i*^KL4968(_Wu_gVIN_xnunL`-9b-l;8` zd;Z5$Y|metVr?Fye~DhvA>t&U0U09^N&rn=ijWR;d0xD$OhK?md)>Sxm+KqOX05bg zInuRdK{{^DDpaJsEqAQ_$p&#Q>$_V8*K#K0Udb&=)ev&KRCcY}JEiI)X;(?s$%@bu z#o3c+j}W=)NJj`U^}IS3A;i>^nH4)i<1vE|#LoCnFR-1if#gZ?w%|Ob#SA^|f1P7* zUBGu7KueM?oxn>vr7|Z3OX{?eQX)5+L@;O25-^@&e zJmMd0OoY4x!Nvr5zk(Pw@|pFgFS0khY*U_mW>ekDCnO-BMNY({Zt&^Y#ehd0Qq#%P zq8)a0@;jpir3C;_God*k2+o9M1cJF4lqFEZQBE_+lLsRVdbyA)AUX`G0)k!+R6Rf# z+~BjZYs|bW!_DU$8iT5}cVHBD3#A$+rC4xfvCy#OhGkXdrd_F&Tr3e9A-8Br$8#|- z7zk<+^ou^5>=VCZh(Qu^o6}C3KQZ}cG)i_&4UjBVl{S`SX}eU|D8rCz*9wowlDtzb z?;i*xoJqM?v>hu@uh8~}g_0w^U`Y2$-UFnLU*IRyT2l}yE^yJpkY8x; zYGE|PLT^hQ$BW_GBz0nFFP+?R} z9_E^sy$TX(E%9UvBdw)WPYWZhr4xPPx~deepu5_A-JE@)Qo&?+M;1u9toAYchiXL) zc31R;rBatno*SW4Km?UxQSVM75&!U)B0CsrTq+py8u& zqG#}N{nxrr3U2VK;&D}r)o?Qa!RIP`(pv}!Jg&mwBsE78W9&W99_r><FvTh3g_q3)0sE& zX7gz{I`JlB@Az;Uj$gfdHhOa&9)+{B$>}USp0$+- zQm>Veh9gVH7P&9H!*DvDOiy^G&i3hfu4La(50sRKFdVb2?+xjGfbR`}u-S?$7+Ow8 zLz!S)E?rlHs0*cv{@thBer2uaB`fJn+)dC|@&(n1^w`+d2e-&yxWbAR9E_Vv^a6Sp zdWFTwk=w>D;oFq#x@}j`BPE$QX-9Zw>; + + #[instrument(skip(self, request))] + async fn watch( + &self, + request: tonic::Request, + ) -> Result, Status> { + let request = request.into_inner(); + tracing::debug!(?request); + + const MAX_REGEX_LEN: usize = 1024; + + let key_regex = regex::RegexBuilder::new(&request.key_regex) + .size_limit(MAX_REGEX_LEN) + .build() + .map_err(|e| Status::invalid_argument(format!("invalid key_regex: {}", e)))?; + + // Use the `bytes` regex to allow matching byte strings. + let nv_key_regex = regex::bytes::RegexBuilder::new(&request.key_regex) + .size_limit(MAX_REGEX_LEN) + .unicode(false) + .build() + .map_err(|e| Status::invalid_argument(format!("invalid nv_key_regex: {}", e)))?; + + let (tx, rx) = tokio::sync::mpsc::channel::>(10); + + tokio::spawn(watch_changes( + self.storage.clone(), + key_regex, + nv_key_regex, + tx, + )); + + Ok(tonic::Response::new(ReceiverStream::new(rx))) + } +} + +async fn watch_changes( + storage: Storage, + key_regex: regex::Regex, + nv_key_regex: regex::bytes::Regex, + tx: tokio::sync::mpsc::Sender>, +) -> anyhow::Result<()> { + let mut changes_rx = storage.subscribe_changes(); + loop { + // Wait for a new set of changes, reporting an error if we don't get one. + if let Err(e) = changes_rx.changed().await { + tx.send(Err(tonic::Status::internal(e.to_string()))).await?; + } + let (version, changes) = changes_rx.borrow_and_update().clone(); + + for (key, value) in changes.unwritten_changes().iter() { + if key_regex.is_match(key) { + tx.send(Ok(WatchResponse { + version, + entry: Some(wr::Entry::Kv(wr::KeyValue { + key: key.clone(), + value: value.as_ref().cloned().unwrap_or_default(), + deleted: value.is_none(), + })), + })) + .await?; + } + } + + for (key, value) in changes.nonverifiable_changes().iter() { + if nv_key_regex.is_match(key) { + tx.send(Ok(WatchResponse { + version, + entry: Some(wr::Entry::NvKv(wr::NvKeyValue { + key: key.clone(), + value: value.as_ref().cloned().unwrap_or_default(), + deleted: value.is_none(), + })), + })) + .await?; + } + } + } } diff --git a/crates/cnidarium/src/storage.rs b/crates/cnidarium/src/storage.rs index 71ab6e8e07..12450e5af6 100644 --- a/crates/cnidarium/src/storage.rs +++ b/crates/cnidarium/src/storage.rs @@ -35,8 +35,9 @@ impl std::fmt::Debug for Storage { // A private inner element to prevent the `TreeWriter` implementation // from leaking outside of this crate. struct Inner { - tx_dispatcher: watch::Sender, - tx_state: Arc>, + dispatcher_tx: watch::Sender<(Snapshot, (jmt::Version, Arc))>, + snapshot_rx: watch::Receiver, + changes_rx: watch::Receiver<(jmt::Version, Arc)>, snapshots: RwLock, multistore_config: MultistoreConfig, #[allow(dead_code)] @@ -187,29 +188,32 @@ impl Storage { // Setup a dispatcher task that acts as an intermediary between the storage // and the rest of the system. Its purpose is to forward new snapshots to // subscribers. + // // If we were to send snapshots directly to subscribers, a slow subscriber could // hold a lock on the watch channel for too long, and block the consensus-critical // commit logic, which needs to acquire a write lock on the watch channel. - // dispatcher channel (internal): - // - `tx_dispatcher` is used by storage to signal that a new snapshot is available. - // - `rx_dispatcher` is used by the dispatcher to receive new snapshots. - // snapshot channel (external): - // - `tx_state` is used by the dispatcher to signal new snapshots to the rest of the system. - // - `rx_state` is used by various components to subscribe to new snapshots. - let (tx_state, _) = watch::channel(latest_snapshot.clone()); - let (tx_dispatcher, mut rx_dispatcher) = watch::channel(latest_snapshot); - - let tx_state = Arc::new(tx_state); - let tx_state2 = tx_state.clone(); + // + // Instead, we "proxy" through a dispatcher task that copies values from one + // channel to the other, ensuring that if an API consumer misuses the watch + // channels, it will only affect other subscribers, not the commit logic. + + let (snapshot_tx, snapshot_rx) = watch::channel(latest_snapshot.clone()); + // Note: this will never be seen by consumers, since we mark the current value as seen + // before returning the receiver. + let dummy_cache = (u64::MAX, Arc::new(Cache::default())); + let (changes_tx, changes_rx) = watch::channel(dummy_cache.clone()); + let (tx_dispatcher, mut rx_dispatcher) = watch::channel((latest_snapshot, dummy_cache)); + let jh_dispatcher = tokio::spawn(async move { tracing::info!("snapshot dispatcher task has started"); // If the sender is dropped, the task will terminate. while rx_dispatcher.changed().await.is_ok() { tracing::debug!("dispatcher has received a new snapshot"); - let snapshot = rx_dispatcher.borrow_and_update().clone(); + let (snapshot, changes) = rx_dispatcher.borrow_and_update().clone(); // [`watch::Sender::send`] only returns an error if there are no // receivers, so we can safely ignore the result here. - let _ = tx_state2.send(snapshot); + let _ = snapshot_tx.send(snapshot); + let _ = changes_tx.send(changes); } tracing::info!("dispatcher task has terminated") }); @@ -219,8 +223,9 @@ impl Storage { // the task will stop when the sender is dropped. However, certain // test scenarios require us to wait that all resources are released. jh_dispatcher: Some(jh_dispatcher), - tx_dispatcher, - tx_state, + dispatcher_tx: tx_dispatcher, + snapshot_rx, + changes_rx, multistore_config, snapshots, db: shared_db, @@ -240,10 +245,20 @@ impl Storage { /// Returns a [`watch::Receiver`] that can be used to subscribe to new state versions. pub fn subscribe(&self) -> watch::Receiver { - // Calling subscribe() here to create a new receiver ensures - // that all previous values are marked as seen, and the user - // of the receiver will only be notified of *subsequent* values. - self.0.tx_state.subscribe() + let mut rx = self.0.snapshot_rx.clone(); + // Mark the current value as seen, so that the user of the receiver + // will only be notified of *subsequent* values. + rx.borrow_and_update(); + rx + } + + /// Returns a [`watch::Receiver`] that can be used to subscribe to state changes. + pub fn subscribe_changes(&self) -> watch::Receiver<(jmt::Version, Arc)> { + let mut rx = self.0.changes_rx.clone(); + // Mark the current value as seen, so that the user of the receiver + // will only be notified of *subsequent* values. + rx.borrow_and_update(); + rx } /// Returns a new [`Snapshot`] on top of the latest version of the tree. @@ -291,6 +306,9 @@ impl Storage { perform_migration: bool, ) -> Result { tracing::debug!(new_jmt_version = ?version, "committing state delta"); + // Save a copy of the changes to send to subscribers later. + let changes = Arc::new(cache.clone_changes()); + let mut changes_by_substore = cache.shard_by_prefix(&self.0.multistore_config); let mut substore_roots = Vec::new(); let mut multistore_versions = @@ -443,7 +461,10 @@ impl Storage { // Send fails if the channel is closed (i.e., if there are no receivers); // in this case, we should ignore the error, we have no one to notify. - let _ = self.0.tx_dispatcher.send(latest_snapshot); + let _ = self + .0 + .dispatcher_tx + .send((latest_snapshot, (version, changes))); Ok(global_root_hash) } diff --git a/crates/proto/src/gen/penumbra.cnidarium.v1alpha1.rs b/crates/proto/src/gen/penumbra.cnidarium.v1alpha1.rs index 6edd6f9cbc..33b0e9efef 100644 --- a/crates/proto/src/gen/penumbra.cnidarium.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.cnidarium.v1alpha1.rs @@ -91,6 +91,106 @@ impl ::prost::Name for PrefixValueResponse { ::prost::alloc::format!("penumbra.cnidarium.v1alpha1.{}", Self::NAME) } } +/// Requests a stream of new key-value pairs that have been committed to the state. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct WatchRequest { + /// A regex for keys in the verifiable storage. + /// + /// Only key-value updates whose keys match this regex will be returned. + /// Note that the empty string matches all keys. + /// To exclude all keys, use the regex "$^", which matches no strings. + #[prost(string, tag = "1")] + pub key_regex: ::prost::alloc::string::String, + /// A regex for keys in the nonverifiable storage. + /// + /// Only key-value updates whose keys match this regex will be returned. + /// Note that the empty string matches all keys. + /// To exclude all keys, use the regex "$^", which matches no strings. + #[prost(string, tag = "2")] + pub nv_key_regex: ::prost::alloc::string::String, +} +impl ::prost::Name for WatchRequest { + const NAME: &'static str = "WatchRequest"; + const PACKAGE: &'static str = "penumbra.cnidarium.v1alpha1"; + fn full_name() -> ::prost::alloc::string::String { + ::prost::alloc::format!("penumbra.cnidarium.v1alpha1.{}", Self::NAME) + } +} +/// A key-value pair that has been committed to the state. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct WatchResponse { + /// The state version the key-value pair was committed at. + #[prost(uint64, tag = "1")] + pub version: u64, + /// The entry that was committed. + #[prost(oneof = "watch_response::Entry", tags = "5, 6")] + pub entry: ::core::option::Option, +} +/// Nested message and enum types in `WatchResponse`. +pub mod watch_response { + /// Elements of the verifiable storage have string keys. + #[allow(clippy::derive_partial_eq_without_eq)] + #[derive(Clone, PartialEq, ::prost::Message)] + pub struct KeyValue { + #[prost(string, tag = "1")] + pub key: ::prost::alloc::string::String, + #[prost(bytes = "vec", tag = "2")] + pub value: ::prost::alloc::vec::Vec, + /// If set to true, the key-value pair was deleted. + /// This allows distinguishing a deleted key-value pair from a key-value pair whose value is empty. + #[prost(bool, tag = "3")] + pub deleted: bool, + } + impl ::prost::Name for KeyValue { + const NAME: &'static str = "KeyValue"; + const PACKAGE: &'static str = "penumbra.cnidarium.v1alpha1"; + fn full_name() -> ::prost::alloc::string::String { + ::prost::alloc::format!( + "penumbra.cnidarium.v1alpha1.WatchResponse.{}", Self::NAME + ) + } + } + /// Elements of the nonverifiable storage have byte keys. + #[allow(clippy::derive_partial_eq_without_eq)] + #[derive(Clone, PartialEq, ::prost::Message)] + pub struct NvKeyValue { + #[prost(bytes = "vec", tag = "1")] + pub key: ::prost::alloc::vec::Vec, + #[prost(bytes = "vec", tag = "2")] + pub value: ::prost::alloc::vec::Vec, + /// If set to true, the key-value pair was deleted. + /// This allows distinguishing a deleted key-value pair from a key-value pair whose value is empty. + #[prost(bool, tag = "3")] + pub deleted: bool, + } + impl ::prost::Name for NvKeyValue { + const NAME: &'static str = "NvKeyValue"; + const PACKAGE: &'static str = "penumbra.cnidarium.v1alpha1"; + fn full_name() -> ::prost::alloc::string::String { + ::prost::alloc::format!( + "penumbra.cnidarium.v1alpha1.WatchResponse.{}", Self::NAME + ) + } + } + /// The entry that was committed. + #[allow(clippy::derive_partial_eq_without_eq)] + #[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Entry { + #[prost(message, tag = "5")] + Kv(KeyValue), + #[prost(message, tag = "6")] + NvKv(NvKeyValue), + } +} +impl ::prost::Name for WatchResponse { + const NAME: &'static str = "WatchResponse"; + const PACKAGE: &'static str = "penumbra.cnidarium.v1alpha1"; + fn full_name() -> ::prost::alloc::string::String { + ::prost::alloc::format!("penumbra.cnidarium.v1alpha1.{}", Self::NAME) + } +} /// Generated client implementations. #[cfg(feature = "rpc")] pub mod query_service_client { @@ -211,7 +311,6 @@ pub mod query_service_client { } /// General-purpose prefixed key-value state query API, that can be used to query /// arbitrary prefixes in the JMT storage. - /// Returns a stream of `PrefixValueResponse`s. pub async fn prefix_value( &mut self, request: impl tonic::IntoRequest, @@ -242,6 +341,34 @@ pub mod query_service_client { ); self.inner.server_streaming(req, path, codec).await } + /// Subscribes to a stream of key-value updates, with regex filtering on keys. + pub async fn watch( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response>, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/penumbra.cnidarium.v1alpha1.QueryService/Watch", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new("penumbra.cnidarium.v1alpha1.QueryService", "Watch"), + ); + self.inner.server_streaming(req, path, codec).await + } } } /// Generated server implementations. @@ -269,7 +396,6 @@ pub mod query_service_server { + 'static; /// General-purpose prefixed key-value state query API, that can be used to query /// arbitrary prefixes in the JMT storage. - /// Returns a stream of `PrefixValueResponse`s. async fn prefix_value( &self, request: tonic::Request, @@ -277,6 +403,17 @@ pub mod query_service_server { tonic::Response, tonic::Status, >; + /// Server streaming response type for the Watch method. + type WatchStream: tonic::codegen::tokio_stream::Stream< + Item = std::result::Result, + > + + Send + + 'static; + /// Subscribes to a stream of key-value updates, with regex filtering on keys. + async fn watch( + &self, + request: tonic::Request, + ) -> std::result::Result, tonic::Status>; } #[derive(Debug)] pub struct QueryServiceServer { @@ -450,6 +587,53 @@ pub mod query_service_server { }; Box::pin(fut) } + "/penumbra.cnidarium.v1alpha1.QueryService/Watch" => { + #[allow(non_camel_case_types)] + struct WatchSvc(pub Arc); + impl< + T: QueryService, + > tonic::server::ServerStreamingService + for WatchSvc { + type Response = super::WatchResponse; + type ResponseStream = T::WatchStream; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::watch(&inner, request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = WatchSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.server_streaming(method, req).await; + Ok(res) + }; + Box::pin(fut) + } _ => { Box::pin(async move { Ok( diff --git a/crates/proto/src/gen/penumbra.cnidarium.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.cnidarium.v1alpha1.serde.rs index b762affecd..c3fb51ff5b 100644 --- a/crates/proto/src/gen/penumbra.cnidarium.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.cnidarium.v1alpha1.serde.rs @@ -546,3 +546,502 @@ impl<'de> serde::Deserialize<'de> for PrefixValueResponse { deserializer.deserialize_struct("penumbra.cnidarium.v1alpha1.PrefixValueResponse", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for WatchRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.key_regex.is_empty() { + len += 1; + } + if !self.nv_key_regex.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.cnidarium.v1alpha1.WatchRequest", len)?; + if !self.key_regex.is_empty() { + struct_ser.serialize_field("keyRegex", &self.key_regex)?; + } + if !self.nv_key_regex.is_empty() { + struct_ser.serialize_field("nvKeyRegex", &self.nv_key_regex)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for WatchRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "key_regex", + "keyRegex", + "nv_key_regex", + "nvKeyRegex", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + KeyRegex, + NvKeyRegex, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "keyRegex" | "key_regex" => Ok(GeneratedField::KeyRegex), + "nvKeyRegex" | "nv_key_regex" => Ok(GeneratedField::NvKeyRegex), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = WatchRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.cnidarium.v1alpha1.WatchRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut key_regex__ = None; + let mut nv_key_regex__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::KeyRegex => { + if key_regex__.is_some() { + return Err(serde::de::Error::duplicate_field("keyRegex")); + } + key_regex__ = Some(map_.next_value()?); + } + GeneratedField::NvKeyRegex => { + if nv_key_regex__.is_some() { + return Err(serde::de::Error::duplicate_field("nvKeyRegex")); + } + nv_key_regex__ = Some(map_.next_value()?); + } + } + } + Ok(WatchRequest { + key_regex: key_regex__.unwrap_or_default(), + nv_key_regex: nv_key_regex__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.cnidarium.v1alpha1.WatchRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for WatchResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.version != 0 { + len += 1; + } + if self.entry.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.cnidarium.v1alpha1.WatchResponse", len)?; + if self.version != 0 { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("version", ToString::to_string(&self.version).as_str())?; + } + if let Some(v) = self.entry.as_ref() { + match v { + watch_response::Entry::Kv(v) => { + struct_ser.serialize_field("kv", v)?; + } + watch_response::Entry::NvKv(v) => { + struct_ser.serialize_field("nvKv", v)?; + } + } + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for WatchResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "version", + "kv", + "nv_kv", + "nvKv", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Version, + Kv, + NvKv, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "version" => Ok(GeneratedField::Version), + "kv" => Ok(GeneratedField::Kv), + "nvKv" | "nv_kv" => Ok(GeneratedField::NvKv), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = WatchResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.cnidarium.v1alpha1.WatchResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut version__ = None; + let mut entry__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Version => { + if version__.is_some() { + return Err(serde::de::Error::duplicate_field("version")); + } + version__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::Kv => { + if entry__.is_some() { + return Err(serde::de::Error::duplicate_field("kv")); + } + entry__ = map_.next_value::<::std::option::Option<_>>()?.map(watch_response::Entry::Kv) +; + } + GeneratedField::NvKv => { + if entry__.is_some() { + return Err(serde::de::Error::duplicate_field("nvKv")); + } + entry__ = map_.next_value::<::std::option::Option<_>>()?.map(watch_response::Entry::NvKv) +; + } + } + } + Ok(WatchResponse { + version: version__.unwrap_or_default(), + entry: entry__, + }) + } + } + deserializer.deserialize_struct("penumbra.cnidarium.v1alpha1.WatchResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for watch_response::KeyValue { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.key.is_empty() { + len += 1; + } + if !self.value.is_empty() { + len += 1; + } + if self.deleted { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.cnidarium.v1alpha1.WatchResponse.KeyValue", len)?; + if !self.key.is_empty() { + struct_ser.serialize_field("key", &self.key)?; + } + if !self.value.is_empty() { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("value", pbjson::private::base64::encode(&self.value).as_str())?; + } + if self.deleted { + struct_ser.serialize_field("deleted", &self.deleted)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for watch_response::KeyValue { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "key", + "value", + "deleted", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Key, + Value, + Deleted, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "key" => Ok(GeneratedField::Key), + "value" => Ok(GeneratedField::Value), + "deleted" => Ok(GeneratedField::Deleted), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = watch_response::KeyValue; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.cnidarium.v1alpha1.WatchResponse.KeyValue") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut key__ = None; + let mut value__ = None; + let mut deleted__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Key => { + if key__.is_some() { + return Err(serde::de::Error::duplicate_field("key")); + } + key__ = Some(map_.next_value()?); + } + GeneratedField::Value => { + if value__.is_some() { + return Err(serde::de::Error::duplicate_field("value")); + } + value__ = + Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) + ; + } + GeneratedField::Deleted => { + if deleted__.is_some() { + return Err(serde::de::Error::duplicate_field("deleted")); + } + deleted__ = Some(map_.next_value()?); + } + } + } + Ok(watch_response::KeyValue { + key: key__.unwrap_or_default(), + value: value__.unwrap_or_default(), + deleted: deleted__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.cnidarium.v1alpha1.WatchResponse.KeyValue", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for watch_response::NvKeyValue { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.key.is_empty() { + len += 1; + } + if !self.value.is_empty() { + len += 1; + } + if self.deleted { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.cnidarium.v1alpha1.WatchResponse.NvKeyValue", len)?; + if !self.key.is_empty() { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("key", pbjson::private::base64::encode(&self.key).as_str())?; + } + if !self.value.is_empty() { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("value", pbjson::private::base64::encode(&self.value).as_str())?; + } + if self.deleted { + struct_ser.serialize_field("deleted", &self.deleted)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for watch_response::NvKeyValue { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "key", + "value", + "deleted", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Key, + Value, + Deleted, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "key" => Ok(GeneratedField::Key), + "value" => Ok(GeneratedField::Value), + "deleted" => Ok(GeneratedField::Deleted), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = watch_response::NvKeyValue; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.cnidarium.v1alpha1.WatchResponse.NvKeyValue") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut key__ = None; + let mut value__ = None; + let mut deleted__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Key => { + if key__.is_some() { + return Err(serde::de::Error::duplicate_field("key")); + } + key__ = + Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) + ; + } + GeneratedField::Value => { + if value__.is_some() { + return Err(serde::de::Error::duplicate_field("value")); + } + value__ = + Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) + ; + } + GeneratedField::Deleted => { + if deleted__.is_some() { + return Err(serde::de::Error::duplicate_field("deleted")); + } + deleted__ = Some(map_.next_value()?); + } + } + } + Ok(watch_response::NvKeyValue { + key: key__.unwrap_or_default(), + value: value__.unwrap_or_default(), + deleted: deleted__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.cnidarium.v1alpha1.WatchResponse.NvKeyValue", FIELDS, GeneratedVisitor) + } +} diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index 7cfebdc11cbc99f7ffcc40e7d16b3923c3688b75..44fc8f742c6c276e7d377a17497ab0b53e323c83 100644 GIT binary patch delta 6256 zcmcIoTTEQX8QwE<7ItR=FKfWd;da1lF3W9Mz@$EyzO`9|G)X?zs~GWe^K?l-&H;RV}o5|AI98&JZ@O-k4#?U4qP+Z+_zulA-6uw z8n(8s8DH@S--?Qoi0Sj4cJGXvRncw{6pZ^Kocj{ut|6G|iUx#XR81~lN8^*9vSt+W;9}Q6gErUT1hHM&d z_1Bm|Q6WmzR|B6#SrK#KU12dVX<5XqW%b-TOsw_p;!{RnxK=cXha@K>&N}xyPZ@`j zb*9i9_zKRtP)!kov#!<>j^qSrWP7a7D9ZjD#?f%2*e#C9MKfaBtj&G#hH)%xi#=ja zZe-F%E$*Lg81spi!bbRtjaow0dLv+Pw?u2ju-3wI%)Rh=<3J*|P0OIq+q4X5#h^8+ zwOE9=x^H~m7|XYA(_+wS4OJHQV$f=>s)p+jlmJ52&U!eIpAcl*0~I1fYh-(eX{#mX zDR9QUztWlL2KEB*B*q zSBhEiAy4=FM%=A08ngNRfm+EWvvY_kR|9}*NK>g49SR6Z3KKUF)B>I$r%}ONE-n}YeAI?Ku|k`JfvLX48b2`jbcFQQS`^OH?ao2 zvE3?EK+qejZx9DyJgRQOcf`H^v~eIm5!fxcWX(;oE@=V)s3w`pVpVvP&28Qqs3zl` zS`E8Qu`0bpmQQKRO=(UKAQ5yVBwHgSsav-=@zF~yi-`?aSX#8>*gnUhI z!?XOzR47m-&nbILnRYe+oL#2R2?Wc^w6lR=Ss9!?Dq9kkD%|fr%g2T*m?{DvqYhIM z@>&IXsUlkFKG3e{h>N7uMv{fyrdxbqI9$-CR11f^jzp;zZc(}8lc^T&O^7b34XTLy z(k9hMxl_gjh(vmN#RVyk22vG2dJ^KKl!p^) z-0RQrQ}G&Bq8a^=uPOD;=7)TZRWC-QJPePze}9f2j7L#9sx_8CKHB6p$`Z&&6aC_# zlrN2N%RTixA04&|r!NJG74qyag|^i-thq{|Z5@0F8Aih(5aIRiub$`0czwaT0OadS z8?<}?^7VEzh8W2QF)iKLZGIr$$h-y|gnVP|UM(Mld}C{ySVWSbueSIG+%Mhci}@BL z2@NL$HwJSr+oy&T5VZG-h$zRn1ES=PnL~1}NrDWy6zw}JKr zvuQdiDnL-j&H5s4hJ3uCx%dIxG$i}UC8XW$mcPIUySiDEbR@n(quW*~uf|I^Qoe)a zX}64d&F-iV_f-G>pU)BuuD8=@377>(#;L5~V3SQ=tQ2P;Mcw!Egw_>8%IKQIotqaSe*AJcsa3ovy|k1rq)jbVIs!!z>q z++bBsCpqmZ6YCeTE&Cp;kkEh7EWKf-{4M zJp{U$t*2k%OPAT*)~&z2!$U0J@`xyVJe9k+wBTG{bF#Teod{lWHqWm*mz^i0hHbP5 z7XtXOKsbV#n_fR(TxW7!q}OM)M9ZI^B!;L-l5wA+S93(HRqUbfn8aT92b7temz=T4P5vc*#}VcEKM zTm|Q6Q+iTY@rE*TT%idVdE!i?7?8W7k zoU=N=oW5*l(j=ShkwY6hQL=|iZI-rJ!qq(TVChr|_im#FbIxIcfN zU#Y0UO;tWDsV7EN#Wr5&ag;XAAMji5_y5I*;#T2iL5{G3s?({%T6i(GOL$}atkxdW-VUxr=DSpUE60?vstBkJGv2OezShm z${7an#%9Q?>7d$GGj2bRz((2pWA2+D@DuUaj<-c@$J-)?21-7VZNAk#{vmwOs_*Xj zhAmoK)x=l*y%mFNQnkZ4UhO~pkWW^`16Hvec5Q2iU4?c6OiGhUmJpH77d2wtesbd zxUsyl0u!-MZf!N~Tb2Y^)iu?s)JLtSprne{el%k{PhMPEyW|wU zcG+v#kd)OPEwOVgsQ#s8?Cmk6^BGO5E1%AdoFCO$p&n$TL3O79LKsJ@Ys7oXMR3>z zv#h^9*hT3~`oDT9e_wlgfSW!wFZH1z{ts^2<|TLh%Vu3(z0}oHa{{*ps!u#MkNQ%E zHH?HQ_FYOu700Di_Caa5Eeq*IaTFK9NhG14ZrIc81h@9vQ!CC@45%!1^;{lN{iI)2 zrt2grc5|Wu>9oF@15s|zn7d^clMo@F(SJ!v4Dp#zMR6TrpTS#}uHUq7#sPwsyIFRo^;V)cGvS(0izq84S1p@ONmOCxcrIb4Jb z7^j*Gh6(4D0FE`cyGl&SP~pXLl0D9?p`D>Zr2bvSPj>bY}T#R{PUhF4B|p`!FZ!>UoJk0Lr*Dn68XUjhOp}y-73}JMrW|6Uc-)Oup_-c{PfH_%bws?liX5XG*wfe7mNb>wi%F^3rzR d^!}Y9&hxuGPV&zAJ<;3qAM>sGkIi(;zX7|gtSSHi delta 3901 zcmY*cU2L0I8UD^s?9a!E6MwNC=W|@=&$08xaU45oUAOsZnl>Tsw*E*R0&xLjWw2^= zNc4BYUD~Z%Mq>O(m)K@#&do?yS?-C zo%eapd*1gw?|b~#A5!n$OI`mtp%>`gqWt@l#FrO1%gCh*q$JNh#g^o+uCnspjSJ*E zeX$2w5%IX=JSkuNF)hf??XvhlP24Afa>wJssmbk&qYMI30juzYh*h$Ax6aGdLynjn&Q5{CV%%^l9s=` zMh?`bx;tVSJ5I&Zc1K`rGL;<_O-sjeQBJ);TD9UsETTR?#3Eo7!CJ8_>ami%^8#7x zlpbPHuuAb{cP|Q7DV0VHksTK~o23g3s81o-&bkQ^S8M7J0UtL@)QKoG7$O)3L%9$^ zGT2wJG~#vG9G|gk1iU$(3=w#9-b9GNo0~3L9^9|+hFzkdRk+GD{G#d%mF#?oK&#a1 zmIg4-_t_-|+C1+Jgb=*>L^edqG?%wL?y)K#wM!hlDvyT;b1GFMo@)I|tlR zt)9S@3AU>4T1#KPW3-}O0D#mnYO2^=ykirka1Bz&f;mgWF2`x=d*{b;zKK28J|6dmMGbrP zd3?utO#bCMsdaYTj3)J|D79&z^#HI}+wKJf!S;lS84&hrmuD>vODCu)us*7ybizgn zNUg;ZR#HXj1RA6A0DbqQbB6fSQocy$J14CZ5#_`w>jVItIAxsxg4!wT1Q66tStlYY ztfy&8Zv+4*PFp8{)LP7h0SL6y2*a|V5j2dm4o1YRJi1Hj{TL<{ebl09RZI#!J^Gz- z`J-KSe5l_|=|JfoG(c1G`$tKb6?}s`18`?WcPV%}D9bn4T62(^d*M*kbOz&L_fUr! z%yt_R*n_iysB1RrE-7EX!IqlIE?ZS!G9ET56{h5*DJOIyu#*clQPFIGVHv;4s==_0 zxI-E2hbQKASb>yDbwPYd+oR{C?uE+9n`(;)S@?Gy-*yp2pYwyB7KR$uE zrtD*wr1H&|St}^euqVf0Ul^UT_A%HOW=i55>H)2G%2}4~Eq1Omg?do)ir_WDr|FED zS3qD-3r`GS0s^UvP~->nsM8QfDe_Ve!@O9o_b|3AF7LO}*sw%rLupksim9YK#Joq! zyk@!R;?OQ*%BhEmUWR?SG}pt>E+g^AZS?toRzhu6Qi0Vb=xA_T4NM~i2y%HqBGy3U+^39 z-upZw7jLt2vlY>oL@mP0R#wj|g>bmmp(E;W3PHcM@p;wT)HGgow&izkv*pC9JFXwF zIy>v~jSFl;u6@cP!FqS7svxi1d1hwuI_B9t;-b&KA&1{ieUyDg1VJo8+y0wGKK~zfNuEKP#K~_w zeeSE5&wlazH|3GrEOl4~C=t;IKxPPHlJKV0{t6*$i3R;0Q3&27_J2k^YX(Qk$;o&B z%brc7@O;sKJJhYnsH|-V85>aK8u}TVFq8QV0#U<{Fqi zv-qn~*7k7Dm*Qge2J?hKRi_aCz-g2_kTqLYujMJI8)R19+(- penumbra.cnidarium.v1alpha1.KeyValueResponse.Value - 5, // 1: penumbra.cnidarium.v1alpha1.KeyValueResponse.proof:type_name -> ibc.core.commitment.v1.MerkleProof - 0, // 2: penumbra.cnidarium.v1alpha1.QueryService.KeyValue:input_type -> penumbra.cnidarium.v1alpha1.KeyValueRequest - 2, // 3: penumbra.cnidarium.v1alpha1.QueryService.PrefixValue:input_type -> penumbra.cnidarium.v1alpha1.PrefixValueRequest - 1, // 4: penumbra.cnidarium.v1alpha1.QueryService.KeyValue:output_type -> penumbra.cnidarium.v1alpha1.KeyValueResponse - 3, // 5: penumbra.cnidarium.v1alpha1.QueryService.PrefixValue:output_type -> penumbra.cnidarium.v1alpha1.PrefixValueResponse - 4, // [4:6] is the sub-list for method output_type - 2, // [2:4] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name + 6, // 0: penumbra.cnidarium.v1alpha1.KeyValueResponse.value:type_name -> penumbra.cnidarium.v1alpha1.KeyValueResponse.Value + 9, // 1: penumbra.cnidarium.v1alpha1.KeyValueResponse.proof:type_name -> ibc.core.commitment.v1.MerkleProof + 7, // 2: penumbra.cnidarium.v1alpha1.WatchResponse.kv:type_name -> penumbra.cnidarium.v1alpha1.WatchResponse.KeyValue + 8, // 3: penumbra.cnidarium.v1alpha1.WatchResponse.nv_kv:type_name -> penumbra.cnidarium.v1alpha1.WatchResponse.NvKeyValue + 0, // 4: penumbra.cnidarium.v1alpha1.QueryService.KeyValue:input_type -> penumbra.cnidarium.v1alpha1.KeyValueRequest + 2, // 5: penumbra.cnidarium.v1alpha1.QueryService.PrefixValue:input_type -> penumbra.cnidarium.v1alpha1.PrefixValueRequest + 4, // 6: penumbra.cnidarium.v1alpha1.QueryService.Watch:input_type -> penumbra.cnidarium.v1alpha1.WatchRequest + 1, // 7: penumbra.cnidarium.v1alpha1.QueryService.KeyValue:output_type -> penumbra.cnidarium.v1alpha1.KeyValueResponse + 3, // 8: penumbra.cnidarium.v1alpha1.QueryService.PrefixValue:output_type -> penumbra.cnidarium.v1alpha1.PrefixValueResponse + 5, // 9: penumbra.cnidarium.v1alpha1.QueryService.Watch:output_type -> penumbra.cnidarium.v1alpha1.WatchResponse + 7, // [7:10] is the sub-list for method output_type + 4, // [4:7] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name } func init() { file_penumbra_cnidarium_v1alpha1_cnidarium_proto_init() } @@ -469,6 +801,30 @@ func file_penumbra_cnidarium_v1alpha1_cnidarium_proto_init() { } } file_penumbra_cnidarium_v1alpha1_cnidarium_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WatchRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_cnidarium_v1alpha1_cnidarium_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WatchResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_cnidarium_v1alpha1_cnidarium_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*KeyValueResponse_Value); i { case 0: return &v.state @@ -480,6 +836,34 @@ func file_penumbra_cnidarium_v1alpha1_cnidarium_proto_init() { return nil } } + file_penumbra_cnidarium_v1alpha1_cnidarium_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WatchResponse_KeyValue); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_cnidarium_v1alpha1_cnidarium_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WatchResponse_NvKeyValue); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_penumbra_cnidarium_v1alpha1_cnidarium_proto_msgTypes[5].OneofWrappers = []interface{}{ + (*WatchResponse_Kv)(nil), + (*WatchResponse_NvKv)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -487,7 +871,7 @@ func file_penumbra_cnidarium_v1alpha1_cnidarium_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_cnidarium_v1alpha1_cnidarium_proto_rawDesc, NumEnums: 0, - NumMessages: 5, + NumMessages: 9, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/go/gen/penumbra/core/app/v1alpha1/app.pb.go b/proto/go/gen/penumbra/core/app/v1alpha1/app.pb.go index b51947e985..ff135d7606 100644 --- a/proto/go/gen/penumbra/core/app/v1alpha1/app.pb.go +++ b/proto/go/gen/penumbra/core/app/v1alpha1/app.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/app/v1alpha1/app.proto diff --git a/proto/go/gen/penumbra/core/asset/v1alpha1/asset.pb.go b/proto/go/gen/penumbra/core/asset/v1alpha1/asset.pb.go index f42fa117c8..2c8407e352 100644 --- a/proto/go/gen/penumbra/core/asset/v1alpha1/asset.pb.go +++ b/proto/go/gen/penumbra/core/asset/v1alpha1/asset.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/asset/v1alpha1/asset.proto diff --git a/proto/go/gen/penumbra/core/component/chain/v1alpha1/chain.pb.go b/proto/go/gen/penumbra/core/component/chain/v1alpha1/chain.pb.go index 5e7e80954d..885a003812 100644 --- a/proto/go/gen/penumbra/core/component/chain/v1alpha1/chain.pb.go +++ b/proto/go/gen/penumbra/core/component/chain/v1alpha1/chain.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/chain/v1alpha1/chain.proto diff --git a/proto/go/gen/penumbra/core/component/compact_block/v1alpha1/compact_block.pb.go b/proto/go/gen/penumbra/core/component/compact_block/v1alpha1/compact_block.pb.go index 986f115279..f10f73e391 100644 --- a/proto/go/gen/penumbra/core/component/compact_block/v1alpha1/compact_block.pb.go +++ b/proto/go/gen/penumbra/core/component/compact_block/v1alpha1/compact_block.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/compact_block/v1alpha1/compact_block.proto @@ -12,7 +12,6 @@ import ( v1alpha14 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/fee/v1alpha1" v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/sct/v1alpha1" v1alpha15 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1" - _ "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/transaction/v1alpha1" v1alpha11 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/tct/v1alpha1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -557,152 +556,149 @@ var file_penumbra_core_component_compact_block_v1alpha1_compact_block_proto_rawD 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x74, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x63, 0x74, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, - 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xdb, 0x05, 0x0a, 0x0c, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x12, 0x63, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x4f, 0x0a, 0x0a, 0x6e, 0x75, 0x6c, 0x6c, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x6e, - 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, - 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, - 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, - 0x6f, 0x74, 0x12, 0x47, 0x0a, 0x0a, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x72, 0x6f, 0x6f, 0x74, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, - 0x52, 0x09, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, - 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x5c, 0x0a, 0x0e, 0x66, 0x6d, 0x64, 0x5f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0d, 0x66, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x5c, 0x0a, 0x0c, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x77, 0x61, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x73, 0x77, 0x61, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x70, 0x70, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x14, 0x61, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x0a, 0x67, 0x61, 0x73, 0x5f, - 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x09, 0x67, - 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x22, 0x8a, 0x05, 0x0a, 0x0c, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x09, 0x72, 0x6f, 0x6c, - 0x6c, 0x65, 0x64, 0x5f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x65, - 0x64, 0x55, 0x70, 0x48, 0x00, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x55, 0x70, 0x12, - 0x57, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x4e, 0x6f, 0x74, 0x65, - 0x48, 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x57, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xdb, 0x05, 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x63, 0x0a, + 0x0e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x73, 0x12, 0x4f, 0x0a, 0x0a, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, + 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, + 0x74, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x47, 0x0a, 0x0a, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x09, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, + 0x12, 0x5c, 0x0a, 0x0e, 0x66, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x46, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, + 0x0d, 0x66, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5c, + 0x0a, 0x0c, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, + 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x53, 0x77, 0x61, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x0b, 0x73, 0x77, 0x61, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x16, + 0x61, 0x70, 0x70, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x5f, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x70, + 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x0a, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x61, + 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x09, 0x67, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x73, 0x22, 0x8a, 0x05, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, + 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x75, 0x70, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, - 0x70, 0x1a, 0x59, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x55, 0x70, 0x12, 0x4d, 0x0a, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x57, 0x0a, 0x04, - 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x4f, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, - 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, - 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x1a, 0x4d, 0x0a, 0x04, 0x53, 0x77, 0x61, 0x70, 0x12, 0x45, 0x0a, - 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x04, - 0x73, 0x77, 0x61, 0x70, 0x42, 0x0f, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x96, 0x01, 0x0a, 0x18, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, - 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x21, 0x0a, - 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x22, 0x7e, - 0x0a, 0x19, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x0d, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x32, 0xbb, - 0x01, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0xaa, 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x48, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x55, 0x70, 0x48, 0x00, 0x52, + 0x08, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x55, 0x70, 0x12, 0x57, 0x0a, 0x04, 0x6e, 0x6f, 0x74, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x6f, + 0x74, 0x65, 0x12, 0x57, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x53, + 0x77, 0x61, 0x70, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x1a, 0x59, 0x0a, 0x08, 0x52, + 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x55, 0x70, 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, + 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x57, 0x0a, 0x04, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x4f, + 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, + 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x1a, + 0x4d, 0x0a, 0x04, 0x53, 0x77, 0x61, 0x70, 0x12, 0x45, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x49, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, + 0x70, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x42, 0x0f, + 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, + 0x96, 0x01, 0x0a, 0x18, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6e, + 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6b, 0x65, 0x65, + 0x70, 0x5f, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6b, + 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x22, 0x7e, 0x0a, 0x19, 0x43, 0x6f, 0x6d, 0x70, + 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, + 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, + 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x32, 0xbb, 0x01, 0x0a, 0x0c, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x43, 0x6f, + 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, + 0x48, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x61, 0x6e, - 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x95, 0x03, 0x0a, - 0x32, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x42, 0x11, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x73, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, - 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, - 0x50, 0x43, 0x43, 0x43, 0xaa, 0x02, 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, - 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5c, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x39, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, - 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5c, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0xea, 0x02, 0x31, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, - 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x43, 0x6f, - 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x49, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, + 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x95, 0x03, 0x0a, 0x32, 0x63, 0x6f, 0x6d, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x11, 0x43, + 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x73, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, + 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, + 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x43, 0xaa, 0x02, + 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, + 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, + 0x39, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x31, 0x50, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/go/gen/penumbra/core/component/dao/v1alpha1/dao.pb.go b/proto/go/gen/penumbra/core/component/dao/v1alpha1/dao.pb.go index 95b04ba89b..bc58764418 100644 --- a/proto/go/gen/penumbra/core/component/dao/v1alpha1/dao.pb.go +++ b/proto/go/gen/penumbra/core/component/dao/v1alpha1/dao.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/dao/v1alpha1/dao.proto diff --git a/proto/go/gen/penumbra/core/component/dex/v1alpha1/dex.pb.go b/proto/go/gen/penumbra/core/component/dex/v1alpha1/dex.pb.go index 301036bbcb..f8d2e0c20d 100644 --- a/proto/go/gen/penumbra/core/component/dex/v1alpha1/dex.pb.go +++ b/proto/go/gen/penumbra/core/component/dex/v1alpha1/dex.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/dex/v1alpha1/dex.proto diff --git a/proto/go/gen/penumbra/core/component/distributions/v1alpha1/distributions.pb.go b/proto/go/gen/penumbra/core/component/distributions/v1alpha1/distributions.pb.go index 07dac232c5..a3a8170413 100644 --- a/proto/go/gen/penumbra/core/component/distributions/v1alpha1/distributions.pb.go +++ b/proto/go/gen/penumbra/core/component/distributions/v1alpha1/distributions.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/distributions/v1alpha1/distributions.proto diff --git a/proto/go/gen/penumbra/core/component/fee/v1alpha1/fee.pb.go b/proto/go/gen/penumbra/core/component/fee/v1alpha1/fee.pb.go index 9e86de8b13..54a03a6eff 100644 --- a/proto/go/gen/penumbra/core/component/fee/v1alpha1/fee.pb.go +++ b/proto/go/gen/penumbra/core/component/fee/v1alpha1/fee.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/fee/v1alpha1/fee.proto diff --git a/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go b/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go index 69048709f1..114ca3defb 100644 --- a/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go +++ b/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/governance/v1alpha1/governance.proto diff --git a/proto/go/gen/penumbra/core/component/ibc/v1alpha1/ibc.pb.go b/proto/go/gen/penumbra/core/component/ibc/v1alpha1/ibc.pb.go index 1db4e7464f..3f01c9da27 100644 --- a/proto/go/gen/penumbra/core/component/ibc/v1alpha1/ibc.pb.go +++ b/proto/go/gen/penumbra/core/component/ibc/v1alpha1/ibc.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/ibc/v1alpha1/ibc.proto diff --git a/proto/go/gen/penumbra/core/component/sct/v1alpha1/sct.pb.go b/proto/go/gen/penumbra/core/component/sct/v1alpha1/sct.pb.go index fceeb21fcd..dc2b10a5aa 100644 --- a/proto/go/gen/penumbra/core/component/sct/v1alpha1/sct.pb.go +++ b/proto/go/gen/penumbra/core/component/sct/v1alpha1/sct.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/sct/v1alpha1/sct.proto package sctv1alpha1 import ( - _ "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/chain/v1alpha1" v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/tct/v1alpha1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -742,123 +741,120 @@ var file_penumbra_core_component_sct_v1alpha1_sct_proto_rawDesc = []byte{ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x24, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x74, 0x63, 0x74, 0x2f, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0x8c, 0x06, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x66, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x00, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x6e, 0x0a, 0x0f, 0x69, 0x63, 0x73, 0x5f, 0x32, 0x30, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x74, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8c, + 0x06, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x66, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x48, 0x00, - 0x52, 0x0d, 0x69, 0x63, 0x73, 0x32, 0x30, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, - 0x80, 0x01, 0x0a, 0x15, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x4a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x48, 0x00, 0x52, 0x13, 0x66, - 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x12, 0x61, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x44, - 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x5a, 0x0a, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, - 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x47, - 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x48, 0x00, 0x52, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, - 0x73, 0x1a, 0x09, 0x0a, 0x07, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x1a, 0x1d, 0x0a, 0x0b, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x36, 0x0a, 0x13, 0x46, - 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x1a, 0x0b, 0x0a, 0x09, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x1a, 0x65, 0x0a, 0x0d, 0x49, 0x63, 0x73, 0x32, 0x30, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, - 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x71, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x65, 0x71, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x22, 0x21, 0x0a, 0x09, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x14, - 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, - 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x46, 0x0a, 0x11, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x70, 0x65, - 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0b, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xcc, 0x01, 0x0a, - 0x0f, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x06, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6e, 0x0a, 0x0f, 0x69, + 0x63, 0x73, 0x5f, 0x32, 0x30, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x49, 0x63, 0x73, + 0x32, 0x30, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x69, 0x63, + 0x73, 0x32, 0x30, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x80, 0x01, 0x0a, 0x15, + 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x67, 0x0a, 0x0b, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, - 0x63, 0x68, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, - 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x22, 0x64, 0x0a, 0x0e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x70, 0x6f, - 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x04, - 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x66, 0x0a, 0x0e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x3c, 0x0a, 0x04, - 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, - 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x32, 0x0e, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x42, 0xca, 0x02, 0x0a, 0x28, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, - 0x08, 0x53, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x3b, 0x73, 0x63, 0x74, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, - 0x43, 0x43, 0x53, 0xaa, 0x02, 0x24, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, - 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x63, - 0x74, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x24, 0x50, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0xe2, 0x02, 0x30, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, - 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x63, 0x74, 0x5c, - 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, - 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x3a, 0x3a, 0x53, 0x63, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x63, 0x65, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x48, 0x00, 0x52, 0x13, 0x66, 0x75, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x61, + 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x1e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x12, 0x5a, 0x0a, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x18, 0x28, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, + 0x69, 0x73, 0x48, 0x00, 0x52, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x1a, 0x09, 0x0a, + 0x07, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x1a, 0x1d, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x36, 0x0a, 0x13, 0x46, 0x75, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0a, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x1a, + 0x0b, 0x0a, 0x09, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x1a, 0x65, 0x0a, 0x0d, + 0x49, 0x63, 0x73, 0x32, 0x30, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x1d, 0x0a, + 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x21, 0x0a, + 0x09, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, + 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, + 0x22, 0x46, 0x0a, 0x11, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x70, 0x65, + 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xcc, 0x01, 0x0a, 0x0f, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0a, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x67, 0x0a, 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, + 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x22, 0x64, 0x0a, 0x0e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x6f, + 0x6f, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x66, 0x0a, 0x0e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, + 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x32, 0x0e, + 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0xca, + 0x02, 0x0a, 0x28, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x08, 0x53, 0x63, 0x74, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, + 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, + 0x73, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x73, 0x63, 0x74, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x53, 0xaa, + 0x02, 0x24, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, + 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x74, 0x2e, 0x56, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x24, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x5c, 0x53, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x30, + 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0xea, 0x02, 0x28, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, + 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x53, 0x63, + 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( diff --git a/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go b/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go index 251ab2cb60..ff9964f34e 100644 --- a/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go +++ b/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto diff --git a/proto/go/gen/penumbra/core/component/stake/v1alpha1/stake.pb.go b/proto/go/gen/penumbra/core/component/stake/v1alpha1/stake.pb.go index 7b9cf777de..a44b11cbf5 100644 --- a/proto/go/gen/penumbra/core/component/stake/v1alpha1/stake.pb.go +++ b/proto/go/gen/penumbra/core/component/stake/v1alpha1/stake.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/stake/v1alpha1/stake.proto diff --git a/proto/go/gen/penumbra/core/keys/v1alpha1/keys.pb.go b/proto/go/gen/penumbra/core/keys/v1alpha1/keys.pb.go index baec8b610b..ca4a0d54cb 100644 --- a/proto/go/gen/penumbra/core/keys/v1alpha1/keys.pb.go +++ b/proto/go/gen/penumbra/core/keys/v1alpha1/keys.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/keys/v1alpha1/keys.proto diff --git a/proto/go/gen/penumbra/core/num/v1alpha1/num.pb.go b/proto/go/gen/penumbra/core/num/v1alpha1/num.pb.go index 216c2ebd29..6c8b9b629e 100644 --- a/proto/go/gen/penumbra/core/num/v1alpha1/num.pb.go +++ b/proto/go/gen/penumbra/core/num/v1alpha1/num.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/num/v1alpha1/num.proto diff --git a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go index 7dfffb9a29..0cc8bfbb2b 100644 --- a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go +++ b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/transaction/v1alpha1/transaction.proto diff --git a/proto/go/gen/penumbra/crypto/decaf377_fmd/v1alpha1/decaf377_fmd.pb.go b/proto/go/gen/penumbra/crypto/decaf377_fmd/v1alpha1/decaf377_fmd.pb.go index 38531f67f7..1be2be4dc7 100644 --- a/proto/go/gen/penumbra/crypto/decaf377_fmd/v1alpha1/decaf377_fmd.pb.go +++ b/proto/go/gen/penumbra/crypto/decaf377_fmd/v1alpha1/decaf377_fmd.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/crypto/decaf377_fmd/v1alpha1/decaf377_fmd.proto diff --git a/proto/go/gen/penumbra/crypto/decaf377_frost/v1alpha1/decaf377_frost.pb.go b/proto/go/gen/penumbra/crypto/decaf377_frost/v1alpha1/decaf377_frost.pb.go index 7fd91635ca..f85fc0d860 100644 --- a/proto/go/gen/penumbra/crypto/decaf377_frost/v1alpha1/decaf377_frost.pb.go +++ b/proto/go/gen/penumbra/crypto/decaf377_frost/v1alpha1/decaf377_frost.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/crypto/decaf377_frost/v1alpha1/decaf377_frost.proto diff --git a/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.pb.go b/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.pb.go index c4bb76d1f1..454bad2be6 100644 --- a/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.pb.go +++ b/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.proto diff --git a/proto/go/gen/penumbra/crypto/tct/v1alpha1/tct.pb.go b/proto/go/gen/penumbra/crypto/tct/v1alpha1/tct.pb.go index 6f9654a172..99f0b24784 100644 --- a/proto/go/gen/penumbra/crypto/tct/v1alpha1/tct.pb.go +++ b/proto/go/gen/penumbra/crypto/tct/v1alpha1/tct.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/crypto/tct/v1alpha1/tct.proto diff --git a/proto/go/gen/penumbra/custody/threshold/v1alpha1/threshold.pb.go b/proto/go/gen/penumbra/custody/threshold/v1alpha1/threshold.pb.go index f232d28662..3a1cf1bf33 100644 --- a/proto/go/gen/penumbra/custody/threshold/v1alpha1/threshold.pb.go +++ b/proto/go/gen/penumbra/custody/threshold/v1alpha1/threshold.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/custody/threshold/v1alpha1/threshold.proto diff --git a/proto/go/gen/penumbra/custody/v1alpha1/custody.pb.go b/proto/go/gen/penumbra/custody/v1alpha1/custody.pb.go index 7f265f2924..c76f5eb911 100644 --- a/proto/go/gen/penumbra/custody/v1alpha1/custody.pb.go +++ b/proto/go/gen/penumbra/custody/v1alpha1/custody.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/custody/v1alpha1/custody.proto diff --git a/proto/go/gen/penumbra/tools/summoning/v1alpha1/summoning.pb.go b/proto/go/gen/penumbra/tools/summoning/v1alpha1/summoning.pb.go index fcb9d95636..34766389ad 100644 --- a/proto/go/gen/penumbra/tools/summoning/v1alpha1/summoning.pb.go +++ b/proto/go/gen/penumbra/tools/summoning/v1alpha1/summoning.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/tools/summoning/v1alpha1/summoning.proto diff --git a/proto/go/gen/penumbra/util/tendermint_proxy/v1alpha1/tendermint_proxy.pb.go b/proto/go/gen/penumbra/util/tendermint_proxy/v1alpha1/tendermint_proxy.pb.go index 926f710aa1..09dcc4bdc9 100644 --- a/proto/go/gen/penumbra/util/tendermint_proxy/v1alpha1/tendermint_proxy.pb.go +++ b/proto/go/gen/penumbra/util/tendermint_proxy/v1alpha1/tendermint_proxy.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/util/tendermint_proxy/v1alpha1/tendermint_proxy.proto diff --git a/proto/go/gen/penumbra/view/v1alpha1/view.pb.go b/proto/go/gen/penumbra/view/v1alpha1/view.pb.go index ccbf528888..55d0a710b5 100644 --- a/proto/go/gen/penumbra/view/v1alpha1/view.pb.go +++ b/proto/go/gen/penumbra/view/v1alpha1/view.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/view/v1alpha1/view.proto diff --git a/proto/penumbra/penumbra/cnidarium/v1alpha1/cnidarium.proto b/proto/penumbra/penumbra/cnidarium/v1alpha1/cnidarium.proto index 0d6584598b..dc1f14d084 100644 --- a/proto/penumbra/penumbra/cnidarium/v1alpha1/cnidarium.proto +++ b/proto/penumbra/penumbra/cnidarium/v1alpha1/cnidarium.proto @@ -11,8 +11,10 @@ service QueryService { // General-purpose prefixed key-value state query API, that can be used to query // arbitrary prefixes in the JMT storage. - // Returns a stream of `PrefixValueResponse`s. rpc PrefixValue(PrefixValueRequest) returns (stream PrefixValueResponse); + + // Subscribes to a stream of key-value updates, with regex filtering on keys. + rpc Watch(WatchRequest) returns (stream WatchResponse); } // Performs a key-value query, either by key or by key hash. @@ -49,3 +51,48 @@ message PrefixValueResponse { string key = 1; bytes value = 2; } + +// Requests a stream of new key-value pairs that have been committed to the state. +message WatchRequest { + // A regex for keys in the verifiable storage. + // + // Only key-value updates whose keys match this regex will be returned. + // Note that the empty string matches all keys. + // To exclude all keys, use the regex "$^", which matches no strings. + string key_regex = 1; + // A regex for keys in the nonverifiable storage. + // + // Only key-value updates whose keys match this regex will be returned. + // Note that the empty string matches all keys. + // To exclude all keys, use the regex "$^", which matches no strings. + string nv_key_regex = 2; +} + +// A key-value pair that has been committed to the state. +message WatchResponse { + // Elements of the verifiable storage have string keys. + message KeyValue { + string key = 1; + bytes value = 2; + // If set to true, the key-value pair was deleted. + // This allows distinguishing a deleted key-value pair from a key-value pair whose value is empty. + bool deleted = 3; + } + // Elements of the nonverifiable storage have byte keys. + message NvKeyValue { + bytes key = 1; + bytes value = 2; + // If set to true, the key-value pair was deleted. + // This allows distinguishing a deleted key-value pair from a key-value pair whose value is empty. + bool deleted = 3; + } + + // The state version the key-value pair was committed at. + uint64 version = 1; + + // The entry that was committed. + oneof entry { + KeyValue kv = 5; + NvKeyValue nv_kv = 6; + } +} \ No newline at end of file From 4e7c77b7404e69ab279d8d273a56935e7dba53c7 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Thu, 28 Dec 2023 22:40:53 -0500 Subject: [PATCH 02/84] ci: disable -D warnings This caused a CI failure on warnings I believe to have been spurious ("unused imports" in a pub use re-export). --- .github/workflows/rust.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index f9c0a2c4b4..11d9434f62 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -15,12 +15,13 @@ jobs: uses: taiki-e/install-action@nextest - name: Load rust cache uses: astriaorg/buildjet-rust-cache@v2.5.1 - - name: Run cargo check, failing on warnings + - name: Run cargo check run: cargo check --release env: # The `-D warnings` option causes an error on warnings; + # but it caused apparently spurious warnings, so it was disabled. # we must duplicate the rustflags from `.cargo/config.toml`. - RUSTFLAGS: "-D warnings --cfg tokio_unstable" + RUSTFLAGS: "--cfg tokio_unstable" # If a dependency was modified, Cargo.lock may flap if not committed. - name: Check for diffs From b91e1dbf6dcf3cb31895930652f063bc102624e1 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Thu, 28 Dec 2023 22:32:29 -0500 Subject: [PATCH 03/84] proto: transaction format cleanup This commit: - Aligns the `TransactionPlan` with the `Transaction` data structure - Moves the `fee` into the `TransactionParameters` Now the transaction body consists solely of: - a list of `Action`s describing changes to the chain state - a set of `TransactionParameters` describing under what conditions those changes can be applied - a set of `DetectionData` (extensible) for assisting with transaction detection - a set of `MemoData` with encrypted information about the transaction's purpose. --- crates/bin/pcli/src/command/view/tx.rs | 8 +- .../app/src/action_handler/transaction.rs | 30 +- .../action_handler/transaction/stateful.rs | 8 +- crates/core/app/src/tests/spend.rs | 2 - crates/core/transaction/src/detection_data.rs | 37 + crates/core/transaction/src/effect_hash.rs | 42 +- crates/core/transaction/src/lib.rs | 6 +- crates/core/transaction/src/parameters.rs | 41 + crates/core/transaction/src/plan.rs | 52 +- crates/core/transaction/src/plan/build.rs | 15 +- .../transaction/src/plan/detection_data.rs | 44 + crates/core/transaction/src/plan/memo.rs | 8 +- crates/core/transaction/src/transaction.rs | 90 +- crates/core/transaction/src/view.rs | 16 +- .../gen/penumbra.core.transaction.v1alpha1.rs | 56 +- ...enumbra.core.transaction.v1alpha1.serde.rs | 411 +++-- .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 338473 -> 338429 bytes crates/view/src/planner.rs | 20 +- crates/wallet/src/plan.rs | 11 +- crates/wasm/src/build.rs | 2 +- crates/wasm/src/planner.rs | 18 +- .../transaction/v1alpha1/transaction.pb.go | 1538 +++++++++-------- .../transaction/v1alpha1/transaction.proto | 32 +- 23 files changed, 1309 insertions(+), 1178 deletions(-) create mode 100644 crates/core/transaction/src/detection_data.rs create mode 100644 crates/core/transaction/src/parameters.rs create mode 100644 crates/core/transaction/src/plan/detection_data.rs diff --git a/crates/bin/pcli/src/command/view/tx.rs b/crates/bin/pcli/src/command/view/tx.rs index 00a6a149d3..a4f4c53fae 100644 --- a/crates/bin/pcli/src/command/view/tx.rs +++ b/crates/bin/pcli/src/command/view/tx.rs @@ -433,7 +433,13 @@ impl TxCmd { metadata_table.add_row(vec![ "Transaction Fee", - &tx_info.view.body_view.fee.value().format(&asset_cache), + &tx_info + .view + .body_view + .transaction_parameters + .fee + .value() + .format(&asset_cache), ]); let memo_view = tx_info.view.body_view.memo_view; diff --git a/crates/core/app/src/action_handler/transaction.rs b/crates/core/app/src/action_handler/transaction.rs index 372b780242..d60ffa3d7b 100644 --- a/crates/core/app/src/action_handler/transaction.rs +++ b/crates/core/app/src/action_handler/transaction.rs @@ -113,8 +113,8 @@ mod tests { use penumbra_shielded_pool::{Note, OutputPlan, SpendPlan}; use penumbra_tct as tct; use penumbra_transaction::{ - plan::{CluePlan, TransactionPlan}, - WitnessData, + plan::{CluePlan, DetectionDataPlan, TransactionPlan}, + TransactionParameters, WitnessData, }; use rand_core::OsRng; @@ -151,16 +151,20 @@ mod tests { // Add a single spend and output to the transaction plan such that the // transaction balances. let plan = TransactionPlan { - expiry_height: 0, - fee: Fee::default(), - chain_id: "".into(), + transaction_parameters: TransactionParameters { + expiry_height: 0, + fee: Fee::default(), + chain_id: "".into(), + }, actions: vec![ SpendPlan::new(&mut OsRng, note, auth_path.position()).into(), SpendPlan::new(&mut OsRng, note2, auth_path2.position()).into(), OutputPlan::new(&mut OsRng, value, *test_keys::ADDRESS_1).into(), ], - clue_plans: vec![CluePlan::new(&mut OsRng, *test_keys::ADDRESS_1, 1)], - memo_plan: None, + detection_data: DetectionDataPlan { + clue_plans: vec![CluePlan::new(&mut OsRng, *test_keys::ADDRESS_1, 1)], + }, + memo_data: None, }; // Build the transaction. @@ -213,15 +217,17 @@ mod tests { // Add a single spend and output to the transaction plan such that the // transaction balances. let plan = TransactionPlan { - expiry_height: 0, - fee: Fee::default(), - chain_id: "".into(), + transaction_parameters: TransactionParameters { + expiry_height: 0, + fee: Fee::default(), + chain_id: "".into(), + }, actions: vec![ SpendPlan::new(&mut OsRng, note, auth_path.position()).into(), OutputPlan::new(&mut OsRng, value, *test_keys::ADDRESS_1).into(), ], - clue_plans: vec![], - memo_plan: None, + detection_data: DetectionDataPlan { clue_plans: vec![] }, + memo_data: None, }; // Build the transaction. diff --git a/crates/core/app/src/action_handler/transaction/stateful.rs b/crates/core/app/src/action_handler/transaction/stateful.rs index b2a024c7a4..dd111ba133 100644 --- a/crates/core/app/src/action_handler/transaction/stateful.rs +++ b/crates/core/app/src/action_handler/transaction/stateful.rs @@ -75,7 +75,13 @@ pub(super) async fn fee_greater_than_base_fee( let transaction_base_price = current_gas_prices.price(&transaction.gas_cost()); - if transaction.transaction_body().fee.amount() >= transaction_base_price { + if transaction + .transaction_body() + .transaction_parameters + .fee + .amount() + >= transaction_base_price + { Ok(()) } else { Err(anyhow::anyhow!( diff --git a/crates/core/app/src/tests/spend.rs b/crates/core/app/src/tests/spend.rs index b8aac65fba..520803429d 100644 --- a/crates/core/app/src/tests/spend.rs +++ b/crates/core/app/src/tests/spend.rs @@ -7,7 +7,6 @@ use decaf377_rdsa::SigningKey; use penumbra_asset::Value; use penumbra_chain::{component::StateWriteExt, EffectHash, TransactionContext}; use penumbra_compact_block::component::CompactBlockManager; -use penumbra_fee::Fee; use penumbra_keys::{test_keys, PayloadKey}; use penumbra_num::Amount; use penumbra_sct::component::SourceContext; @@ -249,7 +248,6 @@ async fn spend_duplicate_nullifier_same_transaction() { penumbra_transaction::Action::Output(output), ], transaction_parameters: TransactionParameters::default(), - fee: Fee::from_staking_token_amount(0u64.into()), detection_data: None, memo: None, }; diff --git a/crates/core/transaction/src/detection_data.rs b/crates/core/transaction/src/detection_data.rs new file mode 100644 index 0000000000..c527cf7aab --- /dev/null +++ b/crates/core/transaction/src/detection_data.rs @@ -0,0 +1,37 @@ +use anyhow::Error; +use decaf377_fmd::Clue; +use penumbra_proto::core::transaction::v1alpha1 as pbt; +use penumbra_proto::DomainType; + +/// Detection data used by a detection server using Fuzzy Message Detection. +/// +/// Only present if outputs are present. +#[derive(Clone, Debug, Default)] +pub struct DetectionData { + pub fmd_clues: Vec, +} + +impl DomainType for DetectionData { + type Proto = pbt::DetectionData; +} + +impl TryFrom for DetectionData { + type Error = Error; + + fn try_from(proto: pbt::DetectionData) -> anyhow::Result { + let fmd_clues = proto + .fmd_clues + .into_iter() + .map(|x| x.try_into()) + .collect::, Error>>()?; + Ok(DetectionData { fmd_clues }) + } +} + +impl From for pbt::DetectionData { + fn from(msg: DetectionData) -> Self { + let fmd_clues = msg.fmd_clues.into_iter().map(|x| x.into()).collect(); + + pbt::DetectionData { fmd_clues } + } +} diff --git a/crates/core/transaction/src/effect_hash.rs b/crates/core/transaction/src/effect_hash.rs index 56ff6a8b8a..858547b153 100644 --- a/crates/core/transaction/src/effect_hash.rs +++ b/crates/core/transaction/src/effect_hash.rs @@ -22,7 +22,7 @@ use penumbra_shielded_pool::{output, spend, Ics20Withdrawal}; use penumbra_stake::{validator, Delegate, Undelegate, UndelegateClaimBody}; use crate::{ - memo::MemoCiphertext, plan::TransactionPlan, transaction::DetectionData, Action, Transaction, + memo::MemoCiphertext, plan::TransactionPlan, Action, DetectionData, Transaction, TransactionBody, TransactionParameters, }; @@ -57,7 +57,6 @@ impl TransactionBody { // Hash the fixed data of the transaction body. state.update(self.transaction_parameters.effect_hash().as_bytes()); - state.update(self.fee.effect_hash().as_bytes()); if self.memo.is_some() { let memo_ciphertext = self.memo.clone(); state.update( @@ -104,18 +103,13 @@ impl TransactionPlan { let mut state = create_personalized_state(&pbt::TransactionBody::type_url()); // Hash the fixed data of the transaction body. - let tx_params = TransactionParameters { - chain_id: self.chain_id.clone(), - expiry_height: self.expiry_height, - }; - state.update(tx_params.effect_hash().as_bytes()); - state.update(self.fee.effect_hash().as_bytes()); + state.update(self.transaction_parameters.effect_hash().as_bytes()); // Hash the memo and save the memo key for use with outputs later. let mut memo_key: Option = None; - if self.memo_plan.is_some() { + if self.memo_data.is_some() { let memo_plan = self - .memo_plan + .memo_data .clone() .expect("memo_plan must be present in TransactionPlan"); let memo_ciphertext = memo_plan.memo().expect("can compute ciphertext"); @@ -124,14 +118,8 @@ impl TransactionPlan { } // Hash the detection data. - if !self.clue_plans.is_empty() { - let detection_data = DetectionData { - fmd_clues: self - .clue_plans - .iter() - .map(|clue_plan| clue_plan.clue()) - .collect(), - }; + if !self.detection_data.clue_plans.is_empty() { + let detection_data = self.detection_data.detection_data(); state.update(detection_data.effect_hash().as_bytes()); } @@ -453,8 +441,8 @@ mod tests { use crate::{ memo::MemoPlaintext, - plan::{CluePlan, MemoPlan, TransactionPlan}, - WitnessData, + plan::{CluePlan, DetectionDataPlan, MemoPlan, TransactionPlan}, + TransactionParameters, WitnessData, }; /// This isn't an exhaustive test, but we don't currently have a @@ -525,9 +513,6 @@ mod tests { text: "".to_string(), }; let plan = TransactionPlan { - expiry_height: 0, - fee: Fee::default(), - chain_id: "penumbra-test".to_string(), // Put outputs first to check that the auth hash // computation is not affected by plan ordering. actions: vec![ @@ -544,8 +529,15 @@ mod tests { SpendPlan::new(&mut OsRng, note1, 1u64.into()).into(), SwapPlan::new(&mut OsRng, swap_plaintext).into(), ], - clue_plans: vec![CluePlan::new(&mut OsRng, addr, 1)], - memo_plan: Some(MemoPlan::new(&mut OsRng, memo_plaintext.clone()).unwrap()), + transaction_parameters: TransactionParameters { + expiry_height: 0, + fee: Fee::default(), + chain_id: "penumbra-test".to_string(), + }, + detection_data: DetectionDataPlan { + clue_plans: vec![CluePlan::new(&mut OsRng, addr, 1)], + }, + memo_data: Some(MemoPlan::new(&mut OsRng, memo_plaintext.clone()).unwrap()), }; println!("{}", serde_json::to_string_pretty(&plan).unwrap()); diff --git a/crates/core/transaction/src/lib.rs b/crates/core/transaction/src/lib.rs index cb6ccf19db..6907053574 100644 --- a/crates/core/transaction/src/lib.rs +++ b/crates/core/transaction/src/lib.rs @@ -17,10 +17,12 @@ mod auth_data; mod auth_hash; +mod detection_data; mod effect_hash; mod error; mod id; mod is_action; +mod parameters; mod transaction; mod witness_data; @@ -33,12 +35,14 @@ pub mod view; pub use action::Action; pub use auth_data::AuthorizationData; pub use auth_hash::{AuthHash, AuthorizingData}; +pub use detection_data::DetectionData; pub use effect_hash::EffectingData; pub use error::Error; pub use id::Id; pub use is_action::IsAction; +pub use parameters::TransactionParameters; pub use plan::ActionPlan; -pub use transaction::{Transaction, TransactionBody, TransactionParameters}; +pub use transaction::{Transaction, TransactionBody}; pub use view::{ActionView, MemoPlaintextView, MemoView, TransactionPerspective, TransactionView}; pub use witness_data::WitnessData; diff --git a/crates/core/transaction/src/parameters.rs b/crates/core/transaction/src/parameters.rs new file mode 100644 index 0000000000..9ca5091ec0 --- /dev/null +++ b/crates/core/transaction/src/parameters.rs @@ -0,0 +1,41 @@ +use anyhow::Error; +use penumbra_fee::Fee; +use penumbra_proto::core::transaction::v1alpha1 as pbt; +use penumbra_proto::DomainType; + +/// Parameters determining when the transaction should be accepted to the chain. +#[derive(Clone, Debug, Default)] +pub struct TransactionParameters { + pub expiry_height: u64, + pub chain_id: String, + pub fee: Fee, +} + +impl DomainType for TransactionParameters { + type Proto = pbt::TransactionParameters; +} + +impl TryFrom for TransactionParameters { + type Error = Error; + + fn try_from(proto: pbt::TransactionParameters) -> anyhow::Result { + Ok(TransactionParameters { + expiry_height: proto.expiry_height, + chain_id: proto.chain_id, + fee: proto + .fee + .ok_or_else(|| anyhow::anyhow!("transaction parameters missing fee"))? + .try_into()?, + }) + } +} + +impl From for pbt::TransactionParameters { + fn from(msg: TransactionParameters) -> Self { + pbt::TransactionParameters { + expiry_height: msg.expiry_height, + chain_id: msg.chain_id, + fee: Some(msg.fee.into()), + } + } +} diff --git a/crates/core/transaction/src/plan.rs b/crates/core/transaction/src/plan.rs index 822a7888bf..cff2fe2e92 100644 --- a/crates/core/transaction/src/plan.rs +++ b/crates/core/transaction/src/plan.rs @@ -9,7 +9,6 @@ use penumbra_dex::{ swap::SwapPlan, swap_claim::SwapClaimPlan, }; -use penumbra_fee::Fee; use penumbra_governance::{ DelegatorVotePlan, ProposalDepositClaim, ProposalSubmit, ProposalWithdraw, ValidatorVote, }; @@ -25,24 +24,25 @@ mod action; mod auth; mod build; mod clue; +mod detection_data; mod memo; pub use action::ActionPlan; pub use clue::CluePlan; +pub use detection_data::DetectionDataPlan; pub use memo::MemoPlan; +use crate::TransactionParameters; + /// A declaration of a planned [`Transaction`](crate::Transaction), /// for use in transaction authorization and creation. #[derive(Clone, Debug, Default, Serialize, Deserialize)] #[serde(try_from = "pb::TransactionPlan", into = "pb::TransactionPlan")] pub struct TransactionPlan { - /// A list of this transaction's actions. pub actions: Vec, - pub expiry_height: u64, - pub chain_id: String, - pub fee: Fee, - pub clue_plans: Vec, - pub memo_plan: Option, + pub transaction_parameters: TransactionParameters, + pub detection_data: DetectionDataPlan, + pub memo_data: Option, } impl TransactionPlan { @@ -67,7 +67,7 @@ impl TransactionPlan { } pub fn clue_plans(&self) -> impl Iterator { - self.clue_plans.iter() + self.detection_data.clue_plans.iter() } pub fn delegations(&self) -> impl Iterator { @@ -287,12 +287,12 @@ impl TransactionPlan { clue_plans.push(CluePlan::new(&mut rng, dummy_address, precision_bits)); } - self.clue_plans = clue_plans; + self.detection_data.clue_plans = clue_plans; } /// Convenience method to grab the `MemoKey` from the plan. pub fn memo_key(&self) -> Option { - self.memo_plan + self.memo_data .as_ref() .map(|memo_plan| memo_plan.key.clone()) } @@ -306,11 +306,9 @@ impl From for pb::TransactionPlan { fn from(msg: TransactionPlan) -> Self { Self { actions: msg.actions.into_iter().map(Into::into).collect(), - expiry_height: msg.expiry_height, - chain_id: msg.chain_id, - fee: Some(msg.fee.into()), - clue_plans: msg.clue_plans.into_iter().map(Into::into).collect(), - memo_plan: msg.memo_plan.map(Into::into), + transaction_parameters: Some(msg.transaction_parameters.into()), + detection_data: Some(msg.detection_data.into()), + memo_data: msg.memo_data.map(Into::into), } } } @@ -318,29 +316,21 @@ impl From for pb::TransactionPlan { impl TryFrom for TransactionPlan { type Error = anyhow::Error; fn try_from(value: pb::TransactionPlan) -> Result { - let memo_plan = match value.memo_plan { - Some(plan) => Some(plan.try_into()?), - None => None, - }; - Ok(Self { actions: value .actions .into_iter() .map(TryInto::try_into) .collect::>()?, - expiry_height: value.expiry_height, - chain_id: value.chain_id, - fee: value - .fee - .ok_or_else(|| anyhow::anyhow!("missing fee"))? + transaction_parameters: value + .transaction_parameters + .ok_or_else(|| anyhow::anyhow!("transaction plan missing transaction parameters"))? .try_into()?, - clue_plans: value - .clue_plans - .into_iter() - .map(TryInto::try_into) - .collect::>()?, - memo_plan, + detection_data: value + .detection_data + .ok_or_else(|| anyhow::anyhow!("transaction plan missing detection data"))? + .try_into()?, + memo_data: value.memo_data.map(TryInto::try_into).transpose()?, }) } } diff --git a/crates/core/transaction/src/plan/build.rs b/crates/core/transaction/src/plan/build.rs index b772ea5c31..a0529fd987 100644 --- a/crates/core/transaction/src/plan/build.rs +++ b/crates/core/transaction/src/plan/build.rs @@ -10,9 +10,8 @@ use std::fmt::Debug; use super::TransactionPlan; use crate::ActionPlan; use crate::{ - action::Action, - transaction::{DetectionData, TransactionParameters}, - AuthorizationData, AuthorizingData, Transaction, TransactionBody, WitnessData, + action::Action, AuthorizationData, AuthorizingData, DetectionData, Transaction, + TransactionBody, WitnessData, }; impl TransactionPlan { @@ -26,9 +25,9 @@ impl TransactionPlan { ) -> Result { // Add the memo if it is planned. let memo = self - .memo_plan + .memo_data .as_ref() - .map(|memo_plan| memo_plan.memo()) + .map(|memo_data| memo_data.memo()) .transpose()?; // Add detection data when there are outputs. @@ -44,11 +43,7 @@ impl TransactionPlan { let transaction_body = TransactionBody { actions, - transaction_parameters: TransactionParameters { - expiry_height: self.expiry_height, - chain_id: self.chain_id, - }, - fee: self.fee, + transaction_parameters: self.transaction_parameters, detection_data, memo, }; diff --git a/crates/core/transaction/src/plan/detection_data.rs b/crates/core/transaction/src/plan/detection_data.rs new file mode 100644 index 0000000000..420ad5f1ea --- /dev/null +++ b/crates/core/transaction/src/plan/detection_data.rs @@ -0,0 +1,44 @@ +use crate::DetectionData; + +use super::CluePlan; +use penumbra_proto::{core::transaction::v1alpha1 as pb, DomainType}; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Default, Serialize, Deserialize)] +#[serde(try_from = "pb::DetectionDataPlan", into = "pb::DetectionDataPlan")] +pub struct DetectionDataPlan { + pub clue_plans: Vec, +} + +impl DetectionDataPlan { + pub fn detection_data(&self) -> DetectionData { + DetectionData { + fmd_clues: self.clue_plans.iter().map(|x| x.clue()).collect::>(), + } + } +} + +impl TryFrom for DetectionDataPlan { + type Error = anyhow::Error; + fn try_from(value: pb::DetectionDataPlan) -> Result { + Ok(Self { + clue_plans: value + .clue_plans + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + }) + } +} + +impl From for pb::DetectionDataPlan { + fn from(msg: DetectionDataPlan) -> Self { + Self { + clue_plans: msg.clue_plans.into_iter().map(Into::into).collect(), + } + } +} + +impl DomainType for DetectionDataPlan { + type Proto = pb::DetectionDataPlan; +} diff --git a/crates/core/transaction/src/plan/memo.rs b/crates/core/transaction/src/plan/memo.rs index 5b254e0d74..6b5ea36a54 100644 --- a/crates/core/transaction/src/plan/memo.rs +++ b/crates/core/transaction/src/plan/memo.rs @@ -29,10 +29,10 @@ impl MemoPlan { } impl DomainType for MemoPlan { - type Proto = pb::MemoPlan; + type Proto = pb::MemoDataPlan; } -impl From for pb::MemoPlan { +impl From for pb::MemoDataPlan { fn from(msg: MemoPlan) -> Self { let return_address = Some(msg.plaintext.return_address.into()); let text = msg.plaintext.text; @@ -46,10 +46,10 @@ impl From for pb::MemoPlan { } } -impl TryFrom for MemoPlan { +impl TryFrom for MemoPlan { type Error = anyhow::Error; - fn try_from(msg: pb::MemoPlan) -> Result { + fn try_from(msg: pb::MemoDataPlan) -> Result { let sender: Address = msg .plaintext .clone() diff --git a/crates/core/transaction/src/transaction.rs b/crates/core/transaction/src/transaction.rs index 8397be6878..ff300c1ebe 100644 --- a/crates/core/transaction/src/transaction.rs +++ b/crates/core/transaction/src/transaction.rs @@ -6,7 +6,6 @@ use std::{ use anyhow::{Context, Error}; use ark_ff::Zero; use decaf377::Fr; -use decaf377_fmd::Clue; use decaf377_rdsa::{Binding, Signature, VerificationKey, VerificationKeyBytes}; use penumbra_chain::TransactionContext; use penumbra_dao::{DaoDeposit, DaoOutput, DaoSpend}; @@ -14,7 +13,6 @@ use penumbra_dex::{ lp::action::{PositionClose, PositionOpen}, swap::Swap, }; -use penumbra_fee::Fee; use penumbra_governance::{DelegatorVote, ProposalSubmit, ProposalWithdraw, ValidatorVote}; use penumbra_ibc::IbcRelay; use penumbra_keys::{FullViewingKey, PayloadKey}; @@ -32,33 +30,18 @@ use serde::{Deserialize, Serialize}; use crate::{ memo::{MemoCiphertext, MemoPlaintext}, view::{action_view::OutputView, MemoView, TransactionBodyView}, - Action, ActionView, Id, IsAction, MemoPlaintextView, TransactionPerspective, TransactionView, + Action, ActionView, DetectionData, Id, IsAction, MemoPlaintextView, TransactionParameters, + TransactionPerspective, TransactionView, }; #[derive(Clone, Debug, Default)] pub struct TransactionBody { pub actions: Vec, pub transaction_parameters: TransactionParameters, - pub fee: Fee, pub detection_data: Option, pub memo: Option, } -#[derive(Clone, Debug, Default)] -/// Parameters determining when the transaction should be accepted to the chain. -pub struct TransactionParameters { - pub expiry_height: u64, - pub chain_id: String, -} - -#[derive(Clone, Debug, Default)] -/// Detection data used by a detection server using Fuzzy Message Detection. -/// -/// Only present if outputs are present. -pub struct DetectionData { - pub fmd_clues: Vec, -} - #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(try_from = "pbt::Transaction", into = "pbt::Transaction")] pub struct Transaction { @@ -279,7 +262,6 @@ impl Transaction { body_view: TransactionBodyView { action_views, transaction_parameters: self.transaction_parameters(), - fee: self.transaction_body().fee, detection_data, memo_view, }, @@ -527,7 +509,11 @@ impl Transaction { // Add fee into binding verification key computation. let fee_v_blinding = Fr::zero(); - let fee_value_commitment = self.transaction_body.fee.commit(fee_v_blinding); + let fee_value_commitment = self + .transaction_body + .transaction_parameters + .fee + .commit(fee_v_blinding); balance_commitments += fee_value_commitment.0; let binding_verification_key_bytes: VerificationKeyBytes = @@ -539,68 +525,22 @@ impl Transaction { } } +/* impl From for Vec { fn from(transaction_body: TransactionBody) -> Vec { let protobuf_serialized: pbt::TransactionBody = transaction_body.into(); protobuf_serialized.encode_to_vec() } } - -impl DomainType for TransactionParameters { - type Proto = pbt::TransactionParameters; -} - -impl TryFrom for TransactionParameters { - type Error = Error; - - fn try_from(proto: pbt::TransactionParameters) -> anyhow::Result { - Ok(TransactionParameters { - expiry_height: proto.expiry_height, - chain_id: proto.chain_id, - }) - } -} - -impl From for pbt::TransactionParameters { - fn from(msg: TransactionParameters) -> Self { - pbt::TransactionParameters { - expiry_height: msg.expiry_height, - chain_id: msg.chain_id, - } - } -} - -impl DomainType for DetectionData { - type Proto = pbt::DetectionData; -} - -impl TryFrom for DetectionData { - type Error = Error; - - fn try_from(proto: pbt::DetectionData) -> anyhow::Result { - let fmd_clues = proto - .fmd_clues - .into_iter() - .map(|x| x.try_into()) - .collect::, Error>>()?; - Ok(DetectionData { fmd_clues }) - } -} - -impl From for pbt::DetectionData { - fn from(msg: DetectionData) -> Self { - let fmd_clues = msg.fmd_clues.into_iter().map(|x| x.into()).collect(); - - pbt::DetectionData { fmd_clues } - } -} - + */ impl DomainType for TransactionBody { type Proto = pbt::TransactionBody; } impl From for pbt::TransactionBody { fn from(msg: TransactionBody) -> Self { + // TODO: this doesn't seem right, why do we have so many different memo handling types + // and behaviors? why are we encoding Some(encrypted_memo) of a possibly-empty byte vector? let encrypted_memo: pbt::MemoData = match msg.memo { Some(memo) => pbt::MemoData { encrypted_memo: memo.0.to_vec(), @@ -613,7 +553,6 @@ impl From for pbt::TransactionBody { pbt::TransactionBody { actions: msg.actions.into_iter().map(|x| x.into()).collect(), transaction_parameters: Some(msg.transaction_parameters.into()), - fee: Some(msg.fee.into()), detection_data: msg.detection_data.map(|x| x.into()), memo_data: Some(encrypted_memo), } @@ -633,12 +572,6 @@ impl TryFrom for TransactionBody { ); } - let fee: Fee = proto - .fee - .ok_or_else(|| anyhow::anyhow!("transaction body missing fee"))? - .try_into() - .context("fee malformed")?; - let encrypted_memo = proto .memo_data .ok_or_else(|| anyhow::anyhow!("transaction body missing memo data field"))? @@ -671,7 +604,6 @@ impl TryFrom for TransactionBody { Ok(TransactionBody { actions, transaction_parameters, - fee, detection_data, memo, }) diff --git a/crates/core/transaction/src/view.rs b/crates/core/transaction/src/view.rs index 63c3f9860f..754aae3b4e 100644 --- a/crates/core/transaction/src/view.rs +++ b/crates/core/transaction/src/view.rs @@ -1,6 +1,5 @@ use anyhow::Context; use decaf377_rdsa::{Binding, Signature}; -use penumbra_fee::Fee; use penumbra_keys::AddressView; use penumbra_proto::{core::transaction::v1alpha1 as pbt, DomainType}; @@ -14,9 +13,8 @@ use penumbra_tct as tct; pub use transaction_perspective::TransactionPerspective; use crate::{ - memo::MemoCiphertext, - transaction::{DetectionData, TransactionParameters}, - Action, Transaction, TransactionBody, + memo::MemoCiphertext, Action, DetectionData, Transaction, TransactionBody, + TransactionParameters, }; #[derive(Clone, Debug, Serialize, Deserialize)] @@ -35,7 +33,6 @@ pub struct TransactionView { pub struct TransactionBodyView { pub action_views: Vec, pub transaction_parameters: TransactionParameters, - pub fee: Fee, pub detection_data: Option, pub memo_view: Option, } @@ -86,7 +83,6 @@ impl TransactionView { transaction_body: TransactionBody { actions, transaction_parameters, - fee: self.body_view.fee.clone(), detection_data, memo: memo_ciphertext.cloned(), }, @@ -143,12 +139,6 @@ impl TryFrom for TransactionBodyView { action_views.push(av.try_into()?); } - let fee = body_view - .fee - .ok_or_else(|| anyhow::anyhow!("transaction view missing fee"))? - .try_into() - .context("transaction fee malformed")?; - let memo_view: Option = match body_view.memo_view { Some(mv) => match mv.memo_view { Some(x) => match x { @@ -201,7 +191,6 @@ impl TryFrom for TransactionBodyView { Ok(TransactionBodyView { action_views, transaction_parameters, - fee, detection_data, memo_view, }) @@ -223,7 +212,6 @@ impl From for pbt::TransactionBodyView { Self { action_views: v.action_views.into_iter().map(Into::into).collect(), transaction_parameters: Some(v.transaction_parameters.into()), - fee: Some(v.fee.into()), detection_data: v.detection_data.map(Into::into), memo_view: v.memo_view.map(|m| m.into()), } diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs index 2756b73cfe..8441a4d640 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs @@ -45,9 +45,6 @@ pub struct TransactionBody { /// Parameters determining if a transaction should be accepted by this chain. #[prost(message, optional, tag = "2")] pub transaction_parameters: ::core::option::Option, - /// The transaction fee. - #[prost(message, optional, tag = "3")] - pub fee: ::core::option::Option, /// Detection data for use with Fuzzy Message Detection #[prost(message, optional, tag = "4")] pub detection_data: ::core::option::Option, @@ -91,6 +88,9 @@ pub struct TransactionParameters { /// replaying a transaction on one chain onto a different chain. #[prost(string, tag = "2")] pub chain_id: ::prost::alloc::string::String, + /// The transaction fee. + #[prost(message, optional, tag = "3")] + pub fee: ::core::option::Option, } impl ::prost::Name for TransactionParameters { const NAME: &'static str = "TransactionParameters"; @@ -310,9 +310,6 @@ pub struct TransactionBodyView { /// Transaction parameters. #[prost(message, optional, tag = "2")] pub transaction_parameters: ::core::option::Option, - /// The transaction fee. - #[prost(message, optional, tag = "3")] - pub fee: ::core::option::Option, /// The detection data in this transaction, only populated if /// there are outputs in the actions of this transaction. #[prost(message, optional, tag = "4")] @@ -488,26 +485,24 @@ impl ::prost::Name for WitnessData { } /// Describes a planned transaction. Permits clients to prepare a transaction /// prior submission, so that a user can review it prior to authorizing its execution. +/// +/// The `TransactionPlan` is a fully determined bundle binding all of a transaction's effects. +/// The only thing it does not include is the witness data used for proving. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TransactionPlan { - /// The planner interface(s) for Actions to be performed, such as a Spend, Swap, - /// or Delegation. See the ActionPlan docs for a full list of options. + /// The sequence of actions planned for this transaction. #[prost(message, repeated, tag = "1")] pub actions: ::prost::alloc::vec::Vec, - /// Time, as block height, after which TransactionPlan should be considered invalid. - #[prost(uint64, tag = "2")] - pub expiry_height: u64, - /// The name of the network for which this TransactionPlan was built. - #[prost(string, tag = "3")] - pub chain_id: ::prost::alloc::string::String, + /// Parameters determining if a transaction should be accepted by this chain. + #[prost(message, optional, tag = "2")] + pub transaction_parameters: ::core::option::Option, + /// Detection data for use with Fuzzy Message Detection #[prost(message, optional, tag = "4")] - pub fee: ::core::option::Option, - #[prost(message, repeated, tag = "5")] - pub clue_plans: ::prost::alloc::vec::Vec, - /// Planning interface for constructing an optional Memo for the Transaction. - #[prost(message, optional, tag = "6")] - pub memo_plan: ::core::option::Option, + pub detection_data: ::core::option::Option, + /// The memo plan for this transaction. + #[prost(message, optional, tag = "5")] + pub memo_data: ::core::option::Option, } impl ::prost::Name for TransactionPlan { const NAME: &'static str = "TransactionPlan"; @@ -516,6 +511,19 @@ impl ::prost::Name for TransactionPlan { ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) } } +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DetectionDataPlan { + #[prost(message, repeated, tag = "5")] + pub clue_plans: ::prost::alloc::vec::Vec, +} +impl ::prost::Name for DetectionDataPlan { + const NAME: &'static str = "DetectionDataPlan"; + const PACKAGE: &'static str = "penumbra.core.transaction.v1alpha1"; + fn full_name() -> ::prost::alloc::string::String { + ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) + } +} /// Describes a planned transaction action. /// /// Some transaction Actions don't have any private data and are treated as being plans @@ -635,10 +643,10 @@ impl ::prost::Name for CluePlan { ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) } } -/// Describes a plan for forming a `Memo`. +/// Describes a plan for forming a `MemoData`. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct MemoPlan { +pub struct MemoDataPlan { /// The plaintext. #[prost(message, optional, tag = "1")] pub plaintext: ::core::option::Option, @@ -646,8 +654,8 @@ pub struct MemoPlan { #[prost(bytes = "vec", tag = "2")] pub key: ::prost::alloc::vec::Vec, } -impl ::prost::Name for MemoPlan { - const NAME: &'static str = "MemoPlan"; +impl ::prost::Name for MemoDataPlan { + const NAME: &'static str = "MemoDataPlan"; const PACKAGE: &'static str = "penumbra.core.transaction.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs index d9d861551e..39434bba54 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs @@ -1507,6 +1507,98 @@ impl<'de> serde::Deserialize<'de> for DetectionData { deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.DetectionData", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for DetectionDataPlan { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.clue_plans.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.DetectionDataPlan", len)?; + if !self.clue_plans.is_empty() { + struct_ser.serialize_field("cluePlans", &self.clue_plans)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DetectionDataPlan { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "clue_plans", + "cluePlans", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + CluePlans, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "cluePlans" | "clue_plans" => Ok(GeneratedField::CluePlans), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DetectionDataPlan; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.transaction.v1alpha1.DetectionDataPlan") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut clue_plans__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::CluePlans => { + if clue_plans__.is_some() { + return Err(serde::de::Error::duplicate_field("cluePlans")); + } + clue_plans__ = Some(map_.next_value()?); + } + } + } + Ok(DetectionDataPlan { + clue_plans: clue_plans__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.DetectionDataPlan", FIELDS, GeneratedVisitor) + } +} impl serde::Serialize for EffectHash { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result @@ -1884,7 +1976,7 @@ impl<'de> serde::Deserialize<'de> for MemoData { deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoData", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for MemoPlaintext { +impl serde::Serialize for MemoDataPlan { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -1892,38 +1984,38 @@ impl serde::Serialize for MemoPlaintext { { use serde::ser::SerializeStruct; let mut len = 0; - if self.return_address.is_some() { + if self.plaintext.is_some() { len += 1; } - if !self.text.is_empty() { + if !self.key.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintext", len)?; - if let Some(v) = self.return_address.as_ref() { - struct_ser.serialize_field("returnAddress", v)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoDataPlan", len)?; + if let Some(v) = self.plaintext.as_ref() { + struct_ser.serialize_field("plaintext", v)?; } - if !self.text.is_empty() { - struct_ser.serialize_field("text", &self.text)?; + if !self.key.is_empty() { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("key", pbjson::private::base64::encode(&self.key).as_str())?; } struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for MemoPlaintext { +impl<'de> serde::Deserialize<'de> for MemoDataPlan { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where D: serde::Deserializer<'de>, { const FIELDS: &[&str] = &[ - "return_address", - "returnAddress", - "text", + "plaintext", + "key", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { - ReturnAddress, - Text, + Plaintext, + Key, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -1945,8 +2037,8 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintext { E: serde::de::Error, { match value { - "returnAddress" | "return_address" => Ok(GeneratedField::ReturnAddress), - "text" => Ok(GeneratedField::Text), + "plaintext" => Ok(GeneratedField::Plaintext), + "key" => Ok(GeneratedField::Key), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -1956,44 +2048,46 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintext { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = MemoPlaintext; + type Value = MemoDataPlan; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoPlaintext") + formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoDataPlan") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { - let mut return_address__ = None; - let mut text__ = None; + let mut plaintext__ = None; + let mut key__ = None; while let Some(k) = map_.next_key()? { match k { - GeneratedField::ReturnAddress => { - if return_address__.is_some() { - return Err(serde::de::Error::duplicate_field("returnAddress")); + GeneratedField::Plaintext => { + if plaintext__.is_some() { + return Err(serde::de::Error::duplicate_field("plaintext")); } - return_address__ = map_.next_value()?; + plaintext__ = map_.next_value()?; } - GeneratedField::Text => { - if text__.is_some() { - return Err(serde::de::Error::duplicate_field("text")); + GeneratedField::Key => { + if key__.is_some() { + return Err(serde::de::Error::duplicate_field("key")); } - text__ = Some(map_.next_value()?); + key__ = + Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) + ; } } } - Ok(MemoPlaintext { - return_address: return_address__, - text: text__.unwrap_or_default(), + Ok(MemoDataPlan { + plaintext: plaintext__, + key: key__.unwrap_or_default(), }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintext", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoDataPlan", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for MemoPlaintextView { +impl serde::Serialize for MemoPlaintext { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -2007,7 +2101,7 @@ impl serde::Serialize for MemoPlaintextView { if !self.text.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintextView", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintext", len)?; if let Some(v) = self.return_address.as_ref() { struct_ser.serialize_field("returnAddress", v)?; } @@ -2017,7 +2111,7 @@ impl serde::Serialize for MemoPlaintextView { struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for MemoPlaintextView { +impl<'de> serde::Deserialize<'de> for MemoPlaintext { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where @@ -2065,13 +2159,13 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintextView { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = MemoPlaintextView; + type Value = MemoPlaintext; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoPlaintextView") + formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoPlaintext") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { @@ -2093,16 +2187,16 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintextView { } } } - Ok(MemoPlaintextView { + Ok(MemoPlaintext { return_address: return_address__, text: text__.unwrap_or_default(), }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintextView", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintext", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for MemoPlan { +impl serde::Serialize for MemoPlaintextView { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -2110,38 +2204,38 @@ impl serde::Serialize for MemoPlan { { use serde::ser::SerializeStruct; let mut len = 0; - if self.plaintext.is_some() { + if self.return_address.is_some() { len += 1; } - if !self.key.is_empty() { + if !self.text.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoPlan", len)?; - if let Some(v) = self.plaintext.as_ref() { - struct_ser.serialize_field("plaintext", v)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintextView", len)?; + if let Some(v) = self.return_address.as_ref() { + struct_ser.serialize_field("returnAddress", v)?; } - if !self.key.is_empty() { - #[allow(clippy::needless_borrow)] - struct_ser.serialize_field("key", pbjson::private::base64::encode(&self.key).as_str())?; + if !self.text.is_empty() { + struct_ser.serialize_field("text", &self.text)?; } struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for MemoPlan { +impl<'de> serde::Deserialize<'de> for MemoPlaintextView { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where D: serde::Deserializer<'de>, { const FIELDS: &[&str] = &[ - "plaintext", - "key", + "return_address", + "returnAddress", + "text", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { - Plaintext, - Key, + ReturnAddress, + Text, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -2163,8 +2257,8 @@ impl<'de> serde::Deserialize<'de> for MemoPlan { E: serde::de::Error, { match value { - "plaintext" => Ok(GeneratedField::Plaintext), - "key" => Ok(GeneratedField::Key), + "returnAddress" | "return_address" => Ok(GeneratedField::ReturnAddress), + "text" => Ok(GeneratedField::Text), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -2174,43 +2268,41 @@ impl<'de> serde::Deserialize<'de> for MemoPlan { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = MemoPlan; + type Value = MemoPlaintextView; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoPlan") + formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoPlaintextView") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { - let mut plaintext__ = None; - let mut key__ = None; + let mut return_address__ = None; + let mut text__ = None; while let Some(k) = map_.next_key()? { match k { - GeneratedField::Plaintext => { - if plaintext__.is_some() { - return Err(serde::de::Error::duplicate_field("plaintext")); + GeneratedField::ReturnAddress => { + if return_address__.is_some() { + return Err(serde::de::Error::duplicate_field("returnAddress")); } - plaintext__ = map_.next_value()?; + return_address__ = map_.next_value()?; } - GeneratedField::Key => { - if key__.is_some() { - return Err(serde::de::Error::duplicate_field("key")); + GeneratedField::Text => { + if text__.is_some() { + return Err(serde::de::Error::duplicate_field("text")); } - key__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; + text__ = Some(map_.next_value()?); } } } - Ok(MemoPlan { - plaintext: plaintext__, - key: key__.unwrap_or_default(), + Ok(MemoPlaintextView { + return_address: return_address__, + text: text__.unwrap_or_default(), }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoPlan", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintextView", FIELDS, GeneratedVisitor) } } impl serde::Serialize for MemoView { @@ -2881,9 +2973,6 @@ impl serde::Serialize for TransactionBody { if self.transaction_parameters.is_some() { len += 1; } - if self.fee.is_some() { - len += 1; - } if self.detection_data.is_some() { len += 1; } @@ -2897,9 +2986,6 @@ impl serde::Serialize for TransactionBody { if let Some(v) = self.transaction_parameters.as_ref() { struct_ser.serialize_field("transactionParameters", v)?; } - if let Some(v) = self.fee.as_ref() { - struct_ser.serialize_field("fee", v)?; - } if let Some(v) = self.detection_data.as_ref() { struct_ser.serialize_field("detectionData", v)?; } @@ -2919,7 +3005,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { "actions", "transaction_parameters", "transactionParameters", - "fee", "detection_data", "detectionData", "memo_data", @@ -2930,7 +3015,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { enum GeneratedField { Actions, TransactionParameters, - Fee, DetectionData, MemoData, } @@ -2956,7 +3040,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { match value { "actions" => Ok(GeneratedField::Actions), "transactionParameters" | "transaction_parameters" => Ok(GeneratedField::TransactionParameters), - "fee" => Ok(GeneratedField::Fee), "detectionData" | "detection_data" => Ok(GeneratedField::DetectionData), "memoData" | "memo_data" => Ok(GeneratedField::MemoData), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), @@ -2980,7 +3063,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { { let mut actions__ = None; let mut transaction_parameters__ = None; - let mut fee__ = None; let mut detection_data__ = None; let mut memo_data__ = None; while let Some(k) = map_.next_key()? { @@ -2997,12 +3079,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { } transaction_parameters__ = map_.next_value()?; } - GeneratedField::Fee => { - if fee__.is_some() { - return Err(serde::de::Error::duplicate_field("fee")); - } - fee__ = map_.next_value()?; - } GeneratedField::DetectionData => { if detection_data__.is_some() { return Err(serde::de::Error::duplicate_field("detectionData")); @@ -3020,7 +3096,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { Ok(TransactionBody { actions: actions__.unwrap_or_default(), transaction_parameters: transaction_parameters__, - fee: fee__, detection_data: detection_data__, memo_data: memo_data__, }) @@ -3043,9 +3118,6 @@ impl serde::Serialize for TransactionBodyView { if self.transaction_parameters.is_some() { len += 1; } - if self.fee.is_some() { - len += 1; - } if self.detection_data.is_some() { len += 1; } @@ -3059,9 +3131,6 @@ impl serde::Serialize for TransactionBodyView { if let Some(v) = self.transaction_parameters.as_ref() { struct_ser.serialize_field("transactionParameters", v)?; } - if let Some(v) = self.fee.as_ref() { - struct_ser.serialize_field("fee", v)?; - } if let Some(v) = self.detection_data.as_ref() { struct_ser.serialize_field("detectionData", v)?; } @@ -3082,7 +3151,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { "actionViews", "transaction_parameters", "transactionParameters", - "fee", "detection_data", "detectionData", "memo_view", @@ -3093,7 +3161,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { enum GeneratedField { ActionViews, TransactionParameters, - Fee, DetectionData, MemoView, } @@ -3119,7 +3186,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { match value { "actionViews" | "action_views" => Ok(GeneratedField::ActionViews), "transactionParameters" | "transaction_parameters" => Ok(GeneratedField::TransactionParameters), - "fee" => Ok(GeneratedField::Fee), "detectionData" | "detection_data" => Ok(GeneratedField::DetectionData), "memoView" | "memo_view" => Ok(GeneratedField::MemoView), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), @@ -3143,7 +3209,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { { let mut action_views__ = None; let mut transaction_parameters__ = None; - let mut fee__ = None; let mut detection_data__ = None; let mut memo_view__ = None; while let Some(k) = map_.next_key()? { @@ -3160,12 +3225,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { } transaction_parameters__ = map_.next_value()?; } - GeneratedField::Fee => { - if fee__.is_some() { - return Err(serde::de::Error::duplicate_field("fee")); - } - fee__ = map_.next_value()?; - } GeneratedField::DetectionData => { if detection_data__.is_some() { return Err(serde::de::Error::duplicate_field("detectionData")); @@ -3183,7 +3242,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { Ok(TransactionBodyView { action_views: action_views__.unwrap_or_default(), transaction_parameters: transaction_parameters__, - fee: fee__, detection_data: detection_data__, memo_view: memo_view__, }) @@ -3206,6 +3264,9 @@ impl serde::Serialize for TransactionParameters { if !self.chain_id.is_empty() { len += 1; } + if self.fee.is_some() { + len += 1; + } let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.TransactionParameters", len)?; if self.expiry_height != 0 { #[allow(clippy::needless_borrow)] @@ -3214,6 +3275,9 @@ impl serde::Serialize for TransactionParameters { if !self.chain_id.is_empty() { struct_ser.serialize_field("chainId", &self.chain_id)?; } + if let Some(v) = self.fee.as_ref() { + struct_ser.serialize_field("fee", v)?; + } struct_ser.end() } } @@ -3228,12 +3292,14 @@ impl<'de> serde::Deserialize<'de> for TransactionParameters { "expiryHeight", "chain_id", "chainId", + "fee", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { ExpiryHeight, ChainId, + Fee, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -3257,6 +3323,7 @@ impl<'de> serde::Deserialize<'de> for TransactionParameters { match value { "expiryHeight" | "expiry_height" => Ok(GeneratedField::ExpiryHeight), "chainId" | "chain_id" => Ok(GeneratedField::ChainId), + "fee" => Ok(GeneratedField::Fee), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -3278,6 +3345,7 @@ impl<'de> serde::Deserialize<'de> for TransactionParameters { { let mut expiry_height__ = None; let mut chain_id__ = None; + let mut fee__ = None; while let Some(k) = map_.next_key()? { match k { GeneratedField::ExpiryHeight => { @@ -3294,11 +3362,18 @@ impl<'de> serde::Deserialize<'de> for TransactionParameters { } chain_id__ = Some(map_.next_value()?); } + GeneratedField::Fee => { + if fee__.is_some() { + return Err(serde::de::Error::duplicate_field("fee")); + } + fee__ = map_.next_value()?; + } } } Ok(TransactionParameters { expiry_height: expiry_height__.unwrap_or_default(), chain_id: chain_id__.unwrap_or_default(), + fee: fee__, }) } } @@ -3497,40 +3572,27 @@ impl serde::Serialize for TransactionPlan { if !self.actions.is_empty() { len += 1; } - if self.expiry_height != 0 { - len += 1; - } - if !self.chain_id.is_empty() { - len += 1; - } - if self.fee.is_some() { + if self.transaction_parameters.is_some() { len += 1; } - if !self.clue_plans.is_empty() { + if self.detection_data.is_some() { len += 1; } - if self.memo_plan.is_some() { + if self.memo_data.is_some() { len += 1; } let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.TransactionPlan", len)?; if !self.actions.is_empty() { struct_ser.serialize_field("actions", &self.actions)?; } - if self.expiry_height != 0 { - #[allow(clippy::needless_borrow)] - struct_ser.serialize_field("expiryHeight", ToString::to_string(&self.expiry_height).as_str())?; - } - if !self.chain_id.is_empty() { - struct_ser.serialize_field("chainId", &self.chain_id)?; - } - if let Some(v) = self.fee.as_ref() { - struct_ser.serialize_field("fee", v)?; + if let Some(v) = self.transaction_parameters.as_ref() { + struct_ser.serialize_field("transactionParameters", v)?; } - if !self.clue_plans.is_empty() { - struct_ser.serialize_field("cluePlans", &self.clue_plans)?; + if let Some(v) = self.detection_data.as_ref() { + struct_ser.serialize_field("detectionData", v)?; } - if let Some(v) = self.memo_plan.as_ref() { - struct_ser.serialize_field("memoPlan", v)?; + if let Some(v) = self.memo_data.as_ref() { + struct_ser.serialize_field("memoData", v)?; } struct_ser.end() } @@ -3543,25 +3605,20 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { { const FIELDS: &[&str] = &[ "actions", - "expiry_height", - "expiryHeight", - "chain_id", - "chainId", - "fee", - "clue_plans", - "cluePlans", - "memo_plan", - "memoPlan", + "transaction_parameters", + "transactionParameters", + "detection_data", + "detectionData", + "memo_data", + "memoData", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { Actions, - ExpiryHeight, - ChainId, - Fee, - CluePlans, - MemoPlan, + TransactionParameters, + DetectionData, + MemoData, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -3584,11 +3641,9 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { { match value { "actions" => Ok(GeneratedField::Actions), - "expiryHeight" | "expiry_height" => Ok(GeneratedField::ExpiryHeight), - "chainId" | "chain_id" => Ok(GeneratedField::ChainId), - "fee" => Ok(GeneratedField::Fee), - "cluePlans" | "clue_plans" => Ok(GeneratedField::CluePlans), - "memoPlan" | "memo_plan" => Ok(GeneratedField::MemoPlan), + "transactionParameters" | "transaction_parameters" => Ok(GeneratedField::TransactionParameters), + "detectionData" | "detection_data" => Ok(GeneratedField::DetectionData), + "memoData" | "memo_data" => Ok(GeneratedField::MemoData), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -3609,11 +3664,9 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { V: serde::de::MapAccess<'de>, { let mut actions__ = None; - let mut expiry_height__ = None; - let mut chain_id__ = None; - let mut fee__ = None; - let mut clue_plans__ = None; - let mut memo_plan__ = None; + let mut transaction_parameters__ = None; + let mut detection_data__ = None; + let mut memo_data__ = None; while let Some(k) = map_.next_key()? { match k { GeneratedField::Actions => { @@ -3622,47 +3675,31 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { } actions__ = Some(map_.next_value()?); } - GeneratedField::ExpiryHeight => { - if expiry_height__.is_some() { - return Err(serde::de::Error::duplicate_field("expiryHeight")); - } - expiry_height__ = - Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) - ; - } - GeneratedField::ChainId => { - if chain_id__.is_some() { - return Err(serde::de::Error::duplicate_field("chainId")); - } - chain_id__ = Some(map_.next_value()?); - } - GeneratedField::Fee => { - if fee__.is_some() { - return Err(serde::de::Error::duplicate_field("fee")); + GeneratedField::TransactionParameters => { + if transaction_parameters__.is_some() { + return Err(serde::de::Error::duplicate_field("transactionParameters")); } - fee__ = map_.next_value()?; + transaction_parameters__ = map_.next_value()?; } - GeneratedField::CluePlans => { - if clue_plans__.is_some() { - return Err(serde::de::Error::duplicate_field("cluePlans")); + GeneratedField::DetectionData => { + if detection_data__.is_some() { + return Err(serde::de::Error::duplicate_field("detectionData")); } - clue_plans__ = Some(map_.next_value()?); + detection_data__ = map_.next_value()?; } - GeneratedField::MemoPlan => { - if memo_plan__.is_some() { - return Err(serde::de::Error::duplicate_field("memoPlan")); + GeneratedField::MemoData => { + if memo_data__.is_some() { + return Err(serde::de::Error::duplicate_field("memoData")); } - memo_plan__ = map_.next_value()?; + memo_data__ = map_.next_value()?; } } } Ok(TransactionPlan { actions: actions__.unwrap_or_default(), - expiry_height: expiry_height__.unwrap_or_default(), - chain_id: chain_id__.unwrap_or_default(), - fee: fee__, - clue_plans: clue_plans__.unwrap_or_default(), - memo_plan: memo_plan__, + transaction_parameters: transaction_parameters__, + detection_data: detection_data__, + memo_data: memo_data__, }) } } diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index 44fc8f742c6c276e7d377a17497ab0b53e323c83..c7439d66cf8b1d8cfc282518a64215bdb554468c 100644 GIT binary patch delta 5728 zcmZXYYjBmt8OP7_?B?X;Jtw!#m2f+RI|KqG5D0-0xe9^^R9lrxB%!3@i6%jNu^!4W z0+zxII^7u6?SZa{ZsEXe)Xs$ZKluXkOjX(wbV? z)Y#EjF7%f^3x)iCoe9E>cP6c(pjgG%}N# zAf`}oXCNgrD>3ZXwc?Jk9K~OpA0&b-^O!&d13U@Ppvqvml>kQQRIPY$tbk?&2X2&r zW<0pQ9P7a6YC$WM+Rv!)aeD2#FL}zIA%3?h75H%VFnN~)FH!8Go>`k zs@FFsiRVYv_Xx;5%qetof}p;*Bp7VRqdg6}t40hQil$(-4cyO-GpQQ-Cp|&cFnCC2 zU!CYq&>r17OMDl%%Z#JNa+m&Kws?91GRR$oCg-Bb2#`T^*&*7ri_qp@np)!wd_g}o zM{J#dKFb#fjSdH*(Li+Cp&3YM^)hrRp`!aKazWS46-&qNrROMO=K$4B#*&Q$!Gk2Hx*(xMV6{gZ z9XH7%qz7qAy_2FNhe(cbLDLoBV2djgwk?Nf$Os>X_7IJ(a$3+~l9OG~bOz|hn$8@i zku^SQ2T!UC8f?YbK}YqKd189{D9LedjD+MUji2oilA|E|`VcfMKNx z&Vsa)hWP$uLE1@mQ-Z#BHjI6ViJ1^Ib3-iGdS5LVAp9W_g747|p%QNn=VLC+UMRNP*!?N+&o5 z?Qt46-DzXc9;X>Ioi<0wE|T+HFb7(oZ*2~wT~vFgk3!l-v*$W#pybOWm%3m8DbR0* z0MeJKF1^r)p?#SaFLBzqk|%oiRUBI2a5pv%?Fkw&(IccMXtLi|2_;`8In4zVkOKYQ zNI?23jjZ$0G_2gB0jL zqC7}5RPA3u9;6xje$sZAc6=nna{wPS#P?dkf3eqz)WvY`FDS4Kp-(^LR0;_DMp$RU6_AHI@Uvv?)XKCuR z;Ji5n6I`t1IsM+<;zIhI7vUi^=V*+7AH~p|>wO<3N}ea_w`K|E1Nv2#Kzg1=`*W)V z((^QZMlb`1XReCAPmxPR6*b8jsbu5&j0y7SnQZ~tv7`^ldturFo*p$YFO-2n5*d;EnODeht=e(=qD8UtG=>W zd@uhKbEQm0-h8u~>w4n7V%nJN#7V2fLnOLRgTh@3M5607YIN|ll^}RS@4Z)Sn0dpO zl5baYgW}=A12luEc7aQ1R&#?E-4pzQQA>e}eoB!q@B%Ne?suO^>WxdphIDe-+UDe{ zWo?bA_C{;cj1^mzY-vw6CfBTAx9%rN#fTIig%=mWs*oA6PYVeMWjrjaXc7yh4F(=4ZrZwtGN3 zpgcTafN17tG=4%b)2gvEZW0gITq`Co3iW1R;8~H=n|*PUiYq-rf0Kp|3u>$$^f__= zilMf4<6~{HJ(Z>l*xcV3ljjnc`}=ds4>voaHUl<$0`Im^MZcuTzlm&{%whGV`E<;; zSZLaGi#WWPLAdFG;bjZNB)2FY77c{-78MT&2AVa2G0QFEyLJ<%Q7ZZsMP6j8*rpqo zh(Y=^FHyTv^nLz@|H>&OZ7GJeipWPFv4F`EYFstOiAC6oDv3Y4ZyI|2x9Cv z-dX`s!Z+SpDbv;4{t5)4d|-9jr7|z=HaTyFFtoS5w^HVF{?>ad5VXLsF+fPa_0|dq z>9^imDMR1+3k3uzFuXp2lr-$T71)k;-b$fwa-+UCjSvq20pH zQ30Xd!p>1ChNIfb&QXD&1%?M35Ynye92F4Kt?V3?VmPX2**Pi@q`>gL1*V~Wmg_=C z1%~!nc8*Fh9Mv{V8$%S*9Sk$pYBvQO)lR+T0r5ymvGG$o*_l=# zggbfM4EHe@Kedx*&2b+c?9_8C7rCIZQ$YV>jh%XqYeGk>*x0G(c)`NJI5EYrQ(8AZ zD1KIpzaiA@d>9Zy&CZ7bA=C^X_6u`^Du$cdr3)SsKgTvKgmPDJi_9^#i=7Qa6v|x; z8)i-|#qd-Y%J>fy8IBmQY z9{YD|tkoWNjt&~6*kit)aCSJWz3d#F;$ldFp`!yrx|f}!146o&oug9>hqaHLqXR(- ztO`b&0~HMIK6Z`{2<<+Gqnm`|wMaz|a^$y~R*IqePs>GOg(>nN<5z)xSXhxcHV-oo zsmQaJMq^V`8*WV8jV3jsm?f8Gr#<>EK$*u9C?kyOV+%|lWc#Dk+Q_po5B5Jbs%H~hFO6aoADh5B5THUG;PwB zs^}?>;KwI>cb8)5DUOxceOPMJzQG)BJP;NQ3>yr@*f+R*n4J`ev~TdpQBI2BX{4DD%ClBuXnMc?Ge?_5P?82TnVH&JFPdW$(c(?O^R*w>Z-#MrmE zU-*pyk@YPeGuBpAW?sYFz9LYTN*fMK0^6{w2ng-lzM^s!Jfs=!Ja$vx_ zEQj#qa(P?TG=2 delta 5953 zcmaKwYj9Q7702&ddvkMh^1LT62q1@NLlOev6~eA3bM_`5I@53YowfgK zuf6s@`}}Xd|8xGn5A!=W&;~xDNa^io$nlF`*5kS-DwR|>W#^%}et|{SzlcofJ>R@$Ojyu~) zU!7dtvTRLLqPcg}e?LuCWG}?ui(>Lv{_6hKVDdZ>~}UM&s`& zfcrU_PA`cNsJ~}Pfd&t8rUoiN2@m!UE>;u#0b^CPLP1)>IcBhev?TX7OEP-kAZKYH z)vhY_YsaelD>O8v?3hs+n$nDXOVE@S^>!*9*2>itk~XRFP6sk*$x!W&8n4!tRdX!R z;2APhr-vCp$WV<8&&iZpIx^Y6JYM}~z~oy3l85PWBPR$Z=NEK;Sf$>}q!;|%)75`6 zhCrNwPU~$Xt?oM^3k}ADs60Wx4U!-lZV=1fM(B93+zbY8_YcfakBvsJ^>#wD!+~fv z5ZyK?0}1W^rPQ3kSokh~>7D8qqtS1@i_q|JAQ}!t#|=Wai_r4L=vJm1-A$3V{oXTG zZN+YixlT5cWyT_I^hM&gNChG=a=b{fJf~X1XsF)fZ=0zmrS_1n2**fA^&T2I)*|NF zLsb*dFp(g*m-HkPB$NmoX)%b78gCKOy;MEXNYT)jNsll==_U{_9-6x>Q;siqNQn(Y z`!bc48!c!b=?Nw%9R=F4($Rf1e2k3-gU44nlY@%U(Ea|QS?c!Ge$u1N7-{Bys+?gF zlKnJmj+w2Os}GQ#Xo9^k8!)UilY2pWfQH!q^n&yNRaHBEgV`|l71DPWXL&PQ9!j=0 zCz|V$6T>a^TV|_h3Q=1`6q#P3$~(+FQDl0Brp+)#q`A6_^c)jRLt@})i;#BFnCTWF z?V_2pjWp)!L!@mm1}QMyq*NxypglyRZa3N(w1=o>n$f1a`Y`EPCYTN_(6%-m(!(@% zs*OT=m}bm0QpeRtNY|R611ZoR1_#n3RF#@%!_Xd~g^P?f!_`N7&Q%7qz#o{g8PFc3 zl5rLxJxUYoxyp2PH|Z%Rmipji#XOriqiyv{|k`MtYiwWAqS~L z<%<12WV77GS12P~B2Wg=2^gw^D@(T^$eH~-K=bx+R6@=2M5yg9O(YkuL~YRZUf#NoFQ50U5^ z4Gd2y5Q(l)X_@m_AVKiD-+8y{oO<1sk`t`vI%R|x4^Rft*ttO|KxDX1^A|XOB-E1Y zMn9p*zp;V4{Lk)D1O2*1sxy`0C@t^9Clo7kekZHWmFhkv9#s4s1r|&ET6411Yiw>$ zwysFjB}>|ddn;O6y_!1N{5G$>#ao{A)*#r@x;j~3?zMH)HF$|OFX7d$NjBp_?b^he za>s*ada^0GGB`99UTrct(rbr_3loV0^y*vc+JfW>Z$(E_lh@SP*6y{e@LJXcbNL_D zsvo8v49Y~+pAq*hUgRxqT%9bJ370pu)UEPDbBYHmP_VbQp%K+AZcQ||C4z#3dDVw3`=6TD$_hFfo7!&`z$gGYZ2@xBKBx3l z+!P>Z?Q_a62wu8ep)ZKT3lfB53Ji@H5ZW)S5d#K;VZ`Kp%@sd≧(ngF>`z5Q}w# zGV;u!gn#GCy%NQIKWBJNW>*ONv!H#V>AIXOWGq~YzY9oP$mu;t;_ zCYn4k{lN(7*<$}swJL9n*b1bxrHHNg%G$eJ7F+R^*t_TDgvZ_J*A#id|K~mGw<)=? zzqTGPE*|e2;$5tQMSv0hhGN;l`r~rsza?EA204OBf#J6WL5%&@dOaW}{nmQDxa`Sy z_L~fX6gV-FM7-`g)72vT79 zJqMB}Y|I`w7;Vg6Tz0$De}0LYFdlzH*~!Lj0WoPO8_NfTu#;i=#3jb%IId?s(cig5 zjT-}m7HkWa%~{XJ^C1fDdN!UfE{ogX|MXr}l)~QvJ(G&X+rY-+AqwFJHWn|=uy{|f zv3MXzf#Js+2EMA;p@iwxt zcpzwj;Y|yKbR!#!2ZVGZ8;cibSiGm$SUeDNu(-oo{FDGg`%I4(7H<<9 zdl+Z2ctCrcvY_3>#vURH=_ZCdYzYnpEZ%1S-uu+5<~WPN+swvA10meZqiW21B?fOZ zPruW=bnti2vYu~(;_rZVW5wS+%VTEQD5THw+zC7{kZq;}&PwyRH6T?^i#^F^ogGwWmdLWo%{R3lW8KE5jGc6&Yukylt#Q zrvQQ!82(5BLb{DB?Lx)mZIgwHrHnI7-gdk;#l5`gH4DP4EY2x0dw6X3R=nPJHWm{a zq}VQRPdGcQ-VQbvGtT*t0z-=lgmecRiwT5u2OEnSXIQ?SY%C@SQee3=Tz*o5q20;G zVgjMv$*`E?aiO~S!OW50`x}<3$_HeLyBYtf=!Z4Aa$~;4Jft`~_}V4v>sym;ZRW#; zC}u&pDA+w9v@db*0TwaIOFU?B@B`bGdv33v_W-UG{EaJSFB_`}lo%VU2!wDi!zvC7 zYQXim&wu0rHE68MayRW`^Qi%7fgmzcVIChF}+S zZt>6{*{b9^u}vLq{<>wVUn(zHH{xkVEbH##ScXO9>f&tqPZaBXH+qC4N11|}W$%x0 z@ZTY=^QGoj@mUFUAT$LSW(8vGtG1g!WPMe-nUb^xZuA&OPMEZEERJz3v=#-D_BeBR z-auG5Fl;UmV~=z1VZo$8q&?2VOM{bJARFho@SE(!5spe&NeIH2bNQk;{Q zEv%B<=-bTi-l|fTn|hlaS%s8IQsz57Wr8sU9=IkW9zgO=PnCFpDc%XIL?gs&U0{CC zP7!#m3mlV8MOgA*WF7u!10nl;;P9w}k^CZOhGr9p)EBw1$Y>F~go6=mb5UTnfZ>e_ Y45AsKI|f2}Y2&BMRrjaMb^crb1sn!5r2qf` diff --git a/crates/view/src/planner.rs b/crates/view/src/planner.rs index e0f8234b16..119ae5e25b 100644 --- a/crates/view/src/planner.rs +++ b/crates/view/src/planner.rs @@ -137,7 +137,7 @@ impl Planner { /// Set the expiry height for the transaction plan. #[instrument(skip(self))] pub fn expiry_height(&mut self, expiry_height: u64) -> &mut Self { - self.plan.expiry_height = expiry_height; + self.plan.transaction_parameters.expiry_height = expiry_height; self } @@ -146,7 +146,7 @@ impl Planner { /// Errors if the memo is too long. #[instrument(skip(self))] pub fn memo(&mut self, memo: MemoPlaintext) -> anyhow::Result<&mut Self> { - self.plan.memo_plan = Some(MemoPlan::new(&mut self.rng, memo)?); + self.plan.memo_data = Some(MemoPlan::new(&mut self.rng, memo)?); Ok(self) } @@ -156,13 +156,15 @@ impl Planner { #[instrument(skip(self))] pub fn fee(&mut self, fee: Fee) -> &mut Self { self.balance += fee.0; - self.plan.fee = fee; + self.plan.transaction_parameters.fee = fee; self } /// Calculate gas cost-based fees and add to the transaction plan. /// /// This function should be called once. + // TODO: clarify why we have both `add_gas_fees` and `fee` + // should one be `auto_fee` and the other `set_fee`? #[instrument(skip(self))] pub fn add_gas_fees(&mut self) -> &mut Self { let minimum_fee = self.gas_prices.price(&self.plan.gas_cost()); @@ -173,7 +175,7 @@ impl Planner { // change outputs. let fee = Fee::from_staking_token_amount(minimum_fee * Amount::from(2u32)); self.balance += fee.0; - self.plan.fee = fee; + self.plan.transaction_parameters.fee = fee; self } @@ -514,7 +516,7 @@ impl Planner { tracing::debug!(plan = ?self.plan, balance = ?self.balance, "finalizing transaction"); // Fill in the chain id based on the view service - self.plan.chain_id = chain_params.chain_id.clone(); + self.plan.transaction_parameters.chain_id = chain_params.chain_id.clone(); // Add the required spends to the planner for record in spendable_notes { @@ -593,12 +595,12 @@ impl Planner { // to now calculate the transaction's fee again and capture the excess as change // by subtracting the excess from the required value balance. let tx_real_fee = self.gas_prices.price(&self.plan.gas_cost()); - let excess_fee_spent = self.plan.fee.amount() - tx_real_fee; + let excess_fee_spent = self.plan.transaction_parameters.fee.amount() - tx_real_fee; self.balance -= Value { amount: excess_fee_spent, asset_id: *STAKING_TOKEN_ASSET_ID, }; - self.plan.fee = Fee::from_staking_token_amount(tx_real_fee); + self.plan.transaction_parameters.fee = Fee::from_staking_token_amount(tx_real_fee); // For any remaining provided balance, make a single change note for each for value in self.balance.provided().collect::>() { @@ -620,10 +622,10 @@ impl Planner { } // If there are outputs, we check that a memo has been added. If not, we add a blank memo. - if self.plan.num_outputs() > 0 && self.plan.memo_plan.is_none() { + if self.plan.num_outputs() > 0 && self.plan.memo_data.is_none() { self.memo(MemoPlaintext::blank_memo(self_address.clone())) .expect("empty string is a valid memo"); - } else if self.plan.num_outputs() == 0 && self.plan.memo_plan.is_some() { + } else if self.plan.num_outputs() == 0 && self.plan.memo_data.is_some() { anyhow::bail!("if no outputs, no memo should be added"); } diff --git a/crates/wallet/src/plan.rs b/crates/wallet/src/plan.rs index 937fa7bc43..f58cba714e 100644 --- a/crates/wallet/src/plan.rs +++ b/crates/wallet/src/plan.rs @@ -15,7 +15,7 @@ use penumbra_keys::{ use penumbra_num::Amount; use penumbra_stake::rate::RateData; use penumbra_stake::validator; -use penumbra_transaction::{memo::MemoPlaintext, plan::TransactionPlan}; +use penumbra_transaction::{memo::MemoPlaintext, plan::TransactionPlan, TransactionParameters}; use penumbra_view::{SpendableNoteRecord, ViewClient}; use rand_core::{CryptoRng, RngCore}; use tracing::instrument; @@ -179,10 +179,13 @@ where let output_data = swap.output_data; let mut plan = TransactionPlan { - chain_id: chain_params.clone().chain_id, - fee: swap_plaintext.claim_fee.clone(), + transaction_parameters: TransactionParameters { + chain_id: chain_params.clone().chain_id, + fee: swap_plaintext.claim_fee.clone(), + ..Default::default() + }, // The transaction doesn't need a memo, because it's to ourselves. - memo_plan: None, + memo_data: None, ..Default::default() }; diff --git a/crates/wasm/src/build.rs b/crates/wasm/src/build.rs index 0d619dd96b..1d0d626c99 100644 --- a/crates/wasm/src/build.rs +++ b/crates/wasm/src/build.rs @@ -36,7 +36,7 @@ pub fn build_action( let full_viewing_key: FullViewingKey = FullViewingKey::from_str(full_viewing_key)?; - let memo_key = transaction_plan.memo_plan.map(|memo_plan| memo_plan.key); + let memo_key = transaction_plan.memo_data.map(|memo_plan| memo_plan.key); let action = ActionPlan::build_unauth(action_plan, &full_viewing_key, &witness, memo_key)?; diff --git a/crates/wasm/src/planner.rs b/crates/wasm/src/planner.rs index f6f550dc33..bc8d7fe762 100644 --- a/crates/wasm/src/planner.rs +++ b/crates/wasm/src/planner.rs @@ -130,7 +130,7 @@ impl Planner { /// Set the expiry height for the transaction plan. pub fn expiry_height(&mut self, expiry_height: u64) -> &mut Self { - self.plan.expiry_height = expiry_height; + self.plan.transaction_parameters.expiry_height = expiry_height; self } @@ -138,7 +138,7 @@ impl Planner { /// /// Errors if the memo is too long. pub fn memo(&mut self, memo: MemoPlaintext) -> Result<&mut Self> { - self.plan.memo_plan = Some(MemoPlan::new(&mut self.rng, memo)?); + self.plan.memo_data = Some(MemoPlan::new(&mut self.rng, memo)?); Ok(self) } @@ -147,7 +147,7 @@ impl Planner { /// This function should be called once. pub fn fee(&mut self, fee: Fee) -> &mut Self { self.balance += fee.0; - self.plan.fee = fee; + self.plan.transaction_parameters.fee = fee; self } @@ -163,7 +163,7 @@ impl Planner { // change outputs. let fee = Fee::from_staking_token_amount(minimum_fee * Amount::from(2u32)); self.balance += fee.0; - self.plan.fee = fee; + self.plan.transaction_parameters.fee = fee; self } @@ -424,7 +424,7 @@ impl Planner { self_address: Address, ) -> anyhow::Result { // Fill in the chain id based on the view service - self.plan.chain_id = chain_params.chain_id.clone(); + self.plan.transaction_parameters.chain_id = chain_params.chain_id.clone(); // Add the required spends to the planner for record in spendable_notes { @@ -504,12 +504,12 @@ impl Planner { // to now calculate the transaction's fee again and capture the excess as change // by subtracting the excess from the required value balance. let tx_real_fee = self.gas_prices.price(&self.plan.gas_cost()); - let excess_fee_spent = self.plan.fee.amount() - tx_real_fee; + let excess_fee_spent = self.plan.transaction_parameters.fee.amount() - tx_real_fee; self.balance -= Value { amount: excess_fee_spent, asset_id: *STAKING_TOKEN_ASSET_ID, }; - self.plan.fee = Fee::from_staking_token_amount(tx_real_fee); + self.plan.transaction_parameters.fee = Fee::from_staking_token_amount(tx_real_fee); // For any remaining provided balance, make a single change note for each for value in self.balance.provided().collect::>() { @@ -531,9 +531,9 @@ impl Planner { } // If there are outputs, we check that a memo has been added. If not, we add a blank memo. - if self.plan.num_outputs() > 0 && self.plan.memo_plan.is_none() { + if self.plan.num_outputs() > 0 && self.plan.memo_data.is_none() { self.memo(MemoPlaintext::blank_memo(self_address))?; - } else if self.plan.num_outputs() == 0 && self.plan.memo_plan.is_some() { + } else if self.plan.num_outputs() == 0 && self.plan.memo_data.is_some() { anyhow::bail!("if no outputs, no memo should be added"); } diff --git a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go index 0cc8bfbb2b..f6112c1393 100644 --- a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go +++ b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go @@ -157,8 +157,6 @@ type TransactionBody struct { Actions []*Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` // Parameters determining if a transaction should be accepted by this chain. TransactionParameters *TransactionParameters `protobuf:"bytes,2,opt,name=transaction_parameters,json=transactionParameters,proto3" json:"transaction_parameters,omitempty"` - // The transaction fee. - Fee *v1alpha11.Fee `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"` // Detection data for use with Fuzzy Message Detection DetectionData *DetectionData `protobuf:"bytes,4,opt,name=detection_data,json=detectionData,proto3" json:"detection_data,omitempty"` // Sub-message containing memo ciphertext if a memo was added to the transaction. @@ -211,13 +209,6 @@ func (x *TransactionBody) GetTransactionParameters() *TransactionParameters { return nil } -func (x *TransactionBody) GetFee() *v1alpha11.Fee { - if x != nil { - return x.Fee - } - return nil -} - func (x *TransactionBody) GetDetectionData() *DetectionData { if x != nil { return x.DetectionData @@ -295,6 +286,8 @@ type TransactionParameters struct { // The chain this transaction is intended for. Including this prevents // replaying a transaction on one chain onto a different chain. ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + // The transaction fee. + Fee *v1alpha11.Fee `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"` } func (x *TransactionParameters) Reset() { @@ -343,6 +336,13 @@ func (x *TransactionParameters) GetChainId() string { return "" } +func (x *TransactionParameters) GetFee() *v1alpha11.Fee { + if x != nil { + return x.Fee + } + return nil +} + // Detection data used by a detection server performing Fuzzy Message Detection. type DetectionData struct { state protoimpl.MessageState @@ -1040,8 +1040,6 @@ type TransactionBodyView struct { ActionViews []*ActionView `protobuf:"bytes,1,rep,name=action_views,json=actionViews,proto3" json:"action_views,omitempty"` // Transaction parameters. TransactionParameters *TransactionParameters `protobuf:"bytes,2,opt,name=transaction_parameters,json=transactionParameters,proto3" json:"transaction_parameters,omitempty"` - // The transaction fee. - Fee *v1alpha11.Fee `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"` // The detection data in this transaction, only populated if // there are outputs in the actions of this transaction. DetectionData *DetectionData `protobuf:"bytes,4,opt,name=detection_data,json=detectionData,proto3" json:"detection_data,omitempty"` @@ -1096,13 +1094,6 @@ func (x *TransactionBodyView) GetTransactionParameters() *TransactionParameters return nil } -func (x *TransactionBodyView) GetFee() *v1alpha11.Fee { - if x != nil { - return x.Fee - } - return nil -} - func (x *TransactionBodyView) GetDetectionData() *DetectionData { if x != nil { return x.DetectionData @@ -1664,22 +1655,22 @@ func (x *WitnessData) GetStateCommitmentProofs() []*v1alpha1.StateCommitmentProo // Describes a planned transaction. Permits clients to prepare a transaction // prior submission, so that a user can review it prior to authorizing its execution. +// +// The `TransactionPlan` is a fully determined bundle binding all of a transaction's effects. +// The only thing it does not include is the witness data used for proving. type TransactionPlan struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The planner interface(s) for Actions to be performed, such as a Spend, Swap, - // or Delegation. See the ActionPlan docs for a full list of options. + // The sequence of actions planned for this transaction. Actions []*ActionPlan `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` - // Time, as block height, after which TransactionPlan should be considered invalid. - ExpiryHeight uint64 `protobuf:"varint,2,opt,name=expiry_height,json=expiryHeight,proto3" json:"expiry_height,omitempty"` - // The name of the network for which this TransactionPlan was built. - ChainId string `protobuf:"bytes,3,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` - Fee *v1alpha11.Fee `protobuf:"bytes,4,opt,name=fee,proto3" json:"fee,omitempty"` - CluePlans []*CluePlan `protobuf:"bytes,5,rep,name=clue_plans,json=cluePlans,proto3" json:"clue_plans,omitempty"` - // Planning interface for constructing an optional Memo for the Transaction. - MemoPlan *MemoPlan `protobuf:"bytes,6,opt,name=memo_plan,json=memoPlan,proto3" json:"memo_plan,omitempty"` + // Parameters determining if a transaction should be accepted by this chain. + TransactionParameters *TransactionParameters `protobuf:"bytes,2,opt,name=transaction_parameters,json=transactionParameters,proto3" json:"transaction_parameters,omitempty"` + // Detection data for use with Fuzzy Message Detection + DetectionData *DetectionDataPlan `protobuf:"bytes,4,opt,name=detection_data,json=detectionData,proto3" json:"detection_data,omitempty"` + // The memo plan for this transaction. + MemoData *MemoDataPlan `protobuf:"bytes,5,opt,name=memo_data,json=memoData,proto3" json:"memo_data,omitempty"` } func (x *TransactionPlan) Reset() { @@ -1721,37 +1712,70 @@ func (x *TransactionPlan) GetActions() []*ActionPlan { return nil } -func (x *TransactionPlan) GetExpiryHeight() uint64 { +func (x *TransactionPlan) GetTransactionParameters() *TransactionParameters { if x != nil { - return x.ExpiryHeight + return x.TransactionParameters } - return 0 + return nil } -func (x *TransactionPlan) GetChainId() string { +func (x *TransactionPlan) GetDetectionData() *DetectionDataPlan { if x != nil { - return x.ChainId + return x.DetectionData } - return "" + return nil } -func (x *TransactionPlan) GetFee() *v1alpha11.Fee { +func (x *TransactionPlan) GetMemoData() *MemoDataPlan { if x != nil { - return x.Fee + return x.MemoData } return nil } -func (x *TransactionPlan) GetCluePlans() []*CluePlan { - if x != nil { - return x.CluePlans +type DetectionDataPlan struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CluePlans []*CluePlan `protobuf:"bytes,5,rep,name=clue_plans,json=cluePlans,proto3" json:"clue_plans,omitempty"` +} + +func (x *DetectionDataPlan) Reset() { + *x = DetectionDataPlan{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (x *TransactionPlan) GetMemoPlan() *MemoPlan { +func (x *DetectionDataPlan) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DetectionDataPlan) ProtoMessage() {} + +func (x *DetectionDataPlan) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DetectionDataPlan.ProtoReflect.Descriptor instead. +func (*DetectionDataPlan) Descriptor() ([]byte, []int) { + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{17} +} + +func (x *DetectionDataPlan) GetCluePlans() []*CluePlan { if x != nil { - return x.MemoPlan + return x.CluePlans } return nil } @@ -1795,7 +1819,7 @@ type ActionPlan struct { func (x *ActionPlan) Reset() { *x = ActionPlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1808,7 +1832,7 @@ func (x *ActionPlan) String() string { func (*ActionPlan) ProtoMessage() {} func (x *ActionPlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1821,7 +1845,7 @@ func (x *ActionPlan) ProtoReflect() protoreflect.Message { // Deprecated: Use ActionPlan.ProtoReflect.Descriptor instead. func (*ActionPlan) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{17} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{18} } func (m *ActionPlan) GetAction() isActionPlan_Action { @@ -2147,7 +2171,7 @@ type CluePlan struct { func (x *CluePlan) Reset() { *x = CluePlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2160,7 +2184,7 @@ func (x *CluePlan) String() string { func (*CluePlan) ProtoMessage() {} func (x *CluePlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2173,7 +2197,7 @@ func (x *CluePlan) ProtoReflect() protoreflect.Message { // Deprecated: Use CluePlan.ProtoReflect.Descriptor instead. func (*CluePlan) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{18} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{19} } func (x *CluePlan) GetAddress() *v1alpha18.Address { @@ -2197,8 +2221,8 @@ func (x *CluePlan) GetPrecisionBits() uint64 { return 0 } -// Describes a plan for forming a `Memo`. -type MemoPlan struct { +// Describes a plan for forming a `MemoData`. +type MemoDataPlan struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -2209,23 +2233,23 @@ type MemoPlan struct { Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` } -func (x *MemoPlan) Reset() { - *x = MemoPlan{} +func (x *MemoDataPlan) Reset() { + *x = MemoDataPlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MemoPlan) String() string { +func (x *MemoDataPlan) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MemoPlan) ProtoMessage() {} +func (*MemoDataPlan) ProtoMessage() {} -func (x *MemoPlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19] +func (x *MemoDataPlan) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2236,19 +2260,19 @@ func (x *MemoPlan) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MemoPlan.ProtoReflect.Descriptor instead. -func (*MemoPlan) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{19} +// Deprecated: Use MemoDataPlan.ProtoReflect.Descriptor instead. +func (*MemoDataPlan) Descriptor() ([]byte, []int) { + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{20} } -func (x *MemoPlan) GetPlaintext() *MemoPlaintext { +func (x *MemoDataPlan) GetPlaintext() *MemoPlaintext { if x != nil { return x.Plaintext } return nil } -func (x *MemoPlan) GetKey() []byte { +func (x *MemoDataPlan) GetKey() []byte { if x != nil { return x.Key } @@ -2266,7 +2290,7 @@ type MemoCiphertext struct { func (x *MemoCiphertext) Reset() { *x = MemoCiphertext{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2279,7 +2303,7 @@ func (x *MemoCiphertext) String() string { func (*MemoCiphertext) ProtoMessage() {} func (x *MemoCiphertext) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2292,7 +2316,7 @@ func (x *MemoCiphertext) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoCiphertext.ProtoReflect.Descriptor instead. func (*MemoCiphertext) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{20} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{21} } func (x *MemoCiphertext) GetInner() []byte { @@ -2314,7 +2338,7 @@ type MemoPlaintext struct { func (x *MemoPlaintext) Reset() { *x = MemoPlaintext{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2327,7 +2351,7 @@ func (x *MemoPlaintext) String() string { func (*MemoPlaintext) ProtoMessage() {} func (x *MemoPlaintext) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2340,7 +2364,7 @@ func (x *MemoPlaintext) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoPlaintext.ProtoReflect.Descriptor instead. func (*MemoPlaintext) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{21} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{22} } func (x *MemoPlaintext) GetReturnAddress() *v1alpha18.Address { @@ -2369,7 +2393,7 @@ type MemoPlaintextView struct { func (x *MemoPlaintextView) Reset() { *x = MemoPlaintextView{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2382,7 +2406,7 @@ func (x *MemoPlaintextView) String() string { func (*MemoPlaintextView) ProtoMessage() {} func (x *MemoPlaintextView) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2395,7 +2419,7 @@ func (x *MemoPlaintextView) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoPlaintextView.ProtoReflect.Descriptor instead. func (*MemoPlaintextView) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{22} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{23} } func (x *MemoPlaintextView) GetReturnAddress() *v1alpha18.AddressView { @@ -2427,7 +2451,7 @@ type MemoView struct { func (x *MemoView) Reset() { *x = MemoView{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2440,7 +2464,7 @@ func (x *MemoView) String() string { func (*MemoView) ProtoMessage() {} func (x *MemoView) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2453,7 +2477,7 @@ func (x *MemoView) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoView.ProtoReflect.Descriptor instead. func (*MemoView) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{23} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{24} } func (m *MemoView) GetMemoView() isMemoView_MemoView { @@ -2505,7 +2529,7 @@ type MemoView_Visible struct { func (x *MemoView_Visible) Reset() { *x = MemoView_Visible{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2518,7 +2542,7 @@ func (x *MemoView_Visible) String() string { func (*MemoView_Visible) ProtoMessage() {} func (x *MemoView_Visible) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2531,7 +2555,7 @@ func (x *MemoView_Visible) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoView_Visible.ProtoReflect.Descriptor instead. func (*MemoView_Visible) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{23, 0} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{24, 0} } func (x *MemoView_Visible) GetCiphertext() *MemoCiphertext { @@ -2559,7 +2583,7 @@ type MemoView_Opaque struct { func (x *MemoView_Opaque) Reset() { *x = MemoView_Opaque{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2572,7 +2596,7 @@ func (x *MemoView_Opaque) String() string { func (*MemoView_Opaque) ProtoMessage() {} func (x *MemoView_Opaque) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2585,7 +2609,7 @@ func (x *MemoView_Opaque) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoView_Opaque.ProtoReflect.Descriptor instead. func (*MemoView_Opaque) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{23, 1} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{24, 1} } func (x *MemoView_Opaque) GetCiphertext() *MemoCiphertext { @@ -2655,7 +2679,7 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0x18, 0x0a, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0xab, 0x03, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0xee, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x44, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, @@ -2668,454 +2692,457 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, - 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x49, 0x0a, 0x09, 0x6d, 0x65, 0x6d, - 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, - 0x44, 0x61, 0x74, 0x61, 0x22, 0x31, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, - 0x6d, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x22, 0x57, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x48, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, - 0x22, 0x59, 0x0a, 0x0d, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x48, 0x0a, 0x09, 0x66, 0x6d, 0x64, 0x5f, 0x63, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, - 0x66, 0x6d, 0x64, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, - 0x65, 0x52, 0x08, 0x66, 0x6d, 0x64, 0x43, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xbd, 0x10, 0x0a, 0x06, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x05, - 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x50, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, - 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, - 0x70, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x50, 0x0a, 0x0a, 0x73, 0x77, 0x61, - 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, + 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x49, 0x0a, 0x09, + 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, + 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x22, 0x31, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, + 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x65, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x22, 0x94, 0x01, 0x0a, 0x15, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, + 0x65, 0x22, 0x59, 0x0a, 0x0d, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x48, 0x0a, 0x09, 0x66, 0x6d, 0x64, 0x5f, 0x63, 0x6c, 0x75, 0x65, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, + 0x5f, 0x66, 0x6d, 0x64, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, + 0x75, 0x65, 0x52, 0x08, 0x66, 0x6d, 0x64, 0x43, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xbd, 0x10, 0x0a, + 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, + 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x50, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, + 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, + 0x61, 0x70, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x50, 0x0a, 0x0a, 0x73, 0x77, + 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, + 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, + 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, + 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, - 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, - 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, - 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, - 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, - 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, - 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, - 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, - 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x56, 0x6f, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, + 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, + 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, + 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, - 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, - 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, - 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, - 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, - 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, + 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, + 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, + 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, - 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, - 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, + 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, + 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, - 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x64, 0x0a, 0x10, 0x75, - 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, - 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, - 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, - 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, - 0x6d, 0x12, 0x54, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, 0x64, - 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x12, 0x5a, 0x0a, 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, - 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, + 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, + 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, + 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x64, 0x0a, 0x10, + 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, + 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x12, 0x54, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, + 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, - 0x52, 0x0a, 0x64, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x63, 0x0a, 0x10, - 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, - 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, - 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, - 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, - 0x6c, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x97, 0x04, 0x0a, 0x16, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x73, 0x70, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x60, 0x0a, 0x10, 0x73, 0x70, 0x65, 0x6e, 0x64, - 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x4e, - 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x57, 0x0a, 0x0c, 0x61, 0x64, 0x76, - 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, + 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x12, 0x5a, 0x0a, 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, + 0x00, 0x52, 0x0a, 0x64, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x63, 0x0a, + 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, + 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, + 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x61, 0x6c, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x97, 0x04, 0x0a, + 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, + 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x60, 0x0a, 0x10, 0x73, 0x70, 0x65, 0x6e, + 0x64, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0f, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x57, 0x0a, 0x0c, 0x61, 0x64, + 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0b, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, + 0x74, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x76, + 0x69, 0x65, 0x77, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x56, 0x69, 0x65, 0x77, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, + 0x77, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x18, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, + 0x79, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x4d, 0x0a, + 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xac, 0x01, 0x0a, + 0x11, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, + 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, + 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0b, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x74, - 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x76, 0x69, - 0x65, 0x77, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, - 0x69, 0x65, 0x77, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, - 0x73, 0x12, 0x43, 0x0a, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x06, - 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x18, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, - 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x0a, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xac, 0x01, 0x0a, 0x11, - 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, - 0x65, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, - 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, - 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, 0xca, 0x01, 0x0a, 0x0f, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x54, - 0x0a, 0x09, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, 0x62, 0x6f, 0x64, 0x79, - 0x56, 0x69, 0x65, 0x77, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, - 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, - 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0xbc, 0x03, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, - 0x51, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, - 0x77, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, 0xca, 0x01, 0x0a, 0x0f, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, + 0x54, 0x0a, 0x09, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, - 0x65, 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, - 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, - 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x49, 0x0a, 0x09, 0x6d, - 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, 0x6d, 0x65, - 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x22, 0xda, 0x10, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x48, - 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, 0x62, 0x6f, 0x64, + 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, + 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0xff, 0x02, 0x0a, 0x13, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, + 0x12, 0x51, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, + 0x65, 0x77, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x49, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, + 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x22, 0xda, 0x10, 0x0a, 0x0a, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, + 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x44, - 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, + 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x56, 0x69, 0x65, 0x77, + 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, + 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x04, - 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, - 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, - 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, - 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, - 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, - 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, - 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, - 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, - 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x0d, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, - 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x56, 0x69, 0x65, + 0x77, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, + 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, - 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, + 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, + 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, + 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, + 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, + 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x48, + 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, + 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, - 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, - 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, - 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, + 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, - 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, - 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, - 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, + 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, + 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, + 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, + 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, - 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, 0x64, 0x61, 0x6f, 0x53, - 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x5a, 0x0a, - 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x64, - 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2b, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, - 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x0f, - 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, - 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, - 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, - 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x61, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, - 0x69, 0x65, 0x77, 0x22, 0x22, 0x0a, 0x0a, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, - 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0xaf, 0x02, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, - 0x0b, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, - 0x73, 0x68, 0x52, 0x0a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x5b, - 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, - 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, - 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, - 0x0a, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x73, 0x12, 0x6c, 0x0a, 0x14, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x75, - 0x74, 0x68, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, - 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x56, 0x6f, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x0b, 0x57, 0x69, - 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, - 0x68, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, - 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x6a, 0x0a, 0x17, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, - 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, - 0x52, 0x15, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x22, 0xf0, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x48, 0x0a, 0x07, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x12, 0x5a, 0x0a, 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, + 0x00, 0x52, 0x0a, 0x64, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x64, 0x0a, + 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0x22, 0x0a, 0x0a, 0x45, 0x66, 0x66, 0x65, 0x63, + 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0xaf, 0x02, 0x0a, 0x11, + 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x4f, 0x0a, 0x0b, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x66, 0x66, 0x65, + 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, + 0x73, 0x68, 0x12, 0x5b, 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x68, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, + 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x52, 0x0a, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x73, 0x12, + 0x6c, 0x0a, 0x14, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, + 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, + 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x73, 0x22, 0xbb, 0x01, + 0x0a, 0x0b, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, + 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, + 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, + 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, + 0x6a, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, + 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x15, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x22, 0xfa, 0x02, 0x0a, 0x0f, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, + 0x48, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, + 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5c, 0x0a, 0x0e, 0x64, + 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4d, 0x0a, 0x09, 0x6d, 0x65, 0x6d, + 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x07, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, - 0x70, 0x69, 0x72, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, - 0x65, 0x65, 0x12, 0x4b, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, - 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x73, 0x12, - 0x49, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x6e, - 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x6e, 0x22, 0xd5, 0x10, 0x0a, 0x0a, 0x41, + 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x08, + 0x6d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x22, 0x60, 0x0a, 0x11, 0x44, 0x65, 0x74, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4b, 0x0a, + 0x0a, 0x63, 0x6c, 0x75, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, + 0x09, 0x63, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x73, 0x22, 0xd5, 0x10, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, @@ -3257,82 +3284,82 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x70, - 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x08, - 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4f, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x09, - 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x26, 0x0a, 0x0e, 0x4d, - 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, - 0x6e, 0x65, 0x72, 0x22, 0x70, 0x0a, 0x0d, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, - 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x78, 0x0a, 0x11, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, - 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x12, 0x4f, 0x0a, 0x0e, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0d, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, - 0xcb, 0x03, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x12, 0x50, 0x0a, 0x07, - 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4d, - 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, - 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xb2, 0x01, - 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, - 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x53, 0x0a, - 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x1a, 0x5c, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x52, 0x0a, 0x0a, - 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, - 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, - 0x42, 0x0b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x42, 0xcc, 0x02, - 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x65, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x54, 0xaa, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, - 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2e, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, - 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, - 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x25, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, - 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x22, 0x71, 0x0a, 0x0c, + 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4f, 0x0a, 0x09, + 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, + 0x26, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x70, 0x0a, 0x0d, 0x4d, 0x65, 0x6d, 0x6f, 0x50, + 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x78, 0x0a, 0x11, 0x4d, 0x65, 0x6d, + 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x12, 0x4f, + 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, + 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x65, 0x78, 0x74, 0x22, 0xcb, 0x03, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, + 0x12, 0x50, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x2e, + 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, + 0x6c, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, + 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, + 0x65, 0x1a, 0xb2, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x52, 0x0a, + 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, + 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x74, 0x12, 0x53, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, + 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x52, 0x09, 0x70, 0x6c, 0x61, + 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x5c, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, + 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, + 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, + 0x74, 0x65, 0x78, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, + 0x77, 0x42, 0xcc, 0x02, 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x10, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x65, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, + 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x3b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x54, 0xaa, 0x02, 0x22, + 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0xca, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, + 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2e, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x25, 0x50, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3347,7 +3374,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP() []b return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescData } -var file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes = make([]protoimpl.MessageInfo, 27) var file_penumbra_core_transaction_v1alpha1_transaction_proto_goTypes = []interface{}{ (*Transaction)(nil), // 0: penumbra.core.transaction.v1alpha1.Transaction (*Id)(nil), // 1: penumbra.core.transaction.v1alpha1.Id @@ -3366,173 +3393,174 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_goTypes = []interf (*AuthorizationData)(nil), // 14: penumbra.core.transaction.v1alpha1.AuthorizationData (*WitnessData)(nil), // 15: penumbra.core.transaction.v1alpha1.WitnessData (*TransactionPlan)(nil), // 16: penumbra.core.transaction.v1alpha1.TransactionPlan - (*ActionPlan)(nil), // 17: penumbra.core.transaction.v1alpha1.ActionPlan - (*CluePlan)(nil), // 18: penumbra.core.transaction.v1alpha1.CluePlan - (*MemoPlan)(nil), // 19: penumbra.core.transaction.v1alpha1.MemoPlan - (*MemoCiphertext)(nil), // 20: penumbra.core.transaction.v1alpha1.MemoCiphertext - (*MemoPlaintext)(nil), // 21: penumbra.core.transaction.v1alpha1.MemoPlaintext - (*MemoPlaintextView)(nil), // 22: penumbra.core.transaction.v1alpha1.MemoPlaintextView - (*MemoView)(nil), // 23: penumbra.core.transaction.v1alpha1.MemoView - (*MemoView_Visible)(nil), // 24: penumbra.core.transaction.v1alpha1.MemoView.Visible - (*MemoView_Opaque)(nil), // 25: penumbra.core.transaction.v1alpha1.MemoView.Opaque - (*v1alpha1.MerkleRoot)(nil), // 26: penumbra.crypto.tct.v1alpha1.MerkleRoot - (*v1alpha11.Fee)(nil), // 27: penumbra.core.component.fee.v1alpha1.Fee - (*v1alpha12.Clue)(nil), // 28: penumbra.crypto.decaf377_fmd.v1alpha1.Clue - (*v1alpha13.Spend)(nil), // 29: penumbra.core.component.shielded_pool.v1alpha1.Spend - (*v1alpha13.Output)(nil), // 30: penumbra.core.component.shielded_pool.v1alpha1.Output - (*v1alpha14.Swap)(nil), // 31: penumbra.core.component.dex.v1alpha1.Swap - (*v1alpha14.SwapClaim)(nil), // 32: penumbra.core.component.dex.v1alpha1.SwapClaim - (*v1alpha15.ValidatorDefinition)(nil), // 33: penumbra.core.component.stake.v1alpha1.ValidatorDefinition - (*v1alpha16.IbcRelay)(nil), // 34: penumbra.core.component.ibc.v1alpha1.IbcRelay - (*v1alpha17.ProposalSubmit)(nil), // 35: penumbra.core.component.governance.v1alpha1.ProposalSubmit - (*v1alpha17.ProposalWithdraw)(nil), // 36: penumbra.core.component.governance.v1alpha1.ProposalWithdraw - (*v1alpha17.ValidatorVote)(nil), // 37: penumbra.core.component.governance.v1alpha1.ValidatorVote - (*v1alpha17.DelegatorVote)(nil), // 38: penumbra.core.component.governance.v1alpha1.DelegatorVote - (*v1alpha17.ProposalDepositClaim)(nil), // 39: penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - (*v1alpha14.PositionOpen)(nil), // 40: penumbra.core.component.dex.v1alpha1.PositionOpen - (*v1alpha14.PositionClose)(nil), // 41: penumbra.core.component.dex.v1alpha1.PositionClose - (*v1alpha14.PositionWithdraw)(nil), // 42: penumbra.core.component.dex.v1alpha1.PositionWithdraw - (*v1alpha14.PositionRewardClaim)(nil), // 43: penumbra.core.component.dex.v1alpha1.PositionRewardClaim - (*v1alpha15.Delegate)(nil), // 44: penumbra.core.component.stake.v1alpha1.Delegate - (*v1alpha15.Undelegate)(nil), // 45: penumbra.core.component.stake.v1alpha1.Undelegate - (*v1alpha15.UndelegateClaim)(nil), // 46: penumbra.core.component.stake.v1alpha1.UndelegateClaim - (*v1alpha17.DaoSpend)(nil), // 47: penumbra.core.component.governance.v1alpha1.DaoSpend - (*v1alpha17.DaoOutput)(nil), // 48: penumbra.core.component.governance.v1alpha1.DaoOutput - (*v1alpha17.DaoDeposit)(nil), // 49: penumbra.core.component.governance.v1alpha1.DaoDeposit - (*v1alpha16.Ics20Withdrawal)(nil), // 50: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - (*v1alpha13.Note)(nil), // 51: penumbra.core.component.shielded_pool.v1alpha1.Note - (*v1alpha18.AddressView)(nil), // 52: penumbra.core.keys.v1alpha1.AddressView - (*v1alpha19.DenomMetadata)(nil), // 53: penumbra.core.asset.v1alpha1.DenomMetadata - (*v1alpha18.PayloadKey)(nil), // 54: penumbra.core.keys.v1alpha1.PayloadKey - (*v1alpha1.StateCommitment)(nil), // 55: penumbra.crypto.tct.v1alpha1.StateCommitment - (*v1alpha110.Nullifier)(nil), // 56: penumbra.core.component.sct.v1alpha1.Nullifier - (*v1alpha13.SpendView)(nil), // 57: penumbra.core.component.shielded_pool.v1alpha1.SpendView - (*v1alpha13.OutputView)(nil), // 58: penumbra.core.component.shielded_pool.v1alpha1.OutputView - (*v1alpha14.SwapView)(nil), // 59: penumbra.core.component.dex.v1alpha1.SwapView - (*v1alpha14.SwapClaimView)(nil), // 60: penumbra.core.component.dex.v1alpha1.SwapClaimView - (*v1alpha17.DelegatorVoteView)(nil), // 61: penumbra.core.component.governance.v1alpha1.DelegatorVoteView - (*v1alpha111.SpendAuthSignature)(nil), // 62: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - (*v1alpha1.StateCommitmentProof)(nil), // 63: penumbra.crypto.tct.v1alpha1.StateCommitmentProof - (*v1alpha13.SpendPlan)(nil), // 64: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan - (*v1alpha13.OutputPlan)(nil), // 65: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan - (*v1alpha14.SwapPlan)(nil), // 66: penumbra.core.component.dex.v1alpha1.SwapPlan - (*v1alpha14.SwapClaimPlan)(nil), // 67: penumbra.core.component.dex.v1alpha1.SwapClaimPlan - (*v1alpha17.DelegatorVotePlan)(nil), // 68: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan - (*v1alpha14.PositionWithdrawPlan)(nil), // 69: penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan - (*v1alpha14.PositionRewardClaimPlan)(nil), // 70: penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan - (*v1alpha15.UndelegateClaimPlan)(nil), // 71: penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan - (*v1alpha18.Address)(nil), // 72: penumbra.core.keys.v1alpha1.Address + (*DetectionDataPlan)(nil), // 17: penumbra.core.transaction.v1alpha1.DetectionDataPlan + (*ActionPlan)(nil), // 18: penumbra.core.transaction.v1alpha1.ActionPlan + (*CluePlan)(nil), // 19: penumbra.core.transaction.v1alpha1.CluePlan + (*MemoDataPlan)(nil), // 20: penumbra.core.transaction.v1alpha1.MemoDataPlan + (*MemoCiphertext)(nil), // 21: penumbra.core.transaction.v1alpha1.MemoCiphertext + (*MemoPlaintext)(nil), // 22: penumbra.core.transaction.v1alpha1.MemoPlaintext + (*MemoPlaintextView)(nil), // 23: penumbra.core.transaction.v1alpha1.MemoPlaintextView + (*MemoView)(nil), // 24: penumbra.core.transaction.v1alpha1.MemoView + (*MemoView_Visible)(nil), // 25: penumbra.core.transaction.v1alpha1.MemoView.Visible + (*MemoView_Opaque)(nil), // 26: penumbra.core.transaction.v1alpha1.MemoView.Opaque + (*v1alpha1.MerkleRoot)(nil), // 27: penumbra.crypto.tct.v1alpha1.MerkleRoot + (*v1alpha11.Fee)(nil), // 28: penumbra.core.component.fee.v1alpha1.Fee + (*v1alpha12.Clue)(nil), // 29: penumbra.crypto.decaf377_fmd.v1alpha1.Clue + (*v1alpha13.Spend)(nil), // 30: penumbra.core.component.shielded_pool.v1alpha1.Spend + (*v1alpha13.Output)(nil), // 31: penumbra.core.component.shielded_pool.v1alpha1.Output + (*v1alpha14.Swap)(nil), // 32: penumbra.core.component.dex.v1alpha1.Swap + (*v1alpha14.SwapClaim)(nil), // 33: penumbra.core.component.dex.v1alpha1.SwapClaim + (*v1alpha15.ValidatorDefinition)(nil), // 34: penumbra.core.component.stake.v1alpha1.ValidatorDefinition + (*v1alpha16.IbcRelay)(nil), // 35: penumbra.core.component.ibc.v1alpha1.IbcRelay + (*v1alpha17.ProposalSubmit)(nil), // 36: penumbra.core.component.governance.v1alpha1.ProposalSubmit + (*v1alpha17.ProposalWithdraw)(nil), // 37: penumbra.core.component.governance.v1alpha1.ProposalWithdraw + (*v1alpha17.ValidatorVote)(nil), // 38: penumbra.core.component.governance.v1alpha1.ValidatorVote + (*v1alpha17.DelegatorVote)(nil), // 39: penumbra.core.component.governance.v1alpha1.DelegatorVote + (*v1alpha17.ProposalDepositClaim)(nil), // 40: penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + (*v1alpha14.PositionOpen)(nil), // 41: penumbra.core.component.dex.v1alpha1.PositionOpen + (*v1alpha14.PositionClose)(nil), // 42: penumbra.core.component.dex.v1alpha1.PositionClose + (*v1alpha14.PositionWithdraw)(nil), // 43: penumbra.core.component.dex.v1alpha1.PositionWithdraw + (*v1alpha14.PositionRewardClaim)(nil), // 44: penumbra.core.component.dex.v1alpha1.PositionRewardClaim + (*v1alpha15.Delegate)(nil), // 45: penumbra.core.component.stake.v1alpha1.Delegate + (*v1alpha15.Undelegate)(nil), // 46: penumbra.core.component.stake.v1alpha1.Undelegate + (*v1alpha15.UndelegateClaim)(nil), // 47: penumbra.core.component.stake.v1alpha1.UndelegateClaim + (*v1alpha17.DaoSpend)(nil), // 48: penumbra.core.component.governance.v1alpha1.DaoSpend + (*v1alpha17.DaoOutput)(nil), // 49: penumbra.core.component.governance.v1alpha1.DaoOutput + (*v1alpha17.DaoDeposit)(nil), // 50: penumbra.core.component.governance.v1alpha1.DaoDeposit + (*v1alpha16.Ics20Withdrawal)(nil), // 51: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + (*v1alpha13.Note)(nil), // 52: penumbra.core.component.shielded_pool.v1alpha1.Note + (*v1alpha18.AddressView)(nil), // 53: penumbra.core.keys.v1alpha1.AddressView + (*v1alpha19.DenomMetadata)(nil), // 54: penumbra.core.asset.v1alpha1.DenomMetadata + (*v1alpha18.PayloadKey)(nil), // 55: penumbra.core.keys.v1alpha1.PayloadKey + (*v1alpha1.StateCommitment)(nil), // 56: penumbra.crypto.tct.v1alpha1.StateCommitment + (*v1alpha110.Nullifier)(nil), // 57: penumbra.core.component.sct.v1alpha1.Nullifier + (*v1alpha13.SpendView)(nil), // 58: penumbra.core.component.shielded_pool.v1alpha1.SpendView + (*v1alpha13.OutputView)(nil), // 59: penumbra.core.component.shielded_pool.v1alpha1.OutputView + (*v1alpha14.SwapView)(nil), // 60: penumbra.core.component.dex.v1alpha1.SwapView + (*v1alpha14.SwapClaimView)(nil), // 61: penumbra.core.component.dex.v1alpha1.SwapClaimView + (*v1alpha17.DelegatorVoteView)(nil), // 62: penumbra.core.component.governance.v1alpha1.DelegatorVoteView + (*v1alpha111.SpendAuthSignature)(nil), // 63: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + (*v1alpha1.StateCommitmentProof)(nil), // 64: penumbra.crypto.tct.v1alpha1.StateCommitmentProof + (*v1alpha13.SpendPlan)(nil), // 65: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan + (*v1alpha13.OutputPlan)(nil), // 66: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan + (*v1alpha14.SwapPlan)(nil), // 67: penumbra.core.component.dex.v1alpha1.SwapPlan + (*v1alpha14.SwapClaimPlan)(nil), // 68: penumbra.core.component.dex.v1alpha1.SwapClaimPlan + (*v1alpha17.DelegatorVotePlan)(nil), // 69: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan + (*v1alpha14.PositionWithdrawPlan)(nil), // 70: penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan + (*v1alpha14.PositionRewardClaimPlan)(nil), // 71: penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan + (*v1alpha15.UndelegateClaimPlan)(nil), // 72: penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan + (*v1alpha18.Address)(nil), // 73: penumbra.core.keys.v1alpha1.Address } var file_penumbra_core_transaction_v1alpha1_transaction_proto_depIdxs = []int32{ 2, // 0: penumbra.core.transaction.v1alpha1.Transaction.body:type_name -> penumbra.core.transaction.v1alpha1.TransactionBody - 26, // 1: penumbra.core.transaction.v1alpha1.Transaction.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 27, // 1: penumbra.core.transaction.v1alpha1.Transaction.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot 6, // 2: penumbra.core.transaction.v1alpha1.TransactionBody.actions:type_name -> penumbra.core.transaction.v1alpha1.Action 4, // 3: penumbra.core.transaction.v1alpha1.TransactionBody.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters - 27, // 4: penumbra.core.transaction.v1alpha1.TransactionBody.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee - 5, // 5: penumbra.core.transaction.v1alpha1.TransactionBody.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData - 3, // 6: penumbra.core.transaction.v1alpha1.TransactionBody.memo_data:type_name -> penumbra.core.transaction.v1alpha1.MemoData - 28, // 7: penumbra.core.transaction.v1alpha1.DetectionData.fmd_clues:type_name -> penumbra.crypto.decaf377_fmd.v1alpha1.Clue - 29, // 8: penumbra.core.transaction.v1alpha1.Action.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend - 30, // 9: penumbra.core.transaction.v1alpha1.Action.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output - 31, // 10: penumbra.core.transaction.v1alpha1.Action.swap:type_name -> penumbra.core.component.dex.v1alpha1.Swap - 32, // 11: penumbra.core.transaction.v1alpha1.Action.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaim - 33, // 12: penumbra.core.transaction.v1alpha1.Action.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 34, // 13: penumbra.core.transaction.v1alpha1.Action.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 35, // 14: penumbra.core.transaction.v1alpha1.Action.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 36, // 15: penumbra.core.transaction.v1alpha1.Action.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 37, // 16: penumbra.core.transaction.v1alpha1.Action.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote - 38, // 17: penumbra.core.transaction.v1alpha1.Action.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote - 39, // 18: penumbra.core.transaction.v1alpha1.Action.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 40, // 19: penumbra.core.transaction.v1alpha1.Action.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 41, // 20: penumbra.core.transaction.v1alpha1.Action.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose - 42, // 21: penumbra.core.transaction.v1alpha1.Action.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw - 43, // 22: penumbra.core.transaction.v1alpha1.Action.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim - 44, // 23: penumbra.core.transaction.v1alpha1.Action.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 45, // 24: penumbra.core.transaction.v1alpha1.Action.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 46, // 25: penumbra.core.transaction.v1alpha1.Action.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim - 47, // 26: penumbra.core.transaction.v1alpha1.Action.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 48, // 27: penumbra.core.transaction.v1alpha1.Action.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 49, // 28: penumbra.core.transaction.v1alpha1.Action.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit - 50, // 29: penumbra.core.transaction.v1alpha1.Action.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 5, // 4: penumbra.core.transaction.v1alpha1.TransactionBody.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData + 3, // 5: penumbra.core.transaction.v1alpha1.TransactionBody.memo_data:type_name -> penumbra.core.transaction.v1alpha1.MemoData + 28, // 6: penumbra.core.transaction.v1alpha1.TransactionParameters.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee + 29, // 7: penumbra.core.transaction.v1alpha1.DetectionData.fmd_clues:type_name -> penumbra.crypto.decaf377_fmd.v1alpha1.Clue + 30, // 8: penumbra.core.transaction.v1alpha1.Action.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend + 31, // 9: penumbra.core.transaction.v1alpha1.Action.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output + 32, // 10: penumbra.core.transaction.v1alpha1.Action.swap:type_name -> penumbra.core.component.dex.v1alpha1.Swap + 33, // 11: penumbra.core.transaction.v1alpha1.Action.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaim + 34, // 12: penumbra.core.transaction.v1alpha1.Action.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 35, // 13: penumbra.core.transaction.v1alpha1.Action.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 36, // 14: penumbra.core.transaction.v1alpha1.Action.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 37, // 15: penumbra.core.transaction.v1alpha1.Action.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 38, // 16: penumbra.core.transaction.v1alpha1.Action.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 39, // 17: penumbra.core.transaction.v1alpha1.Action.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote + 40, // 18: penumbra.core.transaction.v1alpha1.Action.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 41, // 19: penumbra.core.transaction.v1alpha1.Action.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 42, // 20: penumbra.core.transaction.v1alpha1.Action.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 43, // 21: penumbra.core.transaction.v1alpha1.Action.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw + 44, // 22: penumbra.core.transaction.v1alpha1.Action.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim + 45, // 23: penumbra.core.transaction.v1alpha1.Action.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 46, // 24: penumbra.core.transaction.v1alpha1.Action.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 47, // 25: penumbra.core.transaction.v1alpha1.Action.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim + 48, // 26: penumbra.core.transaction.v1alpha1.Action.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend + 49, // 27: penumbra.core.transaction.v1alpha1.Action.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput + 50, // 28: penumbra.core.transaction.v1alpha1.Action.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 51, // 29: penumbra.core.transaction.v1alpha1.Action.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal 8, // 30: penumbra.core.transaction.v1alpha1.TransactionPerspective.payload_keys:type_name -> penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment 9, // 31: penumbra.core.transaction.v1alpha1.TransactionPerspective.spend_nullifiers:type_name -> penumbra.core.transaction.v1alpha1.NullifierWithNote - 51, // 32: penumbra.core.transaction.v1alpha1.TransactionPerspective.advice_notes:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 52, // 33: penumbra.core.transaction.v1alpha1.TransactionPerspective.address_views:type_name -> penumbra.core.keys.v1alpha1.AddressView - 53, // 34: penumbra.core.transaction.v1alpha1.TransactionPerspective.denoms:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata + 52, // 32: penumbra.core.transaction.v1alpha1.TransactionPerspective.advice_notes:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 53, // 33: penumbra.core.transaction.v1alpha1.TransactionPerspective.address_views:type_name -> penumbra.core.keys.v1alpha1.AddressView + 54, // 34: penumbra.core.transaction.v1alpha1.TransactionPerspective.denoms:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata 1, // 35: penumbra.core.transaction.v1alpha1.TransactionPerspective.transaction_id:type_name -> penumbra.core.transaction.v1alpha1.Id - 54, // 36: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey - 55, // 37: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 56, // 38: penumbra.core.transaction.v1alpha1.NullifierWithNote.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 51, // 39: penumbra.core.transaction.v1alpha1.NullifierWithNote.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 55, // 36: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey + 56, // 37: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 57, // 38: penumbra.core.transaction.v1alpha1.NullifierWithNote.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 52, // 39: penumbra.core.transaction.v1alpha1.NullifierWithNote.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note 11, // 40: penumbra.core.transaction.v1alpha1.TransactionView.body_view:type_name -> penumbra.core.transaction.v1alpha1.TransactionBodyView - 26, // 41: penumbra.core.transaction.v1alpha1.TransactionView.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 27, // 41: penumbra.core.transaction.v1alpha1.TransactionView.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot 12, // 42: penumbra.core.transaction.v1alpha1.TransactionBodyView.action_views:type_name -> penumbra.core.transaction.v1alpha1.ActionView 4, // 43: penumbra.core.transaction.v1alpha1.TransactionBodyView.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters - 27, // 44: penumbra.core.transaction.v1alpha1.TransactionBodyView.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee - 5, // 45: penumbra.core.transaction.v1alpha1.TransactionBodyView.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData - 23, // 46: penumbra.core.transaction.v1alpha1.TransactionBodyView.memo_view:type_name -> penumbra.core.transaction.v1alpha1.MemoView - 57, // 47: penumbra.core.transaction.v1alpha1.ActionView.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView - 58, // 48: penumbra.core.transaction.v1alpha1.ActionView.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView - 59, // 49: penumbra.core.transaction.v1alpha1.ActionView.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapView - 60, // 50: penumbra.core.transaction.v1alpha1.ActionView.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimView - 33, // 51: penumbra.core.transaction.v1alpha1.ActionView.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 34, // 52: penumbra.core.transaction.v1alpha1.ActionView.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 35, // 53: penumbra.core.transaction.v1alpha1.ActionView.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 36, // 54: penumbra.core.transaction.v1alpha1.ActionView.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 37, // 55: penumbra.core.transaction.v1alpha1.ActionView.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote - 61, // 56: penumbra.core.transaction.v1alpha1.ActionView.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView - 39, // 57: penumbra.core.transaction.v1alpha1.ActionView.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 40, // 58: penumbra.core.transaction.v1alpha1.ActionView.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 41, // 59: penumbra.core.transaction.v1alpha1.ActionView.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose - 42, // 60: penumbra.core.transaction.v1alpha1.ActionView.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw - 43, // 61: penumbra.core.transaction.v1alpha1.ActionView.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim - 44, // 62: penumbra.core.transaction.v1alpha1.ActionView.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 45, // 63: penumbra.core.transaction.v1alpha1.ActionView.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 47, // 64: penumbra.core.transaction.v1alpha1.ActionView.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 48, // 65: penumbra.core.transaction.v1alpha1.ActionView.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 49, // 66: penumbra.core.transaction.v1alpha1.ActionView.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit - 46, // 67: penumbra.core.transaction.v1alpha1.ActionView.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim - 50, // 68: penumbra.core.transaction.v1alpha1.ActionView.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 13, // 69: penumbra.core.transaction.v1alpha1.AuthorizationData.effect_hash:type_name -> penumbra.core.transaction.v1alpha1.EffectHash - 62, // 70: penumbra.core.transaction.v1alpha1.AuthorizationData.spend_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - 62, // 71: penumbra.core.transaction.v1alpha1.AuthorizationData.delegator_vote_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - 26, // 72: penumbra.core.transaction.v1alpha1.WitnessData.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot - 63, // 73: penumbra.core.transaction.v1alpha1.WitnessData.state_commitment_proofs:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitmentProof - 17, // 74: penumbra.core.transaction.v1alpha1.TransactionPlan.actions:type_name -> penumbra.core.transaction.v1alpha1.ActionPlan - 27, // 75: penumbra.core.transaction.v1alpha1.TransactionPlan.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee - 18, // 76: penumbra.core.transaction.v1alpha1.TransactionPlan.clue_plans:type_name -> penumbra.core.transaction.v1alpha1.CluePlan - 19, // 77: penumbra.core.transaction.v1alpha1.TransactionPlan.memo_plan:type_name -> penumbra.core.transaction.v1alpha1.MemoPlan - 64, // 78: penumbra.core.transaction.v1alpha1.ActionPlan.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendPlan - 65, // 79: penumbra.core.transaction.v1alpha1.ActionPlan.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputPlan - 66, // 80: penumbra.core.transaction.v1alpha1.ActionPlan.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapPlan - 67, // 81: penumbra.core.transaction.v1alpha1.ActionPlan.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimPlan - 33, // 82: penumbra.core.transaction.v1alpha1.ActionPlan.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 34, // 83: penumbra.core.transaction.v1alpha1.ActionPlan.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 35, // 84: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 36, // 85: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 37, // 86: penumbra.core.transaction.v1alpha1.ActionPlan.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote - 68, // 87: penumbra.core.transaction.v1alpha1.ActionPlan.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVotePlan - 39, // 88: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 50, // 89: penumbra.core.transaction.v1alpha1.ActionPlan.withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 40, // 90: penumbra.core.transaction.v1alpha1.ActionPlan.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 41, // 91: penumbra.core.transaction.v1alpha1.ActionPlan.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose - 69, // 92: penumbra.core.transaction.v1alpha1.ActionPlan.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan - 70, // 93: penumbra.core.transaction.v1alpha1.ActionPlan.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan - 44, // 94: penumbra.core.transaction.v1alpha1.ActionPlan.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 45, // 95: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 71, // 96: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan - 47, // 97: penumbra.core.transaction.v1alpha1.ActionPlan.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 48, // 98: penumbra.core.transaction.v1alpha1.ActionPlan.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 49, // 99: penumbra.core.transaction.v1alpha1.ActionPlan.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit - 72, // 100: penumbra.core.transaction.v1alpha1.CluePlan.address:type_name -> penumbra.core.keys.v1alpha1.Address - 21, // 101: penumbra.core.transaction.v1alpha1.MemoPlan.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext - 72, // 102: penumbra.core.transaction.v1alpha1.MemoPlaintext.return_address:type_name -> penumbra.core.keys.v1alpha1.Address - 52, // 103: penumbra.core.transaction.v1alpha1.MemoPlaintextView.return_address:type_name -> penumbra.core.keys.v1alpha1.AddressView - 24, // 104: penumbra.core.transaction.v1alpha1.MemoView.visible:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Visible - 25, // 105: penumbra.core.transaction.v1alpha1.MemoView.opaque:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Opaque - 20, // 106: penumbra.core.transaction.v1alpha1.MemoView.Visible.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext - 22, // 107: penumbra.core.transaction.v1alpha1.MemoView.Visible.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintextView - 20, // 108: penumbra.core.transaction.v1alpha1.MemoView.Opaque.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext + 5, // 44: penumbra.core.transaction.v1alpha1.TransactionBodyView.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData + 24, // 45: penumbra.core.transaction.v1alpha1.TransactionBodyView.memo_view:type_name -> penumbra.core.transaction.v1alpha1.MemoView + 58, // 46: penumbra.core.transaction.v1alpha1.ActionView.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView + 59, // 47: penumbra.core.transaction.v1alpha1.ActionView.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView + 60, // 48: penumbra.core.transaction.v1alpha1.ActionView.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapView + 61, // 49: penumbra.core.transaction.v1alpha1.ActionView.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimView + 34, // 50: penumbra.core.transaction.v1alpha1.ActionView.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 35, // 51: penumbra.core.transaction.v1alpha1.ActionView.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 36, // 52: penumbra.core.transaction.v1alpha1.ActionView.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 37, // 53: penumbra.core.transaction.v1alpha1.ActionView.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 38, // 54: penumbra.core.transaction.v1alpha1.ActionView.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 62, // 55: penumbra.core.transaction.v1alpha1.ActionView.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView + 40, // 56: penumbra.core.transaction.v1alpha1.ActionView.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 41, // 57: penumbra.core.transaction.v1alpha1.ActionView.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 42, // 58: penumbra.core.transaction.v1alpha1.ActionView.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 43, // 59: penumbra.core.transaction.v1alpha1.ActionView.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw + 44, // 60: penumbra.core.transaction.v1alpha1.ActionView.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim + 45, // 61: penumbra.core.transaction.v1alpha1.ActionView.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 46, // 62: penumbra.core.transaction.v1alpha1.ActionView.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 48, // 63: penumbra.core.transaction.v1alpha1.ActionView.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend + 49, // 64: penumbra.core.transaction.v1alpha1.ActionView.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput + 50, // 65: penumbra.core.transaction.v1alpha1.ActionView.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 47, // 66: penumbra.core.transaction.v1alpha1.ActionView.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim + 51, // 67: penumbra.core.transaction.v1alpha1.ActionView.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 13, // 68: penumbra.core.transaction.v1alpha1.AuthorizationData.effect_hash:type_name -> penumbra.core.transaction.v1alpha1.EffectHash + 63, // 69: penumbra.core.transaction.v1alpha1.AuthorizationData.spend_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + 63, // 70: penumbra.core.transaction.v1alpha1.AuthorizationData.delegator_vote_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + 27, // 71: penumbra.core.transaction.v1alpha1.WitnessData.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 64, // 72: penumbra.core.transaction.v1alpha1.WitnessData.state_commitment_proofs:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitmentProof + 18, // 73: penumbra.core.transaction.v1alpha1.TransactionPlan.actions:type_name -> penumbra.core.transaction.v1alpha1.ActionPlan + 4, // 74: penumbra.core.transaction.v1alpha1.TransactionPlan.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters + 17, // 75: penumbra.core.transaction.v1alpha1.TransactionPlan.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionDataPlan + 20, // 76: penumbra.core.transaction.v1alpha1.TransactionPlan.memo_data:type_name -> penumbra.core.transaction.v1alpha1.MemoDataPlan + 19, // 77: penumbra.core.transaction.v1alpha1.DetectionDataPlan.clue_plans:type_name -> penumbra.core.transaction.v1alpha1.CluePlan + 65, // 78: penumbra.core.transaction.v1alpha1.ActionPlan.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendPlan + 66, // 79: penumbra.core.transaction.v1alpha1.ActionPlan.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputPlan + 67, // 80: penumbra.core.transaction.v1alpha1.ActionPlan.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapPlan + 68, // 81: penumbra.core.transaction.v1alpha1.ActionPlan.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimPlan + 34, // 82: penumbra.core.transaction.v1alpha1.ActionPlan.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 35, // 83: penumbra.core.transaction.v1alpha1.ActionPlan.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 36, // 84: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 37, // 85: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 38, // 86: penumbra.core.transaction.v1alpha1.ActionPlan.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 69, // 87: penumbra.core.transaction.v1alpha1.ActionPlan.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVotePlan + 40, // 88: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 51, // 89: penumbra.core.transaction.v1alpha1.ActionPlan.withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 41, // 90: penumbra.core.transaction.v1alpha1.ActionPlan.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 42, // 91: penumbra.core.transaction.v1alpha1.ActionPlan.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 70, // 92: penumbra.core.transaction.v1alpha1.ActionPlan.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan + 71, // 93: penumbra.core.transaction.v1alpha1.ActionPlan.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan + 45, // 94: penumbra.core.transaction.v1alpha1.ActionPlan.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 46, // 95: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 72, // 96: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan + 48, // 97: penumbra.core.transaction.v1alpha1.ActionPlan.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend + 49, // 98: penumbra.core.transaction.v1alpha1.ActionPlan.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput + 50, // 99: penumbra.core.transaction.v1alpha1.ActionPlan.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 73, // 100: penumbra.core.transaction.v1alpha1.CluePlan.address:type_name -> penumbra.core.keys.v1alpha1.Address + 22, // 101: penumbra.core.transaction.v1alpha1.MemoDataPlan.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext + 73, // 102: penumbra.core.transaction.v1alpha1.MemoPlaintext.return_address:type_name -> penumbra.core.keys.v1alpha1.Address + 53, // 103: penumbra.core.transaction.v1alpha1.MemoPlaintextView.return_address:type_name -> penumbra.core.keys.v1alpha1.AddressView + 25, // 104: penumbra.core.transaction.v1alpha1.MemoView.visible:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Visible + 26, // 105: penumbra.core.transaction.v1alpha1.MemoView.opaque:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Opaque + 21, // 106: penumbra.core.transaction.v1alpha1.MemoView.Visible.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext + 23, // 107: penumbra.core.transaction.v1alpha1.MemoView.Visible.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintextView + 21, // 108: penumbra.core.transaction.v1alpha1.MemoView.Opaque.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext 109, // [109:109] is the sub-list for method output_type 109, // [109:109] is the sub-list for method input_type 109, // [109:109] is the sub-list for extension type_name @@ -3751,7 +3779,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActionPlan); i { + switch v := v.(*DetectionDataPlan); i { case 0: return &v.state case 1: @@ -3763,7 +3791,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CluePlan); i { + switch v := v.(*ActionPlan); i { case 0: return &v.state case 1: @@ -3775,7 +3803,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MemoPlan); i { + switch v := v.(*CluePlan); i { case 0: return &v.state case 1: @@ -3787,7 +3815,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MemoCiphertext); i { + switch v := v.(*MemoDataPlan); i { case 0: return &v.state case 1: @@ -3799,7 +3827,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MemoPlaintext); i { + switch v := v.(*MemoCiphertext); i { case 0: return &v.state case 1: @@ -3811,7 +3839,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MemoPlaintextView); i { + switch v := v.(*MemoPlaintext); i { case 0: return &v.state case 1: @@ -3823,7 +3851,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MemoView); i { + switch v := v.(*MemoPlaintextView); i { case 0: return &v.state case 1: @@ -3835,7 +3863,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MemoView_Visible); i { + switch v := v.(*MemoView); i { case 0: return &v.state case 1: @@ -3847,6 +3875,18 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MemoView_Visible); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoView_Opaque); i { case 0: return &v.state @@ -3907,7 +3947,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { (*ActionView_UndelegateClaim)(nil), (*ActionView_Ics20Withdrawal)(nil), } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17].OneofWrappers = []interface{}{ + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18].OneofWrappers = []interface{}{ (*ActionPlan_Spend)(nil), (*ActionPlan_Output)(nil), (*ActionPlan_Swap)(nil), @@ -3931,7 +3971,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { (*ActionPlan_DaoOutput)(nil), (*ActionPlan_DaoDeposit)(nil), } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23].OneofWrappers = []interface{}{ + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24].OneofWrappers = []interface{}{ (*MemoView_Visible_)(nil), (*MemoView_Opaque_)(nil), } @@ -3941,7 +3981,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc, NumEnums: 0, - NumMessages: 26, + NumMessages: 27, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto index f7e9183133..33ee4ec1ed 100644 --- a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto +++ b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto @@ -35,8 +35,6 @@ message TransactionBody { repeated Action actions = 1; // Parameters determining if a transaction should be accepted by this chain. TransactionParameters transaction_parameters = 2; - // The transaction fee. - component.fee.v1alpha1.Fee fee = 3; // Detection data for use with Fuzzy Message Detection DetectionData detection_data = 4; // Sub-message containing memo ciphertext if a memo was added to the transaction. @@ -59,6 +57,8 @@ message TransactionParameters { // The chain this transaction is intended for. Including this prevents // replaying a transaction on one chain onto a different chain. string chain_id = 2; + // The transaction fee. + component.fee.v1alpha1.Fee fee = 3; } // Detection data used by a detection server performing Fuzzy Message Detection. @@ -150,8 +150,6 @@ message TransactionBodyView { repeated ActionView action_views = 1; // Transaction parameters. TransactionParameters transaction_parameters = 2; - // The transaction fee. - component.fee.v1alpha1.Fee fee = 3; // The detection data in this transaction, only populated if // there are outputs in the actions of this transaction. DetectionData detection_data = 4; @@ -228,18 +226,22 @@ message WitnessData { // Describes a planned transaction. Permits clients to prepare a transaction // prior submission, so that a user can review it prior to authorizing its execution. +// +// The `TransactionPlan` is a fully determined bundle binding all of a transaction's effects. +// The only thing it does not include is the witness data used for proving. message TransactionPlan { - // The planner interface(s) for Actions to be performed, such as a Spend, Swap, - // or Delegation. See the ActionPlan docs for a full list of options. + // The sequence of actions planned for this transaction. repeated ActionPlan actions = 1; - // Time, as block height, after which TransactionPlan should be considered invalid. - uint64 expiry_height = 2; - // The name of the network for which this TransactionPlan was built. - string chain_id = 3; - component.fee.v1alpha1.Fee fee = 4; + // Parameters determining if a transaction should be accepted by this chain. + TransactionParameters transaction_parameters = 2; + // Detection data for use with Fuzzy Message Detection + DetectionDataPlan detection_data = 4; + // The memo plan for this transaction. + MemoDataPlan memo_data = 5; +} + +message DetectionDataPlan { repeated CluePlan clue_plans = 5; - // Planning interface for constructing an optional Memo for the Transaction. - MemoPlan memo_plan = 6; } // Describes a planned transaction action. @@ -298,8 +300,8 @@ message CluePlan { uint64 precision_bits = 3; } -// Describes a plan for forming a `Memo`. -message MemoPlan { +// Describes a plan for forming a `MemoData`. +message MemoDataPlan { // The plaintext. MemoPlaintext plaintext = 1; // The key to use to encrypt the memo. From 2fd8a673952f5f9e79b821c7b2fc408c4df3cdaa Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Thu, 28 Dec 2023 22:48:38 -0500 Subject: [PATCH 04/84] proto: make use of Nullifier proto type in tx format --- .../governance/src/delegator_vote/action.rs | 3 +- .../shielded-pool/src/spend/action.rs | 7 +- ...mbra.core.component.governance.v1alpha1.rs | 4 +- ...ore.component.governance.v1alpha1.serde.rs | 13 +- ...a.core.component.shielded_pool.v1alpha1.rs | 4 +- ....component.shielded_pool.v1alpha1.serde.rs | 13 +- .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 338429 -> 338587 bytes .../governance/v1alpha1/governance.pb.go | 1315 +++++++++-------- .../v1alpha1/shielded_pool.pb.go | 448 +++--- .../governance/v1alpha1/governance.proto | 3 +- .../v1alpha1/shielded_pool.proto | 2 +- 11 files changed, 911 insertions(+), 901 deletions(-) diff --git a/crates/core/component/governance/src/delegator_vote/action.rs b/crates/core/component/governance/src/delegator_vote/action.rs index 854193ff52..c0a0f2587e 100644 --- a/crates/core/component/governance/src/delegator_vote/action.rs +++ b/crates/core/component/governance/src/delegator_vote/action.rs @@ -42,7 +42,7 @@ impl From for pb::DelegatorVoteBody { vote: Some(value.vote.into()), value: Some(value.value.into()), unbonded_amount: Some(value.unbonded_amount.into()), - nullifier: value.nullifier.to_bytes().into(), + nullifier: Some(value.nullifier.into()), rk: value.rk.to_bytes().into(), } } @@ -72,6 +72,7 @@ impl TryFrom for DelegatorVoteBody { .try_into()?, nullifier: msg .nullifier + .ok_or_else(|| anyhow::anyhow!("missing nullifier in `DelegatorVote`"))? .try_into() .context("invalid nullifier in `DelegatorVote`")?, rk: { diff --git a/crates/core/component/shielded-pool/src/spend/action.rs b/crates/core/component/shielded-pool/src/spend/action.rs index 7a8bebcf7b..e518ea1c7c 100644 --- a/crates/core/component/shielded-pool/src/spend/action.rs +++ b/crates/core/component/shielded-pool/src/spend/action.rs @@ -72,11 +72,10 @@ impl DomainType for Body { impl From for pb::SpendBody { fn from(msg: Body) -> Self { - let nullifier_bytes: [u8; 32] = msg.nullifier.into(); let rk_bytes: [u8; 32] = msg.rk.into(); pb::SpendBody { balance_commitment: Some(msg.balance_commitment.into()), - nullifier: nullifier_bytes.to_vec(), + nullifier: Some(msg.nullifier.into()), rk: rk_bytes.to_vec(), } } @@ -92,7 +91,9 @@ impl TryFrom for Body { .try_into() .context("malformed balance commitment")?; - let nullifier = (proto.nullifier[..]) + let nullifier = proto + .nullifier + .ok_or_else(|| anyhow::anyhow!("missing nullifier"))? .try_into() .context("malformed nullifier")?; diff --git a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs index 6c9cfbf74e..a247c87804 100644 --- a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs @@ -191,8 +191,8 @@ pub struct DelegatorVoteBody { super::super::super::num::v1alpha1::Amount, >, /// The nullifier of the input note. - #[prost(bytes = "vec", tag = "6")] - pub nullifier: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag = "6")] + pub nullifier: ::core::option::Option, /// The randomized validating key for the spend authorization signature. #[prost(bytes = "vec", tag = "7")] pub rk: ::prost::alloc::vec::Vec, diff --git a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.serde.rs index 7eb7eb4786..b0b2ecf5ea 100644 --- a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.serde.rs @@ -967,7 +967,7 @@ impl serde::Serialize for DelegatorVoteBody { if self.unbonded_amount.is_some() { len += 1; } - if !self.nullifier.is_empty() { + if self.nullifier.is_some() { len += 1; } if !self.rk.is_empty() { @@ -991,9 +991,8 @@ impl serde::Serialize for DelegatorVoteBody { if let Some(v) = self.unbonded_amount.as_ref() { struct_ser.serialize_field("unbondedAmount", v)?; } - if !self.nullifier.is_empty() { - #[allow(clippy::needless_borrow)] - struct_ser.serialize_field("nullifier", pbjson::private::base64::encode(&self.nullifier).as_str())?; + if let Some(v) = self.nullifier.as_ref() { + struct_ser.serialize_field("nullifier", v)?; } if !self.rk.is_empty() { #[allow(clippy::needless_borrow)] @@ -1123,9 +1122,7 @@ impl<'de> serde::Deserialize<'de> for DelegatorVoteBody { if nullifier__.is_some() { return Err(serde::de::Error::duplicate_field("nullifier")); } - nullifier__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; + nullifier__ = map_.next_value()?; } GeneratedField::Rk => { if rk__.is_some() { @@ -1143,7 +1140,7 @@ impl<'de> serde::Deserialize<'de> for DelegatorVoteBody { vote: vote__, value: value__, unbonded_amount: unbonded_amount__, - nullifier: nullifier__.unwrap_or_default(), + nullifier: nullifier__, rk: rk__.unwrap_or_default(), }) } diff --git a/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.rs index a6ae3be898..d88d6067d2 100644 --- a/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.rs @@ -201,8 +201,8 @@ pub struct SpendBody { super::super::super::asset::v1alpha1::BalanceCommitment, >, /// The nullifier of the input note. - #[prost(bytes = "vec", tag = "3")] - pub nullifier: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag = "6")] + pub nullifier: ::core::option::Option, /// The randomized validating key for the spend authorization signature. #[prost(bytes = "vec", tag = "4")] pub rk: ::prost::alloc::vec::Vec, diff --git a/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.serde.rs index e1eff26843..dd42250573 100644 --- a/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.serde.rs @@ -1995,7 +1995,7 @@ impl serde::Serialize for SpendBody { if self.balance_commitment.is_some() { len += 1; } - if !self.nullifier.is_empty() { + if self.nullifier.is_some() { len += 1; } if !self.rk.is_empty() { @@ -2005,9 +2005,8 @@ impl serde::Serialize for SpendBody { if let Some(v) = self.balance_commitment.as_ref() { struct_ser.serialize_field("balanceCommitment", v)?; } - if !self.nullifier.is_empty() { - #[allow(clippy::needless_borrow)] - struct_ser.serialize_field("nullifier", pbjson::private::base64::encode(&self.nullifier).as_str())?; + if let Some(v) = self.nullifier.as_ref() { + struct_ser.serialize_field("nullifier", v)?; } if !self.rk.is_empty() { #[allow(clippy::needless_borrow)] @@ -2092,9 +2091,7 @@ impl<'de> serde::Deserialize<'de> for SpendBody { if nullifier__.is_some() { return Err(serde::de::Error::duplicate_field("nullifier")); } - nullifier__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; + nullifier__ = map_.next_value()?; } GeneratedField::Rk => { if rk__.is_some() { @@ -2108,7 +2105,7 @@ impl<'de> serde::Deserialize<'de> for SpendBody { } Ok(SpendBody { balance_commitment: balance_commitment__, - nullifier: nullifier__.unwrap_or_default(), + nullifier: nullifier__, rk: rk__.unwrap_or_default(), }) } diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index c7439d66cf8b1d8cfc282518a64215bdb554468c..cec3dfb78bc91fbd95d2bab836736f99a3ac8fa9 100644 GIT binary patch delta 9499 zcmZu%dvI1omcM=aa`SyR2}y3ABtQ}fA$-Y~5J-3nA&7uHMLjqI) z8I@7cX$BW&5o=TyA}rBlbsk*<@ z=luHgIj2weyIjkG_iH!2Jzf|;%4iq@5FwgD*jPE+4|e>MIVn|kgYCJx%itC zkCIf?E%kq16@E(4!Et^s)yCr@N3HHb)9)JK$98&4A z1KH83){kj{%y4e^YkhK^zzv)nQP`toc*&%u$Cf@i_whOEVjUGV`Mz`=EGdX}_EWJ4 zhnzrWQ=r!e(1B5kMNrI+rCWrxXJ=;lJ|+->o97e>JWH1&lo!kMt3W51u0U-or|Luj zb=8)TL8G9!r$yi?NL2cLv_6IkRjen~H5O8?(O|~HyfTZRU)Zxk&r5;Z#pxE#OVH{P zE70>2&s(hixhLi=rkJ*b3>wApEQ`QXoRjMh#=OMFrRuYubX#L-yFSlb8qYBL0{W#v zww_l8ZkbaV&MTo+hVa#cNAkSoYH9`bPm~)T$e>Yf<^=*zIp(d@`WUKEyDKP}s4(l5 zy2dKZdV!!{f%S&^sIi1f??uVR1cfV++WAD#N&5)|{Y2+3+D|udlTM$|Pb5huW4V3} z=5^W68ud@Ts5VhU+1e5^Xw>9{l@0`+nxfAB?OGp0wdz0>H8i_=N7T|_W5rRb9df%x zu&Nz3TF>4gaO<3Y;p`otRTnGLMb?35ucsVs0)Qf`H^BmeV!a7E5a{Yn(7nJN;EX5; z`8=o%h;`CY@tALrYDrMCd5|H33>t$>)PX=W2vIMx@VvE2rq+55tTyr23Ln&F5XyLp$PcBw7Dk(oPl!}ZA&os1i zg+(A3T3Mw_)Z;ugsJALnq7Br=XmBw#bgi<8Rcd;hMY@4(R5vP-`bJYK9`8KanAh3p zyU=eeF44hH3EYv+xG-2L&>Cq{pTfZ!#i_6Cjb|)(lqmop=#4T300g#CrT|iSA!E1z z?nsO=sfUb(CiOtjAA{8MMo!^oI94T-*vMlkPx}WM^vC9h-U2~?tnoG$xD%XNp|>$; zO)#mAvA2^rwLN>|8I>~0Bp3*KlT3nvz%~g9z74a-c%sSb|B^JUd2+ixdpkLvuYG|A z^d}b<>4J#q*8R5%0wajf6jKmD;Fw|x0tg&aP!PTKoB-3Pw6MD^h^0*>i|4C7)l{08 zWW>W5nDl~`$UgX;@;ZX?Ku8e`(iVI!HjQ zQkC@Uv_5vjQ|j;fQoqDg?f!7Pdnz6_OT+;BPnDGVBegype_H*vFO5n(ZFY~ZH^S3q z_W(ivY3v@}Z9Z>=XVmaI8dLp@*$9w<|Cv~L`vHRfGr4*GB(0wk$Y-fb;Rsc;StQk0 zb=cO=wi|MXeHNFG@RFDU!)MVs@6v|2v^A^V^>p{h=5~GVan0@eG3Yl#KMiY24ZP*T zS%Ji+;xd(rT3#;T5jWLTWY&E_9jm9h(Ju(JlyqE4A%xBg0zJh*TuxpPXe!K>7I-fT z=O>0O4Vo{CSf*}RY0S1#-QJJ-j9zKkAcW3J%LWLxm6k0%@Lmzl>xL~Iny-jh7Ot4C zo6c;j)a&nwY;~$1l_XbLN{m2pm8Ap(Oe=2K!L&VbjP9W-tTdwyrL2n6J7{@)=oa!7C41w-vA|(|K z!(+(KD&cnWGtdMyh5`gRkpNdqCGrc}EugSgxVh~L?BQC`>}Ez1n5-4qIqfFEKNoIR zy8w~(+{CpuT zcGOAOz#%ZBm}&zPVb8l6f%mp>4yfw`s3zlWft$j7L^OkY{5z^@AT20(N1%hw(n1k< z?+V(CFpn>pqW*0V<*GviX?WJV!p{bq2Rm-E?)xfx5cL`GzCbhMFl#Z^^S(eoYZt(c z_XRpp$W4K_RnP~_t*Qr8x!MGZsau5~=n!S#b_?bf;g%Q%U@Q}Y>_~t)T0~A!B)}Xk zqHD4Lp!Qz|-VQ;#RAMmAow`Hd(Bh)VkbHM{cSh8}poYLw>x(=D?bP}%4*{t8WhVoN zgV!qPBXw~wRW`Q@{i*~x6Ymk|@Em#|&;t4v!rwg{6Eg~L_i#k`yvg8_*(=;|Zv(*; zFx}{K4ek{k!%c%xnC=y5&}`bAflH0MPq>9f84ZtNnuW04C(?5*gzY|25T5QCXx8q2 zfwL_1Nx~E`tQ`!(bicr9W=6F#PP00cQfA;C6wZGOq5RvZHaI9^`Th{NlZj&T4h#BE zHU2gloOPIsuF52ZwKjH{DV zkcs`_eIn?jx^E~|W_`l)yYwu&a89U4hSB&zVbPr6IC34rNbiml9LaV8<~qT#DK46jRu@eh)85_O77>P}(iRbhrP9WP9hs0z5je8;P+*9 zYB*I@Uye-J-^(J-H$R?~{k_cXxeERUf%gaDyss)7sWRgad?fY*QNZqARZWdFAbHgi zK?tI&c5XlrUFEs?O*-INzE;N@sW$m_WWw%#E#e*Z+|Yr^*CH#>EhykHf1@f!P*d`o z$b^Z$5%C;j!tQ><2M}K(0!BB~z7Z(18-l_pKnRl?A}!p*fUIQqaDYX+e-yZy@$!L? zOh9YOpKSgZnc^x1XtsZVHw*Wspq|FG155$K4%LiN*xnRDH#-d5n*uKwT)F`l&7TBy zGJ{?S!}7x*O#dWO?ILl*0>mOiQ@pc&D=0kl14@A@VA$*cVfwA;SYj81OBQgKuKpK- z=jHx#OVBb>l_Tj~)-7%@joA7a;H>_j^6sG9>wmBfMvKAtgKaQc0LmYDH@rfc5=Y&O zL_cZ$=^d0RvR))m-m59~0k=~9`zX4vekHjv-8KR~_dvOl;^C2@1)y9>*d=d-UZOv( zB3i2kkES)jD#AJbDrrjHpjNkD7)=?XZZ)Czaw`fAdPV|puBJq#-(pQMt7`3j zC-oNf>c^&BhU&+rT!@NI&xP)wudOF~TfH=v&K9gEoU=a-Idx;(NN%$5&q8HpcIc#5 zkE8#sha~Kg0iTy(-$(@&#<8%+ZKTR7e|^aA2Hr1;-cx(W)4$&HOY(E|Q5#79{N%n% zI1$4&0;A#}2yY5n0o?DBxhZG?Jb#yvo1wUvBiCEV*-fIbx7xT8Ukr~1~7c@GWo~~&aMs61$(!gOB!kZ7NVLDbqZg$}9A?E;vFICxa zWe?$FB)w$WzJFkqPhS(>4{*VI@ulzYpi}v3*8Om`T-Y*);N!XNWR%&M*SI zGn5$~_kgfFLpZbf+LXs<_F1)a8V#;KOVr(%@RmJGWqNzF4ouF{&|!W9Hbs8meM!zG z)%hM8miZ;ciuHcT=MbMa2?qe}dFwhL_|Dse1A_0oO?W32CUF)0tDd|>ea_W5MH7B zetusNb_%?! zxT4QZTf7j0=%y`RKoH%u#aqa8fBTokTa<(#EL#lgaZ|Q{F#gt-Z6TjC-*MRv>x*YB z`Mb!FiNCYOi%}SUXN$Lx(f7KWz)-^Q`^b<>_09X?(_WGS)?xViAYxd9`FAjZhP3kyrh^G)u+^*q)cB zF$03_d1)GR5ie_nREO@O`Z@r(z9O>ZV6Bj*KVuY@E2OE%&Vjd5I;+&RSyY#?QpURK z?<}3!kC#=={Zv%_vNShp2to9+#Me&lsDL1PS>hWNe}wJKF1#w$m`dt8AROnr!mAR$ z3>l~u@Y9fiuzpomR{7NkN0-2RT{;`o$@?jp@w!Cw8w1WR?8X}9&!(}-HFiA^f@qD5 zhi(9ZXbro;M^qPf<4v`EHn!xO(sTs~St?Ce0EEe#5?$eWuJkTkFl*Jd*|Z|LHkyW+ z*2;KS?Jsm-vsRXN^B>YCKMz zR*4o8Sh@z@M(Mnx^5#-S#zu+n?tCV6<*;m0;~}ixB+XY* z2tl+-=7;eG1komr?@SOC2i|+qX;qu%(tR24aeVoULNOCsE6lKBDo`4G3Q`Mv|`S|j%dZ$O}o^gd5HF|Xcj(ac15%BIkSsr z;a|pzd0D%q8vLZ}sa+h$x4qqx^i_?AVZ2*5=(`|881I(%gg3X6z}qXG|B&I$tpu8T zB~B`SDK6oB?N_fg(cQ`YHt`TbXTQu3UlRerwqN2k@lI`m!2>FDK8+iFATr@B9f(YL zKOA5azB-oTgO+rDZ5$|t=0ONd*;A#~boOaQ^wW@FNwT|XVhWC8%9 zc{;M>pq#cr!6+r+Fhvm$9Mfr=U gXYm!w1|f8=NOKVd1lyGtCoLlU$<|4W+^q-xAH=e9cmMzZ delta 9420 zcmY*fYjjmbvff?2**Rw?A;~6hAP*o94mpQ}BtQrl2*^u;VGt2f9?J8|pree}<#-L^ zV3f=Quye+Fy0m z*VR?k)xG!O_wQx@ zi4E$7R`H9VmmgjBtEEeqEL^hS&U{%SD$_b{d{q2Lw#ZedH;Jk~-2(Y@O7YYDZmv&4 z07bGal0exx9pz7n4`;cp7lf~N&6guOntu?#7OH50yhm;7CM!GEToI?b(Yw^KfT&#j z>x`bB@wlWRef*Et2tOt0<~V;=8Rhhgq1XCRpJXJEsm^fy7!72aQ>`EUK&Cqh{g@ia z?#>v$#wXVa+$^VudZV0bZqADI@>6}+b;t>1K!J7|01FDtf`G7~Ad+s!u%I9_%lAPg z0yoDg6nK^{FFPla>sNtJFkPOSR6&VY9u;Xz$e@u|TwxJ-@?r!0L0TU}1?t%fsvA>4 zIYxsS3v&Be1pR`FN>R%l(-U))sJkj@L~}`(K2Ki~%`nyi`XxaRJ-rOvzD_KhUP7xcqF4_e$!-pj8wmOpSazsSf$XndfPQm- z3Rfbv^ZkPY?I#fQ`}gXt{d5Dj%BczcM6P62B*!0!d0qB1q5fG#1FG@t0ZAx?9C$mcE2*id$|6=7SZ&tk z26B{ITZO!jGIiqd?vtZ(dl`Kf`lE_Vbj(u%cZ_pQ7^4(ujWKyo;TVnOyw}9Wnv6pR zjj<-WG8P6FX8yjzO4H*kfu7RLG9=YaioI(i9MDY67~uJ#Nv=ugZG z{RD#kMB`^9a3?u8g?>h$HOb^M!hTNST*hNlOco)7#uSr9An;5<7Dr&-2v0FpeLIL6 z)QJRnv8i1~?CjKNo^}OlFq&G}Q>Q+{&Q3$>3uDtv(jkKSG?R27s82)EtMwcJ)76-P zG$=ORtSv&Ev*~7SK&*nbjnn$b*$lOLAWf*6VR9DHIh&DNX58VN&8Y0J_hf`nvNO@O zaG>nbXkSun?T@cmHWw9IP0*J>_!wwDvR~93me5Cq;yVPk3 zGvh;RDKb+5H+*(unc6gn`p1@;@`el=%gmkt0?#tDCvXo5xnqqf!>GQmInC$=! z=-+|uP@?&<9qv>!YpGA{PO~3;y&vv0`vD00cVa*Ap2MXhkjvGxwcuZFdKhHjUtZK- zM+b;is^Wf~*2jLhTXnCa!Lhr${NWyUcQovPSUmLaE-Ce|*7_*rd(^Tz8W+3A>>pq6 zgL};W0fPQL*gw4Ad~Uw?s!!@@LgL=8yBP0)dn4hs1{%=6Hz(KsnbuDUuK86_jl=Y3%kEdKLY*x zp`V6zr3T&u!g)vtREBg@QOFMnc*Q+46?t_ZR0{`F-S`Iu8cRAZkq|=XL4nRTK&>CCo9-86)1<7+G%gwR=I*#N<|hS_*I=_ot*F|~gP)g>Mil&AfNkfkEO z*g}{*CQwObSWfrAdqOx*siL9OujL65N%IRp)E)O!?{|X!OUS}#$*7XMZ(qIu2Q7yK zL!kSeNJ&Mb@EEe6>xEn3XP_}@3&8i0&ETlF9j5;BFF>S(sXK z-QorRvSw~PJm!TV&`H?DAQGdM&XUf(F%E@?I;2N+H zq0QhX|BQO4fffhP2(-|fwNM1!Rzc6JF~jJltgXWD0WJ^9+*;jjs(ly@8oEuOg>jIz z7^~SP(8an0SnoE01{4xf;O!8!6A7H8jy6)c8r4XHrtc7bpaYbF%PN@Lgj-@5fU!sj zdL#vyqfKP@ObReZnyDufFfk6#{rPlXy z2)d~C)f@s)^D9gSjs)*jLHkt8a2n9^s?aY$kTY?IKwsy;1A!JWtV}@o+rcq0qwuza zBf_Ul1{ch0!VNby5KIBnjV@Q=&w&Ly)ZlO^|w_})QA#C@E z^c)LeyGP`QXL<%YwYyi~1PgtVFa-=N2ZJ!(D{zLHQLT(KtPX{g8F+69=K~?swh>el zydffa{&2XHi3;)#2>NezaRfDH9pGY_hPXq{;W?;=Tt(As4%%YTVoY<;7K;{OqJtco zN==C2!|L^`D3*JeOOjKNiQVD7Bj^|^sF!-Pi3(L-6QyUp!wOUNbh?6$s_00XG%T#1 zqa08!NLcG^9OaO92{7qV4k{mEnK+-k6N27V`sq5c$svJojVa ze5PiPqD02WyazaNS-g->)bB@8)1XfT4s$LY2*LD;h=w%@2&PX2x?zJh!QiLd+6Ji2 zc!yD?%~TqPz#8)kJ{8f>t1MmppK?EoX=AM5yt=)asuJguChYln5#=i&PtTs8=YCxU z&x64Gi*UB7Bh54*<1c(X4hB)cj(?%#Xc`*-!V*CUqA%>+fFSyU=jM0ifM@wqEgnrZ z@h_7m?CzH$+Fj2L9hiJ6vI5W`yoLHwJf2@`!IqS?lT-Tj77B)(7tj4r7g z#-QLX2@0bCAxtibv~XJkvXb4_0T${0P2j4=%LhVQ0j(*2oB3PP6jv)i(-8u^Yq*yM zRT$H5Fa->oRtrX9dszg1>@aLEi?VWE!~vJj-vt$zK`(@1Az~1we;28Ck+^XIVv$_` z_@WfJ-w6tD0YESX4ErA-OurM|OYDMh;R5bm_rc8{eo^*`F4qs3tS(e@lI0OgOoFIJPL#F6(1(W4#lag-{u9wAW9)Rg+nYgH4* z)2#YdawEEd1bh^NvX!FYDWV0SY$fcMCqpmMvepnOb!I$05v(B`?D)f8>Q=R`bz`2fM1N@!V6dLP04oswKQNRADrd)>We`?BwxSmZv2;D)4 z+eq}ZD!-P_1RDuQ?_(jSZgHDCvL;cMsNYO(*dqfzIKjD@@+*xyVUOEP1FHN@A*UO7 z&k{YSW=y7yGoB?sN1wTYIL3t_&D;20?gb&QmmVXK?LawNh+VgXdX!rT<{eaXwK0Wm z8_{Gl$Z=~+nhKbszid(_*{tBD&6u^8VhHv~^*-D{0HkU>DUl zT4hk}qTxR`Ovp+*(J##)@Ah``N-P9ZJC!zDI2*R@H0gF=PJtJ6dx_`?VTO6XzeHYt z3t{{c#jKOu9A2V13s4}OFmwYLFI*@1?E)C>V7Hn*m1=L;O`g6`u@DryDKB9dxk>D% zh9(Q)&2Acb16D$AkHG67XFr9nRXyNJ2jTM~zYg}`THHhGub)$M9RQZRhsIr3p27L1k8vuB7*pdQ5^{|Z%AV?3} z*yM1rA2G23faQ^-CA)LP#s;IXJYr*$8+b>_Ib+<(h2~L?4S!C}Wp|FN%;{7aKTZ^$ zBoIR9IHiX7Qb4dB=RV8f%w<1LgyF<9+&E#~0OTd+4wd$DUt;bNOgKrM|tM>f)z} zGIV|*gvlw&3{P`Fn4BUU$$US`URb$E*XB({xpnKN8iS z7kD3$^Qqc9gPJlwqDZkW{5+24S(97<(4Mtk1A_0YO)en#&f4VWaTLyl$*lu`<+-FK zNA;XdE=FN_j+0vtPx1rrGr|v2pWi@rQ$C{zf2MHVeD>r5k#3`mu#*8R_0j-Ac!By4 zvJiw9sD7|t3&MiH`+}Tra1fNK_B&*udUz&fXMSM|xPX~2nl%Ez(~H(qKoDQFYXk)G zMPB0yKD`Qfkzc9e8);?YD_n*3>=3e)Qo>9D!saW&PY!$uE)2X&^uwAyL3kbH$wsZ^Gf$z9<$H%|3PD992TeN^M`OX$?A)hJV zbI~@{;u)*`K558w-`mo~C=9>1rCZ482i-hiC}H?R(vS=I2V1}xWmQ|igKS+|r1P+vd^1hTSRo_5bxros+E%pk$R_Ux!t7cPO zMyrez=}#-Y*n?H-*lg-KXq7Z~W(YyFO5*z_H&8$jt&;dG#UEUI@!YFr*UvnS=IayW zhzAD3ehsMg@Iy~X!rrWw1FHN4;?XPCHlmJT=TuT zew11@mmZF*&~nXekbV34 z`0&EhplCKqDlgn3)Tnt>s(zS9s}qpeg>mIQ3ye_MdpPe2L#a;4*5+WDh|Bor1Pp8bt}!vc#cEP z9~g?6=y|pMR*EH_mo!kj03nE;$1j%_g6MhKG*Zu9%mLaiRpVWI)5|{ltS|j83}(&C}jr@=zgWv z{x5p_0b9cuf#Lz%t^h%Kz_zPWPV7N$SA*5pi(q#!X~(V{v^@)ousg^-i+}4VWky`&ctgRnA zb4EpPqwC{mBz}6~rVAl-&PaToG7xNMB>t1iC~bnl57p}1X!Q6GZFKwTmieKLE+9-k zw9zdKytC5z)HqNE`?K~eD`N-F>1a&GGZuBuE(#Eu=WH|p!Fi6O!HX&nyz|oev*9d< v=6ODy%HUx+b6!x}mQqFW1e7)3dd;R|bjpAR% diff --git a/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go b/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go index 114ca3defb..70c2bc87e0 100644 --- a/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go +++ b/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go @@ -8,13 +8,14 @@ package governancev1alpha1 import ( v1alpha13 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/asset/v1alpha1" - v1alpha16 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/chain/v1alpha1" - v1alpha17 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/dao/v1alpha1" - v1alpha110 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/distributions/v1alpha1" - v1alpha19 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/fee/v1alpha1" - v1alpha18 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/ibc/v1alpha1" - v1alpha14 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1" - v1alpha15 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/stake/v1alpha1" + v1alpha17 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/chain/v1alpha1" + v1alpha18 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/dao/v1alpha1" + v1alpha111 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/distributions/v1alpha1" + v1alpha110 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/fee/v1alpha1" + v1alpha19 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/ibc/v1alpha1" + v1alpha14 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/sct/v1alpha1" + v1alpha15 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1" + v1alpha16 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/stake/v1alpha1" v1alpha12 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/keys/v1alpha1" v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/num/v1alpha1" v1alpha11 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1" @@ -583,7 +584,7 @@ type DelegatorVoteBody struct { // The amount of the delegation note, in unbonded penumbra. UnbondedAmount *v1alpha1.Amount `protobuf:"bytes,5,opt,name=unbonded_amount,json=unbondedAmount,proto3" json:"unbonded_amount,omitempty"` // The nullifier of the input note. - Nullifier []byte `protobuf:"bytes,6,opt,name=nullifier,proto3" json:"nullifier,omitempty"` + Nullifier *v1alpha14.Nullifier `protobuf:"bytes,6,opt,name=nullifier,proto3" json:"nullifier,omitempty"` // The randomized validating key for the spend authorization signature. Rk []byte `protobuf:"bytes,7,opt,name=rk,proto3" json:"rk,omitempty"` } @@ -655,7 +656,7 @@ func (x *DelegatorVoteBody) GetUnbondedAmount() *v1alpha1.Amount { return nil } -func (x *DelegatorVoteBody) GetNullifier() []byte { +func (x *DelegatorVoteBody) GetNullifier() *v1alpha14.Nullifier { if x != nil { return x.Nullifier } @@ -762,7 +763,7 @@ type DelegatorVotePlan struct { // The vote to cast. Vote *Vote `protobuf:"bytes,3,opt,name=vote,proto3" json:"vote,omitempty"` // The delegation note to prove that we can vote. - StakedNote *v1alpha14.Note `protobuf:"bytes,4,opt,name=staked_note,json=stakedNote,proto3" json:"staked_note,omitempty"` + StakedNote *v1alpha15.Note `protobuf:"bytes,4,opt,name=staked_note,json=stakedNote,proto3" json:"staked_note,omitempty"` // The position of that delegation note. StakedNotePosition uint64 `protobuf:"varint,5,opt,name=staked_note_position,json=stakedNotePosition,proto3" json:"staked_note_position,omitempty"` // The unbonded amount equivalent to the delegation note. @@ -828,7 +829,7 @@ func (x *DelegatorVotePlan) GetVote() *Vote { return nil } -func (x *DelegatorVotePlan) GetStakedNote() *v1alpha14.Note { +func (x *DelegatorVotePlan) GetStakedNote() *v1alpha15.Note { if x != nil { return x.StakedNote } @@ -1783,7 +1784,7 @@ type ProposalRateDataResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RateData *v1alpha15.RateData `protobuf:"bytes,1,opt,name=rate_data,json=rateData,proto3" json:"rate_data,omitempty"` + RateData *v1alpha16.RateData `protobuf:"bytes,1,opt,name=rate_data,json=rateData,proto3" json:"rate_data,omitempty"` } func (x *ProposalRateDataResponse) Reset() { @@ -1818,7 +1819,7 @@ func (*ProposalRateDataResponse) Descriptor() ([]byte, []int) { return file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDescGZIP(), []int{24} } -func (x *ProposalRateDataResponse) GetRateData() *v1alpha15.RateData { +func (x *ProposalRateDataResponse) GetRateData() *v1alpha16.RateData { if x != nil { return x.RateData } @@ -2228,19 +2229,19 @@ type ChangedAppParameters struct { unknownFields protoimpl.UnknownFields // Chain module parameters. - ChainParams *v1alpha16.ChainParameters `protobuf:"bytes,1,opt,name=chain_params,json=chainParams,proto3" json:"chain_params,omitempty"` + ChainParams *v1alpha17.ChainParameters `protobuf:"bytes,1,opt,name=chain_params,json=chainParams,proto3" json:"chain_params,omitempty"` // DAO module parameters. - DaoParams *v1alpha17.DaoParameters `protobuf:"bytes,2,opt,name=dao_params,json=daoParams,proto3" json:"dao_params,omitempty"` + DaoParams *v1alpha18.DaoParameters `protobuf:"bytes,2,opt,name=dao_params,json=daoParams,proto3" json:"dao_params,omitempty"` // Governance module parameters. GovernanceParams *GovernanceParameters `protobuf:"bytes,3,opt,name=governance_params,json=governanceParams,proto3" json:"governance_params,omitempty"` // IBC module parameters. - IbcParams *v1alpha18.IbcParameters `protobuf:"bytes,4,opt,name=ibc_params,json=ibcParams,proto3" json:"ibc_params,omitempty"` + IbcParams *v1alpha19.IbcParameters `protobuf:"bytes,4,opt,name=ibc_params,json=ibcParams,proto3" json:"ibc_params,omitempty"` // Stake module parameters. - StakeParams *v1alpha15.StakeParameters `protobuf:"bytes,5,opt,name=stake_params,json=stakeParams,proto3" json:"stake_params,omitempty"` + StakeParams *v1alpha16.StakeParameters `protobuf:"bytes,5,opt,name=stake_params,json=stakeParams,proto3" json:"stake_params,omitempty"` // Fee module parameters. - FeeParams *v1alpha19.FeeParameters `protobuf:"bytes,6,opt,name=fee_params,json=feeParams,proto3" json:"fee_params,omitempty"` + FeeParams *v1alpha110.FeeParameters `protobuf:"bytes,6,opt,name=fee_params,json=feeParams,proto3" json:"fee_params,omitempty"` // Distributions module parameters. - DistributionsParams *v1alpha110.DistributionsParameters `protobuf:"bytes,7,opt,name=distributions_params,json=distributionsParams,proto3" json:"distributions_params,omitempty"` + DistributionsParams *v1alpha111.DistributionsParameters `protobuf:"bytes,7,opt,name=distributions_params,json=distributionsParams,proto3" json:"distributions_params,omitempty"` } func (x *ChangedAppParameters) Reset() { @@ -2275,14 +2276,14 @@ func (*ChangedAppParameters) Descriptor() ([]byte, []int) { return file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDescGZIP(), []int{31} } -func (x *ChangedAppParameters) GetChainParams() *v1alpha16.ChainParameters { +func (x *ChangedAppParameters) GetChainParams() *v1alpha17.ChainParameters { if x != nil { return x.ChainParams } return nil } -func (x *ChangedAppParameters) GetDaoParams() *v1alpha17.DaoParameters { +func (x *ChangedAppParameters) GetDaoParams() *v1alpha18.DaoParameters { if x != nil { return x.DaoParams } @@ -2296,28 +2297,28 @@ func (x *ChangedAppParameters) GetGovernanceParams() *GovernanceParameters { return nil } -func (x *ChangedAppParameters) GetIbcParams() *v1alpha18.IbcParameters { +func (x *ChangedAppParameters) GetIbcParams() *v1alpha19.IbcParameters { if x != nil { return x.IbcParams } return nil } -func (x *ChangedAppParameters) GetStakeParams() *v1alpha15.StakeParameters { +func (x *ChangedAppParameters) GetStakeParams() *v1alpha16.StakeParameters { if x != nil { return x.StakeParams } return nil } -func (x *ChangedAppParameters) GetFeeParams() *v1alpha19.FeeParameters { +func (x *ChangedAppParameters) GetFeeParams() *v1alpha110.FeeParameters { if x != nil { return x.FeeParams } return nil } -func (x *ChangedAppParameters) GetDistributionsParams() *v1alpha110.DistributionsParameters { +func (x *ChangedAppParameters) GetDistributionsParams() *v1alpha111.DistributionsParameters { if x != nil { return x.DistributionsParams } @@ -2714,7 +2715,7 @@ type DelegatorVoteView_Visible struct { unknownFields protoimpl.UnknownFields DelegatorVote *DelegatorVote `protobuf:"bytes,1,opt,name=delegator_vote,json=delegatorVote,proto3" json:"delegator_vote,omitempty"` - Note *v1alpha14.NoteView `protobuf:"bytes,2,opt,name=note,proto3" json:"note,omitempty"` + Note *v1alpha15.NoteView `protobuf:"bytes,2,opt,name=note,proto3" json:"note,omitempty"` } func (x *DelegatorVoteView_Visible) Reset() { @@ -2756,7 +2757,7 @@ func (x *DelegatorVoteView_Visible) GetDelegatorVote() *DelegatorVote { return nil } -func (x *DelegatorVoteView_Visible) GetNote() *v1alpha14.NoteView { +func (x *DelegatorVoteView_Visible) GetNote() *v1alpha15.NoteView { if x != nil { return x.Note } @@ -3480,7 +3481,10 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDesc = 0x65, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x69, 0x62, 0x63, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, - 0x62, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x42, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x62, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2f, 0x73, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, + 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x42, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, @@ -3583,8 +3587,8 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDesc = 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x5a, 0x4b, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, - 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0xd3, - 0x02, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, + 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x84, + 0x03, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, @@ -3602,580 +3606,583 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDesc = 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0e, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, - 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x02, 0x72, 0x6b, 0x22, 0x94, 0x04, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x12, 0x62, 0x0a, 0x07, 0x76, 0x69, - 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x5f, - 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, - 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, - 0xba, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x61, 0x0a, 0x0e, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x02, 0x72, 0x6b, 0x22, 0x94, 0x04, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x12, 0x62, 0x0a, 0x07, 0x76, + 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, + 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, + 0x5f, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x2e, + 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, + 0x1a, 0xba, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x61, 0x0a, 0x0e, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, + 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, + 0x4c, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, + 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x1a, 0x6b, 0x0a, + 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x61, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x22, 0xe7, 0x03, 0x0a, + 0x11, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, 0x6c, + 0x61, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x25, + 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x52, - 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x4c, - 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, - 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, - 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x1a, 0x6b, 0x0a, 0x06, - 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x61, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x22, 0xe7, 0x03, 0x0a, 0x11, - 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, 0x6c, 0x61, - 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x25, 0x0a, - 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x0b, 0x73, - 0x74, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x4e, 0x6f, - 0x74, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x74, - 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x12, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x65, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, - 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, - 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x0e, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, - 0x72, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, - 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, 0x70, - 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x53, 0x22, 0x47, 0x0a, 0x0a, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, - 0x0a, 0x08, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x86, 0x01, 0x0a, 0x09, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3e, - 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x9d, - 0x01, 0x0a, 0x04, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, - 0x6f, 0x74, 0x65, 0x22, 0x49, 0x0a, 0x04, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x56, - 0x4f, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x41, 0x42, 0x53, 0x54, 0x41, 0x49, - 0x4e, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x59, 0x45, 0x53, 0x10, - 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x10, 0x03, 0x22, 0x94, - 0x05, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x5b, 0x0a, 0x06, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x6f, 0x74, - 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x06, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x64, 0x0a, - 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x57, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x6e, 0x12, 0x61, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x48, 0x00, 0x52, 0x08, 0x66, 0x69, - 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x5e, 0x0a, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x48, 0x00, 0x52, 0x07, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, - 0x1a, 0x23, 0x0a, 0x09, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x12, 0x16, 0x0a, - 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x1a, 0x62, 0x0a, 0x08, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, - 0x64, 0x12, 0x56, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, - 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x1a, 0x61, 0x0a, 0x07, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x65, 0x64, 0x12, 0x56, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, - 0x6f, 0x6d, 0x65, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x42, 0x07, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xcc, 0x04, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x12, 0x5d, 0x0a, 0x06, 0x70, 0x61, 0x73, - 0x73, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x0b, + 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x4e, + 0x6f, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x6e, 0x6f, + 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x12, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x65, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, + 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, + 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x0e, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, + 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, + 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, + 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x22, 0x47, 0x0a, 0x0a, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x45, 0x0a, 0x08, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x39, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x86, 0x01, 0x0a, 0x09, 0x44, 0x61, 0x6f, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, + 0x9d, 0x01, 0x0a, 0x04, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, + 0x76, 0x6f, 0x74, 0x65, 0x22, 0x49, 0x0a, 0x04, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x10, + 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x41, 0x42, 0x53, 0x54, 0x41, + 0x49, 0x4e, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x59, 0x45, 0x53, + 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x10, 0x03, 0x22, + 0x94, 0x05, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x5b, 0x0a, 0x06, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, + 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x6f, + 0x74, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x06, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x64, + 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, + 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x6e, 0x12, 0x61, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x48, 0x00, 0x52, 0x08, 0x66, + 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x5e, 0x0a, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x48, 0x00, 0x52, 0x07, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x74, 0x69, 0x6e, + 0x67, 0x1a, 0x23, 0x0a, 0x09, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x12, 0x16, + 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x1a, 0x62, 0x0a, 0x08, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, + 0x65, 0x64, 0x12, 0x56, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, + 0x65, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x1a, 0x61, 0x0a, 0x07, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x65, 0x64, 0x12, 0x56, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, + 0x63, 0x6f, 0x6d, 0x65, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x42, 0x07, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xcc, 0x04, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x12, 0x5d, 0x0a, 0x06, 0x70, 0x61, + 0x73, 0x73, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x48, + 0x00, 0x52, 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x12, 0x5d, 0x0a, 0x06, 0x66, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x48, 0x00, - 0x52, 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x12, 0x5d, 0x0a, 0x06, 0x66, 0x61, 0x69, 0x6c, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, - 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x48, 0x00, 0x52, - 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x60, 0x0a, 0x07, 0x73, 0x6c, 0x61, 0x73, 0x68, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, - 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x64, 0x48, 0x00, - 0x52, 0x07, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x64, 0x1a, 0x23, 0x0a, 0x09, 0x57, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x1a, 0x08, - 0x0a, 0x06, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x1a, 0x6e, 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, - 0x65, 0x64, 0x12, 0x64, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, - 0x6f, 0x6d, 0x65, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x52, 0x09, 0x77, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x1a, 0x6f, 0x0a, 0x07, 0x53, 0x6c, 0x61, 0x73, - 0x68, 0x65, 0x64, 0x12, 0x64, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, + 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x48, 0x00, + 0x52, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x60, 0x0a, 0x07, 0x73, 0x6c, 0x61, 0x73, + 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x64, 0x48, + 0x00, 0x52, 0x07, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x64, 0x1a, 0x23, 0x0a, 0x09, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x1a, + 0x08, 0x0a, 0x06, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x1a, 0x6e, 0x0a, 0x06, 0x46, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x12, 0x64, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x52, 0x09, - 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x6f, 0x75, 0x74, - 0x63, 0x6f, 0x6d, 0x65, 0x22, 0x43, 0x0a, 0x05, 0x54, 0x61, 0x6c, 0x6c, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x79, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x79, 0x65, 0x73, 0x12, - 0x0e, 0x0a, 0x02, 0x6e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x6e, 0x6f, 0x12, - 0x18, 0x0a, 0x07, 0x61, 0x62, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x61, 0x62, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x22, 0xf2, 0x07, 0x0a, 0x08, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5d, - 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x1a, 0x6f, 0x0a, 0x07, 0x53, 0x6c, 0x61, + 0x73, 0x68, 0x65, 0x64, 0x12, 0x64, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, + 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x52, + 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x6f, 0x75, + 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x22, 0x43, 0x0a, 0x05, 0x54, 0x61, 0x6c, 0x6c, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x79, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x79, 0x65, 0x73, + 0x12, 0x0e, 0x0a, 0x02, 0x6e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x6e, 0x6f, + 0x12, 0x18, 0x0a, 0x07, 0x61, 0x62, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x61, 0x62, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x22, 0xf2, 0x07, 0x0a, 0x08, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x5d, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, + 0x69, 0x6e, 0x67, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x5d, + 0x0a, 0x09, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, - 0x6e, 0x67, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x5d, 0x0a, - 0x09, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, - 0x79, 0x52, 0x09, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x70, 0x0a, 0x10, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, + 0x63, 0x79, 0x52, 0x09, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x70, 0x0a, + 0x10, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0f, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, + 0x5b, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, + 0x6e, 0x64, 0x52, 0x08, 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x64, 0x0a, 0x0c, + 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, + 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0b, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6c, + 0x61, 0x6e, 0x1a, 0x23, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, + 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x1a, 0x2a, 0x0a, 0x09, 0x45, 0x6d, 0x65, 0x72, 0x67, + 0x65, 0x6e, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x6c, 0x74, 0x5f, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x6c, 0x74, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x1a, 0xe5, 0x01, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x68, 0x0a, 0x0e, 0x6f, 0x6c, 0x64, 0x5f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x52, 0x0d, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x12, 0x68, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0d, 0x6e, 0x65, + 0x77, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x4b, 0x0a, 0x08, 0x44, + 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x3f, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x1a, 0x25, 0x0a, 0x0b, 0x55, 0x70, 0x67, 0x72, + 0x61, 0x64, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, + 0x51, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x49, 0x64, 0x22, 0x6b, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x51, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x49, 0x64, 0x22, 0x96, 0x03, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x08, 0x70, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x2c, + 0x0a, 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, + 0x65, 0x6e, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x5a, 0x0a, 0x17, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x55, 0x0a, 0x17, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x49, 0x64, 0x22, 0x69, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, + 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, + 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x4c, 0x0a, + 0x13, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0xba, 0x02, 0x0a, 0x14, + 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0f, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x5b, - 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, - 0x64, 0x52, 0x08, 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x64, 0x0a, 0x0c, 0x75, - 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, - 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0b, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6c, 0x61, - 0x6e, 0x1a, 0x23, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x16, - 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x1a, 0x2a, 0x0a, 0x09, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, - 0x6e, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x6c, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x6c, 0x74, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x1a, 0xe5, 0x01, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x68, 0x0a, 0x0e, 0x6f, 0x6c, 0x64, 0x5f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x0d, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x12, 0x68, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, - 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0d, 0x6e, 0x65, 0x77, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x4b, 0x0a, 0x08, 0x44, 0x61, - 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x3f, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x1a, 0x25, 0x0a, 0x0b, 0x55, 0x70, 0x67, 0x72, 0x61, - 0x64, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x51, - 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, - 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, - 0x64, 0x22, 0x6b, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, - 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x08, 0x70, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x6e, 0x64, 0x5f, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0e, 0x65, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, + 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x53, 0x0a, 0x15, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, + 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, 0xac, 0x01, + 0x0a, 0x16, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x12, + 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, + 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0xce, 0x02, 0x0a, + 0x14, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x5f, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x56, + 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x5a, 0x0a, 0x17, 0x70, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x12, 0x36, 0x0a, 0x17, 0x70, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x72, + 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x50, 0x61, 0x73, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, + 0x6f, 0x6c, 0x64, 0x12, 0x38, 0x0a, 0x18, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, + 0x73, 0x6c, 0x61, 0x73, 0x68, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, + 0x6c, 0x61, 0x73, 0x68, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x80, 0x01, + 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x6e, 0x0a, 0x11, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x10, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x22, 0xb6, 0x05, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5a, 0x0a, 0x0c, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x61, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x44, 0x61, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x09, + 0x64, 0x61, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x6e, 0x0a, 0x11, 0x67, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x10, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, + 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x69, 0x62, 0x63, + 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x52, 0x09, 0x69, 0x62, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x5a, 0x0a, + 0x0c, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, + 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x73, 0x74, + 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x66, 0x65, 0x65, + 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x52, 0x09, 0x66, 0x65, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x7a, 0x0a, + 0x14, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x73, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x52, 0x13, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x17, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x53, 0x65, 0x74, 0x12, 0x53, 0x0a, 0x03, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x03, 0x6f, 0x6c, 0x64, 0x12, 0x53, 0x0a, 0x03, 0x6e, 0x65, + 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x03, 0x6e, 0x65, 0x77, 0x22, + 0xac, 0x01, 0x0a, 0x21, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, + 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, - 0x64, 0x22, 0x96, 0x03, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x2c, 0x0a, - 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x65, - 0x6e, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5a, - 0x0a, 0x17, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x55, 0x0a, 0x17, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, + 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, + 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, + 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x47, + 0x0a, 0x22, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x70, + 0x6f, 0x77, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x76, 0x6f, 0x74, 0x69, + 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x22, 0x68, 0x0a, 0x2a, 0x41, 0x6c, 0x6c, 0x54, 0x61, + 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, + 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, - 0x64, 0x22, 0x69, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, - 0x09, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x4c, 0x0a, 0x13, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0xba, 0x02, 0x0a, 0x14, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x08, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x6e, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, - 0x65, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x25, - 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x2b, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, + 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, + 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x48, 0x0a, 0x05, 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, + 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x05, 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x12, 0x4b, 0x0a, 0x0c, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x32, 0x0a, 0x15, 0x4e, 0x65, 0x78, 0x74, + 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x42, 0x0a, 0x16, + 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0e, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, + 0x32, 0xcd, 0x0a, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x93, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x53, 0x0a, 0x15, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, 0xac, 0x01, 0x0a, - 0x16, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x12, 0x4b, - 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0xce, 0x02, 0x0a, 0x14, - 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x5f, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x56, 0x6f, - 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x5a, 0x0a, 0x17, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, - 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x12, 0x36, 0x0a, 0x17, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x72, 0x65, - 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x70, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x50, 0x61, 0x73, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, - 0x6c, 0x64, 0x12, 0x38, 0x0a, 0x18, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, - 0x6c, 0x61, 0x73, 0x68, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x6c, - 0x61, 0x73, 0x68, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x80, 0x01, 0x0a, - 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x6e, 0x0a, 0x11, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, + 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x10, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, - 0xb6, 0x05, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5a, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, + 0x93, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x99, 0x01, 0x0a, 0x0e, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x64, 0x61, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x44, 0x61, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x09, 0x64, - 0x61, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x6e, 0x0a, 0x11, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x10, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x69, 0x62, 0x63, 0x5f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x09, 0x69, 0x62, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x5a, 0x0a, 0x0c, - 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x6b, - 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x5f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, + 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x09, 0x66, 0x65, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x7a, 0x0a, 0x14, - 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x13, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x53, 0x65, 0x74, 0x12, 0x53, 0x0a, 0x03, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x52, 0x03, 0x6f, 0x6c, 0x64, 0x12, 0x53, 0x0a, 0x03, 0x6e, 0x65, 0x77, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x03, 0x6e, 0x65, 0x77, 0x22, 0xac, - 0x01, 0x0a, 0x21, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, - 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, - 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, - 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x47, 0x0a, - 0x22, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, - 0x77, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x76, 0x6f, 0x74, 0x69, 0x6e, - 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x22, 0x68, 0x0a, 0x2a, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, - 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, - 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, - 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, - 0x22, 0xc4, 0x01, 0x0a, 0x2b, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x48, 0x0a, 0x05, 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x61, - 0x6c, 0x6c, 0x79, 0x52, 0x05, 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x32, 0x0a, 0x15, 0x4e, 0x65, 0x78, 0x74, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x42, 0x0a, 0x16, 0x4e, - 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0e, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x32, - 0xcd, 0x0a, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x93, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x0e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, + 0x6f, 0x74, 0x65, 0x73, 0x12, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x56, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, + 0xbd, 0x01, 0x0a, 0x1a, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, + 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x4e, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, + 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4f, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, + 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0xda, 0x01, 0x0a, 0x23, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x57, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x93, - 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, + 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, + 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x58, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, + 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0xa1, 0x01, 0x0a, + 0x10, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x99, 0x01, 0x0a, 0x0e, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x9b, 0x01, 0x0a, 0x0e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, - 0x74, 0x65, 0x73, 0x12, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, - 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0xbd, - 0x01, 0x0a, 0x1a, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x4e, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x69, - 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4f, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x69, - 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xda, - 0x01, 0x0a, 0x23, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x57, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x58, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6c, - 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0xa1, 0x01, 0x0a, 0x10, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, + 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, + 0x42, 0x82, 0x03, 0x0a, 0x2f, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, - 0x82, 0x03, 0x0a, 0x2f, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x42, 0x0f, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x6d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, - 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, - 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x3b, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x47, 0xaa, 0x02, 0x2b, 0x50, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x2b, 0x50, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5c, - 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x37, 0x50, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x5c, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5c, 0x56, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0xea, 0x02, 0x2f, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, - 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, - 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x68, 0x61, 0x31, 0x42, 0x0f, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x6d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, + 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x3b, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x47, 0xaa, 0x02, 0x2b, + 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x2b, 0x50, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, + 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x37, 0x50, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x5c, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5c, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x2f, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, + 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, + 0x3a, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4253,17 +4260,18 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_goTypes = (*v1alpha12.IdentityKey)(nil), // 57: penumbra.core.keys.v1alpha1.IdentityKey (*v1alpha12.GovernanceKey)(nil), // 58: penumbra.core.keys.v1alpha1.GovernanceKey (*v1alpha13.Value)(nil), // 59: penumbra.core.asset.v1alpha1.Value - (*v1alpha14.Note)(nil), // 60: penumbra.core.component.shielded_pool.v1alpha1.Note - (*v1alpha12.Address)(nil), // 61: penumbra.core.keys.v1alpha1.Address - (*v1alpha15.RateData)(nil), // 62: penumbra.core.component.stake.v1alpha1.RateData - (*v1alpha16.ChainParameters)(nil), // 63: penumbra.core.component.chain.v1alpha1.ChainParameters - (*v1alpha17.DaoParameters)(nil), // 64: penumbra.core.component.dao.v1alpha1.DaoParameters - (*v1alpha18.IbcParameters)(nil), // 65: penumbra.core.component.ibc.v1alpha1.IbcParameters - (*v1alpha15.StakeParameters)(nil), // 66: penumbra.core.component.stake.v1alpha1.StakeParameters - (*v1alpha19.FeeParameters)(nil), // 67: penumbra.core.component.fee.v1alpha1.FeeParameters - (*v1alpha110.DistributionsParameters)(nil), // 68: penumbra.core.component.distributions.v1alpha1.DistributionsParameters - (*v1alpha14.NoteView)(nil), // 69: penumbra.core.component.shielded_pool.v1alpha1.NoteView - (*anypb.Any)(nil), // 70: google.protobuf.Any + (*v1alpha14.Nullifier)(nil), // 60: penumbra.core.component.sct.v1alpha1.Nullifier + (*v1alpha15.Note)(nil), // 61: penumbra.core.component.shielded_pool.v1alpha1.Note + (*v1alpha12.Address)(nil), // 62: penumbra.core.keys.v1alpha1.Address + (*v1alpha16.RateData)(nil), // 63: penumbra.core.component.stake.v1alpha1.RateData + (*v1alpha17.ChainParameters)(nil), // 64: penumbra.core.component.chain.v1alpha1.ChainParameters + (*v1alpha18.DaoParameters)(nil), // 65: penumbra.core.component.dao.v1alpha1.DaoParameters + (*v1alpha19.IbcParameters)(nil), // 66: penumbra.core.component.ibc.v1alpha1.IbcParameters + (*v1alpha16.StakeParameters)(nil), // 67: penumbra.core.component.stake.v1alpha1.StakeParameters + (*v1alpha110.FeeParameters)(nil), // 68: penumbra.core.component.fee.v1alpha1.FeeParameters + (*v1alpha111.DistributionsParameters)(nil), // 69: penumbra.core.component.distributions.v1alpha1.DistributionsParameters + (*v1alpha15.NoteView)(nil), // 70: penumbra.core.component.shielded_pool.v1alpha1.NoteView + (*anypb.Any)(nil), // 71: google.protobuf.Any } var file_penumbra_core_component_governance_v1alpha1_governance_proto_depIdxs = []int32{ 19, // 0: penumbra.core.component.governance.v1alpha1.ProposalSubmit.proposal:type_name -> penumbra.core.component.governance.v1alpha1.Proposal @@ -4282,81 +4290,82 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_depIdxs = 15, // 13: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote 59, // 14: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.value:type_name -> penumbra.core.asset.v1alpha1.Value 55, // 15: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 40, // 16: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.visible:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible - 41, // 17: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.opaque:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque - 15, // 18: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote - 60, // 19: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.staked_note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 55, // 20: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 59, // 21: penumbra.core.component.governance.v1alpha1.DaoDeposit.value:type_name -> penumbra.core.asset.v1alpha1.Value - 59, // 22: penumbra.core.component.governance.v1alpha1.DaoSpend.value:type_name -> penumbra.core.asset.v1alpha1.Value - 59, // 23: penumbra.core.component.governance.v1alpha1.DaoOutput.value:type_name -> penumbra.core.asset.v1alpha1.Value - 61, // 24: penumbra.core.component.governance.v1alpha1.DaoOutput.address:type_name -> penumbra.core.keys.v1alpha1.Address - 0, // 25: penumbra.core.component.governance.v1alpha1.Vote.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote.Vote - 42, // 26: penumbra.core.component.governance.v1alpha1.ProposalState.voting:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Voting - 43, // 27: penumbra.core.component.governance.v1alpha1.ProposalState.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Withdrawn - 44, // 28: penumbra.core.component.governance.v1alpha1.ProposalState.finished:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Finished - 45, // 29: penumbra.core.component.governance.v1alpha1.ProposalState.claimed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Claimed - 47, // 30: penumbra.core.component.governance.v1alpha1.ProposalOutcome.passed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Passed - 48, // 31: penumbra.core.component.governance.v1alpha1.ProposalOutcome.failed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Failed - 49, // 32: penumbra.core.component.governance.v1alpha1.ProposalOutcome.slashed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed - 50, // 33: penumbra.core.component.governance.v1alpha1.Proposal.signaling:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.Signaling - 51, // 34: penumbra.core.component.governance.v1alpha1.Proposal.emergency:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.Emergency - 52, // 35: penumbra.core.component.governance.v1alpha1.Proposal.parameter_change:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange - 53, // 36: penumbra.core.component.governance.v1alpha1.Proposal.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend - 54, // 37: penumbra.core.component.governance.v1alpha1.Proposal.upgrade_plan:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.UpgradePlan - 19, // 38: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.proposal:type_name -> penumbra.core.component.governance.v1alpha1.Proposal - 16, // 39: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.state:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState - 55, // 40: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.proposal_deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 62, // 41: penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData - 19, // 42: penumbra.core.component.governance.v1alpha1.ProposalListResponse.proposal:type_name -> penumbra.core.component.governance.v1alpha1.Proposal - 16, // 43: penumbra.core.component.governance.v1alpha1.ProposalListResponse.state:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState - 15, // 44: penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote - 57, // 45: penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 55, // 46: penumbra.core.component.governance.v1alpha1.GovernanceParameters.proposal_deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 30, // 47: penumbra.core.component.governance.v1alpha1.GenesisContent.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters - 63, // 48: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.chain_params:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters - 64, // 49: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.dao_params:type_name -> penumbra.core.component.dao.v1alpha1.DaoParameters - 30, // 50: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters - 65, // 51: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.ibc_params:type_name -> penumbra.core.component.ibc.v1alpha1.IbcParameters - 66, // 52: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.stake_params:type_name -> penumbra.core.component.stake.v1alpha1.StakeParameters - 67, // 53: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.fee_params:type_name -> penumbra.core.component.fee.v1alpha1.FeeParameters - 68, // 54: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.distributions_params:type_name -> penumbra.core.component.distributions.v1alpha1.DistributionsParameters - 32, // 55: penumbra.core.component.governance.v1alpha1.ChangedAppParametersSet.old:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters - 32, // 56: penumbra.core.component.governance.v1alpha1.ChangedAppParametersSet.new:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters - 57, // 57: penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartRequest.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 18, // 58: penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse.tally:type_name -> penumbra.core.component.governance.v1alpha1.Tally - 57, // 59: penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 8, // 60: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote - 69, // 61: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView - 8, // 62: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote - 17, // 63: penumbra.core.component.governance.v1alpha1.ProposalState.Finished.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome - 17, // 64: penumbra.core.component.governance.v1alpha1.ProposalState.Claimed.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome - 46, // 65: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Failed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn - 46, // 66: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn - 32, // 67: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.old_parameters:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters - 32, // 68: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.new_parameters:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters - 70, // 69: penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend.transaction_plan:type_name -> google.protobuf.Any - 20, // 70: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:input_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoRequest - 26, // 71: penumbra.core.component.governance.v1alpha1.QueryService.ProposalList:input_type -> penumbra.core.component.governance.v1alpha1.ProposalListRequest - 22, // 72: penumbra.core.component.governance.v1alpha1.QueryService.ProposalData:input_type -> penumbra.core.component.governance.v1alpha1.ProposalDataRequest - 38, // 73: penumbra.core.component.governance.v1alpha1.QueryService.NextProposalId:input_type -> penumbra.core.component.governance.v1alpha1.NextProposalIdRequest - 28, // 74: penumbra.core.component.governance.v1alpha1.QueryService.ValidatorVotes:input_type -> penumbra.core.component.governance.v1alpha1.ValidatorVotesRequest - 34, // 75: penumbra.core.component.governance.v1alpha1.QueryService.VotingPowerAtProposalStart:input_type -> penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartRequest - 36, // 76: penumbra.core.component.governance.v1alpha1.QueryService.AllTalliedDelegatorVotesForProposal:input_type -> penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalRequest - 24, // 77: penumbra.core.component.governance.v1alpha1.QueryService.ProposalRateData:input_type -> penumbra.core.component.governance.v1alpha1.ProposalRateDataRequest - 21, // 78: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:output_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoResponse - 27, // 79: penumbra.core.component.governance.v1alpha1.QueryService.ProposalList:output_type -> penumbra.core.component.governance.v1alpha1.ProposalListResponse - 23, // 80: penumbra.core.component.governance.v1alpha1.QueryService.ProposalData:output_type -> penumbra.core.component.governance.v1alpha1.ProposalDataResponse - 39, // 81: penumbra.core.component.governance.v1alpha1.QueryService.NextProposalId:output_type -> penumbra.core.component.governance.v1alpha1.NextProposalIdResponse - 29, // 82: penumbra.core.component.governance.v1alpha1.QueryService.ValidatorVotes:output_type -> penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse - 35, // 83: penumbra.core.component.governance.v1alpha1.QueryService.VotingPowerAtProposalStart:output_type -> penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartResponse - 37, // 84: penumbra.core.component.governance.v1alpha1.QueryService.AllTalliedDelegatorVotesForProposal:output_type -> penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse - 25, // 85: penumbra.core.component.governance.v1alpha1.QueryService.ProposalRateData:output_type -> penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse - 78, // [78:86] is the sub-list for method output_type - 70, // [70:78] is the sub-list for method input_type - 70, // [70:70] is the sub-list for extension type_name - 70, // [70:70] is the sub-list for extension extendee - 0, // [0:70] is the sub-list for field type_name + 60, // 16: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 40, // 17: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.visible:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible + 41, // 18: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.opaque:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque + 15, // 19: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote + 61, // 20: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.staked_note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 55, // 21: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 59, // 22: penumbra.core.component.governance.v1alpha1.DaoDeposit.value:type_name -> penumbra.core.asset.v1alpha1.Value + 59, // 23: penumbra.core.component.governance.v1alpha1.DaoSpend.value:type_name -> penumbra.core.asset.v1alpha1.Value + 59, // 24: penumbra.core.component.governance.v1alpha1.DaoOutput.value:type_name -> penumbra.core.asset.v1alpha1.Value + 62, // 25: penumbra.core.component.governance.v1alpha1.DaoOutput.address:type_name -> penumbra.core.keys.v1alpha1.Address + 0, // 26: penumbra.core.component.governance.v1alpha1.Vote.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote.Vote + 42, // 27: penumbra.core.component.governance.v1alpha1.ProposalState.voting:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Voting + 43, // 28: penumbra.core.component.governance.v1alpha1.ProposalState.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Withdrawn + 44, // 29: penumbra.core.component.governance.v1alpha1.ProposalState.finished:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Finished + 45, // 30: penumbra.core.component.governance.v1alpha1.ProposalState.claimed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Claimed + 47, // 31: penumbra.core.component.governance.v1alpha1.ProposalOutcome.passed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Passed + 48, // 32: penumbra.core.component.governance.v1alpha1.ProposalOutcome.failed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Failed + 49, // 33: penumbra.core.component.governance.v1alpha1.ProposalOutcome.slashed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed + 50, // 34: penumbra.core.component.governance.v1alpha1.Proposal.signaling:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.Signaling + 51, // 35: penumbra.core.component.governance.v1alpha1.Proposal.emergency:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.Emergency + 52, // 36: penumbra.core.component.governance.v1alpha1.Proposal.parameter_change:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange + 53, // 37: penumbra.core.component.governance.v1alpha1.Proposal.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend + 54, // 38: penumbra.core.component.governance.v1alpha1.Proposal.upgrade_plan:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.UpgradePlan + 19, // 39: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.proposal:type_name -> penumbra.core.component.governance.v1alpha1.Proposal + 16, // 40: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.state:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState + 55, // 41: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.proposal_deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 63, // 42: penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData + 19, // 43: penumbra.core.component.governance.v1alpha1.ProposalListResponse.proposal:type_name -> penumbra.core.component.governance.v1alpha1.Proposal + 16, // 44: penumbra.core.component.governance.v1alpha1.ProposalListResponse.state:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState + 15, // 45: penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote + 57, // 46: penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 55, // 47: penumbra.core.component.governance.v1alpha1.GovernanceParameters.proposal_deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 30, // 48: penumbra.core.component.governance.v1alpha1.GenesisContent.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters + 64, // 49: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.chain_params:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters + 65, // 50: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.dao_params:type_name -> penumbra.core.component.dao.v1alpha1.DaoParameters + 30, // 51: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters + 66, // 52: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.ibc_params:type_name -> penumbra.core.component.ibc.v1alpha1.IbcParameters + 67, // 53: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.stake_params:type_name -> penumbra.core.component.stake.v1alpha1.StakeParameters + 68, // 54: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.fee_params:type_name -> penumbra.core.component.fee.v1alpha1.FeeParameters + 69, // 55: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.distributions_params:type_name -> penumbra.core.component.distributions.v1alpha1.DistributionsParameters + 32, // 56: penumbra.core.component.governance.v1alpha1.ChangedAppParametersSet.old:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters + 32, // 57: penumbra.core.component.governance.v1alpha1.ChangedAppParametersSet.new:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters + 57, // 58: penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartRequest.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 18, // 59: penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse.tally:type_name -> penumbra.core.component.governance.v1alpha1.Tally + 57, // 60: penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 8, // 61: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote + 70, // 62: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView + 8, // 63: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote + 17, // 64: penumbra.core.component.governance.v1alpha1.ProposalState.Finished.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome + 17, // 65: penumbra.core.component.governance.v1alpha1.ProposalState.Claimed.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome + 46, // 66: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Failed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn + 46, // 67: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn + 32, // 68: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.old_parameters:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters + 32, // 69: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.new_parameters:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters + 71, // 70: penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend.transaction_plan:type_name -> google.protobuf.Any + 20, // 71: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:input_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoRequest + 26, // 72: penumbra.core.component.governance.v1alpha1.QueryService.ProposalList:input_type -> penumbra.core.component.governance.v1alpha1.ProposalListRequest + 22, // 73: penumbra.core.component.governance.v1alpha1.QueryService.ProposalData:input_type -> penumbra.core.component.governance.v1alpha1.ProposalDataRequest + 38, // 74: penumbra.core.component.governance.v1alpha1.QueryService.NextProposalId:input_type -> penumbra.core.component.governance.v1alpha1.NextProposalIdRequest + 28, // 75: penumbra.core.component.governance.v1alpha1.QueryService.ValidatorVotes:input_type -> penumbra.core.component.governance.v1alpha1.ValidatorVotesRequest + 34, // 76: penumbra.core.component.governance.v1alpha1.QueryService.VotingPowerAtProposalStart:input_type -> penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartRequest + 36, // 77: penumbra.core.component.governance.v1alpha1.QueryService.AllTalliedDelegatorVotesForProposal:input_type -> penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalRequest + 24, // 78: penumbra.core.component.governance.v1alpha1.QueryService.ProposalRateData:input_type -> penumbra.core.component.governance.v1alpha1.ProposalRateDataRequest + 21, // 79: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:output_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoResponse + 27, // 80: penumbra.core.component.governance.v1alpha1.QueryService.ProposalList:output_type -> penumbra.core.component.governance.v1alpha1.ProposalListResponse + 23, // 81: penumbra.core.component.governance.v1alpha1.QueryService.ProposalData:output_type -> penumbra.core.component.governance.v1alpha1.ProposalDataResponse + 39, // 82: penumbra.core.component.governance.v1alpha1.QueryService.NextProposalId:output_type -> penumbra.core.component.governance.v1alpha1.NextProposalIdResponse + 29, // 83: penumbra.core.component.governance.v1alpha1.QueryService.ValidatorVotes:output_type -> penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse + 35, // 84: penumbra.core.component.governance.v1alpha1.QueryService.VotingPowerAtProposalStart:output_type -> penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartResponse + 37, // 85: penumbra.core.component.governance.v1alpha1.QueryService.AllTalliedDelegatorVotesForProposal:output_type -> penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse + 25, // 86: penumbra.core.component.governance.v1alpha1.QueryService.ProposalRateData:output_type -> penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse + 79, // [79:87] is the sub-list for method output_type + 71, // [71:79] is the sub-list for method input_type + 71, // [71:71] is the sub-list for extension type_name + 71, // [71:71] is the sub-list for extension extendee + 0, // [0:71] is the sub-list for field type_name } func init() { file_penumbra_core_component_governance_v1alpha1_governance_proto_init() } diff --git a/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go b/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go index ff9964f34e..6f1448b2ce 100644 --- a/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go +++ b/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go @@ -588,7 +588,7 @@ type SpendBody struct { // A commitment to the value of the input note. BalanceCommitment *v1alpha1.BalanceCommitment `protobuf:"bytes,1,opt,name=balance_commitment,json=balanceCommitment,proto3" json:"balance_commitment,omitempty"` // The nullifier of the input note. - Nullifier []byte `protobuf:"bytes,3,opt,name=nullifier,proto3" json:"nullifier,omitempty"` + Nullifier *v1alpha14.Nullifier `protobuf:"bytes,6,opt,name=nullifier,proto3" json:"nullifier,omitempty"` // The randomized validating key for the spend authorization signature. Rk []byte `protobuf:"bytes,4,opt,name=rk,proto3" json:"rk,omitempty"` } @@ -632,7 +632,7 @@ func (x *SpendBody) GetBalanceCommitment() *v1alpha1.BalanceCommitment { return nil } -func (x *SpendBody) GetNullifier() []byte { +func (x *SpendBody) GetNullifier() *v1alpha14.Nullifier { if x != nil { return x.Nullifier } @@ -1664,215 +1664,218 @@ var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_rawD 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x99, 0x01, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x42, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xca, 0x01, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x5e, 0x0a, 0x12, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x11, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x72, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x72, - 0x6b, 0x22, 0xd2, 0x03, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x12, - 0x5d, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x5a, - 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, - 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, - 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xa4, 0x01, 0x0a, 0x07, 0x56, - 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x05, 0x73, 0x70, - 0x65, 0x6e, 0x64, 0x12, 0x4c, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, + 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x72, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, + 0x72, 0x6b, 0x22, 0xd2, 0x03, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, + 0x12, 0x5d, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, 0x74, - 0x65, 0x1a, 0x55, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x05, 0x73, - 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, - 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, - 0x64, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x73, 0x70, 0x65, 0x6e, - 0x64, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0x8c, 0x02, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, - 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, - 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x61, - 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, - 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, - 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, 0x70, - 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x53, 0x22, 0xad, 0x01, 0x0a, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x12, 0x4e, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, - 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, - 0x12, 0x53, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, + 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, + 0x5a, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x5a, 0x4b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, - 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x9e, 0x02, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x42, 0x6f, 0x64, 0x79, 0x12, 0x5e, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, - 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x5e, 0x0a, 0x12, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x11, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, - 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x4b, 0x65, 0x79, 0x12, 0x26, - 0x0a, 0x0f, 0x6f, 0x76, 0x6b, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6f, 0x76, 0x6b, 0x57, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x22, 0xa6, 0x04, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x56, 0x69, 0x65, 0x77, 0x12, 0x5e, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, + 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xa4, 0x01, 0x0a, 0x07, + 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, - 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, - 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x5b, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, - 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, - 0x75, 0x65, 0x1a, 0xf1, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4e, - 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, - 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x4c, - 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, - 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, - 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x0b, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x1a, 0x58, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, - 0x12, 0x4e, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x05, 0x73, + 0x70, 0x65, 0x6e, 0x64, 0x12, 0x4c, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, + 0x74, 0x65, 0x1a, 0x55, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x05, + 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, + 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, + 0x6e, 0x64, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x73, 0x70, 0x65, + 0x6e, 0x64, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0x8c, 0x02, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, + 0x64, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x72, + 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0a, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, + 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, + 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x22, 0xad, 0x01, 0x0a, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x12, 0x4e, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, + 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, + 0x79, 0x12, 0x53, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, - 0xa1, 0x02, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x39, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x64, 0x65, 0x73, - 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, - 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x5f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, - 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, - 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x53, 0x22, 0x77, 0x0a, 0x18, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x08, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x49, 0x64, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x22, 0x6f, 0x0a, 0x19, - 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, 0x64, 0x65, 0x6e, - 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x31, 0x2e, 0x5a, 0x4b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, + 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x9e, 0x02, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x5e, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, + 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, + 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x5e, 0x0a, 0x12, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, - 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9e, 0x02, - 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x12, 0x6b, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x9e, 0x01, - 0x0a, 0x0a, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x06, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6e, 0x6f, - 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x3e, - 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x32, 0xb9, - 0x01, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0xa8, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x42, 0x79, 0x49, 0x64, 0x12, 0x48, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x49, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x11, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, + 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0e, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x4b, 0x65, 0x79, 0x12, + 0x26, 0x0a, 0x0f, 0x6f, 0x76, 0x6b, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6b, + 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6f, 0x76, 0x6b, 0x57, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x22, 0xa6, 0x04, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x12, 0x5e, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, + 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, + 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x5b, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, + 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, + 0x71, 0x75, 0x65, 0x1a, 0xf1, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, + 0x4e, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, - 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x95, 0x03, 0x0a, 0x32, 0x63, - 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, + 0x4c, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, + 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x48, 0x0a, + 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x1a, 0x58, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, + 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x76, 0x69, 0x65, 0x77, + 0x22, 0xa1, 0x02, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x12, + 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, + 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x64, 0x65, + 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x5f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, + 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, + 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x53, 0x22, 0x77, 0x0a, 0x18, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x08, 0x61, + 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, + 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x49, 0x64, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x22, 0x6f, 0x0a, + 0x19, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, + 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, 0x64, 0x65, + 0x6e, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x0d, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9e, + 0x02, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x6b, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x9e, + 0x01, 0x0a, 0x0a, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, + 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6e, + 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x12, + 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x32, + 0xb9, 0x01, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0xa8, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x12, 0x48, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x49, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x42, 0x11, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x73, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, - 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, - 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, - 0x6f, 0x6f, 0x6c, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, - 0x43, 0x53, 0xaa, 0x02, 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, - 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x68, 0x69, - 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0xca, 0x02, 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, - 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x68, 0x69, - 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0xe2, 0x02, 0x39, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, - 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x68, 0x69, - 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, - 0x31, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, - 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x53, 0x68, 0x69, 0x65, - 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, + 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x95, 0x03, 0x0a, 0x32, + 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x42, 0x11, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x73, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, + 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, + 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, + 0x43, 0x43, 0x53, 0xaa, 0x02, 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, + 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0xca, 0x02, 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, + 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0xe2, 0x02, 0x39, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, + 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, + 0x02, 0x31, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, + 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x53, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1940,36 +1943,37 @@ var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_depI 31, // 9: penumbra.core.component.shielded_pool.v1alpha1.EventSpend.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier 29, // 10: penumbra.core.component.shielded_pool.v1alpha1.EventOutput.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment 32, // 11: penumbra.core.component.shielded_pool.v1alpha1.SpendBody.balance_commitment:type_name -> penumbra.core.asset.v1alpha1.BalanceCommitment - 20, // 12: penumbra.core.component.shielded_pool.v1alpha1.SpendView.visible:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible - 21, // 13: penumbra.core.component.shielded_pool.v1alpha1.SpendView.opaque:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView.Opaque - 0, // 14: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 14, // 15: penumbra.core.component.shielded_pool.v1alpha1.Output.body:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputBody - 4, // 16: penumbra.core.component.shielded_pool.v1alpha1.Output.proof:type_name -> penumbra.core.component.shielded_pool.v1alpha1.ZKOutputProof - 3, // 17: penumbra.core.component.shielded_pool.v1alpha1.OutputBody.note_payload:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NotePayload - 32, // 18: penumbra.core.component.shielded_pool.v1alpha1.OutputBody.balance_commitment:type_name -> penumbra.core.asset.v1alpha1.BalanceCommitment - 22, // 19: penumbra.core.component.shielded_pool.v1alpha1.OutputView.visible:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible - 23, // 20: penumbra.core.component.shielded_pool.v1alpha1.OutputView.opaque:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView.Opaque - 25, // 21: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan.value:type_name -> penumbra.core.asset.v1alpha1.Value - 26, // 22: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan.dest_address:type_name -> penumbra.core.keys.v1alpha1.Address - 33, // 23: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdRequest.asset_id:type_name -> penumbra.core.asset.v1alpha1.AssetId - 34, // 24: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdResponse.denom_metadata:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata - 24, // 25: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.allocations:type_name -> penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation - 7, // 26: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend - 1, // 27: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView - 7, // 28: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Opaque.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend - 13, // 29: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output - 1, // 30: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView - 35, // 31: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey - 13, // 32: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Opaque.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output - 36, // 33: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation.amount:type_name -> penumbra.core.num.v1alpha1.Amount - 26, // 34: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation.address:type_name -> penumbra.core.keys.v1alpha1.Address - 17, // 35: penumbra.core.component.shielded_pool.v1alpha1.QueryService.DenomMetadataById:input_type -> penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdRequest - 18, // 36: penumbra.core.component.shielded_pool.v1alpha1.QueryService.DenomMetadataById:output_type -> penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdResponse - 36, // [36:37] is the sub-list for method output_type - 35, // [35:36] is the sub-list for method input_type - 35, // [35:35] is the sub-list for extension type_name - 35, // [35:35] is the sub-list for extension extendee - 0, // [0:35] is the sub-list for field type_name + 31, // 12: penumbra.core.component.shielded_pool.v1alpha1.SpendBody.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 20, // 13: penumbra.core.component.shielded_pool.v1alpha1.SpendView.visible:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible + 21, // 14: penumbra.core.component.shielded_pool.v1alpha1.SpendView.opaque:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView.Opaque + 0, // 15: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 14, // 16: penumbra.core.component.shielded_pool.v1alpha1.Output.body:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputBody + 4, // 17: penumbra.core.component.shielded_pool.v1alpha1.Output.proof:type_name -> penumbra.core.component.shielded_pool.v1alpha1.ZKOutputProof + 3, // 18: penumbra.core.component.shielded_pool.v1alpha1.OutputBody.note_payload:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NotePayload + 32, // 19: penumbra.core.component.shielded_pool.v1alpha1.OutputBody.balance_commitment:type_name -> penumbra.core.asset.v1alpha1.BalanceCommitment + 22, // 20: penumbra.core.component.shielded_pool.v1alpha1.OutputView.visible:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible + 23, // 21: penumbra.core.component.shielded_pool.v1alpha1.OutputView.opaque:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView.Opaque + 25, // 22: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan.value:type_name -> penumbra.core.asset.v1alpha1.Value + 26, // 23: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan.dest_address:type_name -> penumbra.core.keys.v1alpha1.Address + 33, // 24: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdRequest.asset_id:type_name -> penumbra.core.asset.v1alpha1.AssetId + 34, // 25: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdResponse.denom_metadata:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata + 24, // 26: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.allocations:type_name -> penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation + 7, // 27: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend + 1, // 28: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView + 7, // 29: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Opaque.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend + 13, // 30: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output + 1, // 31: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView + 35, // 32: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey + 13, // 33: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Opaque.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output + 36, // 34: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation.amount:type_name -> penumbra.core.num.v1alpha1.Amount + 26, // 35: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation.address:type_name -> penumbra.core.keys.v1alpha1.Address + 17, // 36: penumbra.core.component.shielded_pool.v1alpha1.QueryService.DenomMetadataById:input_type -> penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdRequest + 18, // 37: penumbra.core.component.shielded_pool.v1alpha1.QueryService.DenomMetadataById:output_type -> penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdResponse + 37, // [37:38] is the sub-list for method output_type + 36, // [36:37] is the sub-list for method input_type + 36, // [36:36] is the sub-list for extension type_name + 36, // [36:36] is the sub-list for extension extendee + 0, // [0:36] is the sub-list for field type_name } func init() { file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_init() } diff --git a/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto b/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto index b4cb8c4b87..f11100bed0 100644 --- a/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto +++ b/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto @@ -8,6 +8,7 @@ import "penumbra/core/component/dao/v1alpha1/dao.proto"; import "penumbra/core/component/distributions/v1alpha1/distributions.proto"; import "penumbra/core/component/fee/v1alpha1/fee.proto"; import "penumbra/core/component/ibc/v1alpha1/ibc.proto"; +import "penumbra/core/component/sct/v1alpha1/sct.proto"; import "penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto"; import "penumbra/core/component/stake/v1alpha1/stake.proto"; import "penumbra/core/keys/v1alpha1/keys.proto"; @@ -87,7 +88,7 @@ message DelegatorVoteBody { // The amount of the delegation note, in unbonded penumbra. num.v1alpha1.Amount unbonded_amount = 5; // The nullifier of the input note. - bytes nullifier = 6; + sct.v1alpha1.Nullifier nullifier = 6; // The randomized validating key for the spend authorization signature. bytes rk = 7; } diff --git a/proto/penumbra/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto b/proto/penumbra/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto index 205291d16c..308fec79e3 100644 --- a/proto/penumbra/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto +++ b/proto/penumbra/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto @@ -80,7 +80,7 @@ message SpendBody { // A commitment to the value of the input note. asset.v1alpha1.BalanceCommitment balance_commitment = 1; // The nullifier of the input note. - bytes nullifier = 3; + sct.v1alpha1.Nullifier nullifier = 6; // The randomized validating key for the spend authorization signature. bytes rk = 4; } From 70c23249da402d9bb98ba9b3a75d38c638286795 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Thu, 28 Dec 2023 23:03:31 -0500 Subject: [PATCH 05/84] proto: use decaf377 signature proto types instead of bytes --- .../governance/src/delegator_vote/action.rs | 15 +- .../shielded-pool/src/spend/action.rs | 10 +- crates/core/transaction/src/transaction.rs | 9 +- crates/core/transaction/src/view.rs | 8 +- ...mbra.core.component.governance.v1alpha1.rs | 6 +- ...ore.component.governance.v1alpha1.serde.rs | 13 +- ...a.core.component.shielded_pool.v1alpha1.rs | 6 +- ....component.shielded_pool.v1alpha1.serde.rs | 13 +- .../src/gen/penumbra.core.keys.v1alpha1.rs | 13 - .../gen/penumbra.core.keys.v1alpha1.serde.rs | 94 - .../gen/penumbra.core.transaction.v1alpha1.rs | 12 +- ...enumbra.core.transaction.v1alpha1.serde.rs | 26 +- .../penumbra.crypto.decaf377_rdsa.v1alpha1.rs | 13 + ...bra.crypto.decaf377_rdsa.v1alpha1.serde.rs | 94 + .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 338587 -> 338827 bytes crates/proto/src/protobuf.rs | 5 +- .../governance/v1alpha1/governance.pb.go | 1240 +++++----- .../v1alpha1/shielded_pool.pb.go | 520 ++--- .../penumbra/core/keys/v1alpha1/keys.pb.go | 237 +- .../transaction/v1alpha1/transaction.pb.go | 2018 +++++++++-------- .../v1alpha1/decaf377_rdsa.pb.go | 119 +- .../governance/v1alpha1/governance.proto | 2 +- .../v1alpha1/shielded_pool.proto | 2 +- .../penumbra/core/keys/v1alpha1/keys.proto | 4 - .../transaction/v1alpha1/transaction.proto | 4 +- .../v1alpha1/decaf377_rdsa.proto | 4 + 26 files changed, 2252 insertions(+), 2235 deletions(-) diff --git a/crates/core/component/governance/src/delegator_vote/action.rs b/crates/core/component/governance/src/delegator_vote/action.rs index c0a0f2587e..e4dece61f9 100644 --- a/crates/core/component/governance/src/delegator_vote/action.rs +++ b/crates/core/component/governance/src/delegator_vote/action.rs @@ -43,7 +43,7 @@ impl From for pb::DelegatorVoteBody { value: Some(value.value.into()), unbonded_amount: Some(value.unbonded_amount.into()), nullifier: Some(value.nullifier.into()), - rk: value.rk.to_bytes().into(), + rk: Some(value.rk.into()), } } } @@ -75,14 +75,11 @@ impl TryFrom for DelegatorVoteBody { .ok_or_else(|| anyhow::anyhow!("missing nullifier in `DelegatorVote`"))? .try_into() .context("invalid nullifier in `DelegatorVote`")?, - rk: { - let rk_bytes: [u8; 32] = (msg.rk[..]) - .try_into() - .context("expected 32-byte rk in `DelegatorVote`")?; - rk_bytes - .try_into() - .context("invalid rk in `DelegatorVote`")? - }, + rk: msg + .rk + .ok_or_else(|| anyhow::anyhow!("missing rk in `DelegatorVote`"))? + .try_into() + .context("invalid rk in `DelegatorVote`")?, }) } } diff --git a/crates/core/component/shielded-pool/src/spend/action.rs b/crates/core/component/shielded-pool/src/spend/action.rs index e518ea1c7c..453f381cd5 100644 --- a/crates/core/component/shielded-pool/src/spend/action.rs +++ b/crates/core/component/shielded-pool/src/spend/action.rs @@ -72,11 +72,10 @@ impl DomainType for Body { impl From for pb::SpendBody { fn from(msg: Body) -> Self { - let rk_bytes: [u8; 32] = msg.rk.into(); pb::SpendBody { balance_commitment: Some(msg.balance_commitment.into()), nullifier: Some(msg.nullifier.into()), - rk: rk_bytes.to_vec(), + rk: Some(msg.rk.into()), } } } @@ -97,10 +96,11 @@ impl TryFrom for Body { .try_into() .context("malformed nullifier")?; - let rk_bytes: [u8; 32] = (proto.rk[..]) + let rk = proto + .rk + .ok_or_else(|| anyhow::anyhow!("missing rk"))? .try_into() - .map_err(|_| anyhow::anyhow!("expected 32-byte rk"))?; - let rk = rk_bytes.try_into().context("malformed rk")?; + .context("malformed rk")?; Ok(Body { balance_commitment, diff --git a/crates/core/transaction/src/transaction.rs b/crates/core/transaction/src/transaction.rs index ff300c1ebe..428ef3cc8e 100644 --- a/crates/core/transaction/src/transaction.rs +++ b/crates/core/transaction/src/transaction.rs @@ -616,11 +616,10 @@ impl DomainType for Transaction { impl From for pbt::Transaction { fn from(msg: Transaction) -> Self { - let sig_bytes: [u8; 64] = msg.binding_sig.into(); pbt::Transaction { body: Some(msg.transaction_body.into()), anchor: Some(msg.anchor.into()), - binding_sig: sig_bytes.to_vec(), + binding_sig: Some(msg.binding_sig.into()), } } } @@ -641,7 +640,9 @@ impl TryFrom for Transaction { .try_into() .context("transaction body malformed")?; - let sig_bytes: [u8; 64] = proto.binding_sig[..] + let binding_sig = proto + .binding_sig + .ok_or_else(|| anyhow::anyhow!("transaction missing binding signature"))? .try_into() .context("transaction binding signature malformed")?; @@ -653,7 +654,7 @@ impl TryFrom for Transaction { Ok(Transaction { transaction_body, - binding_sig: sig_bytes.into(), + binding_sig, anchor, }) } diff --git a/crates/core/transaction/src/view.rs b/crates/core/transaction/src/view.rs index 754aae3b4e..62752219b8 100644 --- a/crates/core/transaction/src/view.rs +++ b/crates/core/transaction/src/view.rs @@ -104,12 +104,12 @@ impl TryFrom for TransactionView { type Error = anyhow::Error; fn try_from(v: pbt::TransactionView) -> Result { - let sig_bytes: [u8; 64] = v.binding_sig[..] + let binding_sig = v + .binding_sig + .ok_or_else(|| anyhow::anyhow!("transaction view missing binding signature"))? .try_into() .context("transaction binding signature malformed")?; - let binding_sig = sig_bytes.into(); - let anchor = v .anchor .ok_or_else(|| anyhow::anyhow!("transaction view missing anchor"))? @@ -202,7 +202,7 @@ impl From for pbt::TransactionView { Self { body_view: Some(v.body_view.into()), anchor: Some(v.anchor.into()), - binding_sig: v.binding_sig.to_bytes().to_vec(), + binding_sig: Some(v.binding_sig.into()), } } } diff --git a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs index a247c87804..4b17608197 100644 --- a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs @@ -194,8 +194,10 @@ pub struct DelegatorVoteBody { #[prost(message, optional, tag = "6")] pub nullifier: ::core::option::Option, /// The randomized validating key for the spend authorization signature. - #[prost(bytes = "vec", tag = "7")] - pub rk: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag = "7")] + pub rk: ::core::option::Option< + super::super::super::super::crypto::decaf377_rdsa::v1alpha1::SpendVerificationKey, + >, } impl ::prost::Name for DelegatorVoteBody { const NAME: &'static str = "DelegatorVoteBody"; diff --git a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.serde.rs index b0b2ecf5ea..70f7950a93 100644 --- a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.serde.rs @@ -970,7 +970,7 @@ impl serde::Serialize for DelegatorVoteBody { if self.nullifier.is_some() { len += 1; } - if !self.rk.is_empty() { + if self.rk.is_some() { len += 1; } let mut struct_ser = serializer.serialize_struct("penumbra.core.component.governance.v1alpha1.DelegatorVoteBody", len)?; @@ -994,9 +994,8 @@ impl serde::Serialize for DelegatorVoteBody { if let Some(v) = self.nullifier.as_ref() { struct_ser.serialize_field("nullifier", v)?; } - if !self.rk.is_empty() { - #[allow(clippy::needless_borrow)] - struct_ser.serialize_field("rk", pbjson::private::base64::encode(&self.rk).as_str())?; + if let Some(v) = self.rk.as_ref() { + struct_ser.serialize_field("rk", v)?; } struct_ser.end() } @@ -1128,9 +1127,7 @@ impl<'de> serde::Deserialize<'de> for DelegatorVoteBody { if rk__.is_some() { return Err(serde::de::Error::duplicate_field("rk")); } - rk__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; + rk__ = map_.next_value()?; } } } @@ -1141,7 +1138,7 @@ impl<'de> serde::Deserialize<'de> for DelegatorVoteBody { value: value__, unbonded_amount: unbonded_amount__, nullifier: nullifier__, - rk: rk__.unwrap_or_default(), + rk: rk__, }) } } diff --git a/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.rs index d88d6067d2..48c8f95a01 100644 --- a/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.rs @@ -204,8 +204,10 @@ pub struct SpendBody { #[prost(message, optional, tag = "6")] pub nullifier: ::core::option::Option, /// The randomized validating key for the spend authorization signature. - #[prost(bytes = "vec", tag = "4")] - pub rk: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag = "4")] + pub rk: ::core::option::Option< + super::super::super::super::crypto::decaf377_rdsa::v1alpha1::SpendVerificationKey, + >, } impl ::prost::Name for SpendBody { const NAME: &'static str = "SpendBody"; diff --git a/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.serde.rs index dd42250573..f38b13130f 100644 --- a/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.serde.rs @@ -1998,7 +1998,7 @@ impl serde::Serialize for SpendBody { if self.nullifier.is_some() { len += 1; } - if !self.rk.is_empty() { + if self.rk.is_some() { len += 1; } let mut struct_ser = serializer.serialize_struct("penumbra.core.component.shielded_pool.v1alpha1.SpendBody", len)?; @@ -2008,9 +2008,8 @@ impl serde::Serialize for SpendBody { if let Some(v) = self.nullifier.as_ref() { struct_ser.serialize_field("nullifier", v)?; } - if !self.rk.is_empty() { - #[allow(clippy::needless_borrow)] - struct_ser.serialize_field("rk", pbjson::private::base64::encode(&self.rk).as_str())?; + if let Some(v) = self.rk.as_ref() { + struct_ser.serialize_field("rk", v)?; } struct_ser.end() } @@ -2097,16 +2096,14 @@ impl<'de> serde::Deserialize<'de> for SpendBody { if rk__.is_some() { return Err(serde::de::Error::duplicate_field("rk")); } - rk__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; + rk__ = map_.next_value()?; } } } Ok(SpendBody { balance_commitment: balance_commitment__, nullifier: nullifier__, - rk: rk__.unwrap_or_default(), + rk: rk__, }) } } diff --git a/crates/proto/src/gen/penumbra.core.keys.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.keys.v1alpha1.rs index f4d3dba058..4dc78441e5 100644 --- a/crates/proto/src/gen/penumbra.core.keys.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.keys.v1alpha1.rs @@ -110,19 +110,6 @@ impl ::prost::Name for SpendKey { } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct SpendVerificationKey { - #[prost(bytes = "vec", tag = "1")] - pub inner: ::prost::alloc::vec::Vec, -} -impl ::prost::Name for SpendVerificationKey { - const NAME: &'static str = "SpendVerificationKey"; - const PACKAGE: &'static str = "penumbra.core.keys.v1alpha1"; - fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.keys.v1alpha1.{}", Self::NAME) - } -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] pub struct FullViewingKey { #[prost(bytes = "vec", tag = "1")] pub inner: ::prost::alloc::vec::Vec, diff --git a/crates/proto/src/gen/penumbra.core.keys.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.keys.v1alpha1.serde.rs index c9ab05d95f..8a2537aa5c 100644 --- a/crates/proto/src/gen/penumbra.core.keys.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.keys.v1alpha1.serde.rs @@ -1207,100 +1207,6 @@ impl<'de> serde::Deserialize<'de> for SpendKey { deserializer.deserialize_struct("penumbra.core.keys.v1alpha1.SpendKey", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for SpendVerificationKey { - #[allow(deprecated)] - fn serialize(&self, serializer: S) -> std::result::Result - where - S: serde::Serializer, - { - use serde::ser::SerializeStruct; - let mut len = 0; - if !self.inner.is_empty() { - len += 1; - } - let mut struct_ser = serializer.serialize_struct("penumbra.core.keys.v1alpha1.SpendVerificationKey", len)?; - if !self.inner.is_empty() { - #[allow(clippy::needless_borrow)] - struct_ser.serialize_field("inner", pbjson::private::base64::encode(&self.inner).as_str())?; - } - struct_ser.end() - } -} -impl<'de> serde::Deserialize<'de> for SpendVerificationKey { - #[allow(deprecated)] - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - const FIELDS: &[&str] = &[ - "inner", - ]; - - #[allow(clippy::enum_variant_names)] - enum GeneratedField { - Inner, - } - impl<'de> serde::Deserialize<'de> for GeneratedField { - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - struct GeneratedVisitor; - - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = GeneratedField; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(formatter, "expected one of: {:?}", &FIELDS) - } - - #[allow(unused_variables)] - fn visit_str(self, value: &str) -> std::result::Result - where - E: serde::de::Error, - { - match value { - "inner" => Ok(GeneratedField::Inner), - _ => Err(serde::de::Error::unknown_field(value, FIELDS)), - } - } - } - deserializer.deserialize_identifier(GeneratedVisitor) - } - } - struct GeneratedVisitor; - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = SpendVerificationKey; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.keys.v1alpha1.SpendVerificationKey") - } - - fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, - { - let mut inner__ = None; - while let Some(k) = map_.next_key()? { - match k { - GeneratedField::Inner => { - if inner__.is_some() { - return Err(serde::de::Error::duplicate_field("inner")); - } - inner__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; - } - } - } - Ok(SpendVerificationKey { - inner: inner__.unwrap_or_default(), - }) - } - } - deserializer.deserialize_struct("penumbra.core.keys.v1alpha1.SpendVerificationKey", FIELDS, GeneratedVisitor) - } -} impl serde::Serialize for WalletId { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs index 8441a4d640..c59af1c93c 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs @@ -5,8 +5,10 @@ pub struct Transaction { #[prost(message, optional, tag = "1")] pub body: ::core::option::Option, /// The binding signature is stored separately from the transaction body that it signs. - #[prost(bytes = "vec", tag = "2")] - pub binding_sig: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag = "2")] + pub binding_sig: ::core::option::Option< + super::super::super::crypto::decaf377_rdsa::v1alpha1::BindingSignature, + >, /// The root of some previous state of the state commitment tree, used as an anchor for all /// ZK state transition proofs. #[prost(message, optional, tag = "3")] @@ -285,8 +287,10 @@ pub struct TransactionView { #[prost(message, optional, tag = "1")] pub body_view: ::core::option::Option, /// The binding signature is stored separately from the transaction body that it signs. - #[prost(bytes = "vec", tag = "2")] - pub binding_sig: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag = "2")] + pub binding_sig: ::core::option::Option< + super::super::super::crypto::decaf377_rdsa::v1alpha1::BindingSignature, + >, /// The root of some previous state of the state commitment tree, used as an anchor for all /// ZK state transition proofs. #[prost(message, optional, tag = "3")] diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs index 39434bba54..d9fbce4aa2 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs @@ -2841,7 +2841,7 @@ impl serde::Serialize for Transaction { if self.body.is_some() { len += 1; } - if !self.binding_sig.is_empty() { + if self.binding_sig.is_some() { len += 1; } if self.anchor.is_some() { @@ -2851,9 +2851,8 @@ impl serde::Serialize for Transaction { if let Some(v) = self.body.as_ref() { struct_ser.serialize_field("body", v)?; } - if !self.binding_sig.is_empty() { - #[allow(clippy::needless_borrow)] - struct_ser.serialize_field("bindingSig", pbjson::private::base64::encode(&self.binding_sig).as_str())?; + if let Some(v) = self.binding_sig.as_ref() { + struct_ser.serialize_field("bindingSig", v)?; } if let Some(v) = self.anchor.as_ref() { struct_ser.serialize_field("anchor", v)?; @@ -2937,9 +2936,7 @@ impl<'de> serde::Deserialize<'de> for Transaction { if binding_sig__.is_some() { return Err(serde::de::Error::duplicate_field("bindingSig")); } - binding_sig__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; + binding_sig__ = map_.next_value()?; } GeneratedField::Anchor => { if anchor__.is_some() { @@ -2951,7 +2948,7 @@ impl<'de> serde::Deserialize<'de> for Transaction { } Ok(Transaction { body: body__, - binding_sig: binding_sig__.unwrap_or_default(), + binding_sig: binding_sig__, anchor: anchor__, }) } @@ -3717,7 +3714,7 @@ impl serde::Serialize for TransactionView { if self.body_view.is_some() { len += 1; } - if !self.binding_sig.is_empty() { + if self.binding_sig.is_some() { len += 1; } if self.anchor.is_some() { @@ -3727,9 +3724,8 @@ impl serde::Serialize for TransactionView { if let Some(v) = self.body_view.as_ref() { struct_ser.serialize_field("bodyView", v)?; } - if !self.binding_sig.is_empty() { - #[allow(clippy::needless_borrow)] - struct_ser.serialize_field("bindingSig", pbjson::private::base64::encode(&self.binding_sig).as_str())?; + if let Some(v) = self.binding_sig.as_ref() { + struct_ser.serialize_field("bindingSig", v)?; } if let Some(v) = self.anchor.as_ref() { struct_ser.serialize_field("anchor", v)?; @@ -3814,9 +3810,7 @@ impl<'de> serde::Deserialize<'de> for TransactionView { if binding_sig__.is_some() { return Err(serde::de::Error::duplicate_field("bindingSig")); } - binding_sig__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; + binding_sig__ = map_.next_value()?; } GeneratedField::Anchor => { if anchor__.is_some() { @@ -3828,7 +3822,7 @@ impl<'de> serde::Deserialize<'de> for TransactionView { } Ok(TransactionView { body_view: body_view__, - binding_sig: binding_sig__.unwrap_or_default(), + binding_sig: binding_sig__, anchor: anchor__, }) } diff --git a/crates/proto/src/gen/penumbra.crypto.decaf377_rdsa.v1alpha1.rs b/crates/proto/src/gen/penumbra.crypto.decaf377_rdsa.v1alpha1.rs index 39a6ae9649..bb6c74838a 100644 --- a/crates/proto/src/gen/penumbra.crypto.decaf377_rdsa.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.crypto.decaf377_rdsa.v1alpha1.rs @@ -24,3 +24,16 @@ impl ::prost::Name for BindingSignature { ::prost::alloc::format!("penumbra.crypto.decaf377_rdsa.v1alpha1.{}", Self::NAME) } } +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SpendVerificationKey { + #[prost(bytes = "vec", tag = "1")] + pub inner: ::prost::alloc::vec::Vec, +} +impl ::prost::Name for SpendVerificationKey { + const NAME: &'static str = "SpendVerificationKey"; + const PACKAGE: &'static str = "penumbra.crypto.decaf377_rdsa.v1alpha1"; + fn full_name() -> ::prost::alloc::string::String { + ::prost::alloc::format!("penumbra.crypto.decaf377_rdsa.v1alpha1.{}", Self::NAME) + } +} diff --git a/crates/proto/src/gen/penumbra.crypto.decaf377_rdsa.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.crypto.decaf377_rdsa.v1alpha1.serde.rs index f8bb3c4ed6..491fb8cdc2 100644 --- a/crates/proto/src/gen/penumbra.crypto.decaf377_rdsa.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.crypto.decaf377_rdsa.v1alpha1.serde.rs @@ -186,3 +186,97 @@ impl<'de> serde::Deserialize<'de> for SpendAuthSignature { deserializer.deserialize_struct("penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for SpendVerificationKey { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.inner.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.crypto.decaf377_rdsa.v1alpha1.SpendVerificationKey", len)?; + if !self.inner.is_empty() { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("inner", pbjson::private::base64::encode(&self.inner).as_str())?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for SpendVerificationKey { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "inner", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Inner, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "inner" => Ok(GeneratedField::Inner), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = SpendVerificationKey; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.crypto.decaf377_rdsa.v1alpha1.SpendVerificationKey") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut inner__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Inner => { + if inner__.is_some() { + return Err(serde::de::Error::duplicate_field("inner")); + } + inner__ = + Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) + ; + } + } + } + Ok(SpendVerificationKey { + inner: inner__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.crypto.decaf377_rdsa.v1alpha1.SpendVerificationKey", FIELDS, GeneratedVisitor) + } +} diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index cec3dfb78bc91fbd95d2bab836736f99a3ac8fa9..9b866518f032c415404d3ed53e83438c4ad03fab 100644 GIT binary patch delta 1009 zcma)*%S%*I9LMkPckaxbIWt$s>m8F6N~0$h+5;cys57FL`Jl#8b4b)N8>-PJ3o@uC zg0zU-okd`@Xj7Y@;6_oDo3>Fzvhd|~_kG-RIQKpow?7-#p20v5 zTP_#!E?2jk^F1(+W_2HIg5bx9@aw9gbj!##G|UtIFyezU`8)}I5RrjF`jpDlAhcg? z0wDxb1E8~dZitXj)c`6wYrv=o3!eo(i?~NL*bt0(#E42g8ErM<26qcc)`$U*tUa!K zM6$+cnMewbD%aH(rB$9y!N4I-V=cVYuEDJuF)X$<1mqWU{fKBV#)Y>>ele{`qy(x# zU5zUp(mw=8CxbK<=TX}(XxSxPI|8yxxOPM|m~icg$Sy&4g6xE@b}HS@Aqkr5bPq{b zc3r5;Gec0JX?77>BW0KQZ3rrN;x8tl059ZvFYFPA7ty&9&At)&r2zNSb^z*XNYR`C zq<|2wwELnJ5Ju<72&iw^?Mp<1VeX_7QEE6+GU1=i&&SJ#P(EIOm)a45`P1dH~g%V?JPP1z}xg{A^eo5uu4}E|bkokDbrT zq9wLPeg!Ow#GS=s+3DQ)+=cv<`QFc77vT+*OHp>}zh#nS{pM&HtFC}{d8LkxSyc_J zwNFDqpsGe)vqx0bXl*n9)Un?s&irtVMsG?W(CfSdq;nB0B%zDU!q&E%g$`yGI@FD8 Fe*tNTt?&Q< delta 939 zcmZuvK}b|l6#e(TH#6_QaYpC+XS5WuAW|?eBQj<*W=t(dQ(|~V1ooqt2s+HN2ISTma8=t7j0d1mF6H1PB;*JEsgcbi zkiK~Ygbg927DxvNANVV+BLqow=;y+aOp;GT7?67`oz~4t0mHlQPVXe%X^&-F^SrY^i60>H# zh|n&pF6N=Jh5jKzZf!$SzMh90qW?MgFKl}+ESDDGLDgjN>TKzH>7e*FF66@i?N)DZ z!KVOu2lB~XcoB{YGJCn6H9>QgT3duSE>z3%Dh%(z2ssl$5P}hMW*3MsLM{?jpI4!9 zn*98t(!byww{KGsJ2rJ?YWn_e(jwP_q$tyrY?u}yuf=&rmRkK5gL^p%Vwb|d2Ml7D zg6V=a>{7rkXAh8<@7d-nz{7q_52+lZ%LJauk3l--?h@h2nc{_+;`GF|ndy3>o5<}1 z9a8HdT8ip1dlU51e|ZXdeTmk`a9Da2pXc$K&oM)?oPRfs&Wt8`SmZ2P?XL9 diff --git a/crates/proto/src/protobuf.rs b/crates/proto/src/protobuf.rs index c2d11e4815..7975b71591 100644 --- a/crates/proto/src/protobuf.rs +++ b/crates/proto/src/protobuf.rs @@ -38,8 +38,9 @@ where // that shouldn't depend on the Penumbra proto framework. use crate::penumbra::core::component::ibc::v1alpha1::IbcRelay; -use crate::penumbra::core::keys::v1alpha1::SpendVerificationKey; -use crate::penumbra::crypto::decaf377_rdsa::v1alpha1::{BindingSignature, SpendAuthSignature}; +use crate::penumbra::crypto::decaf377_rdsa::v1alpha1::{ + BindingSignature, SpendAuthSignature, SpendVerificationKey, +}; use decaf377_rdsa::{Binding, Signature, SpendAuth, VerificationKey}; diff --git a/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go b/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go index 70c2bc87e0..a3d3590a39 100644 --- a/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go +++ b/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go @@ -586,7 +586,7 @@ type DelegatorVoteBody struct { // The nullifier of the input note. Nullifier *v1alpha14.Nullifier `protobuf:"bytes,6,opt,name=nullifier,proto3" json:"nullifier,omitempty"` // The randomized validating key for the spend authorization signature. - Rk []byte `protobuf:"bytes,7,opt,name=rk,proto3" json:"rk,omitempty"` + Rk *v1alpha11.SpendVerificationKey `protobuf:"bytes,7,opt,name=rk,proto3" json:"rk,omitempty"` } func (x *DelegatorVoteBody) Reset() { @@ -663,7 +663,7 @@ func (x *DelegatorVoteBody) GetNullifier() *v1alpha14.Nullifier { return nil } -func (x *DelegatorVoteBody) GetRk() []byte { +func (x *DelegatorVoteBody) GetRk() *v1alpha11.SpendVerificationKey { if x != nil { return x.Rk } @@ -3587,7 +3587,7 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDesc = 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x5a, 0x4b, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, - 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x84, + 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0xc2, 0x03, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, @@ -3611,578 +3611,582 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDesc = 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x02, 0x72, 0x6b, 0x22, 0x94, 0x04, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x12, 0x62, 0x0a, 0x07, 0x76, - 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, - 0x5f, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x2e, - 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, - 0x1a, 0xba, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x61, 0x0a, 0x0e, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x02, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, + 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x52, + 0x02, 0x72, 0x6b, 0x22, 0x94, 0x04, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, + 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x12, 0x62, 0x0a, 0x07, 0x76, 0x69, 0x73, + 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, + 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x5f, 0x0a, + 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, + 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xba, + 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x61, 0x0a, 0x0e, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x0d, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x4c, 0x0a, + 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, + 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, + 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x1a, 0x6b, 0x0a, 0x06, 0x4f, + 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x61, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x22, 0xe7, 0x03, 0x0a, 0x11, 0x44, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x25, 0x0a, 0x0e, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, + 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x0b, 0x73, 0x74, + 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, + 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x4e, 0x6f, 0x74, + 0x65, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x65, + 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x12, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x0e, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, + 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x5f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, + 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, + 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x53, 0x22, 0x47, 0x0a, 0x0a, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x0a, + 0x08, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x86, 0x01, 0x0a, 0x09, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3e, 0x0a, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, + 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x9d, 0x01, + 0x0a, 0x04, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, - 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, - 0x4c, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, - 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, - 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x1a, 0x6b, 0x0a, - 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x61, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, + 0x74, 0x65, 0x22, 0x49, 0x0a, 0x04, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x56, 0x4f, + 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x41, 0x42, 0x53, 0x54, 0x41, 0x49, 0x4e, + 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x59, 0x45, 0x53, 0x10, 0x02, + 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x10, 0x03, 0x22, 0x94, 0x05, + 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x5b, 0x0a, 0x06, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x22, 0xe7, 0x03, 0x0a, - 0x11, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, 0x6c, - 0x61, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x25, - 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x0b, - 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, - 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x4e, - 0x6f, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x6e, 0x6f, - 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x12, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x65, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, - 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, - 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x0e, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, - 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, - 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, - 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x22, 0x47, 0x0a, 0x0a, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x45, 0x0a, 0x08, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x39, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x86, 0x01, 0x0a, 0x09, 0x44, 0x61, 0x6f, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, - 0x9d, 0x01, 0x0a, 0x04, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x6f, 0x74, 0x69, + 0x6e, 0x67, 0x48, 0x00, 0x52, 0x06, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x64, 0x0a, 0x09, + 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x57, 0x69, 0x74, 0x68, + 0x64, 0x72, 0x61, 0x77, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x6e, 0x12, 0x61, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x48, 0x00, 0x52, 0x08, 0x66, 0x69, 0x6e, + 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x5e, 0x0a, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, - 0x76, 0x6f, 0x74, 0x65, 0x22, 0x49, 0x0a, 0x04, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x10, - 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x41, 0x42, 0x53, 0x54, 0x41, - 0x49, 0x4e, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x59, 0x45, 0x53, - 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x10, 0x03, 0x22, - 0x94, 0x05, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x5b, 0x0a, 0x06, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x6f, - 0x74, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x06, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x64, - 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x65, 0x64, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x1a, + 0x23, 0x0a, 0x09, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x12, 0x16, 0x0a, 0x06, + 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x1a, 0x62, 0x0a, 0x08, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, + 0x12, 0x56, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x57, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x6e, 0x12, 0x61, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x48, 0x00, 0x52, 0x08, 0x66, - 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x5e, 0x0a, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x52, + 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x1a, 0x61, 0x0a, 0x07, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x65, 0x64, 0x12, 0x56, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, + 0x6d, 0x65, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x22, 0xcc, 0x04, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x12, 0x5d, 0x0a, 0x06, 0x70, 0x61, 0x73, 0x73, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x48, 0x00, 0x52, 0x07, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x74, 0x69, 0x6e, - 0x67, 0x1a, 0x23, 0x0a, 0x09, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x12, 0x16, - 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x1a, 0x62, 0x0a, 0x08, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, - 0x65, 0x64, 0x12, 0x56, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, - 0x65, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x1a, 0x61, 0x0a, 0x07, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x65, 0x64, 0x12, 0x56, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, - 0x63, 0x6f, 0x6d, 0x65, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x42, 0x07, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xcc, 0x04, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x12, 0x5d, 0x0a, 0x06, 0x70, 0x61, - 0x73, 0x73, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x48, - 0x00, 0x52, 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x12, 0x5d, 0x0a, 0x06, 0x66, 0x61, 0x69, - 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x48, 0x00, - 0x52, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x60, 0x0a, 0x07, 0x73, 0x6c, 0x61, 0x73, - 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x64, 0x48, - 0x00, 0x52, 0x07, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x64, 0x1a, 0x23, 0x0a, 0x09, 0x57, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x1a, - 0x08, 0x0a, 0x06, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x1a, 0x6e, 0x0a, 0x06, 0x46, 0x61, 0x69, - 0x6c, 0x65, 0x64, 0x12, 0x64, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, - 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x52, 0x09, - 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x1a, 0x6f, 0x0a, 0x07, 0x53, 0x6c, 0x61, - 0x73, 0x68, 0x65, 0x64, 0x12, 0x64, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, + 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x48, 0x00, 0x52, + 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x12, 0x5d, 0x0a, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, - 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x52, - 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x6f, 0x75, - 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x22, 0x43, 0x0a, 0x05, 0x54, 0x61, 0x6c, 0x6c, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x79, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x79, 0x65, 0x73, - 0x12, 0x0e, 0x0a, 0x02, 0x6e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x6e, 0x6f, - 0x12, 0x18, 0x0a, 0x07, 0x61, 0x62, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x07, 0x61, 0x62, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x22, 0xf2, 0x07, 0x0a, 0x08, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x5d, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, - 0x69, 0x6e, 0x67, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x5d, - 0x0a, 0x09, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x52, 0x09, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x70, 0x0a, - 0x10, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x48, 0x00, 0x52, 0x06, + 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x60, 0x0a, 0x07, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, - 0x5b, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, - 0x6e, 0x64, 0x52, 0x08, 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x64, 0x0a, 0x0c, - 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, - 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0b, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6c, - 0x61, 0x6e, 0x1a, 0x23, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, - 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x1a, 0x2a, 0x0a, 0x09, 0x45, 0x6d, 0x65, 0x72, 0x67, - 0x65, 0x6e, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x6c, 0x74, 0x5f, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x6c, 0x74, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x1a, 0xe5, 0x01, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x68, 0x0a, 0x0e, 0x6f, 0x6c, 0x64, 0x5f, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, + 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x64, 0x48, 0x00, 0x52, + 0x07, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x64, 0x1a, 0x23, 0x0a, 0x09, 0x57, 0x69, 0x74, 0x68, + 0x64, 0x72, 0x61, 0x77, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x1a, 0x08, 0x0a, + 0x06, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x1a, 0x6e, 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, + 0x64, 0x12, 0x64, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, + 0x6d, 0x65, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x52, 0x09, 0x77, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x1a, 0x6f, 0x0a, 0x07, 0x53, 0x6c, 0x61, 0x73, 0x68, + 0x65, 0x64, 0x12, 0x64, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, + 0x6f, 0x6d, 0x65, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x52, 0x09, 0x77, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, + 0x6f, 0x6d, 0x65, 0x22, 0x43, 0x0a, 0x05, 0x54, 0x61, 0x6c, 0x6c, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x79, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x79, 0x65, 0x73, 0x12, 0x0e, + 0x0a, 0x02, 0x6e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x6e, 0x6f, 0x12, 0x18, + 0x0a, 0x07, 0x61, 0x62, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x07, 0x61, 0x62, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x22, 0xf2, 0x07, 0x0a, 0x08, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5d, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, + 0x67, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x5d, 0x0a, 0x09, + 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x52, 0x0d, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x12, 0x68, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, - 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0d, 0x6e, 0x65, - 0x77, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x4b, 0x0a, 0x08, 0x44, - 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x3f, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x1a, 0x25, 0x0a, 0x0b, 0x55, 0x70, 0x67, 0x72, - 0x61, 0x64, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, - 0x51, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x49, 0x64, 0x22, 0x6b, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x51, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x49, 0x64, 0x22, 0x96, 0x03, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x08, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, + 0x52, 0x09, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x70, 0x0a, 0x10, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0f, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x5b, 0x0a, + 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, + 0x52, 0x08, 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x64, 0x0a, 0x0c, 0x75, 0x70, + 0x67, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, + 0x6c, 0x61, 0x6e, 0x52, 0x0b, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6c, 0x61, 0x6e, + 0x1a, 0x23, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, + 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x1a, 0x2a, 0x0a, 0x09, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, + 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x6c, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x6c, 0x74, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x1a, 0xe5, 0x01, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x68, 0x0a, 0x0e, 0x6f, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x2c, - 0x0a, 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, - 0x65, 0x6e, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x52, 0x0d, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, + 0x68, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0d, 0x6e, 0x65, 0x77, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x4b, 0x0a, 0x08, 0x44, 0x61, 0x6f, + 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x3f, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x1a, 0x25, 0x0a, 0x0b, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, + 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x51, 0x0a, + 0x13, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, + 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, + 0x22, 0x6b, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x5a, 0x0a, 0x17, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x55, 0x0a, 0x17, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x49, 0x64, 0x22, 0x69, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, - 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, - 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x4c, 0x0a, - 0x13, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, + 0x13, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0xba, 0x02, 0x0a, 0x14, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x08, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x6e, 0x64, 0x5f, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0e, 0x65, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, - 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x53, 0x0a, 0x15, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, - 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, 0xac, 0x01, - 0x0a, 0x16, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x12, - 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, - 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0xce, 0x02, 0x0a, - 0x14, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x5f, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x56, - 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x5a, 0x0a, 0x17, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x12, 0x36, 0x0a, 0x17, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x72, - 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x50, 0x61, 0x73, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, - 0x6f, 0x6c, 0x64, 0x12, 0x38, 0x0a, 0x18, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, - 0x73, 0x6c, 0x61, 0x73, 0x68, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, - 0x6c, 0x61, 0x73, 0x68, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x80, 0x01, - 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x12, 0x6e, 0x0a, 0x11, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, + 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, + 0x22, 0x96, 0x03, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x10, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x22, 0xb6, 0x05, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5a, 0x0a, 0x0c, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x61, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x44, 0x61, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x09, - 0x64, 0x61, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x6e, 0x0a, 0x11, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x2c, 0x0a, 0x12, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x6e, + 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5a, 0x0a, + 0x17, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, + 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x55, 0x0a, 0x17, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, + 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, + 0x22, 0x69, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x09, + 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x4c, 0x0a, 0x13, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0xba, 0x02, 0x0a, 0x14, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x10, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x69, 0x62, 0x63, - 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x52, 0x09, 0x69, 0x62, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x5a, 0x0a, - 0x0c, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, - 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, - 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x73, 0x74, - 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x66, 0x65, 0x65, - 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, + 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x6e, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, + 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x25, 0x0a, + 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x53, 0x0a, 0x15, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, 0xac, 0x01, 0x0a, 0x16, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x12, 0x4b, 0x0a, + 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0xce, 0x02, 0x0a, 0x14, 0x47, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, + 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x56, 0x6f, 0x74, + 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x5a, 0x0a, 0x17, 0x70, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x61, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x15, + 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x41, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x12, 0x36, 0x0a, 0x17, 0x70, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, + 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x70, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x50, 0x61, 0x73, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, + 0x64, 0x12, 0x38, 0x0a, 0x18, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x6c, + 0x61, 0x73, 0x68, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x6c, 0x61, + 0x73, 0x68, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x0e, + 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x6e, + 0x0a, 0x11, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x10, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xb6, + 0x05, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5a, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x52, 0x09, 0x66, 0x65, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x7a, 0x0a, - 0x14, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x73, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x52, 0x13, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x17, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x53, 0x65, 0x74, 0x12, 0x53, 0x0a, 0x03, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x64, 0x61, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, + 0x61, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x09, 0x64, 0x61, + 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x6e, 0x0a, 0x11, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x03, 0x6f, 0x6c, 0x64, 0x12, 0x53, 0x0a, 0x03, 0x6e, 0x65, - 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x03, 0x6e, 0x65, 0x77, 0x22, - 0xac, 0x01, 0x0a, 0x21, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, - 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, - 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, - 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, - 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x47, - 0x0a, 0x22, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x70, - 0x6f, 0x77, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x76, 0x6f, 0x74, 0x69, - 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x22, 0x68, 0x0a, 0x2a, 0x41, 0x6c, 0x6c, 0x54, 0x61, - 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, - 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, - 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, - 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x2b, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, - 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, - 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x48, 0x0a, 0x05, 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x10, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x69, 0x62, 0x63, 0x5f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x52, 0x09, 0x69, 0x62, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x5a, 0x0a, 0x0c, 0x73, + 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x6b, + 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x5f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x52, 0x09, 0x66, 0x65, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x7a, 0x0a, 0x14, 0x64, + 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x52, 0x13, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x53, 0x65, 0x74, 0x12, 0x53, 0x0a, 0x03, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, - 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x05, 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x12, 0x4b, 0x0a, 0x0c, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x32, 0x0a, 0x15, 0x4e, 0x65, 0x78, 0x74, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x42, 0x0a, 0x16, - 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0e, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, - 0x32, 0xcd, 0x0a, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x93, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, - 0x93, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x52, 0x03, 0x6f, 0x6c, 0x64, 0x12, 0x53, 0x0a, 0x03, 0x6e, 0x65, 0x77, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x03, 0x6e, 0x65, 0x77, 0x22, 0xac, 0x01, + 0x0a, 0x21, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x12, + 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, + 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x47, 0x0a, 0x22, + 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x77, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, + 0x50, 0x6f, 0x77, 0x65, 0x72, 0x22, 0x68, 0x0a, 0x2a, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, + 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, + 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, + 0xc4, 0x01, 0x0a, 0x2b, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x48, 0x0a, 0x05, 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x61, 0x6c, + 0x6c, 0x79, 0x52, 0x05, 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x32, 0x0a, 0x15, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x42, 0x0a, 0x16, 0x4e, 0x65, + 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, + 0x6e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x32, 0xcd, + 0x0a, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x93, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x99, 0x01, 0x0a, 0x0e, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x0e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, - 0x6f, 0x74, 0x65, 0x73, 0x12, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x56, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, - 0xbd, 0x01, 0x0a, 0x1a, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, - 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x4e, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, - 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4f, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x93, 0x01, + 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, - 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0xda, 0x01, 0x0a, 0x23, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x57, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, - 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, - 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x58, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0xa1, 0x01, 0x0a, - 0x10, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, - 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, - 0x42, 0x82, 0x03, 0x0a, 0x2f, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x99, 0x01, 0x0a, 0x0e, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x42, 0x0f, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x6d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, - 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x3b, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x47, 0xaa, 0x02, 0x2b, - 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x2b, 0x50, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x37, 0x50, 0x65, 0x6e, 0x75, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x9b, 0x01, 0x0a, 0x0e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, + 0x65, 0x73, 0x12, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, + 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0xbd, 0x01, + 0x0a, 0x1a, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x4e, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x69, 0x6e, + 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4f, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x69, 0x6e, + 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xda, 0x01, + 0x0a, 0x23, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x57, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x58, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x6c, + 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, + 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0xa1, 0x01, 0x0a, 0x10, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x82, + 0x03, 0x0a, 0x2f, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x42, 0x0f, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x6d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, + 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, + 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x3b, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x47, 0xaa, 0x02, 0x2b, 0x50, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x2b, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5c, 0x56, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0xea, 0x02, 0x2f, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, - 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, - 0x3a, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x37, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x5c, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5c, 0x56, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x2f, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, + 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x47, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4261,17 +4265,18 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_goTypes = (*v1alpha12.GovernanceKey)(nil), // 58: penumbra.core.keys.v1alpha1.GovernanceKey (*v1alpha13.Value)(nil), // 59: penumbra.core.asset.v1alpha1.Value (*v1alpha14.Nullifier)(nil), // 60: penumbra.core.component.sct.v1alpha1.Nullifier - (*v1alpha15.Note)(nil), // 61: penumbra.core.component.shielded_pool.v1alpha1.Note - (*v1alpha12.Address)(nil), // 62: penumbra.core.keys.v1alpha1.Address - (*v1alpha16.RateData)(nil), // 63: penumbra.core.component.stake.v1alpha1.RateData - (*v1alpha17.ChainParameters)(nil), // 64: penumbra.core.component.chain.v1alpha1.ChainParameters - (*v1alpha18.DaoParameters)(nil), // 65: penumbra.core.component.dao.v1alpha1.DaoParameters - (*v1alpha19.IbcParameters)(nil), // 66: penumbra.core.component.ibc.v1alpha1.IbcParameters - (*v1alpha16.StakeParameters)(nil), // 67: penumbra.core.component.stake.v1alpha1.StakeParameters - (*v1alpha110.FeeParameters)(nil), // 68: penumbra.core.component.fee.v1alpha1.FeeParameters - (*v1alpha111.DistributionsParameters)(nil), // 69: penumbra.core.component.distributions.v1alpha1.DistributionsParameters - (*v1alpha15.NoteView)(nil), // 70: penumbra.core.component.shielded_pool.v1alpha1.NoteView - (*anypb.Any)(nil), // 71: google.protobuf.Any + (*v1alpha11.SpendVerificationKey)(nil), // 61: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendVerificationKey + (*v1alpha15.Note)(nil), // 62: penumbra.core.component.shielded_pool.v1alpha1.Note + (*v1alpha12.Address)(nil), // 63: penumbra.core.keys.v1alpha1.Address + (*v1alpha16.RateData)(nil), // 64: penumbra.core.component.stake.v1alpha1.RateData + (*v1alpha17.ChainParameters)(nil), // 65: penumbra.core.component.chain.v1alpha1.ChainParameters + (*v1alpha18.DaoParameters)(nil), // 66: penumbra.core.component.dao.v1alpha1.DaoParameters + (*v1alpha19.IbcParameters)(nil), // 67: penumbra.core.component.ibc.v1alpha1.IbcParameters + (*v1alpha16.StakeParameters)(nil), // 68: penumbra.core.component.stake.v1alpha1.StakeParameters + (*v1alpha110.FeeParameters)(nil), // 69: penumbra.core.component.fee.v1alpha1.FeeParameters + (*v1alpha111.DistributionsParameters)(nil), // 70: penumbra.core.component.distributions.v1alpha1.DistributionsParameters + (*v1alpha15.NoteView)(nil), // 71: penumbra.core.component.shielded_pool.v1alpha1.NoteView + (*anypb.Any)(nil), // 72: google.protobuf.Any } var file_penumbra_core_component_governance_v1alpha1_governance_proto_depIdxs = []int32{ 19, // 0: penumbra.core.component.governance.v1alpha1.ProposalSubmit.proposal:type_name -> penumbra.core.component.governance.v1alpha1.Proposal @@ -4291,81 +4296,82 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_depIdxs = 59, // 14: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.value:type_name -> penumbra.core.asset.v1alpha1.Value 55, // 15: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount 60, // 16: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 40, // 17: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.visible:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible - 41, // 18: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.opaque:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque - 15, // 19: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote - 61, // 20: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.staked_note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 55, // 21: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 59, // 22: penumbra.core.component.governance.v1alpha1.DaoDeposit.value:type_name -> penumbra.core.asset.v1alpha1.Value - 59, // 23: penumbra.core.component.governance.v1alpha1.DaoSpend.value:type_name -> penumbra.core.asset.v1alpha1.Value - 59, // 24: penumbra.core.component.governance.v1alpha1.DaoOutput.value:type_name -> penumbra.core.asset.v1alpha1.Value - 62, // 25: penumbra.core.component.governance.v1alpha1.DaoOutput.address:type_name -> penumbra.core.keys.v1alpha1.Address - 0, // 26: penumbra.core.component.governance.v1alpha1.Vote.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote.Vote - 42, // 27: penumbra.core.component.governance.v1alpha1.ProposalState.voting:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Voting - 43, // 28: penumbra.core.component.governance.v1alpha1.ProposalState.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Withdrawn - 44, // 29: penumbra.core.component.governance.v1alpha1.ProposalState.finished:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Finished - 45, // 30: penumbra.core.component.governance.v1alpha1.ProposalState.claimed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Claimed - 47, // 31: penumbra.core.component.governance.v1alpha1.ProposalOutcome.passed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Passed - 48, // 32: penumbra.core.component.governance.v1alpha1.ProposalOutcome.failed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Failed - 49, // 33: penumbra.core.component.governance.v1alpha1.ProposalOutcome.slashed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed - 50, // 34: penumbra.core.component.governance.v1alpha1.Proposal.signaling:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.Signaling - 51, // 35: penumbra.core.component.governance.v1alpha1.Proposal.emergency:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.Emergency - 52, // 36: penumbra.core.component.governance.v1alpha1.Proposal.parameter_change:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange - 53, // 37: penumbra.core.component.governance.v1alpha1.Proposal.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend - 54, // 38: penumbra.core.component.governance.v1alpha1.Proposal.upgrade_plan:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.UpgradePlan - 19, // 39: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.proposal:type_name -> penumbra.core.component.governance.v1alpha1.Proposal - 16, // 40: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.state:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState - 55, // 41: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.proposal_deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 63, // 42: penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData - 19, // 43: penumbra.core.component.governance.v1alpha1.ProposalListResponse.proposal:type_name -> penumbra.core.component.governance.v1alpha1.Proposal - 16, // 44: penumbra.core.component.governance.v1alpha1.ProposalListResponse.state:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState - 15, // 45: penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote - 57, // 46: penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 55, // 47: penumbra.core.component.governance.v1alpha1.GovernanceParameters.proposal_deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 30, // 48: penumbra.core.component.governance.v1alpha1.GenesisContent.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters - 64, // 49: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.chain_params:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters - 65, // 50: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.dao_params:type_name -> penumbra.core.component.dao.v1alpha1.DaoParameters - 30, // 51: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters - 66, // 52: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.ibc_params:type_name -> penumbra.core.component.ibc.v1alpha1.IbcParameters - 67, // 53: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.stake_params:type_name -> penumbra.core.component.stake.v1alpha1.StakeParameters - 68, // 54: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.fee_params:type_name -> penumbra.core.component.fee.v1alpha1.FeeParameters - 69, // 55: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.distributions_params:type_name -> penumbra.core.component.distributions.v1alpha1.DistributionsParameters - 32, // 56: penumbra.core.component.governance.v1alpha1.ChangedAppParametersSet.old:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters - 32, // 57: penumbra.core.component.governance.v1alpha1.ChangedAppParametersSet.new:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters - 57, // 58: penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartRequest.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 18, // 59: penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse.tally:type_name -> penumbra.core.component.governance.v1alpha1.Tally - 57, // 60: penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 8, // 61: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote - 70, // 62: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView - 8, // 63: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote - 17, // 64: penumbra.core.component.governance.v1alpha1.ProposalState.Finished.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome - 17, // 65: penumbra.core.component.governance.v1alpha1.ProposalState.Claimed.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome - 46, // 66: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Failed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn - 46, // 67: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn - 32, // 68: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.old_parameters:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters - 32, // 69: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.new_parameters:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters - 71, // 70: penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend.transaction_plan:type_name -> google.protobuf.Any - 20, // 71: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:input_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoRequest - 26, // 72: penumbra.core.component.governance.v1alpha1.QueryService.ProposalList:input_type -> penumbra.core.component.governance.v1alpha1.ProposalListRequest - 22, // 73: penumbra.core.component.governance.v1alpha1.QueryService.ProposalData:input_type -> penumbra.core.component.governance.v1alpha1.ProposalDataRequest - 38, // 74: penumbra.core.component.governance.v1alpha1.QueryService.NextProposalId:input_type -> penumbra.core.component.governance.v1alpha1.NextProposalIdRequest - 28, // 75: penumbra.core.component.governance.v1alpha1.QueryService.ValidatorVotes:input_type -> penumbra.core.component.governance.v1alpha1.ValidatorVotesRequest - 34, // 76: penumbra.core.component.governance.v1alpha1.QueryService.VotingPowerAtProposalStart:input_type -> penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartRequest - 36, // 77: penumbra.core.component.governance.v1alpha1.QueryService.AllTalliedDelegatorVotesForProposal:input_type -> penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalRequest - 24, // 78: penumbra.core.component.governance.v1alpha1.QueryService.ProposalRateData:input_type -> penumbra.core.component.governance.v1alpha1.ProposalRateDataRequest - 21, // 79: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:output_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoResponse - 27, // 80: penumbra.core.component.governance.v1alpha1.QueryService.ProposalList:output_type -> penumbra.core.component.governance.v1alpha1.ProposalListResponse - 23, // 81: penumbra.core.component.governance.v1alpha1.QueryService.ProposalData:output_type -> penumbra.core.component.governance.v1alpha1.ProposalDataResponse - 39, // 82: penumbra.core.component.governance.v1alpha1.QueryService.NextProposalId:output_type -> penumbra.core.component.governance.v1alpha1.NextProposalIdResponse - 29, // 83: penumbra.core.component.governance.v1alpha1.QueryService.ValidatorVotes:output_type -> penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse - 35, // 84: penumbra.core.component.governance.v1alpha1.QueryService.VotingPowerAtProposalStart:output_type -> penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartResponse - 37, // 85: penumbra.core.component.governance.v1alpha1.QueryService.AllTalliedDelegatorVotesForProposal:output_type -> penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse - 25, // 86: penumbra.core.component.governance.v1alpha1.QueryService.ProposalRateData:output_type -> penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse - 79, // [79:87] is the sub-list for method output_type - 71, // [71:79] is the sub-list for method input_type - 71, // [71:71] is the sub-list for extension type_name - 71, // [71:71] is the sub-list for extension extendee - 0, // [0:71] is the sub-list for field type_name + 61, // 17: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.rk:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendVerificationKey + 40, // 18: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.visible:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible + 41, // 19: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.opaque:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque + 15, // 20: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote + 62, // 21: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.staked_note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 55, // 22: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 59, // 23: penumbra.core.component.governance.v1alpha1.DaoDeposit.value:type_name -> penumbra.core.asset.v1alpha1.Value + 59, // 24: penumbra.core.component.governance.v1alpha1.DaoSpend.value:type_name -> penumbra.core.asset.v1alpha1.Value + 59, // 25: penumbra.core.component.governance.v1alpha1.DaoOutput.value:type_name -> penumbra.core.asset.v1alpha1.Value + 63, // 26: penumbra.core.component.governance.v1alpha1.DaoOutput.address:type_name -> penumbra.core.keys.v1alpha1.Address + 0, // 27: penumbra.core.component.governance.v1alpha1.Vote.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote.Vote + 42, // 28: penumbra.core.component.governance.v1alpha1.ProposalState.voting:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Voting + 43, // 29: penumbra.core.component.governance.v1alpha1.ProposalState.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Withdrawn + 44, // 30: penumbra.core.component.governance.v1alpha1.ProposalState.finished:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Finished + 45, // 31: penumbra.core.component.governance.v1alpha1.ProposalState.claimed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Claimed + 47, // 32: penumbra.core.component.governance.v1alpha1.ProposalOutcome.passed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Passed + 48, // 33: penumbra.core.component.governance.v1alpha1.ProposalOutcome.failed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Failed + 49, // 34: penumbra.core.component.governance.v1alpha1.ProposalOutcome.slashed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed + 50, // 35: penumbra.core.component.governance.v1alpha1.Proposal.signaling:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.Signaling + 51, // 36: penumbra.core.component.governance.v1alpha1.Proposal.emergency:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.Emergency + 52, // 37: penumbra.core.component.governance.v1alpha1.Proposal.parameter_change:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange + 53, // 38: penumbra.core.component.governance.v1alpha1.Proposal.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend + 54, // 39: penumbra.core.component.governance.v1alpha1.Proposal.upgrade_plan:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.UpgradePlan + 19, // 40: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.proposal:type_name -> penumbra.core.component.governance.v1alpha1.Proposal + 16, // 41: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.state:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState + 55, // 42: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.proposal_deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 64, // 43: penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData + 19, // 44: penumbra.core.component.governance.v1alpha1.ProposalListResponse.proposal:type_name -> penumbra.core.component.governance.v1alpha1.Proposal + 16, // 45: penumbra.core.component.governance.v1alpha1.ProposalListResponse.state:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState + 15, // 46: penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote + 57, // 47: penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 55, // 48: penumbra.core.component.governance.v1alpha1.GovernanceParameters.proposal_deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 30, // 49: penumbra.core.component.governance.v1alpha1.GenesisContent.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters + 65, // 50: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.chain_params:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters + 66, // 51: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.dao_params:type_name -> penumbra.core.component.dao.v1alpha1.DaoParameters + 30, // 52: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters + 67, // 53: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.ibc_params:type_name -> penumbra.core.component.ibc.v1alpha1.IbcParameters + 68, // 54: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.stake_params:type_name -> penumbra.core.component.stake.v1alpha1.StakeParameters + 69, // 55: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.fee_params:type_name -> penumbra.core.component.fee.v1alpha1.FeeParameters + 70, // 56: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.distributions_params:type_name -> penumbra.core.component.distributions.v1alpha1.DistributionsParameters + 32, // 57: penumbra.core.component.governance.v1alpha1.ChangedAppParametersSet.old:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters + 32, // 58: penumbra.core.component.governance.v1alpha1.ChangedAppParametersSet.new:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters + 57, // 59: penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartRequest.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 18, // 60: penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse.tally:type_name -> penumbra.core.component.governance.v1alpha1.Tally + 57, // 61: penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 8, // 62: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote + 71, // 63: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView + 8, // 64: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote + 17, // 65: penumbra.core.component.governance.v1alpha1.ProposalState.Finished.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome + 17, // 66: penumbra.core.component.governance.v1alpha1.ProposalState.Claimed.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome + 46, // 67: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Failed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn + 46, // 68: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn + 32, // 69: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.old_parameters:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters + 32, // 70: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.new_parameters:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters + 72, // 71: penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend.transaction_plan:type_name -> google.protobuf.Any + 20, // 72: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:input_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoRequest + 26, // 73: penumbra.core.component.governance.v1alpha1.QueryService.ProposalList:input_type -> penumbra.core.component.governance.v1alpha1.ProposalListRequest + 22, // 74: penumbra.core.component.governance.v1alpha1.QueryService.ProposalData:input_type -> penumbra.core.component.governance.v1alpha1.ProposalDataRequest + 38, // 75: penumbra.core.component.governance.v1alpha1.QueryService.NextProposalId:input_type -> penumbra.core.component.governance.v1alpha1.NextProposalIdRequest + 28, // 76: penumbra.core.component.governance.v1alpha1.QueryService.ValidatorVotes:input_type -> penumbra.core.component.governance.v1alpha1.ValidatorVotesRequest + 34, // 77: penumbra.core.component.governance.v1alpha1.QueryService.VotingPowerAtProposalStart:input_type -> penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartRequest + 36, // 78: penumbra.core.component.governance.v1alpha1.QueryService.AllTalliedDelegatorVotesForProposal:input_type -> penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalRequest + 24, // 79: penumbra.core.component.governance.v1alpha1.QueryService.ProposalRateData:input_type -> penumbra.core.component.governance.v1alpha1.ProposalRateDataRequest + 21, // 80: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:output_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoResponse + 27, // 81: penumbra.core.component.governance.v1alpha1.QueryService.ProposalList:output_type -> penumbra.core.component.governance.v1alpha1.ProposalListResponse + 23, // 82: penumbra.core.component.governance.v1alpha1.QueryService.ProposalData:output_type -> penumbra.core.component.governance.v1alpha1.ProposalDataResponse + 39, // 83: penumbra.core.component.governance.v1alpha1.QueryService.NextProposalId:output_type -> penumbra.core.component.governance.v1alpha1.NextProposalIdResponse + 29, // 84: penumbra.core.component.governance.v1alpha1.QueryService.ValidatorVotes:output_type -> penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse + 35, // 85: penumbra.core.component.governance.v1alpha1.QueryService.VotingPowerAtProposalStart:output_type -> penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartResponse + 37, // 86: penumbra.core.component.governance.v1alpha1.QueryService.AllTalliedDelegatorVotesForProposal:output_type -> penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse + 25, // 87: penumbra.core.component.governance.v1alpha1.QueryService.ProposalRateData:output_type -> penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse + 80, // [80:88] is the sub-list for method output_type + 72, // [72:80] is the sub-list for method input_type + 72, // [72:72] is the sub-list for extension type_name + 72, // [72:72] is the sub-list for extension extendee + 0, // [0:72] is the sub-list for field type_name } func init() { file_penumbra_core_component_governance_v1alpha1_governance_proto_init() } diff --git a/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go b/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go index 6f1448b2ce..eb6f342a64 100644 --- a/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go +++ b/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go @@ -590,7 +590,7 @@ type SpendBody struct { // The nullifier of the input note. Nullifier *v1alpha14.Nullifier `protobuf:"bytes,6,opt,name=nullifier,proto3" json:"nullifier,omitempty"` // The randomized validating key for the spend authorization signature. - Rk []byte `protobuf:"bytes,4,opt,name=rk,proto3" json:"rk,omitempty"` + Rk *v1alpha13.SpendVerificationKey `protobuf:"bytes,4,opt,name=rk,proto3" json:"rk,omitempty"` } func (x *SpendBody) Reset() { @@ -639,7 +639,7 @@ func (x *SpendBody) GetNullifier() *v1alpha14.Nullifier { return nil } -func (x *SpendBody) GetRk() []byte { +func (x *SpendBody) GetRk() *v1alpha13.SpendVerificationKey { if x != nil { return x.Rk } @@ -1664,7 +1664,7 @@ var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_rawD 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xca, 0x01, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x42, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x88, 0x02, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x5e, 0x0a, 0x12, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, @@ -1676,128 +1676,50 @@ var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_rawD 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x72, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, - 0x72, 0x6b, 0x22, 0xd2, 0x03, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, - 0x12, 0x5d, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, - 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, - 0x5a, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, - 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xa4, 0x01, 0x0a, 0x07, - 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x05, 0x73, - 0x70, 0x65, 0x6e, 0x64, 0x12, 0x4c, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, - 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, - 0x74, 0x65, 0x1a, 0x55, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x05, - 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, - 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, - 0x6e, 0x64, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x73, 0x70, 0x65, - 0x6e, 0x64, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0x8c, 0x02, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, - 0x64, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, - 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x72, - 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0a, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, - 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, - 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x22, 0xad, 0x01, 0x0a, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x12, 0x4e, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, - 0x79, 0x12, 0x53, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x5a, 0x4b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, - 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x9e, 0x02, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x5e, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, - 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, - 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x50, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x5e, 0x0a, 0x12, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x11, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, - 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0e, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x4b, 0x65, 0x79, 0x12, - 0x26, 0x0a, 0x0f, 0x6f, 0x76, 0x6b, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6f, 0x76, 0x6b, 0x57, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x22, 0xa6, 0x04, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x12, 0x5e, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, - 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, - 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x5b, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, - 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, - 0x71, 0x75, 0x65, 0x1a, 0xf1, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, - 0x4e, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x02, 0x72, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x52, 0x02, 0x72, 0x6b, + 0x22, 0xd2, 0x03, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x12, 0x5d, + 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, - 0x4c, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, + 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, + 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x5a, 0x0a, + 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, - 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, - 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x48, 0x0a, - 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x1a, 0x58, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, - 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, + 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, + 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xa4, 0x01, 0x0a, 0x07, 0x56, 0x69, + 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x05, 0x73, 0x70, 0x65, + 0x6e, 0x64, 0x12, 0x4c, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, + 0x1a, 0x55, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x05, 0x73, 0x70, + 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, + 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, + 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0x8c, 0x02, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, + 0x6c, 0x61, 0x6e, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x76, 0x69, 0x65, 0x77, - 0x22, 0xa1, 0x02, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x12, - 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x64, 0x65, - 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x61, 0x6c, + 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x61, 0x6e, + 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x72, + 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, @@ -1805,77 +1727,159 @@ var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_rawD 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x53, 0x22, 0x77, 0x0a, 0x18, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x08, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x49, 0x64, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x22, 0x6f, 0x0a, - 0x19, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, - 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, 0x64, 0x65, - 0x6e, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x0d, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9e, - 0x02, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x12, 0x6b, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x9e, - 0x01, 0x0a, 0x0a, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, - 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, - 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6e, - 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x12, - 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x32, - 0xb9, 0x01, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0xa8, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x12, 0x48, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x49, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, - 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x95, 0x03, 0x0a, 0x32, - 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, - 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x42, 0x11, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x73, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, - 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, - 0x70, 0x6f, 0x6f, 0x6c, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, - 0x43, 0x43, 0x53, 0xaa, 0x02, 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, - 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x68, - 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0xca, 0x02, 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, - 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x68, - 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0xe2, 0x02, 0x39, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, - 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x68, - 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x31, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, - 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x53, 0x68, 0x69, - 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x6e, 0x67, 0x53, 0x22, 0xad, 0x01, 0x0a, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, + 0x4e, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, + 0x53, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, + 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x5a, 0x4b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x70, + 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x9e, 0x02, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, + 0x6f, 0x64, 0x79, 0x12, 0x5e, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, + 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x12, 0x5e, 0x0a, 0x12, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x11, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6d, + 0x65, 0x6d, 0x6f, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x4b, 0x65, 0x79, 0x12, 0x26, 0x0a, + 0x0f, 0x6f, 0x76, 0x6b, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6f, 0x76, 0x6b, 0x57, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x64, 0x4b, 0x65, 0x79, 0x22, 0xa6, 0x04, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x56, 0x69, 0x65, 0x77, 0x12, 0x5e, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, + 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, + 0x69, 0x62, 0x6c, 0x65, 0x12, 0x5b, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, + 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, + 0x65, 0x1a, 0xf1, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4e, 0x0a, + 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x4c, 0x0a, + 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, + 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, + 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x70, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x4b, 0x65, 0x79, 0x1a, 0x58, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, + 0x4e, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, + 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, + 0x0d, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0xa1, + 0x02, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x39, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x64, 0x65, 0x73, 0x74, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, + 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x28, + 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x5f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, + 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, + 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x53, 0x22, 0x77, 0x0a, 0x18, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, + 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x08, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x49, 0x64, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x22, 0x6f, 0x0a, 0x19, 0x44, + 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, 0x64, 0x65, 0x6e, 0x6f, + 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, + 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9e, 0x02, 0x0a, + 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x6b, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x9e, 0x01, 0x0a, + 0x0a, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x06, 0x61, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x3e, 0x0a, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, + 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x32, 0xb9, 0x01, + 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xa8, + 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x42, 0x79, 0x49, 0x64, 0x12, 0x48, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x49, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, + 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x95, 0x03, 0x0a, 0x32, 0x63, 0x6f, + 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, + 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x42, 0x11, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x73, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, + 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, + 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x3b, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, + 0x6f, 0x6c, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, + 0x53, 0xaa, 0x02, 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, + 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0xca, 0x02, 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, + 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0xe2, 0x02, 0x39, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, + 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x31, + 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, + 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x53, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1892,43 +1896,44 @@ func file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_raw var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes = make([]protoimpl.MessageInfo, 25) var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_goTypes = []interface{}{ - (*Note)(nil), // 0: penumbra.core.component.shielded_pool.v1alpha1.Note - (*NoteView)(nil), // 1: penumbra.core.component.shielded_pool.v1alpha1.NoteView - (*NoteCiphertext)(nil), // 2: penumbra.core.component.shielded_pool.v1alpha1.NoteCiphertext - (*NotePayload)(nil), // 3: penumbra.core.component.shielded_pool.v1alpha1.NotePayload - (*ZKOutputProof)(nil), // 4: penumbra.core.component.shielded_pool.v1alpha1.ZKOutputProof - (*ZKSpendProof)(nil), // 5: penumbra.core.component.shielded_pool.v1alpha1.ZKSpendProof - (*ZKNullifierDerivationProof)(nil), // 6: penumbra.core.component.shielded_pool.v1alpha1.ZKNullifierDerivationProof - (*Spend)(nil), // 7: penumbra.core.component.shielded_pool.v1alpha1.Spend - (*EventSpend)(nil), // 8: penumbra.core.component.shielded_pool.v1alpha1.EventSpend - (*EventOutput)(nil), // 9: penumbra.core.component.shielded_pool.v1alpha1.EventOutput - (*SpendBody)(nil), // 10: penumbra.core.component.shielded_pool.v1alpha1.SpendBody - (*SpendView)(nil), // 11: penumbra.core.component.shielded_pool.v1alpha1.SpendView - (*SpendPlan)(nil), // 12: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan - (*Output)(nil), // 13: penumbra.core.component.shielded_pool.v1alpha1.Output - (*OutputBody)(nil), // 14: penumbra.core.component.shielded_pool.v1alpha1.OutputBody - (*OutputView)(nil), // 15: penumbra.core.component.shielded_pool.v1alpha1.OutputView - (*OutputPlan)(nil), // 16: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan - (*DenomMetadataByIdRequest)(nil), // 17: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdRequest - (*DenomMetadataByIdResponse)(nil), // 18: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdResponse - (*GenesisContent)(nil), // 19: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent - (*SpendView_Visible)(nil), // 20: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible - (*SpendView_Opaque)(nil), // 21: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Opaque - (*OutputView_Visible)(nil), // 22: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible - (*OutputView_Opaque)(nil), // 23: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Opaque - (*GenesisContent_Allocation)(nil), // 24: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation - (*v1alpha1.Value)(nil), // 25: penumbra.core.asset.v1alpha1.Value - (*v1alpha11.Address)(nil), // 26: penumbra.core.keys.v1alpha1.Address - (*v1alpha1.ValueView)(nil), // 27: penumbra.core.asset.v1alpha1.ValueView - (*v1alpha11.AddressView)(nil), // 28: penumbra.core.keys.v1alpha1.AddressView - (*v1alpha12.StateCommitment)(nil), // 29: penumbra.crypto.tct.v1alpha1.StateCommitment - (*v1alpha13.SpendAuthSignature)(nil), // 30: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - (*v1alpha14.Nullifier)(nil), // 31: penumbra.core.component.sct.v1alpha1.Nullifier - (*v1alpha1.BalanceCommitment)(nil), // 32: penumbra.core.asset.v1alpha1.BalanceCommitment - (*v1alpha1.AssetId)(nil), // 33: penumbra.core.asset.v1alpha1.AssetId - (*v1alpha1.DenomMetadata)(nil), // 34: penumbra.core.asset.v1alpha1.DenomMetadata - (*v1alpha11.PayloadKey)(nil), // 35: penumbra.core.keys.v1alpha1.PayloadKey - (*v1alpha15.Amount)(nil), // 36: penumbra.core.num.v1alpha1.Amount + (*Note)(nil), // 0: penumbra.core.component.shielded_pool.v1alpha1.Note + (*NoteView)(nil), // 1: penumbra.core.component.shielded_pool.v1alpha1.NoteView + (*NoteCiphertext)(nil), // 2: penumbra.core.component.shielded_pool.v1alpha1.NoteCiphertext + (*NotePayload)(nil), // 3: penumbra.core.component.shielded_pool.v1alpha1.NotePayload + (*ZKOutputProof)(nil), // 4: penumbra.core.component.shielded_pool.v1alpha1.ZKOutputProof + (*ZKSpendProof)(nil), // 5: penumbra.core.component.shielded_pool.v1alpha1.ZKSpendProof + (*ZKNullifierDerivationProof)(nil), // 6: penumbra.core.component.shielded_pool.v1alpha1.ZKNullifierDerivationProof + (*Spend)(nil), // 7: penumbra.core.component.shielded_pool.v1alpha1.Spend + (*EventSpend)(nil), // 8: penumbra.core.component.shielded_pool.v1alpha1.EventSpend + (*EventOutput)(nil), // 9: penumbra.core.component.shielded_pool.v1alpha1.EventOutput + (*SpendBody)(nil), // 10: penumbra.core.component.shielded_pool.v1alpha1.SpendBody + (*SpendView)(nil), // 11: penumbra.core.component.shielded_pool.v1alpha1.SpendView + (*SpendPlan)(nil), // 12: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan + (*Output)(nil), // 13: penumbra.core.component.shielded_pool.v1alpha1.Output + (*OutputBody)(nil), // 14: penumbra.core.component.shielded_pool.v1alpha1.OutputBody + (*OutputView)(nil), // 15: penumbra.core.component.shielded_pool.v1alpha1.OutputView + (*OutputPlan)(nil), // 16: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan + (*DenomMetadataByIdRequest)(nil), // 17: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdRequest + (*DenomMetadataByIdResponse)(nil), // 18: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdResponse + (*GenesisContent)(nil), // 19: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent + (*SpendView_Visible)(nil), // 20: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible + (*SpendView_Opaque)(nil), // 21: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Opaque + (*OutputView_Visible)(nil), // 22: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible + (*OutputView_Opaque)(nil), // 23: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Opaque + (*GenesisContent_Allocation)(nil), // 24: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation + (*v1alpha1.Value)(nil), // 25: penumbra.core.asset.v1alpha1.Value + (*v1alpha11.Address)(nil), // 26: penumbra.core.keys.v1alpha1.Address + (*v1alpha1.ValueView)(nil), // 27: penumbra.core.asset.v1alpha1.ValueView + (*v1alpha11.AddressView)(nil), // 28: penumbra.core.keys.v1alpha1.AddressView + (*v1alpha12.StateCommitment)(nil), // 29: penumbra.crypto.tct.v1alpha1.StateCommitment + (*v1alpha13.SpendAuthSignature)(nil), // 30: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + (*v1alpha14.Nullifier)(nil), // 31: penumbra.core.component.sct.v1alpha1.Nullifier + (*v1alpha1.BalanceCommitment)(nil), // 32: penumbra.core.asset.v1alpha1.BalanceCommitment + (*v1alpha13.SpendVerificationKey)(nil), // 33: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendVerificationKey + (*v1alpha1.AssetId)(nil), // 34: penumbra.core.asset.v1alpha1.AssetId + (*v1alpha1.DenomMetadata)(nil), // 35: penumbra.core.asset.v1alpha1.DenomMetadata + (*v1alpha11.PayloadKey)(nil), // 36: penumbra.core.keys.v1alpha1.PayloadKey + (*v1alpha15.Amount)(nil), // 37: penumbra.core.num.v1alpha1.Amount } var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_depIdxs = []int32{ 25, // 0: penumbra.core.component.shielded_pool.v1alpha1.Note.value:type_name -> penumbra.core.asset.v1alpha1.Value @@ -1944,36 +1949,37 @@ var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_depI 29, // 10: penumbra.core.component.shielded_pool.v1alpha1.EventOutput.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment 32, // 11: penumbra.core.component.shielded_pool.v1alpha1.SpendBody.balance_commitment:type_name -> penumbra.core.asset.v1alpha1.BalanceCommitment 31, // 12: penumbra.core.component.shielded_pool.v1alpha1.SpendBody.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 20, // 13: penumbra.core.component.shielded_pool.v1alpha1.SpendView.visible:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible - 21, // 14: penumbra.core.component.shielded_pool.v1alpha1.SpendView.opaque:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView.Opaque - 0, // 15: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 14, // 16: penumbra.core.component.shielded_pool.v1alpha1.Output.body:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputBody - 4, // 17: penumbra.core.component.shielded_pool.v1alpha1.Output.proof:type_name -> penumbra.core.component.shielded_pool.v1alpha1.ZKOutputProof - 3, // 18: penumbra.core.component.shielded_pool.v1alpha1.OutputBody.note_payload:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NotePayload - 32, // 19: penumbra.core.component.shielded_pool.v1alpha1.OutputBody.balance_commitment:type_name -> penumbra.core.asset.v1alpha1.BalanceCommitment - 22, // 20: penumbra.core.component.shielded_pool.v1alpha1.OutputView.visible:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible - 23, // 21: penumbra.core.component.shielded_pool.v1alpha1.OutputView.opaque:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView.Opaque - 25, // 22: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan.value:type_name -> penumbra.core.asset.v1alpha1.Value - 26, // 23: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan.dest_address:type_name -> penumbra.core.keys.v1alpha1.Address - 33, // 24: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdRequest.asset_id:type_name -> penumbra.core.asset.v1alpha1.AssetId - 34, // 25: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdResponse.denom_metadata:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata - 24, // 26: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.allocations:type_name -> penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation - 7, // 27: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend - 1, // 28: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView - 7, // 29: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Opaque.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend - 13, // 30: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output - 1, // 31: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView - 35, // 32: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey - 13, // 33: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Opaque.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output - 36, // 34: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation.amount:type_name -> penumbra.core.num.v1alpha1.Amount - 26, // 35: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation.address:type_name -> penumbra.core.keys.v1alpha1.Address - 17, // 36: penumbra.core.component.shielded_pool.v1alpha1.QueryService.DenomMetadataById:input_type -> penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdRequest - 18, // 37: penumbra.core.component.shielded_pool.v1alpha1.QueryService.DenomMetadataById:output_type -> penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdResponse - 37, // [37:38] is the sub-list for method output_type - 36, // [36:37] is the sub-list for method input_type - 36, // [36:36] is the sub-list for extension type_name - 36, // [36:36] is the sub-list for extension extendee - 0, // [0:36] is the sub-list for field type_name + 33, // 13: penumbra.core.component.shielded_pool.v1alpha1.SpendBody.rk:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendVerificationKey + 20, // 14: penumbra.core.component.shielded_pool.v1alpha1.SpendView.visible:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible + 21, // 15: penumbra.core.component.shielded_pool.v1alpha1.SpendView.opaque:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView.Opaque + 0, // 16: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 14, // 17: penumbra.core.component.shielded_pool.v1alpha1.Output.body:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputBody + 4, // 18: penumbra.core.component.shielded_pool.v1alpha1.Output.proof:type_name -> penumbra.core.component.shielded_pool.v1alpha1.ZKOutputProof + 3, // 19: penumbra.core.component.shielded_pool.v1alpha1.OutputBody.note_payload:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NotePayload + 32, // 20: penumbra.core.component.shielded_pool.v1alpha1.OutputBody.balance_commitment:type_name -> penumbra.core.asset.v1alpha1.BalanceCommitment + 22, // 21: penumbra.core.component.shielded_pool.v1alpha1.OutputView.visible:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible + 23, // 22: penumbra.core.component.shielded_pool.v1alpha1.OutputView.opaque:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView.Opaque + 25, // 23: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan.value:type_name -> penumbra.core.asset.v1alpha1.Value + 26, // 24: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan.dest_address:type_name -> penumbra.core.keys.v1alpha1.Address + 34, // 25: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdRequest.asset_id:type_name -> penumbra.core.asset.v1alpha1.AssetId + 35, // 26: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdResponse.denom_metadata:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata + 24, // 27: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.allocations:type_name -> penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation + 7, // 28: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend + 1, // 29: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView + 7, // 30: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Opaque.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend + 13, // 31: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output + 1, // 32: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView + 36, // 33: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey + 13, // 34: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Opaque.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output + 37, // 35: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation.amount:type_name -> penumbra.core.num.v1alpha1.Amount + 26, // 36: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation.address:type_name -> penumbra.core.keys.v1alpha1.Address + 17, // 37: penumbra.core.component.shielded_pool.v1alpha1.QueryService.DenomMetadataById:input_type -> penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdRequest + 18, // 38: penumbra.core.component.shielded_pool.v1alpha1.QueryService.DenomMetadataById:output_type -> penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdResponse + 38, // [38:39] is the sub-list for method output_type + 37, // [37:38] is the sub-list for method input_type + 37, // [37:37] is the sub-list for extension type_name + 37, // [37:37] is the sub-list for extension extendee + 0, // [0:37] is the sub-list for field type_name } func init() { file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_init() } diff --git a/proto/go/gen/penumbra/core/keys/v1alpha1/keys.pb.go b/proto/go/gen/penumbra/core/keys/v1alpha1/keys.pb.go index ca4a0d54cb..a52b10ac90 100644 --- a/proto/go/gen/penumbra/core/keys/v1alpha1/keys.pb.go +++ b/proto/go/gen/penumbra/core/keys/v1alpha1/keys.pb.go @@ -261,53 +261,6 @@ func (x *SpendKey) GetInner() []byte { return nil } -type SpendVerificationKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Inner []byte `protobuf:"bytes,1,opt,name=inner,proto3" json:"inner,omitempty"` -} - -func (x *SpendVerificationKey) Reset() { - *x = SpendVerificationKey{} - if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SpendVerificationKey) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SpendVerificationKey) ProtoMessage() {} - -func (x *SpendVerificationKey) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SpendVerificationKey.ProtoReflect.Descriptor instead. -func (*SpendVerificationKey) Descriptor() ([]byte, []int) { - return file_penumbra_core_keys_v1alpha1_keys_proto_rawDescGZIP(), []int{4} -} - -func (x *SpendVerificationKey) GetInner() []byte { - if x != nil { - return x.Inner - } - return nil -} - type FullViewingKey struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -319,7 +272,7 @@ type FullViewingKey struct { func (x *FullViewingKey) Reset() { *x = FullViewingKey{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[5] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -332,7 +285,7 @@ func (x *FullViewingKey) String() string { func (*FullViewingKey) ProtoMessage() {} func (x *FullViewingKey) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[5] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -345,7 +298,7 @@ func (x *FullViewingKey) ProtoReflect() protoreflect.Message { // Deprecated: Use FullViewingKey.ProtoReflect.Descriptor instead. func (*FullViewingKey) Descriptor() ([]byte, []int) { - return file_penumbra_core_keys_v1alpha1_keys_proto_rawDescGZIP(), []int{5} + return file_penumbra_core_keys_v1alpha1_keys_proto_rawDescGZIP(), []int{4} } func (x *FullViewingKey) GetInner() []byte { @@ -366,7 +319,7 @@ type WalletId struct { func (x *WalletId) Reset() { *x = WalletId{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[6] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -379,7 +332,7 @@ func (x *WalletId) String() string { func (*WalletId) ProtoMessage() {} func (x *WalletId) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[6] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -392,7 +345,7 @@ func (x *WalletId) ProtoReflect() protoreflect.Message { // Deprecated: Use WalletId.ProtoReflect.Descriptor instead. func (*WalletId) Descriptor() ([]byte, []int) { - return file_penumbra_core_keys_v1alpha1_keys_proto_rawDescGZIP(), []int{6} + return file_penumbra_core_keys_v1alpha1_keys_proto_rawDescGZIP(), []int{5} } func (x *WalletId) GetInner() []byte { @@ -413,7 +366,7 @@ type Diversifier struct { func (x *Diversifier) Reset() { *x = Diversifier{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[7] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -426,7 +379,7 @@ func (x *Diversifier) String() string { func (*Diversifier) ProtoMessage() {} func (x *Diversifier) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[7] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -439,7 +392,7 @@ func (x *Diversifier) ProtoReflect() protoreflect.Message { // Deprecated: Use Diversifier.ProtoReflect.Descriptor instead. func (*Diversifier) Descriptor() ([]byte, []int) { - return file_penumbra_core_keys_v1alpha1_keys_proto_rawDescGZIP(), []int{7} + return file_penumbra_core_keys_v1alpha1_keys_proto_rawDescGZIP(), []int{6} } func (x *Diversifier) GetInner() []byte { @@ -461,7 +414,7 @@ type AddressIndex struct { func (x *AddressIndex) Reset() { *x = AddressIndex{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[8] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -474,7 +427,7 @@ func (x *AddressIndex) String() string { func (*AddressIndex) ProtoMessage() {} func (x *AddressIndex) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[8] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -487,7 +440,7 @@ func (x *AddressIndex) ProtoReflect() protoreflect.Message { // Deprecated: Use AddressIndex.ProtoReflect.Descriptor instead. func (*AddressIndex) Descriptor() ([]byte, []int) { - return file_penumbra_core_keys_v1alpha1_keys_proto_rawDescGZIP(), []int{8} + return file_penumbra_core_keys_v1alpha1_keys_proto_rawDescGZIP(), []int{7} } func (x *AddressIndex) GetAccount() uint32 { @@ -516,7 +469,7 @@ type IdentityKey struct { func (x *IdentityKey) Reset() { *x = IdentityKey{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[9] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -529,7 +482,7 @@ func (x *IdentityKey) String() string { func (*IdentityKey) ProtoMessage() {} func (x *IdentityKey) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[9] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -542,7 +495,7 @@ func (x *IdentityKey) ProtoReflect() protoreflect.Message { // Deprecated: Use IdentityKey.ProtoReflect.Descriptor instead. func (*IdentityKey) Descriptor() ([]byte, []int) { - return file_penumbra_core_keys_v1alpha1_keys_proto_rawDescGZIP(), []int{9} + return file_penumbra_core_keys_v1alpha1_keys_proto_rawDescGZIP(), []int{8} } func (x *IdentityKey) GetIk() []byte { @@ -564,7 +517,7 @@ type GovernanceKey struct { func (x *GovernanceKey) Reset() { *x = GovernanceKey{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[10] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -577,7 +530,7 @@ func (x *GovernanceKey) String() string { func (*GovernanceKey) ProtoMessage() {} func (x *GovernanceKey) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[10] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -590,7 +543,7 @@ func (x *GovernanceKey) ProtoReflect() protoreflect.Message { // Deprecated: Use GovernanceKey.ProtoReflect.Descriptor instead. func (*GovernanceKey) Descriptor() ([]byte, []int) { - return file_penumbra_core_keys_v1alpha1_keys_proto_rawDescGZIP(), []int{10} + return file_penumbra_core_keys_v1alpha1_keys_proto_rawDescGZIP(), []int{9} } func (x *GovernanceKey) GetGk() []byte { @@ -611,7 +564,7 @@ type ConsensusKey struct { func (x *ConsensusKey) Reset() { *x = ConsensusKey{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[11] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -624,7 +577,7 @@ func (x *ConsensusKey) String() string { func (*ConsensusKey) ProtoMessage() {} func (x *ConsensusKey) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[11] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -637,7 +590,7 @@ func (x *ConsensusKey) ProtoReflect() protoreflect.Message { // Deprecated: Use ConsensusKey.ProtoReflect.Descriptor instead. func (*ConsensusKey) Descriptor() ([]byte, []int) { - return file_penumbra_core_keys_v1alpha1_keys_proto_rawDescGZIP(), []int{11} + return file_penumbra_core_keys_v1alpha1_keys_proto_rawDescGZIP(), []int{10} } func (x *ConsensusKey) GetInner() []byte { @@ -660,7 +613,7 @@ type AddressView_Visible struct { func (x *AddressView_Visible) Reset() { *x = AddressView_Visible{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[12] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -673,7 +626,7 @@ func (x *AddressView_Visible) String() string { func (*AddressView_Visible) ProtoMessage() {} func (x *AddressView_Visible) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[12] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -721,7 +674,7 @@ type AddressView_Opaque struct { func (x *AddressView_Opaque) Reset() { *x = AddressView_Opaque{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[13] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -734,7 +687,7 @@ func (x *AddressView_Opaque) String() string { func (*AddressView_Opaque) ProtoMessage() {} func (x *AddressView_Opaque) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[13] + mi := &file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -802,45 +755,42 @@ var file_penumbra_core_keys_v1alpha1_keys_proto_rawDesc = []byte{ 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x20, 0x0a, 0x08, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, - 0x72, 0x22, 0x2c, 0x0a, 0x14, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, - 0x26, 0x0a, 0x0e, 0x46, 0x75, 0x6c, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x69, 0x6e, 0x67, 0x4b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x20, 0x0a, 0x08, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x23, 0x0a, 0x0b, 0x44, 0x69, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x48, - 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x18, - 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x61, 0x6e, 0x64, - 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x72, 0x61, - 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x22, 0x1d, 0x0a, 0x0b, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6b, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x6b, 0x22, 0x1f, 0x0a, 0x0d, 0x47, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x67, 0x6b, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x67, 0x6b, 0x22, 0x24, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x73, - 0x65, 0x6e, 0x73, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x42, 0x94, - 0x02, 0x0a, 0x1f, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x42, 0x09, 0x4b, 0x65, 0x79, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6b, 0x65, - 0x79, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x6b, 0x65, 0x79, 0x73, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x4b, 0xaa, 0x02, - 0x1b, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x4b, - 0x65, 0x79, 0x73, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x1b, 0x50, + 0x72, 0x22, 0x26, 0x0a, 0x0e, 0x46, 0x75, 0x6c, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x69, 0x6e, 0x67, + 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x20, 0x0a, 0x08, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x23, 0x0a, 0x0b, 0x44, + 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, + 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, + 0x22, 0x48, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x18, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x61, + 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, + 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x22, 0x1d, 0x0a, 0x0b, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6b, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x6b, 0x22, 0x1f, 0x0a, 0x0d, 0x47, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x67, 0x6b, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x67, 0x6b, 0x22, 0x24, 0x0a, 0x0c, 0x43, 0x6f, + 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, + 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, + 0x42, 0x94, 0x02, 0x0a, 0x1f, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x42, 0x09, 0x4b, 0x65, 0x79, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, + 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x6b, 0x65, 0x79, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x6b, 0x65, + 0x79, 0x73, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x4b, + 0xaa, 0x02, 0x1b, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, + 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, + 0x1b, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x4b, + 0x65, 0x79, 0x73, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x27, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x4b, 0x65, 0x79, - 0x73, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x27, 0x50, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x4b, 0x65, 0x79, 0x73, 0x5c, - 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1e, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, - 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x4b, 0x65, 0x79, 0x73, 0x3a, 0x3a, 0x56, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1e, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x4b, 0x65, 0x79, 0x73, 0x3a, 0x3a, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -855,29 +805,28 @@ func file_penumbra_core_keys_v1alpha1_keys_proto_rawDescGZIP() []byte { return file_penumbra_core_keys_v1alpha1_keys_proto_rawDescData } -var file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes = make([]protoimpl.MessageInfo, 13) var file_penumbra_core_keys_v1alpha1_keys_proto_goTypes = []interface{}{ - (*Address)(nil), // 0: penumbra.core.keys.v1alpha1.Address - (*AddressView)(nil), // 1: penumbra.core.keys.v1alpha1.AddressView - (*PayloadKey)(nil), // 2: penumbra.core.keys.v1alpha1.PayloadKey - (*SpendKey)(nil), // 3: penumbra.core.keys.v1alpha1.SpendKey - (*SpendVerificationKey)(nil), // 4: penumbra.core.keys.v1alpha1.SpendVerificationKey - (*FullViewingKey)(nil), // 5: penumbra.core.keys.v1alpha1.FullViewingKey - (*WalletId)(nil), // 6: penumbra.core.keys.v1alpha1.WalletId - (*Diversifier)(nil), // 7: penumbra.core.keys.v1alpha1.Diversifier - (*AddressIndex)(nil), // 8: penumbra.core.keys.v1alpha1.AddressIndex - (*IdentityKey)(nil), // 9: penumbra.core.keys.v1alpha1.IdentityKey - (*GovernanceKey)(nil), // 10: penumbra.core.keys.v1alpha1.GovernanceKey - (*ConsensusKey)(nil), // 11: penumbra.core.keys.v1alpha1.ConsensusKey - (*AddressView_Visible)(nil), // 12: penumbra.core.keys.v1alpha1.AddressView.Visible - (*AddressView_Opaque)(nil), // 13: penumbra.core.keys.v1alpha1.AddressView.Opaque + (*Address)(nil), // 0: penumbra.core.keys.v1alpha1.Address + (*AddressView)(nil), // 1: penumbra.core.keys.v1alpha1.AddressView + (*PayloadKey)(nil), // 2: penumbra.core.keys.v1alpha1.PayloadKey + (*SpendKey)(nil), // 3: penumbra.core.keys.v1alpha1.SpendKey + (*FullViewingKey)(nil), // 4: penumbra.core.keys.v1alpha1.FullViewingKey + (*WalletId)(nil), // 5: penumbra.core.keys.v1alpha1.WalletId + (*Diversifier)(nil), // 6: penumbra.core.keys.v1alpha1.Diversifier + (*AddressIndex)(nil), // 7: penumbra.core.keys.v1alpha1.AddressIndex + (*IdentityKey)(nil), // 8: penumbra.core.keys.v1alpha1.IdentityKey + (*GovernanceKey)(nil), // 9: penumbra.core.keys.v1alpha1.GovernanceKey + (*ConsensusKey)(nil), // 10: penumbra.core.keys.v1alpha1.ConsensusKey + (*AddressView_Visible)(nil), // 11: penumbra.core.keys.v1alpha1.AddressView.Visible + (*AddressView_Opaque)(nil), // 12: penumbra.core.keys.v1alpha1.AddressView.Opaque } var file_penumbra_core_keys_v1alpha1_keys_proto_depIdxs = []int32{ - 12, // 0: penumbra.core.keys.v1alpha1.AddressView.visible:type_name -> penumbra.core.keys.v1alpha1.AddressView.Visible - 13, // 1: penumbra.core.keys.v1alpha1.AddressView.opaque:type_name -> penumbra.core.keys.v1alpha1.AddressView.Opaque + 11, // 0: penumbra.core.keys.v1alpha1.AddressView.visible:type_name -> penumbra.core.keys.v1alpha1.AddressView.Visible + 12, // 1: penumbra.core.keys.v1alpha1.AddressView.opaque:type_name -> penumbra.core.keys.v1alpha1.AddressView.Opaque 0, // 2: penumbra.core.keys.v1alpha1.AddressView.Visible.address:type_name -> penumbra.core.keys.v1alpha1.Address - 8, // 3: penumbra.core.keys.v1alpha1.AddressView.Visible.index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 6, // 4: penumbra.core.keys.v1alpha1.AddressView.Visible.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId + 7, // 3: penumbra.core.keys.v1alpha1.AddressView.Visible.index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 5, // 4: penumbra.core.keys.v1alpha1.AddressView.Visible.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId 0, // 5: penumbra.core.keys.v1alpha1.AddressView.Opaque.address:type_name -> penumbra.core.keys.v1alpha1.Address 6, // [6:6] is the sub-list for method output_type 6, // [6:6] is the sub-list for method input_type @@ -941,18 +890,6 @@ func file_penumbra_core_keys_v1alpha1_keys_proto_init() { } } file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SpendVerificationKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FullViewingKey); i { case 0: return &v.state @@ -964,7 +901,7 @@ func file_penumbra_core_keys_v1alpha1_keys_proto_init() { return nil } } - file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WalletId); i { case 0: return &v.state @@ -976,7 +913,7 @@ func file_penumbra_core_keys_v1alpha1_keys_proto_init() { return nil } } - file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Diversifier); i { case 0: return &v.state @@ -988,7 +925,7 @@ func file_penumbra_core_keys_v1alpha1_keys_proto_init() { return nil } } - file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AddressIndex); i { case 0: return &v.state @@ -1000,7 +937,7 @@ func file_penumbra_core_keys_v1alpha1_keys_proto_init() { return nil } } - file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IdentityKey); i { case 0: return &v.state @@ -1012,7 +949,7 @@ func file_penumbra_core_keys_v1alpha1_keys_proto_init() { return nil } } - file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GovernanceKey); i { case 0: return &v.state @@ -1024,7 +961,7 @@ func file_penumbra_core_keys_v1alpha1_keys_proto_init() { return nil } } - file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConsensusKey); i { case 0: return &v.state @@ -1036,7 +973,7 @@ func file_penumbra_core_keys_v1alpha1_keys_proto_init() { return nil } } - file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AddressView_Visible); i { case 0: return &v.state @@ -1048,7 +985,7 @@ func file_penumbra_core_keys_v1alpha1_keys_proto_init() { return nil } } - file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_keys_v1alpha1_keys_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AddressView_Opaque); i { case 0: return &v.state @@ -1071,7 +1008,7 @@ func file_penumbra_core_keys_v1alpha1_keys_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_core_keys_v1alpha1_keys_proto_rawDesc, NumEnums: 0, - NumMessages: 14, + NumMessages: 13, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go index f6112c1393..73c34f2acf 100644 --- a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go +++ b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go @@ -7,18 +7,18 @@ package transactionv1alpha1 import ( - v1alpha19 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/asset/v1alpha1" - v1alpha14 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/dex/v1alpha1" - v1alpha11 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/fee/v1alpha1" - v1alpha17 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/governance/v1alpha1" - v1alpha16 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/ibc/v1alpha1" - v1alpha110 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/sct/v1alpha1" - v1alpha13 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1" - v1alpha15 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/stake/v1alpha1" - v1alpha18 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/keys/v1alpha1" - v1alpha12 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/decaf377_fmd/v1alpha1" - v1alpha111 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1" - v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/tct/v1alpha1" + v1alpha110 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/asset/v1alpha1" + v1alpha15 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/dex/v1alpha1" + v1alpha12 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/fee/v1alpha1" + v1alpha18 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/governance/v1alpha1" + v1alpha17 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/ibc/v1alpha1" + v1alpha111 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/sct/v1alpha1" + v1alpha14 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1" + v1alpha16 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/stake/v1alpha1" + v1alpha19 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/keys/v1alpha1" + v1alpha13 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/decaf377_fmd/v1alpha1" + v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1" + v1alpha11 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/tct/v1alpha1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -40,10 +40,10 @@ type Transaction struct { Body *TransactionBody `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` // The binding signature is stored separately from the transaction body that it signs. - BindingSig []byte `protobuf:"bytes,2,opt,name=binding_sig,json=bindingSig,proto3" json:"binding_sig,omitempty"` + BindingSig *v1alpha1.BindingSignature `protobuf:"bytes,2,opt,name=binding_sig,json=bindingSig,proto3" json:"binding_sig,omitempty"` // The root of some previous state of the state commitment tree, used as an anchor for all // ZK state transition proofs. - Anchor *v1alpha1.MerkleRoot `protobuf:"bytes,3,opt,name=anchor,proto3" json:"anchor,omitempty"` + Anchor *v1alpha11.MerkleRoot `protobuf:"bytes,3,opt,name=anchor,proto3" json:"anchor,omitempty"` } func (x *Transaction) Reset() { @@ -85,14 +85,14 @@ func (x *Transaction) GetBody() *TransactionBody { return nil } -func (x *Transaction) GetBindingSig() []byte { +func (x *Transaction) GetBindingSig() *v1alpha1.BindingSignature { if x != nil { return x.BindingSig } return nil } -func (x *Transaction) GetAnchor() *v1alpha1.MerkleRoot { +func (x *Transaction) GetAnchor() *v1alpha11.MerkleRoot { if x != nil { return x.Anchor } @@ -287,7 +287,7 @@ type TransactionParameters struct { // replaying a transaction on one chain onto a different chain. ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` // The transaction fee. - Fee *v1alpha11.Fee `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"` + Fee *v1alpha12.Fee `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"` } func (x *TransactionParameters) Reset() { @@ -336,7 +336,7 @@ func (x *TransactionParameters) GetChainId() string { return "" } -func (x *TransactionParameters) GetFee() *v1alpha11.Fee { +func (x *TransactionParameters) GetFee() *v1alpha12.Fee { if x != nil { return x.Fee } @@ -350,7 +350,7 @@ type DetectionData struct { unknownFields protoimpl.UnknownFields // A list of clues for use with Fuzzy Message Detection. - FmdClues []*v1alpha12.Clue `protobuf:"bytes,4,rep,name=fmd_clues,json=fmdClues,proto3" json:"fmd_clues,omitempty"` + FmdClues []*v1alpha13.Clue `protobuf:"bytes,4,rep,name=fmd_clues,json=fmdClues,proto3" json:"fmd_clues,omitempty"` } func (x *DetectionData) Reset() { @@ -385,7 +385,7 @@ func (*DetectionData) Descriptor() ([]byte, []int) { return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{5} } -func (x *DetectionData) GetFmdClues() []*v1alpha12.Clue { +func (x *DetectionData) GetFmdClues() []*v1alpha13.Clue { if x != nil { return x.FmdClues } @@ -464,154 +464,154 @@ func (m *Action) GetAction() isAction_Action { return nil } -func (x *Action) GetSpend() *v1alpha13.Spend { +func (x *Action) GetSpend() *v1alpha14.Spend { if x, ok := x.GetAction().(*Action_Spend); ok { return x.Spend } return nil } -func (x *Action) GetOutput() *v1alpha13.Output { +func (x *Action) GetOutput() *v1alpha14.Output { if x, ok := x.GetAction().(*Action_Output); ok { return x.Output } return nil } -func (x *Action) GetSwap() *v1alpha14.Swap { +func (x *Action) GetSwap() *v1alpha15.Swap { if x, ok := x.GetAction().(*Action_Swap); ok { return x.Swap } return nil } -func (x *Action) GetSwapClaim() *v1alpha14.SwapClaim { +func (x *Action) GetSwapClaim() *v1alpha15.SwapClaim { if x, ok := x.GetAction().(*Action_SwapClaim); ok { return x.SwapClaim } return nil } -func (x *Action) GetValidatorDefinition() *v1alpha15.ValidatorDefinition { +func (x *Action) GetValidatorDefinition() *v1alpha16.ValidatorDefinition { if x, ok := x.GetAction().(*Action_ValidatorDefinition); ok { return x.ValidatorDefinition } return nil } -func (x *Action) GetIbcRelayAction() *v1alpha16.IbcRelay { +func (x *Action) GetIbcRelayAction() *v1alpha17.IbcRelay { if x, ok := x.GetAction().(*Action_IbcRelayAction); ok { return x.IbcRelayAction } return nil } -func (x *Action) GetProposalSubmit() *v1alpha17.ProposalSubmit { +func (x *Action) GetProposalSubmit() *v1alpha18.ProposalSubmit { if x, ok := x.GetAction().(*Action_ProposalSubmit); ok { return x.ProposalSubmit } return nil } -func (x *Action) GetProposalWithdraw() *v1alpha17.ProposalWithdraw { +func (x *Action) GetProposalWithdraw() *v1alpha18.ProposalWithdraw { if x, ok := x.GetAction().(*Action_ProposalWithdraw); ok { return x.ProposalWithdraw } return nil } -func (x *Action) GetValidatorVote() *v1alpha17.ValidatorVote { +func (x *Action) GetValidatorVote() *v1alpha18.ValidatorVote { if x, ok := x.GetAction().(*Action_ValidatorVote); ok { return x.ValidatorVote } return nil } -func (x *Action) GetDelegatorVote() *v1alpha17.DelegatorVote { +func (x *Action) GetDelegatorVote() *v1alpha18.DelegatorVote { if x, ok := x.GetAction().(*Action_DelegatorVote); ok { return x.DelegatorVote } return nil } -func (x *Action) GetProposalDepositClaim() *v1alpha17.ProposalDepositClaim { +func (x *Action) GetProposalDepositClaim() *v1alpha18.ProposalDepositClaim { if x, ok := x.GetAction().(*Action_ProposalDepositClaim); ok { return x.ProposalDepositClaim } return nil } -func (x *Action) GetPositionOpen() *v1alpha14.PositionOpen { +func (x *Action) GetPositionOpen() *v1alpha15.PositionOpen { if x, ok := x.GetAction().(*Action_PositionOpen); ok { return x.PositionOpen } return nil } -func (x *Action) GetPositionClose() *v1alpha14.PositionClose { +func (x *Action) GetPositionClose() *v1alpha15.PositionClose { if x, ok := x.GetAction().(*Action_PositionClose); ok { return x.PositionClose } return nil } -func (x *Action) GetPositionWithdraw() *v1alpha14.PositionWithdraw { +func (x *Action) GetPositionWithdraw() *v1alpha15.PositionWithdraw { if x, ok := x.GetAction().(*Action_PositionWithdraw); ok { return x.PositionWithdraw } return nil } -func (x *Action) GetPositionRewardClaim() *v1alpha14.PositionRewardClaim { +func (x *Action) GetPositionRewardClaim() *v1alpha15.PositionRewardClaim { if x, ok := x.GetAction().(*Action_PositionRewardClaim); ok { return x.PositionRewardClaim } return nil } -func (x *Action) GetDelegate() *v1alpha15.Delegate { +func (x *Action) GetDelegate() *v1alpha16.Delegate { if x, ok := x.GetAction().(*Action_Delegate); ok { return x.Delegate } return nil } -func (x *Action) GetUndelegate() *v1alpha15.Undelegate { +func (x *Action) GetUndelegate() *v1alpha16.Undelegate { if x, ok := x.GetAction().(*Action_Undelegate); ok { return x.Undelegate } return nil } -func (x *Action) GetUndelegateClaim() *v1alpha15.UndelegateClaim { +func (x *Action) GetUndelegateClaim() *v1alpha16.UndelegateClaim { if x, ok := x.GetAction().(*Action_UndelegateClaim); ok { return x.UndelegateClaim } return nil } -func (x *Action) GetDaoSpend() *v1alpha17.DaoSpend { +func (x *Action) GetDaoSpend() *v1alpha18.DaoSpend { if x, ok := x.GetAction().(*Action_DaoSpend); ok { return x.DaoSpend } return nil } -func (x *Action) GetDaoOutput() *v1alpha17.DaoOutput { +func (x *Action) GetDaoOutput() *v1alpha18.DaoOutput { if x, ok := x.GetAction().(*Action_DaoOutput); ok { return x.DaoOutput } return nil } -func (x *Action) GetDaoDeposit() *v1alpha17.DaoDeposit { +func (x *Action) GetDaoDeposit() *v1alpha18.DaoDeposit { if x, ok := x.GetAction().(*Action_DaoDeposit); ok { return x.DaoDeposit } return nil } -func (x *Action) GetIcs20Withdrawal() *v1alpha16.Ics20Withdrawal { +func (x *Action) GetIcs20Withdrawal() *v1alpha17.Ics20Withdrawal { if x, ok := x.GetAction().(*Action_Ics20Withdrawal); ok { return x.Ics20Withdrawal } @@ -624,95 +624,95 @@ type isAction_Action interface { type Action_Spend struct { // Common actions have numbers < 15, to save space. - Spend *v1alpha13.Spend `protobuf:"bytes,1,opt,name=spend,proto3,oneof"` + Spend *v1alpha14.Spend `protobuf:"bytes,1,opt,name=spend,proto3,oneof"` } type Action_Output struct { - Output *v1alpha13.Output `protobuf:"bytes,2,opt,name=output,proto3,oneof"` + Output *v1alpha14.Output `protobuf:"bytes,2,opt,name=output,proto3,oneof"` } type Action_Swap struct { - Swap *v1alpha14.Swap `protobuf:"bytes,3,opt,name=swap,proto3,oneof"` + Swap *v1alpha15.Swap `protobuf:"bytes,3,opt,name=swap,proto3,oneof"` } type Action_SwapClaim struct { - SwapClaim *v1alpha14.SwapClaim `protobuf:"bytes,4,opt,name=swap_claim,json=swapClaim,proto3,oneof"` + SwapClaim *v1alpha15.SwapClaim `protobuf:"bytes,4,opt,name=swap_claim,json=swapClaim,proto3,oneof"` } type Action_ValidatorDefinition struct { - ValidatorDefinition *v1alpha15.ValidatorDefinition `protobuf:"bytes,16,opt,name=validator_definition,json=validatorDefinition,proto3,oneof"` + ValidatorDefinition *v1alpha16.ValidatorDefinition `protobuf:"bytes,16,opt,name=validator_definition,json=validatorDefinition,proto3,oneof"` } type Action_IbcRelayAction struct { - IbcRelayAction *v1alpha16.IbcRelay `protobuf:"bytes,17,opt,name=ibc_relay_action,json=ibcRelayAction,proto3,oneof"` + IbcRelayAction *v1alpha17.IbcRelay `protobuf:"bytes,17,opt,name=ibc_relay_action,json=ibcRelayAction,proto3,oneof"` } type Action_ProposalSubmit struct { // Governance: - ProposalSubmit *v1alpha17.ProposalSubmit `protobuf:"bytes,18,opt,name=proposal_submit,json=proposalSubmit,proto3,oneof"` + ProposalSubmit *v1alpha18.ProposalSubmit `protobuf:"bytes,18,opt,name=proposal_submit,json=proposalSubmit,proto3,oneof"` } type Action_ProposalWithdraw struct { - ProposalWithdraw *v1alpha17.ProposalWithdraw `protobuf:"bytes,19,opt,name=proposal_withdraw,json=proposalWithdraw,proto3,oneof"` + ProposalWithdraw *v1alpha18.ProposalWithdraw `protobuf:"bytes,19,opt,name=proposal_withdraw,json=proposalWithdraw,proto3,oneof"` } type Action_ValidatorVote struct { - ValidatorVote *v1alpha17.ValidatorVote `protobuf:"bytes,20,opt,name=validator_vote,json=validatorVote,proto3,oneof"` + ValidatorVote *v1alpha18.ValidatorVote `protobuf:"bytes,20,opt,name=validator_vote,json=validatorVote,proto3,oneof"` } type Action_DelegatorVote struct { - DelegatorVote *v1alpha17.DelegatorVote `protobuf:"bytes,21,opt,name=delegator_vote,json=delegatorVote,proto3,oneof"` + DelegatorVote *v1alpha18.DelegatorVote `protobuf:"bytes,21,opt,name=delegator_vote,json=delegatorVote,proto3,oneof"` } type Action_ProposalDepositClaim struct { - ProposalDepositClaim *v1alpha17.ProposalDepositClaim `protobuf:"bytes,22,opt,name=proposal_deposit_claim,json=proposalDepositClaim,proto3,oneof"` + ProposalDepositClaim *v1alpha18.ProposalDepositClaim `protobuf:"bytes,22,opt,name=proposal_deposit_claim,json=proposalDepositClaim,proto3,oneof"` } type Action_PositionOpen struct { // Positions - PositionOpen *v1alpha14.PositionOpen `protobuf:"bytes,30,opt,name=position_open,json=positionOpen,proto3,oneof"` + PositionOpen *v1alpha15.PositionOpen `protobuf:"bytes,30,opt,name=position_open,json=positionOpen,proto3,oneof"` } type Action_PositionClose struct { - PositionClose *v1alpha14.PositionClose `protobuf:"bytes,31,opt,name=position_close,json=positionClose,proto3,oneof"` + PositionClose *v1alpha15.PositionClose `protobuf:"bytes,31,opt,name=position_close,json=positionClose,proto3,oneof"` } type Action_PositionWithdraw struct { - PositionWithdraw *v1alpha14.PositionWithdraw `protobuf:"bytes,32,opt,name=position_withdraw,json=positionWithdraw,proto3,oneof"` + PositionWithdraw *v1alpha15.PositionWithdraw `protobuf:"bytes,32,opt,name=position_withdraw,json=positionWithdraw,proto3,oneof"` } type Action_PositionRewardClaim struct { - PositionRewardClaim *v1alpha14.PositionRewardClaim `protobuf:"bytes,34,opt,name=position_reward_claim,json=positionRewardClaim,proto3,oneof"` + PositionRewardClaim *v1alpha15.PositionRewardClaim `protobuf:"bytes,34,opt,name=position_reward_claim,json=positionRewardClaim,proto3,oneof"` } type Action_Delegate struct { // (un)delegation - Delegate *v1alpha15.Delegate `protobuf:"bytes,40,opt,name=delegate,proto3,oneof"` + Delegate *v1alpha16.Delegate `protobuf:"bytes,40,opt,name=delegate,proto3,oneof"` } type Action_Undelegate struct { - Undelegate *v1alpha15.Undelegate `protobuf:"bytes,41,opt,name=undelegate,proto3,oneof"` + Undelegate *v1alpha16.Undelegate `protobuf:"bytes,41,opt,name=undelegate,proto3,oneof"` } type Action_UndelegateClaim struct { - UndelegateClaim *v1alpha15.UndelegateClaim `protobuf:"bytes,42,opt,name=undelegate_claim,json=undelegateClaim,proto3,oneof"` + UndelegateClaim *v1alpha16.UndelegateClaim `protobuf:"bytes,42,opt,name=undelegate_claim,json=undelegateClaim,proto3,oneof"` } type Action_DaoSpend struct { // DAO - DaoSpend *v1alpha17.DaoSpend `protobuf:"bytes,50,opt,name=dao_spend,json=daoSpend,proto3,oneof"` + DaoSpend *v1alpha18.DaoSpend `protobuf:"bytes,50,opt,name=dao_spend,json=daoSpend,proto3,oneof"` } type Action_DaoOutput struct { - DaoOutput *v1alpha17.DaoOutput `protobuf:"bytes,51,opt,name=dao_output,json=daoOutput,proto3,oneof"` + DaoOutput *v1alpha18.DaoOutput `protobuf:"bytes,51,opt,name=dao_output,json=daoOutput,proto3,oneof"` } type Action_DaoDeposit struct { - DaoDeposit *v1alpha17.DaoDeposit `protobuf:"bytes,52,opt,name=dao_deposit,json=daoDeposit,proto3,oneof"` + DaoDeposit *v1alpha18.DaoDeposit `protobuf:"bytes,52,opt,name=dao_deposit,json=daoDeposit,proto3,oneof"` } type Action_Ics20Withdrawal struct { - Ics20Withdrawal *v1alpha16.Ics20Withdrawal `protobuf:"bytes,200,opt,name=ics20_withdrawal,json=ics20Withdrawal,proto3,oneof"` + Ics20Withdrawal *v1alpha17.Ics20Withdrawal `protobuf:"bytes,200,opt,name=ics20_withdrawal,json=ics20Withdrawal,proto3,oneof"` } func (*Action_Spend) isAction_Action() {} @@ -770,11 +770,11 @@ type TransactionPerspective struct { SpendNullifiers []*NullifierWithNote `protobuf:"bytes,2,rep,name=spend_nullifiers,json=spendNullifiers,proto3" json:"spend_nullifiers,omitempty"` // The openings of note commitments referred to in the transaction // but not included in the transaction. - AdviceNotes []*v1alpha13.Note `protobuf:"bytes,3,rep,name=advice_notes,json=adviceNotes,proto3" json:"advice_notes,omitempty"` + AdviceNotes []*v1alpha14.Note `protobuf:"bytes,3,rep,name=advice_notes,json=adviceNotes,proto3" json:"advice_notes,omitempty"` // Any relevant address views. - AddressViews []*v1alpha18.AddressView `protobuf:"bytes,4,rep,name=address_views,json=addressViews,proto3" json:"address_views,omitempty"` + AddressViews []*v1alpha19.AddressView `protobuf:"bytes,4,rep,name=address_views,json=addressViews,proto3" json:"address_views,omitempty"` // Any relevant denoms for viewed assets. - Denoms []*v1alpha19.DenomMetadata `protobuf:"bytes,5,rep,name=denoms,proto3" json:"denoms,omitempty"` + Denoms []*v1alpha110.DenomMetadata `protobuf:"bytes,5,rep,name=denoms,proto3" json:"denoms,omitempty"` // The transaction ID associated with this TransactionPerspective TransactionId *Id `protobuf:"bytes,6,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` } @@ -825,21 +825,21 @@ func (x *TransactionPerspective) GetSpendNullifiers() []*NullifierWithNote { return nil } -func (x *TransactionPerspective) GetAdviceNotes() []*v1alpha13.Note { +func (x *TransactionPerspective) GetAdviceNotes() []*v1alpha14.Note { if x != nil { return x.AdviceNotes } return nil } -func (x *TransactionPerspective) GetAddressViews() []*v1alpha18.AddressView { +func (x *TransactionPerspective) GetAddressViews() []*v1alpha19.AddressView { if x != nil { return x.AddressViews } return nil } -func (x *TransactionPerspective) GetDenoms() []*v1alpha19.DenomMetadata { +func (x *TransactionPerspective) GetDenoms() []*v1alpha110.DenomMetadata { if x != nil { return x.Denoms } @@ -858,8 +858,8 @@ type PayloadKeyWithCommitment struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - PayloadKey *v1alpha18.PayloadKey `protobuf:"bytes,1,opt,name=payload_key,json=payloadKey,proto3" json:"payload_key,omitempty"` - Commitment *v1alpha1.StateCommitment `protobuf:"bytes,2,opt,name=commitment,proto3" json:"commitment,omitempty"` + PayloadKey *v1alpha19.PayloadKey `protobuf:"bytes,1,opt,name=payload_key,json=payloadKey,proto3" json:"payload_key,omitempty"` + Commitment *v1alpha11.StateCommitment `protobuf:"bytes,2,opt,name=commitment,proto3" json:"commitment,omitempty"` } func (x *PayloadKeyWithCommitment) Reset() { @@ -894,14 +894,14 @@ func (*PayloadKeyWithCommitment) Descriptor() ([]byte, []int) { return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{8} } -func (x *PayloadKeyWithCommitment) GetPayloadKey() *v1alpha18.PayloadKey { +func (x *PayloadKeyWithCommitment) GetPayloadKey() *v1alpha19.PayloadKey { if x != nil { return x.PayloadKey } return nil } -func (x *PayloadKeyWithCommitment) GetCommitment() *v1alpha1.StateCommitment { +func (x *PayloadKeyWithCommitment) GetCommitment() *v1alpha11.StateCommitment { if x != nil { return x.Commitment } @@ -913,8 +913,8 @@ type NullifierWithNote struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Nullifier *v1alpha110.Nullifier `protobuf:"bytes,1,opt,name=nullifier,proto3" json:"nullifier,omitempty"` - Note *v1alpha13.Note `protobuf:"bytes,2,opt,name=note,proto3" json:"note,omitempty"` + Nullifier *v1alpha111.Nullifier `protobuf:"bytes,1,opt,name=nullifier,proto3" json:"nullifier,omitempty"` + Note *v1alpha14.Note `protobuf:"bytes,2,opt,name=note,proto3" json:"note,omitempty"` } func (x *NullifierWithNote) Reset() { @@ -949,14 +949,14 @@ func (*NullifierWithNote) Descriptor() ([]byte, []int) { return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{9} } -func (x *NullifierWithNote) GetNullifier() *v1alpha110.Nullifier { +func (x *NullifierWithNote) GetNullifier() *v1alpha111.Nullifier { if x != nil { return x.Nullifier } return nil } -func (x *NullifierWithNote) GetNote() *v1alpha13.Note { +func (x *NullifierWithNote) GetNote() *v1alpha14.Note { if x != nil { return x.Note } @@ -972,10 +972,10 @@ type TransactionView struct { // View of the transaction body BodyView *TransactionBodyView `protobuf:"bytes,1,opt,name=body_view,json=bodyView,proto3" json:"body_view,omitempty"` // The binding signature is stored separately from the transaction body that it signs. - BindingSig []byte `protobuf:"bytes,2,opt,name=binding_sig,json=bindingSig,proto3" json:"binding_sig,omitempty"` + BindingSig *v1alpha1.BindingSignature `protobuf:"bytes,2,opt,name=binding_sig,json=bindingSig,proto3" json:"binding_sig,omitempty"` // The root of some previous state of the state commitment tree, used as an anchor for all // ZK state transition proofs. - Anchor *v1alpha1.MerkleRoot `protobuf:"bytes,3,opt,name=anchor,proto3" json:"anchor,omitempty"` + Anchor *v1alpha11.MerkleRoot `protobuf:"bytes,3,opt,name=anchor,proto3" json:"anchor,omitempty"` } func (x *TransactionView) Reset() { @@ -1017,14 +1017,14 @@ func (x *TransactionView) GetBodyView() *TransactionBodyView { return nil } -func (x *TransactionView) GetBindingSig() []byte { +func (x *TransactionView) GetBindingSig() *v1alpha1.BindingSignature { if x != nil { return x.BindingSig } return nil } -func (x *TransactionView) GetAnchor() *v1alpha1.MerkleRoot { +func (x *TransactionView) GetAnchor() *v1alpha11.MerkleRoot { if x != nil { return x.Anchor } @@ -1180,154 +1180,154 @@ func (m *ActionView) GetActionView() isActionView_ActionView { return nil } -func (x *ActionView) GetSpend() *v1alpha13.SpendView { +func (x *ActionView) GetSpend() *v1alpha14.SpendView { if x, ok := x.GetActionView().(*ActionView_Spend); ok { return x.Spend } return nil } -func (x *ActionView) GetOutput() *v1alpha13.OutputView { +func (x *ActionView) GetOutput() *v1alpha14.OutputView { if x, ok := x.GetActionView().(*ActionView_Output); ok { return x.Output } return nil } -func (x *ActionView) GetSwap() *v1alpha14.SwapView { +func (x *ActionView) GetSwap() *v1alpha15.SwapView { if x, ok := x.GetActionView().(*ActionView_Swap); ok { return x.Swap } return nil } -func (x *ActionView) GetSwapClaim() *v1alpha14.SwapClaimView { +func (x *ActionView) GetSwapClaim() *v1alpha15.SwapClaimView { if x, ok := x.GetActionView().(*ActionView_SwapClaim); ok { return x.SwapClaim } return nil } -func (x *ActionView) GetValidatorDefinition() *v1alpha15.ValidatorDefinition { +func (x *ActionView) GetValidatorDefinition() *v1alpha16.ValidatorDefinition { if x, ok := x.GetActionView().(*ActionView_ValidatorDefinition); ok { return x.ValidatorDefinition } return nil } -func (x *ActionView) GetIbcRelayAction() *v1alpha16.IbcRelay { +func (x *ActionView) GetIbcRelayAction() *v1alpha17.IbcRelay { if x, ok := x.GetActionView().(*ActionView_IbcRelayAction); ok { return x.IbcRelayAction } return nil } -func (x *ActionView) GetProposalSubmit() *v1alpha17.ProposalSubmit { +func (x *ActionView) GetProposalSubmit() *v1alpha18.ProposalSubmit { if x, ok := x.GetActionView().(*ActionView_ProposalSubmit); ok { return x.ProposalSubmit } return nil } -func (x *ActionView) GetProposalWithdraw() *v1alpha17.ProposalWithdraw { +func (x *ActionView) GetProposalWithdraw() *v1alpha18.ProposalWithdraw { if x, ok := x.GetActionView().(*ActionView_ProposalWithdraw); ok { return x.ProposalWithdraw } return nil } -func (x *ActionView) GetValidatorVote() *v1alpha17.ValidatorVote { +func (x *ActionView) GetValidatorVote() *v1alpha18.ValidatorVote { if x, ok := x.GetActionView().(*ActionView_ValidatorVote); ok { return x.ValidatorVote } return nil } -func (x *ActionView) GetDelegatorVote() *v1alpha17.DelegatorVoteView { +func (x *ActionView) GetDelegatorVote() *v1alpha18.DelegatorVoteView { if x, ok := x.GetActionView().(*ActionView_DelegatorVote); ok { return x.DelegatorVote } return nil } -func (x *ActionView) GetProposalDepositClaim() *v1alpha17.ProposalDepositClaim { +func (x *ActionView) GetProposalDepositClaim() *v1alpha18.ProposalDepositClaim { if x, ok := x.GetActionView().(*ActionView_ProposalDepositClaim); ok { return x.ProposalDepositClaim } return nil } -func (x *ActionView) GetPositionOpen() *v1alpha14.PositionOpen { +func (x *ActionView) GetPositionOpen() *v1alpha15.PositionOpen { if x, ok := x.GetActionView().(*ActionView_PositionOpen); ok { return x.PositionOpen } return nil } -func (x *ActionView) GetPositionClose() *v1alpha14.PositionClose { +func (x *ActionView) GetPositionClose() *v1alpha15.PositionClose { if x, ok := x.GetActionView().(*ActionView_PositionClose); ok { return x.PositionClose } return nil } -func (x *ActionView) GetPositionWithdraw() *v1alpha14.PositionWithdraw { +func (x *ActionView) GetPositionWithdraw() *v1alpha15.PositionWithdraw { if x, ok := x.GetActionView().(*ActionView_PositionWithdraw); ok { return x.PositionWithdraw } return nil } -func (x *ActionView) GetPositionRewardClaim() *v1alpha14.PositionRewardClaim { +func (x *ActionView) GetPositionRewardClaim() *v1alpha15.PositionRewardClaim { if x, ok := x.GetActionView().(*ActionView_PositionRewardClaim); ok { return x.PositionRewardClaim } return nil } -func (x *ActionView) GetDelegate() *v1alpha15.Delegate { +func (x *ActionView) GetDelegate() *v1alpha16.Delegate { if x, ok := x.GetActionView().(*ActionView_Delegate); ok { return x.Delegate } return nil } -func (x *ActionView) GetUndelegate() *v1alpha15.Undelegate { +func (x *ActionView) GetUndelegate() *v1alpha16.Undelegate { if x, ok := x.GetActionView().(*ActionView_Undelegate); ok { return x.Undelegate } return nil } -func (x *ActionView) GetDaoSpend() *v1alpha17.DaoSpend { +func (x *ActionView) GetDaoSpend() *v1alpha18.DaoSpend { if x, ok := x.GetActionView().(*ActionView_DaoSpend); ok { return x.DaoSpend } return nil } -func (x *ActionView) GetDaoOutput() *v1alpha17.DaoOutput { +func (x *ActionView) GetDaoOutput() *v1alpha18.DaoOutput { if x, ok := x.GetActionView().(*ActionView_DaoOutput); ok { return x.DaoOutput } return nil } -func (x *ActionView) GetDaoDeposit() *v1alpha17.DaoDeposit { +func (x *ActionView) GetDaoDeposit() *v1alpha18.DaoDeposit { if x, ok := x.GetActionView().(*ActionView_DaoDeposit); ok { return x.DaoDeposit } return nil } -func (x *ActionView) GetUndelegateClaim() *v1alpha15.UndelegateClaim { +func (x *ActionView) GetUndelegateClaim() *v1alpha16.UndelegateClaim { if x, ok := x.GetActionView().(*ActionView_UndelegateClaim); ok { return x.UndelegateClaim } return nil } -func (x *ActionView) GetIcs20Withdrawal() *v1alpha16.Ics20Withdrawal { +func (x *ActionView) GetIcs20Withdrawal() *v1alpha17.Ics20Withdrawal { if x, ok := x.GetActionView().(*ActionView_Ics20Withdrawal); ok { return x.Ics20Withdrawal } @@ -1340,97 +1340,97 @@ type isActionView_ActionView interface { type ActionView_Spend struct { // Action types with visible/opaque variants - Spend *v1alpha13.SpendView `protobuf:"bytes,1,opt,name=spend,proto3,oneof"` + Spend *v1alpha14.SpendView `protobuf:"bytes,1,opt,name=spend,proto3,oneof"` } type ActionView_Output struct { - Output *v1alpha13.OutputView `protobuf:"bytes,2,opt,name=output,proto3,oneof"` + Output *v1alpha14.OutputView `protobuf:"bytes,2,opt,name=output,proto3,oneof"` } type ActionView_Swap struct { - Swap *v1alpha14.SwapView `protobuf:"bytes,3,opt,name=swap,proto3,oneof"` + Swap *v1alpha15.SwapView `protobuf:"bytes,3,opt,name=swap,proto3,oneof"` } type ActionView_SwapClaim struct { - SwapClaim *v1alpha14.SwapClaimView `protobuf:"bytes,4,opt,name=swap_claim,json=swapClaim,proto3,oneof"` + SwapClaim *v1alpha15.SwapClaimView `protobuf:"bytes,4,opt,name=swap_claim,json=swapClaim,proto3,oneof"` } type ActionView_ValidatorDefinition struct { // Action types without visible/opaque variants - ValidatorDefinition *v1alpha15.ValidatorDefinition `protobuf:"bytes,16,opt,name=validator_definition,json=validatorDefinition,proto3,oneof"` + ValidatorDefinition *v1alpha16.ValidatorDefinition `protobuf:"bytes,16,opt,name=validator_definition,json=validatorDefinition,proto3,oneof"` } type ActionView_IbcRelayAction struct { - IbcRelayAction *v1alpha16.IbcRelay `protobuf:"bytes,17,opt,name=ibc_relay_action,json=ibcRelayAction,proto3,oneof"` + IbcRelayAction *v1alpha17.IbcRelay `protobuf:"bytes,17,opt,name=ibc_relay_action,json=ibcRelayAction,proto3,oneof"` } type ActionView_ProposalSubmit struct { // Governance: - ProposalSubmit *v1alpha17.ProposalSubmit `protobuf:"bytes,18,opt,name=proposal_submit,json=proposalSubmit,proto3,oneof"` + ProposalSubmit *v1alpha18.ProposalSubmit `protobuf:"bytes,18,opt,name=proposal_submit,json=proposalSubmit,proto3,oneof"` } type ActionView_ProposalWithdraw struct { - ProposalWithdraw *v1alpha17.ProposalWithdraw `protobuf:"bytes,19,opt,name=proposal_withdraw,json=proposalWithdraw,proto3,oneof"` + ProposalWithdraw *v1alpha18.ProposalWithdraw `protobuf:"bytes,19,opt,name=proposal_withdraw,json=proposalWithdraw,proto3,oneof"` } type ActionView_ValidatorVote struct { - ValidatorVote *v1alpha17.ValidatorVote `protobuf:"bytes,20,opt,name=validator_vote,json=validatorVote,proto3,oneof"` + ValidatorVote *v1alpha18.ValidatorVote `protobuf:"bytes,20,opt,name=validator_vote,json=validatorVote,proto3,oneof"` } type ActionView_DelegatorVote struct { - DelegatorVote *v1alpha17.DelegatorVoteView `protobuf:"bytes,21,opt,name=delegator_vote,json=delegatorVote,proto3,oneof"` + DelegatorVote *v1alpha18.DelegatorVoteView `protobuf:"bytes,21,opt,name=delegator_vote,json=delegatorVote,proto3,oneof"` } type ActionView_ProposalDepositClaim struct { - ProposalDepositClaim *v1alpha17.ProposalDepositClaim `protobuf:"bytes,22,opt,name=proposal_deposit_claim,json=proposalDepositClaim,proto3,oneof"` + ProposalDepositClaim *v1alpha18.ProposalDepositClaim `protobuf:"bytes,22,opt,name=proposal_deposit_claim,json=proposalDepositClaim,proto3,oneof"` } type ActionView_PositionOpen struct { - PositionOpen *v1alpha14.PositionOpen `protobuf:"bytes,30,opt,name=position_open,json=positionOpen,proto3,oneof"` + PositionOpen *v1alpha15.PositionOpen `protobuf:"bytes,30,opt,name=position_open,json=positionOpen,proto3,oneof"` } type ActionView_PositionClose struct { - PositionClose *v1alpha14.PositionClose `protobuf:"bytes,31,opt,name=position_close,json=positionClose,proto3,oneof"` + PositionClose *v1alpha15.PositionClose `protobuf:"bytes,31,opt,name=position_close,json=positionClose,proto3,oneof"` } type ActionView_PositionWithdraw struct { - PositionWithdraw *v1alpha14.PositionWithdraw `protobuf:"bytes,32,opt,name=position_withdraw,json=positionWithdraw,proto3,oneof"` + PositionWithdraw *v1alpha15.PositionWithdraw `protobuf:"bytes,32,opt,name=position_withdraw,json=positionWithdraw,proto3,oneof"` } type ActionView_PositionRewardClaim struct { - PositionRewardClaim *v1alpha14.PositionRewardClaim `protobuf:"bytes,34,opt,name=position_reward_claim,json=positionRewardClaim,proto3,oneof"` + PositionRewardClaim *v1alpha15.PositionRewardClaim `protobuf:"bytes,34,opt,name=position_reward_claim,json=positionRewardClaim,proto3,oneof"` } type ActionView_Delegate struct { - Delegate *v1alpha15.Delegate `protobuf:"bytes,41,opt,name=delegate,proto3,oneof"` + Delegate *v1alpha16.Delegate `protobuf:"bytes,41,opt,name=delegate,proto3,oneof"` } type ActionView_Undelegate struct { - Undelegate *v1alpha15.Undelegate `protobuf:"bytes,42,opt,name=undelegate,proto3,oneof"` + Undelegate *v1alpha16.Undelegate `protobuf:"bytes,42,opt,name=undelegate,proto3,oneof"` } type ActionView_DaoSpend struct { // DAO - DaoSpend *v1alpha17.DaoSpend `protobuf:"bytes,50,opt,name=dao_spend,json=daoSpend,proto3,oneof"` + DaoSpend *v1alpha18.DaoSpend `protobuf:"bytes,50,opt,name=dao_spend,json=daoSpend,proto3,oneof"` } type ActionView_DaoOutput struct { - DaoOutput *v1alpha17.DaoOutput `protobuf:"bytes,51,opt,name=dao_output,json=daoOutput,proto3,oneof"` + DaoOutput *v1alpha18.DaoOutput `protobuf:"bytes,51,opt,name=dao_output,json=daoOutput,proto3,oneof"` } type ActionView_DaoDeposit struct { - DaoDeposit *v1alpha17.DaoDeposit `protobuf:"bytes,52,opt,name=dao_deposit,json=daoDeposit,proto3,oneof"` + DaoDeposit *v1alpha18.DaoDeposit `protobuf:"bytes,52,opt,name=dao_deposit,json=daoDeposit,proto3,oneof"` } type ActionView_UndelegateClaim struct { // TODO: we have no way to recover the opening of the undelegate_claim's // balance commitment, and can only infer the value from looking at the rest // of the transaction. is that fine? - UndelegateClaim *v1alpha15.UndelegateClaim `protobuf:"bytes,43,opt,name=undelegate_claim,json=undelegateClaim,proto3,oneof"` + UndelegateClaim *v1alpha16.UndelegateClaim `protobuf:"bytes,43,opt,name=undelegate_claim,json=undelegateClaim,proto3,oneof"` } type ActionView_Ics20Withdrawal struct { - Ics20Withdrawal *v1alpha16.Ics20Withdrawal `protobuf:"bytes,200,opt,name=ics20_withdrawal,json=ics20Withdrawal,proto3,oneof"` + Ics20Withdrawal *v1alpha17.Ics20Withdrawal `protobuf:"bytes,200,opt,name=ics20_withdrawal,json=ics20Withdrawal,proto3,oneof"` } func (*ActionView_Spend) isActionView_ActionView() {} @@ -1535,10 +1535,10 @@ type AuthorizationData struct { EffectHash *EffectHash `protobuf:"bytes,1,opt,name=effect_hash,json=effectHash,proto3" json:"effect_hash,omitempty"` // The required spend authorizations, returned in the same order as the // Spend actions in the original request. - SpendAuths []*v1alpha111.SpendAuthSignature `protobuf:"bytes,2,rep,name=spend_auths,json=spendAuths,proto3" json:"spend_auths,omitempty"` + SpendAuths []*v1alpha1.SpendAuthSignature `protobuf:"bytes,2,rep,name=spend_auths,json=spendAuths,proto3" json:"spend_auths,omitempty"` // The required delegator vote authorizations, returned in the same order as the // DelegatorVote actions in the original request. - DelegatorVoteAuths []*v1alpha111.SpendAuthSignature `protobuf:"bytes,3,rep,name=delegator_vote_auths,json=delegatorVoteAuths,proto3" json:"delegator_vote_auths,omitempty"` + DelegatorVoteAuths []*v1alpha1.SpendAuthSignature `protobuf:"bytes,3,rep,name=delegator_vote_auths,json=delegatorVoteAuths,proto3" json:"delegator_vote_auths,omitempty"` } func (x *AuthorizationData) Reset() { @@ -1580,14 +1580,14 @@ func (x *AuthorizationData) GetEffectHash() *EffectHash { return nil } -func (x *AuthorizationData) GetSpendAuths() []*v1alpha111.SpendAuthSignature { +func (x *AuthorizationData) GetSpendAuths() []*v1alpha1.SpendAuthSignature { if x != nil { return x.SpendAuths } return nil } -func (x *AuthorizationData) GetDelegatorVoteAuths() []*v1alpha111.SpendAuthSignature { +func (x *AuthorizationData) GetDelegatorVoteAuths() []*v1alpha1.SpendAuthSignature { if x != nil { return x.DelegatorVoteAuths } @@ -1601,10 +1601,10 @@ type WitnessData struct { unknownFields protoimpl.UnknownFields // The anchor for the state transition proofs. - Anchor *v1alpha1.MerkleRoot `protobuf:"bytes,1,opt,name=anchor,proto3" json:"anchor,omitempty"` + Anchor *v1alpha11.MerkleRoot `protobuf:"bytes,1,opt,name=anchor,proto3" json:"anchor,omitempty"` // The auth paths for the notes the transaction spends, in the // same order as the spends in the transaction plan. - StateCommitmentProofs []*v1alpha1.StateCommitmentProof `protobuf:"bytes,2,rep,name=state_commitment_proofs,json=stateCommitmentProofs,proto3" json:"state_commitment_proofs,omitempty"` + StateCommitmentProofs []*v1alpha11.StateCommitmentProof `protobuf:"bytes,2,rep,name=state_commitment_proofs,json=stateCommitmentProofs,proto3" json:"state_commitment_proofs,omitempty"` } func (x *WitnessData) Reset() { @@ -1639,14 +1639,14 @@ func (*WitnessData) Descriptor() ([]byte, []int) { return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{15} } -func (x *WitnessData) GetAnchor() *v1alpha1.MerkleRoot { +func (x *WitnessData) GetAnchor() *v1alpha11.MerkleRoot { if x != nil { return x.Anchor } return nil } -func (x *WitnessData) GetStateCommitmentProofs() []*v1alpha1.StateCommitmentProof { +func (x *WitnessData) GetStateCommitmentProofs() []*v1alpha11.StateCommitmentProof { if x != nil { return x.StateCommitmentProofs } @@ -1855,154 +1855,154 @@ func (m *ActionPlan) GetAction() isActionPlan_Action { return nil } -func (x *ActionPlan) GetSpend() *v1alpha13.SpendPlan { +func (x *ActionPlan) GetSpend() *v1alpha14.SpendPlan { if x, ok := x.GetAction().(*ActionPlan_Spend); ok { return x.Spend } return nil } -func (x *ActionPlan) GetOutput() *v1alpha13.OutputPlan { +func (x *ActionPlan) GetOutput() *v1alpha14.OutputPlan { if x, ok := x.GetAction().(*ActionPlan_Output); ok { return x.Output } return nil } -func (x *ActionPlan) GetSwap() *v1alpha14.SwapPlan { +func (x *ActionPlan) GetSwap() *v1alpha15.SwapPlan { if x, ok := x.GetAction().(*ActionPlan_Swap); ok { return x.Swap } return nil } -func (x *ActionPlan) GetSwapClaim() *v1alpha14.SwapClaimPlan { +func (x *ActionPlan) GetSwapClaim() *v1alpha15.SwapClaimPlan { if x, ok := x.GetAction().(*ActionPlan_SwapClaim); ok { return x.SwapClaim } return nil } -func (x *ActionPlan) GetValidatorDefinition() *v1alpha15.ValidatorDefinition { +func (x *ActionPlan) GetValidatorDefinition() *v1alpha16.ValidatorDefinition { if x, ok := x.GetAction().(*ActionPlan_ValidatorDefinition); ok { return x.ValidatorDefinition } return nil } -func (x *ActionPlan) GetIbcRelayAction() *v1alpha16.IbcRelay { +func (x *ActionPlan) GetIbcRelayAction() *v1alpha17.IbcRelay { if x, ok := x.GetAction().(*ActionPlan_IbcRelayAction); ok { return x.IbcRelayAction } return nil } -func (x *ActionPlan) GetProposalSubmit() *v1alpha17.ProposalSubmit { +func (x *ActionPlan) GetProposalSubmit() *v1alpha18.ProposalSubmit { if x, ok := x.GetAction().(*ActionPlan_ProposalSubmit); ok { return x.ProposalSubmit } return nil } -func (x *ActionPlan) GetProposalWithdraw() *v1alpha17.ProposalWithdraw { +func (x *ActionPlan) GetProposalWithdraw() *v1alpha18.ProposalWithdraw { if x, ok := x.GetAction().(*ActionPlan_ProposalWithdraw); ok { return x.ProposalWithdraw } return nil } -func (x *ActionPlan) GetValidatorVote() *v1alpha17.ValidatorVote { +func (x *ActionPlan) GetValidatorVote() *v1alpha18.ValidatorVote { if x, ok := x.GetAction().(*ActionPlan_ValidatorVote); ok { return x.ValidatorVote } return nil } -func (x *ActionPlan) GetDelegatorVote() *v1alpha17.DelegatorVotePlan { +func (x *ActionPlan) GetDelegatorVote() *v1alpha18.DelegatorVotePlan { if x, ok := x.GetAction().(*ActionPlan_DelegatorVote); ok { return x.DelegatorVote } return nil } -func (x *ActionPlan) GetProposalDepositClaim() *v1alpha17.ProposalDepositClaim { +func (x *ActionPlan) GetProposalDepositClaim() *v1alpha18.ProposalDepositClaim { if x, ok := x.GetAction().(*ActionPlan_ProposalDepositClaim); ok { return x.ProposalDepositClaim } return nil } -func (x *ActionPlan) GetWithdrawal() *v1alpha16.Ics20Withdrawal { +func (x *ActionPlan) GetWithdrawal() *v1alpha17.Ics20Withdrawal { if x, ok := x.GetAction().(*ActionPlan_Withdrawal); ok { return x.Withdrawal } return nil } -func (x *ActionPlan) GetPositionOpen() *v1alpha14.PositionOpen { +func (x *ActionPlan) GetPositionOpen() *v1alpha15.PositionOpen { if x, ok := x.GetAction().(*ActionPlan_PositionOpen); ok { return x.PositionOpen } return nil } -func (x *ActionPlan) GetPositionClose() *v1alpha14.PositionClose { +func (x *ActionPlan) GetPositionClose() *v1alpha15.PositionClose { if x, ok := x.GetAction().(*ActionPlan_PositionClose); ok { return x.PositionClose } return nil } -func (x *ActionPlan) GetPositionWithdraw() *v1alpha14.PositionWithdrawPlan { +func (x *ActionPlan) GetPositionWithdraw() *v1alpha15.PositionWithdrawPlan { if x, ok := x.GetAction().(*ActionPlan_PositionWithdraw); ok { return x.PositionWithdraw } return nil } -func (x *ActionPlan) GetPositionRewardClaim() *v1alpha14.PositionRewardClaimPlan { +func (x *ActionPlan) GetPositionRewardClaim() *v1alpha15.PositionRewardClaimPlan { if x, ok := x.GetAction().(*ActionPlan_PositionRewardClaim); ok { return x.PositionRewardClaim } return nil } -func (x *ActionPlan) GetDelegate() *v1alpha15.Delegate { +func (x *ActionPlan) GetDelegate() *v1alpha16.Delegate { if x, ok := x.GetAction().(*ActionPlan_Delegate); ok { return x.Delegate } return nil } -func (x *ActionPlan) GetUndelegate() *v1alpha15.Undelegate { +func (x *ActionPlan) GetUndelegate() *v1alpha16.Undelegate { if x, ok := x.GetAction().(*ActionPlan_Undelegate); ok { return x.Undelegate } return nil } -func (x *ActionPlan) GetUndelegateClaim() *v1alpha15.UndelegateClaimPlan { +func (x *ActionPlan) GetUndelegateClaim() *v1alpha16.UndelegateClaimPlan { if x, ok := x.GetAction().(*ActionPlan_UndelegateClaim); ok { return x.UndelegateClaim } return nil } -func (x *ActionPlan) GetDaoSpend() *v1alpha17.DaoSpend { +func (x *ActionPlan) GetDaoSpend() *v1alpha18.DaoSpend { if x, ok := x.GetAction().(*ActionPlan_DaoSpend); ok { return x.DaoSpend } return nil } -func (x *ActionPlan) GetDaoOutput() *v1alpha17.DaoOutput { +func (x *ActionPlan) GetDaoOutput() *v1alpha18.DaoOutput { if x, ok := x.GetAction().(*ActionPlan_DaoOutput); ok { return x.DaoOutput } return nil } -func (x *ActionPlan) GetDaoDeposit() *v1alpha17.DaoDeposit { +func (x *ActionPlan) GetDaoDeposit() *v1alpha18.DaoDeposit { if x, ok := x.GetAction().(*ActionPlan_DaoDeposit); ok { return x.DaoDeposit } @@ -2014,100 +2014,100 @@ type isActionPlan_Action interface { } type ActionPlan_Spend struct { - Spend *v1alpha13.SpendPlan `protobuf:"bytes,1,opt,name=spend,proto3,oneof"` + Spend *v1alpha14.SpendPlan `protobuf:"bytes,1,opt,name=spend,proto3,oneof"` } type ActionPlan_Output struct { - Output *v1alpha13.OutputPlan `protobuf:"bytes,2,opt,name=output,proto3,oneof"` + Output *v1alpha14.OutputPlan `protobuf:"bytes,2,opt,name=output,proto3,oneof"` } type ActionPlan_Swap struct { - Swap *v1alpha14.SwapPlan `protobuf:"bytes,3,opt,name=swap,proto3,oneof"` + Swap *v1alpha15.SwapPlan `protobuf:"bytes,3,opt,name=swap,proto3,oneof"` } type ActionPlan_SwapClaim struct { - SwapClaim *v1alpha14.SwapClaimPlan `protobuf:"bytes,4,opt,name=swap_claim,json=swapClaim,proto3,oneof"` + SwapClaim *v1alpha15.SwapClaimPlan `protobuf:"bytes,4,opt,name=swap_claim,json=swapClaim,proto3,oneof"` } type ActionPlan_ValidatorDefinition struct { // This is just a message relayed to the chain. - ValidatorDefinition *v1alpha15.ValidatorDefinition `protobuf:"bytes,16,opt,name=validator_definition,json=validatorDefinition,proto3,oneof"` + ValidatorDefinition *v1alpha16.ValidatorDefinition `protobuf:"bytes,16,opt,name=validator_definition,json=validatorDefinition,proto3,oneof"` } type ActionPlan_IbcRelayAction struct { // This is just a message relayed to the chain. - IbcRelayAction *v1alpha16.IbcRelay `protobuf:"bytes,17,opt,name=ibc_relay_action,json=ibcRelayAction,proto3,oneof"` + IbcRelayAction *v1alpha17.IbcRelay `protobuf:"bytes,17,opt,name=ibc_relay_action,json=ibcRelayAction,proto3,oneof"` } type ActionPlan_ProposalSubmit struct { // Governance: - ProposalSubmit *v1alpha17.ProposalSubmit `protobuf:"bytes,18,opt,name=proposal_submit,json=proposalSubmit,proto3,oneof"` + ProposalSubmit *v1alpha18.ProposalSubmit `protobuf:"bytes,18,opt,name=proposal_submit,json=proposalSubmit,proto3,oneof"` } type ActionPlan_ProposalWithdraw struct { - ProposalWithdraw *v1alpha17.ProposalWithdraw `protobuf:"bytes,19,opt,name=proposal_withdraw,json=proposalWithdraw,proto3,oneof"` + ProposalWithdraw *v1alpha18.ProposalWithdraw `protobuf:"bytes,19,opt,name=proposal_withdraw,json=proposalWithdraw,proto3,oneof"` } type ActionPlan_ValidatorVote struct { - ValidatorVote *v1alpha17.ValidatorVote `protobuf:"bytes,20,opt,name=validator_vote,json=validatorVote,proto3,oneof"` + ValidatorVote *v1alpha18.ValidatorVote `protobuf:"bytes,20,opt,name=validator_vote,json=validatorVote,proto3,oneof"` } type ActionPlan_DelegatorVote struct { - DelegatorVote *v1alpha17.DelegatorVotePlan `protobuf:"bytes,21,opt,name=delegator_vote,json=delegatorVote,proto3,oneof"` + DelegatorVote *v1alpha18.DelegatorVotePlan `protobuf:"bytes,21,opt,name=delegator_vote,json=delegatorVote,proto3,oneof"` } type ActionPlan_ProposalDepositClaim struct { - ProposalDepositClaim *v1alpha17.ProposalDepositClaim `protobuf:"bytes,22,opt,name=proposal_deposit_claim,json=proposalDepositClaim,proto3,oneof"` + ProposalDepositClaim *v1alpha18.ProposalDepositClaim `protobuf:"bytes,22,opt,name=proposal_deposit_claim,json=proposalDepositClaim,proto3,oneof"` } type ActionPlan_Withdrawal struct { - Withdrawal *v1alpha16.Ics20Withdrawal `protobuf:"bytes,23,opt,name=withdrawal,proto3,oneof"` + Withdrawal *v1alpha17.Ics20Withdrawal `protobuf:"bytes,23,opt,name=withdrawal,proto3,oneof"` } type ActionPlan_PositionOpen struct { - PositionOpen *v1alpha14.PositionOpen `protobuf:"bytes,30,opt,name=position_open,json=positionOpen,proto3,oneof"` + PositionOpen *v1alpha15.PositionOpen `protobuf:"bytes,30,opt,name=position_open,json=positionOpen,proto3,oneof"` } type ActionPlan_PositionClose struct { - PositionClose *v1alpha14.PositionClose `protobuf:"bytes,31,opt,name=position_close,json=positionClose,proto3,oneof"` + PositionClose *v1alpha15.PositionClose `protobuf:"bytes,31,opt,name=position_close,json=positionClose,proto3,oneof"` } type ActionPlan_PositionWithdraw struct { // The position withdraw/reward claim actions require balance information so they have Plan types. - PositionWithdraw *v1alpha14.PositionWithdrawPlan `protobuf:"bytes,32,opt,name=position_withdraw,json=positionWithdraw,proto3,oneof"` + PositionWithdraw *v1alpha15.PositionWithdrawPlan `protobuf:"bytes,32,opt,name=position_withdraw,json=positionWithdraw,proto3,oneof"` } type ActionPlan_PositionRewardClaim struct { - PositionRewardClaim *v1alpha14.PositionRewardClaimPlan `protobuf:"bytes,34,opt,name=position_reward_claim,json=positionRewardClaim,proto3,oneof"` + PositionRewardClaim *v1alpha15.PositionRewardClaimPlan `protobuf:"bytes,34,opt,name=position_reward_claim,json=positionRewardClaim,proto3,oneof"` } type ActionPlan_Delegate struct { // We don't need any extra information (yet) to understand delegations, // because we don't yet use flow encryption. - Delegate *v1alpha15.Delegate `protobuf:"bytes,40,opt,name=delegate,proto3,oneof"` + Delegate *v1alpha16.Delegate `protobuf:"bytes,40,opt,name=delegate,proto3,oneof"` } type ActionPlan_Undelegate struct { // We don't need any extra information (yet) to understand undelegations, // because we don't yet use flow encryption. - Undelegate *v1alpha15.Undelegate `protobuf:"bytes,41,opt,name=undelegate,proto3,oneof"` + Undelegate *v1alpha16.Undelegate `protobuf:"bytes,41,opt,name=undelegate,proto3,oneof"` } type ActionPlan_UndelegateClaim struct { - UndelegateClaim *v1alpha15.UndelegateClaimPlan `protobuf:"bytes,42,opt,name=undelegate_claim,json=undelegateClaim,proto3,oneof"` + UndelegateClaim *v1alpha16.UndelegateClaimPlan `protobuf:"bytes,42,opt,name=undelegate_claim,json=undelegateClaim,proto3,oneof"` } type ActionPlan_DaoSpend struct { // DAO - DaoSpend *v1alpha17.DaoSpend `protobuf:"bytes,50,opt,name=dao_spend,json=daoSpend,proto3,oneof"` + DaoSpend *v1alpha18.DaoSpend `protobuf:"bytes,50,opt,name=dao_spend,json=daoSpend,proto3,oneof"` } type ActionPlan_DaoOutput struct { - DaoOutput *v1alpha17.DaoOutput `protobuf:"bytes,51,opt,name=dao_output,json=daoOutput,proto3,oneof"` + DaoOutput *v1alpha18.DaoOutput `protobuf:"bytes,51,opt,name=dao_output,json=daoOutput,proto3,oneof"` } type ActionPlan_DaoDeposit struct { - DaoDeposit *v1alpha17.DaoDeposit `protobuf:"bytes,52,opt,name=dao_deposit,json=daoDeposit,proto3,oneof"` + DaoDeposit *v1alpha18.DaoDeposit `protobuf:"bytes,52,opt,name=dao_deposit,json=daoDeposit,proto3,oneof"` } func (*ActionPlan_Spend) isActionPlan_Action() {} @@ -2161,7 +2161,7 @@ type CluePlan struct { unknownFields protoimpl.UnknownFields // The address. - Address *v1alpha18.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Address *v1alpha19.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` // The random seed to use for the clue plan. Rseed []byte `protobuf:"bytes,2,opt,name=rseed,proto3" json:"rseed,omitempty"` // The bits of precision. @@ -2200,7 +2200,7 @@ func (*CluePlan) Descriptor() ([]byte, []int) { return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{19} } -func (x *CluePlan) GetAddress() *v1alpha18.Address { +func (x *CluePlan) GetAddress() *v1alpha19.Address { if x != nil { return x.Address } @@ -2331,7 +2331,7 @@ type MemoPlaintext struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ReturnAddress *v1alpha18.Address `protobuf:"bytes,1,opt,name=return_address,json=returnAddress,proto3" json:"return_address,omitempty"` + ReturnAddress *v1alpha19.Address `protobuf:"bytes,1,opt,name=return_address,json=returnAddress,proto3" json:"return_address,omitempty"` Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` } @@ -2367,7 +2367,7 @@ func (*MemoPlaintext) Descriptor() ([]byte, []int) { return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{22} } -func (x *MemoPlaintext) GetReturnAddress() *v1alpha18.Address { +func (x *MemoPlaintext) GetReturnAddress() *v1alpha19.Address { if x != nil { return x.ReturnAddress } @@ -2386,7 +2386,7 @@ type MemoPlaintextView struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ReturnAddress *v1alpha18.AddressView `protobuf:"bytes,1,opt,name=return_address,json=returnAddress,proto3" json:"return_address,omitempty"` + ReturnAddress *v1alpha19.AddressView `protobuf:"bytes,1,opt,name=return_address,json=returnAddress,proto3" json:"return_address,omitempty"` Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` } @@ -2422,7 +2422,7 @@ func (*MemoPlaintextView) Descriptor() ([]byte, []int) { return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{23} } -func (x *MemoPlaintextView) GetReturnAddress() *v1alpha18.AddressView { +func (x *MemoPlaintextView) GetReturnAddress() *v1alpha19.AddressView { if x != nil { return x.ReturnAddress } @@ -2666,700 +2666,707 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x73, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x74, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0xb9, 0x01, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0xf3, 0x01, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, - 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, - 0x63, 0x68, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, - 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0x18, 0x0a, 0x02, - 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0xee, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x44, 0x0a, 0x07, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, + 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x59, 0x0a, 0x0b, 0x62, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, + 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0x18, 0x0a, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, + 0x22, 0xee, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x6f, 0x64, 0x79, 0x12, 0x44, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, - 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x49, 0x0a, 0x09, - 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x22, 0x31, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, - 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x65, 0x6e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x22, 0x94, 0x01, 0x0a, 0x15, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x70, - 0x69, 0x72, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, - 0x65, 0x22, 0x59, 0x0a, 0x0d, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x48, 0x0a, 0x09, 0x66, 0x6d, 0x64, 0x5f, 0x63, 0x6c, 0x75, 0x65, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, - 0x5f, 0x66, 0x6d, 0x64, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, - 0x75, 0x65, 0x52, 0x08, 0x66, 0x6d, 0x64, 0x43, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xbd, 0x10, 0x0a, - 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, - 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x50, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, - 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, - 0x61, 0x70, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x50, 0x0a, 0x0a, 0x73, 0x77, - 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, - 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, - 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, + 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x49, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, + 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, + 0x61, 0x22, 0x31, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, + 0x0e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, + 0x4d, 0x65, 0x6d, 0x6f, 0x22, 0x94, 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x23, + 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x3b, + 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x22, 0x59, 0x0a, 0x0d, 0x44, + 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x09, + 0x66, 0x6d, 0x64, 0x5f, 0x63, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x66, 0x6d, 0x64, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x66, 0x6d, + 0x64, 0x43, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xbd, 0x10, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x4d, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x12, 0x50, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x48, 0x00, 0x52, 0x04, + 0x73, 0x77, 0x61, 0x70, 0x12, 0x50, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, - 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, + 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, + 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, + 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, + 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, - 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, - 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, - 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, - 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, - 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, - 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, - 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, - 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, - 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, - 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, - 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, - 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x64, 0x0a, 0x10, - 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, + 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, + 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, + 0x63, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, + 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, + 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, + 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, + 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, + 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, - 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x12, 0x54, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, - 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, - 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x12, 0x5a, 0x0a, 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, + 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, + 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x54, 0x0a, 0x09, + 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, + 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, + 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, - 0x00, 0x52, 0x0a, 0x64, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x63, 0x0a, - 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, - 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, - 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x61, 0x6c, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x97, 0x04, 0x0a, - 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x73, - 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, - 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x60, 0x0a, 0x10, 0x73, 0x70, 0x65, 0x6e, - 0x64, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, + 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x5a, 0x0a, 0x0b, 0x64, + 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, + 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x61, 0x6f, + 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, + 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0f, 0x73, 0x70, 0x65, 0x6e, 0x64, - 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x57, 0x0a, 0x0c, 0x61, 0x64, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0b, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, - 0x74, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x76, - 0x69, 0x65, 0x77, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x56, 0x69, 0x65, 0x77, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, - 0x77, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x18, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, - 0x79, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x4d, 0x0a, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xac, 0x01, 0x0a, - 0x11, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, - 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, - 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, 0xca, 0x01, 0x0a, 0x0f, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, - 0x54, 0x0a, 0x09, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, 0x62, 0x6f, 0x64, - 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, - 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0xff, 0x02, 0x0a, 0x13, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, - 0x12, 0x51, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, + 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x08, 0x0a, 0x06, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x97, 0x04, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, + 0x79, 0x73, 0x12, 0x60, 0x0a, 0x10, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, + 0x6f, 0x74, 0x65, 0x52, 0x0f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x73, 0x12, 0x57, 0x0a, 0x0c, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, + 0x6f, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, + 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, + 0x52, 0x0b, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x4d, 0x0a, + 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0c, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x43, 0x0a, 0x06, + 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, + 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, + 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, + 0x64, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x22, 0xb3, 0x01, 0x0a, 0x18, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, + 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, + 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, + 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xac, 0x01, 0x0a, 0x11, 0x4e, 0x75, 0x6c, 0x6c, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x09, + 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x04, 0x6e, + 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, + 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, + 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, 0x84, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x54, 0x0a, 0x09, 0x62, 0x6f, 0x64, + 0x79, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, + 0x79, 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, 0x62, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, + 0x59, 0x0a, 0x0b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, + 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, + 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, + 0x63, 0x68, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, + 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0xff, 0x02, 0x0a, + 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, + 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, + 0x69, 0x65, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x49, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, - 0x65, 0x77, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x49, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, - 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x22, 0xda, 0x10, 0x0a, 0x0a, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, - 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, - 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, + 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x22, 0xda, + 0x10, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, + 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, - 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, + 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x12, 0x54, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x06, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, + 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, + 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, + 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x56, 0x69, 0x65, 0x77, - 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, - 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x56, 0x69, 0x65, - 0x77, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, - 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, - 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, - 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, - 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, - 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x48, - 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, - 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, + 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, + 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, + 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, + 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, + 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, + 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, + 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, + 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, + 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, + 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, - 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x2a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, + 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, + 0x48, 0x00, 0x52, 0x08, 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, + 0x64, 0x61, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, + 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x5a, 0x0a, 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, - 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, - 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, - 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x12, 0x5a, 0x0a, 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, - 0x00, 0x52, 0x0a, 0x64, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x64, 0x0a, - 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0x22, 0x0a, 0x0a, 0x45, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0xaf, 0x02, 0x0a, 0x11, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x4f, 0x0a, 0x0b, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, - 0x73, 0x68, 0x12, 0x5b, 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x68, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, - 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x52, 0x0a, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x73, 0x12, - 0x6c, 0x0a, 0x14, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, - 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, - 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x73, 0x22, 0xbb, 0x01, - 0x0a, 0x0b, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, - 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, - 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, - 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, - 0x6a, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, - 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x15, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x22, 0xfa, 0x02, 0x0a, 0x0f, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, - 0x48, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x12, 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, + 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, + 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0x22, 0x0a, 0x0a, 0x45, + 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, + 0xaf, 0x02, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, 0x0b, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, + 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0a, 0x65, 0x66, 0x66, 0x65, + 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x5b, 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, + 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, + 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, + 0x74, 0x68, 0x73, 0x12, 0x6c, 0x0a, 0x14, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, + 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, + 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, + 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x12, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, + 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x0b, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, + 0x68, 0x6f, 0x72, 0x12, 0x6a, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x15, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x22, + 0xfa, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x6c, 0x61, 0x6e, 0x12, 0x48, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x70, 0x0a, + 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, + 0x5c, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0d, + 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4d, 0x0a, + 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, - 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5c, 0x0a, 0x0e, 0x64, - 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4d, 0x0a, 0x09, 0x6d, 0x65, 0x6d, - 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x08, - 0x6d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x22, 0x60, 0x0a, 0x11, 0x44, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4b, 0x0a, - 0x0a, 0x63, 0x6c, 0x75, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, - 0x09, 0x63, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x73, 0x22, 0xd5, 0x10, 0x0a, 0x0a, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, - 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, - 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, + 0x61, 0x6e, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x22, 0x60, 0x0a, 0x11, + 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, + 0x6e, 0x12, 0x4b, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x50, + 0x6c, 0x61, 0x6e, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x73, 0x22, 0xd5, + 0x10, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x51, 0x0a, + 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, - 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, + 0x65, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x12, 0x54, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x06, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, + 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, + 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, + 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6c, 0x61, 0x6e, - 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, - 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, + 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, + 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, + 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, + 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, + 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, + 0x57, 0x0a, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0x17, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, + 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, + 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0a, 0x77, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, + 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, + 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, + 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, + 0x65, 0x12, 0x69, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, - 0x6e, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, - 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, - 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, - 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, - 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, - 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x48, - 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, - 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x57, 0x0a, 0x0a, 0x77, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x61, 0x6c, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, + 0x64, 0x72, 0x61, 0x77, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x73, 0x0a, 0x15, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, - 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, - 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, - 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x69, 0x0a, - 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x73, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, - 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, - 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, + 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, + 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x54, 0x0a, - 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, - 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, 0x64, 0x61, 0x6f, 0x53, 0x70, - 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, - 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x5a, 0x0a, 0x0b, - 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x61, - 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x87, 0x01, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x12, - 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, - 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x70, - 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x22, 0x71, 0x0a, 0x0c, - 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4f, 0x0a, 0x09, - 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, - 0x26, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x70, 0x0a, 0x0d, 0x4d, 0x65, 0x6d, 0x6f, 0x50, - 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x78, 0x0a, 0x11, 0x4d, 0x65, 0x6d, - 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x12, 0x4f, - 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, - 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x65, 0x78, 0x74, 0x22, 0xcb, 0x03, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, - 0x12, 0x50, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x2e, - 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, - 0x6c, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, - 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, - 0x65, 0x1a, 0xb2, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x52, 0x0a, - 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, - 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x74, 0x12, 0x53, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, + 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x12, 0x54, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, - 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x52, 0x09, 0x70, 0x6c, 0x61, - 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x5c, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, - 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, - 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, - 0x74, 0x65, 0x78, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, - 0x77, 0x42, 0xcc, 0x02, 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x10, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x65, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, - 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x3b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x54, 0xaa, 0x02, 0x22, - 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0xca, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, - 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2e, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x25, 0x50, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, 0x64, + 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x12, 0x5a, 0x0a, 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, + 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, + 0x52, 0x0a, 0x64, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x42, 0x08, 0x0a, 0x06, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x87, 0x01, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x65, 0x50, + 0x6c, 0x61, 0x6e, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, + 0x22, 0x71, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, + 0x12, 0x4f, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, + 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x22, 0x26, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, + 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x70, 0x0a, 0x0d, 0x4d, + 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x4b, 0x0a, 0x0e, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x78, 0x0a, + 0x11, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, + 0x65, 0x77, 0x12, 0x4f, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x56, 0x69, 0x65, 0x77, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0xcb, 0x03, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, + 0x56, 0x69, 0x65, 0x77, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, + 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, + 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, + 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, + 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xb2, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, + 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, + 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, + 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x53, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, + 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x52, + 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x5c, 0x0a, 0x06, 0x4f, 0x70, + 0x61, 0x71, 0x75, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, + 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, + 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, + 0x5f, 0x76, 0x69, 0x65, 0x77, 0x42, 0xcc, 0x02, 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x42, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x65, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, + 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, + 0x72, 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, + 0x54, 0xaa, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, + 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2e, 0x50, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x25, 0x50, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3403,169 +3410,172 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_goTypes = []interf (*MemoView)(nil), // 24: penumbra.core.transaction.v1alpha1.MemoView (*MemoView_Visible)(nil), // 25: penumbra.core.transaction.v1alpha1.MemoView.Visible (*MemoView_Opaque)(nil), // 26: penumbra.core.transaction.v1alpha1.MemoView.Opaque - (*v1alpha1.MerkleRoot)(nil), // 27: penumbra.crypto.tct.v1alpha1.MerkleRoot - (*v1alpha11.Fee)(nil), // 28: penumbra.core.component.fee.v1alpha1.Fee - (*v1alpha12.Clue)(nil), // 29: penumbra.crypto.decaf377_fmd.v1alpha1.Clue - (*v1alpha13.Spend)(nil), // 30: penumbra.core.component.shielded_pool.v1alpha1.Spend - (*v1alpha13.Output)(nil), // 31: penumbra.core.component.shielded_pool.v1alpha1.Output - (*v1alpha14.Swap)(nil), // 32: penumbra.core.component.dex.v1alpha1.Swap - (*v1alpha14.SwapClaim)(nil), // 33: penumbra.core.component.dex.v1alpha1.SwapClaim - (*v1alpha15.ValidatorDefinition)(nil), // 34: penumbra.core.component.stake.v1alpha1.ValidatorDefinition - (*v1alpha16.IbcRelay)(nil), // 35: penumbra.core.component.ibc.v1alpha1.IbcRelay - (*v1alpha17.ProposalSubmit)(nil), // 36: penumbra.core.component.governance.v1alpha1.ProposalSubmit - (*v1alpha17.ProposalWithdraw)(nil), // 37: penumbra.core.component.governance.v1alpha1.ProposalWithdraw - (*v1alpha17.ValidatorVote)(nil), // 38: penumbra.core.component.governance.v1alpha1.ValidatorVote - (*v1alpha17.DelegatorVote)(nil), // 39: penumbra.core.component.governance.v1alpha1.DelegatorVote - (*v1alpha17.ProposalDepositClaim)(nil), // 40: penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - (*v1alpha14.PositionOpen)(nil), // 41: penumbra.core.component.dex.v1alpha1.PositionOpen - (*v1alpha14.PositionClose)(nil), // 42: penumbra.core.component.dex.v1alpha1.PositionClose - (*v1alpha14.PositionWithdraw)(nil), // 43: penumbra.core.component.dex.v1alpha1.PositionWithdraw - (*v1alpha14.PositionRewardClaim)(nil), // 44: penumbra.core.component.dex.v1alpha1.PositionRewardClaim - (*v1alpha15.Delegate)(nil), // 45: penumbra.core.component.stake.v1alpha1.Delegate - (*v1alpha15.Undelegate)(nil), // 46: penumbra.core.component.stake.v1alpha1.Undelegate - (*v1alpha15.UndelegateClaim)(nil), // 47: penumbra.core.component.stake.v1alpha1.UndelegateClaim - (*v1alpha17.DaoSpend)(nil), // 48: penumbra.core.component.governance.v1alpha1.DaoSpend - (*v1alpha17.DaoOutput)(nil), // 49: penumbra.core.component.governance.v1alpha1.DaoOutput - (*v1alpha17.DaoDeposit)(nil), // 50: penumbra.core.component.governance.v1alpha1.DaoDeposit - (*v1alpha16.Ics20Withdrawal)(nil), // 51: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - (*v1alpha13.Note)(nil), // 52: penumbra.core.component.shielded_pool.v1alpha1.Note - (*v1alpha18.AddressView)(nil), // 53: penumbra.core.keys.v1alpha1.AddressView - (*v1alpha19.DenomMetadata)(nil), // 54: penumbra.core.asset.v1alpha1.DenomMetadata - (*v1alpha18.PayloadKey)(nil), // 55: penumbra.core.keys.v1alpha1.PayloadKey - (*v1alpha1.StateCommitment)(nil), // 56: penumbra.crypto.tct.v1alpha1.StateCommitment - (*v1alpha110.Nullifier)(nil), // 57: penumbra.core.component.sct.v1alpha1.Nullifier - (*v1alpha13.SpendView)(nil), // 58: penumbra.core.component.shielded_pool.v1alpha1.SpendView - (*v1alpha13.OutputView)(nil), // 59: penumbra.core.component.shielded_pool.v1alpha1.OutputView - (*v1alpha14.SwapView)(nil), // 60: penumbra.core.component.dex.v1alpha1.SwapView - (*v1alpha14.SwapClaimView)(nil), // 61: penumbra.core.component.dex.v1alpha1.SwapClaimView - (*v1alpha17.DelegatorVoteView)(nil), // 62: penumbra.core.component.governance.v1alpha1.DelegatorVoteView - (*v1alpha111.SpendAuthSignature)(nil), // 63: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - (*v1alpha1.StateCommitmentProof)(nil), // 64: penumbra.crypto.tct.v1alpha1.StateCommitmentProof - (*v1alpha13.SpendPlan)(nil), // 65: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan - (*v1alpha13.OutputPlan)(nil), // 66: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan - (*v1alpha14.SwapPlan)(nil), // 67: penumbra.core.component.dex.v1alpha1.SwapPlan - (*v1alpha14.SwapClaimPlan)(nil), // 68: penumbra.core.component.dex.v1alpha1.SwapClaimPlan - (*v1alpha17.DelegatorVotePlan)(nil), // 69: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan - (*v1alpha14.PositionWithdrawPlan)(nil), // 70: penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan - (*v1alpha14.PositionRewardClaimPlan)(nil), // 71: penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan - (*v1alpha15.UndelegateClaimPlan)(nil), // 72: penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan - (*v1alpha18.Address)(nil), // 73: penumbra.core.keys.v1alpha1.Address + (*v1alpha1.BindingSignature)(nil), // 27: penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature + (*v1alpha11.MerkleRoot)(nil), // 28: penumbra.crypto.tct.v1alpha1.MerkleRoot + (*v1alpha12.Fee)(nil), // 29: penumbra.core.component.fee.v1alpha1.Fee + (*v1alpha13.Clue)(nil), // 30: penumbra.crypto.decaf377_fmd.v1alpha1.Clue + (*v1alpha14.Spend)(nil), // 31: penumbra.core.component.shielded_pool.v1alpha1.Spend + (*v1alpha14.Output)(nil), // 32: penumbra.core.component.shielded_pool.v1alpha1.Output + (*v1alpha15.Swap)(nil), // 33: penumbra.core.component.dex.v1alpha1.Swap + (*v1alpha15.SwapClaim)(nil), // 34: penumbra.core.component.dex.v1alpha1.SwapClaim + (*v1alpha16.ValidatorDefinition)(nil), // 35: penumbra.core.component.stake.v1alpha1.ValidatorDefinition + (*v1alpha17.IbcRelay)(nil), // 36: penumbra.core.component.ibc.v1alpha1.IbcRelay + (*v1alpha18.ProposalSubmit)(nil), // 37: penumbra.core.component.governance.v1alpha1.ProposalSubmit + (*v1alpha18.ProposalWithdraw)(nil), // 38: penumbra.core.component.governance.v1alpha1.ProposalWithdraw + (*v1alpha18.ValidatorVote)(nil), // 39: penumbra.core.component.governance.v1alpha1.ValidatorVote + (*v1alpha18.DelegatorVote)(nil), // 40: penumbra.core.component.governance.v1alpha1.DelegatorVote + (*v1alpha18.ProposalDepositClaim)(nil), // 41: penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + (*v1alpha15.PositionOpen)(nil), // 42: penumbra.core.component.dex.v1alpha1.PositionOpen + (*v1alpha15.PositionClose)(nil), // 43: penumbra.core.component.dex.v1alpha1.PositionClose + (*v1alpha15.PositionWithdraw)(nil), // 44: penumbra.core.component.dex.v1alpha1.PositionWithdraw + (*v1alpha15.PositionRewardClaim)(nil), // 45: penumbra.core.component.dex.v1alpha1.PositionRewardClaim + (*v1alpha16.Delegate)(nil), // 46: penumbra.core.component.stake.v1alpha1.Delegate + (*v1alpha16.Undelegate)(nil), // 47: penumbra.core.component.stake.v1alpha1.Undelegate + (*v1alpha16.UndelegateClaim)(nil), // 48: penumbra.core.component.stake.v1alpha1.UndelegateClaim + (*v1alpha18.DaoSpend)(nil), // 49: penumbra.core.component.governance.v1alpha1.DaoSpend + (*v1alpha18.DaoOutput)(nil), // 50: penumbra.core.component.governance.v1alpha1.DaoOutput + (*v1alpha18.DaoDeposit)(nil), // 51: penumbra.core.component.governance.v1alpha1.DaoDeposit + (*v1alpha17.Ics20Withdrawal)(nil), // 52: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + (*v1alpha14.Note)(nil), // 53: penumbra.core.component.shielded_pool.v1alpha1.Note + (*v1alpha19.AddressView)(nil), // 54: penumbra.core.keys.v1alpha1.AddressView + (*v1alpha110.DenomMetadata)(nil), // 55: penumbra.core.asset.v1alpha1.DenomMetadata + (*v1alpha19.PayloadKey)(nil), // 56: penumbra.core.keys.v1alpha1.PayloadKey + (*v1alpha11.StateCommitment)(nil), // 57: penumbra.crypto.tct.v1alpha1.StateCommitment + (*v1alpha111.Nullifier)(nil), // 58: penumbra.core.component.sct.v1alpha1.Nullifier + (*v1alpha14.SpendView)(nil), // 59: penumbra.core.component.shielded_pool.v1alpha1.SpendView + (*v1alpha14.OutputView)(nil), // 60: penumbra.core.component.shielded_pool.v1alpha1.OutputView + (*v1alpha15.SwapView)(nil), // 61: penumbra.core.component.dex.v1alpha1.SwapView + (*v1alpha15.SwapClaimView)(nil), // 62: penumbra.core.component.dex.v1alpha1.SwapClaimView + (*v1alpha18.DelegatorVoteView)(nil), // 63: penumbra.core.component.governance.v1alpha1.DelegatorVoteView + (*v1alpha1.SpendAuthSignature)(nil), // 64: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + (*v1alpha11.StateCommitmentProof)(nil), // 65: penumbra.crypto.tct.v1alpha1.StateCommitmentProof + (*v1alpha14.SpendPlan)(nil), // 66: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan + (*v1alpha14.OutputPlan)(nil), // 67: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan + (*v1alpha15.SwapPlan)(nil), // 68: penumbra.core.component.dex.v1alpha1.SwapPlan + (*v1alpha15.SwapClaimPlan)(nil), // 69: penumbra.core.component.dex.v1alpha1.SwapClaimPlan + (*v1alpha18.DelegatorVotePlan)(nil), // 70: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan + (*v1alpha15.PositionWithdrawPlan)(nil), // 71: penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan + (*v1alpha15.PositionRewardClaimPlan)(nil), // 72: penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan + (*v1alpha16.UndelegateClaimPlan)(nil), // 73: penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan + (*v1alpha19.Address)(nil), // 74: penumbra.core.keys.v1alpha1.Address } var file_penumbra_core_transaction_v1alpha1_transaction_proto_depIdxs = []int32{ 2, // 0: penumbra.core.transaction.v1alpha1.Transaction.body:type_name -> penumbra.core.transaction.v1alpha1.TransactionBody - 27, // 1: penumbra.core.transaction.v1alpha1.Transaction.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot - 6, // 2: penumbra.core.transaction.v1alpha1.TransactionBody.actions:type_name -> penumbra.core.transaction.v1alpha1.Action - 4, // 3: penumbra.core.transaction.v1alpha1.TransactionBody.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters - 5, // 4: penumbra.core.transaction.v1alpha1.TransactionBody.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData - 3, // 5: penumbra.core.transaction.v1alpha1.TransactionBody.memo_data:type_name -> penumbra.core.transaction.v1alpha1.MemoData - 28, // 6: penumbra.core.transaction.v1alpha1.TransactionParameters.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee - 29, // 7: penumbra.core.transaction.v1alpha1.DetectionData.fmd_clues:type_name -> penumbra.crypto.decaf377_fmd.v1alpha1.Clue - 30, // 8: penumbra.core.transaction.v1alpha1.Action.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend - 31, // 9: penumbra.core.transaction.v1alpha1.Action.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output - 32, // 10: penumbra.core.transaction.v1alpha1.Action.swap:type_name -> penumbra.core.component.dex.v1alpha1.Swap - 33, // 11: penumbra.core.transaction.v1alpha1.Action.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaim - 34, // 12: penumbra.core.transaction.v1alpha1.Action.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 35, // 13: penumbra.core.transaction.v1alpha1.Action.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 36, // 14: penumbra.core.transaction.v1alpha1.Action.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 37, // 15: penumbra.core.transaction.v1alpha1.Action.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 38, // 16: penumbra.core.transaction.v1alpha1.Action.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote - 39, // 17: penumbra.core.transaction.v1alpha1.Action.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote - 40, // 18: penumbra.core.transaction.v1alpha1.Action.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 41, // 19: penumbra.core.transaction.v1alpha1.Action.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 42, // 20: penumbra.core.transaction.v1alpha1.Action.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose - 43, // 21: penumbra.core.transaction.v1alpha1.Action.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw - 44, // 22: penumbra.core.transaction.v1alpha1.Action.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim - 45, // 23: penumbra.core.transaction.v1alpha1.Action.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 46, // 24: penumbra.core.transaction.v1alpha1.Action.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 47, // 25: penumbra.core.transaction.v1alpha1.Action.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim - 48, // 26: penumbra.core.transaction.v1alpha1.Action.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 49, // 27: penumbra.core.transaction.v1alpha1.Action.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 50, // 28: penumbra.core.transaction.v1alpha1.Action.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit - 51, // 29: penumbra.core.transaction.v1alpha1.Action.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 8, // 30: penumbra.core.transaction.v1alpha1.TransactionPerspective.payload_keys:type_name -> penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment - 9, // 31: penumbra.core.transaction.v1alpha1.TransactionPerspective.spend_nullifiers:type_name -> penumbra.core.transaction.v1alpha1.NullifierWithNote - 52, // 32: penumbra.core.transaction.v1alpha1.TransactionPerspective.advice_notes:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 53, // 33: penumbra.core.transaction.v1alpha1.TransactionPerspective.address_views:type_name -> penumbra.core.keys.v1alpha1.AddressView - 54, // 34: penumbra.core.transaction.v1alpha1.TransactionPerspective.denoms:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata - 1, // 35: penumbra.core.transaction.v1alpha1.TransactionPerspective.transaction_id:type_name -> penumbra.core.transaction.v1alpha1.Id - 55, // 36: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey - 56, // 37: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 57, // 38: penumbra.core.transaction.v1alpha1.NullifierWithNote.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 52, // 39: penumbra.core.transaction.v1alpha1.NullifierWithNote.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 11, // 40: penumbra.core.transaction.v1alpha1.TransactionView.body_view:type_name -> penumbra.core.transaction.v1alpha1.TransactionBodyView - 27, // 41: penumbra.core.transaction.v1alpha1.TransactionView.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot - 12, // 42: penumbra.core.transaction.v1alpha1.TransactionBodyView.action_views:type_name -> penumbra.core.transaction.v1alpha1.ActionView - 4, // 43: penumbra.core.transaction.v1alpha1.TransactionBodyView.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters - 5, // 44: penumbra.core.transaction.v1alpha1.TransactionBodyView.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData - 24, // 45: penumbra.core.transaction.v1alpha1.TransactionBodyView.memo_view:type_name -> penumbra.core.transaction.v1alpha1.MemoView - 58, // 46: penumbra.core.transaction.v1alpha1.ActionView.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView - 59, // 47: penumbra.core.transaction.v1alpha1.ActionView.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView - 60, // 48: penumbra.core.transaction.v1alpha1.ActionView.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapView - 61, // 49: penumbra.core.transaction.v1alpha1.ActionView.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimView - 34, // 50: penumbra.core.transaction.v1alpha1.ActionView.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 35, // 51: penumbra.core.transaction.v1alpha1.ActionView.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 36, // 52: penumbra.core.transaction.v1alpha1.ActionView.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 37, // 53: penumbra.core.transaction.v1alpha1.ActionView.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 38, // 54: penumbra.core.transaction.v1alpha1.ActionView.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote - 62, // 55: penumbra.core.transaction.v1alpha1.ActionView.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView - 40, // 56: penumbra.core.transaction.v1alpha1.ActionView.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 41, // 57: penumbra.core.transaction.v1alpha1.ActionView.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 42, // 58: penumbra.core.transaction.v1alpha1.ActionView.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose - 43, // 59: penumbra.core.transaction.v1alpha1.ActionView.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw - 44, // 60: penumbra.core.transaction.v1alpha1.ActionView.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim - 45, // 61: penumbra.core.transaction.v1alpha1.ActionView.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 46, // 62: penumbra.core.transaction.v1alpha1.ActionView.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 48, // 63: penumbra.core.transaction.v1alpha1.ActionView.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 49, // 64: penumbra.core.transaction.v1alpha1.ActionView.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 50, // 65: penumbra.core.transaction.v1alpha1.ActionView.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit - 47, // 66: penumbra.core.transaction.v1alpha1.ActionView.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim - 51, // 67: penumbra.core.transaction.v1alpha1.ActionView.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 13, // 68: penumbra.core.transaction.v1alpha1.AuthorizationData.effect_hash:type_name -> penumbra.core.transaction.v1alpha1.EffectHash - 63, // 69: penumbra.core.transaction.v1alpha1.AuthorizationData.spend_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - 63, // 70: penumbra.core.transaction.v1alpha1.AuthorizationData.delegator_vote_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - 27, // 71: penumbra.core.transaction.v1alpha1.WitnessData.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot - 64, // 72: penumbra.core.transaction.v1alpha1.WitnessData.state_commitment_proofs:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitmentProof - 18, // 73: penumbra.core.transaction.v1alpha1.TransactionPlan.actions:type_name -> penumbra.core.transaction.v1alpha1.ActionPlan - 4, // 74: penumbra.core.transaction.v1alpha1.TransactionPlan.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters - 17, // 75: penumbra.core.transaction.v1alpha1.TransactionPlan.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionDataPlan - 20, // 76: penumbra.core.transaction.v1alpha1.TransactionPlan.memo_data:type_name -> penumbra.core.transaction.v1alpha1.MemoDataPlan - 19, // 77: penumbra.core.transaction.v1alpha1.DetectionDataPlan.clue_plans:type_name -> penumbra.core.transaction.v1alpha1.CluePlan - 65, // 78: penumbra.core.transaction.v1alpha1.ActionPlan.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendPlan - 66, // 79: penumbra.core.transaction.v1alpha1.ActionPlan.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputPlan - 67, // 80: penumbra.core.transaction.v1alpha1.ActionPlan.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapPlan - 68, // 81: penumbra.core.transaction.v1alpha1.ActionPlan.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimPlan - 34, // 82: penumbra.core.transaction.v1alpha1.ActionPlan.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 35, // 83: penumbra.core.transaction.v1alpha1.ActionPlan.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 36, // 84: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 37, // 85: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 38, // 86: penumbra.core.transaction.v1alpha1.ActionPlan.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote - 69, // 87: penumbra.core.transaction.v1alpha1.ActionPlan.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVotePlan - 40, // 88: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 51, // 89: penumbra.core.transaction.v1alpha1.ActionPlan.withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 41, // 90: penumbra.core.transaction.v1alpha1.ActionPlan.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 42, // 91: penumbra.core.transaction.v1alpha1.ActionPlan.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose - 70, // 92: penumbra.core.transaction.v1alpha1.ActionPlan.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan - 71, // 93: penumbra.core.transaction.v1alpha1.ActionPlan.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan - 45, // 94: penumbra.core.transaction.v1alpha1.ActionPlan.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 46, // 95: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 72, // 96: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan - 48, // 97: penumbra.core.transaction.v1alpha1.ActionPlan.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 49, // 98: penumbra.core.transaction.v1alpha1.ActionPlan.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 50, // 99: penumbra.core.transaction.v1alpha1.ActionPlan.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit - 73, // 100: penumbra.core.transaction.v1alpha1.CluePlan.address:type_name -> penumbra.core.keys.v1alpha1.Address - 22, // 101: penumbra.core.transaction.v1alpha1.MemoDataPlan.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext - 73, // 102: penumbra.core.transaction.v1alpha1.MemoPlaintext.return_address:type_name -> penumbra.core.keys.v1alpha1.Address - 53, // 103: penumbra.core.transaction.v1alpha1.MemoPlaintextView.return_address:type_name -> penumbra.core.keys.v1alpha1.AddressView - 25, // 104: penumbra.core.transaction.v1alpha1.MemoView.visible:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Visible - 26, // 105: penumbra.core.transaction.v1alpha1.MemoView.opaque:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Opaque - 21, // 106: penumbra.core.transaction.v1alpha1.MemoView.Visible.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext - 23, // 107: penumbra.core.transaction.v1alpha1.MemoView.Visible.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintextView - 21, // 108: penumbra.core.transaction.v1alpha1.MemoView.Opaque.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext - 109, // [109:109] is the sub-list for method output_type - 109, // [109:109] is the sub-list for method input_type - 109, // [109:109] is the sub-list for extension type_name - 109, // [109:109] is the sub-list for extension extendee - 0, // [0:109] is the sub-list for field type_name + 27, // 1: penumbra.core.transaction.v1alpha1.Transaction.binding_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature + 28, // 2: penumbra.core.transaction.v1alpha1.Transaction.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 6, // 3: penumbra.core.transaction.v1alpha1.TransactionBody.actions:type_name -> penumbra.core.transaction.v1alpha1.Action + 4, // 4: penumbra.core.transaction.v1alpha1.TransactionBody.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters + 5, // 5: penumbra.core.transaction.v1alpha1.TransactionBody.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData + 3, // 6: penumbra.core.transaction.v1alpha1.TransactionBody.memo_data:type_name -> penumbra.core.transaction.v1alpha1.MemoData + 29, // 7: penumbra.core.transaction.v1alpha1.TransactionParameters.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee + 30, // 8: penumbra.core.transaction.v1alpha1.DetectionData.fmd_clues:type_name -> penumbra.crypto.decaf377_fmd.v1alpha1.Clue + 31, // 9: penumbra.core.transaction.v1alpha1.Action.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend + 32, // 10: penumbra.core.transaction.v1alpha1.Action.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output + 33, // 11: penumbra.core.transaction.v1alpha1.Action.swap:type_name -> penumbra.core.component.dex.v1alpha1.Swap + 34, // 12: penumbra.core.transaction.v1alpha1.Action.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaim + 35, // 13: penumbra.core.transaction.v1alpha1.Action.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 36, // 14: penumbra.core.transaction.v1alpha1.Action.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 37, // 15: penumbra.core.transaction.v1alpha1.Action.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 38, // 16: penumbra.core.transaction.v1alpha1.Action.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 39, // 17: penumbra.core.transaction.v1alpha1.Action.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 40, // 18: penumbra.core.transaction.v1alpha1.Action.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote + 41, // 19: penumbra.core.transaction.v1alpha1.Action.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 42, // 20: penumbra.core.transaction.v1alpha1.Action.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 43, // 21: penumbra.core.transaction.v1alpha1.Action.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 44, // 22: penumbra.core.transaction.v1alpha1.Action.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw + 45, // 23: penumbra.core.transaction.v1alpha1.Action.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim + 46, // 24: penumbra.core.transaction.v1alpha1.Action.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 47, // 25: penumbra.core.transaction.v1alpha1.Action.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 48, // 26: penumbra.core.transaction.v1alpha1.Action.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim + 49, // 27: penumbra.core.transaction.v1alpha1.Action.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend + 50, // 28: penumbra.core.transaction.v1alpha1.Action.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput + 51, // 29: penumbra.core.transaction.v1alpha1.Action.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 52, // 30: penumbra.core.transaction.v1alpha1.Action.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 8, // 31: penumbra.core.transaction.v1alpha1.TransactionPerspective.payload_keys:type_name -> penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment + 9, // 32: penumbra.core.transaction.v1alpha1.TransactionPerspective.spend_nullifiers:type_name -> penumbra.core.transaction.v1alpha1.NullifierWithNote + 53, // 33: penumbra.core.transaction.v1alpha1.TransactionPerspective.advice_notes:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 54, // 34: penumbra.core.transaction.v1alpha1.TransactionPerspective.address_views:type_name -> penumbra.core.keys.v1alpha1.AddressView + 55, // 35: penumbra.core.transaction.v1alpha1.TransactionPerspective.denoms:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata + 1, // 36: penumbra.core.transaction.v1alpha1.TransactionPerspective.transaction_id:type_name -> penumbra.core.transaction.v1alpha1.Id + 56, // 37: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey + 57, // 38: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 58, // 39: penumbra.core.transaction.v1alpha1.NullifierWithNote.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 53, // 40: penumbra.core.transaction.v1alpha1.NullifierWithNote.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 11, // 41: penumbra.core.transaction.v1alpha1.TransactionView.body_view:type_name -> penumbra.core.transaction.v1alpha1.TransactionBodyView + 27, // 42: penumbra.core.transaction.v1alpha1.TransactionView.binding_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature + 28, // 43: penumbra.core.transaction.v1alpha1.TransactionView.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 12, // 44: penumbra.core.transaction.v1alpha1.TransactionBodyView.action_views:type_name -> penumbra.core.transaction.v1alpha1.ActionView + 4, // 45: penumbra.core.transaction.v1alpha1.TransactionBodyView.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters + 5, // 46: penumbra.core.transaction.v1alpha1.TransactionBodyView.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData + 24, // 47: penumbra.core.transaction.v1alpha1.TransactionBodyView.memo_view:type_name -> penumbra.core.transaction.v1alpha1.MemoView + 59, // 48: penumbra.core.transaction.v1alpha1.ActionView.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView + 60, // 49: penumbra.core.transaction.v1alpha1.ActionView.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView + 61, // 50: penumbra.core.transaction.v1alpha1.ActionView.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapView + 62, // 51: penumbra.core.transaction.v1alpha1.ActionView.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimView + 35, // 52: penumbra.core.transaction.v1alpha1.ActionView.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 36, // 53: penumbra.core.transaction.v1alpha1.ActionView.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 37, // 54: penumbra.core.transaction.v1alpha1.ActionView.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 38, // 55: penumbra.core.transaction.v1alpha1.ActionView.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 39, // 56: penumbra.core.transaction.v1alpha1.ActionView.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 63, // 57: penumbra.core.transaction.v1alpha1.ActionView.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView + 41, // 58: penumbra.core.transaction.v1alpha1.ActionView.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 42, // 59: penumbra.core.transaction.v1alpha1.ActionView.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 43, // 60: penumbra.core.transaction.v1alpha1.ActionView.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 44, // 61: penumbra.core.transaction.v1alpha1.ActionView.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw + 45, // 62: penumbra.core.transaction.v1alpha1.ActionView.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim + 46, // 63: penumbra.core.transaction.v1alpha1.ActionView.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 47, // 64: penumbra.core.transaction.v1alpha1.ActionView.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 49, // 65: penumbra.core.transaction.v1alpha1.ActionView.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend + 50, // 66: penumbra.core.transaction.v1alpha1.ActionView.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput + 51, // 67: penumbra.core.transaction.v1alpha1.ActionView.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 48, // 68: penumbra.core.transaction.v1alpha1.ActionView.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim + 52, // 69: penumbra.core.transaction.v1alpha1.ActionView.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 13, // 70: penumbra.core.transaction.v1alpha1.AuthorizationData.effect_hash:type_name -> penumbra.core.transaction.v1alpha1.EffectHash + 64, // 71: penumbra.core.transaction.v1alpha1.AuthorizationData.spend_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + 64, // 72: penumbra.core.transaction.v1alpha1.AuthorizationData.delegator_vote_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + 28, // 73: penumbra.core.transaction.v1alpha1.WitnessData.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 65, // 74: penumbra.core.transaction.v1alpha1.WitnessData.state_commitment_proofs:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitmentProof + 18, // 75: penumbra.core.transaction.v1alpha1.TransactionPlan.actions:type_name -> penumbra.core.transaction.v1alpha1.ActionPlan + 4, // 76: penumbra.core.transaction.v1alpha1.TransactionPlan.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters + 17, // 77: penumbra.core.transaction.v1alpha1.TransactionPlan.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionDataPlan + 20, // 78: penumbra.core.transaction.v1alpha1.TransactionPlan.memo_data:type_name -> penumbra.core.transaction.v1alpha1.MemoDataPlan + 19, // 79: penumbra.core.transaction.v1alpha1.DetectionDataPlan.clue_plans:type_name -> penumbra.core.transaction.v1alpha1.CluePlan + 66, // 80: penumbra.core.transaction.v1alpha1.ActionPlan.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendPlan + 67, // 81: penumbra.core.transaction.v1alpha1.ActionPlan.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputPlan + 68, // 82: penumbra.core.transaction.v1alpha1.ActionPlan.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapPlan + 69, // 83: penumbra.core.transaction.v1alpha1.ActionPlan.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimPlan + 35, // 84: penumbra.core.transaction.v1alpha1.ActionPlan.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 36, // 85: penumbra.core.transaction.v1alpha1.ActionPlan.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 37, // 86: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 38, // 87: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 39, // 88: penumbra.core.transaction.v1alpha1.ActionPlan.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 70, // 89: penumbra.core.transaction.v1alpha1.ActionPlan.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVotePlan + 41, // 90: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 52, // 91: penumbra.core.transaction.v1alpha1.ActionPlan.withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 42, // 92: penumbra.core.transaction.v1alpha1.ActionPlan.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 43, // 93: penumbra.core.transaction.v1alpha1.ActionPlan.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 71, // 94: penumbra.core.transaction.v1alpha1.ActionPlan.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan + 72, // 95: penumbra.core.transaction.v1alpha1.ActionPlan.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan + 46, // 96: penumbra.core.transaction.v1alpha1.ActionPlan.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 47, // 97: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 73, // 98: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan + 49, // 99: penumbra.core.transaction.v1alpha1.ActionPlan.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend + 50, // 100: penumbra.core.transaction.v1alpha1.ActionPlan.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput + 51, // 101: penumbra.core.transaction.v1alpha1.ActionPlan.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 74, // 102: penumbra.core.transaction.v1alpha1.CluePlan.address:type_name -> penumbra.core.keys.v1alpha1.Address + 22, // 103: penumbra.core.transaction.v1alpha1.MemoDataPlan.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext + 74, // 104: penumbra.core.transaction.v1alpha1.MemoPlaintext.return_address:type_name -> penumbra.core.keys.v1alpha1.Address + 54, // 105: penumbra.core.transaction.v1alpha1.MemoPlaintextView.return_address:type_name -> penumbra.core.keys.v1alpha1.AddressView + 25, // 106: penumbra.core.transaction.v1alpha1.MemoView.visible:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Visible + 26, // 107: penumbra.core.transaction.v1alpha1.MemoView.opaque:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Opaque + 21, // 108: penumbra.core.transaction.v1alpha1.MemoView.Visible.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext + 23, // 109: penumbra.core.transaction.v1alpha1.MemoView.Visible.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintextView + 21, // 110: penumbra.core.transaction.v1alpha1.MemoView.Opaque.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext + 111, // [111:111] is the sub-list for method output_type + 111, // [111:111] is the sub-list for method input_type + 111, // [111:111] is the sub-list for extension type_name + 111, // [111:111] is the sub-list for extension extendee + 0, // [0:111] is the sub-list for field type_name } func init() { file_penumbra_core_transaction_v1alpha1_transaction_proto_init() } diff --git a/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.pb.go b/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.pb.go index 454bad2be6..f783f8eba5 100644 --- a/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.pb.go +++ b/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.pb.go @@ -114,6 +114,53 @@ func (x *BindingSignature) GetInner() []byte { return nil } +type SpendVerificationKey struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Inner []byte `protobuf:"bytes,1,opt,name=inner,proto3" json:"inner,omitempty"` +} + +func (x *SpendVerificationKey) Reset() { + *x = SpendVerificationKey{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_crypto_decaf377_rdsa_v1alpha1_decaf377_rdsa_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SpendVerificationKey) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SpendVerificationKey) ProtoMessage() {} + +func (x *SpendVerificationKey) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_crypto_decaf377_rdsa_v1alpha1_decaf377_rdsa_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SpendVerificationKey.ProtoReflect.Descriptor instead. +func (*SpendVerificationKey) Descriptor() ([]byte, []int) { + return file_penumbra_crypto_decaf377_rdsa_v1alpha1_decaf377_rdsa_proto_rawDescGZIP(), []int{2} +} + +func (x *SpendVerificationKey) GetInner() []byte { + if x != nil { + return x.Inner + } + return nil +} + var File_penumbra_crypto_decaf377_rdsa_v1alpha1_decaf377_rdsa_proto protoreflect.FileDescriptor var file_penumbra_crypto_decaf377_rdsa_v1alpha1_decaf377_rdsa_proto_rawDesc = []byte{ @@ -128,30 +175,33 @@ var file_penumbra_crypto_decaf377_rdsa_v1alpha1_decaf377_rdsa_proto_rawDesc = [] 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x28, 0x0a, 0x10, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x42, 0xe3, 0x02, 0x0a, 0x2a, 0x63, - 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x11, 0x44, 0x65, 0x63, 0x61, 0x66, - 0x33, 0x37, 0x37, 0x52, 0x64, 0x73, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x6b, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x64, - 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2f, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, - 0x64, 0x73, 0x61, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, - 0x44, 0xaa, 0x02, 0x25, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x2e, 0x44, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x52, 0x64, 0x73, 0x61, - 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x25, 0x50, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x5c, 0x44, 0x65, 0x63, 0x61, - 0x66, 0x33, 0x37, 0x37, 0x52, 0x64, 0x73, 0x61, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0xe2, 0x02, 0x31, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x5c, 0x44, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x52, 0x64, 0x73, 0x61, - 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x3a, 0x3a, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x3a, 0x3a, 0x44, 0x65, 0x63, 0x61, 0x66, 0x33, - 0x37, 0x37, 0x52, 0x64, 0x73, 0x61, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x14, 0x53, 0x70, + 0x65, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x42, 0xe3, 0x02, 0x0a, 0x2a, 0x63, 0x6f, 0x6d, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x11, 0x44, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, + 0x37, 0x52, 0x64, 0x73, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x6b, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x64, 0x65, 0x63, + 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x3b, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, + 0x61, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x44, 0xaa, + 0x02, 0x25, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x72, 0x79, 0x70, 0x74, + 0x6f, 0x2e, 0x44, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x52, 0x64, 0x73, 0x61, 0x2e, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x25, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x5c, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x5c, 0x44, 0x65, 0x63, 0x61, 0x66, 0x33, + 0x37, 0x37, 0x52, 0x64, 0x73, 0x61, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, + 0x02, 0x31, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x72, 0x79, 0x70, 0x74, + 0x6f, 0x5c, 0x44, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x52, 0x64, 0x73, 0x61, 0x5c, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, + 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x3a, 0x3a, 0x44, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, + 0x52, 0x64, 0x73, 0x61, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -166,10 +216,11 @@ func file_penumbra_crypto_decaf377_rdsa_v1alpha1_decaf377_rdsa_proto_rawDescGZIP return file_penumbra_crypto_decaf377_rdsa_v1alpha1_decaf377_rdsa_proto_rawDescData } -var file_penumbra_crypto_decaf377_rdsa_v1alpha1_decaf377_rdsa_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_penumbra_crypto_decaf377_rdsa_v1alpha1_decaf377_rdsa_proto_msgTypes = make([]protoimpl.MessageInfo, 3) var file_penumbra_crypto_decaf377_rdsa_v1alpha1_decaf377_rdsa_proto_goTypes = []interface{}{ - (*SpendAuthSignature)(nil), // 0: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - (*BindingSignature)(nil), // 1: penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature + (*SpendAuthSignature)(nil), // 0: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + (*BindingSignature)(nil), // 1: penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature + (*SpendVerificationKey)(nil), // 2: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendVerificationKey } var file_penumbra_crypto_decaf377_rdsa_v1alpha1_decaf377_rdsa_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type @@ -209,6 +260,18 @@ func file_penumbra_crypto_decaf377_rdsa_v1alpha1_decaf377_rdsa_proto_init() { return nil } } + file_penumbra_crypto_decaf377_rdsa_v1alpha1_decaf377_rdsa_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SpendVerificationKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -216,7 +279,7 @@ func file_penumbra_crypto_decaf377_rdsa_v1alpha1_decaf377_rdsa_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_crypto_decaf377_rdsa_v1alpha1_decaf377_rdsa_proto_rawDesc, NumEnums: 0, - NumMessages: 2, + NumMessages: 3, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto b/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto index f11100bed0..2f2b3c35d1 100644 --- a/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto +++ b/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto @@ -90,7 +90,7 @@ message DelegatorVoteBody { // The nullifier of the input note. sct.v1alpha1.Nullifier nullifier = 6; // The randomized validating key for the spend authorization signature. - bytes rk = 7; + crypto.decaf377_rdsa.v1alpha1.SpendVerificationKey rk = 7; } message DelegatorVoteView { diff --git a/proto/penumbra/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto b/proto/penumbra/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto index 308fec79e3..06b155dd68 100644 --- a/proto/penumbra/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto +++ b/proto/penumbra/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto @@ -82,7 +82,7 @@ message SpendBody { // The nullifier of the input note. sct.v1alpha1.Nullifier nullifier = 6; // The randomized validating key for the spend authorization signature. - bytes rk = 4; + crypto.decaf377_rdsa.v1alpha1.SpendVerificationKey rk = 4; } message SpendView { message Visible { diff --git a/proto/penumbra/penumbra/core/keys/v1alpha1/keys.proto b/proto/penumbra/penumbra/core/keys/v1alpha1/keys.proto index e7d61a3c67..a88862b839 100644 --- a/proto/penumbra/penumbra/core/keys/v1alpha1/keys.proto +++ b/proto/penumbra/penumbra/core/keys/v1alpha1/keys.proto @@ -41,10 +41,6 @@ message SpendKey { bytes inner = 1; } -message SpendVerificationKey { - bytes inner = 1; -} - message FullViewingKey { bytes inner = 1; } diff --git a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto index 33ee4ec1ed..c590a9cdca 100644 --- a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto +++ b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto @@ -18,7 +18,7 @@ import "penumbra/crypto/tct/v1alpha1/tct.proto"; message Transaction { TransactionBody body = 1; // The binding signature is stored separately from the transaction body that it signs. - bytes binding_sig = 2; + crypto.decaf377_rdsa.v1alpha1.BindingSignature binding_sig = 2; // The root of some previous state of the state commitment tree, used as an anchor for all // ZK state transition proofs. crypto.tct.v1alpha1.MerkleRoot anchor = 3; @@ -139,7 +139,7 @@ message TransactionView { // View of the transaction body TransactionBodyView body_view = 1; // The binding signature is stored separately from the transaction body that it signs. - bytes binding_sig = 2; + crypto.decaf377_rdsa.v1alpha1.BindingSignature binding_sig = 2; // The root of some previous state of the state commitment tree, used as an anchor for all // ZK state transition proofs. crypto.tct.v1alpha1.MerkleRoot anchor = 3; diff --git a/proto/penumbra/penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.proto b/proto/penumbra/penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.proto index 663fbb5bd5..0d38d6e64a 100644 --- a/proto/penumbra/penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.proto +++ b/proto/penumbra/penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.proto @@ -8,3 +8,7 @@ message SpendAuthSignature { message BindingSignature { bytes inner = 1; } + +message SpendVerificationKey { + bytes inner = 1; +} From dc0c0c69791e28d4cbb89d2a655d599d780632c6 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Fri, 29 Dec 2023 10:08:04 -0500 Subject: [PATCH 06/84] custody: update test plan to new format --- crates/custody/src/threshold.rs | 98 ++++++++++++++++++++++++++++++++- 1 file changed, 97 insertions(+), 1 deletion(-) diff --git a/crates/custody/src/threshold.rs b/crates/custody/src/threshold.rs index 4b944c5ac7..a1769b48e4 100644 --- a/crates/custody/src/threshold.rs +++ b/crates/custody/src/threshold.rs @@ -460,7 +460,103 @@ mod test { #[tokio::test] async fn test_transaction_signing() -> Result<()> { - const TEST_PLAN: &'static str = r#"{"actions":[{"output":{"value":{"amount":{"lo":"1000000000"},"assetId":{"inner":"KeqcLzNx9qSH5+lcJHBB9KNW+YPrBk5dKzvPMiypahA="}},"destAddress":{"inner":"UuFEV0VoZNxNTttsJVJzRqEzW4bm0z2RCxhUneve0KTvDjQipeg/1zx0ftbDjgr6uPiSA70yJIdlpFyxeLyXfAAtmSy6BCpR3YjEkf1bI5Q="},"rseed":"4m4bxumA0sHuonPjr12UnI4CWKj1wuq4y6rrMRb0nw0=","valueBlinding":"HHS7tY19JuWMwdKJvtKs8AmhMVa7osSpZ+CCBszu/AE=","proofBlindingR":"FmbXZoh5Pd2mEtiAEkkAZpllWo9pdwTPlXeODBXHUxA=","proofBlindingS":"0x96kUchW8jFfnxglAoMtvzPT5/RLg2RvfkRKjlU8BA="}},{"spend":{"note":{"value":{"amount":{"lo":"1000000000000"},"assetId":{"inner":"KeqcLzNx9qSH5+lcJHBB9KNW+YPrBk5dKzvPMiypahA="}},"rseed":"3svSxWREwvvVzb2upQuu3Cyr56O2kRbo0nuX4+OWcdc=","address":{"inner":"6146pY5upA9bQa4tag+6hXpMXa2kO5fcicSJGVEUP4HhZt7m4FpwAJ3+qwr5gpbHUON7DigyEJRpeV31FATGdfJhHBzGDWC+CIvi8dyIzGo="}},"position":"90","randomizer":"dJvg8FGvw5rJAvtSQvlQ4imLXahVXn419+xroVMLSwA=","valueBlinding":"Ce1/hBKLEMB/bjEA06b4zUJVEstNUjkDBWM3WrVu+QM=","proofBlindingR":"gXA7M4VR48IoxKrf4w4jGae2O7OGlTecU/RBXd4g6QI=","proofBlindingS":"7+Rhrve7mdgsKbkfFq41yfq9+Mx2qRAZDtwP3VUDAAs="}},{"output":{"value":{"amount":{"lo":"999000000000"},"assetId":{"inner":"KeqcLzNx9qSH5+lcJHBB9KNW+YPrBk5dKzvPMiypahA="}},"destAddress":{"inner":"6146pY5upA9bQa4tag+6hXpMXa2kO5fcicSJGVEUP4HhZt7m4FpwAJ3+qwr5gpbHUON7DigyEJRpeV31FATGdfJhHBzGDWC+CIvi8dyIzGo="},"rseed":"rCTbPc6xWyEcDV73Pl+W6XXbACShVOM+8/vdc7RSLlo=","valueBlinding":"DP0FN5CV4g9xZN6u2W6/4o6I/Zwr38n81q4YnJ6COAA=","proofBlindingR":"KV3u8Dc+cZo0HFUIn7n95UkQVXWeYp+3vAVuIpCIZRI=","proofBlindingS":"i00KyJVklWXUhVRy37N3p9szFIvo7383to/qxBexnBE="}}],"chainId":"penumbra-testnet-rhea-8b2dfc5c","fee":{"amount":{}},"cluePlans":[{"address":{"inner":"UuFEV0VoZNxNTttsJVJzRqEzW4bm0z2RCxhUneve0KTvDjQipeg/1zx0ftbDjgr6uPiSA70yJIdlpFyxeLyXfAAtmSy6BCpR3YjEkf1bI5Q="},"rseed":"1Li0Qx05txsyOrx2pfO9kD5rDSUMy9e+j/hHmucqARI="},{"address":{"inner":"6146pY5upA9bQa4tag+6hXpMXa2kO5fcicSJGVEUP4HhZt7m4FpwAJ3+qwr5gpbHUON7DigyEJRpeV31FATGdfJhHBzGDWC+CIvi8dyIzGo="},"rseed":"ePtCm9/tFcpLBdlgyu8bYRKV5CHbqd823UGDhG1LsGY="}],"memoPlan":{"plaintext":{"returnAddress":{"inner":"OB8AEHEehWo0o0/Dn7JtNmgdDX1VRPaDgn6MLl6n41hVjI3llljrTDCFRRjN5mkNwVwsAyJ/UdfjNIFzbGV62YVXfBJ/IMVTq2CNAHwR8Qo="}},"key":"3plOcPZzKKj8KT3sVdKnblUUFDRzCmMWYtgwB3BqfXQ="}}"#; + const TEST_PLAN: &'static str = r#" +{ + "actions": [ + { + "output": { + "value": { + "amount": { + "lo": "1000000000" + }, + "assetId": { + "inner": "KeqcLzNx9qSH5+lcJHBB9KNW+YPrBk5dKzvPMiypahA=" + } + }, + "destAddress": { + "inner": "UuFEV0VoZNxNTttsJVJzRqEzW4bm0z2RCxhUneve0KTvDjQipeg/1zx0ftbDjgr6uPiSA70yJIdlpFyxeLyXfAAtmSy6BCpR3YjEkf1bI5Q=" + }, + "rseed": "4m4bxumA0sHuonPjr12UnI4CWKj1wuq4y6rrMRb0nw0=", + "valueBlinding": "HHS7tY19JuWMwdKJvtKs8AmhMVa7osSpZ+CCBszu/AE=", + "proofBlindingR": "FmbXZoh5Pd2mEtiAEkkAZpllWo9pdwTPlXeODBXHUxA=", + "proofBlindingS": "0x96kUchW8jFfnxglAoMtvzPT5/RLg2RvfkRKjlU8BA=" + } + }, + { + "spend": { + "note": { + "value": { + "amount": { + "lo": "1000000000000" + }, + "assetId": { + "inner": "KeqcLzNx9qSH5+lcJHBB9KNW+YPrBk5dKzvPMiypahA=" + } + }, + "rseed": "3svSxWREwvvVzb2upQuu3Cyr56O2kRbo0nuX4+OWcdc=", + "address": { + "inner": "6146pY5upA9bQa4tag+6hXpMXa2kO5fcicSJGVEUP4HhZt7m4FpwAJ3+qwr5gpbHUON7DigyEJRpeV31FATGdfJhHBzGDWC+CIvi8dyIzGo=" + } + }, + "position": "90", + "randomizer": "dJvg8FGvw5rJAvtSQvlQ4imLXahVXn419+xroVMLSwA=", + "valueBlinding": "Ce1/hBKLEMB/bjEA06b4zUJVEstNUjkDBWM3WrVu+QM=", + "proofBlindingR": "gXA7M4VR48IoxKrf4w4jGae2O7OGlTecU/RBXd4g6QI=", + "proofBlindingS": "7+Rhrve7mdgsKbkfFq41yfq9+Mx2qRAZDtwP3VUDAAs=" + } + }, + { + "output": { + "value": { + "amount": { + "lo": "999000000000" + }, + "assetId": { + "inner": "KeqcLzNx9qSH5+lcJHBB9KNW+YPrBk5dKzvPMiypahA=" + } + }, + "destAddress": { + "inner": "6146pY5upA9bQa4tag+6hXpMXa2kO5fcicSJGVEUP4HhZt7m4FpwAJ3+qwr5gpbHUON7DigyEJRpeV31FATGdfJhHBzGDWC+CIvi8dyIzGo=" + }, + "rseed": "rCTbPc6xWyEcDV73Pl+W6XXbACShVOM+8/vdc7RSLlo=", + "valueBlinding": "DP0FN5CV4g9xZN6u2W6/4o6I/Zwr38n81q4YnJ6COAA=", + "proofBlindingR": "KV3u8Dc+cZo0HFUIn7n95UkQVXWeYp+3vAVuIpCIZRI=", + "proofBlindingS": "i00KyJVklWXUhVRy37N3p9szFIvo7383to/qxBexnBE=" + } + } + ], + "transactionParameters": { + "chainId": "penumbra-testnet-rhea-8b2dfc5c", + "fee": { + "amount": {} + } + }, + "detectionData": { + "cluePlans": [ + { + "address": { + "inner": "UuFEV0VoZNxNTttsJVJzRqEzW4bm0z2RCxhUneve0KTvDjQipeg/1zx0ftbDjgr6uPiSA70yJIdlpFyxeLyXfAAtmSy6BCpR3YjEkf1bI5Q=" + }, + "rseed": "1Li0Qx05txsyOrx2pfO9kD5rDSUMy9e+j/hHmucqARI=" + }, + { + "address": { + "inner": "6146pY5upA9bQa4tag+6hXpMXa2kO5fcicSJGVEUP4HhZt7m4FpwAJ3+qwr5gpbHUON7DigyEJRpeV31FATGdfJhHBzGDWC+CIvi8dyIzGo=" + }, + "rseed": "ePtCm9/tFcpLBdlgyu8bYRKV5CHbqd823UGDhG1LsGY=" + } + ] + }, + "memoData": { + "plaintext": { + "returnAddress": { + "inner": "OB8AEHEehWo0o0/Dn7JtNmgdDX1VRPaDgn6MLl6n41hVjI3llljrTDCFRRjN5mkNwVwsAyJ/UdfjNIFzbGV62YVXfBJ/IMVTq2CNAHwR8Qo=" + } + }, + "key": "3plOcPZzKKj8KT3sVdKnblUUFDRzCmMWYtgwB3BqfXQ=" + } +} + "#; const T: u16 = 3; const N: u16 = 3; From 0e9b4f8d5d6eaeef304ca4954f52d007143aec8f Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Fri, 29 Dec 2023 10:32:40 -0500 Subject: [PATCH 07/84] proto: deduplicate memo protos --- .../app/src/action_handler/transaction.rs | 4 +- crates/core/transaction/src/effect_hash.rs | 6 +- crates/core/transaction/src/plan.rs | 10 +- crates/core/transaction/src/plan/build.rs | 2 +- crates/core/transaction/src/plan/memo.rs | 8 +- crates/core/transaction/src/transaction.rs | 46 +- crates/custody/src/threshold.rs | 2 +- .../gen/penumbra.core.transaction.v1alpha1.rs | 40 +- ...enumbra.core.transaction.v1alpha1.serde.rs | 297 +-- .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 338827 -> 338980 bytes crates/view/src/planner.rs | 6 +- crates/wallet/src/plan.rs | 2 +- crates/wasm/src/build.rs | 2 +- crates/wasm/src/planner.rs | 6 +- .../transaction/v1alpha1/transaction.pb.go | 1911 ++++++++--------- .../transaction/v1alpha1/transaction.proto | 27 +- 16 files changed, 1094 insertions(+), 1275 deletions(-) diff --git a/crates/core/app/src/action_handler/transaction.rs b/crates/core/app/src/action_handler/transaction.rs index d60ffa3d7b..a720c9030e 100644 --- a/crates/core/app/src/action_handler/transaction.rs +++ b/crates/core/app/src/action_handler/transaction.rs @@ -164,7 +164,7 @@ mod tests { detection_data: DetectionDataPlan { clue_plans: vec![CluePlan::new(&mut OsRng, *test_keys::ADDRESS_1, 1)], }, - memo_data: None, + memo: None, }; // Build the transaction. @@ -227,7 +227,7 @@ mod tests { OutputPlan::new(&mut OsRng, value, *test_keys::ADDRESS_1).into(), ], detection_data: DetectionDataPlan { clue_plans: vec![] }, - memo_data: None, + memo: None, }; // Build the transaction. diff --git a/crates/core/transaction/src/effect_hash.rs b/crates/core/transaction/src/effect_hash.rs index 858547b153..1943c33eea 100644 --- a/crates/core/transaction/src/effect_hash.rs +++ b/crates/core/transaction/src/effect_hash.rs @@ -107,9 +107,9 @@ impl TransactionPlan { // Hash the memo and save the memo key for use with outputs later. let mut memo_key: Option = None; - if self.memo_data.is_some() { + if self.memo.is_some() { let memo_plan = self - .memo_data + .memo .clone() .expect("memo_plan must be present in TransactionPlan"); let memo_ciphertext = memo_plan.memo().expect("can compute ciphertext"); @@ -537,7 +537,7 @@ mod tests { detection_data: DetectionDataPlan { clue_plans: vec![CluePlan::new(&mut OsRng, addr, 1)], }, - memo_data: Some(MemoPlan::new(&mut OsRng, memo_plaintext.clone()).unwrap()), + memo: Some(MemoPlan::new(&mut OsRng, memo_plaintext.clone()).unwrap()), }; println!("{}", serde_json::to_string_pretty(&plan).unwrap()); diff --git a/crates/core/transaction/src/plan.rs b/crates/core/transaction/src/plan.rs index cff2fe2e92..3cd9ae5360 100644 --- a/crates/core/transaction/src/plan.rs +++ b/crates/core/transaction/src/plan.rs @@ -42,7 +42,7 @@ pub struct TransactionPlan { pub actions: Vec, pub transaction_parameters: TransactionParameters, pub detection_data: DetectionDataPlan, - pub memo_data: Option, + pub memo: Option, } impl TransactionPlan { @@ -292,9 +292,7 @@ impl TransactionPlan { /// Convenience method to grab the `MemoKey` from the plan. pub fn memo_key(&self) -> Option { - self.memo_data - .as_ref() - .map(|memo_plan| memo_plan.key.clone()) + self.memo.as_ref().map(|memo_plan| memo_plan.key.clone()) } } @@ -308,7 +306,7 @@ impl From for pb::TransactionPlan { actions: msg.actions.into_iter().map(Into::into).collect(), transaction_parameters: Some(msg.transaction_parameters.into()), detection_data: Some(msg.detection_data.into()), - memo_data: msg.memo_data.map(Into::into), + memo: msg.memo.map(Into::into), } } } @@ -330,7 +328,7 @@ impl TryFrom for TransactionPlan { .detection_data .ok_or_else(|| anyhow::anyhow!("transaction plan missing detection data"))? .try_into()?, - memo_data: value.memo_data.map(TryInto::try_into).transpose()?, + memo: value.memo.map(TryInto::try_into).transpose()?, }) } } diff --git a/crates/core/transaction/src/plan/build.rs b/crates/core/transaction/src/plan/build.rs index a0529fd987..64fd02305a 100644 --- a/crates/core/transaction/src/plan/build.rs +++ b/crates/core/transaction/src/plan/build.rs @@ -25,7 +25,7 @@ impl TransactionPlan { ) -> Result { // Add the memo if it is planned. let memo = self - .memo_data + .memo .as_ref() .map(|memo_data| memo_data.memo()) .transpose()?; diff --git a/crates/core/transaction/src/plan/memo.rs b/crates/core/transaction/src/plan/memo.rs index 6b5ea36a54..5b254e0d74 100644 --- a/crates/core/transaction/src/plan/memo.rs +++ b/crates/core/transaction/src/plan/memo.rs @@ -29,10 +29,10 @@ impl MemoPlan { } impl DomainType for MemoPlan { - type Proto = pb::MemoDataPlan; + type Proto = pb::MemoPlan; } -impl From for pb::MemoDataPlan { +impl From for pb::MemoPlan { fn from(msg: MemoPlan) -> Self { let return_address = Some(msg.plaintext.return_address.into()); let text = msg.plaintext.text; @@ -46,10 +46,10 @@ impl From for pb::MemoDataPlan { } } -impl TryFrom for MemoPlan { +impl TryFrom for MemoPlan { type Error = anyhow::Error; - fn try_from(msg: pb::MemoDataPlan) -> Result { + fn try_from(msg: pb::MemoPlan) -> Result { let sender: Address = msg .plaintext .clone() diff --git a/crates/core/transaction/src/transaction.rs b/crates/core/transaction/src/transaction.rs index 428ef3cc8e..917b900daf 100644 --- a/crates/core/transaction/src/transaction.rs +++ b/crates/core/transaction/src/transaction.rs @@ -539,22 +539,11 @@ impl DomainType for TransactionBody { impl From for pbt::TransactionBody { fn from(msg: TransactionBody) -> Self { - // TODO: this doesn't seem right, why do we have so many different memo handling types - // and behaviors? why are we encoding Some(encrypted_memo) of a possibly-empty byte vector? - let encrypted_memo: pbt::MemoData = match msg.memo { - Some(memo) => pbt::MemoData { - encrypted_memo: memo.0.to_vec(), - }, - None => pbt::MemoData { - encrypted_memo: Default::default(), - }, - }; - pbt::TransactionBody { actions: msg.actions.into_iter().map(|x| x.into()).collect(), transaction_parameters: Some(msg.transaction_parameters.into()), detection_data: msg.detection_data.map(|x| x.into()), - memo_data: Some(encrypted_memo), + memo: msg.memo.map(Into::into), } } } @@ -572,28 +561,17 @@ impl TryFrom for TransactionBody { ); } - let encrypted_memo = proto - .memo_data - .ok_or_else(|| anyhow::anyhow!("transaction body missing memo data field"))? - .encrypted_memo; - - let memo: Option = if encrypted_memo.is_empty() { - None - } else { - Some( - encrypted_memo[..] - .try_into() - .context("encrypted memo malformed while parsing transaction body")?, - ) - }; - - let detection_data = match proto.detection_data { - Some(data) => Some( - data.try_into() - .context("detection data malformed while parsing transaction body")?, - ), - None => None, - }; + let memo = proto + .memo + .map(TryFrom::try_from) + .transpose() + .context("encrypted memo malformed while parsing transaction body")?; + + let detection_data = proto + .detection_data + .map(TryFrom::try_from) + .transpose() + .context("detection data malformed while parsing transaction body")?; let transaction_parameters = proto .transaction_parameters diff --git a/crates/custody/src/threshold.rs b/crates/custody/src/threshold.rs index a1769b48e4..c33f09b155 100644 --- a/crates/custody/src/threshold.rs +++ b/crates/custody/src/threshold.rs @@ -547,7 +547,7 @@ mod test { } ] }, - "memoData": { + "memo": { "plaintext": { "returnAddress": { "inner": "OB8AEHEehWo0o0/Dn7JtNmgdDX1VRPaDgn6MLl6n41hVjI3llljrTDCFRRjN5mkNwVwsAyJ/UdfjNIFzbGV62YVXfBJ/IMVTq2CNAHwR8Qo=" diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs index c59af1c93c..a8cf7d648d 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs @@ -50,9 +50,11 @@ pub struct TransactionBody { /// Detection data for use with Fuzzy Message Detection #[prost(message, optional, tag = "4")] pub detection_data: ::core::option::Option, - /// Sub-message containing memo ciphertext if a memo was added to the transaction. + /// The encrypted memo for this transaction. + /// + /// This field will be present if and only if the transaction has outputs. #[prost(message, optional, tag = "5")] - pub memo_data: ::core::option::Option, + pub memo: ::core::option::Option, } impl ::prost::Name for TransactionBody { const NAME: &'static str = "TransactionBody"; @@ -61,22 +63,6 @@ impl ::prost::Name for TransactionBody { ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) } } -/// Represents the encrypted memo data. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct MemoData { - /// The encrypted data. It will only be populated if there are - /// outputs in the actions of the transaction. 528 bytes. - #[prost(bytes = "vec", tag = "1")] - pub encrypted_memo: ::prost::alloc::vec::Vec, -} -impl ::prost::Name for MemoData { - const NAME: &'static str = "MemoData"; - const PACKAGE: &'static str = "penumbra.core.transaction.v1alpha1"; - fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) - } -} /// The parameters determining if a transaction should be accepted by the chain. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -506,7 +492,7 @@ pub struct TransactionPlan { pub detection_data: ::core::option::Option, /// The memo plan for this transaction. #[prost(message, optional, tag = "5")] - pub memo_data: ::core::option::Option, + pub memo: ::core::option::Option, } impl ::prost::Name for TransactionPlan { const NAME: &'static str = "TransactionPlan"; @@ -647,10 +633,10 @@ impl ::prost::Name for CluePlan { ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) } } -/// Describes a plan for forming a `MemoData`. +/// Describes a plan for forming the transaction memo. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct MemoDataPlan { +pub struct MemoPlan { /// The plaintext. #[prost(message, optional, tag = "1")] pub plaintext: ::core::option::Option, @@ -658,16 +644,18 @@ pub struct MemoDataPlan { #[prost(bytes = "vec", tag = "2")] pub key: ::prost::alloc::vec::Vec, } -impl ::prost::Name for MemoDataPlan { - const NAME: &'static str = "MemoDataPlan"; +impl ::prost::Name for MemoPlan { + const NAME: &'static str = "MemoPlan"; const PACKAGE: &'static str = "penumbra.core.transaction.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) } } +/// The encrypted memo data describing information about the purpose of a transaction. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MemoCiphertext { + /// The encrypted data. 528 bytes. #[prost(bytes = "vec", tag = "1")] pub inner: ::prost::alloc::vec::Vec, } @@ -678,11 +666,17 @@ impl ::prost::Name for MemoCiphertext { ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) } } +/// The plaintext describing information about the purpose of a transaction. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MemoPlaintext { + /// The sender's return address. + /// + /// This should always be a valid address; the sender is responsible for ensuring + /// that if the receiver returns funds to this address, they will not be lost. #[prost(message, optional, tag = "1")] pub return_address: ::core::option::Option, + /// Free-form text, up to 432 bytes long. #[prost(string, tag = "2")] pub text: ::prost::alloc::string::String, } diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs index d9fbce4aa2..560a7a7070 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs @@ -1881,102 +1881,7 @@ impl<'de> serde::Deserialize<'de> for MemoCiphertext { deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoCiphertext", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for MemoData { - #[allow(deprecated)] - fn serialize(&self, serializer: S) -> std::result::Result - where - S: serde::Serializer, - { - use serde::ser::SerializeStruct; - let mut len = 0; - if !self.encrypted_memo.is_empty() { - len += 1; - } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoData", len)?; - if !self.encrypted_memo.is_empty() { - #[allow(clippy::needless_borrow)] - struct_ser.serialize_field("encryptedMemo", pbjson::private::base64::encode(&self.encrypted_memo).as_str())?; - } - struct_ser.end() - } -} -impl<'de> serde::Deserialize<'de> for MemoData { - #[allow(deprecated)] - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - const FIELDS: &[&str] = &[ - "encrypted_memo", - "encryptedMemo", - ]; - - #[allow(clippy::enum_variant_names)] - enum GeneratedField { - EncryptedMemo, - } - impl<'de> serde::Deserialize<'de> for GeneratedField { - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - struct GeneratedVisitor; - - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = GeneratedField; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(formatter, "expected one of: {:?}", &FIELDS) - } - - #[allow(unused_variables)] - fn visit_str(self, value: &str) -> std::result::Result - where - E: serde::de::Error, - { - match value { - "encryptedMemo" | "encrypted_memo" => Ok(GeneratedField::EncryptedMemo), - _ => Err(serde::de::Error::unknown_field(value, FIELDS)), - } - } - } - deserializer.deserialize_identifier(GeneratedVisitor) - } - } - struct GeneratedVisitor; - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = MemoData; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoData") - } - - fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, - { - let mut encrypted_memo__ = None; - while let Some(k) = map_.next_key()? { - match k { - GeneratedField::EncryptedMemo => { - if encrypted_memo__.is_some() { - return Err(serde::de::Error::duplicate_field("encryptedMemo")); - } - encrypted_memo__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; - } - } - } - Ok(MemoData { - encrypted_memo: encrypted_memo__.unwrap_or_default(), - }) - } - } - deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoData", FIELDS, GeneratedVisitor) - } -} -impl serde::Serialize for MemoDataPlan { +impl serde::Serialize for MemoPlaintext { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -1984,38 +1889,38 @@ impl serde::Serialize for MemoDataPlan { { use serde::ser::SerializeStruct; let mut len = 0; - if self.plaintext.is_some() { + if self.return_address.is_some() { len += 1; } - if !self.key.is_empty() { + if !self.text.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoDataPlan", len)?; - if let Some(v) = self.plaintext.as_ref() { - struct_ser.serialize_field("plaintext", v)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintext", len)?; + if let Some(v) = self.return_address.as_ref() { + struct_ser.serialize_field("returnAddress", v)?; } - if !self.key.is_empty() { - #[allow(clippy::needless_borrow)] - struct_ser.serialize_field("key", pbjson::private::base64::encode(&self.key).as_str())?; + if !self.text.is_empty() { + struct_ser.serialize_field("text", &self.text)?; } struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for MemoDataPlan { +impl<'de> serde::Deserialize<'de> for MemoPlaintext { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where D: serde::Deserializer<'de>, { const FIELDS: &[&str] = &[ - "plaintext", - "key", + "return_address", + "returnAddress", + "text", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { - Plaintext, - Key, + ReturnAddress, + Text, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -2037,8 +1942,8 @@ impl<'de> serde::Deserialize<'de> for MemoDataPlan { E: serde::de::Error, { match value { - "plaintext" => Ok(GeneratedField::Plaintext), - "key" => Ok(GeneratedField::Key), + "returnAddress" | "return_address" => Ok(GeneratedField::ReturnAddress), + "text" => Ok(GeneratedField::Text), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -2048,46 +1953,44 @@ impl<'de> serde::Deserialize<'de> for MemoDataPlan { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = MemoDataPlan; + type Value = MemoPlaintext; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoDataPlan") + formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoPlaintext") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { - let mut plaintext__ = None; - let mut key__ = None; + let mut return_address__ = None; + let mut text__ = None; while let Some(k) = map_.next_key()? { match k { - GeneratedField::Plaintext => { - if plaintext__.is_some() { - return Err(serde::de::Error::duplicate_field("plaintext")); + GeneratedField::ReturnAddress => { + if return_address__.is_some() { + return Err(serde::de::Error::duplicate_field("returnAddress")); } - plaintext__ = map_.next_value()?; + return_address__ = map_.next_value()?; } - GeneratedField::Key => { - if key__.is_some() { - return Err(serde::de::Error::duplicate_field("key")); + GeneratedField::Text => { + if text__.is_some() { + return Err(serde::de::Error::duplicate_field("text")); } - key__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; + text__ = Some(map_.next_value()?); } } } - Ok(MemoDataPlan { - plaintext: plaintext__, - key: key__.unwrap_or_default(), + Ok(MemoPlaintext { + return_address: return_address__, + text: text__.unwrap_or_default(), }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoDataPlan", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintext", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for MemoPlaintext { +impl serde::Serialize for MemoPlaintextView { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -2101,7 +2004,7 @@ impl serde::Serialize for MemoPlaintext { if !self.text.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintext", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintextView", len)?; if let Some(v) = self.return_address.as_ref() { struct_ser.serialize_field("returnAddress", v)?; } @@ -2111,7 +2014,7 @@ impl serde::Serialize for MemoPlaintext { struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for MemoPlaintext { +impl<'de> serde::Deserialize<'de> for MemoPlaintextView { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where @@ -2159,13 +2062,13 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintext { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = MemoPlaintext; + type Value = MemoPlaintextView; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoPlaintext") + formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoPlaintextView") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { @@ -2187,16 +2090,16 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintext { } } } - Ok(MemoPlaintext { + Ok(MemoPlaintextView { return_address: return_address__, text: text__.unwrap_or_default(), }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintext", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintextView", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for MemoPlaintextView { +impl serde::Serialize for MemoPlan { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -2204,38 +2107,38 @@ impl serde::Serialize for MemoPlaintextView { { use serde::ser::SerializeStruct; let mut len = 0; - if self.return_address.is_some() { + if self.plaintext.is_some() { len += 1; } - if !self.text.is_empty() { + if !self.key.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintextView", len)?; - if let Some(v) = self.return_address.as_ref() { - struct_ser.serialize_field("returnAddress", v)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoPlan", len)?; + if let Some(v) = self.plaintext.as_ref() { + struct_ser.serialize_field("plaintext", v)?; } - if !self.text.is_empty() { - struct_ser.serialize_field("text", &self.text)?; + if !self.key.is_empty() { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("key", pbjson::private::base64::encode(&self.key).as_str())?; } struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for MemoPlaintextView { +impl<'de> serde::Deserialize<'de> for MemoPlan { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where D: serde::Deserializer<'de>, { const FIELDS: &[&str] = &[ - "return_address", - "returnAddress", - "text", + "plaintext", + "key", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { - ReturnAddress, - Text, + Plaintext, + Key, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -2257,8 +2160,8 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintextView { E: serde::de::Error, { match value { - "returnAddress" | "return_address" => Ok(GeneratedField::ReturnAddress), - "text" => Ok(GeneratedField::Text), + "plaintext" => Ok(GeneratedField::Plaintext), + "key" => Ok(GeneratedField::Key), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -2268,41 +2171,43 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintextView { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = MemoPlaintextView; + type Value = MemoPlan; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoPlaintextView") + formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoPlan") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { - let mut return_address__ = None; - let mut text__ = None; + let mut plaintext__ = None; + let mut key__ = None; while let Some(k) = map_.next_key()? { match k { - GeneratedField::ReturnAddress => { - if return_address__.is_some() { - return Err(serde::de::Error::duplicate_field("returnAddress")); + GeneratedField::Plaintext => { + if plaintext__.is_some() { + return Err(serde::de::Error::duplicate_field("plaintext")); } - return_address__ = map_.next_value()?; + plaintext__ = map_.next_value()?; } - GeneratedField::Text => { - if text__.is_some() { - return Err(serde::de::Error::duplicate_field("text")); + GeneratedField::Key => { + if key__.is_some() { + return Err(serde::de::Error::duplicate_field("key")); } - text__ = Some(map_.next_value()?); + key__ = + Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) + ; } } } - Ok(MemoPlaintextView { - return_address: return_address__, - text: text__.unwrap_or_default(), + Ok(MemoPlan { + plaintext: plaintext__, + key: key__.unwrap_or_default(), }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintextView", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoPlan", FIELDS, GeneratedVisitor) } } impl serde::Serialize for MemoView { @@ -2973,7 +2878,7 @@ impl serde::Serialize for TransactionBody { if self.detection_data.is_some() { len += 1; } - if self.memo_data.is_some() { + if self.memo.is_some() { len += 1; } let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.TransactionBody", len)?; @@ -2986,8 +2891,8 @@ impl serde::Serialize for TransactionBody { if let Some(v) = self.detection_data.as_ref() { struct_ser.serialize_field("detectionData", v)?; } - if let Some(v) = self.memo_data.as_ref() { - struct_ser.serialize_field("memoData", v)?; + if let Some(v) = self.memo.as_ref() { + struct_ser.serialize_field("memo", v)?; } struct_ser.end() } @@ -3004,8 +2909,7 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { "transactionParameters", "detection_data", "detectionData", - "memo_data", - "memoData", + "memo", ]; #[allow(clippy::enum_variant_names)] @@ -3013,7 +2917,7 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { Actions, TransactionParameters, DetectionData, - MemoData, + Memo, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -3038,7 +2942,7 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { "actions" => Ok(GeneratedField::Actions), "transactionParameters" | "transaction_parameters" => Ok(GeneratedField::TransactionParameters), "detectionData" | "detection_data" => Ok(GeneratedField::DetectionData), - "memoData" | "memo_data" => Ok(GeneratedField::MemoData), + "memo" => Ok(GeneratedField::Memo), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -3061,7 +2965,7 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { let mut actions__ = None; let mut transaction_parameters__ = None; let mut detection_data__ = None; - let mut memo_data__ = None; + let mut memo__ = None; while let Some(k) = map_.next_key()? { match k { GeneratedField::Actions => { @@ -3082,11 +2986,11 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { } detection_data__ = map_.next_value()?; } - GeneratedField::MemoData => { - if memo_data__.is_some() { - return Err(serde::de::Error::duplicate_field("memoData")); + GeneratedField::Memo => { + if memo__.is_some() { + return Err(serde::de::Error::duplicate_field("memo")); } - memo_data__ = map_.next_value()?; + memo__ = map_.next_value()?; } } } @@ -3094,7 +2998,7 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { actions: actions__.unwrap_or_default(), transaction_parameters: transaction_parameters__, detection_data: detection_data__, - memo_data: memo_data__, + memo: memo__, }) } } @@ -3575,7 +3479,7 @@ impl serde::Serialize for TransactionPlan { if self.detection_data.is_some() { len += 1; } - if self.memo_data.is_some() { + if self.memo.is_some() { len += 1; } let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.TransactionPlan", len)?; @@ -3588,8 +3492,8 @@ impl serde::Serialize for TransactionPlan { if let Some(v) = self.detection_data.as_ref() { struct_ser.serialize_field("detectionData", v)?; } - if let Some(v) = self.memo_data.as_ref() { - struct_ser.serialize_field("memoData", v)?; + if let Some(v) = self.memo.as_ref() { + struct_ser.serialize_field("memo", v)?; } struct_ser.end() } @@ -3606,8 +3510,7 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { "transactionParameters", "detection_data", "detectionData", - "memo_data", - "memoData", + "memo", ]; #[allow(clippy::enum_variant_names)] @@ -3615,7 +3518,7 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { Actions, TransactionParameters, DetectionData, - MemoData, + Memo, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -3640,7 +3543,7 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { "actions" => Ok(GeneratedField::Actions), "transactionParameters" | "transaction_parameters" => Ok(GeneratedField::TransactionParameters), "detectionData" | "detection_data" => Ok(GeneratedField::DetectionData), - "memoData" | "memo_data" => Ok(GeneratedField::MemoData), + "memo" => Ok(GeneratedField::Memo), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -3663,7 +3566,7 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { let mut actions__ = None; let mut transaction_parameters__ = None; let mut detection_data__ = None; - let mut memo_data__ = None; + let mut memo__ = None; while let Some(k) = map_.next_key()? { match k { GeneratedField::Actions => { @@ -3684,11 +3587,11 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { } detection_data__ = map_.next_value()?; } - GeneratedField::MemoData => { - if memo_data__.is_some() { - return Err(serde::de::Error::duplicate_field("memoData")); + GeneratedField::Memo => { + if memo__.is_some() { + return Err(serde::de::Error::duplicate_field("memo")); } - memo_data__ = map_.next_value()?; + memo__ = map_.next_value()?; } } } @@ -3696,7 +3599,7 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { actions: actions__.unwrap_or_default(), transaction_parameters: transaction_parameters__, detection_data: detection_data__, - memo_data: memo_data__, + memo: memo__, }) } } diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index 9b866518f032c415404d3ed53e83438c4ad03fab..a2715239a6044f8535005bb7e8dcb161b1860f86 100644 GIT binary patch delta 8285 zcmai3YjBiRn(p(SlTPRB-1^Iv=Hkcwk^s39AfO2(K|mxV3>O8oNgBzTbYiCi13ES+ ziVg!qvBi9&=&BSly9^Ga#Z+`^6lcV77JU-OT$ade}Sr=<9F^uKcD zOp({&sDb3bU}cW~cA+fuJ1g<0x>gpE8W{b4p1d$Yd^UQ=bU9z-wrEd(YM!idI{Oo; zu7ElE^BJ-|FL%I+tV5hpXMtQJokP2wTsJ2a`Zx0bvR#yprfcP!B&tSh8sv|}v;)FX zib%S09>wFs-p1WYFPZ8|?;FY_dp$14zqCnKW?|?X_IC9p`+L2;ef|C3&ZIY#P7Wti z8Lw}bmq_(`gQ@;~{5gXVnRFsGoao8)4W_)^iD7SWBr`OU8D8Kx`A!b!3vShy0+D6NSm89(MXP4+AT zt7-ZS=U$YiT-6-9-5*#YH@ga6&5<&v4bc=Aw%q^y64~OHt`)KQh_^gi9YlZ)p3CPi zvIy~(FInm=M!XzXwT2$>H!hV84LR^?jTFL5shmj2RV!$h3^+irt$^(gwsEdD)flhy zR{GbPpf?59T4lT8rC(dyZdf=la_yaKOtKtT-ldirQx0f%sp%GhcGnDBNDgRs zH7#-CK{7b5R~_*JZ`I(QWIB~d^(2?-gPTLyaA39B!w9p!w#5VuBh31h?IwG!D?8O1 zW6A}sQ`xo51+BBb&DucgT(#QJBCgz^tSJK824&YIBHXOpP;ZXMf@LeRFV1tv%#Xj>QB zRWAf>D>h_u&}oq?x2cABu{UQVH8`y+B;D&9#MToRb%`}mU5NX>i8@C9Nw$;{~ z0*YO^T`e|_#h`5;Tc%>rw$HKWqZqX9jZKCYbL9@(ZkA%;?NEB2=jpul6t?O;EF4&2&!Qg_OsIpIi3w8oefgTJcuH31XnPN*o+sTWZ#rV#l z67Y6b+jCL^-p(b>hF9v!9%YYcDR@0&#g>BBGv6*iDQG>-%MGo}l}WY2q$>k0IaXyE zXvwPPz*d$+W#A=mZ*@)!OwF*X9t`dEMT`80EI*77My3P-!#o-LNuN6a43K`(ivWc1 z{ZTy%fI#b?p`U0VMDI7#G0f9{fb^~aAjrU25T2C-QGHLqCfvz#VDkK+NI*mxsHt@_ z*oZJ;SPuEkt#asgd`6I=u^>D-hoUw&ryHu(n+Z?E7;0&C<^?eT(*A$8%2|jZ5hFbo zgQsXZs;4Myh>@OYOO{N-&~6N3fR^#st&p{df%{8l#$xbH%|!Jx3mal&=IApFgczCH zI%i!F12c7x|BDrJbv8^qQuojV(=%UMd*b>5h7GJeRn?AzP0DrEzR)8ApQYl_w=d!a zo0Q9&w4d~S1AuV*DISCag5&;)vn)cm{d4CT8cYvo&F1D3@5IBTA3z{B&eBT?1m45J zc9M#?Igf@83S9?gseCjtAqW`ZI=lM2h1gs#^mD@wh0TX01qZT+E#1 z%nstfc*4KgA*VMuL02aPRTxk1>V&9VU?GSn1kP(9Z5{6Fq~E+sJ_06pby84~apkT~ zisC62f_YL*o#q_j^>Db!ANrrJl83>>L#BQ>UOS#Lz-Xyq;xPlPsB|`BJ)&;-IT8A$ zfA&tfz7E%)dQL=Krw}2dkaFSY1-&g~Km>;Qc@Zgbmav&u>ji)IYT1~@XJmXq;D+MW z0)*!aVqt@Y$oPV2;#tZ>7+(~s*%jgV3+^idTF;oleMNM38E({77sgK)^c_Pz3!=m){DOeO)6^)a z7X&1pt~lRSKNZk;+6axu(4LTdP=6|*@(Ng1Lf0HO9Y6>3jqUmM?`B3E4$_#Z`Eq3#&Yv=H2j z0{YHa!M!LT@O0W@SN&}Kd4R%WXcr0+4-gtpQ=#zyA@WLaHgW!9t{TO;wsK87LG1Cj z^9%=S4-kUQSP^2BkGIb5y6SZS$)=4^dJOG)LFxfQvl%O>uM3DaO>HT0)f)n`Ob-@&S(RQkknR z35Y&zgy>^vdxh!)gzPg`P%jC{zE+Ibd^dbqgnlhVyxwa~d5MwC?!k25et*w;S-qZ5 z)ny*J+*&@*)OQ8BK^P#655Qat;rp(L6j+EP?~3A>gWF0KxZx`z^nw4E^>TR${;yD1 z1oXmc1TEm8SN+yb*aUf&>*Q|Ap@}d{;wRYXlY>-bQ5HzK_J|2i?`1SEXd^ubf z%Q{UU9@^JM_eN(EdMtFqABxbw`z>8^LkT|@AM$0?j0}a`;|>2zmu#xXXN0_A$l}4m=tVVf@H1?3Vl63WFX$vZVnc&PO7uM;0KviiWj8X@H3Hk+^%k^C6+O zA~*a;5&CrWpSxwJD8c_#>W{3E+L5D(i@WJB{FZE8iO*>Nrp*C}95=1500i--D4!hU z07QjA+9wiUCc`Pyn4Si$|;YMK~# zchLWOtE|Z4GXpXb1`x!9WF!nAhzH3?m>5CAJVr*s0D%gqFDF1yA0s1S06~3>jD(31 zB+TPvBn%L!fJVXqgZnrc2?Gf3<76aEj38kSk&!S!-~#G-00`OpG95 zo**M(fItP*7aAZ-m?y|c7+`RpAR}R71PODPj6eng7f@d{fS?|xDlK6EK|M@H!o&y? z=IL=NOBg_Xsly2B)5Pkh8&451xKEFBAz{8tM*hTzB@CcFPkg6*mstJ;RQy;42=y}< z912L7qyESD$_KHrEMSh35%ho{9;KRALu3JSl-fFiArK?zmt&;vHb&MjfOcbfj2@$U zEg|6x>M>fo&dCNjp$Ou9pw8d#&YJQpV}_JgYsF$oE%>>9wH~n2q9R(JV_8jJi}rH74rj9`q~2m6;P{k zKu~``wYGEoVg-oKSwqDLBIX(T-x4ZDSr#+++HN+BnP7MGe))ZJO7@#?hWPaoTH&7!cvsGG*He(O zgu6aZGzCAp@(Zb<{zP9Yll*qZ^bI@uhJ(H#0l_{`#S?;}08zzxnlw4MY)iPrpAZ$t z{V(sARrdm;1$?13AYfpRL=BmH{|OZqIXkg4rEd5&3jGW%Z2Ui7jd{I^Ov39;4)>({ zcJ`$n`1{02g)=mg9vU1@dV{?25Z4|p^eA$Y4-TuEC`Eb5Yc!70= zAKo%9@=cNkeasokE!LT5x#x;0WFeCi?d#_6_r!!GyOb z(cgz}v}1GdPEbej;Ey9bgck;VJNuK~uEDgIO{RuN(pW$Tj)~xfA|I7>vM1SxH!vnG zUO$ecdWXHtAiNO81h3}c`}9l6)L@3w_YV%+qk>*=RM3n*p@3-hO{$y~>^2}4@XajY zmqq@Gw2aTnCElLdUPn5aoR8`TJYK zG@pN`RjQmzzl_q2FINPpD}phwnu-8Hy=*J0$hzV82rr0rNfmH?j~_+;$*Mv^}7|dZdbIDgoO>>HzT#ZpQzHrCC0OJakOdkIN*{={ZxCxQv+J8%U6KG?w z;KLVX<6i_G_~CQR12KNfvrShi-0<&+{$;F6?)P`(a1&gm;3}_;R|$*^_#&t>t35!u zHeM!Nkm8yy6AQs&_kE&&wJ8Fz`#wc@S7GJ^*GcJr`+yK0P!APA#J*1XT6+T`@^vb& nFw|ODKfuWdwyq*jyMTJe0|wS;%v!~sXg&KB delta 8238 zcmZ8mX>e56neF@Ct5)l^mey?vL<`}^E|5SHl8_Jrv>>p+fWT}qiz7s{*%qK>2*EYY zI2vP&w?Hwk3QxQhHf2bL5Mwm)5|c5;2~G$p*Wf9aYdk-uDn+F{PU8HSa%|6>@7;S_ zmHd0BzkAO2-Tm}?XaA$*#78AZN5lwSmgP$Q_f_Eq?dMhF=z1lemEwO!|Bx%Ei{PFz z8B;rZhkAoW(`4=9rFdEwdnoA}I?-D$sXfB#VL-u}J)yL~Rh@7sG|PkLY|{hc9y?=HXB{CKE$(C^*3GriLv z+V2nTN&7O4|XtLjLtNKNm#z8h z3jM};&Hj$VL+L?VEEIBBA~!4#2=X$@ zw{m8sZ$9p zENleXbN33H3~OPnYO$dl(AKJ{4uQ6Inkys+w6#qOyi}MB4cDt>sRDob{=Z8P^!N7n zrCZD%j8Y~VMqPHEsP%PiRx}Ek^_^Wdd#;un)CwEQ1#N?JW0?!uhWe#02HJ+@-If;9 za-(vg7-$=n8F1dEf2I!S(>NiW_7Ps z^g!FJ%<7Di2ioSQRW1hF=AO(tuPhv-xRzVg!c^Sv*+00K53NBrL~)30Q8O(q4v{UD zjSfL%OLL1YIbX}IYLN})gSJ&wIt1F*S#DkCgSNG$6|@X5`T{MtsZQIn0K9G4HCq7Q zwrZzY0N%E?4x6q}%k9|-DFki1nrlT0LEB#AM!gWU?U;~?u%|^@_NsfVQKt z$~r1CP%(IY%A6-rDh97_j_YqRczx)v4hz>>?outO9Diy18dt0adsp^g&|vSX za=So-y$id*91KYobzd?^f&nIHg&3}i+4*c^zP>jN>NE95}MoUmR%s0`HBc|(|!T*A3I98|Z-1B>wt zk>RWeAELu?mz&cK*O_@mOK1$YwR^Ke4S++z$8B;3G$b?*Wi|LfJrp+wDq_$$G~JcV zcHt1t@5WFAw8O#Tc3B4v+{p59R)de%!*R2H5rf9zO0%4SpmDfvp0_I0!0~z{_))v; zo}Np5x*nkkw$FSw9!Z(Kj2Ku)s;Yw*J7ihL59cJtbCMx*(*S^-p;X8Q0y|Sa!y&LU zvt|P+6~nNoqXKhTfOQCjOA~OqgJE<=t%GnyM+GJ@9}6WeRNoUZ zE?B8NRHH@&)rCYL$O2Ar5N$`q)M^JIJ0fa$rkIN0KaNqkBEXrpE!F~HrK4gkFb1~< zC3!k}TtvPfGi`h=Tcyn9Z|CDz2laMC3U;t~l=1DG@7&T~aE}-8dc8b;(T~c!u#iEwIjb z?f{YEw1}Ht0fKm1j5A{nh!m&A^cmjFPzS*vxX~r2HpIhT1%k#~9qv^i%H}!cg{C1f<1|~L^`oUQ3 z*ja$E;-)LuT7a

oFerI{KoBTo0aDF4xSnCiH}kyBKWdU3vH0sAYhGyVYGI> zgP^`FU^)#I!_ z!0efX{IBP{fZH?Gz?@$YuzMzm1Bs#Q2u>tG7(N>X^@6}%R~}Y_w*Mmj*79Y{O3f!& zJ`TGo;Q0Vy`ivAzA0S+xsR9?$MFE##g0OuI=Q#-KMFHbyqo7_CFdBv$)9S|p7S04? z8E}E!G{XD=!o}GzxIY%KafX|x)g__swn5lGhHmWnu)8E0I$RXgOQLJJrFvTZM8E&>`tIJ~x56+LFIVSRn&w|SW-p^3upk5X*f2QJm ztzH*!eQ4o% zpGlk0>W#6j0`JGr4HV2DAl#p!!uLPeVgpKb>0>*b0!E6$k2_K2K8+LH)o@uzAa$qmKknRtDgxNIunHvWN0q5d^UoB zuyi&G?#~1~-8DW!^QlCucY}&m@+!s>R#3e=#)KCHgmX1am_fkoER||?O~4MCAnYJR z*H`#KKo~+B1@)SMA#BI#TcD%A6p;^vNY(r8{eJH-&Xa+?-wn2|mep(U=Rp0EPh;*` z0Ux(F1nE!)2NVcK6KYH7=@Ke=tDjel(gx18a@*x#`+)%;%97q>O&&X=YlGN(;H-UCJ{Oj;6lsgTlRBN zWY!d-VQZ`@c4oyo`X>?jvvp>CLj1`&-eMk{F9ezE5eUNrXl^_}49^!LZVChh^$Srl z$t&j_2aGIVuv2=L|AJ{9{Zd3;3bt&N|CHgw|F1{Al^B@fF*Us~3-XY&O z&jSQ5pcx84P``1O2N2Y6oaNDs{?DD`K%fGeTMJN3W^6qVaM;><9?g645egEUWm5wH zsE?2}6@bY42w7_b2<9UMYr}3y6ON`43XXu80RVG^vh}jF86oRz5CwCDth3SFw@2x3 zosF4h1WnW!8$c*MO4ir_Lg`Vm#zqs2%`sA$6?TN#*#Mh63sG>7k##nJ;2tA;acY9I zd5o;H0Rk1!7#l!PA0umQ06~3>tg+DqV{@FWu>oRJ1Z<88U~rFg8KwnXQK(u z=BY6*I~zcA*CPn(Q)EpMAgE7`QDJPJCTof`v9SSk%ZsnCNl%kCMF@lYG{F?@4;KlX z&B@?b_sIvaM%dS!92;W3qfSz7yPZ3>H79B5vhW_%1Y2{8)M^`KTLb7OmXH2ZRBxOm z+JbtDR<80gVNTeZfbeqcpuZ{Y@7&)%bI9*c2UoVpeG4?P%R$r_BtR$yWDOD^lmdc5 z`Uk$YG{NPZA=R8349;(n3xbnd|F(jmglIf(- zn}jqa+_6hUlkiHGKUN)h5Fgw4>lzw!F2vDUG%)}30l~gRi3u)>)R$;tMR>oKa9ytv zCGhEt#U4l>_J@K$-Y@+OLg)fwxt7R%e~n^s2ch#C6&7I*NtNp86^i^TnYT+kV^=8r z`lVDU*E@xqV1>~Q9!7U@`z?wcASpBK@og*42NMHn!Z8!=ESRJ9Lv5* zc!$QF212I+%>VXqM1RREKMS$S`+*MSjqt^&uY0Vgwq2)E+1N_FNOu~S?NAwG8K!6c`kGx`pqa5av zualbM6?wS^qiFn~y-fBOP_9$5Vyp?WUnkf@r-26V6TV|P2D=gbP&)QQ*aENYvMnI- zK5sZvrO?qEM8C>b$=%J|Adh>&WeP6ygRwG!kpe$xtB4;!`CzO{{D2f6m?|+4?8JUe zbjzg(o!GA_#*>OL>)#}0Y$OoW?*leV9T?&_Dc|@(KuF)DapNr)!QWu1hSOXYS}{Pg Y7Xia)yx2uS{mrpNT8<{ts^tCu2PY%K+W-In diff --git a/crates/view/src/planner.rs b/crates/view/src/planner.rs index 119ae5e25b..526d1b2019 100644 --- a/crates/view/src/planner.rs +++ b/crates/view/src/planner.rs @@ -146,7 +146,7 @@ impl Planner { /// Errors if the memo is too long. #[instrument(skip(self))] pub fn memo(&mut self, memo: MemoPlaintext) -> anyhow::Result<&mut Self> { - self.plan.memo_data = Some(MemoPlan::new(&mut self.rng, memo)?); + self.plan.memo = Some(MemoPlan::new(&mut self.rng, memo)?); Ok(self) } @@ -622,10 +622,10 @@ impl Planner { } // If there are outputs, we check that a memo has been added. If not, we add a blank memo. - if self.plan.num_outputs() > 0 && self.plan.memo_data.is_none() { + if self.plan.num_outputs() > 0 && self.plan.memo.is_none() { self.memo(MemoPlaintext::blank_memo(self_address.clone())) .expect("empty string is a valid memo"); - } else if self.plan.num_outputs() == 0 && self.plan.memo_data.is_some() { + } else if self.plan.num_outputs() == 0 && self.plan.memo.is_some() { anyhow::bail!("if no outputs, no memo should be added"); } diff --git a/crates/wallet/src/plan.rs b/crates/wallet/src/plan.rs index f58cba714e..01a4f3b947 100644 --- a/crates/wallet/src/plan.rs +++ b/crates/wallet/src/plan.rs @@ -185,7 +185,7 @@ where ..Default::default() }, // The transaction doesn't need a memo, because it's to ourselves. - memo_data: None, + memo: None, ..Default::default() }; diff --git a/crates/wasm/src/build.rs b/crates/wasm/src/build.rs index 1d0d626c99..9ff7f5070f 100644 --- a/crates/wasm/src/build.rs +++ b/crates/wasm/src/build.rs @@ -36,7 +36,7 @@ pub fn build_action( let full_viewing_key: FullViewingKey = FullViewingKey::from_str(full_viewing_key)?; - let memo_key = transaction_plan.memo_data.map(|memo_plan| memo_plan.key); + let memo_key = transaction_plan.memo.map(|memo_plan| memo_plan.key); let action = ActionPlan::build_unauth(action_plan, &full_viewing_key, &witness, memo_key)?; diff --git a/crates/wasm/src/planner.rs b/crates/wasm/src/planner.rs index bc8d7fe762..2f8ffce8db 100644 --- a/crates/wasm/src/planner.rs +++ b/crates/wasm/src/planner.rs @@ -138,7 +138,7 @@ impl Planner { /// /// Errors if the memo is too long. pub fn memo(&mut self, memo: MemoPlaintext) -> Result<&mut Self> { - self.plan.memo_data = Some(MemoPlan::new(&mut self.rng, memo)?); + self.plan.memo = Some(MemoPlan::new(&mut self.rng, memo)?); Ok(self) } @@ -531,9 +531,9 @@ impl Planner { } // If there are outputs, we check that a memo has been added. If not, we add a blank memo. - if self.plan.num_outputs() > 0 && self.plan.memo_data.is_none() { + if self.plan.num_outputs() > 0 && self.plan.memo.is_none() { self.memo(MemoPlaintext::blank_memo(self_address))?; - } else if self.plan.num_outputs() == 0 && self.plan.memo_data.is_some() { + } else if self.plan.num_outputs() == 0 && self.plan.memo.is_some() { anyhow::bail!("if no outputs, no memo should be added"); } diff --git a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go index 73c34f2acf..92809ccc3d 100644 --- a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go +++ b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go @@ -159,8 +159,10 @@ type TransactionBody struct { TransactionParameters *TransactionParameters `protobuf:"bytes,2,opt,name=transaction_parameters,json=transactionParameters,proto3" json:"transaction_parameters,omitempty"` // Detection data for use with Fuzzy Message Detection DetectionData *DetectionData `protobuf:"bytes,4,opt,name=detection_data,json=detectionData,proto3" json:"detection_data,omitempty"` - // Sub-message containing memo ciphertext if a memo was added to the transaction. - MemoData *MemoData `protobuf:"bytes,5,opt,name=memo_data,json=memoData,proto3" json:"memo_data,omitempty"` + // The encrypted memo for this transaction. + // + // This field will be present if and only if the transaction has outputs. + Memo *MemoCiphertext `protobuf:"bytes,5,opt,name=memo,proto3" json:"memo,omitempty"` } func (x *TransactionBody) Reset() { @@ -216,59 +218,9 @@ func (x *TransactionBody) GetDetectionData() *DetectionData { return nil } -func (x *TransactionBody) GetMemoData() *MemoData { +func (x *TransactionBody) GetMemo() *MemoCiphertext { if x != nil { - return x.MemoData - } - return nil -} - -// Represents the encrypted memo data. -type MemoData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The encrypted data. It will only be populated if there are - // outputs in the actions of the transaction. 528 bytes. - EncryptedMemo []byte `protobuf:"bytes,1,opt,name=encrypted_memo,json=encryptedMemo,proto3" json:"encrypted_memo,omitempty"` -} - -func (x *MemoData) Reset() { - *x = MemoData{} - if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MemoData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MemoData) ProtoMessage() {} - -func (x *MemoData) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MemoData.ProtoReflect.Descriptor instead. -func (*MemoData) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{3} -} - -func (x *MemoData) GetEncryptedMemo() []byte { - if x != nil { - return x.EncryptedMemo + return x.Memo } return nil } @@ -293,7 +245,7 @@ type TransactionParameters struct { func (x *TransactionParameters) Reset() { *x = TransactionParameters{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[4] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -306,7 +258,7 @@ func (x *TransactionParameters) String() string { func (*TransactionParameters) ProtoMessage() {} func (x *TransactionParameters) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[4] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -319,7 +271,7 @@ func (x *TransactionParameters) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionParameters.ProtoReflect.Descriptor instead. func (*TransactionParameters) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{4} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{3} } func (x *TransactionParameters) GetExpiryHeight() uint64 { @@ -356,7 +308,7 @@ type DetectionData struct { func (x *DetectionData) Reset() { *x = DetectionData{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[5] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -369,7 +321,7 @@ func (x *DetectionData) String() string { func (*DetectionData) ProtoMessage() {} func (x *DetectionData) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[5] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -382,7 +334,7 @@ func (x *DetectionData) ProtoReflect() protoreflect.Message { // Deprecated: Use DetectionData.ProtoReflect.Descriptor instead. func (*DetectionData) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{5} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{4} } func (x *DetectionData) GetFmdClues() []*v1alpha13.Clue { @@ -428,7 +380,7 @@ type Action struct { func (x *Action) Reset() { *x = Action{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[6] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -441,7 +393,7 @@ func (x *Action) String() string { func (*Action) ProtoMessage() {} func (x *Action) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[6] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -454,7 +406,7 @@ func (x *Action) ProtoReflect() protoreflect.Message { // Deprecated: Use Action.ProtoReflect.Descriptor instead. func (*Action) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{6} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{5} } func (m *Action) GetAction() isAction_Action { @@ -782,7 +734,7 @@ type TransactionPerspective struct { func (x *TransactionPerspective) Reset() { *x = TransactionPerspective{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[7] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -795,7 +747,7 @@ func (x *TransactionPerspective) String() string { func (*TransactionPerspective) ProtoMessage() {} func (x *TransactionPerspective) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[7] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -808,7 +760,7 @@ func (x *TransactionPerspective) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionPerspective.ProtoReflect.Descriptor instead. func (*TransactionPerspective) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{7} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{6} } func (x *TransactionPerspective) GetPayloadKeys() []*PayloadKeyWithCommitment { @@ -865,7 +817,7 @@ type PayloadKeyWithCommitment struct { func (x *PayloadKeyWithCommitment) Reset() { *x = PayloadKeyWithCommitment{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[8] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -878,7 +830,7 @@ func (x *PayloadKeyWithCommitment) String() string { func (*PayloadKeyWithCommitment) ProtoMessage() {} func (x *PayloadKeyWithCommitment) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[8] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -891,7 +843,7 @@ func (x *PayloadKeyWithCommitment) ProtoReflect() protoreflect.Message { // Deprecated: Use PayloadKeyWithCommitment.ProtoReflect.Descriptor instead. func (*PayloadKeyWithCommitment) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{8} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{7} } func (x *PayloadKeyWithCommitment) GetPayloadKey() *v1alpha19.PayloadKey { @@ -920,7 +872,7 @@ type NullifierWithNote struct { func (x *NullifierWithNote) Reset() { *x = NullifierWithNote{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[9] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -933,7 +885,7 @@ func (x *NullifierWithNote) String() string { func (*NullifierWithNote) ProtoMessage() {} func (x *NullifierWithNote) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[9] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -946,7 +898,7 @@ func (x *NullifierWithNote) ProtoReflect() protoreflect.Message { // Deprecated: Use NullifierWithNote.ProtoReflect.Descriptor instead. func (*NullifierWithNote) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{9} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{8} } func (x *NullifierWithNote) GetNullifier() *v1alpha111.Nullifier { @@ -981,7 +933,7 @@ type TransactionView struct { func (x *TransactionView) Reset() { *x = TransactionView{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[10] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -994,7 +946,7 @@ func (x *TransactionView) String() string { func (*TransactionView) ProtoMessage() {} func (x *TransactionView) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[10] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1007,7 +959,7 @@ func (x *TransactionView) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionView.ProtoReflect.Descriptor instead. func (*TransactionView) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{10} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{9} } func (x *TransactionView) GetBodyView() *TransactionBodyView { @@ -1051,7 +1003,7 @@ type TransactionBodyView struct { func (x *TransactionBodyView) Reset() { *x = TransactionBodyView{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[11] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1064,7 +1016,7 @@ func (x *TransactionBodyView) String() string { func (*TransactionBodyView) ProtoMessage() {} func (x *TransactionBodyView) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[11] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1077,7 +1029,7 @@ func (x *TransactionBodyView) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionBodyView.ProtoReflect.Descriptor instead. func (*TransactionBodyView) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{11} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{10} } func (x *TransactionBodyView) GetActionViews() []*ActionView { @@ -1144,7 +1096,7 @@ type ActionView struct { func (x *ActionView) Reset() { *x = ActionView{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[12] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1157,7 +1109,7 @@ func (x *ActionView) String() string { func (*ActionView) ProtoMessage() {} func (x *ActionView) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[12] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1170,7 +1122,7 @@ func (x *ActionView) ProtoReflect() protoreflect.Message { // Deprecated: Use ActionView.ProtoReflect.Descriptor instead. func (*ActionView) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{12} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{11} } func (m *ActionView) GetActionView() isActionView_ActionView { @@ -1489,7 +1441,7 @@ type EffectHash struct { func (x *EffectHash) Reset() { *x = EffectHash{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[13] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1502,7 +1454,7 @@ func (x *EffectHash) String() string { func (*EffectHash) ProtoMessage() {} func (x *EffectHash) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[13] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1515,7 +1467,7 @@ func (x *EffectHash) ProtoReflect() protoreflect.Message { // Deprecated: Use EffectHash.ProtoReflect.Descriptor instead. func (*EffectHash) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{13} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{12} } func (x *EffectHash) GetInner() []byte { @@ -1544,7 +1496,7 @@ type AuthorizationData struct { func (x *AuthorizationData) Reset() { *x = AuthorizationData{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[14] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1557,7 +1509,7 @@ func (x *AuthorizationData) String() string { func (*AuthorizationData) ProtoMessage() {} func (x *AuthorizationData) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[14] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1570,7 +1522,7 @@ func (x *AuthorizationData) ProtoReflect() protoreflect.Message { // Deprecated: Use AuthorizationData.ProtoReflect.Descriptor instead. func (*AuthorizationData) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{14} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{13} } func (x *AuthorizationData) GetEffectHash() *EffectHash { @@ -1610,7 +1562,7 @@ type WitnessData struct { func (x *WitnessData) Reset() { *x = WitnessData{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[15] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1623,7 +1575,7 @@ func (x *WitnessData) String() string { func (*WitnessData) ProtoMessage() {} func (x *WitnessData) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[15] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1636,7 +1588,7 @@ func (x *WitnessData) ProtoReflect() protoreflect.Message { // Deprecated: Use WitnessData.ProtoReflect.Descriptor instead. func (*WitnessData) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{15} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{14} } func (x *WitnessData) GetAnchor() *v1alpha11.MerkleRoot { @@ -1670,13 +1622,13 @@ type TransactionPlan struct { // Detection data for use with Fuzzy Message Detection DetectionData *DetectionDataPlan `protobuf:"bytes,4,opt,name=detection_data,json=detectionData,proto3" json:"detection_data,omitempty"` // The memo plan for this transaction. - MemoData *MemoDataPlan `protobuf:"bytes,5,opt,name=memo_data,json=memoData,proto3" json:"memo_data,omitempty"` + Memo *MemoPlan `protobuf:"bytes,5,opt,name=memo,proto3" json:"memo,omitempty"` } func (x *TransactionPlan) Reset() { *x = TransactionPlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[16] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1689,7 +1641,7 @@ func (x *TransactionPlan) String() string { func (*TransactionPlan) ProtoMessage() {} func (x *TransactionPlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[16] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1702,7 +1654,7 @@ func (x *TransactionPlan) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionPlan.ProtoReflect.Descriptor instead. func (*TransactionPlan) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{16} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{15} } func (x *TransactionPlan) GetActions() []*ActionPlan { @@ -1726,9 +1678,9 @@ func (x *TransactionPlan) GetDetectionData() *DetectionDataPlan { return nil } -func (x *TransactionPlan) GetMemoData() *MemoDataPlan { +func (x *TransactionPlan) GetMemo() *MemoPlan { if x != nil { - return x.MemoData + return x.Memo } return nil } @@ -1744,7 +1696,7 @@ type DetectionDataPlan struct { func (x *DetectionDataPlan) Reset() { *x = DetectionDataPlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1757,7 +1709,7 @@ func (x *DetectionDataPlan) String() string { func (*DetectionDataPlan) ProtoMessage() {} func (x *DetectionDataPlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1770,7 +1722,7 @@ func (x *DetectionDataPlan) ProtoReflect() protoreflect.Message { // Deprecated: Use DetectionDataPlan.ProtoReflect.Descriptor instead. func (*DetectionDataPlan) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{17} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{16} } func (x *DetectionDataPlan) GetCluePlans() []*CluePlan { @@ -1819,7 +1771,7 @@ type ActionPlan struct { func (x *ActionPlan) Reset() { *x = ActionPlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1832,7 +1784,7 @@ func (x *ActionPlan) String() string { func (*ActionPlan) ProtoMessage() {} func (x *ActionPlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1845,7 +1797,7 @@ func (x *ActionPlan) ProtoReflect() protoreflect.Message { // Deprecated: Use ActionPlan.ProtoReflect.Descriptor instead. func (*ActionPlan) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{18} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{17} } func (m *ActionPlan) GetAction() isActionPlan_Action { @@ -2171,7 +2123,7 @@ type CluePlan struct { func (x *CluePlan) Reset() { *x = CluePlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2184,7 +2136,7 @@ func (x *CluePlan) String() string { func (*CluePlan) ProtoMessage() {} func (x *CluePlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2197,7 +2149,7 @@ func (x *CluePlan) ProtoReflect() protoreflect.Message { // Deprecated: Use CluePlan.ProtoReflect.Descriptor instead. func (*CluePlan) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{19} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{18} } func (x *CluePlan) GetAddress() *v1alpha19.Address { @@ -2221,8 +2173,8 @@ func (x *CluePlan) GetPrecisionBits() uint64 { return 0 } -// Describes a plan for forming a `MemoData`. -type MemoDataPlan struct { +// Describes a plan for forming the transaction memo. +type MemoPlan struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -2233,23 +2185,23 @@ type MemoDataPlan struct { Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` } -func (x *MemoDataPlan) Reset() { - *x = MemoDataPlan{} +func (x *MemoPlan) Reset() { + *x = MemoPlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MemoDataPlan) String() string { +func (x *MemoPlan) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MemoDataPlan) ProtoMessage() {} +func (*MemoPlan) ProtoMessage() {} -func (x *MemoDataPlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20] +func (x *MemoPlan) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2260,37 +2212,39 @@ func (x *MemoDataPlan) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MemoDataPlan.ProtoReflect.Descriptor instead. -func (*MemoDataPlan) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{20} +// Deprecated: Use MemoPlan.ProtoReflect.Descriptor instead. +func (*MemoPlan) Descriptor() ([]byte, []int) { + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{19} } -func (x *MemoDataPlan) GetPlaintext() *MemoPlaintext { +func (x *MemoPlan) GetPlaintext() *MemoPlaintext { if x != nil { return x.Plaintext } return nil } -func (x *MemoDataPlan) GetKey() []byte { +func (x *MemoPlan) GetKey() []byte { if x != nil { return x.Key } return nil } +// The encrypted memo data describing information about the purpose of a transaction. type MemoCiphertext struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // The encrypted data. 528 bytes. Inner []byte `protobuf:"bytes,1,opt,name=inner,proto3" json:"inner,omitempty"` } func (x *MemoCiphertext) Reset() { *x = MemoCiphertext{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2303,7 +2257,7 @@ func (x *MemoCiphertext) String() string { func (*MemoCiphertext) ProtoMessage() {} func (x *MemoCiphertext) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2316,7 +2270,7 @@ func (x *MemoCiphertext) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoCiphertext.ProtoReflect.Descriptor instead. func (*MemoCiphertext) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{21} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{20} } func (x *MemoCiphertext) GetInner() []byte { @@ -2326,19 +2280,25 @@ func (x *MemoCiphertext) GetInner() []byte { return nil } +// The plaintext describing information about the purpose of a transaction. type MemoPlaintext struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // The sender's return address. + // + // This should always be a valid address; the sender is responsible for ensuring + // that if the receiver returns funds to this address, they will not be lost. ReturnAddress *v1alpha19.Address `protobuf:"bytes,1,opt,name=return_address,json=returnAddress,proto3" json:"return_address,omitempty"` - Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` + // Free-form text, up to 432 bytes long. + Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` } func (x *MemoPlaintext) Reset() { *x = MemoPlaintext{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2351,7 +2311,7 @@ func (x *MemoPlaintext) String() string { func (*MemoPlaintext) ProtoMessage() {} func (x *MemoPlaintext) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2364,7 +2324,7 @@ func (x *MemoPlaintext) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoPlaintext.ProtoReflect.Descriptor instead. func (*MemoPlaintext) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{22} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{21} } func (x *MemoPlaintext) GetReturnAddress() *v1alpha19.Address { @@ -2393,7 +2353,7 @@ type MemoPlaintextView struct { func (x *MemoPlaintextView) Reset() { *x = MemoPlaintextView{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2406,7 +2366,7 @@ func (x *MemoPlaintextView) String() string { func (*MemoPlaintextView) ProtoMessage() {} func (x *MemoPlaintextView) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2419,7 +2379,7 @@ func (x *MemoPlaintextView) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoPlaintextView.ProtoReflect.Descriptor instead. func (*MemoPlaintextView) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{23} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{22} } func (x *MemoPlaintextView) GetReturnAddress() *v1alpha19.AddressView { @@ -2451,7 +2411,7 @@ type MemoView struct { func (x *MemoView) Reset() { *x = MemoView{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2464,7 +2424,7 @@ func (x *MemoView) String() string { func (*MemoView) ProtoMessage() {} func (x *MemoView) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2477,7 +2437,7 @@ func (x *MemoView) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoView.ProtoReflect.Descriptor instead. func (*MemoView) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{24} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{23} } func (m *MemoView) GetMemoView() isMemoView_MemoView { @@ -2529,7 +2489,7 @@ type MemoView_Visible struct { func (x *MemoView_Visible) Reset() { *x = MemoView_Visible{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2542,7 +2502,7 @@ func (x *MemoView_Visible) String() string { func (*MemoView_Visible) ProtoMessage() {} func (x *MemoView_Visible) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2555,7 +2515,7 @@ func (x *MemoView_Visible) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoView_Visible.ProtoReflect.Descriptor instead. func (*MemoView_Visible) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{24, 0} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{23, 0} } func (x *MemoView_Visible) GetCiphertext() *MemoCiphertext { @@ -2583,7 +2543,7 @@ type MemoView_Opaque struct { func (x *MemoView_Opaque) Reset() { *x = MemoView_Opaque{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[26] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2596,7 +2556,7 @@ func (x *MemoView_Opaque) String() string { func (*MemoView_Opaque) ProtoMessage() {} func (x *MemoView_Opaque) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[26] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2609,7 +2569,7 @@ func (x *MemoView_Opaque) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoView_Opaque.ProtoReflect.Descriptor instead. func (*MemoView_Opaque) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{24, 1} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{23, 1} } func (x *MemoView_Opaque) GetCiphertext() *MemoCiphertext { @@ -2683,7 +2643,7 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0x18, 0x0a, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, - 0x22, 0xee, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0xeb, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x44, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, @@ -2701,362 +2661,135 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x49, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, - 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, - 0x61, 0x22, 0x31, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, - 0x0e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, - 0x4d, 0x65, 0x6d, 0x6f, 0x22, 0x94, 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x23, - 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x48, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x3b, - 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x22, 0x59, 0x0a, 0x0d, 0x44, - 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x09, - 0x66, 0x6d, 0x64, 0x5f, 0x63, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x66, 0x6d, 0x64, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x66, 0x6d, - 0x64, 0x43, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xbd, 0x10, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x4d, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, - 0x12, 0x50, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x48, 0x00, 0x52, 0x04, - 0x73, 0x77, 0x61, 0x70, 0x12, 0x50, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, - 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, - 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, - 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, - 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, - 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, - 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, - 0x63, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, - 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, - 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, - 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, - 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, - 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, - 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x46, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x54, 0x0a, 0x09, - 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, - 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, - 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, - 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x5a, 0x0a, 0x0b, 0x64, - 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, - 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x61, 0x6f, - 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, - 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, - 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x08, 0x0a, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x97, 0x04, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, - 0x79, 0x73, 0x12, 0x60, 0x0a, 0x10, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, - 0x6f, 0x74, 0x65, 0x52, 0x0f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x73, 0x12, 0x57, 0x0a, 0x0c, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, - 0x6f, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, + 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x94, + 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, + 0x72, 0x79, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0c, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x19, 0x0a, + 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, + 0x52, 0x03, 0x66, 0x65, 0x65, 0x22, 0x59, 0x0a, 0x0d, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x09, 0x66, 0x6d, 0x64, 0x5f, 0x63, 0x6c, + 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, + 0x66, 0x33, 0x37, 0x37, 0x5f, 0x66, 0x6d, 0x64, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x66, 0x6d, 0x64, 0x43, 0x6c, 0x75, 0x65, 0x73, + 0x22, 0xbd, 0x10, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x05, 0x73, + 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, - 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, - 0x52, 0x0b, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x4d, 0x0a, - 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0c, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x43, 0x0a, 0x06, - 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, - 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, - 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, - 0x64, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x22, 0xb3, 0x01, 0x0a, 0x18, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, - 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, - 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, - 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xac, 0x01, 0x0a, 0x11, 0x4e, 0x75, 0x6c, 0x6c, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x09, - 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x04, 0x6e, - 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, - 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, - 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, 0x84, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x54, 0x0a, 0x09, 0x62, 0x6f, 0x64, - 0x79, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, - 0x79, 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, 0x62, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, - 0x59, 0x0a, 0x0b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, - 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, - 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, - 0x63, 0x68, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, - 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0xff, 0x02, 0x0a, - 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, - 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, - 0x69, 0x65, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x49, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, - 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x22, 0xda, - 0x10, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, - 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, - 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, - 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, - 0x12, 0x54, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x06, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, - 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, - 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, - 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, - 0x6d, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, - 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, + 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, + 0x64, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x50, 0x0a, 0x06, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, + 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x40, 0x0a, 0x04, + 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x50, + 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, - 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, + 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, + 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, + 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, + 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, + 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, + 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, + 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, - 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, - 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, - 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, - 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, - 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, + 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, + 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, + 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x2a, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x12, 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x54, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, @@ -3073,300 +2806,523 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x12, 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, - 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, - 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0x22, 0x0a, 0x0a, 0x45, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, - 0xaf, 0x02, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, 0x0b, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, - 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0a, 0x65, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x5b, 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, - 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, - 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, - 0x74, 0x68, 0x73, 0x12, 0x6c, 0x0a, 0x14, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, - 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, - 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x12, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, - 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x0b, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, - 0x68, 0x6f, 0x72, 0x12, 0x6a, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x74, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, + 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x97, 0x04, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x70, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, + 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x60, 0x0a, 0x10, + 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0f, 0x73, + 0x70, 0x65, 0x6e, 0x64, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x57, + 0x0a, 0x0c, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0b, 0x61, 0x64, 0x76, 0x69, + 0x63, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, + 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, 0x0d, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x18, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, + 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, + 0x79, 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x22, 0xac, 0x01, 0x0a, 0x11, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, + 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, + 0x84, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, + 0x69, 0x65, 0x77, 0x12, 0x54, 0x0a, 0x09, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x76, 0x69, 0x65, 0x77, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x52, + 0x08, 0x62, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x59, 0x0a, 0x0b, 0x62, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x15, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x22, - 0xfa, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x6c, 0x61, 0x6e, 0x12, 0x48, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, + 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, + 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0xff, 0x02, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, + 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x70, 0x0a, - 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, - 0x5c, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0d, - 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4d, 0x0a, - 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, + 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, + 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x49, 0x0a, + 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, - 0x61, 0x6e, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x22, 0x60, 0x0a, 0x11, - 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, - 0x6e, 0x12, 0x4b, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x50, - 0x6c, 0x61, 0x6e, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x73, 0x22, 0xd5, - 0x10, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x51, 0x0a, - 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, - 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, - 0x65, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, - 0x12, 0x54, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x06, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, - 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, - 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, - 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, - 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, - 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, + 0x6d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x22, 0xda, 0x10, 0x0a, 0x0a, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, + 0x77, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, + 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, - 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, + 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x56, 0x69, 0x65, 0x77, 0x48, + 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, + 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, + 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, + 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, + 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, + 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, + 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, + 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, + 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, + 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x12, 0x54, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, - 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, 0x64, 0x61, + 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, + 0x5a, 0x0a, 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, - 0x57, 0x0a, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0x17, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, - 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, - 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0a, 0x77, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, - 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, - 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, - 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, - 0x65, 0x12, 0x69, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x73, 0x0a, 0x15, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, - 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, - 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, - 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, + 0x0a, 0x64, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x64, 0x0a, 0x10, 0x75, + 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, + 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, - 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, + 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, - 0x6d, 0x12, 0x54, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, 0x64, - 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, + 0x6d, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, + 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0x22, 0x0a, 0x0a, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, + 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0xaf, 0x02, 0x0a, 0x11, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x4f, 0x0a, 0x0b, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x52, 0x0a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, + 0x12, 0x5b, 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, + 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, + 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x52, 0x0a, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x73, 0x12, 0x6c, 0x0a, + 0x14, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x5f, + 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, + 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x0b, + 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x06, 0x61, + 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, + 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, + 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x6a, 0x0a, + 0x17, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x52, 0x15, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x22, 0xed, 0x02, 0x0a, 0x0f, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x48, 0x0a, + 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x07, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5c, 0x0a, 0x0e, 0x64, 0x65, 0x74, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, + 0x6c, 0x61, 0x6e, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x60, 0x0a, 0x11, 0x44, 0x65, 0x74, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4b, + 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, + 0x52, 0x09, 0x63, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x73, 0x22, 0xd5, 0x10, 0x0a, 0x0a, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, + 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, + 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, + 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, + 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6c, 0x61, + 0x6e, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, + 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, + 0x61, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, + 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, + 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, + 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, + 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x12, 0x5a, 0x0a, 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, - 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, - 0x52, 0x0a, 0x64, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x42, 0x08, 0x0a, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x87, 0x01, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x65, 0x50, - 0x6c, 0x61, 0x6e, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, - 0x22, 0x71, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, - 0x12, 0x4f, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, - 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x22, 0x26, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, - 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x70, 0x0a, 0x0d, 0x4d, - 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x4b, 0x0a, 0x0e, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x78, 0x0a, - 0x11, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, - 0x65, 0x77, 0x12, 0x4f, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x56, 0x69, 0x65, 0x77, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0xcb, 0x03, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, - 0x56, 0x69, 0x65, 0x77, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, - 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, - 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, - 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, - 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xb2, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, - 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, - 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x53, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, - 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x52, - 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x5c, 0x0a, 0x06, 0x4f, 0x70, - 0x61, 0x71, 0x75, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, - 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, - 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, - 0x5f, 0x76, 0x69, 0x65, 0x77, 0x42, 0xcc, 0x02, 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x42, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x65, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, - 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, - 0x72, 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, - 0x54, 0xaa, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, - 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2e, 0x50, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x25, 0x50, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, + 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, + 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, + 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x57, 0x0a, 0x0a, + 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, + 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, + 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, + 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, + 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x69, + 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x73, 0x0a, 0x15, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, + 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, + 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x75, + 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x54, + 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, + 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, 0x64, 0x61, 0x6f, 0x53, + 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x5a, 0x0a, + 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x64, + 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x87, 0x01, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, + 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, + 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x22, 0x6d, 0x0a, + 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4f, 0x0a, 0x09, 0x70, 0x6c, 0x61, + 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, + 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x26, 0x0a, 0x0e, + 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, + 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x70, 0x0a, 0x0d, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, + 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x78, 0x0a, 0x11, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, + 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x12, 0x4f, 0x0a, 0x0e, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0d, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, + 0x22, 0xcb, 0x03, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x12, 0x50, 0x0a, + 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, + 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, + 0x4d, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, + 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xb2, + 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, + 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x53, + 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x1a, 0x5c, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x52, 0x0a, + 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, + 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x42, 0xcc, + 0x02, 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x65, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x3b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x54, 0xaa, 0x02, 0x22, 0x50, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, + 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2e, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, + 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x25, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3381,196 +3337,195 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP() []b return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescData } -var file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes = make([]protoimpl.MessageInfo, 27) +var file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes = make([]protoimpl.MessageInfo, 26) var file_penumbra_core_transaction_v1alpha1_transaction_proto_goTypes = []interface{}{ (*Transaction)(nil), // 0: penumbra.core.transaction.v1alpha1.Transaction (*Id)(nil), // 1: penumbra.core.transaction.v1alpha1.Id (*TransactionBody)(nil), // 2: penumbra.core.transaction.v1alpha1.TransactionBody - (*MemoData)(nil), // 3: penumbra.core.transaction.v1alpha1.MemoData - (*TransactionParameters)(nil), // 4: penumbra.core.transaction.v1alpha1.TransactionParameters - (*DetectionData)(nil), // 5: penumbra.core.transaction.v1alpha1.DetectionData - (*Action)(nil), // 6: penumbra.core.transaction.v1alpha1.Action - (*TransactionPerspective)(nil), // 7: penumbra.core.transaction.v1alpha1.TransactionPerspective - (*PayloadKeyWithCommitment)(nil), // 8: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment - (*NullifierWithNote)(nil), // 9: penumbra.core.transaction.v1alpha1.NullifierWithNote - (*TransactionView)(nil), // 10: penumbra.core.transaction.v1alpha1.TransactionView - (*TransactionBodyView)(nil), // 11: penumbra.core.transaction.v1alpha1.TransactionBodyView - (*ActionView)(nil), // 12: penumbra.core.transaction.v1alpha1.ActionView - (*EffectHash)(nil), // 13: penumbra.core.transaction.v1alpha1.EffectHash - (*AuthorizationData)(nil), // 14: penumbra.core.transaction.v1alpha1.AuthorizationData - (*WitnessData)(nil), // 15: penumbra.core.transaction.v1alpha1.WitnessData - (*TransactionPlan)(nil), // 16: penumbra.core.transaction.v1alpha1.TransactionPlan - (*DetectionDataPlan)(nil), // 17: penumbra.core.transaction.v1alpha1.DetectionDataPlan - (*ActionPlan)(nil), // 18: penumbra.core.transaction.v1alpha1.ActionPlan - (*CluePlan)(nil), // 19: penumbra.core.transaction.v1alpha1.CluePlan - (*MemoDataPlan)(nil), // 20: penumbra.core.transaction.v1alpha1.MemoDataPlan - (*MemoCiphertext)(nil), // 21: penumbra.core.transaction.v1alpha1.MemoCiphertext - (*MemoPlaintext)(nil), // 22: penumbra.core.transaction.v1alpha1.MemoPlaintext - (*MemoPlaintextView)(nil), // 23: penumbra.core.transaction.v1alpha1.MemoPlaintextView - (*MemoView)(nil), // 24: penumbra.core.transaction.v1alpha1.MemoView - (*MemoView_Visible)(nil), // 25: penumbra.core.transaction.v1alpha1.MemoView.Visible - (*MemoView_Opaque)(nil), // 26: penumbra.core.transaction.v1alpha1.MemoView.Opaque - (*v1alpha1.BindingSignature)(nil), // 27: penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature - (*v1alpha11.MerkleRoot)(nil), // 28: penumbra.crypto.tct.v1alpha1.MerkleRoot - (*v1alpha12.Fee)(nil), // 29: penumbra.core.component.fee.v1alpha1.Fee - (*v1alpha13.Clue)(nil), // 30: penumbra.crypto.decaf377_fmd.v1alpha1.Clue - (*v1alpha14.Spend)(nil), // 31: penumbra.core.component.shielded_pool.v1alpha1.Spend - (*v1alpha14.Output)(nil), // 32: penumbra.core.component.shielded_pool.v1alpha1.Output - (*v1alpha15.Swap)(nil), // 33: penumbra.core.component.dex.v1alpha1.Swap - (*v1alpha15.SwapClaim)(nil), // 34: penumbra.core.component.dex.v1alpha1.SwapClaim - (*v1alpha16.ValidatorDefinition)(nil), // 35: penumbra.core.component.stake.v1alpha1.ValidatorDefinition - (*v1alpha17.IbcRelay)(nil), // 36: penumbra.core.component.ibc.v1alpha1.IbcRelay - (*v1alpha18.ProposalSubmit)(nil), // 37: penumbra.core.component.governance.v1alpha1.ProposalSubmit - (*v1alpha18.ProposalWithdraw)(nil), // 38: penumbra.core.component.governance.v1alpha1.ProposalWithdraw - (*v1alpha18.ValidatorVote)(nil), // 39: penumbra.core.component.governance.v1alpha1.ValidatorVote - (*v1alpha18.DelegatorVote)(nil), // 40: penumbra.core.component.governance.v1alpha1.DelegatorVote - (*v1alpha18.ProposalDepositClaim)(nil), // 41: penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - (*v1alpha15.PositionOpen)(nil), // 42: penumbra.core.component.dex.v1alpha1.PositionOpen - (*v1alpha15.PositionClose)(nil), // 43: penumbra.core.component.dex.v1alpha1.PositionClose - (*v1alpha15.PositionWithdraw)(nil), // 44: penumbra.core.component.dex.v1alpha1.PositionWithdraw - (*v1alpha15.PositionRewardClaim)(nil), // 45: penumbra.core.component.dex.v1alpha1.PositionRewardClaim - (*v1alpha16.Delegate)(nil), // 46: penumbra.core.component.stake.v1alpha1.Delegate - (*v1alpha16.Undelegate)(nil), // 47: penumbra.core.component.stake.v1alpha1.Undelegate - (*v1alpha16.UndelegateClaim)(nil), // 48: penumbra.core.component.stake.v1alpha1.UndelegateClaim - (*v1alpha18.DaoSpend)(nil), // 49: penumbra.core.component.governance.v1alpha1.DaoSpend - (*v1alpha18.DaoOutput)(nil), // 50: penumbra.core.component.governance.v1alpha1.DaoOutput - (*v1alpha18.DaoDeposit)(nil), // 51: penumbra.core.component.governance.v1alpha1.DaoDeposit - (*v1alpha17.Ics20Withdrawal)(nil), // 52: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - (*v1alpha14.Note)(nil), // 53: penumbra.core.component.shielded_pool.v1alpha1.Note - (*v1alpha19.AddressView)(nil), // 54: penumbra.core.keys.v1alpha1.AddressView - (*v1alpha110.DenomMetadata)(nil), // 55: penumbra.core.asset.v1alpha1.DenomMetadata - (*v1alpha19.PayloadKey)(nil), // 56: penumbra.core.keys.v1alpha1.PayloadKey - (*v1alpha11.StateCommitment)(nil), // 57: penumbra.crypto.tct.v1alpha1.StateCommitment - (*v1alpha111.Nullifier)(nil), // 58: penumbra.core.component.sct.v1alpha1.Nullifier - (*v1alpha14.SpendView)(nil), // 59: penumbra.core.component.shielded_pool.v1alpha1.SpendView - (*v1alpha14.OutputView)(nil), // 60: penumbra.core.component.shielded_pool.v1alpha1.OutputView - (*v1alpha15.SwapView)(nil), // 61: penumbra.core.component.dex.v1alpha1.SwapView - (*v1alpha15.SwapClaimView)(nil), // 62: penumbra.core.component.dex.v1alpha1.SwapClaimView - (*v1alpha18.DelegatorVoteView)(nil), // 63: penumbra.core.component.governance.v1alpha1.DelegatorVoteView - (*v1alpha1.SpendAuthSignature)(nil), // 64: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - (*v1alpha11.StateCommitmentProof)(nil), // 65: penumbra.crypto.tct.v1alpha1.StateCommitmentProof - (*v1alpha14.SpendPlan)(nil), // 66: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan - (*v1alpha14.OutputPlan)(nil), // 67: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan - (*v1alpha15.SwapPlan)(nil), // 68: penumbra.core.component.dex.v1alpha1.SwapPlan - (*v1alpha15.SwapClaimPlan)(nil), // 69: penumbra.core.component.dex.v1alpha1.SwapClaimPlan - (*v1alpha18.DelegatorVotePlan)(nil), // 70: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan - (*v1alpha15.PositionWithdrawPlan)(nil), // 71: penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan - (*v1alpha15.PositionRewardClaimPlan)(nil), // 72: penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan - (*v1alpha16.UndelegateClaimPlan)(nil), // 73: penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan - (*v1alpha19.Address)(nil), // 74: penumbra.core.keys.v1alpha1.Address + (*TransactionParameters)(nil), // 3: penumbra.core.transaction.v1alpha1.TransactionParameters + (*DetectionData)(nil), // 4: penumbra.core.transaction.v1alpha1.DetectionData + (*Action)(nil), // 5: penumbra.core.transaction.v1alpha1.Action + (*TransactionPerspective)(nil), // 6: penumbra.core.transaction.v1alpha1.TransactionPerspective + (*PayloadKeyWithCommitment)(nil), // 7: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment + (*NullifierWithNote)(nil), // 8: penumbra.core.transaction.v1alpha1.NullifierWithNote + (*TransactionView)(nil), // 9: penumbra.core.transaction.v1alpha1.TransactionView + (*TransactionBodyView)(nil), // 10: penumbra.core.transaction.v1alpha1.TransactionBodyView + (*ActionView)(nil), // 11: penumbra.core.transaction.v1alpha1.ActionView + (*EffectHash)(nil), // 12: penumbra.core.transaction.v1alpha1.EffectHash + (*AuthorizationData)(nil), // 13: penumbra.core.transaction.v1alpha1.AuthorizationData + (*WitnessData)(nil), // 14: penumbra.core.transaction.v1alpha1.WitnessData + (*TransactionPlan)(nil), // 15: penumbra.core.transaction.v1alpha1.TransactionPlan + (*DetectionDataPlan)(nil), // 16: penumbra.core.transaction.v1alpha1.DetectionDataPlan + (*ActionPlan)(nil), // 17: penumbra.core.transaction.v1alpha1.ActionPlan + (*CluePlan)(nil), // 18: penumbra.core.transaction.v1alpha1.CluePlan + (*MemoPlan)(nil), // 19: penumbra.core.transaction.v1alpha1.MemoPlan + (*MemoCiphertext)(nil), // 20: penumbra.core.transaction.v1alpha1.MemoCiphertext + (*MemoPlaintext)(nil), // 21: penumbra.core.transaction.v1alpha1.MemoPlaintext + (*MemoPlaintextView)(nil), // 22: penumbra.core.transaction.v1alpha1.MemoPlaintextView + (*MemoView)(nil), // 23: penumbra.core.transaction.v1alpha1.MemoView + (*MemoView_Visible)(nil), // 24: penumbra.core.transaction.v1alpha1.MemoView.Visible + (*MemoView_Opaque)(nil), // 25: penumbra.core.transaction.v1alpha1.MemoView.Opaque + (*v1alpha1.BindingSignature)(nil), // 26: penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature + (*v1alpha11.MerkleRoot)(nil), // 27: penumbra.crypto.tct.v1alpha1.MerkleRoot + (*v1alpha12.Fee)(nil), // 28: penumbra.core.component.fee.v1alpha1.Fee + (*v1alpha13.Clue)(nil), // 29: penumbra.crypto.decaf377_fmd.v1alpha1.Clue + (*v1alpha14.Spend)(nil), // 30: penumbra.core.component.shielded_pool.v1alpha1.Spend + (*v1alpha14.Output)(nil), // 31: penumbra.core.component.shielded_pool.v1alpha1.Output + (*v1alpha15.Swap)(nil), // 32: penumbra.core.component.dex.v1alpha1.Swap + (*v1alpha15.SwapClaim)(nil), // 33: penumbra.core.component.dex.v1alpha1.SwapClaim + (*v1alpha16.ValidatorDefinition)(nil), // 34: penumbra.core.component.stake.v1alpha1.ValidatorDefinition + (*v1alpha17.IbcRelay)(nil), // 35: penumbra.core.component.ibc.v1alpha1.IbcRelay + (*v1alpha18.ProposalSubmit)(nil), // 36: penumbra.core.component.governance.v1alpha1.ProposalSubmit + (*v1alpha18.ProposalWithdraw)(nil), // 37: penumbra.core.component.governance.v1alpha1.ProposalWithdraw + (*v1alpha18.ValidatorVote)(nil), // 38: penumbra.core.component.governance.v1alpha1.ValidatorVote + (*v1alpha18.DelegatorVote)(nil), // 39: penumbra.core.component.governance.v1alpha1.DelegatorVote + (*v1alpha18.ProposalDepositClaim)(nil), // 40: penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + (*v1alpha15.PositionOpen)(nil), // 41: penumbra.core.component.dex.v1alpha1.PositionOpen + (*v1alpha15.PositionClose)(nil), // 42: penumbra.core.component.dex.v1alpha1.PositionClose + (*v1alpha15.PositionWithdraw)(nil), // 43: penumbra.core.component.dex.v1alpha1.PositionWithdraw + (*v1alpha15.PositionRewardClaim)(nil), // 44: penumbra.core.component.dex.v1alpha1.PositionRewardClaim + (*v1alpha16.Delegate)(nil), // 45: penumbra.core.component.stake.v1alpha1.Delegate + (*v1alpha16.Undelegate)(nil), // 46: penumbra.core.component.stake.v1alpha1.Undelegate + (*v1alpha16.UndelegateClaim)(nil), // 47: penumbra.core.component.stake.v1alpha1.UndelegateClaim + (*v1alpha18.DaoSpend)(nil), // 48: penumbra.core.component.governance.v1alpha1.DaoSpend + (*v1alpha18.DaoOutput)(nil), // 49: penumbra.core.component.governance.v1alpha1.DaoOutput + (*v1alpha18.DaoDeposit)(nil), // 50: penumbra.core.component.governance.v1alpha1.DaoDeposit + (*v1alpha17.Ics20Withdrawal)(nil), // 51: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + (*v1alpha14.Note)(nil), // 52: penumbra.core.component.shielded_pool.v1alpha1.Note + (*v1alpha19.AddressView)(nil), // 53: penumbra.core.keys.v1alpha1.AddressView + (*v1alpha110.DenomMetadata)(nil), // 54: penumbra.core.asset.v1alpha1.DenomMetadata + (*v1alpha19.PayloadKey)(nil), // 55: penumbra.core.keys.v1alpha1.PayloadKey + (*v1alpha11.StateCommitment)(nil), // 56: penumbra.crypto.tct.v1alpha1.StateCommitment + (*v1alpha111.Nullifier)(nil), // 57: penumbra.core.component.sct.v1alpha1.Nullifier + (*v1alpha14.SpendView)(nil), // 58: penumbra.core.component.shielded_pool.v1alpha1.SpendView + (*v1alpha14.OutputView)(nil), // 59: penumbra.core.component.shielded_pool.v1alpha1.OutputView + (*v1alpha15.SwapView)(nil), // 60: penumbra.core.component.dex.v1alpha1.SwapView + (*v1alpha15.SwapClaimView)(nil), // 61: penumbra.core.component.dex.v1alpha1.SwapClaimView + (*v1alpha18.DelegatorVoteView)(nil), // 62: penumbra.core.component.governance.v1alpha1.DelegatorVoteView + (*v1alpha1.SpendAuthSignature)(nil), // 63: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + (*v1alpha11.StateCommitmentProof)(nil), // 64: penumbra.crypto.tct.v1alpha1.StateCommitmentProof + (*v1alpha14.SpendPlan)(nil), // 65: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan + (*v1alpha14.OutputPlan)(nil), // 66: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan + (*v1alpha15.SwapPlan)(nil), // 67: penumbra.core.component.dex.v1alpha1.SwapPlan + (*v1alpha15.SwapClaimPlan)(nil), // 68: penumbra.core.component.dex.v1alpha1.SwapClaimPlan + (*v1alpha18.DelegatorVotePlan)(nil), // 69: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan + (*v1alpha15.PositionWithdrawPlan)(nil), // 70: penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan + (*v1alpha15.PositionRewardClaimPlan)(nil), // 71: penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan + (*v1alpha16.UndelegateClaimPlan)(nil), // 72: penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan + (*v1alpha19.Address)(nil), // 73: penumbra.core.keys.v1alpha1.Address } var file_penumbra_core_transaction_v1alpha1_transaction_proto_depIdxs = []int32{ 2, // 0: penumbra.core.transaction.v1alpha1.Transaction.body:type_name -> penumbra.core.transaction.v1alpha1.TransactionBody - 27, // 1: penumbra.core.transaction.v1alpha1.Transaction.binding_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature - 28, // 2: penumbra.core.transaction.v1alpha1.Transaction.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot - 6, // 3: penumbra.core.transaction.v1alpha1.TransactionBody.actions:type_name -> penumbra.core.transaction.v1alpha1.Action - 4, // 4: penumbra.core.transaction.v1alpha1.TransactionBody.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters - 5, // 5: penumbra.core.transaction.v1alpha1.TransactionBody.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData - 3, // 6: penumbra.core.transaction.v1alpha1.TransactionBody.memo_data:type_name -> penumbra.core.transaction.v1alpha1.MemoData - 29, // 7: penumbra.core.transaction.v1alpha1.TransactionParameters.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee - 30, // 8: penumbra.core.transaction.v1alpha1.DetectionData.fmd_clues:type_name -> penumbra.crypto.decaf377_fmd.v1alpha1.Clue - 31, // 9: penumbra.core.transaction.v1alpha1.Action.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend - 32, // 10: penumbra.core.transaction.v1alpha1.Action.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output - 33, // 11: penumbra.core.transaction.v1alpha1.Action.swap:type_name -> penumbra.core.component.dex.v1alpha1.Swap - 34, // 12: penumbra.core.transaction.v1alpha1.Action.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaim - 35, // 13: penumbra.core.transaction.v1alpha1.Action.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 36, // 14: penumbra.core.transaction.v1alpha1.Action.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 37, // 15: penumbra.core.transaction.v1alpha1.Action.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 38, // 16: penumbra.core.transaction.v1alpha1.Action.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 39, // 17: penumbra.core.transaction.v1alpha1.Action.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote - 40, // 18: penumbra.core.transaction.v1alpha1.Action.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote - 41, // 19: penumbra.core.transaction.v1alpha1.Action.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 42, // 20: penumbra.core.transaction.v1alpha1.Action.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 43, // 21: penumbra.core.transaction.v1alpha1.Action.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose - 44, // 22: penumbra.core.transaction.v1alpha1.Action.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw - 45, // 23: penumbra.core.transaction.v1alpha1.Action.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim - 46, // 24: penumbra.core.transaction.v1alpha1.Action.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 47, // 25: penumbra.core.transaction.v1alpha1.Action.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 48, // 26: penumbra.core.transaction.v1alpha1.Action.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim - 49, // 27: penumbra.core.transaction.v1alpha1.Action.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 50, // 28: penumbra.core.transaction.v1alpha1.Action.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 51, // 29: penumbra.core.transaction.v1alpha1.Action.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit - 52, // 30: penumbra.core.transaction.v1alpha1.Action.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 8, // 31: penumbra.core.transaction.v1alpha1.TransactionPerspective.payload_keys:type_name -> penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment - 9, // 32: penumbra.core.transaction.v1alpha1.TransactionPerspective.spend_nullifiers:type_name -> penumbra.core.transaction.v1alpha1.NullifierWithNote - 53, // 33: penumbra.core.transaction.v1alpha1.TransactionPerspective.advice_notes:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 54, // 34: penumbra.core.transaction.v1alpha1.TransactionPerspective.address_views:type_name -> penumbra.core.keys.v1alpha1.AddressView - 55, // 35: penumbra.core.transaction.v1alpha1.TransactionPerspective.denoms:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata + 26, // 1: penumbra.core.transaction.v1alpha1.Transaction.binding_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature + 27, // 2: penumbra.core.transaction.v1alpha1.Transaction.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 5, // 3: penumbra.core.transaction.v1alpha1.TransactionBody.actions:type_name -> penumbra.core.transaction.v1alpha1.Action + 3, // 4: penumbra.core.transaction.v1alpha1.TransactionBody.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters + 4, // 5: penumbra.core.transaction.v1alpha1.TransactionBody.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData + 20, // 6: penumbra.core.transaction.v1alpha1.TransactionBody.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext + 28, // 7: penumbra.core.transaction.v1alpha1.TransactionParameters.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee + 29, // 8: penumbra.core.transaction.v1alpha1.DetectionData.fmd_clues:type_name -> penumbra.crypto.decaf377_fmd.v1alpha1.Clue + 30, // 9: penumbra.core.transaction.v1alpha1.Action.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend + 31, // 10: penumbra.core.transaction.v1alpha1.Action.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output + 32, // 11: penumbra.core.transaction.v1alpha1.Action.swap:type_name -> penumbra.core.component.dex.v1alpha1.Swap + 33, // 12: penumbra.core.transaction.v1alpha1.Action.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaim + 34, // 13: penumbra.core.transaction.v1alpha1.Action.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 35, // 14: penumbra.core.transaction.v1alpha1.Action.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 36, // 15: penumbra.core.transaction.v1alpha1.Action.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 37, // 16: penumbra.core.transaction.v1alpha1.Action.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 38, // 17: penumbra.core.transaction.v1alpha1.Action.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 39, // 18: penumbra.core.transaction.v1alpha1.Action.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote + 40, // 19: penumbra.core.transaction.v1alpha1.Action.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 41, // 20: penumbra.core.transaction.v1alpha1.Action.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 42, // 21: penumbra.core.transaction.v1alpha1.Action.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 43, // 22: penumbra.core.transaction.v1alpha1.Action.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw + 44, // 23: penumbra.core.transaction.v1alpha1.Action.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim + 45, // 24: penumbra.core.transaction.v1alpha1.Action.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 46, // 25: penumbra.core.transaction.v1alpha1.Action.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 47, // 26: penumbra.core.transaction.v1alpha1.Action.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim + 48, // 27: penumbra.core.transaction.v1alpha1.Action.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend + 49, // 28: penumbra.core.transaction.v1alpha1.Action.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput + 50, // 29: penumbra.core.transaction.v1alpha1.Action.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 51, // 30: penumbra.core.transaction.v1alpha1.Action.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 7, // 31: penumbra.core.transaction.v1alpha1.TransactionPerspective.payload_keys:type_name -> penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment + 8, // 32: penumbra.core.transaction.v1alpha1.TransactionPerspective.spend_nullifiers:type_name -> penumbra.core.transaction.v1alpha1.NullifierWithNote + 52, // 33: penumbra.core.transaction.v1alpha1.TransactionPerspective.advice_notes:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 53, // 34: penumbra.core.transaction.v1alpha1.TransactionPerspective.address_views:type_name -> penumbra.core.keys.v1alpha1.AddressView + 54, // 35: penumbra.core.transaction.v1alpha1.TransactionPerspective.denoms:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata 1, // 36: penumbra.core.transaction.v1alpha1.TransactionPerspective.transaction_id:type_name -> penumbra.core.transaction.v1alpha1.Id - 56, // 37: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey - 57, // 38: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 58, // 39: penumbra.core.transaction.v1alpha1.NullifierWithNote.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 53, // 40: penumbra.core.transaction.v1alpha1.NullifierWithNote.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 11, // 41: penumbra.core.transaction.v1alpha1.TransactionView.body_view:type_name -> penumbra.core.transaction.v1alpha1.TransactionBodyView - 27, // 42: penumbra.core.transaction.v1alpha1.TransactionView.binding_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature - 28, // 43: penumbra.core.transaction.v1alpha1.TransactionView.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot - 12, // 44: penumbra.core.transaction.v1alpha1.TransactionBodyView.action_views:type_name -> penumbra.core.transaction.v1alpha1.ActionView - 4, // 45: penumbra.core.transaction.v1alpha1.TransactionBodyView.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters - 5, // 46: penumbra.core.transaction.v1alpha1.TransactionBodyView.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData - 24, // 47: penumbra.core.transaction.v1alpha1.TransactionBodyView.memo_view:type_name -> penumbra.core.transaction.v1alpha1.MemoView - 59, // 48: penumbra.core.transaction.v1alpha1.ActionView.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView - 60, // 49: penumbra.core.transaction.v1alpha1.ActionView.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView - 61, // 50: penumbra.core.transaction.v1alpha1.ActionView.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapView - 62, // 51: penumbra.core.transaction.v1alpha1.ActionView.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimView - 35, // 52: penumbra.core.transaction.v1alpha1.ActionView.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 36, // 53: penumbra.core.transaction.v1alpha1.ActionView.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 37, // 54: penumbra.core.transaction.v1alpha1.ActionView.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 38, // 55: penumbra.core.transaction.v1alpha1.ActionView.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 39, // 56: penumbra.core.transaction.v1alpha1.ActionView.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote - 63, // 57: penumbra.core.transaction.v1alpha1.ActionView.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView - 41, // 58: penumbra.core.transaction.v1alpha1.ActionView.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 42, // 59: penumbra.core.transaction.v1alpha1.ActionView.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 43, // 60: penumbra.core.transaction.v1alpha1.ActionView.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose - 44, // 61: penumbra.core.transaction.v1alpha1.ActionView.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw - 45, // 62: penumbra.core.transaction.v1alpha1.ActionView.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim - 46, // 63: penumbra.core.transaction.v1alpha1.ActionView.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 47, // 64: penumbra.core.transaction.v1alpha1.ActionView.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 49, // 65: penumbra.core.transaction.v1alpha1.ActionView.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 50, // 66: penumbra.core.transaction.v1alpha1.ActionView.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 51, // 67: penumbra.core.transaction.v1alpha1.ActionView.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit - 48, // 68: penumbra.core.transaction.v1alpha1.ActionView.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim - 52, // 69: penumbra.core.transaction.v1alpha1.ActionView.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 13, // 70: penumbra.core.transaction.v1alpha1.AuthorizationData.effect_hash:type_name -> penumbra.core.transaction.v1alpha1.EffectHash - 64, // 71: penumbra.core.transaction.v1alpha1.AuthorizationData.spend_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - 64, // 72: penumbra.core.transaction.v1alpha1.AuthorizationData.delegator_vote_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - 28, // 73: penumbra.core.transaction.v1alpha1.WitnessData.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot - 65, // 74: penumbra.core.transaction.v1alpha1.WitnessData.state_commitment_proofs:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitmentProof - 18, // 75: penumbra.core.transaction.v1alpha1.TransactionPlan.actions:type_name -> penumbra.core.transaction.v1alpha1.ActionPlan - 4, // 76: penumbra.core.transaction.v1alpha1.TransactionPlan.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters - 17, // 77: penumbra.core.transaction.v1alpha1.TransactionPlan.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionDataPlan - 20, // 78: penumbra.core.transaction.v1alpha1.TransactionPlan.memo_data:type_name -> penumbra.core.transaction.v1alpha1.MemoDataPlan - 19, // 79: penumbra.core.transaction.v1alpha1.DetectionDataPlan.clue_plans:type_name -> penumbra.core.transaction.v1alpha1.CluePlan - 66, // 80: penumbra.core.transaction.v1alpha1.ActionPlan.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendPlan - 67, // 81: penumbra.core.transaction.v1alpha1.ActionPlan.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputPlan - 68, // 82: penumbra.core.transaction.v1alpha1.ActionPlan.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapPlan - 69, // 83: penumbra.core.transaction.v1alpha1.ActionPlan.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimPlan - 35, // 84: penumbra.core.transaction.v1alpha1.ActionPlan.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 36, // 85: penumbra.core.transaction.v1alpha1.ActionPlan.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 37, // 86: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 38, // 87: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 39, // 88: penumbra.core.transaction.v1alpha1.ActionPlan.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote - 70, // 89: penumbra.core.transaction.v1alpha1.ActionPlan.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVotePlan - 41, // 90: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 52, // 91: penumbra.core.transaction.v1alpha1.ActionPlan.withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 42, // 92: penumbra.core.transaction.v1alpha1.ActionPlan.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 43, // 93: penumbra.core.transaction.v1alpha1.ActionPlan.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose - 71, // 94: penumbra.core.transaction.v1alpha1.ActionPlan.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan - 72, // 95: penumbra.core.transaction.v1alpha1.ActionPlan.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan - 46, // 96: penumbra.core.transaction.v1alpha1.ActionPlan.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 47, // 97: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 73, // 98: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan - 49, // 99: penumbra.core.transaction.v1alpha1.ActionPlan.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 50, // 100: penumbra.core.transaction.v1alpha1.ActionPlan.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 51, // 101: penumbra.core.transaction.v1alpha1.ActionPlan.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit - 74, // 102: penumbra.core.transaction.v1alpha1.CluePlan.address:type_name -> penumbra.core.keys.v1alpha1.Address - 22, // 103: penumbra.core.transaction.v1alpha1.MemoDataPlan.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext - 74, // 104: penumbra.core.transaction.v1alpha1.MemoPlaintext.return_address:type_name -> penumbra.core.keys.v1alpha1.Address - 54, // 105: penumbra.core.transaction.v1alpha1.MemoPlaintextView.return_address:type_name -> penumbra.core.keys.v1alpha1.AddressView - 25, // 106: penumbra.core.transaction.v1alpha1.MemoView.visible:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Visible - 26, // 107: penumbra.core.transaction.v1alpha1.MemoView.opaque:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Opaque - 21, // 108: penumbra.core.transaction.v1alpha1.MemoView.Visible.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext - 23, // 109: penumbra.core.transaction.v1alpha1.MemoView.Visible.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintextView - 21, // 110: penumbra.core.transaction.v1alpha1.MemoView.Opaque.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext + 55, // 37: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey + 56, // 38: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 57, // 39: penumbra.core.transaction.v1alpha1.NullifierWithNote.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 52, // 40: penumbra.core.transaction.v1alpha1.NullifierWithNote.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 10, // 41: penumbra.core.transaction.v1alpha1.TransactionView.body_view:type_name -> penumbra.core.transaction.v1alpha1.TransactionBodyView + 26, // 42: penumbra.core.transaction.v1alpha1.TransactionView.binding_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature + 27, // 43: penumbra.core.transaction.v1alpha1.TransactionView.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 11, // 44: penumbra.core.transaction.v1alpha1.TransactionBodyView.action_views:type_name -> penumbra.core.transaction.v1alpha1.ActionView + 3, // 45: penumbra.core.transaction.v1alpha1.TransactionBodyView.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters + 4, // 46: penumbra.core.transaction.v1alpha1.TransactionBodyView.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData + 23, // 47: penumbra.core.transaction.v1alpha1.TransactionBodyView.memo_view:type_name -> penumbra.core.transaction.v1alpha1.MemoView + 58, // 48: penumbra.core.transaction.v1alpha1.ActionView.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView + 59, // 49: penumbra.core.transaction.v1alpha1.ActionView.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView + 60, // 50: penumbra.core.transaction.v1alpha1.ActionView.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapView + 61, // 51: penumbra.core.transaction.v1alpha1.ActionView.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimView + 34, // 52: penumbra.core.transaction.v1alpha1.ActionView.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 35, // 53: penumbra.core.transaction.v1alpha1.ActionView.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 36, // 54: penumbra.core.transaction.v1alpha1.ActionView.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 37, // 55: penumbra.core.transaction.v1alpha1.ActionView.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 38, // 56: penumbra.core.transaction.v1alpha1.ActionView.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 62, // 57: penumbra.core.transaction.v1alpha1.ActionView.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView + 40, // 58: penumbra.core.transaction.v1alpha1.ActionView.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 41, // 59: penumbra.core.transaction.v1alpha1.ActionView.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 42, // 60: penumbra.core.transaction.v1alpha1.ActionView.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 43, // 61: penumbra.core.transaction.v1alpha1.ActionView.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw + 44, // 62: penumbra.core.transaction.v1alpha1.ActionView.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim + 45, // 63: penumbra.core.transaction.v1alpha1.ActionView.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 46, // 64: penumbra.core.transaction.v1alpha1.ActionView.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 48, // 65: penumbra.core.transaction.v1alpha1.ActionView.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend + 49, // 66: penumbra.core.transaction.v1alpha1.ActionView.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput + 50, // 67: penumbra.core.transaction.v1alpha1.ActionView.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 47, // 68: penumbra.core.transaction.v1alpha1.ActionView.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim + 51, // 69: penumbra.core.transaction.v1alpha1.ActionView.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 12, // 70: penumbra.core.transaction.v1alpha1.AuthorizationData.effect_hash:type_name -> penumbra.core.transaction.v1alpha1.EffectHash + 63, // 71: penumbra.core.transaction.v1alpha1.AuthorizationData.spend_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + 63, // 72: penumbra.core.transaction.v1alpha1.AuthorizationData.delegator_vote_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + 27, // 73: penumbra.core.transaction.v1alpha1.WitnessData.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 64, // 74: penumbra.core.transaction.v1alpha1.WitnessData.state_commitment_proofs:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitmentProof + 17, // 75: penumbra.core.transaction.v1alpha1.TransactionPlan.actions:type_name -> penumbra.core.transaction.v1alpha1.ActionPlan + 3, // 76: penumbra.core.transaction.v1alpha1.TransactionPlan.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters + 16, // 77: penumbra.core.transaction.v1alpha1.TransactionPlan.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionDataPlan + 19, // 78: penumbra.core.transaction.v1alpha1.TransactionPlan.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoPlan + 18, // 79: penumbra.core.transaction.v1alpha1.DetectionDataPlan.clue_plans:type_name -> penumbra.core.transaction.v1alpha1.CluePlan + 65, // 80: penumbra.core.transaction.v1alpha1.ActionPlan.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendPlan + 66, // 81: penumbra.core.transaction.v1alpha1.ActionPlan.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputPlan + 67, // 82: penumbra.core.transaction.v1alpha1.ActionPlan.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapPlan + 68, // 83: penumbra.core.transaction.v1alpha1.ActionPlan.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimPlan + 34, // 84: penumbra.core.transaction.v1alpha1.ActionPlan.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 35, // 85: penumbra.core.transaction.v1alpha1.ActionPlan.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 36, // 86: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 37, // 87: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 38, // 88: penumbra.core.transaction.v1alpha1.ActionPlan.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 69, // 89: penumbra.core.transaction.v1alpha1.ActionPlan.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVotePlan + 40, // 90: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 51, // 91: penumbra.core.transaction.v1alpha1.ActionPlan.withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 41, // 92: penumbra.core.transaction.v1alpha1.ActionPlan.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 42, // 93: penumbra.core.transaction.v1alpha1.ActionPlan.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 70, // 94: penumbra.core.transaction.v1alpha1.ActionPlan.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan + 71, // 95: penumbra.core.transaction.v1alpha1.ActionPlan.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan + 45, // 96: penumbra.core.transaction.v1alpha1.ActionPlan.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 46, // 97: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 72, // 98: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan + 48, // 99: penumbra.core.transaction.v1alpha1.ActionPlan.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend + 49, // 100: penumbra.core.transaction.v1alpha1.ActionPlan.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput + 50, // 101: penumbra.core.transaction.v1alpha1.ActionPlan.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 73, // 102: penumbra.core.transaction.v1alpha1.CluePlan.address:type_name -> penumbra.core.keys.v1alpha1.Address + 21, // 103: penumbra.core.transaction.v1alpha1.MemoPlan.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext + 73, // 104: penumbra.core.transaction.v1alpha1.MemoPlaintext.return_address:type_name -> penumbra.core.keys.v1alpha1.Address + 53, // 105: penumbra.core.transaction.v1alpha1.MemoPlaintextView.return_address:type_name -> penumbra.core.keys.v1alpha1.AddressView + 24, // 106: penumbra.core.transaction.v1alpha1.MemoView.visible:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Visible + 25, // 107: penumbra.core.transaction.v1alpha1.MemoView.opaque:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Opaque + 20, // 108: penumbra.core.transaction.v1alpha1.MemoView.Visible.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext + 22, // 109: penumbra.core.transaction.v1alpha1.MemoView.Visible.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintextView + 20, // 110: penumbra.core.transaction.v1alpha1.MemoView.Opaque.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext 111, // [111:111] is the sub-list for method output_type 111, // [111:111] is the sub-list for method input_type 111, // [111:111] is the sub-list for extension type_name @@ -3621,7 +3576,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MemoData); i { + switch v := v.(*TransactionParameters); i { case 0: return &v.state case 1: @@ -3633,7 +3588,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionParameters); i { + switch v := v.(*DetectionData); i { case 0: return &v.state case 1: @@ -3645,7 +3600,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DetectionData); i { + switch v := v.(*Action); i { case 0: return &v.state case 1: @@ -3657,7 +3612,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Action); i { + switch v := v.(*TransactionPerspective); i { case 0: return &v.state case 1: @@ -3669,7 +3624,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPerspective); i { + switch v := v.(*PayloadKeyWithCommitment); i { case 0: return &v.state case 1: @@ -3681,7 +3636,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PayloadKeyWithCommitment); i { + switch v := v.(*NullifierWithNote); i { case 0: return &v.state case 1: @@ -3693,7 +3648,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NullifierWithNote); i { + switch v := v.(*TransactionView); i { case 0: return &v.state case 1: @@ -3705,7 +3660,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionView); i { + switch v := v.(*TransactionBodyView); i { case 0: return &v.state case 1: @@ -3717,7 +3672,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionBodyView); i { + switch v := v.(*ActionView); i { case 0: return &v.state case 1: @@ -3729,7 +3684,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActionView); i { + switch v := v.(*EffectHash); i { case 0: return &v.state case 1: @@ -3741,7 +3696,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EffectHash); i { + switch v := v.(*AuthorizationData); i { case 0: return &v.state case 1: @@ -3753,7 +3708,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AuthorizationData); i { + switch v := v.(*WitnessData); i { case 0: return &v.state case 1: @@ -3765,7 +3720,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WitnessData); i { + switch v := v.(*TransactionPlan); i { case 0: return &v.state case 1: @@ -3777,7 +3732,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPlan); i { + switch v := v.(*DetectionDataPlan); i { case 0: return &v.state case 1: @@ -3789,7 +3744,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DetectionDataPlan); i { + switch v := v.(*ActionPlan); i { case 0: return &v.state case 1: @@ -3801,7 +3756,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActionPlan); i { + switch v := v.(*CluePlan); i { case 0: return &v.state case 1: @@ -3813,7 +3768,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CluePlan); i { + switch v := v.(*MemoPlan); i { case 0: return &v.state case 1: @@ -3825,18 +3780,6 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MemoDataPlan); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoCiphertext); i { case 0: return &v.state @@ -3848,7 +3791,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoPlaintext); i { case 0: return &v.state @@ -3860,7 +3803,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoPlaintextView); i { case 0: return &v.state @@ -3872,7 +3815,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoView); i { case 0: return &v.state @@ -3884,7 +3827,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoView_Visible); i { case 0: return &v.state @@ -3896,7 +3839,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoView_Opaque); i { case 0: return &v.state @@ -3909,7 +3852,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[6].OneofWrappers = []interface{}{ + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[5].OneofWrappers = []interface{}{ (*Action_Spend)(nil), (*Action_Output)(nil), (*Action_Swap)(nil), @@ -3933,7 +3876,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { (*Action_DaoDeposit)(nil), (*Action_Ics20Withdrawal)(nil), } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[12].OneofWrappers = []interface{}{ + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[11].OneofWrappers = []interface{}{ (*ActionView_Spend)(nil), (*ActionView_Output)(nil), (*ActionView_Swap)(nil), @@ -3957,7 +3900,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { (*ActionView_UndelegateClaim)(nil), (*ActionView_Ics20Withdrawal)(nil), } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18].OneofWrappers = []interface{}{ + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17].OneofWrappers = []interface{}{ (*ActionPlan_Spend)(nil), (*ActionPlan_Output)(nil), (*ActionPlan_Swap)(nil), @@ -3981,7 +3924,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { (*ActionPlan_DaoOutput)(nil), (*ActionPlan_DaoDeposit)(nil), } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24].OneofWrappers = []interface{}{ + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23].OneofWrappers = []interface{}{ (*MemoView_Visible_)(nil), (*MemoView_Opaque_)(nil), } @@ -3991,7 +3934,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc, NumEnums: 0, - NumMessages: 27, + NumMessages: 26, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto index c590a9cdca..5f54486239 100644 --- a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto +++ b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto @@ -37,15 +37,10 @@ message TransactionBody { TransactionParameters transaction_parameters = 2; // Detection data for use with Fuzzy Message Detection DetectionData detection_data = 4; - // Sub-message containing memo ciphertext if a memo was added to the transaction. - MemoData memo_data = 5; -} - -// Represents the encrypted memo data. -message MemoData { - // The encrypted data. It will only be populated if there are - // outputs in the actions of the transaction. 528 bytes. - bytes encrypted_memo = 1; + // The encrypted memo for this transaction. + // + // This field will be present if and only if the transaction has outputs. + MemoCiphertext memo = 5; } // The parameters determining if a transaction should be accepted by the chain. @@ -237,7 +232,7 @@ message TransactionPlan { // Detection data for use with Fuzzy Message Detection DetectionDataPlan detection_data = 4; // The memo plan for this transaction. - MemoDataPlan memo_data = 5; + MemoPlan memo = 5; } message DetectionDataPlan { @@ -300,20 +295,28 @@ message CluePlan { uint64 precision_bits = 3; } -// Describes a plan for forming a `MemoData`. -message MemoDataPlan { +// Describes a plan for forming the transaction memo. +message MemoPlan { // The plaintext. MemoPlaintext plaintext = 1; // The key to use to encrypt the memo. bytes key = 2; } +// The encrypted memo data describing information about the purpose of a transaction. message MemoCiphertext { + // The encrypted data. 528 bytes. bytes inner = 1; } +// The plaintext describing information about the purpose of a transaction. message MemoPlaintext { + // The sender's return address. + // + // This should always be a valid address; the sender is responsible for ensuring + // that if the receiver returns funds to this address, they will not be lost. keys.v1alpha1.Address return_address = 1; + // Free-form text, up to 432 bytes long. string text = 2; } From 98b4a63f437864e371ad0811029a145b67ae4444 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Fri, 29 Dec 2023 10:55:08 -0500 Subject: [PATCH 08/84] transaction: make DetectionData handling consistent, fix effect hash This commit makes detection data handling consistent with memo handling, using an optional field to record the presence or absence of detection data. Also, it fixes the effect hash computation to always hash something for the memo and for the detection data, ensuring that absent packets are correctly recorded in the effect hash. --- .../app/src/action_handler/transaction.rs | 6 +- crates/core/transaction/src/effect_hash.rs | 102 +++++++++--------- crates/core/transaction/src/plan.rs | 29 ++--- crates/core/transaction/src/plan/build.rs | 14 +-- crates/view/src/planner.rs | 2 +- crates/wasm/src/planner.rs | 2 +- 6 files changed, 76 insertions(+), 79 deletions(-) diff --git a/crates/core/app/src/action_handler/transaction.rs b/crates/core/app/src/action_handler/transaction.rs index a720c9030e..2bb6d115d9 100644 --- a/crates/core/app/src/action_handler/transaction.rs +++ b/crates/core/app/src/action_handler/transaction.rs @@ -161,9 +161,9 @@ mod tests { SpendPlan::new(&mut OsRng, note2, auth_path2.position()).into(), OutputPlan::new(&mut OsRng, value, *test_keys::ADDRESS_1).into(), ], - detection_data: DetectionDataPlan { + detection_data: Some(DetectionDataPlan { clue_plans: vec![CluePlan::new(&mut OsRng, *test_keys::ADDRESS_1, 1)], - }, + }), memo: None, }; @@ -226,7 +226,7 @@ mod tests { SpendPlan::new(&mut OsRng, note, auth_path.position()).into(), OutputPlan::new(&mut OsRng, value, *test_keys::ADDRESS_1).into(), ], - detection_data: DetectionDataPlan { clue_plans: vec![] }, + detection_data: None, memo: None, }; diff --git a/crates/core/transaction/src/effect_hash.rs b/crates/core/transaction/src/effect_hash.rs index 1943c33eea..5439db4c05 100644 --- a/crates/core/transaction/src/effect_hash.rs +++ b/crates/core/transaction/src/effect_hash.rs @@ -11,7 +11,7 @@ use penumbra_governance::{ ProposalWithdraw, ValidatorVote, ValidatorVoteBody, Vote, }; use penumbra_ibc::IbcRelay; -use penumbra_keys::{FullViewingKey, PayloadKey}; +use penumbra_keys::FullViewingKey; use penumbra_proto::{ core::component::dex::v1alpha1 as pbd, core::component::fee::v1alpha1 as pbf, core::component::governance::v1alpha1 as pbg, core::component::ibc::v1alpha1 as pbi, @@ -55,26 +55,26 @@ impl TransactionBody { pub fn effect_hash(&self) -> EffectHash { let mut state = create_personalized_state(&pbt::TransactionBody::type_url()); + let parameters_hash = self.transaction_parameters.effect_hash(); + let memo_hash = self + .memo + .as_ref() + .map(|memo| memo.effect_hash()) + // If the memo is not present, use the all-zero hash to record its absence in + // the overall effect hash. + .unwrap_or_default(); + let detection_data_hash = self + .detection_data + .as_ref() + .map(|detection_data| detection_data.effect_hash()) + // If the detection data is not present, use the all-zero hash to + // record its absence in the overall effect hash. + .unwrap_or_default(); + // Hash the fixed data of the transaction body. - state.update(self.transaction_parameters.effect_hash().as_bytes()); - if self.memo.is_some() { - let memo_ciphertext = self.memo.clone(); - state.update( - memo_ciphertext - .expect("memo is some") - .effect_hash() - .as_bytes(), - ); - } - if self.detection_data.is_some() { - let detection_data = self.detection_data.clone(); - state.update( - detection_data - .expect("detection data is some") - .effect_hash() - .as_bytes(), - ); - } + state.update(parameters_hash.as_bytes()); + state.update(memo_hash.as_bytes()); + state.update(detection_data_hash.as_bytes()); // Hash the number of actions, then each action. let num_actions = self.actions.len() as u32; @@ -102,42 +102,46 @@ impl TransactionPlan { let mut state = create_personalized_state(&pbt::TransactionBody::type_url()); - // Hash the fixed data of the transaction body. - state.update(self.transaction_parameters.effect_hash().as_bytes()); - - // Hash the memo and save the memo key for use with outputs later. - let mut memo_key: Option = None; - if self.memo.is_some() { - let memo_plan = self - .memo - .clone() - .expect("memo_plan must be present in TransactionPlan"); - let memo_ciphertext = memo_plan.memo().expect("can compute ciphertext"); - state.update(memo_ciphertext.effect_hash().as_bytes()); - memo_key = Some(memo_plan.key); - } + let parameters_hash = self.transaction_parameters.effect_hash(); - // Hash the detection data. - if !self.detection_data.clue_plans.is_empty() { - let detection_data = self.detection_data.detection_data(); - state.update(detection_data.effect_hash().as_bytes()); - } + let memo_hash = self + .memo + .as_ref() + .map(|memo_plan| { + memo_plan + .memo() + .expect("can compute memo ciphertext") + .effect_hash() + }) + // If the memo is not present, use the all-zero hash to record its absence in + // the overall effect hash. + .unwrap_or_default(); + + let detection_data_hash = self + .detection_data + .as_ref() + .map(|plan| plan.detection_data().effect_hash()) + // If the detection data is not present, use the all-zero hash to + // record its absence in the overall effect hash. + .unwrap_or_default(); + + // Hash the fixed data of the transaction body. + state.update(parameters_hash.as_bytes()); + state.update(memo_hash.as_bytes()); + state.update(detection_data_hash.as_bytes()); + // Hash the number of actions, then each action. let num_actions = self.actions.len() as u32; state.update(&num_actions.to_le_bytes()); - // If the memo_key is None, then there is no memo, and we populate the memo key - // field with a dummy key. - let dummy_payload_key: PayloadKey = [0u8; 32].into(); + // If the memo_key is None, then there is no memo, so there will be no + // outputs that the memo key is passed to, so we can fill in a dummy key. + let memo_key = self.memo_key().unwrap_or([0u8; 32].into()); // Hash the effecting data of each action, in the order it appears in the plan, // which will be the order it appears in the transaction. for action_plan in &self.actions { - state.update( - action_plan - .effect_hash(fvk, memo_key.as_ref().unwrap_or(&dummy_payload_key)) - .as_bytes(), - ); + state.update(action_plan.effect_hash(fvk, &memo_key).as_bytes()); } EffectHash(state.finalize().as_array().clone()) @@ -534,9 +538,9 @@ mod tests { fee: Fee::default(), chain_id: "penumbra-test".to_string(), }, - detection_data: DetectionDataPlan { + detection_data: Some(DetectionDataPlan { clue_plans: vec![CluePlan::new(&mut OsRng, addr, 1)], - }, + }), memo: Some(MemoPlan::new(&mut OsRng, memo_plaintext.clone()).unwrap()), }; diff --git a/crates/core/transaction/src/plan.rs b/crates/core/transaction/src/plan.rs index 3cd9ae5360..abba297613 100644 --- a/crates/core/transaction/src/plan.rs +++ b/crates/core/transaction/src/plan.rs @@ -41,7 +41,7 @@ use crate::TransactionParameters; pub struct TransactionPlan { pub actions: Vec, pub transaction_parameters: TransactionParameters, - pub detection_data: DetectionDataPlan, + pub detection_data: Option, pub memo: Option, } @@ -66,10 +66,6 @@ impl TransactionPlan { }) } - pub fn clue_plans(&self) -> impl Iterator { - self.detection_data.clue_plans.iter() - } - pub fn delegations(&self) -> impl Iterator { self.actions.iter().filter_map(|action| { if let ActionPlan::Delegate(d) = action { @@ -272,8 +268,12 @@ impl TransactionPlan { self.output_plans().count() } - /// Method to add `CluePlan`s to a `TransactionPlan`. - pub fn add_all_clue_plans(&mut self, mut rng: R, precision_bits: usize) { + /// Method to populate the detection data for this transaction plan. + pub fn populate_detection_data( + &mut self, + mut rng: R, + precision_bits: usize, + ) { // Add one clue per recipient. let mut clue_plans = vec![]; for dest_address in self.dest_addresses() { @@ -287,7 +287,13 @@ impl TransactionPlan { clue_plans.push(CluePlan::new(&mut rng, dummy_address, precision_bits)); } - self.detection_data.clue_plans = clue_plans; + if !clue_plans.is_empty() { + self.detection_data = Some(DetectionDataPlan { + clue_plans: clue_plans, + }); + } else { + self.detection_data = None; + } } /// Convenience method to grab the `MemoKey` from the plan. @@ -305,7 +311,7 @@ impl From for pb::TransactionPlan { Self { actions: msg.actions.into_iter().map(Into::into).collect(), transaction_parameters: Some(msg.transaction_parameters.into()), - detection_data: Some(msg.detection_data.into()), + detection_data: msg.detection_data.map(Into::into), memo: msg.memo.map(Into::into), } } @@ -324,10 +330,7 @@ impl TryFrom for TransactionPlan { .transaction_parameters .ok_or_else(|| anyhow::anyhow!("transaction plan missing transaction parameters"))? .try_into()?, - detection_data: value - .detection_data - .ok_or_else(|| anyhow::anyhow!("transaction plan missing detection data"))? - .try_into()?, + detection_data: value.detection_data.map(TryInto::try_into).transpose()?, memo: value.memo.map(TryInto::try_into).transpose()?, }) } diff --git a/crates/core/transaction/src/plan/build.rs b/crates/core/transaction/src/plan/build.rs index 64fd02305a..4ce5198e5c 100644 --- a/crates/core/transaction/src/plan/build.rs +++ b/crates/core/transaction/src/plan/build.rs @@ -10,8 +10,7 @@ use std::fmt::Debug; use super::TransactionPlan; use crate::ActionPlan; use crate::{ - action::Action, AuthorizationData, AuthorizingData, DetectionData, Transaction, - TransactionBody, WitnessData, + action::Action, AuthorizationData, AuthorizingData, Transaction, TransactionBody, WitnessData, }; impl TransactionPlan { @@ -30,16 +29,7 @@ impl TransactionPlan { .map(|memo_data| memo_data.memo()) .transpose()?; - // Add detection data when there are outputs. - let detection_data: Option = if self.num_outputs() == 0 { - None - } else { - let mut fmd_clues = Vec::new(); - for clue_plan in self.clue_plans() { - fmd_clues.push(clue_plan.clue()); - } - Some(DetectionData { fmd_clues }) - }; + let detection_data = self.detection_data.as_ref().map(|x| x.detection_data()); let transaction_body = TransactionBody { actions, diff --git a/crates/view/src/planner.rs b/crates/view/src/planner.rs index 526d1b2019..4bc6e0f07f 100644 --- a/crates/view/src/planner.rs +++ b/crates/view/src/planner.rs @@ -632,7 +632,7 @@ impl Planner { // Add clue plans for `Output`s. let precision_bits = fmd_params.precision_bits; self.plan - .add_all_clue_plans(&mut self.rng, precision_bits.into()); + .populate_detection_data(&mut self.rng, precision_bits.into()); tracing::debug!(plan = ?self.plan, "finished balancing transaction"); diff --git a/crates/wasm/src/planner.rs b/crates/wasm/src/planner.rs index 2f8ffce8db..af74b0c978 100644 --- a/crates/wasm/src/planner.rs +++ b/crates/wasm/src/planner.rs @@ -540,7 +540,7 @@ impl Planner { // Add clue plans for `Output`s. let precision_bits = fmd_params.precision_bits; self.plan - .add_all_clue_plans(&mut self.rng, precision_bits.into()); + .populate_detection_data(&mut self.rng, precision_bits.into()); // Clear the planner and pull out the plan to return self.balance = Balance::zero(); From e9905fe7ec9404039b22f37b89bba6e63bf44a8d Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Fri, 29 Dec 2023 11:03:55 -0500 Subject: [PATCH 09/84] transaction: delete unused impl --- crates/core/transaction/src/transaction.rs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/crates/core/transaction/src/transaction.rs b/crates/core/transaction/src/transaction.rs index 917b900daf..c4f1e7f769 100644 --- a/crates/core/transaction/src/transaction.rs +++ b/crates/core/transaction/src/transaction.rs @@ -525,14 +525,6 @@ impl Transaction { } } -/* -impl From for Vec { - fn from(transaction_body: TransactionBody) -> Vec { - let protobuf_serialized: pbt::TransactionBody = transaction_body.into(); - protobuf_serialized.encode_to_vec() - } -} - */ impl DomainType for TransactionBody { type Proto = pbt::TransactionBody; } From 165659f3f4a9eeebe92f2f0cd5b596c8379bbd80 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Fri, 29 Dec 2023 12:40:01 -0500 Subject: [PATCH 10/84] Split out an effecthash crate This needs to be in an independent crate at the bottom of the dep tree, so that every component can depend on it and implement `EffectingData` to determine how that componen's data should be effect-hashed. --- Cargo.lock | 13 + Cargo.toml | 1 + crates/core/app/Cargo.toml | 1 + crates/core/app/src/tests/spend.rs | 3 +- crates/core/component/chain/Cargo.toml | 1 + .../core/component/chain/src/effect_hash.rs | 63 - crates/core/component/chain/src/lib.rs | 1 - .../core/component/chain/src/transaction.rs | 2 +- crates/core/effecthash/Cargo.toml | 10 + crates/core/effecthash/src/effect_hash.rs | 57 + crates/core/effecthash/src/effecting_data.rs | 6 + crates/core/effecthash/src/lib.rs | 5 + crates/core/transaction/Cargo.toml | 1 + crates/core/transaction/src/auth_data.rs | 2 +- crates/core/transaction/src/effect_hash.rs | 4 +- crates/core/transaction/src/plan/action.rs | 2 +- crates/custody/Cargo.toml | 3 +- crates/custody/src/threshold/sign.rs | 2 +- .../gen/penumbra.core.effecthash.v1alpha1.rs | 15 + ...penumbra.core.effecthash.v1alpha1.serde.rs | 94 + .../gen/penumbra.core.transaction.v1alpha1.rs | 18 +- ...enumbra.core.transaction.v1alpha1.serde.rs | 94 - .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 338980 -> 339237 bytes crates/proto/src/lib.rs | 7 + deployments/scripts/rust-docs | 1 + .../core/effecthash/v1alpha1/effecthash.pb.go | 167 ++ .../transaction/v1alpha1/transaction.pb.go | 1770 ++++++++--------- .../core/effecthash/v1alpha1/effecthash.proto | 8 + .../transaction/v1alpha1/transaction.proto | 8 +- tools/proto-compiler/src/main.rs | 1 + 30 files changed, 1259 insertions(+), 1101 deletions(-) create mode 100644 crates/core/effecthash/Cargo.toml create mode 100644 crates/core/effecthash/src/effect_hash.rs create mode 100644 crates/core/effecthash/src/effecting_data.rs create mode 100644 crates/core/effecthash/src/lib.rs create mode 100644 crates/proto/src/gen/penumbra.core.effecthash.v1alpha1.rs create mode 100644 crates/proto/src/gen/penumbra.core.effecthash.v1alpha1.serde.rs create mode 100644 proto/go/gen/penumbra/core/effecthash/v1alpha1/effecthash.pb.go create mode 100644 proto/penumbra/penumbra/core/effecthash/v1alpha1/effecthash.proto diff --git a/Cargo.lock b/Cargo.lock index cb3f145775..feb0c2e99d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4927,6 +4927,7 @@ dependencies = [ "penumbra-dao", "penumbra-dex", "penumbra-distributions", + "penumbra-effecthash", "penumbra-fee", "penumbra-governance", "penumbra-ibc", @@ -5066,6 +5067,7 @@ dependencies = [ "ics23", "once_cell", "penumbra-asset", + "penumbra-effecthash", "penumbra-keys", "penumbra-num", "penumbra-proto", @@ -5134,6 +5136,7 @@ dependencies = [ "futures", "hex", "penumbra-chain", + "penumbra-effecthash", "penumbra-keys", "penumbra-proto", "penumbra-transaction", @@ -5274,6 +5277,15 @@ dependencies = [ "tokio", ] +[[package]] +name = "penumbra-effecthash" +version = "0.64.1" +dependencies = [ + "anyhow", + "hex", + "penumbra-proto", +] + [[package]] name = "penumbra-fee" version = "0.64.1" @@ -5883,6 +5895,7 @@ dependencies = [ "penumbra-chain", "penumbra-dao", "penumbra-dex", + "penumbra-effecthash", "penumbra-fee", "penumbra-governance", "penumbra-ibc", diff --git a/Cargo.toml b/Cargo.toml index 5016036338..8ea6fb659e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,6 +20,7 @@ members = [ "crates/core/num", "crates/core/keys", "crates/core/asset", + "crates/core/effecthash", "crates/core/component/chain", "crates/core/component/shielded-pool", "crates/core/component/governance", diff --git a/crates/core/app/Cargo.toml b/crates/core/app/Cargo.toml index 9c22f26b1d..e0a1450faf 100644 --- a/crates/core/app/Cargo.toml +++ b/crates/core/app/Cargo.toml @@ -14,6 +14,7 @@ penumbra-tct = { path = "../../crypto/tct" } penumbra-proof-params = { path = "../../crypto/proof-params" } penumbra-asset = { path = "../asset" } penumbra-keys = { path = "../keys" } +penumbra-effecthash = { path = "../effecthash" } penumbra-num = { path = "../num" } penumbra-chain = { path = "../component/chain", features = ["component"] } penumbra-shielded-pool = { path = "../component/shielded-pool", features = [ diff --git a/crates/core/app/src/tests/spend.rs b/crates/core/app/src/tests/spend.rs index 520803429d..6c9d0ca4eb 100644 --- a/crates/core/app/src/tests/spend.rs +++ b/crates/core/app/src/tests/spend.rs @@ -5,8 +5,9 @@ use cnidarium::{ArcStateDeltaExt, StateDelta, TempStorage}; use cnidarium_component::{ActionHandler as _, Component}; use decaf377_rdsa::SigningKey; use penumbra_asset::Value; -use penumbra_chain::{component::StateWriteExt, EffectHash, TransactionContext}; +use penumbra_chain::{component::StateWriteExt, TransactionContext}; use penumbra_compact_block::component::CompactBlockManager; +use penumbra_effecthash::EffectHash; use penumbra_keys::{test_keys, PayloadKey}; use penumbra_num::Amount; use penumbra_sct::component::SourceContext; diff --git a/crates/core/component/chain/Cargo.toml b/crates/core/component/chain/Cargo.toml index 39cd84eb9e..d2b5eef08e 100644 --- a/crates/core/component/chain/Cargo.toml +++ b/crates/core/component/chain/Cargo.toml @@ -11,6 +11,7 @@ penumbra-asset = { path = "../../../core/asset", default-features = false } penumbra-proto = { path = "../../../proto", default-features = false } penumbra-tct = { path = "../../../crypto/tct" } penumbra-keys = { path = "../../../core/keys", default-features = false } +penumbra-effecthash = { path = "../../../core/effecthash", default-features = false } penumbra-num = { path = "../../../core/num", default-features = false } # Penumbra dependencies diff --git a/crates/core/component/chain/src/effect_hash.rs b/crates/core/component/chain/src/effect_hash.rs index 10465111be..8b13789179 100644 --- a/crates/core/component/chain/src/effect_hash.rs +++ b/crates/core/component/chain/src/effect_hash.rs @@ -1,64 +1 @@ -use penumbra_proto::{penumbra::core::transaction::v1alpha1 as pb_transaction, DomainType}; -/// Something that can be hashed to produce an [`EffectHash`]. -pub trait EffectingData { - fn effect_hash(&self) -> EffectHash; -} - -/// A hash of a transaction's _effecting data_, describing its effects on the -/// chain state. -/// -/// This includes, e.g., the commitments to new output notes created by the -/// transaction, or nullifiers spent by the transaction, but does not include -/// _authorizing data_ such as signatures or zk proofs. -/// -/// TODO: move this to the transaction crate, can be done when we ditch the chain component. -#[derive(Clone, Copy, Eq, PartialEq)] -pub struct EffectHash(pub [u8; 64]); - -impl EffectHash { - pub fn as_bytes(&self) -> &[u8; 64] { - &self.0 - } -} - -impl Default for EffectHash { - fn default() -> Self { - Self([0u8; 64]) - } -} - -impl std::fmt::Debug for EffectHash { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_tuple("EffectHash") - .field(&hex::encode(self.0)) - .finish() - } -} - -impl DomainType for EffectHash { - type Proto = pb_transaction::EffectHash; -} - -impl From for pb_transaction::EffectHash { - fn from(msg: EffectHash) -> Self { - Self { - inner: msg.0.to_vec(), - } - } -} - -impl TryFrom for EffectHash { - type Error = anyhow::Error; - fn try_from(value: pb_transaction::EffectHash) -> Result { - Ok(Self(value.inner.try_into().map_err(|_| { - anyhow::anyhow!("incorrect length for effect hash") - })?)) - } -} - -impl AsRef<[u8]> for EffectHash { - fn as_ref(&self) -> &[u8] { - &self.0 - } -} diff --git a/crates/core/component/chain/src/lib.rs b/crates/core/component/chain/src/lib.rs index 24c8951514..391404be2b 100644 --- a/crates/core/component/chain/src/lib.rs +++ b/crates/core/component/chain/src/lib.rs @@ -1,7 +1,6 @@ #![deny(clippy::unwrap_used)] #![cfg_attr(docsrs, feature(doc_cfg))] -pub use effect_hash::{EffectHash, EffectingData}; pub use epoch::Epoch; pub use transaction::TransactionContext; diff --git a/crates/core/component/chain/src/transaction.rs b/crates/core/component/chain/src/transaction.rs index 672d003ac4..aca9653eea 100644 --- a/crates/core/component/chain/src/transaction.rs +++ b/crates/core/component/chain/src/transaction.rs @@ -1,4 +1,4 @@ -use crate::EffectHash; +use penumbra_effecthash::EffectHash; use penumbra_tct as tct; /// Stateless verification context for a transaction. diff --git a/crates/core/effecthash/Cargo.toml b/crates/core/effecthash/Cargo.toml new file mode 100644 index 0000000000..0c26f500ae --- /dev/null +++ b/crates/core/effecthash/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "penumbra-effecthash" +version = "0.64.1" +edition = "2021" + +[dependencies] +# Workspace dependencies +penumbra-proto = { path = "../../proto", default-features = false } +anyhow = "1" +hex = "0.4" diff --git a/crates/core/effecthash/src/effect_hash.rs b/crates/core/effecthash/src/effect_hash.rs new file mode 100644 index 0000000000..fd3ab85296 --- /dev/null +++ b/crates/core/effecthash/src/effect_hash.rs @@ -0,0 +1,57 @@ +use penumbra_proto::{penumbra::core::effecthash::v1alpha1 as pb, DomainType}; + +/// A hash of a transaction's _effecting data_, describing its effects on the +/// chain state. +/// +/// This includes, e.g., the commitments to new output notes created by the +/// transaction, or nullifiers spent by the transaction, but does not include +/// _authorizing data_ such as signatures or zk proofs. +#[derive(Clone, Copy, Eq, PartialEq)] +pub struct EffectHash(pub [u8; 64]); + +impl EffectHash { + pub fn as_bytes(&self) -> &[u8; 64] { + &self.0 + } +} + +impl Default for EffectHash { + fn default() -> Self { + Self([0u8; 64]) + } +} + +impl std::fmt::Debug for EffectHash { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_tuple("EffectHash") + .field(&hex::encode(self.0)) + .finish() + } +} + +impl DomainType for EffectHash { + type Proto = pb::EffectHash; +} + +impl From for pb::EffectHash { + fn from(msg: EffectHash) -> Self { + Self { + inner: msg.0.to_vec(), + } + } +} + +impl TryFrom for EffectHash { + type Error = anyhow::Error; + fn try_from(value: pb::EffectHash) -> Result { + Ok(Self(value.inner.try_into().map_err(|_| { + anyhow::anyhow!("incorrect length for effect hash") + })?)) + } +} + +impl AsRef<[u8]> for EffectHash { + fn as_ref(&self) -> &[u8] { + &self.0 + } +} diff --git a/crates/core/effecthash/src/effecting_data.rs b/crates/core/effecthash/src/effecting_data.rs new file mode 100644 index 0000000000..e36a2d33f3 --- /dev/null +++ b/crates/core/effecthash/src/effecting_data.rs @@ -0,0 +1,6 @@ +use crate::EffectHash; + +/// Something that can be hashed to produce an [`EffectHash`]. +pub trait EffectingData { + fn effect_hash(&self) -> EffectHash; +} diff --git a/crates/core/effecthash/src/lib.rs b/crates/core/effecthash/src/lib.rs new file mode 100644 index 0000000000..464d7086d5 --- /dev/null +++ b/crates/core/effecthash/src/lib.rs @@ -0,0 +1,5 @@ +mod effect_hash; +mod effecting_data; + +pub use effect_hash::EffectHash; +pub use effecting_data::EffectingData; diff --git a/crates/core/transaction/Cargo.toml b/crates/core/transaction/Cargo.toml index a21e3a2b78..7b82173a02 100644 --- a/crates/core/transaction/Cargo.toml +++ b/crates/core/transaction/Cargo.toml @@ -22,6 +22,7 @@ penumbra-fee = { path = "../component/fee/", default-features = false } penumbra-num = { path = "../num", default-features = false } penumbra-asset = { path = "../asset", default-features = false } penumbra-keys = { path = "../keys", default-features = false } +penumbra-effecthash = { path = "../effecthash", default-features = false } # Git deps ibc-types = { version = "0.10.0", default-features = false } diff --git a/crates/core/transaction/src/auth_data.rs b/crates/core/transaction/src/auth_data.rs index 626db5148e..b7c016d637 100644 --- a/crates/core/transaction/src/auth_data.rs +++ b/crates/core/transaction/src/auth_data.rs @@ -1,5 +1,5 @@ use decaf377_rdsa::{Signature, SpendAuth}; -use penumbra_chain::EffectHash; +use penumbra_effecthash::EffectHash; use penumbra_proto::{core::transaction::v1alpha1 as pb, DomainType}; /// Authorization data returned in response to a diff --git a/crates/core/transaction/src/effect_hash.rs b/crates/core/transaction/src/effect_hash.rs index 5439db4c05..31bbceb912 100644 --- a/crates/core/transaction/src/effect_hash.rs +++ b/crates/core/transaction/src/effect_hash.rs @@ -1,10 +1,10 @@ use decaf377_fmd::Clue; -use penumbra_chain::EffectHash; use penumbra_dao::{DaoDeposit, DaoOutput, DaoSpend}; use penumbra_dex::{ lp::action::{PositionClose, PositionOpen, PositionRewardClaim, PositionWithdraw}, swap, swap_claim, }; +use penumbra_effecthash::EffectHash; use penumbra_fee::Fee; use penumbra_governance::{ DelegatorVote, DelegatorVoteBody, Proposal, ProposalDepositClaim, ProposalSubmit, @@ -31,7 +31,7 @@ pub trait EffectingData { fn effect_hash(&self) -> EffectHash; } -impl<'a, T: penumbra_chain::EffectingData> EffectingData for crate::Compat<'a, T> { +impl<'a, T: penumbra_effecthash::EffectingData> EffectingData for crate::Compat<'a, T> { fn effect_hash(&self) -> EffectHash { self.0.effect_hash() } diff --git a/crates/core/transaction/src/plan/action.rs b/crates/core/transaction/src/plan/action.rs index d3fba43cee..01703bae09 100644 --- a/crates/core/transaction/src/plan/action.rs +++ b/crates/core/transaction/src/plan/action.rs @@ -5,8 +5,8 @@ use anyhow::{anyhow, Context, Result}; use ark_ff::Zero; use decaf377::Fr; use penumbra_asset::Balance; -use penumbra_chain::EffectHash; use penumbra_dao::{DaoDeposit, DaoOutput, DaoSpend}; +use penumbra_effecthash::EffectHash; use penumbra_dex::{ lp::{ diff --git a/crates/custody/Cargo.toml b/crates/custody/Cargo.toml index 912e72f511..76d50a95ca 100644 --- a/crates/custody/Cargo.toml +++ b/crates/custody/Cargo.toml @@ -17,10 +17,11 @@ decaf377-frost = { path = "../crypto/decaf377-frost" } decaf377-ka = { path = "../crypto/decaf377-ka" } penumbra-chain = { path = "../core/component/chain" } penumbra-keys = { path = "../core/keys" } +penumbra-effecthash = { path = "../core/effecthash" } penumbra-proto = { path = "../proto", features = ["rpc"] } penumbra-transaction = { path = "../core/transaction" } -tokio = { version = "1.21.1", features = ["full"]} +tokio = { version = "1.21.1", features = ["full"] } anyhow = "1" serde_json = "1" serde = { version = "1", features = ["derive"] } diff --git a/crates/custody/src/threshold/sign.rs b/crates/custody/src/threshold/sign.rs index 455066b8bb..1e3ee621d6 100644 --- a/crates/custody/src/threshold/sign.rs +++ b/crates/custody/src/threshold/sign.rs @@ -7,7 +7,7 @@ use anyhow::{anyhow, Result}; use decaf377_frost as frost; use ed25519_consensus::{Signature, SigningKey, VerificationKey}; use frost::round1::SigningCommitments; -use penumbra_chain::EffectHash; +use penumbra_effecthash::EffectHash; use penumbra_proto::{penumbra::custody::threshold::v1alpha1 as pb, DomainType, Message}; use penumbra_transaction::{plan::TransactionPlan, AuthorizationData}; use rand_core::CryptoRngCore; diff --git a/crates/proto/src/gen/penumbra.core.effecthash.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.effecthash.v1alpha1.rs new file mode 100644 index 0000000000..abdfe82039 --- /dev/null +++ b/crates/proto/src/gen/penumbra.core.effecthash.v1alpha1.rs @@ -0,0 +1,15 @@ +/// The hash of a Penumbra transaction's *effecting data*, describing the effects +/// of the transaction on the chain state. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct EffectHash { + #[prost(bytes = "vec", tag = "1")] + pub inner: ::prost::alloc::vec::Vec, +} +impl ::prost::Name for EffectHash { + const NAME: &'static str = "EffectHash"; + const PACKAGE: &'static str = "penumbra.core.effecthash.v1alpha1"; + fn full_name() -> ::prost::alloc::string::String { + ::prost::alloc::format!("penumbra.core.effecthash.v1alpha1.{}", Self::NAME) + } +} diff --git a/crates/proto/src/gen/penumbra.core.effecthash.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.effecthash.v1alpha1.serde.rs new file mode 100644 index 0000000000..cd24e93abe --- /dev/null +++ b/crates/proto/src/gen/penumbra.core.effecthash.v1alpha1.serde.rs @@ -0,0 +1,94 @@ +impl serde::Serialize for EffectHash { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.inner.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.effecthash.v1alpha1.EffectHash", len)?; + if !self.inner.is_empty() { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("inner", pbjson::private::base64::encode(&self.inner).as_str())?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for EffectHash { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "inner", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Inner, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "inner" => Ok(GeneratedField::Inner), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = EffectHash; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.effecthash.v1alpha1.EffectHash") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut inner__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Inner => { + if inner__.is_some() { + return Err(serde::de::Error::duplicate_field("inner")); + } + inner__ = + Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) + ; + } + } + } + Ok(EffectHash { + inner: inner__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.core.effecthash.v1alpha1.EffectHash", FIELDS, GeneratedVisitor) + } +} diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs index a8cf7d648d..cbb683746a 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs @@ -409,27 +409,15 @@ impl ::prost::Name for ActionView { ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) } } -/// An authorization hash for a Penumbra transaction. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct EffectHash { - #[prost(bytes = "vec", tag = "1")] - pub inner: ::prost::alloc::vec::Vec, -} -impl ::prost::Name for EffectHash { - const NAME: &'static str = "EffectHash"; - const PACKAGE: &'static str = "penumbra.core.transaction.v1alpha1"; - fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) - } -} /// The data required to authorize a transaction plan. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct AuthorizationData { /// The computed auth hash for the approved transaction plan. #[prost(message, optional, tag = "1")] - pub effect_hash: ::core::option::Option, + pub effect_hash: ::core::option::Option< + super::super::effecthash::v1alpha1::EffectHash, + >, /// The required spend authorizations, returned in the same order as the /// Spend actions in the original request. #[prost(message, repeated, tag = "2")] diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs index 560a7a7070..0b649f1cb4 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs @@ -1599,100 +1599,6 @@ impl<'de> serde::Deserialize<'de> for DetectionDataPlan { deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.DetectionDataPlan", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for EffectHash { - #[allow(deprecated)] - fn serialize(&self, serializer: S) -> std::result::Result - where - S: serde::Serializer, - { - use serde::ser::SerializeStruct; - let mut len = 0; - if !self.inner.is_empty() { - len += 1; - } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.EffectHash", len)?; - if !self.inner.is_empty() { - #[allow(clippy::needless_borrow)] - struct_ser.serialize_field("inner", pbjson::private::base64::encode(&self.inner).as_str())?; - } - struct_ser.end() - } -} -impl<'de> serde::Deserialize<'de> for EffectHash { - #[allow(deprecated)] - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - const FIELDS: &[&str] = &[ - "inner", - ]; - - #[allow(clippy::enum_variant_names)] - enum GeneratedField { - Inner, - } - impl<'de> serde::Deserialize<'de> for GeneratedField { - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - struct GeneratedVisitor; - - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = GeneratedField; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(formatter, "expected one of: {:?}", &FIELDS) - } - - #[allow(unused_variables)] - fn visit_str(self, value: &str) -> std::result::Result - where - E: serde::de::Error, - { - match value { - "inner" => Ok(GeneratedField::Inner), - _ => Err(serde::de::Error::unknown_field(value, FIELDS)), - } - } - } - deserializer.deserialize_identifier(GeneratedVisitor) - } - } - struct GeneratedVisitor; - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = EffectHash; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.transaction.v1alpha1.EffectHash") - } - - fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, - { - let mut inner__ = None; - while let Some(k) = map_.next_key()? { - match k { - GeneratedField::Inner => { - if inner__.is_some() { - return Err(serde::de::Error::duplicate_field("inner")); - } - inner__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; - } - } - } - Ok(EffectHash { - inner: inner__.unwrap_or_default(), - }) - } - } - deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.EffectHash", FIELDS, GeneratedVisitor) - } -} impl serde::Serialize for Id { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index a2715239a6044f8535005bb7e8dcb161b1860f86..c4c03ac1271a792fd86b62a8c0eb6360bb8b0ee3 100644 GIT binary patch delta 8314 zcmZu%eRNe-c7JD|^Il%=%g4*jhan;HK}Z5gNC^3c5J*A@AV>m?d=)|nL1-mFKE#E# z4^*UBbP80?IO9+TJB$lQ24{4T+78+gsZ{K^Ty?tq!$n=zE}b>2%Tc>(soLMZ=bV>L zS6TdVe|PWS-uryqeSYuW{MA3_{qViKgAa=r=-%BMenZ~ey~86DySI%F)(!0$9j+VR zv152>eCOcU&boW+2k+UtbFlt@-K*U@x@UZkKh1G!nNvH-sdXIvSwhb6mjA2pBEAZR z()6dBMc$Mu?;+ul3i&D=N)tu<6Ki)4Cpeex?3P7aE5{N8Cf2TzyA#_7#|H;$65EHz zhDLX7<2&QB1@X=dTJ+cb->GdaaVH^pR&&cIo6W{=cE?#4R!H(%&lCGIhoU@^U&S z#&_-+-F0A)Q!hrX{+(XTgct~h^e;bCxmmwIJ(spjlRwG!{`77y%@2n{zoKATbalNf z5bb*KVVThH?Ue=kw-prYUg4#CB%{8Jh1!G5bYEtK<^-3XFEc}3!DY;sS)s+jWri=a z;ZSa-*bhz7FW1ZR9zUAv#XO}#6!K**6?++8m_dY5jzgHDT))5}2{fh1+ZNDZ%GYmq z%Z)lYS9;a?G{?FLw$!&f1XBLOMZCtGjC@(BUzjToR~1six)2D3(<&VTp|Gmj>qNoA zS5rf!dZLBWCxF0my7gc+p;WFUkpiDo#2P$k)MZze*Kucn1+^v4ZyX4bUm zZQd%BLmaA1-`*(uJIcrlSh$BND2tgX07Aqve~PmqV%gLZZ+*aqshk>$?nw0MzGk^l zzrR+-8hIXx1cH>)ZI;GUQeIf=5Q3D~&-J>3AefO#UDG5NS65QD_23z)jF&nD|H^68 zy@Nc3L_pR0drk7es%nZ`7YRajPQF9zQaHuih;d6_)rH!0Z?oK(RTnMsCJ;mNxEu6O zn&p1ozD&f6%?jf-hz(fb6P!tM70tT8MgB!qGev{gxW_ls&Flby(43d=l?DD7N~_Lp zmE~2fG}ZcZkk%5j)G{c(wQPpB36&{dwTBk!Ev<4>R(mwxTZ|ZrE9=nLTIG_~4!a__ zhso@S)dUfN5V2!+vqPw$qivqoiilxfb%l27o;KM!rz@HT52eCUG?s3V0Xi| zkZqi;M>Q4AO?2xk^JKC9`!<0HX9qxNY&HO80^9@k86o)v5vglOH{Q( zY^#~;5NJ!9nk@};)T?G$6M@#NZg&W@-o%VP2f^#DoN0LgOI4#aN${4c84iKBw7kwC z_MF?`%?$>qe7QnjnkO3vS130QJXUf=eUJ6W4v{OCF1Km$G_6$gtSO8%D^;08psk$Y zN(h6tvZc){3ev!_Pp_CSrzZPSX(I6Nt6yZ<5%~9Y_t-RPzU)`attk!ce&wbs4YdA- z#m)v=fA2C&L*HAioGA+0YUPF<1#R`5j-=&9!CT$gZFy*tYf`*)@YbYw>ENxI(_v}p zpsh*K&`{T^HP(bP3&?D{FnOS@ZCUATpsnp&?G<`a-c{(n>-0#wEK06Zrmf)~2zE1JhSUzs1Z_jj z0=Jbi!P~H?%kr{(xiK~QS>SC{rZt5r3%reWZicf!+la|83D!8s#p zX2XATg=1&Ke{+3;-O(bHE$GsQjQj-Db{p6SdmA<|AA(`Z z_2rNsscQ4U+dkV(KpxU~H%6!mvRL^%d&~|imdS_W8K{eeIx=)0Qo)C#n{nYeup^h(<4=3-5 zmIiSn+|PEC*<=8C_;=eT3WO}XW9DH7LYCb#Oh*7hmfg0qMYyw#kXal61Q|&M;XXGK zGrb))_AHrg4o5&l8JSb>jblb5eA4gJHH+lEt@~1R?sxlQE-NS6S8w(`{K4M0sMD(o z*Z^bty+yL7bu7i^t~VAlT`xj>aCy z0)fDLAXqk1Q9qmvJt#~a+zgXZu3f1p>QDy-)q9yxCP3IlfYTj>#yTjo6_pe&nzSJ*Hc`Wo`Ch0mW5=i0NF+5j}yM zvyTYM4+7yP0v!yYHN5u3pZz!O^cvSzYTMpMA6;PQxjC7s}byPrRS_sNf0iF3U zOP6%)K6OkFEtZcgJtiPDjT4XNn1Ir>5S(KIQZobfdVb{FBJ^EMU<|(v(B9RzMYI?~ zMJbPqKCbI~gQP&*L$i($kj62Ww9WNJHbqV>l(C4J`!clz=$=Gafg78u;o- z{q_?1SnZROmEuuRPl{Nc<=|NXysgk%i*d*N$oEC)@AR==xu*8}BIl_TMbDA9l^#=m7&QLKEXN8(=jp!l_%K|tMgV<&~W2Q5MdsbBQp}}c^o)$QVOo`|r z44p5}%+q34gR=(C%`IMgK!rj*rz@7pj-BTOWQ~cyKT6IC$R`UyIVYf>Og2c+9|;I3 zV}yWWXex~nng}2yl(mBTBY`8RILHRy^ZLzYvLtzaG8;scIxnE23bnj31=S3efeM8*g$#n7xqGDc`1z>r1O4DOEwbdlkv z`|3HNmRck96hk+M5LAGTUCs*XbE2o$QaxW?5YSX6F24r=bgRx!-38H-Tv_NYCLTs795LaB$!F^Fcd6~3vU;TV?%R_oGbQ1;b1qktFs1RR( zP+z%0)*N5Gl*9&hI?6afhN+hXB#MOy@sfa&vJfF&;(ctg`@Xs?prwov5{#jnFCWy) z0&2=yLA@-XrVKULSAUJN^>NReCG0OAR6i6Y}OMH&eueR zIimrQ>zZh6@*W7dFkaVxxk}#GoxyrcU3aY=5OJ=Hm?;vFT}69uP%|LnTo=pl@E+qS z%HR{_hThmGk0KBu(2dDJ+*EH&2I8K2L$vqVK-@)dh&5}yyD<1nKk~K+{aRP_%l=&a z(ok>nxiB9YGI^Nq=tuiyO9QSE@*Q{j0>bkhclrV%9SzdW!kGZ^E$ zt~5Zzc~`_tg8^h$(RfEt8X)4lEACw7{S%?KEI;zT2>lxt=5^9r?~;j2zg{h?MJ_*V z@3RW&LAER|^QO*UD?69r8WVBTWdlUEo9lC;mn=3|pTr4bNie- z0D}6BQy_7I0y#)lfdD1J1vVW57~F$oB?ut62gyp1I6;COA}c|FKm{}h5+JCD2rqVc zM+1U-h^zvMPFMKW+^3GxtC8wmn4xDSz)AaQ~OIXuZ_2?A&iWf(y{ zOjf-Bf_iw83I*~AS@jYpRv>_Gb8!PMeT1xhff?LK2{chC5oEphr%SGDjj1sDN&FvmQA? z^==OEQV0-pz-lOtw?gU(`h77JrzFb~+{U^G%g(ao39@Pk9E5m+tQv~5Dmg_~4FQ1) zXw(oOsHe!PAwW=1kyS%+f;!QJmrEuMs}sN)ZZ5Kf?hL@-*RRIRE6!;r@3< zAK4_X9%BNxE4URQ8d#*5YJFN$Eyg4{Oe8s`xZI9HHWxooh5utFhmY|meS2R z2`h+asi-*6SiT=QN1==g~YvR9X}dWZ2$&@R4tP z_`Y#`;^PFcV}x)p=O7^1&rp1dvm)O!gzq_gp88zOdHunFtZT$I3O(;e2*@^y#w?K! zj`Nh2jc;M3a{b5!3O%oTw#v=9yc;f1w7{!H$Xu@PqJD9!tZKwHLSA$s0pWSkO&TCV zUgSwzkC1tOLu@&-Q>c^vbyJ}@Y+HsBiLyX;mF5U!W0up%fE z5HT+k-YoHJu{<8%%X)O1tWV+^#k}km0+4N#ZdMQw#Fx1k)(iQ5iT4rz(|1`uFBwJCvK#w#0{jlZmPsYu*iCo=pS8%KxDm1 zQ7kIA=>kr0gH&NK{Xhs0Xm&Ut%DF)qM(P0~^bIQD51LGc@hwsXmdb+%G|wE2ffZj+ g`4I#J^)1TF-xdk}PN2d2Va<`!VR@-^SVgY=4|ns>Bme*a delta 8132 zcmZu$Yj9OnmcD!Kotv9;^SV1v62NN+AtWIoFB0A)Btb+>0Go&MFkomLAwh_AH*|Rc z5m5$;q6fE#mPiTRjo_=&6MCwUZUt@Hk``wy9p=we4`W$&HEmaotxgr?eCzDJlc}2d zcfYgNx7OOPwZC)j=^Od4e3rj^pBSPYTZV7;)9Gi`?ca*PBsa-s^G=%VHk$@$%<$T% zY#nPp+Cmd1mc33vqV2K4O#|B=-q}0&@IZe@?_jU)4&r?qH}-89T(_xr`zDh-Mn&fJ zm@F9n&oX&BC)l?sNY`nR$iI;J>l%@7e$gNc%|AUV<7Uojif48O839S9WqPF5{Ck5e zFn@hi7B)-`A7^Np8EFrH23lrCI>MiEEwdw2gNXsDh*pV6u_zgnY%_KJRA3G_%k+g2 zp=BbL7sLalA{5b5Q)!SHq%nvxN_YfEtqVPpKx0aR^&t(Wd~?20K2)7gQ=Nz4hxM~O zf`9(pdBGDRB#@Rx=BrM*tI4J!q$;AMb0$!W?wsTis6|!PK^w*(v?`5^Gkk<6R>l=dh z&>z!KVTPv3j_L}^aUMMQirn!Y!N20pvS2sQ8xc^Inb0ElR#j21bCDoaB?>%Zm*O$O z{TQOusunxt4=wWk?AqA4;4#FIJj4dm(kg#s{)<#@sa;V#2C)GvdXzIsuA^7X%YRC)D3!%yc=is)fde1xR9M%Q(A~K=5ywP#!#ha+FpxBXi8> z)8zx%Gh+oo2Vy8LXSV5{A-hb;A`zd0xt<-b31h*AShJ^0^9ZqKPoELAB37DKZIK_E z4`;~MsYYQ?)opfwDSPwMT5LY48ZN&gN;3hAHV%lbwmTb(gxsBhb2%VYe?T(kN<*Jbd$p&qevYjf8vO!x_=Vv_|v{hJ;ap88z(Q>tFD#=Y&KGr|^p}x(1 zKkPNP=E&UCYBkZ-kOTVa3Lh*7^wsr^E^DrqYgDUq%th8UBXg4r+L}tgDRMzu)7;`{ z2`$%-j4=V)T4ftW8YMtmJ7spt#Y}*=7K7AbwOY$wHKQag+0oYRS44x}JJJU<=)Ki` z>*HpVz1aGEC8klHmg|+h#sENDKQgm3I2CZcu)M<%73jq}qJ& zHcasokdJg5X3loB0xkPgyBkLVXniA97J$}QJ=5Dj>zmUSoDyhAc0TE@()cRl$(-z)DH4vON0N85_>YE#JzGybxjapCDOI}N#v&j zzop`y_LEpLT#R&HjGbh!5CEj#NhRT00>N=-X@y4!w{vopqrtSxu3<{06VLcAvWEJNj@GM69$ZN9Vx00a{(Y;ipo5KV`_puRInjls*a;8 z6~pSxQM(0*S!kJn*m8iAJcKgaEh=j~g!I@gz^%iSWa#KV5&3&_xkJ|G>=V#hHHesj zLezdEI%VyY{elWYCLSWteo=UbhX}M^luZaWgcKMLnAM%Kul9g|(&SPycox(F0jcRA zC9X%`}$1!D7IkKw3*Omq;GqXJtn)O`Vu;g~tUK<=$QCZH6p6OZATfK+r4oMQr7@gR>I zFA7>cXV%;$57j<5S}Bf+dQQai9S7$Gu&6k=595yO=nEq9TT{GHE~|Y(#B`92Kyj$5 z=!=4WBVn{7@DTM7}`Zj#R)wH7z)an z!F^RgLRoHxR_BDe%NZfP82YJ&_5y5b_f}BPiOvO%8fbN1Kz`Y{kY5b_X5hnkUbLhZ zdo#G_1tgeF8`tXf(R~Hg#n7JdILj_T=q?)>x(g7(%ThD7dP6{YStFDeL%%mNL489& zdpTS72#j+qZEFev+5A>HB7En+Qf-=n8*=EyPT@cVv)(Gjv(9e$s z^@4zka#m0;2&gDa&C}}F0y4@PA-@>fTV`UMAi#j3q?{StUkga7%iICul&{s>=9l-% z_fl_r5*~u{wwU7A1L_NKWIYPBx+I{#Y(VHQhJKU~V1Q6y&I;-!0SU%mCNg#OvWUDV zL`h?^tv}iOzd!vXWBj!zxp82d`KUvV@8<1vnfoh`F_RnU6+t?T3WUA^nC>BbuZUQd zhsb$FDb_>As5DL=46lj@%$_neCnFNKL8Qunuyye0AyD&Yk`Xc1p;{YqTmoO zKo(zH*UbY<-MIXj&AO28cK}#J%0YCxqH^bo7rR@+U0&dt`c7$mH;6%Vf34!|RXw zBTJo5WXs_)Z<@j%$hP_TjfuGFvjHO8O|KmQLA)sn$A#Gdk?p2P-WjY4FoVLH0fb!lVFNK?R5;w?y1l2MFpdkv~2tsK#^qZL=14~?L-N;f*@q}l1f=6 z0|+j#y`uoZ-Ahi%0D`-hoRUcpl*|+4lnfB4fL6%>g8BqGAp;2N6Xb+Uf*@q}krOgN zDR6;pYXAm!A2}rh2<|>|N+v;2GEb6IGC-gL+ItQV)F%m_l6Xf0g8C#mA(OzTB=rv6(BADZg8DQ$5d;Y8)1y=fnPJ{yWgT;f zI=aF}kRZsI!=&zYMwT&veqp(f9;QaCB;gC{VOq2}Ui@rO@|SYV6}n>5Rs0O6GVWBbd(^7_V87eAjq0yq*_b1n^#xM>E>r^A`514PY^`bG_+o=qbDiybMxI=S)a#4JV~+KU@XR@ zxwoD&v)9SuM*K$1Q{>)u0pWRyitS52AVQuZyyWu>rRM(kiaD@OHiIb8dR`%?h5*?{ zP7MKq_zFP{RfI&e)idU+b+W8g6Zfn$M6qyN0fKmjGVJR%Ac$wEq%@RKc{+NQBCnGu zX)?Fh%JF8?gR=BNp6#I8$D=t%G#=kP@7vUu+`75<;r_wC9}m{r8w+-f5DxYp z1O)pW<&Fu{10vr!!v92kpXPBfubKaNP}Vi!Hwt~tj}VY;6pK3|kMK3h&cPpTr1Ew2 zEsFfgboI(LdAy`=QLHeiMaX=vZ^-;(udHgqZ-gB3Apzkz46A1WLA=DpuwE$C(RV0vh3toyLU_JIPA?R4G4B%Dt__58 z087LCfbe~n#@dqth^X(GT3tne;9m9>73t{vgui2L zMMdy@pSJ{m7b%j^7QZ9Tw(C% penumbra.core.transaction.v1alpha1.TransactionBody - 26, // 1: penumbra.core.transaction.v1alpha1.Transaction.binding_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature - 27, // 2: penumbra.core.transaction.v1alpha1.Transaction.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 25, // 1: penumbra.core.transaction.v1alpha1.Transaction.binding_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature + 26, // 2: penumbra.core.transaction.v1alpha1.Transaction.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot 5, // 3: penumbra.core.transaction.v1alpha1.TransactionBody.actions:type_name -> penumbra.core.transaction.v1alpha1.Action 3, // 4: penumbra.core.transaction.v1alpha1.TransactionBody.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters 4, // 5: penumbra.core.transaction.v1alpha1.TransactionBody.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData - 20, // 6: penumbra.core.transaction.v1alpha1.TransactionBody.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext - 28, // 7: penumbra.core.transaction.v1alpha1.TransactionParameters.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee - 29, // 8: penumbra.core.transaction.v1alpha1.DetectionData.fmd_clues:type_name -> penumbra.crypto.decaf377_fmd.v1alpha1.Clue - 30, // 9: penumbra.core.transaction.v1alpha1.Action.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend - 31, // 10: penumbra.core.transaction.v1alpha1.Action.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output - 32, // 11: penumbra.core.transaction.v1alpha1.Action.swap:type_name -> penumbra.core.component.dex.v1alpha1.Swap - 33, // 12: penumbra.core.transaction.v1alpha1.Action.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaim - 34, // 13: penumbra.core.transaction.v1alpha1.Action.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 35, // 14: penumbra.core.transaction.v1alpha1.Action.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 36, // 15: penumbra.core.transaction.v1alpha1.Action.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 37, // 16: penumbra.core.transaction.v1alpha1.Action.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 38, // 17: penumbra.core.transaction.v1alpha1.Action.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote - 39, // 18: penumbra.core.transaction.v1alpha1.Action.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote - 40, // 19: penumbra.core.transaction.v1alpha1.Action.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 41, // 20: penumbra.core.transaction.v1alpha1.Action.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 42, // 21: penumbra.core.transaction.v1alpha1.Action.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose - 43, // 22: penumbra.core.transaction.v1alpha1.Action.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw - 44, // 23: penumbra.core.transaction.v1alpha1.Action.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim - 45, // 24: penumbra.core.transaction.v1alpha1.Action.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 46, // 25: penumbra.core.transaction.v1alpha1.Action.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 47, // 26: penumbra.core.transaction.v1alpha1.Action.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim - 48, // 27: penumbra.core.transaction.v1alpha1.Action.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 49, // 28: penumbra.core.transaction.v1alpha1.Action.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 50, // 29: penumbra.core.transaction.v1alpha1.Action.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit - 51, // 30: penumbra.core.transaction.v1alpha1.Action.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 19, // 6: penumbra.core.transaction.v1alpha1.TransactionBody.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext + 27, // 7: penumbra.core.transaction.v1alpha1.TransactionParameters.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee + 28, // 8: penumbra.core.transaction.v1alpha1.DetectionData.fmd_clues:type_name -> penumbra.crypto.decaf377_fmd.v1alpha1.Clue + 29, // 9: penumbra.core.transaction.v1alpha1.Action.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend + 30, // 10: penumbra.core.transaction.v1alpha1.Action.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output + 31, // 11: penumbra.core.transaction.v1alpha1.Action.swap:type_name -> penumbra.core.component.dex.v1alpha1.Swap + 32, // 12: penumbra.core.transaction.v1alpha1.Action.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaim + 33, // 13: penumbra.core.transaction.v1alpha1.Action.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 34, // 14: penumbra.core.transaction.v1alpha1.Action.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 35, // 15: penumbra.core.transaction.v1alpha1.Action.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 36, // 16: penumbra.core.transaction.v1alpha1.Action.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 37, // 17: penumbra.core.transaction.v1alpha1.Action.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 38, // 18: penumbra.core.transaction.v1alpha1.Action.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote + 39, // 19: penumbra.core.transaction.v1alpha1.Action.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 40, // 20: penumbra.core.transaction.v1alpha1.Action.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 41, // 21: penumbra.core.transaction.v1alpha1.Action.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 42, // 22: penumbra.core.transaction.v1alpha1.Action.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw + 43, // 23: penumbra.core.transaction.v1alpha1.Action.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim + 44, // 24: penumbra.core.transaction.v1alpha1.Action.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 45, // 25: penumbra.core.transaction.v1alpha1.Action.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 46, // 26: penumbra.core.transaction.v1alpha1.Action.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim + 47, // 27: penumbra.core.transaction.v1alpha1.Action.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend + 48, // 28: penumbra.core.transaction.v1alpha1.Action.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput + 49, // 29: penumbra.core.transaction.v1alpha1.Action.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 50, // 30: penumbra.core.transaction.v1alpha1.Action.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal 7, // 31: penumbra.core.transaction.v1alpha1.TransactionPerspective.payload_keys:type_name -> penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment 8, // 32: penumbra.core.transaction.v1alpha1.TransactionPerspective.spend_nullifiers:type_name -> penumbra.core.transaction.v1alpha1.NullifierWithNote - 52, // 33: penumbra.core.transaction.v1alpha1.TransactionPerspective.advice_notes:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 53, // 34: penumbra.core.transaction.v1alpha1.TransactionPerspective.address_views:type_name -> penumbra.core.keys.v1alpha1.AddressView - 54, // 35: penumbra.core.transaction.v1alpha1.TransactionPerspective.denoms:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata + 51, // 33: penumbra.core.transaction.v1alpha1.TransactionPerspective.advice_notes:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 52, // 34: penumbra.core.transaction.v1alpha1.TransactionPerspective.address_views:type_name -> penumbra.core.keys.v1alpha1.AddressView + 53, // 35: penumbra.core.transaction.v1alpha1.TransactionPerspective.denoms:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata 1, // 36: penumbra.core.transaction.v1alpha1.TransactionPerspective.transaction_id:type_name -> penumbra.core.transaction.v1alpha1.Id - 55, // 37: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey - 56, // 38: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 57, // 39: penumbra.core.transaction.v1alpha1.NullifierWithNote.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 52, // 40: penumbra.core.transaction.v1alpha1.NullifierWithNote.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 54, // 37: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey + 55, // 38: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 56, // 39: penumbra.core.transaction.v1alpha1.NullifierWithNote.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 51, // 40: penumbra.core.transaction.v1alpha1.NullifierWithNote.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note 10, // 41: penumbra.core.transaction.v1alpha1.TransactionView.body_view:type_name -> penumbra.core.transaction.v1alpha1.TransactionBodyView - 26, // 42: penumbra.core.transaction.v1alpha1.TransactionView.binding_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature - 27, // 43: penumbra.core.transaction.v1alpha1.TransactionView.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 25, // 42: penumbra.core.transaction.v1alpha1.TransactionView.binding_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature + 26, // 43: penumbra.core.transaction.v1alpha1.TransactionView.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot 11, // 44: penumbra.core.transaction.v1alpha1.TransactionBodyView.action_views:type_name -> penumbra.core.transaction.v1alpha1.ActionView 3, // 45: penumbra.core.transaction.v1alpha1.TransactionBodyView.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters 4, // 46: penumbra.core.transaction.v1alpha1.TransactionBodyView.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData - 23, // 47: penumbra.core.transaction.v1alpha1.TransactionBodyView.memo_view:type_name -> penumbra.core.transaction.v1alpha1.MemoView - 58, // 48: penumbra.core.transaction.v1alpha1.ActionView.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView - 59, // 49: penumbra.core.transaction.v1alpha1.ActionView.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView - 60, // 50: penumbra.core.transaction.v1alpha1.ActionView.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapView - 61, // 51: penumbra.core.transaction.v1alpha1.ActionView.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimView - 34, // 52: penumbra.core.transaction.v1alpha1.ActionView.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 35, // 53: penumbra.core.transaction.v1alpha1.ActionView.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 36, // 54: penumbra.core.transaction.v1alpha1.ActionView.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 37, // 55: penumbra.core.transaction.v1alpha1.ActionView.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 38, // 56: penumbra.core.transaction.v1alpha1.ActionView.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote - 62, // 57: penumbra.core.transaction.v1alpha1.ActionView.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView - 40, // 58: penumbra.core.transaction.v1alpha1.ActionView.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 41, // 59: penumbra.core.transaction.v1alpha1.ActionView.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 42, // 60: penumbra.core.transaction.v1alpha1.ActionView.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose - 43, // 61: penumbra.core.transaction.v1alpha1.ActionView.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw - 44, // 62: penumbra.core.transaction.v1alpha1.ActionView.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim - 45, // 63: penumbra.core.transaction.v1alpha1.ActionView.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 46, // 64: penumbra.core.transaction.v1alpha1.ActionView.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 48, // 65: penumbra.core.transaction.v1alpha1.ActionView.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 49, // 66: penumbra.core.transaction.v1alpha1.ActionView.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 50, // 67: penumbra.core.transaction.v1alpha1.ActionView.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit - 47, // 68: penumbra.core.transaction.v1alpha1.ActionView.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim - 51, // 69: penumbra.core.transaction.v1alpha1.ActionView.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 12, // 70: penumbra.core.transaction.v1alpha1.AuthorizationData.effect_hash:type_name -> penumbra.core.transaction.v1alpha1.EffectHash + 22, // 47: penumbra.core.transaction.v1alpha1.TransactionBodyView.memo_view:type_name -> penumbra.core.transaction.v1alpha1.MemoView + 57, // 48: penumbra.core.transaction.v1alpha1.ActionView.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView + 58, // 49: penumbra.core.transaction.v1alpha1.ActionView.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView + 59, // 50: penumbra.core.transaction.v1alpha1.ActionView.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapView + 60, // 51: penumbra.core.transaction.v1alpha1.ActionView.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimView + 33, // 52: penumbra.core.transaction.v1alpha1.ActionView.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 34, // 53: penumbra.core.transaction.v1alpha1.ActionView.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 35, // 54: penumbra.core.transaction.v1alpha1.ActionView.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 36, // 55: penumbra.core.transaction.v1alpha1.ActionView.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 37, // 56: penumbra.core.transaction.v1alpha1.ActionView.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 61, // 57: penumbra.core.transaction.v1alpha1.ActionView.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView + 39, // 58: penumbra.core.transaction.v1alpha1.ActionView.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 40, // 59: penumbra.core.transaction.v1alpha1.ActionView.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 41, // 60: penumbra.core.transaction.v1alpha1.ActionView.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 42, // 61: penumbra.core.transaction.v1alpha1.ActionView.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw + 43, // 62: penumbra.core.transaction.v1alpha1.ActionView.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim + 44, // 63: penumbra.core.transaction.v1alpha1.ActionView.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 45, // 64: penumbra.core.transaction.v1alpha1.ActionView.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 47, // 65: penumbra.core.transaction.v1alpha1.ActionView.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend + 48, // 66: penumbra.core.transaction.v1alpha1.ActionView.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput + 49, // 67: penumbra.core.transaction.v1alpha1.ActionView.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 46, // 68: penumbra.core.transaction.v1alpha1.ActionView.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim + 50, // 69: penumbra.core.transaction.v1alpha1.ActionView.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 62, // 70: penumbra.core.transaction.v1alpha1.AuthorizationData.effect_hash:type_name -> penumbra.core.effecthash.v1alpha1.EffectHash 63, // 71: penumbra.core.transaction.v1alpha1.AuthorizationData.spend_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature 63, // 72: penumbra.core.transaction.v1alpha1.AuthorizationData.delegator_vote_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - 27, // 73: penumbra.core.transaction.v1alpha1.WitnessData.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 26, // 73: penumbra.core.transaction.v1alpha1.WitnessData.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot 64, // 74: penumbra.core.transaction.v1alpha1.WitnessData.state_commitment_proofs:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitmentProof - 17, // 75: penumbra.core.transaction.v1alpha1.TransactionPlan.actions:type_name -> penumbra.core.transaction.v1alpha1.ActionPlan + 16, // 75: penumbra.core.transaction.v1alpha1.TransactionPlan.actions:type_name -> penumbra.core.transaction.v1alpha1.ActionPlan 3, // 76: penumbra.core.transaction.v1alpha1.TransactionPlan.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters - 16, // 77: penumbra.core.transaction.v1alpha1.TransactionPlan.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionDataPlan - 19, // 78: penumbra.core.transaction.v1alpha1.TransactionPlan.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoPlan - 18, // 79: penumbra.core.transaction.v1alpha1.DetectionDataPlan.clue_plans:type_name -> penumbra.core.transaction.v1alpha1.CluePlan + 15, // 77: penumbra.core.transaction.v1alpha1.TransactionPlan.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionDataPlan + 18, // 78: penumbra.core.transaction.v1alpha1.TransactionPlan.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoPlan + 17, // 79: penumbra.core.transaction.v1alpha1.DetectionDataPlan.clue_plans:type_name -> penumbra.core.transaction.v1alpha1.CluePlan 65, // 80: penumbra.core.transaction.v1alpha1.ActionPlan.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendPlan 66, // 81: penumbra.core.transaction.v1alpha1.ActionPlan.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputPlan 67, // 82: penumbra.core.transaction.v1alpha1.ActionPlan.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapPlan 68, // 83: penumbra.core.transaction.v1alpha1.ActionPlan.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimPlan - 34, // 84: penumbra.core.transaction.v1alpha1.ActionPlan.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 35, // 85: penumbra.core.transaction.v1alpha1.ActionPlan.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 36, // 86: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 37, // 87: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 38, // 88: penumbra.core.transaction.v1alpha1.ActionPlan.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 33, // 84: penumbra.core.transaction.v1alpha1.ActionPlan.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 34, // 85: penumbra.core.transaction.v1alpha1.ActionPlan.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 35, // 86: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 36, // 87: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 37, // 88: penumbra.core.transaction.v1alpha1.ActionPlan.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote 69, // 89: penumbra.core.transaction.v1alpha1.ActionPlan.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVotePlan - 40, // 90: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 51, // 91: penumbra.core.transaction.v1alpha1.ActionPlan.withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 41, // 92: penumbra.core.transaction.v1alpha1.ActionPlan.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 42, // 93: penumbra.core.transaction.v1alpha1.ActionPlan.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 39, // 90: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 50, // 91: penumbra.core.transaction.v1alpha1.ActionPlan.withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 40, // 92: penumbra.core.transaction.v1alpha1.ActionPlan.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 41, // 93: penumbra.core.transaction.v1alpha1.ActionPlan.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose 70, // 94: penumbra.core.transaction.v1alpha1.ActionPlan.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan 71, // 95: penumbra.core.transaction.v1alpha1.ActionPlan.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan - 45, // 96: penumbra.core.transaction.v1alpha1.ActionPlan.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 46, // 97: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 44, // 96: penumbra.core.transaction.v1alpha1.ActionPlan.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 45, // 97: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate 72, // 98: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan - 48, // 99: penumbra.core.transaction.v1alpha1.ActionPlan.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 49, // 100: penumbra.core.transaction.v1alpha1.ActionPlan.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 50, // 101: penumbra.core.transaction.v1alpha1.ActionPlan.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 47, // 99: penumbra.core.transaction.v1alpha1.ActionPlan.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend + 48, // 100: penumbra.core.transaction.v1alpha1.ActionPlan.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput + 49, // 101: penumbra.core.transaction.v1alpha1.ActionPlan.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit 73, // 102: penumbra.core.transaction.v1alpha1.CluePlan.address:type_name -> penumbra.core.keys.v1alpha1.Address - 21, // 103: penumbra.core.transaction.v1alpha1.MemoPlan.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext + 20, // 103: penumbra.core.transaction.v1alpha1.MemoPlan.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext 73, // 104: penumbra.core.transaction.v1alpha1.MemoPlaintext.return_address:type_name -> penumbra.core.keys.v1alpha1.Address - 53, // 105: penumbra.core.transaction.v1alpha1.MemoPlaintextView.return_address:type_name -> penumbra.core.keys.v1alpha1.AddressView - 24, // 106: penumbra.core.transaction.v1alpha1.MemoView.visible:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Visible - 25, // 107: penumbra.core.transaction.v1alpha1.MemoView.opaque:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Opaque - 20, // 108: penumbra.core.transaction.v1alpha1.MemoView.Visible.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext - 22, // 109: penumbra.core.transaction.v1alpha1.MemoView.Visible.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintextView - 20, // 110: penumbra.core.transaction.v1alpha1.MemoView.Opaque.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext + 52, // 105: penumbra.core.transaction.v1alpha1.MemoPlaintextView.return_address:type_name -> penumbra.core.keys.v1alpha1.AddressView + 23, // 106: penumbra.core.transaction.v1alpha1.MemoView.visible:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Visible + 24, // 107: penumbra.core.transaction.v1alpha1.MemoView.opaque:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Opaque + 19, // 108: penumbra.core.transaction.v1alpha1.MemoView.Visible.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext + 21, // 109: penumbra.core.transaction.v1alpha1.MemoView.Visible.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintextView + 19, // 110: penumbra.core.transaction.v1alpha1.MemoView.Opaque.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext 111, // [111:111] is the sub-list for method output_type 111, // [111:111] is the sub-list for method input_type 111, // [111:111] is the sub-list for extension type_name @@ -3684,18 +3638,6 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EffectHash); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AuthorizationData); i { case 0: return &v.state @@ -3707,7 +3649,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WitnessData); i { case 0: return &v.state @@ -3719,7 +3661,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionPlan); i { case 0: return &v.state @@ -3731,7 +3673,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DetectionDataPlan); i { case 0: return &v.state @@ -3743,7 +3685,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ActionPlan); i { case 0: return &v.state @@ -3755,7 +3697,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CluePlan); i { case 0: return &v.state @@ -3767,7 +3709,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoPlan); i { case 0: return &v.state @@ -3779,7 +3721,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoCiphertext); i { case 0: return &v.state @@ -3791,7 +3733,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoPlaintext); i { case 0: return &v.state @@ -3803,7 +3745,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoPlaintextView); i { case 0: return &v.state @@ -3815,7 +3757,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoView); i { case 0: return &v.state @@ -3827,7 +3769,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoView_Visible); i { case 0: return &v.state @@ -3839,7 +3781,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoView_Opaque); i { case 0: return &v.state @@ -3900,7 +3842,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { (*ActionView_UndelegateClaim)(nil), (*ActionView_Ics20Withdrawal)(nil), } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17].OneofWrappers = []interface{}{ + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[16].OneofWrappers = []interface{}{ (*ActionPlan_Spend)(nil), (*ActionPlan_Output)(nil), (*ActionPlan_Swap)(nil), @@ -3924,7 +3866,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { (*ActionPlan_DaoOutput)(nil), (*ActionPlan_DaoDeposit)(nil), } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23].OneofWrappers = []interface{}{ + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22].OneofWrappers = []interface{}{ (*MemoView_Visible_)(nil), (*MemoView_Opaque_)(nil), } @@ -3934,7 +3876,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc, NumEnums: 0, - NumMessages: 26, + NumMessages: 25, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/penumbra/penumbra/core/effecthash/v1alpha1/effecthash.proto b/proto/penumbra/penumbra/core/effecthash/v1alpha1/effecthash.proto new file mode 100644 index 0000000000..70cd6fccbf --- /dev/null +++ b/proto/penumbra/penumbra/core/effecthash/v1alpha1/effecthash.proto @@ -0,0 +1,8 @@ +syntax = "proto3"; +package penumbra.core.effecthash.v1alpha1; + +// The hash of a Penumbra transaction's _effecting data_, describing the effects +// of the transaction on the chain state. +message EffectHash { + bytes inner = 1; +} diff --git a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto index 5f54486239..b77170adbb 100644 --- a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto +++ b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package penumbra.core.transaction.v1alpha1; import "penumbra/core/asset/v1alpha1/asset.proto"; +import "penumbra/core/effecthash/v1alpha1/effecthash.proto"; import "penumbra/core/component/dex/v1alpha1/dex.proto"; import "penumbra/core/component/fee/v1alpha1/fee.proto"; import "penumbra/core/component/governance/v1alpha1/governance.proto"; @@ -193,15 +194,10 @@ message ActionView { } } -// An authorization hash for a Penumbra transaction. -message EffectHash { - bytes inner = 1; -} - // The data required to authorize a transaction plan. message AuthorizationData { // The computed auth hash for the approved transaction plan. - EffectHash effect_hash = 1; + core.effecthash.v1alpha1.EffectHash effect_hash = 1; // The required spend authorizations, returned in the same order as the // Spend actions in the original request. repeated crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature spend_auths = 2; diff --git a/tools/proto-compiler/src/main.rs b/tools/proto-compiler/src/main.rs index 898d51e47d..442b0e5ef0 100644 --- a/tools/proto-compiler/src/main.rs +++ b/tools/proto-compiler/src/main.rs @@ -89,6 +89,7 @@ fn main() -> anyhow::Result<()> { &[ "../../proto/penumbra/penumbra/core/app/v1alpha1/app.proto", "../../proto/penumbra/penumbra/core/asset/v1alpha1/asset.proto", + "../../proto/penumbra/penumbra/core/effecthash/v1alpha1/effecthash.proto", "../../proto/penumbra/penumbra/core/component/chain/v1alpha1/chain.proto", "../../proto/penumbra/penumbra/core/component/compact_block/v1alpha1/compact_block.proto", "../../proto/penumbra/penumbra/core/component/dao/v1alpha1/dao.proto", From d640c21f459f8cd662f839e6ee7975346d3db5fe Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Fri, 29 Dec 2023 17:52:53 -0500 Subject: [PATCH 11/84] effecthash: clean up split impls into new crate --- Cargo.lock | 7 + crates/core/component/dao/Cargo.toml | 1 + .../component/dao/src/action/dao_deposit.rs | 7 + .../component/dao/src/action/dao_output.rs | 7 + .../component/dao/src/action/dao_spend.rs | 7 + crates/core/component/dex/Cargo.toml | 1 + crates/core/component/dex/src/lp/action.rs | 27 + crates/core/component/dex/src/swap/action.rs | 15 + .../component/dex/src/swap_claim/action.rs | 15 + crates/core/component/governance/Cargo.toml | 1 + .../governance/src/delegator_vote/action.rs | 13 + .../core/component/governance/src/proposal.rs | 9 + .../src/proposal_deposit_claim/action.rs | 13 +- .../governance/src/proposal_submit/action.rs | 7 + .../src/proposal_withdraw/action.rs | 7 + .../governance/src/validator_vote/action.rs | 20 + crates/core/component/ibc/Cargo.toml | 1 + crates/core/component/ibc/src/ibc_action.rs | 7 + .../core/component/shielded-pool/Cargo.toml | 1 + .../shielded-pool/src/ics20_withdrawal.rs | 7 + .../shielded-pool/src/output/action.rs | 15 + .../shielded-pool/src/spend/action.rs | 15 + crates/core/component/stake/Cargo.toml | 1 + crates/core/component/stake/src/delegate.rs | 8 + crates/core/component/stake/src/undelegate.rs | 8 + .../stake/src/undelegate_claim/action.rs | 14 + .../stake/src/validator/definition.rs | 7 + crates/core/effecthash/Cargo.toml | 1 + crates/core/effecthash/src/effect_hash.rs | 25 +- crates/core/transaction/src/action.rs | 30 + crates/core/transaction/src/detection_data.rs | 7 + crates/core/transaction/src/effect_hash.rs | 584 ------------------ crates/core/transaction/src/lib.rs | 2 - crates/core/transaction/src/memo.rs | 13 +- crates/core/transaction/src/parameters.rs | 7 + crates/core/transaction/src/plan.rs | 222 ++++++- crates/core/transaction/src/plan/action.rs | 3 +- crates/core/transaction/src/transaction.rs | 45 ++ 38 files changed, 588 insertions(+), 592 deletions(-) delete mode 100644 crates/core/transaction/src/effect_hash.rs diff --git a/Cargo.lock b/Cargo.lock index feb0c2e99d..c1e3877a67 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5169,6 +5169,7 @@ dependencies = [ "pbjson-types", "penumbra-asset", "penumbra-chain", + "penumbra-effecthash", "penumbra-keys", "penumbra-num", "penumbra-proto", @@ -5214,6 +5215,7 @@ dependencies = [ "pbjson-types", "penumbra-asset", "penumbra-chain", + "penumbra-effecthash", "penumbra-fee", "penumbra-keys", "penumbra-num", @@ -5282,6 +5284,7 @@ name = "penumbra-effecthash" version = "0.64.1" dependencies = [ "anyhow", + "blake2b_simd 0.5.11", "hex", "penumbra-proto", ] @@ -5340,6 +5343,7 @@ dependencies = [ "penumbra-chain", "penumbra-dao", "penumbra-distributions", + "penumbra-effecthash", "penumbra-fee", "penumbra-ibc", "penumbra-keys", @@ -5384,6 +5388,7 @@ dependencies = [ "pbjson-types", "penumbra-asset", "penumbra-chain", + "penumbra-effecthash", "penumbra-keys", "penumbra-num", "penumbra-proto", @@ -5668,6 +5673,7 @@ dependencies = [ "once_cell", "penumbra-asset", "penumbra-chain", + "penumbra-effecthash", "penumbra-ibc", "penumbra-keys", "penumbra-num", @@ -5718,6 +5724,7 @@ dependencies = [ "penumbra-chain", "penumbra-dao", "penumbra-distributions", + "penumbra-effecthash", "penumbra-keys", "penumbra-num", "penumbra-proof-params", diff --git a/crates/core/component/dao/Cargo.toml b/crates/core/component/dao/Cargo.toml index 40f5ce5bed..ed7e4908da 100644 --- a/crates/core/component/dao/Cargo.toml +++ b/crates/core/component/dao/Cargo.toml @@ -27,6 +27,7 @@ penumbra-sct = { path = "../sct", default-features = false } penumbra-asset = { path = "../../../core/asset", default-features = false } penumbra-num = { path = "../../../core/num", default-features = false } penumbra-keys = { path = "../../../core/keys", default-features = false } +penumbra-effecthash = { path = "../../../core/effecthash", default-features = false } # Crates.io deps ark-ff = { version = "0.4", default_features = false } diff --git a/crates/core/component/dao/src/action/dao_deposit.rs b/crates/core/component/dao/src/action/dao_deposit.rs index 1fc1fe7ed5..1486fdd40e 100644 --- a/crates/core/component/dao/src/action/dao_deposit.rs +++ b/crates/core/component/dao/src/action/dao_deposit.rs @@ -1,4 +1,5 @@ use anyhow::{Context, Error}; +use penumbra_effecthash::{EffectHash, EffectingData}; use serde::{Deserialize, Serialize}; use std::convert::{TryFrom, TryInto}; @@ -19,6 +20,12 @@ impl DaoDeposit { } } +impl EffectingData for DaoDeposit { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl DomainType for DaoDeposit { type Proto = pb::DaoDeposit; } diff --git a/crates/core/component/dao/src/action/dao_output.rs b/crates/core/component/dao/src/action/dao_output.rs index 8c15864f0b..f320546484 100644 --- a/crates/core/component/dao/src/action/dao_output.rs +++ b/crates/core/component/dao/src/action/dao_output.rs @@ -3,6 +3,7 @@ use serde::{Deserialize, Serialize}; use std::convert::{TryFrom, TryInto}; use penumbra_asset::{Balance, Value}; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_keys::Address; use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType}; @@ -20,6 +21,12 @@ impl DaoOutput { } } +impl EffectingData for DaoOutput { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl DomainType for DaoOutput { type Proto = pb::DaoOutput; } diff --git a/crates/core/component/dao/src/action/dao_spend.rs b/crates/core/component/dao/src/action/dao_spend.rs index d502010f3c..c04c703e9d 100644 --- a/crates/core/component/dao/src/action/dao_spend.rs +++ b/crates/core/component/dao/src/action/dao_spend.rs @@ -3,6 +3,7 @@ use serde::{Deserialize, Serialize}; use std::convert::TryFrom; use penumbra_asset::{Balance, Value}; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType}; #[derive(Clone, Debug, Serialize, Deserialize)] @@ -11,6 +12,12 @@ pub struct DaoSpend { pub value: Value, } +impl EffectingData for DaoSpend { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl DaoSpend { pub fn balance(&self) -> Balance { // Spends from the DAO produce value diff --git a/crates/core/component/dex/Cargo.toml b/crates/core/component/dex/Cargo.toml index 2fbe26dbb4..373c906273 100644 --- a/crates/core/component/dex/Cargo.toml +++ b/crates/core/component/dex/Cargo.toml @@ -43,6 +43,7 @@ penumbra-proof-params = { path = "../../../crypto/proof-params" } penumbra-asset = { path = "../../../core/asset", default-features = false } penumbra-num = { path = "../../../core/num", default-features = false } penumbra-keys = { path = "../../../core/keys", default-features = false } +penumbra-effecthash = { path = "../../../core/effecthash", default-features = false } decaf377-ka = { path = "../../../crypto/decaf377-ka/" } decaf377-fmd = { path = "../../../crypto/decaf377-fmd/" } diff --git a/crates/core/component/dex/src/lp/action.rs b/crates/core/component/dex/src/lp/action.rs index 8c9ce428cd..2373115d2d 100644 --- a/crates/core/component/dex/src/lp/action.rs +++ b/crates/core/component/dex/src/lp/action.rs @@ -1,6 +1,7 @@ use serde::{Deserialize, Serialize}; use penumbra_asset::{balance, Balance, Value}; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::{penumbra::core::component::dex::v1alpha1 as pb, DomainType}; use super::{position, position::Position, LpNft}; @@ -19,6 +20,14 @@ pub struct PositionOpen { pub position: Position, } +impl EffectingData for PositionOpen { + fn effect_hash(&self) -> EffectHash { + // The position open action consists only of the position, which + // we consider effecting data. + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl PositionOpen { /// Compute a commitment to the value this action contributes to its transaction. pub fn balance(&self) -> Balance { @@ -49,6 +58,12 @@ pub struct PositionClose { pub position_id: position::Id, } +impl EffectingData for PositionClose { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl PositionClose { /// Compute the value this action contributes to its transaction. pub fn balance(&self) -> Balance { @@ -82,6 +97,12 @@ pub struct PositionWithdraw { pub reserves_commitment: balance::Commitment, } +impl EffectingData for PositionWithdraw { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + /// A transaction action that claims retroactive rewards for a historical /// position. /// @@ -97,6 +118,12 @@ pub struct PositionRewardClaim { pub rewards_commitment: balance::Commitment, } +impl EffectingData for PositionRewardClaim { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl DomainType for PositionOpen { type Proto = pb::PositionOpen; } diff --git a/crates/core/component/dex/src/swap/action.rs b/crates/core/component/dex/src/swap/action.rs index 79b95bea53..16e887d825 100644 --- a/crates/core/component/dex/src/swap/action.rs +++ b/crates/core/component/dex/src/swap/action.rs @@ -2,6 +2,7 @@ use anyhow::Context; use ark_ff::Zero; use decaf377::Fr; use penumbra_asset::{balance, Balance, Value}; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_num::Amount; use penumbra_proto::{ core::component::dex::v1alpha1 as pbc, penumbra::core::component::dex::v1alpha1 as pb, @@ -39,6 +40,14 @@ impl Swap { } } +impl EffectingData for Swap { + fn effect_hash(&self) -> EffectHash { + // The effecting data is in the body of the swap, so we can + // just use hash the proto-encoding of the body. + self.body.effect_hash() + } +} + impl DomainType for Swap { type Proto = pb::Swap; } @@ -81,6 +90,12 @@ pub struct Body { pub payload: SwapPayload, } +impl EffectingData for Body { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl DomainType for Body { type Proto = pb::SwapBody; } diff --git a/crates/core/component/dex/src/swap_claim/action.rs b/crates/core/component/dex/src/swap_claim/action.rs index e41a33bfe7..285daeea88 100644 --- a/crates/core/component/dex/src/swap_claim/action.rs +++ b/crates/core/component/dex/src/swap_claim/action.rs @@ -1,5 +1,6 @@ use anyhow::Context; use penumbra_asset::Balance; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_fee::Fee; use penumbra_proof_params::GROTH16_PROOF_LENGTH_BYTES; use penumbra_proto::{penumbra::core::component::dex::v1alpha1 as pb, DomainType}; @@ -26,6 +27,14 @@ impl SwapClaim { } } +impl EffectingData for SwapClaim { + fn effect_hash(&self) -> EffectHash { + // The effecting data is in the body of the swap claim, so we can + // just use hash the proto-encoding of the body. + self.body.effect_hash() + } +} + impl DomainType for SwapClaim { type Proto = pb::SwapClaim; } @@ -72,6 +81,12 @@ pub struct Body { pub output_data: BatchSwapOutputData, } +impl EffectingData for Body { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl DomainType for Body { type Proto = pb::SwapClaimBody; } diff --git a/crates/core/component/governance/Cargo.toml b/crates/core/component/governance/Cargo.toml index 59351b05c6..ce88d47211 100644 --- a/crates/core/component/governance/Cargo.toml +++ b/crates/core/component/governance/Cargo.toml @@ -46,6 +46,7 @@ penumbra-distributions = { path = "../distributions", default-features = false } penumbra-chain = { path = "../chain", default-features = false } penumbra-asset = { path = "../../../core/asset", default-features = false } penumbra-keys = { path = "../../../core/keys", default-features = false } +penumbra-effecthash = { path = "../../../core/effecthash", default-features = false } penumbra-num = { path = "../../../core/num", default-features = false } # Penumbra dependencies diff --git a/crates/core/component/governance/src/delegator_vote/action.rs b/crates/core/component/governance/src/delegator_vote/action.rs index e4dece61f9..6edfefddca 100644 --- a/crates/core/component/governance/src/delegator_vote/action.rs +++ b/crates/core/component/governance/src/delegator_vote/action.rs @@ -3,6 +3,7 @@ use anyhow::Context; use crate::{vote::Vote, DelegatorVoteProof}; use decaf377_rdsa::{Signature, SpendAuth, VerificationKey}; use penumbra_asset::Value; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_num::Amount; use penumbra_proto::{core::component::governance::v1alpha1 as pb, DomainType}; use penumbra_sct::Nullifier; @@ -15,6 +16,12 @@ pub struct DelegatorVote { pub proof: DelegatorVoteProof, } +impl EffectingData for DelegatorVote { + fn effect_hash(&self) -> EffectHash { + self.body.effect_hash() + } +} + /// The body of a delegator vote. #[derive(Debug, Clone)] pub struct DelegatorVoteBody { @@ -34,6 +41,12 @@ pub struct DelegatorVoteBody { pub rk: VerificationKey, } +impl EffectingData for DelegatorVoteBody { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl From for pb::DelegatorVoteBody { fn from(value: DelegatorVoteBody) -> Self { pb::DelegatorVoteBody { diff --git a/crates/core/component/governance/src/proposal.rs b/crates/core/component/governance/src/proposal.rs index c5040c7f46..deaca2ce95 100644 --- a/crates/core/component/governance/src/proposal.rs +++ b/crates/core/component/governance/src/proposal.rs @@ -29,6 +29,15 @@ pub struct Proposal { pub payload: ProposalPayload, } +/* +// TODO: is this needed? +impl EffectingData for Proposal { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + */ + /// The protobuf type URL for a transaction plan. pub const TRANSACTION_PLAN_TYPE_URL: &str = "/penumbra.core.transaction.v1alpha1.TransactionPlan"; diff --git a/crates/core/component/governance/src/proposal_deposit_claim/action.rs b/crates/core/component/governance/src/proposal_deposit_claim/action.rs index f1633567fa..0be3a2b797 100644 --- a/crates/core/component/governance/src/proposal_deposit_claim/action.rs +++ b/crates/core/component/governance/src/proposal_deposit_claim/action.rs @@ -4,8 +4,9 @@ use penumbra_asset::{ asset::{self, DenomMetadata}, Balance, Value, STAKING_TOKEN_ASSET_ID, }; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_num::Amount; -use penumbra_proto::penumbra::core::component::governance::v1alpha1 as pb; +use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType}; use crate::proposal_state::{Outcome, Withdrawn}; @@ -26,6 +27,16 @@ pub struct ProposalDepositClaim { pub outcome: Outcome<()>, } +impl EffectingData for ProposalDepositClaim { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + +impl DomainType for ProposalDepositClaim { + type Proto = pb::ProposalDepositClaim; +} + impl From for pb::ProposalDepositClaim { fn from(value: ProposalDepositClaim) -> pb::ProposalDepositClaim { pb::ProposalDepositClaim { diff --git a/crates/core/component/governance/src/proposal_submit/action.rs b/crates/core/component/governance/src/proposal_submit/action.rs index b34c8c09b4..08c059e482 100644 --- a/crates/core/component/governance/src/proposal_submit/action.rs +++ b/crates/core/component/governance/src/proposal_submit/action.rs @@ -1,6 +1,7 @@ use serde::{Deserialize, Serialize}; use penumbra_asset::{Balance, Value, STAKING_TOKEN_ASSET_ID}; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_num::Amount; use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType}; @@ -20,6 +21,12 @@ pub struct ProposalSubmit { pub deposit_amount: Amount, } +impl EffectingData for ProposalSubmit { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl ProposalSubmit { /// Compute a commitment to the value contributed to a transaction by this proposal submission. pub fn balance(&self) -> Balance { diff --git a/crates/core/component/governance/src/proposal_withdraw/action.rs b/crates/core/component/governance/src/proposal_withdraw/action.rs index f3cefcf056..978f5bfb1c 100644 --- a/crates/core/component/governance/src/proposal_withdraw/action.rs +++ b/crates/core/component/governance/src/proposal_withdraw/action.rs @@ -1,6 +1,7 @@ use serde::{Deserialize, Serialize}; use penumbra_asset::{Balance, Value}; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_num::Amount; use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType}; @@ -16,6 +17,12 @@ pub struct ProposalWithdraw { pub reason: String, } +impl EffectingData for ProposalWithdraw { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl From for pb::ProposalWithdraw { fn from(value: ProposalWithdraw) -> pb::ProposalWithdraw { pb::ProposalWithdraw { diff --git a/crates/core/component/governance/src/validator_vote/action.rs b/crates/core/component/governance/src/validator_vote/action.rs index 9eb8be571c..0204aa01cf 100644 --- a/crates/core/component/governance/src/validator_vote/action.rs +++ b/crates/core/component/governance/src/validator_vote/action.rs @@ -1,4 +1,5 @@ use decaf377_rdsa::{Signature, SpendAuth}; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType}; use penumbra_stake::{GovernanceKey, IdentityKey}; use serde::{Deserialize, Serialize}; @@ -15,6 +16,25 @@ pub struct ValidatorVote { pub auth_sig: Signature, } +impl EffectingData for ValidatorVote { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + //self.body.effect_hash() + } +} + +/* +impl EffectingData for ValidatorVoteBody { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} +*/ + +impl DomainType for ValidatorVote { + type Proto = pb::ValidatorVote; +} + impl From for pb::ValidatorVote { fn from(msg: ValidatorVote) -> Self { Self { diff --git a/crates/core/component/ibc/Cargo.toml b/crates/core/component/ibc/Cargo.toml index adffb4a26e..89fdac9f1d 100644 --- a/crates/core/component/ibc/Cargo.toml +++ b/crates/core/component/ibc/Cargo.toml @@ -26,6 +26,7 @@ penumbra-chain = { path = "../chain", default-features = false } penumbra-asset = { path = "../../../core/asset", default-features = false } penumbra-num = { path = "../../../core/num", default-features = false } penumbra-keys = { path = "../../../core/keys", default-features = false } +penumbra-effecthash = { path = "../../../core/effecthash", default-features = false } # Penumbra dependencies ibc-types = { version = "0.10.0", default-features = false } diff --git a/crates/core/component/ibc/src/ibc_action.rs b/crates/core/component/ibc/src/ibc_action.rs index 8926471dfa..782b1feec1 100644 --- a/crates/core/component/ibc/src/ibc_action.rs +++ b/crates/core/component/ibc/src/ibc_action.rs @@ -31,6 +31,7 @@ use ibc_types::core::{ use ibc_types::DomainType as IbcTypesDomainType; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::penumbra::core::component::ibc::v1alpha1::{self as pb}; use penumbra_proto::{DomainType, Name}; use serde::{Deserialize, Serialize}; @@ -131,6 +132,12 @@ impl IbcRelay { } } +impl EffectingData for IbcRelay { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl DomainType for IbcRelay { type Proto = pb::IbcRelay; } diff --git a/crates/core/component/shielded-pool/Cargo.toml b/crates/core/component/shielded-pool/Cargo.toml index f7ac791dc3..2d147dc9a0 100644 --- a/crates/core/component/shielded-pool/Cargo.toml +++ b/crates/core/component/shielded-pool/Cargo.toml @@ -43,6 +43,7 @@ penumbra-chain = { path = "../chain", default-features = false } penumbra-asset = { path = "../../../core/asset", default-features = false } penumbra-num = { path = "../../../core/num", default-features = false } penumbra-keys = { path = "../../../core/keys", default-features = false } +penumbra-effecthash = { path = "../../../core/effecthash", default-features = false } decaf377-ka = { path = "../../../crypto/decaf377-ka/" } decaf377-fmd = { path = "../../../crypto/decaf377-fmd/" } diff --git a/crates/core/component/shielded-pool/src/ics20_withdrawal.rs b/crates/core/component/shielded-pool/src/ics20_withdrawal.rs index f9e69c38f0..9d6cd6f612 100644 --- a/crates/core/component/shielded-pool/src/ics20_withdrawal.rs +++ b/crates/core/component/shielded-pool/src/ics20_withdrawal.rs @@ -3,6 +3,7 @@ use penumbra_asset::{ asset::{self, DenomMetadata}, Balance, Value, }; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_keys::Address; use penumbra_num::Amount; use penumbra_proto::{ @@ -83,6 +84,12 @@ impl Ics20Withdrawal { } } +impl EffectingData for Ics20Withdrawal { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl DomainType for Ics20Withdrawal { type Proto = pb::Ics20Withdrawal; } diff --git a/crates/core/component/shielded-pool/src/output/action.rs b/crates/core/component/shielded-pool/src/output/action.rs index ff4ee9c2e7..b974c9f88e 100644 --- a/crates/core/component/shielded-pool/src/output/action.rs +++ b/crates/core/component/shielded-pool/src/output/action.rs @@ -2,6 +2,7 @@ use std::convert::{TryFrom, TryInto}; use anyhow::{Context, Error}; use penumbra_asset::balance; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_keys::symmetric::{OvkWrappedKey, WrappedMemoKey}; use penumbra_proto::{ core::component::shielded_pool::v1alpha1 as pb, @@ -26,6 +27,20 @@ pub struct Body { pub wrapped_memo_key: WrappedMemoKey, } +impl EffectingData for Body { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + +impl EffectingData for Output { + fn effect_hash(&self) -> EffectHash { + // The effecting data is in the body of the output, so we can + // just use hash the proto-encoding of the body. + self.body.effect_hash() + } +} + impl DomainType for Output { type Proto = pb::Output; } diff --git a/crates/core/component/shielded-pool/src/spend/action.rs b/crates/core/component/shielded-pool/src/spend/action.rs index 453f381cd5..1bf0285538 100644 --- a/crates/core/component/shielded-pool/src/spend/action.rs +++ b/crates/core/component/shielded-pool/src/spend/action.rs @@ -3,6 +3,7 @@ use std::convert::{TryFrom, TryInto}; use anyhow::{Context, Error}; use decaf377_rdsa::{Signature, SpendAuth, VerificationKey}; use penumbra_asset::balance; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::{core::component::shielded_pool::v1alpha1 as pb, DomainType}; use penumbra_sct::Nullifier; use serde::{Deserialize, Serialize}; @@ -24,6 +25,20 @@ pub struct Body { pub rk: VerificationKey, } +impl EffectingData for Body { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + +impl EffectingData for Spend { + fn effect_hash(&self) -> EffectHash { + // The effecting data is in the body of the spend, so we can + // just use hash the proto-encoding of the body. + self.body.effect_hash() + } +} + impl DomainType for Spend { type Proto = pb::Spend; } diff --git a/crates/core/component/stake/Cargo.toml b/crates/core/component/stake/Cargo.toml index a94fc8f7f4..bb053bb6c5 100644 --- a/crates/core/component/stake/Cargo.toml +++ b/crates/core/component/stake/Cargo.toml @@ -45,6 +45,7 @@ penumbra-chain = { path = "../chain", default-features = false } penumbra-dao = { path = "../dao", default-features = false } penumbra-distributions = { path = "../distributions", default-features = false } penumbra-keys = { path = "../../../core/keys", default-features = false } +penumbra-effecthash = { path = "../../../core/effecthash", default-features = false } penumbra-num = { path = "../../../core/num", default-features = false } penumbra-proof-params = { path = "../../../crypto/proof-params" } penumbra-proto = { path = "../../../proto" } diff --git a/crates/core/component/stake/src/delegate.rs b/crates/core/component/stake/src/delegate.rs index 302e4b6ec4..f9016316e5 100644 --- a/crates/core/component/stake/src/delegate.rs +++ b/crates/core/component/stake/src/delegate.rs @@ -1,4 +1,5 @@ use penumbra_asset::{Balance, Value, STAKING_TOKEN_ASSET_ID}; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_num::Amount; use penumbra_proto::{penumbra::core::component::stake::v1alpha1 as pb, DomainType}; use serde::{Deserialize, Serialize}; @@ -26,6 +27,13 @@ pub struct Delegate { pub delegation_amount: Amount, } +impl EffectingData for Delegate { + fn effect_hash(&self) -> EffectHash { + // For delegations, the entire action is considered effecting data. + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl Delegate { /// Return the balance resulting from issuing delegation tokens from staking tokens. pub fn balance(&self) -> Balance { diff --git a/crates/core/component/stake/src/undelegate.rs b/crates/core/component/stake/src/undelegate.rs index a36f8c87f8..7785912350 100644 --- a/crates/core/component/stake/src/undelegate.rs +++ b/crates/core/component/stake/src/undelegate.rs @@ -1,4 +1,5 @@ use penumbra_asset::{Balance, Value}; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_num::Amount; use penumbra_proto::{penumbra::core::component::stake::v1alpha1 as pb, DomainType}; use serde::{Deserialize, Serialize}; @@ -24,6 +25,13 @@ pub struct Undelegate { pub delegation_amount: Amount, } +impl EffectingData for Undelegate { + fn effect_hash(&self) -> EffectHash { + // For undelegations, the entire action is considered effecting data. + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl Undelegate { /// Return the balance after consuming delegation tokens, and producing unbonding tokens. pub fn balance(&self) -> Balance { diff --git a/crates/core/component/stake/src/undelegate_claim/action.rs b/crates/core/component/stake/src/undelegate_claim/action.rs index a9c89315d2..502eb68f92 100644 --- a/crates/core/component/stake/src/undelegate_claim/action.rs +++ b/crates/core/component/stake/src/undelegate_claim/action.rs @@ -1,4 +1,5 @@ use penumbra_asset::balance; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::{penumbra::core::component::stake::v1alpha1 as pb, DomainType}; use serde::{Deserialize, Serialize}; @@ -24,6 +25,19 @@ pub struct UndelegateClaim { pub proof: UndelegateClaimProof, } +impl EffectingData for UndelegateClaimBody { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} +impl EffectingData for UndelegateClaim { + fn effect_hash(&self) -> EffectHash { + // The effecting data is in the body of the undelegate claim, so we can + // just use hash the proto-encoding of the body. + self.body.effect_hash() + } +} + impl DomainType for UndelegateClaimBody { type Proto = pb::UndelegateClaimBody; } diff --git a/crates/core/component/stake/src/validator/definition.rs b/crates/core/component/stake/src/validator/definition.rs index 2b07c34921..efc10dde4a 100644 --- a/crates/core/component/stake/src/validator/definition.rs +++ b/crates/core/component/stake/src/validator/definition.rs @@ -1,4 +1,5 @@ use decaf377_rdsa::{Signature, SpendAuth}; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::{penumbra::core::component::stake::v1alpha1 as pb, DomainType}; use serde::{Deserialize, Serialize}; @@ -37,3 +38,9 @@ impl TryFrom for Definition { }) } } + +impl EffectingData for Definition { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} diff --git a/crates/core/effecthash/Cargo.toml b/crates/core/effecthash/Cargo.toml index 0c26f500ae..1596c18f90 100644 --- a/crates/core/effecthash/Cargo.toml +++ b/crates/core/effecthash/Cargo.toml @@ -8,3 +8,4 @@ edition = "2021" penumbra-proto = { path = "../../proto", default-features = false } anyhow = "1" hex = "0.4" +blake2b_simd = "0.5" diff --git a/crates/core/effecthash/src/effect_hash.rs b/crates/core/effecthash/src/effect_hash.rs index fd3ab85296..b752dcc7d3 100644 --- a/crates/core/effecthash/src/effect_hash.rs +++ b/crates/core/effecthash/src/effect_hash.rs @@ -1,4 +1,4 @@ -use penumbra_proto::{penumbra::core::effecthash::v1alpha1 as pb, DomainType}; +use penumbra_proto::{penumbra::core::effecthash::v1alpha1 as pb, DomainType, Message, Name}; /// A hash of a transaction's _effecting data_, describing its effects on the /// chain state. @@ -9,10 +9,33 @@ use penumbra_proto::{penumbra::core::effecthash::v1alpha1 as pb, DomainType}; #[derive(Clone, Copy, Eq, PartialEq)] pub struct EffectHash(pub [u8; 64]); +/// A helper function to create a BLAKE2b `State` instance given a variable-length personalization string. +fn create_personalized_state(personalization: &str) -> blake2b_simd::State { + let mut state = blake2b_simd::State::new(); + + // The `TypeUrl` provided as a personalization string is variable length, + // so we first include the length in bytes as a fixed-length prefix. + let length = personalization.len() as u64; + state.update(&length.to_le_bytes()); + state.update(personalization.as_bytes()); + + state +} + impl EffectHash { pub fn as_bytes(&self) -> &[u8; 64] { &self.0 } + + /// A helper function to hash the data of a proto-encoded message, using + /// the variable-length `TypeUrl` of the corresponding domain type as a + /// personalization string. + pub fn from_proto_effecting_data(message: &M) -> EffectHash { + let mut state = create_personalized_state(&M::type_url()); + state.update(&message.encode_to_vec()); + + EffectHash(*state.finalize().as_array()) + } } impl Default for EffectHash { diff --git a/crates/core/transaction/src/action.rs b/crates/core/transaction/src/action.rs index 3e4a81540b..486ec730d8 100644 --- a/crates/core/transaction/src/action.rs +++ b/crates/core/transaction/src/action.rs @@ -1,4 +1,5 @@ use anyhow::anyhow; +use penumbra_effecthash::{EffectHash, EffectingData}; use std::convert::{TryFrom, TryInto}; use penumbra_asset::balance; @@ -40,6 +41,35 @@ pub enum Action { DaoDeposit(penumbra_dao::DaoDeposit), } +impl EffectingData for Action { + fn effect_hash(&self) -> EffectHash { + match self { + Action::Output(output) => output.effect_hash(), + Action::Spend(spend) => spend.effect_hash(), + Action::Delegate(delegate) => delegate.effect_hash(), + Action::Undelegate(undelegate) => undelegate.effect_hash(), + Action::UndelegateClaim(claim) => claim.effect_hash(), + Action::ProposalSubmit(submit) => submit.effect_hash(), + Action::ProposalWithdraw(withdraw) => withdraw.effect_hash(), + Action::ProposalDepositClaim(claim) => claim.effect_hash(), + Action::DelegatorVote(vote) => vote.effect_hash(), + Action::ValidatorVote(vote) => vote.effect_hash(), + Action::SwapClaim(swap_claim) => swap_claim.effect_hash(), + Action::Swap(swap) => swap.effect_hash(), + Action::ValidatorDefinition(defn) => defn.effect_hash(), + Action::IbcRelay(payload) => payload.effect_hash(), + Action::PositionOpen(p) => p.effect_hash(), + Action::PositionClose(p) => p.effect_hash(), + Action::PositionWithdraw(p) => p.effect_hash(), + Action::PositionRewardClaim(p) => p.effect_hash(), + Action::Ics20Withdrawal(w) => w.effect_hash(), + Action::DaoSpend(d) => d.effect_hash(), + Action::DaoOutput(d) => d.effect_hash(), + Action::DaoDeposit(d) => d.effect_hash(), + } + } +} + impl Action { /// Create a tracing span to track execution related to this action. /// diff --git a/crates/core/transaction/src/detection_data.rs b/crates/core/transaction/src/detection_data.rs index c527cf7aab..0c25b2b984 100644 --- a/crates/core/transaction/src/detection_data.rs +++ b/crates/core/transaction/src/detection_data.rs @@ -1,5 +1,6 @@ use anyhow::Error; use decaf377_fmd::Clue; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::core::transaction::v1alpha1 as pbt; use penumbra_proto::DomainType; @@ -11,6 +12,12 @@ pub struct DetectionData { pub fmd_clues: Vec, } +impl EffectingData for DetectionData { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl DomainType for DetectionData { type Proto = pbt::DetectionData; } diff --git a/crates/core/transaction/src/effect_hash.rs b/crates/core/transaction/src/effect_hash.rs deleted file mode 100644 index 31bbceb912..0000000000 --- a/crates/core/transaction/src/effect_hash.rs +++ /dev/null @@ -1,584 +0,0 @@ -use decaf377_fmd::Clue; -use penumbra_dao::{DaoDeposit, DaoOutput, DaoSpend}; -use penumbra_dex::{ - lp::action::{PositionClose, PositionOpen, PositionRewardClaim, PositionWithdraw}, - swap, swap_claim, -}; -use penumbra_effecthash::EffectHash; -use penumbra_fee::Fee; -use penumbra_governance::{ - DelegatorVote, DelegatorVoteBody, Proposal, ProposalDepositClaim, ProposalSubmit, - ProposalWithdraw, ValidatorVote, ValidatorVoteBody, Vote, -}; -use penumbra_ibc::IbcRelay; -use penumbra_keys::FullViewingKey; -use penumbra_proto::{ - core::component::dex::v1alpha1 as pbd, core::component::fee::v1alpha1 as pbf, - core::component::governance::v1alpha1 as pbg, core::component::ibc::v1alpha1 as pbi, - core::component::shielded_pool::v1alpha1 as pb_sp, core::component::stake::v1alpha1 as pbs, - core::transaction::v1alpha1 as pbt, crypto::decaf377_fmd::v1alpha1 as pb_fmd, Message, Name, -}; -use penumbra_shielded_pool::{output, spend, Ics20Withdrawal}; -use penumbra_stake::{validator, Delegate, Undelegate, UndelegateClaimBody}; - -use crate::{ - memo::MemoCiphertext, plan::TransactionPlan, Action, DetectionData, Transaction, - TransactionBody, TransactionParameters, -}; - -// Note: temporarily duplicate of chain/EffectingData -pub trait EffectingData { - fn effect_hash(&self) -> EffectHash; -} - -impl<'a, T: penumbra_effecthash::EffectingData> EffectingData for crate::Compat<'a, T> { - fn effect_hash(&self) -> EffectHash { - self.0.effect_hash() - } -} - -impl Transaction { - pub fn effect_hash(&self) -> EffectHash { - self.transaction_body.effect_hash() - } -} - -impl TransactionBody { - pub fn expiry_height(&self) -> u64 { - self.transaction_parameters.expiry_height - } - - pub fn chain_id(&self) -> &str { - &self.transaction_parameters.chain_id - } - - pub fn effect_hash(&self) -> EffectHash { - let mut state = create_personalized_state(&pbt::TransactionBody::type_url()); - - let parameters_hash = self.transaction_parameters.effect_hash(); - let memo_hash = self - .memo - .as_ref() - .map(|memo| memo.effect_hash()) - // If the memo is not present, use the all-zero hash to record its absence in - // the overall effect hash. - .unwrap_or_default(); - let detection_data_hash = self - .detection_data - .as_ref() - .map(|detection_data| detection_data.effect_hash()) - // If the detection data is not present, use the all-zero hash to - // record its absence in the overall effect hash. - .unwrap_or_default(); - - // Hash the fixed data of the transaction body. - state.update(parameters_hash.as_bytes()); - state.update(memo_hash.as_bytes()); - state.update(detection_data_hash.as_bytes()); - - // Hash the number of actions, then each action. - let num_actions = self.actions.len() as u32; - state.update(&num_actions.to_le_bytes()); - for action in &self.actions { - state.update(action.effect_hash().as_bytes()); - } - - EffectHash(state.finalize().as_array().clone()) - } -} - -impl TransactionPlan { - /// Computes the [`EffectHash`] for the [`Transaction`] described by this - /// [`TransactionPlan`]. - /// - /// This method does not require constructing the entire [`Transaction`], - /// but it does require the associated [`FullViewingKey`] to derive - /// effecting data that will be fed into the [`EffectHash`]. - pub fn effect_hash(&self, fvk: &FullViewingKey) -> EffectHash { - // This implementation is identical to the one above, except that we - // don't need to actually construct the entire `TransactionBody` with - // complete `Action`s, we just need to construct the bodies of the - // actions the transaction will have when constructed. - - let mut state = create_personalized_state(&pbt::TransactionBody::type_url()); - - let parameters_hash = self.transaction_parameters.effect_hash(); - - let memo_hash = self - .memo - .as_ref() - .map(|memo_plan| { - memo_plan - .memo() - .expect("can compute memo ciphertext") - .effect_hash() - }) - // If the memo is not present, use the all-zero hash to record its absence in - // the overall effect hash. - .unwrap_or_default(); - - let detection_data_hash = self - .detection_data - .as_ref() - .map(|plan| plan.detection_data().effect_hash()) - // If the detection data is not present, use the all-zero hash to - // record its absence in the overall effect hash. - .unwrap_or_default(); - - // Hash the fixed data of the transaction body. - state.update(parameters_hash.as_bytes()); - state.update(memo_hash.as_bytes()); - state.update(detection_data_hash.as_bytes()); - - // Hash the number of actions, then each action. - let num_actions = self.actions.len() as u32; - state.update(&num_actions.to_le_bytes()); - - // If the memo_key is None, then there is no memo, so there will be no - // outputs that the memo key is passed to, so we can fill in a dummy key. - let memo_key = self.memo_key().unwrap_or([0u8; 32].into()); - - // Hash the effecting data of each action, in the order it appears in the plan, - // which will be the order it appears in the transaction. - for action_plan in &self.actions { - state.update(action_plan.effect_hash(fvk, &memo_key).as_bytes()); - } - - EffectHash(state.finalize().as_array().clone()) - } -} - -impl EffectingData for Action { - fn effect_hash(&self) -> EffectHash { - match self { - Action::Output(output) => output.body.effect_hash(), - Action::Spend(spend) => spend.body.effect_hash(), - Action::Delegate(delegate) => delegate.effect_hash(), - Action::Undelegate(undelegate) => undelegate.effect_hash(), - Action::UndelegateClaim(claim) => claim.body.effect_hash(), - Action::ProposalSubmit(submit) => submit.effect_hash(), - Action::ProposalWithdraw(withdraw) => withdraw.effect_hash(), - Action::ProposalDepositClaim(claim) => claim.effect_hash(), - Action::DelegatorVote(vote) => vote.effect_hash(), - Action::ValidatorVote(vote) => vote.effect_hash(), - Action::SwapClaim(swap_claim) => swap_claim.body.effect_hash(), - Action::Swap(swap) => swap.body.effect_hash(), - Action::ValidatorDefinition(defn) => defn.effect_hash(), - Action::IbcRelay(payload) => payload.effect_hash(), - Action::PositionOpen(p) => p.effect_hash(), - Action::PositionClose(p) => p.effect_hash(), - Action::PositionWithdraw(p) => p.effect_hash(), - Action::PositionRewardClaim(p) => p.effect_hash(), - Action::Ics20Withdrawal(w) => w.effect_hash(), - Action::DaoSpend(d) => d.effect_hash(), - Action::DaoOutput(d) => d.effect_hash(), - Action::DaoDeposit(d) => d.effect_hash(), - } - } -} - -/// A helper function to hash the data of a proto-encoded message, using -/// the variable-length `TypeUrl` of the corresponding domain type as a -/// personalization string. -fn hash_proto_effecting_data(personalization: &str, message: &M) -> EffectHash { - let mut state = create_personalized_state(personalization); - state.update(&message.encode_to_vec()); - - EffectHash(*state.finalize().as_array()) -} - -/// A helper function to create a BLAKE2b `State` instance given a variable-length personalization string. -fn create_personalized_state(personalization: &str) -> blake2b_simd::State { - let mut state = blake2b_simd::State::new(); - - // The `TypeUrl` provided as a personalization string is variable length, - // so we first include the length in bytes as a fixed-length prefix. - let length = personalization.len() as u64; - state.update(&length.to_le_bytes()); - state.update(personalization.as_bytes()); - - state -} - -impl EffectingData for validator::Definition { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbs::ValidatorDefinition = self.clone().into(); - hash_proto_effecting_data(&pbs::ValidatorDefinition::type_url(), &effecting_data) - } -} - -impl EffectingData for IbcRelay { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbi::IbcRelay = self.clone().into(); - hash_proto_effecting_data(&pbi::IbcRelay::type_url(), &effecting_data) - } -} - -impl EffectingData for Ics20Withdrawal { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbi::Ics20Withdrawal = self.clone().into(); - hash_proto_effecting_data(&pbi::Ics20Withdrawal::type_url(), &effecting_data) - } -} - -impl EffectingData for output::Body { - fn effect_hash(&self) -> EffectHash { - // The effecting data is in the body of the output, so we can - // just use hash the proto-encoding of the body. - let body: pb_sp::OutputBody = self.clone().into(); - hash_proto_effecting_data(&pb_sp::OutputBody::type_url(), &body) - } -} - -impl EffectingData for spend::Body { - fn effect_hash(&self) -> EffectHash { - // The effecting data is in the body of the spend, so we can - // just use hash the proto-encoding of the body. - let body: pb_sp::SpendBody = self.clone().into(); - hash_proto_effecting_data(&pb_sp::SpendBody::type_url(), &body) - } -} - -impl EffectingData for DaoDeposit { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbg::DaoDeposit = self.clone().into(); - hash_proto_effecting_data(&pbg::DaoDeposit::type_url(), &effecting_data) - } -} - -impl EffectingData for DaoSpend { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbg::DaoSpend = self.clone().into(); - hash_proto_effecting_data(&pbg::DaoSpend::type_url(), &effecting_data) - } -} - -impl EffectingData for DaoOutput { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbg::DaoOutput = self.clone().into(); - hash_proto_effecting_data(&pbg::DaoOutput::type_url(), &effecting_data) - } -} - -impl EffectingData for swap::Body { - fn effect_hash(&self) -> EffectHash { - // The effecting data is in the body of the swap, so we can - // just use hash the proto-encoding of the body. - let effecting_data: pbd::SwapBody = self.clone().into(); - hash_proto_effecting_data(&pbd::SwapBody::type_url(), &effecting_data) - } -} - -impl EffectingData for swap_claim::Body { - fn effect_hash(&self) -> EffectHash { - // The effecting data is in the body of the swap claim, so we can - // just use hash the proto-encoding of the body. - let effecting_data: pbd::SwapClaimBody = self.clone().into(); - hash_proto_effecting_data(&pbd::SwapClaimBody::type_url(), &effecting_data) - } -} - -impl EffectingData for Delegate { - fn effect_hash(&self) -> EffectHash { - // For delegations, the entire action is considered effecting data. - let effecting_data: pbs::Delegate = self.clone().into(); - hash_proto_effecting_data(&pbs::Delegate::type_url(), &effecting_data) - } -} - -impl EffectingData for Undelegate { - fn effect_hash(&self) -> EffectHash { - // For undelegations, the entire action is considered effecting data. - let effecting_data: pbs::Undelegate = self.clone().into(); - hash_proto_effecting_data(&pbs::Undelegate::type_url(), &effecting_data) - } -} - -impl EffectingData for UndelegateClaimBody { - fn effect_hash(&self) -> EffectHash { - // The effecting data is in the body of the undelegate claim, so we can - // just use hash the proto-encoding of the body. - let effecting_data: pbs::UndelegateClaimBody = self.clone().into(); - hash_proto_effecting_data(&pbs::UndelegateClaimBody::type_url(), &effecting_data) - } -} - -impl EffectingData for Proposal { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbg::Proposal = self.clone().into(); - hash_proto_effecting_data(&pbg::Proposal::type_url(), &effecting_data) - } -} - -impl EffectingData for ProposalSubmit { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbg::ProposalSubmit = self.clone().into(); - hash_proto_effecting_data(&pbg::ProposalSubmit::type_url(), &effecting_data) - } -} - -impl EffectingData for ProposalWithdraw { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbg::ProposalWithdraw = self.clone().into(); - hash_proto_effecting_data(&pbg::ProposalWithdraw::type_url(), &effecting_data) - } -} - -impl EffectingData for ValidatorVote { - fn effect_hash(&self) -> EffectHash { - self.body.effect_hash() - } -} - -impl EffectingData for DelegatorVote { - fn effect_hash(&self) -> EffectHash { - self.body.effect_hash() - } -} - -impl EffectingData for Vote { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbg::Vote = self.clone().into(); - hash_proto_effecting_data(&pbg::Vote::type_url(), &effecting_data) - } -} - -impl EffectingData for ValidatorVoteBody { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbg::ValidatorVoteBody = self.clone().into(); - hash_proto_effecting_data(&pbg::ValidatorVoteBody::type_url(), &effecting_data) - } -} - -impl EffectingData for DelegatorVoteBody { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbg::DelegatorVoteBody = self.clone().into(); - hash_proto_effecting_data(&pbg::DelegatorVoteBody::type_url(), &effecting_data) - } -} - -impl EffectingData for ProposalDepositClaim { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbg::ProposalDepositClaim = self.clone().into(); - hash_proto_effecting_data(&pbg::ProposalDepositClaim::type_url(), &effecting_data) - } -} - -impl EffectingData for PositionOpen { - fn effect_hash(&self) -> EffectHash { - // The position open action consists only of the position, which - // we consider effecting data. - let effecting_data: pbd::PositionOpen = self.clone().into(); - hash_proto_effecting_data(&pbd::PositionOpen::type_url(), &effecting_data) - } -} - -impl EffectingData for PositionClose { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbd::PositionClose = self.clone().into(); - hash_proto_effecting_data(&pbd::PositionClose::type_url(), &effecting_data) - } -} - -impl EffectingData for PositionWithdraw { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbd::PositionWithdraw = self.clone().into(); - hash_proto_effecting_data(&pbd::PositionWithdraw::type_url(), &effecting_data) - } -} - -impl EffectingData for PositionRewardClaim { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbd::PositionRewardClaim = self.clone().into(); - hash_proto_effecting_data(&pbd::PositionRewardClaim::type_url(), &effecting_data) - } -} - -impl EffectingData for DetectionData { - fn effect_hash(&self) -> EffectHash { - let effecting_data: pbt::DetectionData = self.clone().into(); - hash_proto_effecting_data(&pbt::DetectionData::type_url(), &effecting_data) - } -} - -impl EffectingData for Clue { - fn effect_hash(&self) -> EffectHash { - let data: pb_fmd::Clue = self.clone().into(); - hash_proto_effecting_data(&pb_fmd::Clue::type_url(), &data) - } -} - -impl EffectingData for TransactionParameters { - fn effect_hash(&self) -> EffectHash { - let params: pbt::TransactionParameters = self.clone().into(); - hash_proto_effecting_data(&pbt::TransactionParameters::type_url(), ¶ms) - } -} - -impl EffectingData for Fee { - fn effect_hash(&self) -> EffectHash { - let proto_encoded_fee: pbf::Fee = self.clone().into(); - hash_proto_effecting_data(&pbf::Fee::type_url(), &proto_encoded_fee) - } -} - -impl EffectingData for MemoCiphertext { - fn effect_hash(&self) -> EffectHash { - let proto_encoded_memo: pbt::MemoCiphertext = self.clone().into(); - hash_proto_effecting_data(&pbt::MemoCiphertext::type_url(), &proto_encoded_memo) - } -} - -#[cfg(test)] -mod tests { - use penumbra_asset::{asset, Value, STAKING_TOKEN_ASSET_ID}; - use penumbra_dex::{swap::SwapPlaintext, swap::SwapPlan, TradingPair}; - use penumbra_fee::Fee; - use penumbra_keys::{ - keys::{Bip44Path, SeedPhrase, SpendKey}, - Address, - }; - use penumbra_shielded_pool::Note; - use penumbra_shielded_pool::{OutputPlan, SpendPlan}; - use penumbra_tct as tct; - use rand_core::OsRng; - - use crate::{ - memo::MemoPlaintext, - plan::{CluePlan, DetectionDataPlan, MemoPlan, TransactionPlan}, - TransactionParameters, WitnessData, - }; - - /// This isn't an exhaustive test, but we don't currently have a - /// great way to generate actions for randomized testing. - /// - /// All we hope to check here is that, for a basic transaction plan, - /// we compute the same auth hash for the plan and for the transaction. - #[test] - fn plan_effect_hash_matches_transaction_effect_hash() { - let rng = OsRng; - let seed_phrase = SeedPhrase::generate(rng); - let sk = SpendKey::from_seed_phrase_bip44(seed_phrase, &Bip44Path::new(0)); - let fvk = sk.full_viewing_key(); - let (addr, _dtk) = fvk.incoming().payment_address(0u32.into()); - - let mut sct = tct::Tree::new(); - - let note0 = Note::generate( - &mut OsRng, - &addr, - Value { - amount: 10000u64.into(), - asset_id: *STAKING_TOKEN_ASSET_ID, - }, - ); - let note1 = Note::generate( - &mut OsRng, - &addr, - Value { - amount: 20000u64.into(), - asset_id: *STAKING_TOKEN_ASSET_ID, - }, - ); - - sct.insert(tct::Witness::Keep, note0.commit()).unwrap(); - sct.insert(tct::Witness::Keep, note1.commit()).unwrap(); - - let trading_pair = TradingPair::new( - asset::Cache::with_known_assets() - .get_unit("nala") - .unwrap() - .id(), - asset::Cache::with_known_assets() - .get_unit("upenumbra") - .unwrap() - .id(), - ); - - let swap_plaintext = SwapPlaintext::new( - &mut OsRng, - trading_pair, - 100000u64.into(), - 1u64.into(), - Fee(Value { - amount: 3u64.into(), - asset_id: asset::Cache::with_known_assets() - .get_unit("upenumbra") - .unwrap() - .id(), - }), - addr, - ); - - let mut rng = OsRng; - - let memo_plaintext = MemoPlaintext { - return_address: Address::dummy(&mut rng), - text: "".to_string(), - }; - let plan = TransactionPlan { - // Put outputs first to check that the auth hash - // computation is not affected by plan ordering. - actions: vec![ - OutputPlan::new( - &mut OsRng, - Value { - amount: 30000u64.into(), - asset_id: *STAKING_TOKEN_ASSET_ID, - }, - addr.clone(), - ) - .into(), - SpendPlan::new(&mut OsRng, note0, 0u64.into()).into(), - SpendPlan::new(&mut OsRng, note1, 1u64.into()).into(), - SwapPlan::new(&mut OsRng, swap_plaintext).into(), - ], - transaction_parameters: TransactionParameters { - expiry_height: 0, - fee: Fee::default(), - chain_id: "penumbra-test".to_string(), - }, - detection_data: Some(DetectionDataPlan { - clue_plans: vec![CluePlan::new(&mut OsRng, addr, 1)], - }), - memo: Some(MemoPlan::new(&mut OsRng, memo_plaintext.clone()).unwrap()), - }; - - println!("{}", serde_json::to_string_pretty(&plan).unwrap()); - - let plan_effect_hash = plan.effect_hash(fvk); - - let auth_data = plan.authorize(rng, &sk); - let witness_data = WitnessData { - anchor: sct.root(), - state_commitment_proofs: plan - .spend_plans() - .map(|spend: &SpendPlan| { - ( - spend.note.commit(), - sct.witness(spend.note.commit()).unwrap(), - ) - }) - .collect(), - }; - let transaction = plan.build(fvk, &witness_data, &auth_data).unwrap(); - - let transaction_effect_hash = transaction.effect_hash(); - - assert_eq!(plan_effect_hash, transaction_effect_hash); - - let decrypted_memo = transaction.decrypt_memo(fvk).expect("can decrypt memo"); - assert_eq!(decrypted_memo, memo_plaintext); - - // TODO: fix this and move into its own test? - // // Also check the concurrent build results in the same effect hash. - // let rt = Runtime::new().unwrap(); - // let transaction = rt - // .block_on(async move { - // plan.build_concurrent(&mut OsRng, fvk, auth_data, witness_data) - // .await - // }) - // .expect("can build"); - // assert_eq!(plan_effect_hash, transaction.effect_hash()); - } -} diff --git a/crates/core/transaction/src/lib.rs b/crates/core/transaction/src/lib.rs index 6907053574..0754af67c7 100644 --- a/crates/core/transaction/src/lib.rs +++ b/crates/core/transaction/src/lib.rs @@ -18,7 +18,6 @@ mod auth_data; mod auth_hash; mod detection_data; -mod effect_hash; mod error; mod id; mod is_action; @@ -36,7 +35,6 @@ pub use action::Action; pub use auth_data::AuthorizationData; pub use auth_hash::{AuthHash, AuthorizingData}; pub use detection_data::DetectionData; -pub use effect_hash::EffectingData; pub use error::Error; pub use id::Id; pub use is_action::IsAction; diff --git a/crates/core/transaction/src/memo.rs b/crates/core/transaction/src/memo.rs index bba1cf8ec4..f38822a45a 100644 --- a/crates/core/transaction/src/memo.rs +++ b/crates/core/transaction/src/memo.rs @@ -7,12 +7,13 @@ use anyhow::anyhow; use decaf377_ka as ka; use penumbra_asset::balance; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_keys::{ keys::OutgoingViewingKey, symmetric::{OvkWrappedKey, PayloadKey, PayloadKind, WrappedMemoKey}, Address, }; -use penumbra_proto::core::transaction::v1alpha1 as pbt; +use penumbra_proto::{core::transaction::v1alpha1 as pbt, DomainType}; use penumbra_shielded_pool::{note, Note}; pub const MEMO_CIPHERTEXT_LEN_BYTES: usize = 528; @@ -23,6 +24,12 @@ pub const MEMO_LEN_BYTES: usize = 512; #[derive(Clone, Debug)] pub struct MemoCiphertext(pub [u8; MEMO_CIPHERTEXT_LEN_BYTES]); +impl EffectingData for MemoCiphertext { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + #[derive(Clone, Debug, PartialEq)] pub struct MemoPlaintext { pub return_address: Address, @@ -203,6 +210,10 @@ impl From for pbt::MemoCiphertext { } } +impl DomainType for MemoCiphertext { + type Proto = pbt::MemoCiphertext; +} + impl TryFrom for MemoPlaintext { type Error = anyhow::Error; diff --git a/crates/core/transaction/src/parameters.rs b/crates/core/transaction/src/parameters.rs index 9ca5091ec0..c82697893e 100644 --- a/crates/core/transaction/src/parameters.rs +++ b/crates/core/transaction/src/parameters.rs @@ -1,4 +1,5 @@ use anyhow::Error; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_fee::Fee; use penumbra_proto::core::transaction::v1alpha1 as pbt; use penumbra_proto::DomainType; @@ -11,6 +12,12 @@ pub struct TransactionParameters { pub fee: Fee, } +impl EffectingData for TransactionParameters { + fn effect_hash(&self) -> EffectHash { + EffectHash::from_proto_effecting_data(&self.to_proto()) + } +} + impl DomainType for TransactionParameters { type Proto = pbt::TransactionParameters; } diff --git a/crates/core/transaction/src/plan.rs b/crates/core/transaction/src/plan.rs index abba297613..62a4f3ee25 100644 --- a/crates/core/transaction/src/plan.rs +++ b/crates/core/transaction/src/plan.rs @@ -9,11 +9,12 @@ use penumbra_dex::{ swap::SwapPlan, swap_claim::SwapClaimPlan, }; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_governance::{ DelegatorVotePlan, ProposalDepositClaim, ProposalSubmit, ProposalWithdraw, ValidatorVote, }; use penumbra_ibc::IbcRelay; -use penumbra_keys::{Address, PayloadKey}; +use penumbra_keys::{Address, FullViewingKey, PayloadKey}; use penumbra_proto::{core::transaction::v1alpha1 as pb, DomainType}; use penumbra_shielded_pool::{Ics20Withdrawal, OutputPlan, SpendPlan}; use penumbra_stake::{Delegate, Undelegate, UndelegateClaimPlan}; @@ -46,6 +47,70 @@ pub struct TransactionPlan { } impl TransactionPlan { + /// Computes the [`EffectHash`] for the [`Transaction`] described by this + /// [`TransactionPlan`]. + /// + /// This method does not require constructing the entire [`Transaction`], + /// but it does require the associated [`FullViewingKey`] to derive + /// effecting data that will be fed into the [`EffectHash`]. + /// + /// This method is not an [`EffectingData`] impl because it needs an extra input, + /// the FVK, to partially construct the transaction. + pub fn effect_hash(&self, fvk: &FullViewingKey) -> EffectHash { + // This implementation is identical to the one for Transaction, except that we + // don't need to actually construct the entire `TransactionBody` with + // complete `Action`s, we just need to construct the bodies of the + // actions the transaction will have when constructed. + + let mut state = blake2b_simd::Params::new() + .personal(b"PenumbraEfHs") + .to_state(); + + let parameters_hash = self.transaction_parameters.effect_hash(); + + let memo_hash = self + .memo + .as_ref() + .map(|memo_plan| { + memo_plan + .memo() + .expect("can compute memo ciphertext") + .effect_hash() + }) + // If the memo is not present, use the all-zero hash to record its absence in + // the overall effect hash. + .unwrap_or_default(); + + let detection_data_hash = self + .detection_data + .as_ref() + .map(|plan| plan.detection_data().effect_hash()) + // If the detection data is not present, use the all-zero hash to + // record its absence in the overall effect hash. + .unwrap_or_default(); + + // Hash the fixed data of the transaction body. + state.update(parameters_hash.as_bytes()); + state.update(memo_hash.as_bytes()); + state.update(detection_data_hash.as_bytes()); + + // Hash the number of actions, then each action. + let num_actions = self.actions.len() as u32; + state.update(&num_actions.to_le_bytes()); + + // If the memo_key is None, then there is no memo, so there will be no + // outputs that the memo key is passed to, so we can fill in a dummy key. + let memo_key = self.memo_key().unwrap_or([0u8; 32].into()); + + // Hash the effecting data of each action, in the order it appears in the plan, + // which will be the order it appears in the transaction. + for action_plan in &self.actions { + state.update(action_plan.effect_hash(fvk, &memo_key).as_bytes()); + } + + EffectHash(state.finalize().as_array().clone()) + } + pub fn spend_plans(&self) -> impl Iterator { self.actions.iter().filter_map(|action| { if let ActionPlan::Spend(s) = action { @@ -335,3 +400,158 @@ impl TryFrom for TransactionPlan { }) } } + +#[cfg(test)] +mod tests { + use penumbra_asset::{asset, Value, STAKING_TOKEN_ASSET_ID}; + use penumbra_dex::{swap::SwapPlaintext, swap::SwapPlan, TradingPair}; + use penumbra_effecthash::EffectingData as _; + use penumbra_fee::Fee; + use penumbra_keys::{ + keys::{Bip44Path, SeedPhrase, SpendKey}, + Address, + }; + use penumbra_shielded_pool::Note; + use penumbra_shielded_pool::{OutputPlan, SpendPlan}; + use penumbra_tct as tct; + use rand_core::OsRng; + + use crate::{ + memo::MemoPlaintext, + plan::{CluePlan, DetectionDataPlan, MemoPlan, TransactionPlan}, + TransactionParameters, WitnessData, + }; + + /// This isn't an exhaustive test, but we don't currently have a + /// great way to generate actions for randomized testing. + /// + /// All we hope to check here is that, for a basic transaction plan, + /// we compute the same auth hash for the plan and for the transaction. + #[test] + fn plan_effect_hash_matches_transaction_effect_hash() { + let rng = OsRng; + let seed_phrase = SeedPhrase::generate(rng); + let sk = SpendKey::from_seed_phrase_bip44(seed_phrase, &Bip44Path::new(0)); + let fvk = sk.full_viewing_key(); + let (addr, _dtk) = fvk.incoming().payment_address(0u32.into()); + + let mut sct = tct::Tree::new(); + + let note0 = Note::generate( + &mut OsRng, + &addr, + Value { + amount: 10000u64.into(), + asset_id: *STAKING_TOKEN_ASSET_ID, + }, + ); + let note1 = Note::generate( + &mut OsRng, + &addr, + Value { + amount: 20000u64.into(), + asset_id: *STAKING_TOKEN_ASSET_ID, + }, + ); + + sct.insert(tct::Witness::Keep, note0.commit()).unwrap(); + sct.insert(tct::Witness::Keep, note1.commit()).unwrap(); + + let trading_pair = TradingPair::new( + asset::Cache::with_known_assets() + .get_unit("nala") + .unwrap() + .id(), + asset::Cache::with_known_assets() + .get_unit("upenumbra") + .unwrap() + .id(), + ); + + let swap_plaintext = SwapPlaintext::new( + &mut OsRng, + trading_pair, + 100000u64.into(), + 1u64.into(), + Fee(Value { + amount: 3u64.into(), + asset_id: asset::Cache::with_known_assets() + .get_unit("upenumbra") + .unwrap() + .id(), + }), + addr, + ); + + let mut rng = OsRng; + + let memo_plaintext = MemoPlaintext { + return_address: Address::dummy(&mut rng), + text: "".to_string(), + }; + let plan = TransactionPlan { + // Put outputs first to check that the auth hash + // computation is not affected by plan ordering. + actions: vec![ + OutputPlan::new( + &mut OsRng, + Value { + amount: 30000u64.into(), + asset_id: *STAKING_TOKEN_ASSET_ID, + }, + addr.clone(), + ) + .into(), + SpendPlan::new(&mut OsRng, note0, 0u64.into()).into(), + SpendPlan::new(&mut OsRng, note1, 1u64.into()).into(), + SwapPlan::new(&mut OsRng, swap_plaintext).into(), + ], + transaction_parameters: TransactionParameters { + expiry_height: 0, + fee: Fee::default(), + chain_id: "penumbra-test".to_string(), + }, + detection_data: Some(DetectionDataPlan { + clue_plans: vec![CluePlan::new(&mut OsRng, addr, 1)], + }), + memo: Some(MemoPlan::new(&mut OsRng, memo_plaintext.clone()).unwrap()), + }; + + println!("{}", serde_json::to_string_pretty(&plan).unwrap()); + + let plan_effect_hash = plan.effect_hash(fvk); + + let auth_data = plan.authorize(rng, &sk); + let witness_data = WitnessData { + anchor: sct.root(), + state_commitment_proofs: plan + .spend_plans() + .map(|spend: &SpendPlan| { + ( + spend.note.commit(), + sct.witness(spend.note.commit()).unwrap(), + ) + }) + .collect(), + }; + let transaction = plan.build(fvk, &witness_data, &auth_data).unwrap(); + + let transaction_effect_hash = transaction.effect_hash(); + + assert_eq!(plan_effect_hash, transaction_effect_hash); + + let decrypted_memo = transaction.decrypt_memo(fvk).expect("can decrypt memo"); + assert_eq!(decrypted_memo, memo_plaintext); + + // TODO: fix this and move into its own test? + // // Also check the concurrent build results in the same effect hash. + // let rt = Runtime::new().unwrap(); + // let transaction = rt + // .block_on(async move { + // plan.build_concurrent(&mut OsRng, fvk, auth_data, witness_data) + // .await + // }) + // .expect("can build"); + // assert_eq!(plan_effect_hash, transaction.effect_hash()); + } +} diff --git a/crates/core/transaction/src/plan/action.rs b/crates/core/transaction/src/plan/action.rs index 01703bae09..63655303e1 100644 --- a/crates/core/transaction/src/plan/action.rs +++ b/crates/core/transaction/src/plan/action.rs @@ -1,12 +1,11 @@ use crate::Action; -use crate::EffectingData; use crate::WitnessData; use anyhow::{anyhow, Context, Result}; use ark_ff::Zero; use decaf377::Fr; use penumbra_asset::Balance; use penumbra_dao::{DaoDeposit, DaoOutput, DaoSpend}; -use penumbra_effecthash::EffectHash; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_dex::{ lp::{ diff --git a/crates/core/transaction/src/transaction.rs b/crates/core/transaction/src/transaction.rs index c4f1e7f769..b17f98bf5b 100644 --- a/crates/core/transaction/src/transaction.rs +++ b/crates/core/transaction/src/transaction.rs @@ -13,6 +13,7 @@ use penumbra_dex::{ lp::action::{PositionClose, PositionOpen}, swap::Swap, }; +use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_governance::{DelegatorVote, ProposalSubmit, ProposalWithdraw, ValidatorVote}; use penumbra_ibc::IbcRelay; use penumbra_keys::{FullViewingKey, PayloadKey}; @@ -42,6 +43,50 @@ pub struct TransactionBody { pub memo: Option, } +impl EffectingData for TransactionBody { + fn effect_hash(&self) -> EffectHash { + let mut state = blake2b_simd::Params::new() + .personal(b"PenumbraEfHs") + .to_state(); + + let parameters_hash = self.transaction_parameters.effect_hash(); + let memo_hash = self + .memo + .as_ref() + .map(|memo| memo.effect_hash()) + // If the memo is not present, use the all-zero hash to record its absence in + // the overall effect hash. + .unwrap_or_default(); + let detection_data_hash = self + .detection_data + .as_ref() + .map(|detection_data| detection_data.effect_hash()) + // If the detection data is not present, use the all-zero hash to + // record its absence in the overall effect hash. + .unwrap_or_default(); + + // Hash the fixed data of the transaction body. + state.update(parameters_hash.as_bytes()); + state.update(memo_hash.as_bytes()); + state.update(detection_data_hash.as_bytes()); + + // Hash the number of actions, then each action. + let num_actions = self.actions.len() as u32; + state.update(&num_actions.to_le_bytes()); + for action in &self.actions { + state.update(action.effect_hash().as_bytes()); + } + + EffectHash(state.finalize().as_array().clone()) + } +} + +impl EffectingData for Transaction { + fn effect_hash(&self) -> EffectHash { + self.transaction_body.effect_hash() + } +} + #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(try_from = "pbt::Transaction", into = "pbt::Transaction")] pub struct Transaction { From f9696ccd380eb3d927a9f6996b9c768911e97445 Mon Sep 17 00:00:00 2001 From: noot <36753753+noot@users.noreply.github.com> Date: Sat, 30 Dec 2023 00:03:39 -0500 Subject: [PATCH 12/84] feat(ibc): implement consensus_state, consensus_states, consensus_state_heights gRPC queries (#3531) * implement consensus_state, consensus_states, consensus_state_heights for ibc grpc query server * fix consensus_state by getting verified heights * fix height returned from client_state * revert height changes to prev * re-add getting latest verified height for consensus_state --- .../component/ibc/src/component/client.rs | 20 +-- .../msg_handler/connection_open_ack.rs | 2 +- .../msg_handler/connection_open_confirm.rs | 2 +- .../msg_handler/connection_open_try.rs | 2 +- .../src/component/msg_handler/misbehavior.rs | 8 +- .../component/msg_handler/update_client.rs | 9 +- .../ibc/src/component/proof_verification.rs | 9 +- .../ibc/src/component/rpc/client_query.rs | 156 ++++++++++++++++-- 8 files changed, 167 insertions(+), 41 deletions(-) diff --git a/crates/core/component/ibc/src/component/client.rs b/crates/core/component/ibc/src/component/client.rs index e5dcf9301c..ed60595d85 100644 --- a/crates/core/component/ibc/src/component/client.rs +++ b/crates/core/component/ibc/src/component/client.rs @@ -45,7 +45,7 @@ pub(crate) trait Ics2ClientExt: StateWrite { // if we have a stored consensus state for this height that conflicts, we need to freeze // the client. if it doesn't conflict, we can return early if let Ok(stored_cs_state) = self - .get_verified_consensus_state(verified_header.height(), client_id.clone()) + .get_verified_consensus_state(&verified_header.height(), &client_id) .await { if stored_cs_state == verified_consensus_state { @@ -66,11 +66,11 @@ pub(crate) trait Ics2ClientExt: StateWrite { // have. In that case, we need to verify that the timestamp is correct. if it isn't, freeze // the client. let next_consensus_state = self - .next_verified_consensus_state(&client_id, verified_header.height()) + .next_verified_consensus_state(&client_id, &verified_header.height()) .await .expect("able to get next verified consensus state"); let prev_consensus_state = self - .prev_verified_consensus_state(&client_id, verified_header.height()) + .prev_verified_consensus_state(&client_id, &verified_header.height()) .await .expect("able to get previous verified consensus state"); @@ -252,12 +252,12 @@ pub trait StateReadExt: StateRead { async fn get_verified_consensus_state( &self, - height: Height, - client_id: ClientId, + height: &Height, + client_id: &ClientId, ) -> Result { self.get( &IBC_COMMITMENT_PREFIX - .apply_string(ClientConsensusStatePath::new(&client_id, &height).to_string()), + .apply_string(ClientConsensusStatePath::new(client_id, height).to_string()), ) .await? .ok_or_else(|| { @@ -304,7 +304,7 @@ pub trait StateReadExt: StateRead { async fn next_verified_consensus_state( &self, client_id: &ClientId, - height: Height, + height: &Height, ) -> Result> { let mut verified_heights = self.get_verified_heights(client_id) @@ -322,7 +322,7 @@ pub trait StateReadExt: StateRead { .find(|&verified_height| verified_height > &height) { let next_cons_state = self - .get_verified_consensus_state(*next_height, client_id.clone()) + .get_verified_consensus_state(next_height, client_id) .await?; return Ok(Some(next_cons_state)); } else { @@ -335,7 +335,7 @@ pub trait StateReadExt: StateRead { async fn prev_verified_consensus_state( &self, client_id: &ClientId, - height: Height, + height: &Height, ) -> Result> { let mut verified_heights = self.get_verified_heights(client_id) @@ -353,7 +353,7 @@ pub trait StateReadExt: StateRead { .find(|&verified_height| verified_height < &height) { let prev_cons_state = self - .get_verified_consensus_state(*prev_height, client_id.clone()) + .get_verified_consensus_state(prev_height, client_id) .await?; return Ok(Some(prev_cons_state)); } else { diff --git a/crates/core/component/ibc/src/component/msg_handler/connection_open_ack.rs b/crates/core/component/ibc/src/component/msg_handler/connection_open_ack.rs index a73671bff8..7dbddbff96 100644 --- a/crates/core/component/ibc/src/component/msg_handler/connection_open_ack.rs +++ b/crates/core/component/ibc/src/component/msg_handler/connection_open_ack.rs @@ -78,7 +78,7 @@ impl MsgHandler for MsgConnectionOpenAck { // get the stored consensus state for the counterparty let trusted_consensus_state = state - .get_verified_consensus_state(self.proofs_height_on_b, connection.client_id.clone()) + .get_verified_consensus_state(&self.proofs_height_on_b, &connection.client_id) .await?; // PROOF VERIFICATION diff --git a/crates/core/component/ibc/src/component/msg_handler/connection_open_confirm.rs b/crates/core/component/ibc/src/component/msg_handler/connection_open_confirm.rs index ae505a1f7c..224351e754 100644 --- a/crates/core/component/ibc/src/component/msg_handler/connection_open_confirm.rs +++ b/crates/core/component/ibc/src/component/msg_handler/connection_open_confirm.rs @@ -66,7 +66,7 @@ impl MsgHandler for MsgConnectionOpenConfirm { // get the stored consensus state for the counterparty let trusted_consensus_state = state - .get_verified_consensus_state(self.proof_height_on_a, connection.client_id.clone()) + .get_verified_consensus_state(&self.proof_height_on_a, &connection.client_id) .await?; // PROOF VERIFICATION diff --git a/crates/core/component/ibc/src/component/msg_handler/connection_open_try.rs b/crates/core/component/ibc/src/component/msg_handler/connection_open_try.rs index 18b89f2753..6f83273c1d 100644 --- a/crates/core/component/ibc/src/component/msg_handler/connection_open_try.rs +++ b/crates/core/component/ibc/src/component/msg_handler/connection_open_try.rs @@ -94,7 +94,7 @@ impl MsgHandler for MsgConnectionOpenTry { // get the stored consensus state for the counterparty let trusted_consensus_state = state - .get_verified_consensus_state(self.proofs_height_on_a, self.client_id_on_b.clone()) + .get_verified_consensus_state(&self.proofs_height_on_a, &self.client_id_on_b) .await?; // PROOF VERIFICATION diff --git a/crates/core/component/ibc/src/component/msg_handler/misbehavior.rs b/crates/core/component/ibc/src/component/msg_handler/misbehavior.rs index 2bfcc8168e..4e4fc5d581 100644 --- a/crates/core/component/ibc/src/component/msg_handler/misbehavior.rs +++ b/crates/core/component/ibc/src/component/msg_handler/misbehavior.rs @@ -65,14 +65,14 @@ impl MsgHandler for MsgSubmitMisbehaviour { verify_misbehavior_header( &state, - untrusted_misbehavior.client_id.clone(), + &untrusted_misbehavior.client_id, &untrusted_misbehavior.header1, &trusted_client_state, ) .await?; verify_misbehavior_header( &state, - untrusted_misbehavior.client_id.clone(), + &untrusted_misbehavior.client_id, &untrusted_misbehavior.header2, &trusted_client_state, ) @@ -116,13 +116,13 @@ fn client_is_not_frozen(client: &TendermintClientState) -> anyhow::Result<()> { async fn verify_misbehavior_header( state: S, - client_id: ClientId, + client_id: &ClientId, mb_header: &TendermintHeader, trusted_client_state: &TendermintClientState, ) -> Result<()> { let trusted_height = mb_header.trusted_height; let last_trusted_consensus_state = state - .get_verified_consensus_state(trusted_height, client_id) + .get_verified_consensus_state(&trusted_height, &client_id) .await?; let trusted_height = trusted_height diff --git a/crates/core/component/ibc/src/component/msg_handler/update_client.rs b/crates/core/component/ibc/src/component/msg_handler/update_client.rs index e2dfafe7f2..8acddf9c3c 100644 --- a/crates/core/component/ibc/src/component/msg_handler/update_client.rs +++ b/crates/core/component/ibc/src/component/msg_handler/update_client.rs @@ -58,7 +58,7 @@ impl MsgHandler for MsgUpdateClient { // We use the specified trusted height to query the trusted // consensus state the update extends. let last_trusted_consensus_state = state - .get_verified_consensus_state(trusted_height, self.client_id.clone()) + .get_verified_consensus_state(&trusted_height, &self.client_id) .await?; // We also have to convert from an IBC height, which has two @@ -174,9 +174,10 @@ async fn update_is_already_committed( // check if we already have a consensus state for this height, if we do, check that it is // the same as this update, if it is, return early. - let untrusted_consensus_state = TendermintConsensusState::from(untrusted_header.clone()); + let height = untrusted_header.height(); + let untrusted_consensus_state = TendermintConsensusState::from(untrusted_header); if let Ok(stored_consensus_state) = state - .get_verified_consensus_state(untrusted_header.height(), client_id.clone()) + .get_verified_consensus_state(&height, &client_id) .await { let stored_tm_consensus_state = stored_consensus_state; @@ -196,7 +197,7 @@ async fn client_is_not_expired( client_state: &TendermintClientState, ) -> anyhow::Result<()> { let latest_consensus_state = state - .get_verified_consensus_state(client_state.latest_height(), client_id.clone()) + .get_verified_consensus_state(&client_state.latest_height(), client_id) .await?; // TODO(erwan): for now there is no casting that needs to happen because `get_verified_consensus_state` does not return an diff --git a/crates/core/component/ibc/src/component/proof_verification.rs b/crates/core/component/ibc/src/component/proof_verification.rs index 6d610f3663..777787a2ab 100644 --- a/crates/core/component/ibc/src/component/proof_verification.rs +++ b/crates/core/component/ibc/src/component/proof_verification.rs @@ -138,7 +138,7 @@ pub trait ClientUpgradeProofVerifier: StateReadExt { // get the stored consensus state for the counterparty let trusted_consensus_state = self - .get_verified_consensus_state(trusted_client_state.latest_height(), client_id.clone()) + .get_verified_consensus_state(&trusted_client_state.latest_height(), client_id) .await?; verify_merkle_proof( @@ -191,7 +191,7 @@ pub trait ChannelProofVerifier: StateReadExt { // get the stored consensus state for the counterparty let trusted_consensus_state = self - .get_verified_consensus_state(*proof_height, connection.client_id.clone()) + .get_verified_consensus_state(proof_height, &connection.client_id) .await?; trusted_client_state.verify_height(*proof_height)?; @@ -437,9 +437,8 @@ mod inner { anyhow::bail!("client is frozen"); } - let trusted_consensus_state = self - .get_verified_consensus_state(*height, client_id.clone()) - .await?; + let trusted_consensus_state = + self.get_verified_consensus_state(height, client_id).await?; let tm_client_state = trusted_client_state; diff --git a/crates/core/component/ibc/src/component/rpc/client_query.rs b/crates/core/component/ibc/src/component/rpc/client_query.rs index 325be1d12f..380cece0bc 100644 --- a/crates/core/component/ibc/src/component/rpc/client_query.rs +++ b/crates/core/component/ibc/src/component/rpc/client_query.rs @@ -2,21 +2,23 @@ use async_trait::async_trait; use ibc_proto::ibc::core::client::v1::query_server::Query as ClientQuery; use ibc_proto::ibc::core::client::v1::{ - Height, IdentifiedClientState, QueryClientParamsRequest, QueryClientParamsResponse, - QueryClientStateRequest, QueryClientStateResponse, QueryClientStatesRequest, - QueryClientStatesResponse, QueryClientStatusRequest, QueryClientStatusResponse, - QueryConsensusStateHeightsRequest, QueryConsensusStateHeightsResponse, - QueryConsensusStateRequest, QueryConsensusStateResponse, QueryConsensusStatesRequest, - QueryConsensusStatesResponse, QueryUpgradedClientStateRequest, + ConsensusStateWithHeight, IdentifiedClientState, QueryClientParamsRequest, + QueryClientParamsResponse, QueryClientStateRequest, QueryClientStateResponse, + QueryClientStatesRequest, QueryClientStatesResponse, QueryClientStatusRequest, + QueryClientStatusResponse, QueryConsensusStateHeightsRequest, + QueryConsensusStateHeightsResponse, QueryConsensusStateRequest, QueryConsensusStateResponse, + QueryConsensusStatesRequest, QueryConsensusStatesResponse, QueryUpgradedClientStateRequest, QueryUpgradedClientStateResponse, QueryUpgradedConsensusStateRequest, QueryUpgradedConsensusStateResponse, }; use ibc_types::core::client::ClientId; +use ibc_types::core::client::Height; use ibc_types::lightclients::tendermint::client_state::TENDERMINT_CLIENT_STATE_TYPE_URL; +use ibc_types::lightclients::tendermint::consensus_state::TENDERMINT_CONSENSUS_STATE_TYPE_URL; +use ibc_types::path::ClientConsensusStatePath; use ibc_types::path::ClientStatePath; use ibc_types::DomainType; -use penumbra_chain::component::StateReadExt; use std::str::FromStr; use tonic::{Response, Status}; @@ -24,6 +26,7 @@ use tonic::{Response, Status}; use crate::component::ClientStateReadExt; use crate::prefix::MerklePrefixExt; use crate::IBC_COMMITMENT_PREFIX; +use penumbra_chain::component::StateReadExt as _; use super::IbcQuery; @@ -58,7 +61,7 @@ impl ClientQuery for IbcQuery { // Client state may be None, which we'll convert to a NotFound response. let client_state = match cs_opt { // If found, convert to a suitable type to match - // https://docs.rs/ibc-proto/0.36.1/ibc_proto/ibc/core/client/v1/struct.QueryClientStateResponse.html + // https://docs.rs/ibc-proto/0.39.1/ibc_proto/ibc/core/client/v1/struct.QueryClientStateResponse.html Some(c) => ibc_proto::google::protobuf::Any { type_url: TENDERMINT_CLIENT_STATE_TYPE_URL.to_string(), value: c, @@ -73,11 +76,12 @@ impl ClientQuery for IbcQuery { let res = QueryClientStateResponse { client_state: Some(client_state), proof: proof.encode_to_vec(), - proof_height: Some(height), + proof_height: Some(height.into()), }; Ok(tonic::Response::new(res)) } + /// ClientStates queries all the IBC light clients of a chain. async fn client_states( &self, @@ -111,30 +115,127 @@ impl ClientQuery for IbcQuery { Ok(tonic::Response::new(res)) } + /// ConsensusState queries a consensus state associated with a client state at /// a given height. async fn consensus_state( &self, - _request: tonic::Request, + request: tonic::Request, ) -> std::result::Result, tonic::Status> { - Err(tonic::Status::unimplemented("not implemented")) + let snapshot = self.0.latest_snapshot(); + let client_id = ClientId::from_str(&request.get_ref().client_id) + .map_err(|e| tonic::Status::invalid_argument(format!("invalid client id: {e}")))?; + let height = get_latest_verified_height(&snapshot, &client_id).await?; + + let (cs_opt, proof) = snapshot + .get_with_proof( + IBC_COMMITMENT_PREFIX + .apply_string(ClientConsensusStatePath::new(&client_id, &height).to_string()) + .as_bytes() + .to_vec(), + ) + .await + .map_err(|e| tonic::Status::aborted(format!("couldn't get client: {e}")))?; + + // if state is None, convert to a NotFound response. + let consensus_state = match cs_opt { + // If found, convert to a suitable type to match + // https://docs.rs/ibc-proto/0.39.1/ibc_proto/ibc/core/client/v1/struct.QueryConsensusStateResponse.html + Some(c) => ibc_proto::google::protobuf::Any { + type_url: TENDERMINT_CONSENSUS_STATE_TYPE_URL.to_string(), + value: c, + }, + None => { + return Err(tonic::Status::not_found(format!( + "couldn't find client: {client_id}" + ))) + } + }; + + let res = QueryConsensusStateResponse { + consensus_state: Some(consensus_state), + proof: proof.encode_to_vec(), + proof_height: Some(height.into()), + }; + + Ok(tonic::Response::new(res)) } + /// ConsensusStates queries all the consensus state associated with a given /// client. async fn consensus_states( &self, - _request: tonic::Request, + request: tonic::Request, ) -> std::result::Result, tonic::Status> { - Err(tonic::Status::unimplemented("not implemented")) + let snapshot = self.0.latest_snapshot(); + let client_id = ClientId::from_str(&request.get_ref().client_id) + .map_err(|e| tonic::Status::invalid_argument(format!("invalid client id: {e}")))?; + + let verified_heights = snapshot + .get_verified_heights(&client_id) + .await + .map_err(|e| tonic::Status::aborted(format!("couldn't get verified heights: {e}")))?; + let resp = if let Some(verified_heights) = verified_heights { + let mut consensus_states = Vec::with_capacity(verified_heights.heights.len()); + for height in verified_heights.heights { + let consensus_state = snapshot + .get_verified_consensus_state(&height, &client_id) + .await + .map_err(|e| { + tonic::Status::aborted(format!("couldn't get consensus state: {e}")) + })?; + consensus_states.push(ConsensusStateWithHeight { + height: Some(height.into()), + consensus_state: Some(consensus_state.into()), + }); + } + QueryConsensusStatesResponse { + consensus_states, + pagination: None, + } + } else { + QueryConsensusStatesResponse { + consensus_states: vec![], + pagination: None, + } + }; + + Ok(tonic::Response::new(resp)) } + /// ConsensusStateHeights queries the height of every consensus states associated with a given client. async fn consensus_state_heights( &self, - _request: tonic::Request, + request: tonic::Request, ) -> std::result::Result, tonic::Status> { - Err(tonic::Status::unimplemented("not implemented")) + let snapshot = self.0.latest_snapshot(); + let client_id = ClientId::from_str(&request.get_ref().client_id) + .map_err(|e| tonic::Status::invalid_argument(format!("invalid client id: {e}")))?; + + let verified_heights = snapshot + .get_verified_heights(&client_id) + .await + .map_err(|e| tonic::Status::aborted(format!("couldn't get verified heights: {e}")))?; + let resp = if let Some(verified_heights) = verified_heights { + QueryConsensusStateHeightsResponse { + consensus_state_heights: verified_heights + .heights + .into_iter() + .map(|h| h.into()) + .collect(), + pagination: None, + } + } else { + QueryConsensusStateHeightsResponse { + consensus_state_heights: vec![], + pagination: None, + } + }; + + Ok(tonic::Response::new(resp)) } + /// Status queries the status of an IBC client. async fn client_status( &self, @@ -165,3 +266,28 @@ impl ClientQuery for IbcQuery { Err(tonic::Status::unimplemented("not implemented")) } } + +async fn get_latest_verified_height( + snapshot: &cnidarium::Snapshot, + client_id: &ClientId, +) -> Result { + let verified_heights = snapshot + .get_verified_heights(&client_id) + .await + .map_err(|e| tonic::Status::aborted(format!("couldn't get verified heights: {e}")))?; + + let Some(mut verified_heights) = verified_heights else { + return Err(tonic::Status::not_found( + "couldn't find verified heights for client: {client_id}", + )); + }; + + verified_heights.heights.sort(); + if verified_heights.heights.is_empty() { + return Err(tonic::Status::not_found( + "verified heights for client were empty: {client_id}", + )); + } + + Ok(verified_heights.heights.pop().expect("must be non-empty")) +} From 3bb269cff553e02c77bf6e033b117b9b21bb490c Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Sat, 30 Dec 2023 12:13:16 -0500 Subject: [PATCH 13/84] Correct naming to "Community Pool" (#3547) * Correct naming to "Community Pool" The functionality is directly copied from the Cosmos SDK's community pool, and naming it as such is important to correctly convey expectations about what it is. * fixup pcli tx proposal * fixup cp fvk --- Cargo.lock | 84 +- Cargo.toml | 2 +- crates/bench/Cargo.toml | 31 +- crates/bin/pcli/Cargo.toml | 40 +- crates/bin/pcli/src/command/query.rs | 18 +- .../query/{dao.rs => community_pool.rs} | 18 +- crates/bin/pcli/src/command/tx.rs | 10 +- crates/bin/pcli/src/command/tx/proposal.rs | 14 +- crates/bin/pcli/src/command/validator.rs | 2 +- crates/bin/pcli/src/command/view/balance.rs | 2 +- crates/bin/pcli/src/command/view/tx.rs | 12 +- crates/core/app/Cargo.toml | 2 +- crates/core/app/src/action_handler/actions.rs | 18 +- .../app/src/action_handler/actions/submit.rs | 88 +- crates/core/app/src/app/mod.rs | 61 +- .../src/{dao_ext.rs => community_pool_ext.rs} | 22 +- crates/core/app/src/genesis/app_state.rs | 14 +- crates/core/app/src/lib.rs | 4 +- crates/core/app/src/params.rs | 12 +- crates/core/app/src/params/change.rs | 22 +- .../{dao => community-pool}/Cargo.toml | 2 +- .../component/community-pool/src/action.rs | 7 + .../src/action/community_pool_deposit.rs} | 31 +- .../src/action/community_pool_output.rs} | 26 +- .../src/action/community_pool_spend.rs} | 26 +- .../component/community-pool/src/component.rs | 8 + .../src/component/action_handler.rs | 3 + .../action_handler/community_pool_deposit.rs} | 10 +- .../action_handler/community_pool_output.rs} | 16 +- .../action_handler/community_pool_spend.rs} | 12 +- .../community-pool/src/component/state_key.rs | 18 + .../src/component/view.rs | 38 +- .../component/community-pool/src/event.rs | 5 + .../{dao => community-pool}/src/genesis.rs | 16 +- .../{dao => community-pool}/src/lib.rs | 2 +- .../component/community-pool/src/params.rs | 43 + .../core/component/compact-block/Cargo.toml | 2 +- crates/core/component/dao/src/action.rs | 7 - crates/core/component/dao/src/component.rs | 8 - .../dao/src/component/action_handler.rs | 3 - .../component/dao/src/component/state_key.rs | 18 - crates/core/component/dao/src/event.rs | 5 - crates/core/component/dao/src/params.rs | 40 - crates/core/component/governance/Cargo.toml | 2 +- .../governance/src/component/view.rs | 13 +- .../core/component/governance/src/proposal.rs | 76 +- .../component/governance/src/state_key.rs | 17 +- crates/core/component/sct/src/source.rs | 10 +- crates/core/component/stake/Cargo.toml | 4 +- crates/core/component/stake/src/component.rs | 8 +- .../component/stake/src/funding_stream.rs | 26 +- crates/core/component/stake/src/validator.rs | 17 +- crates/core/transaction/Cargo.toml | 2 +- crates/core/transaction/src/action.rs | 54 +- crates/core/transaction/src/gas.rs | 26 +- crates/core/transaction/src/is_action.rs | 16 +- crates/core/transaction/src/plan.rs | 14 +- crates/core/transaction/src/plan/action.rs | 58 +- crates/core/transaction/src/transaction.rs | 20 +- .../core/transaction/src/view/action_view.rs | 26 +- crates/crypto/proof-setup/Cargo.toml | 17 +- .../src/gen/penumbra.core.app.v1alpha1.rs | 207 +-- .../gen/penumbra.core.app.v1alpha1.serde.rs | 52 +- ...core.component.community_pool.v1alpha1.rs} | 156 +- ...omponent.community_pool.v1alpha1.serde.rs} | 106 +- ...mbra.core.component.governance.v1alpha1.rs | 580 +++---- ...ore.component.governance.v1alpha1.serde.rs | 116 +- .../penumbra.core.component.sct.v1alpha1.rs | 10 +- ...umbra.core.component.sct.v1alpha1.serde.rs | 34 +- .../penumbra.core.component.stake.v1alpha1.rs | 8 +- ...bra.core.component.stake.v1alpha1.serde.rs | 34 +- .../gen/penumbra.core.transaction.v1alpha1.rs | 198 +-- ...enumbra.core.transaction.v1alpha1.serde.rs | 162 +- .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 339237 -> 340071 bytes crates/proto/src/lib.rs | 6 +- crates/view/Cargo.toml | 2 +- crates/view/src/planner.rs | 10 +- crates/view/src/storage.rs | 25 +- crates/view/src/storage/schema.sql | 2 +- deployments/scripts/rust-docs | 2 +- docs/guide/src/pcli/governance.md | 94 +- docs/guide/src/pcli/transaction.md | 3 +- docs/guide/src/pd/validator.md | 20 +- docs/protocol/src/governance.md | 28 +- docs/rustdoc/index.html | 2 +- .../gen/penumbra/core/app/v1alpha1/app.pb.go | 154 +- .../v1alpha1/community_pool.pb.go | 422 +++++ .../core/component/dao/v1alpha1/dao.pb.go | 406 ----- .../governance/v1alpha1/governance.pb.go | 1497 +++++++++-------- .../core/component/sct/v1alpha1/sct.pb.go | 188 ++- .../core/component/stake/v1alpha1/stake.pb.go | 795 ++++----- .../transaction/v1alpha1/transaction.pb.go | 1209 ++++++------- .../penumbra/core/app/v1alpha1/app.proto | 10 +- .../v1alpha1/community_pool.proto | 35 + .../core/component/dao/v1alpha1/dao.proto | 35 - .../governance/v1alpha1/governance.proto | 28 +- .../core/component/sct/v1alpha1/sct.proto | 6 +- .../core/component/stake/v1alpha1/stake.proto | 4 +- .../transaction/v1alpha1/transaction.proto | 24 +- tools/parameter-setup/Cargo.toml | 16 +- tools/proto-compiler/src/main.rs | 2 +- 101 files changed, 3876 insertions(+), 4040 deletions(-) rename crates/bin/pcli/src/command/query/{dao.rs => community_pool.rs} (72%) rename crates/core/app/src/{dao_ext.rs => community_pool_ext.rs} (62%) rename crates/core/component/{dao => community-pool}/Cargo.toml (97%) create mode 100644 crates/core/component/community-pool/src/action.rs rename crates/core/component/{dao/src/action/dao_deposit.rs => community-pool/src/action/community_pool_deposit.rs} (52%) rename crates/core/component/{dao/src/action/dao_output.rs => community-pool/src/action/community_pool_output.rs} (62%) rename crates/core/component/{dao/src/action/dao_spend.rs => community-pool/src/action/community_pool_spend.rs} (55%) create mode 100644 crates/core/component/community-pool/src/component.rs create mode 100644 crates/core/component/community-pool/src/component/action_handler.rs rename crates/core/component/{dao/src/component/action_handler/dao_deposit.rs => community-pool/src/component/action_handler/community_pool_deposit.rs} (63%) rename crates/core/component/{dao/src/component/action_handler/dao_output.rs => community-pool/src/component/action_handler/community_pool_output.rs} (54%) rename crates/core/component/{dao/src/component/action_handler/dao_spend.rs => community-pool/src/component/action_handler/community_pool_spend.rs} (59%) create mode 100644 crates/core/component/community-pool/src/component/state_key.rs rename crates/core/component/{dao => community-pool}/src/component/view.rs (60%) create mode 100644 crates/core/component/community-pool/src/event.rs rename crates/core/component/{dao => community-pool}/src/genesis.rs (55%) rename crates/core/component/{dao => community-pool}/src/lib.rs (82%) create mode 100644 crates/core/component/community-pool/src/params.rs delete mode 100644 crates/core/component/dao/src/action.rs delete mode 100644 crates/core/component/dao/src/component.rs delete mode 100644 crates/core/component/dao/src/component/action_handler.rs delete mode 100644 crates/core/component/dao/src/component/state_key.rs delete mode 100644 crates/core/component/dao/src/event.rs delete mode 100644 crates/core/component/dao/src/params.rs rename crates/proto/src/gen/{penumbra.core.component.dao.v1alpha1.rs => penumbra.core.component.community_pool.v1alpha1.rs} (72%) rename crates/proto/src/gen/{penumbra.core.component.dao.v1alpha1.serde.rs => penumbra.core.component.community_pool.v1alpha1.serde.rs} (77%) create mode 100644 proto/go/gen/penumbra/core/component/community_pool/v1alpha1/community_pool.pb.go delete mode 100644 proto/go/gen/penumbra/core/component/dao/v1alpha1/dao.pb.go create mode 100644 proto/penumbra/penumbra/core/component/community_pool/v1alpha1/community_pool.proto delete mode 100644 proto/penumbra/penumbra/core/component/dao/v1alpha1/dao.proto diff --git a/Cargo.lock b/Cargo.lock index c1e3877a67..c0ab72010c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4663,9 +4663,9 @@ dependencies = [ "penumbra-app", "penumbra-asset", "penumbra-chain", + "penumbra-community-pool", "penumbra-compact-block", "penumbra-custody", - "penumbra-dao", "penumbra-dex", "penumbra-fee", "penumbra-governance", @@ -4923,8 +4923,8 @@ dependencies = [ "parking_lot 0.12.1", "penumbra-asset", "penumbra-chain", + "penumbra-community-pool", "penumbra-compact-block", - "penumbra-dao", "penumbra-dex", "penumbra-distributions", "penumbra-effecthash", @@ -5029,7 +5029,7 @@ dependencies = [ "num-bigint", "once_cell", "penumbra-asset", - "penumbra-dao", + "penumbra-community-pool", "penumbra-dex", "penumbra-fee", "penumbra-governance", @@ -5080,6 +5080,39 @@ dependencies = [ "tracing", ] +[[package]] +name = "penumbra-community-pool" +version = "0.64.1" +dependencies = [ + "anyhow", + "ark-ff", + "async-trait", + "base64 0.20.0", + "blake2b_simd 0.5.11", + "cnidarium", + "cnidarium-component", + "futures", + "hex", + "metrics", + "once_cell", + "pbjson-types", + "penumbra-asset", + "penumbra-chain", + "penumbra-effecthash", + "penumbra-keys", + "penumbra-num", + "penumbra-proto", + "penumbra-sct", + "penumbra-shielded-pool", + "prost", + "serde", + "sha2 0.10.8", + "tendermint", + "tendermint-light-client-verifier", + "tokio", + "tracing", +] + [[package]] name = "penumbra-compact-block" version = "0.64.1" @@ -5096,7 +5129,7 @@ dependencies = [ "im", "metrics", "penumbra-chain", - "penumbra-dao", + "penumbra-community-pool", "penumbra-dex", "penumbra-fee", "penumbra-governance", @@ -5151,39 +5184,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "penumbra-dao" -version = "0.64.1" -dependencies = [ - "anyhow", - "ark-ff", - "async-trait", - "base64 0.20.0", - "blake2b_simd 0.5.11", - "cnidarium", - "cnidarium-component", - "futures", - "hex", - "metrics", - "once_cell", - "pbjson-types", - "penumbra-asset", - "penumbra-chain", - "penumbra-effecthash", - "penumbra-keys", - "penumbra-num", - "penumbra-proto", - "penumbra-sct", - "penumbra-shielded-pool", - "prost", - "serde", - "sha2 0.10.8", - "tendermint", - "tendermint-light-client-verifier", - "tokio", - "tracing", -] - [[package]] name = "penumbra-dex" version = "0.64.1" @@ -5341,7 +5341,7 @@ dependencies = [ "pbjson-types", "penumbra-asset", "penumbra-chain", - "penumbra-dao", + "penumbra-community-pool", "penumbra-distributions", "penumbra-effecthash", "penumbra-fee", @@ -5569,7 +5569,7 @@ dependencies = [ "blake2b_simd 0.5.11", "criterion 0.4.0", "decaf377 0.5.0", - "penumbra-dao", + "penumbra-community-pool", "penumbra-dex", "penumbra-governance", "penumbra-proof-params", @@ -5722,7 +5722,7 @@ dependencies = [ "once_cell", "penumbra-asset", "penumbra-chain", - "penumbra-dao", + "penumbra-community-pool", "penumbra-distributions", "penumbra-effecthash", "penumbra-keys", @@ -5900,7 +5900,7 @@ dependencies = [ "pbjson-types", "penumbra-asset", "penumbra-chain", - "penumbra-dao", + "penumbra-community-pool", "penumbra-dex", "penumbra-effecthash", "penumbra-fee", @@ -5953,8 +5953,8 @@ dependencies = [ "penumbra-app", "penumbra-asset", "penumbra-chain", + "penumbra-community-pool", "penumbra-compact-block", - "penumbra-dao", "penumbra-dex", "penumbra-distributions", "penumbra-fee", diff --git a/Cargo.toml b/Cargo.toml index 8ea6fb659e..1d0fa843e9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,7 +25,7 @@ members = [ "crates/core/component/shielded-pool", "crates/core/component/governance", "crates/core/component/ibc", - "crates/core/component/dao", + "crates/core/component/community-pool", "crates/core/component/dex", "crates/core/component/sct", "crates/core/component/fee", diff --git a/crates/bench/Cargo.toml b/crates/bench/Cargo.toml index 52d113d12a..526119caa1 100644 --- a/crates/bench/Cargo.toml +++ b/crates/bench/Cargo.toml @@ -16,8 +16,8 @@ decaf377 = { version = "0.5", features = ["r1cs"] } # Crates.io deps ark-ec = "0.4.2" -ark-ff = {version = "0.4", default-features = false} -ark-std = {version = "0.4", default-features = false} +ark-ff = { version = "0.4", default-features = false } +ark-std = { version = "0.4", default-features = false } ark-serialize = "0.4" serde = { version = "1", features = ["derive"] } once_cell = "1.8" @@ -26,9 +26,9 @@ rand = "0.8" # only needed because ark-ff doesn't display correctly num-bigint = "0.4" tracing = "0.1" -ark-groth16 = {version = "0.4", default-features = false} +ark-groth16 = { version = "0.4", default-features = false } ark-snark = "0.4" -ark-r1cs-std = {version = "0.4", default-features = false} +ark-r1cs-std = { version = "0.4", default-features = false } ark-relations = "0.4" sha2 = "0.10.1" bech32 = "0.8.1" @@ -37,7 +37,7 @@ bech32 = "0.8.1" penumbra-tct = { path = "../crypto/tct/", features = ["r1cs"] } criterion = { version = "0.4", features = ["html_reports"] } penumbra-dex = { path = "../core/component/dex/" } -penumbra-dao = { path = "../core/component/dao/" } +penumbra-community-pool = { path = "../core/component/community-pool/" } penumbra-stake = { path = "../core/component/stake/" } penumbra-shielded-pool = { path = "../core/component/shielded-pool/" } penumbra-governance = { path = "../core/component/governance/" } @@ -52,16 +52,25 @@ penumbra-proof-params = { path = "../crypto/proof-params", features = [ ] } [build-dependencies] -regex = {version = "1", optional=true } -reqwest = {version ="0.11.14", optional=true, features = ["blocking", "json"] } -serde_json = {version = "1", optional = true} -sha2 = {version = "0.10.6", optional=true} -hex = {version = "0.4.3", optional=true} +regex = { version = "1", optional = true } +reqwest = { version = "0.11.14", optional = true, features = [ + "blocking", + "json", +] } +serde_json = { version = "1", optional = true } +sha2 = { version = "0.10.6", optional = true } +hex = { version = "0.4.3", optional = true } anyhow = "1" [features] download-proving-keys = ["regex", "reqwest", "serde_json", "sha2", "hex"] -parallel = ["ark-ff/parallel", "decaf377/parallel", "ark-groth16/parallel", "ark-std/parallel", "ark-r1cs-std/parallel"] +parallel = [ + "ark-ff/parallel", + "decaf377/parallel", + "ark-groth16/parallel", + "ark-std/parallel", + "ark-r1cs-std/parallel", +] [[bench]] name = "nullifier_derivation" diff --git a/crates/bin/pcli/Cargo.toml b/crates/bin/pcli/Cargo.toml index 01e385b30b..0ea1b68a8f 100644 --- a/crates/bin/pcli/Cargo.toml +++ b/crates/bin/pcli/Cargo.toml @@ -30,27 +30,27 @@ parallel = [ [dependencies] # Workspace dependencies -penumbra-proto = { path = "../../proto", features = ["rpc"] } -penumbra-tct = { path = "../../crypto/tct" } -penumbra-num = { path = "../../core/num", default-features=false } -penumbra-asset = { path = "../../core/asset", default-features=false } -penumbra-keys = { path = "../../core/keys", default-features=false } -penumbra-chain = { path = "../../core/component/chain", default-features = false } +penumbra-proto = { path = "../../proto", features = ["rpc"] } +penumbra-tct = { path = "../../crypto/tct" } +penumbra-num = { path = "../../core/num", default-features = false } +penumbra-asset = { path = "../../core/asset", default-features = false } +penumbra-keys = { path = "../../core/keys", default-features = false } +penumbra-chain = { path = "../../core/component/chain", default-features = false } penumbra-shielded-pool = { path = "../../core/component/shielded-pool", default-features = false } -penumbra-governance = { path = "../../core/component/governance", default-features = false } -penumbra-stake = { path = "../../core/component/stake", default-features = false } -penumbra-sct = { path = "../../core/component/sct", default-features = false } -penumbra-fee = { path = "../../core/component/fee", default-features = false } -penumbra-dex = { path = "../../core/component/dex", default-features = false } -penumbra-dao = { path = "../../core/component/dao", default-features = false } -penumbra-ibc = { path = "../../core/component/ibc", default-features = false } +penumbra-governance = { path = "../../core/component/governance", default-features = false } +penumbra-stake = { path = "../../core/component/stake", default-features = false } +penumbra-sct = { path = "../../core/component/sct", default-features = false } +penumbra-fee = { path = "../../core/component/fee", default-features = false } +penumbra-dex = { path = "../../core/component/dex", default-features = false } +penumbra-community-pool = { path = "../../core/component/community-pool", default-features = false } +penumbra-ibc = { path = "../../core/component/ibc", default-features = false } penumbra-compact-block = { path = "../../core/component/compact-block", default-features = false } -penumbra-transaction = { path = "../../core/transaction", features = ["clap"] } -penumbra-proof-setup = { path = "../../crypto/proof-setup" } -penumbra-app = { path = "../../core/app" } -penumbra-wallet = { path = "../../wallet" } -penumbra-custody = { path = "../../custody" } -penumbra-view = { path = "../../view" } +penumbra-transaction = { path = "../../core/transaction", features = ["clap"] } +penumbra-proof-setup = { path = "../../crypto/proof-setup" } +penumbra-app = { path = "../../core/app" } +penumbra-wallet = { path = "../../wallet" } +penumbra-custody = { path = "../../custody" } +penumbra-view = { path = "../../view" } # Penumbra dependencies decaf377 = { version = "0.5" } @@ -111,7 +111,7 @@ assert_cmd = "2.0" predicates = "2.1" tempfile = "3.3.0" regex = "1.6.0" -penumbra-governance = { path = "../../core/component/governance", default-features = false } +penumbra-governance = { path = "../../core/component/governance", default-features = false } penumbra-proof-params = { path = "../../crypto/proof-params", features = [ "bundled-proving-keys", "download-proving-keys", diff --git a/crates/bin/pcli/src/command/query.rs b/crates/bin/pcli/src/command/query.rs index 974a4592a9..49c6a6e835 100644 --- a/crates/bin/pcli/src/command/query.rs +++ b/crates/bin/pcli/src/command/query.rs @@ -10,8 +10,8 @@ mod dex; use dex::DexCmd; mod governance; use governance::GovernanceCmd; -mod dao; -use dao::DaoCmd; +mod community_pool; +use community_pool::CommunityPoolCmd; mod validator; pub(super) use validator::ValidatorCmd; mod ibc_query; @@ -52,9 +52,9 @@ pub enum QueryCmd { /// Queries information about governance proposals. #[clap(subcommand)] Governance(GovernanceCmd), - /// Queries information about the DAO. + /// Queries information about the Community Pool. #[clap(subcommand)] - Dao(DaoCmd), + CommunityPool(CommunityPoolCmd), /// Queries information about the decentralized exchange. #[clap(subcommand)] Dex(DexCmd), @@ -107,8 +107,8 @@ impl QueryCmd { return governance.exec(app).await; } - if let QueryCmd::Dao(dao) = self { - return dao.exec(app).await; + if let QueryCmd::CommunityPool(cp) = self { + return cp.exec(app).await; } if let QueryCmd::Ibc(ibc) = self { @@ -121,7 +121,7 @@ impl QueryCmd { | QueryCmd::Validator(_) | QueryCmd::Dex(_) | QueryCmd::Governance(_) - | QueryCmd::Dao(_) + | QueryCmd::CommunityPool(_) | QueryCmd::Watch { .. } | QueryCmd::Ibc(_) => { unreachable!("query handled in guard"); @@ -153,7 +153,7 @@ impl QueryCmd { pub fn offline(&self) -> bool { match self { - QueryCmd::Dex { .. } | QueryCmd::Dao { .. } => false, + QueryCmd::Dex { .. } | QueryCmd::CommunityPool { .. } => false, QueryCmd::Tx { .. } | QueryCmd::Chain { .. } | QueryCmd::Validator { .. } @@ -176,7 +176,7 @@ impl QueryCmd { | QueryCmd::Validator { .. } | QueryCmd::Dex { .. } | QueryCmd::Governance { .. } - | QueryCmd::Dao { .. } + | QueryCmd::CommunityPool { .. } | QueryCmd::Watch { .. } | QueryCmd::Ibc(_) => { unreachable!("query is special cased") diff --git a/crates/bin/pcli/src/command/query/dao.rs b/crates/bin/pcli/src/command/query/community_pool.rs similarity index 72% rename from crates/bin/pcli/src/command/query/dao.rs rename to crates/bin/pcli/src/command/query/community_pool.rs index 8605165a07..3846046306 100644 --- a/crates/bin/pcli/src/command/query/dao.rs +++ b/crates/bin/pcli/src/command/query/community_pool.rs @@ -3,25 +3,25 @@ use anyhow::{Context, Result}; use futures::TryStreamExt; use penumbra_asset::Value; use penumbra_proto::{ - core::component::dao::v1alpha1::DaoAssetBalancesRequest, - penumbra::core::component::dao::v1alpha1::query_service_client::QueryServiceClient as DaoQueryServiceClient, + core::component::community_pool::v1alpha1::CommunityPoolAssetBalancesRequest, + penumbra::core::component::community_pool::v1alpha1::query_service_client::QueryServiceClient as CommunityPoolQueryServiceClient, }; use penumbra_view::ViewClient; use std::io::{stdout, Write}; #[derive(Debug, clap::Subcommand)] -pub enum DaoCmd { - /// Get the balance in the DAO, or the balance of a specific asset. +pub enum CommunityPoolCmd { + /// Get the balance in the Community Pool, or the balance of a specific asset. Balance { /// Get only the balance of the specified asset. asset: Option, }, } -impl DaoCmd { +impl CommunityPoolCmd { pub async fn exec(&self, app: &mut App) -> Result<()> { match self { - DaoCmd::Balance { asset } => self.print_balance(app, asset).await, + CommunityPoolCmd::Balance { asset } => self.print_balance(app, asset).await, } } @@ -37,10 +37,10 @@ impl DaoCmd { } }); - let mut client = DaoQueryServiceClient::new(app.pd_channel().await?); + let mut client = CommunityPoolQueryServiceClient::new(app.pd_channel().await?); let chain_id = app.view().app_params().await?.chain_params.chain_id; let balances = client - .dao_asset_balances(DaoAssetBalancesRequest { + .community_pool_asset_balances(CommunityPoolAssetBalancesRequest { chain_id, asset_ids: asset_id.map_or_else(std::vec::Vec::new, |id| vec![id.into()]), }) @@ -48,7 +48,7 @@ impl DaoCmd { .into_inner() .try_collect::>() .await - .context("cannot process dao balance data")?; + .context("cannot process Community Pool balance data")?; let asset_cache = app.view().assets().await?; let mut writer = stdout(); diff --git a/crates/bin/pcli/src/command/tx.rs b/crates/bin/pcli/src/command/tx.rs index be3eb1a37b..262ba775c3 100644 --- a/crates/bin/pcli/src/command/tx.rs +++ b/crates/bin/pcli/src/command/tx.rs @@ -129,9 +129,9 @@ pub enum TxCmd { /// Submit or withdraw a governance proposal. #[clap(display_order = 500, subcommand)] Proposal(ProposalCmd), - /// Deposit funds into the DAO. + /// Deposit funds into the Community Pool. #[clap(display_order = 600)] - DaoDeposit { + CommunityPoolDeposit { /// The amounts to send, written as typed values 1.87penumbra, 12cubes, etc. values: Vec, /// Only spend funds originally received by the given account. @@ -240,7 +240,7 @@ impl TxCmd { TxCmd::UndelegateClaim { .. } => false, TxCmd::Vote { .. } => false, TxCmd::Proposal(proposal_cmd) => proposal_cmd.offline(), - TxCmd::DaoDeposit { .. } => false, + TxCmd::CommunityPoolDeposit { .. } => false, TxCmd::Position(lp_cmd) => lp_cmd.offline(), TxCmd::Withdraw { .. } => false, } @@ -303,7 +303,7 @@ impl TxCmd { .context("can't build send transaction")?; app.build_and_submit_transaction(plan).await?; } - TxCmd::DaoDeposit { values, source } => { + TxCmd::CommunityPoolDeposit { values, source } => { let values = values .iter() .map(|v| v.parse()) @@ -312,7 +312,7 @@ impl TxCmd { let mut planner = Planner::new(OsRng); planner.set_gas_prices(gas_prices); for value in values { - planner.dao_deposit(value); + planner.community_pool_deposit(value); } let plan = planner .plan( diff --git a/crates/bin/pcli/src/command/tx/proposal.rs b/crates/bin/pcli/src/command/tx/proposal.rs index 15d5e22d0e..81971d9e79 100644 --- a/crates/bin/pcli/src/command/tx/proposal.rs +++ b/crates/bin/pcli/src/command/tx/proposal.rs @@ -12,7 +12,7 @@ pub enum ProposalCmd { /// The file to output the template to. #[clap(long, global = true)] file: Option, - /// The kind of the proposal to template [one of: signaling, emergency, parameter-change, or dao-spend]. + /// The kind of the proposal to template [one of: signaling, emergency, parameter-change, or community-pool-spend]. #[clap(subcommand)] kind: ProposalKindCmd, }, @@ -62,8 +62,8 @@ pub enum ProposalKindCmd { Emergency, /// Generate a template for a parameter change proposal. ParameterChange, - /// Generate a template for a DAO spend proposal. - DaoSpend { + /// Generate a template for a Community Pool spend proposal. + CommunityPoolSpend { /// The transaction plan to include in the proposal, in JSON format. /// /// If not specified, the default empty transaction plan will be included, to be replaced @@ -87,7 +87,7 @@ impl ProposalKindCmd { old: Box::new(app_params.as_changed_params()), new: Box::new(ChangedAppParameters { chain_params: None, - dao_params: None, + community_pool_params: None, ibc_params: None, stake_params: None, fee_params: None, @@ -95,9 +95,9 @@ impl ProposalKindCmd { distributions_params: None, }), }, - ProposalKindCmd::DaoSpend { transaction_plan } => { + ProposalKindCmd::CommunityPoolSpend { transaction_plan } => { if let Some(file) = transaction_plan { - ProposalPayload::DaoSpend { + ProposalPayload::CommunityPoolSpend { transaction_plan: serde_json::from_reader( std::fs::File::open(file).with_context(|| { format!("Failed to open transaction plan file {:?}", file) @@ -108,7 +108,7 @@ impl ProposalKindCmd { })?, } } else { - ProposalPayload::DaoSpend { + ProposalPayload::CommunityPoolSpend { transaction_plan: TransactionPlan::default().encode_to_vec(), } } diff --git a/crates/bin/pcli/src/command/validator.rs b/crates/bin/pcli/src/command/validator.rs index df45808642..e5a6b0f59d 100644 --- a/crates/bin/pcli/src/command/validator.rs +++ b/crates/bin/pcli/src/command/validator.rs @@ -286,7 +286,7 @@ impl ValidatorCmd { address, rate_bps: 100, }, - FundingStream::ToDao { rate_bps: 100 }, + FundingStream::ToCommunityPool { rate_bps: 100 }, ])?, sequence_number: 0, } diff --git a/crates/bin/pcli/src/command/view/balance.rs b/crates/bin/pcli/src/command/view/balance.rs index b6bfe7f420..f6c2d09fa3 100644 --- a/crates/bin/pcli/src/command/view/balance.rs +++ b/crates/bin/pcli/src/command/view/balance.rs @@ -100,7 +100,7 @@ fn format_source(source: &CommitmentSource) -> String { CommitmentSource::FundingStreamReward { epoch_index } => { format!("Funding Stream (Epoch {})", epoch_index) } - CommitmentSource::DaoOutput => format!("DaoOutput"), + CommitmentSource::CommunityPoolOutput => format!("CommunityPoolOutput"), CommitmentSource::Ics20Transfer { packet_seq, channel_id, diff --git a/crates/bin/pcli/src/command/view/tx.rs b/crates/bin/pcli/src/command/view/tx.rs index a4f4c53fae..06516787d9 100644 --- a/crates/bin/pcli/src/command/view/tx.rs +++ b/crates/bin/pcli/src/command/view/tx.rs @@ -419,14 +419,14 @@ impl TxCmd { ), ] } - penumbra_transaction::ActionView::DaoDeposit(_) => { - ["Dao Deposit".to_string(), "".to_string()] + penumbra_transaction::ActionView::CommunityPoolDeposit(_) => { + ["CommunityPool Deposit".to_string(), "".to_string()] } - penumbra_transaction::ActionView::DaoSpend(_) => { - ["Dao Spend".to_string(), "".to_string()] + penumbra_transaction::ActionView::CommunityPoolSpend(_) => { + ["CommunityPool Spend".to_string(), "".to_string()] } - penumbra_transaction::ActionView::DaoOutput(_) => { - ["Dao Output".to_string(), "".to_string()] + penumbra_transaction::ActionView::CommunityPoolOutput(_) => { + ["CommunityPool Output".to_string(), "".to_string()] } }); } diff --git a/crates/core/app/Cargo.toml b/crates/core/app/Cargo.toml index e0a1450faf..58cdab50ab 100644 --- a/crates/core/app/Cargo.toml +++ b/crates/core/app/Cargo.toml @@ -24,7 +24,7 @@ penumbra-stake = { path = "../component/stake" } penumbra-governance = { path = "../component/governance" } penumbra-sct = { path = "../component/sct" } penumbra-fee = { path = "../component/fee" } -penumbra-dao = { path = "../component/dao" } +penumbra-community-pool = { path = "../component/community-pool" } penumbra-dex = { path = "../component/dex" } penumbra-ibc = { path = "../component/ibc", features = ["component"] } penumbra-distributions = { path = "../component/distributions" } diff --git a/crates/core/app/src/action_handler/actions.rs b/crates/core/app/src/action_handler/actions.rs index 56d0f23ab1..d85894ccdb 100644 --- a/crates/core/app/src/action_handler/actions.rs +++ b/crates/core/app/src/action_handler/actions.rs @@ -46,9 +46,9 @@ impl ActionHandler for Action { .await } Action::Ics20Withdrawal(action) => action.check_stateless(()).await, - Action::DaoSpend(action) => action.check_stateless(()).await, - Action::DaoOutput(action) => action.check_stateless(()).await, - Action::DaoDeposit(action) => action.check_stateless(()).await, + Action::CommunityPoolSpend(action) => action.check_stateless(()).await, + Action::CommunityPoolOutput(action) => action.check_stateless(()).await, + Action::CommunityPoolDeposit(action) => action.check_stateless(()).await, } } @@ -83,9 +83,9 @@ impl ActionHandler for Action { .await } Action::Ics20Withdrawal(action) => action.check_stateful(state).await, - Action::DaoSpend(action) => action.check_stateful(state).await, - Action::DaoOutput(action) => action.check_stateful(state).await, - Action::DaoDeposit(action) => action.check_stateful(state).await, + Action::CommunityPoolSpend(action) => action.check_stateful(state).await, + Action::CommunityPoolOutput(action) => action.check_stateful(state).await, + Action::CommunityPoolDeposit(action) => action.check_stateful(state).await, } } @@ -116,9 +116,9 @@ impl ActionHandler for Action { .await } Action::Ics20Withdrawal(action) => action.execute(state).await, - Action::DaoSpend(action) => action.execute(state).await, - Action::DaoOutput(action) => action.execute(state).await, - Action::DaoDeposit(action) => action.execute(state).await, + Action::CommunityPoolSpend(action) => action.execute(state).await, + Action::CommunityPoolOutput(action) => action.execute(state).await, + Action::CommunityPoolDeposit(action) => action.execute(state).await, } } } diff --git a/crates/core/app/src/action_handler/actions/submit.rs b/crates/core/app/src/action_handler/actions/submit.rs index 08db4e98f5..167b13bc4a 100644 --- a/crates/core/app/src/action_handler/actions/submit.rs +++ b/crates/core/app/src/action_handler/actions/submit.rs @@ -9,7 +9,7 @@ use decaf377_rdsa::{VerificationKey, VerificationKeyBytes}; use once_cell::sync::Lazy; use penumbra_asset::STAKING_TOKEN_DENOM; use penumbra_chain::component::StateReadExt as _; -use penumbra_dao::component::StateReadExt as _; +use penumbra_community_pool::component::StateReadExt as _; use penumbra_keys::keys::{FullViewingKey, NullifierKey}; use penumbra_proto::DomainType; use penumbra_sct::component::StateReadExt as _; @@ -20,7 +20,7 @@ use penumbra_transaction::Transaction; use penumbra_transaction::{AuthorizationData, WitnessData}; use crate::action_handler::ActionHandler; -use crate::dao_ext::DaoStateWriteExt; +use crate::community_pool_ext::CommunityPoolStateWriteExt; use crate::params::AppParameters; use penumbra_governance::{ component::{StateReadExt as _, StateWriteExt as _}, @@ -86,9 +86,9 @@ impl ActionHandler for ProposalSubmit { .check_valid_update(&new_app_params) .context("invalid change to app parameters")?; } - DaoSpend { transaction_plan } => { + CommunityPoolSpend { transaction_plan } => { // Check to make sure that the transaction plan contains only valid actions for the - // DAO (none of them should require proving to build): + // Community Pool (none of them should require proving to build): use penumbra_transaction::plan::ActionPlan::*; let parsed_transaction_plan = TransactionPlan::decode(&transaction_plan[..]) @@ -98,22 +98,22 @@ impl ActionHandler for ProposalSubmit { match action { Spend(_) | Output(_) | Swap(_) | SwapClaim(_) | DelegatorVote(_) | UndelegateClaim(_) => { - // These actions all require proving, so they are banned from DAO spend + // These actions all require proving, so they are banned from Community Pool spend // proposals to prevent DoS attacks. anyhow::bail!( - "invalid action in DAO spend proposal (would require proving)" + "invalid action in Community Pool spend proposal (would require proving)" ) } Delegate(_) | Undelegate(_) => { // Delegation and undelegation is disallowed due to Undelegateclaim requiring proving. anyhow::bail!( - "invalid action in DAO spend proposal (can't claim outputs of undelegation)" + "invalid action in Community Pool spend proposal (can't claim outputs of undelegation)" ) } ProposalSubmit(_) | ProposalWithdraw(_) | ProposalDepositClaim(_) => { - // These actions manipulate proposals, so they are banned from DAO spend + // These actions manipulate proposals, so they are banned from Community Pool spend // actions because they could cause recursion. - anyhow::bail!("invalid action in DAO spend proposal (not allowed to manipulate proposals from within proposals)") + anyhow::bail!("invalid action in Community Pool spend proposal (not allowed to manipulate proposals from within proposals)") } ValidatorDefinition(_) | IbcAction(_) @@ -122,11 +122,11 @@ impl ActionHandler for ProposalSubmit { | PositionClose(_) | PositionWithdraw(_) | PositionRewardClaim(_) - | DaoSpend(_) - | DaoOutput(_) + | CommunityPoolSpend(_) + | CommunityPoolOutput(_) | Withdrawal(_) - | DaoDeposit(_) => { - // These actions are all valid for DAO spend proposals, because they + | CommunityPoolDeposit(_) => { + // These actions are all valid for Community Pool spend proposals, because they // don't require proving, so they don't represent a DoS vector. } } @@ -172,12 +172,12 @@ impl ActionHandler for ProposalSubmit { ProposalPayload::ParameterChange { .. } => { /* no stateful checks for parameter change (checks are applied when proposal finishes) */ } - ProposalPayload::DaoSpend { transaction_plan } => { - // If DAO spend proposals aren't enabled, then we can't allow them to be submitted - let dao_parameters = state.get_dao_params().await?; + ProposalPayload::CommunityPoolSpend { transaction_plan } => { + // If Community Pool spend proposals aren't enabled, then we can't allow them to be submitted + let community_pool_parameters = state.get_community_pool_params().await?; anyhow::ensure!( - dao_parameters.dao_spend_proposals_enabled, - "DAO spend proposals are not enabled", + community_pool_parameters.community_pool_spend_proposals_enabled, + "Community Pool spend proposals are not enabled", ); // Check that the transaction plan can be built without any witness or auth data and @@ -187,17 +187,17 @@ impl ActionHandler for ProposalSubmit { // obviously going to fail to execute. let parsed_transaction_plan = TransactionPlan::decode(&transaction_plan[..]) .context("transaction plan was malformed")?; - let tx = build_dao_transaction(parsed_transaction_plan.clone()) + let tx = build_community_pool_transaction(parsed_transaction_plan.clone()) .await - .context("failed to build submitted DAO spend transaction plan")?; - tx.check_stateless(()) - .await - .context("submitted DAO spend transaction failed stateless checks")?; + .context("failed to build submitted Community Pool spend transaction plan")?; + tx.check_stateless(()).await.context( + "submitted Community Pool spend transaction failed stateless checks", + )?; tx.check_stateful(state.clone()) .await - .context("submitted DAO spend transaction failed stateful checks")?; + .context("submitted Community Pool spend transaction failed stateful checks")?; tx.execute(StateDelta::new(state)).await.context( - "submitted DAO spend transaction failed to execute in current chain state", + "submitted Community Pool spend transaction failed to execute in current chain state", )?; } ProposalPayload::UpgradePlan { .. } => { @@ -214,19 +214,19 @@ impl ActionHandler for ProposalSubmit { deposit_amount, } = self; - // If the proposal is a DAO spend proposal, we've already built it, but we need to build it + // If the proposal is a Community Pool spend proposal, we've already built it, but we need to build it // again because we can't remember anything from `check_tx_stateful` to `execute`: - if let ProposalPayload::DaoSpend { transaction_plan } = &proposal.payload { + if let ProposalPayload::CommunityPoolSpend { transaction_plan } = &proposal.payload { // Build the transaction again (this time we know it will succeed because it built and // passed all checks in `check_tx_stateful`): let parsed_transaction_plan = TransactionPlan::decode(&transaction_plan[..]) .context("transaction plan was malformed")?; - let tx = build_dao_transaction(parsed_transaction_plan.clone()) + let tx = build_community_pool_transaction(parsed_transaction_plan.clone()) .await - .context("failed to build submitted DAO spend transaction plan in execute step")?; + .context("failed to build submitted Community Pool spend transaction plan in execute step")?; // Cache the built transaction in the state so we can use it later, without rebuilding: - state.put_dao_transaction(proposal.id, tx); + state.put_community_pool_transaction(proposal.id, tx); } // Store the contents of the proposal and generate a fresh proposal id for it @@ -285,20 +285,20 @@ impl ActionHandler for ProposalSubmit { } } -/// The full viewing key used to construct transactions made by the Penumbra DAO. +/// The full viewing key used to construct transactions made by the Penumbra Community Pool. /// /// This full viewing key does not correspond to any known spend key; it is constructed from the /// hashes of two arbitrary strings. -static DAO_FULL_VIEWING_KEY: Lazy = Lazy::new(|| { +static COMMUNITY_POOL_FULL_VIEWING_KEY: Lazy = Lazy::new(|| { // We start with two different personalization strings for the hash function: - let ak_personalization = b"Penumbra_DAO_ak"; - let nk_personalization = b"Penumbra_DAO_nk"; + let ak_personalization = b"Penumbra_CP_ak"; + let nk_personalization = b"Penumbra_CP_nk"; // We pick two different arbitrary strings to hash: let ak_hash_input = - b"This hash input is used to form the `ak` component of the Penumbra DAO's full viewing key."; + b"This hash input is used to form the `ak` component of the Penumbra Community Pool's full viewing key."; let nk_hash_input = - b"This hash input is used to form the `nk` component of the Penumbra DAO's full viewing key."; + b"This hash input is used to form the `nk` component of the Penumbra Community Pool's full viewing key."; // We hash the two strings using their respective personalizations: let ak_hash = blake2b_simd::Params::new() @@ -314,7 +314,7 @@ static DAO_FULL_VIEWING_KEY: Lazy = Lazy::new(|| { .vartime_compress() .0, )) - .expect("penumbra DAO FVK's `ak` must be a valid verification key by construction"); + .expect("penumbra Community Pool FVK's `ak` must be a valid verification key by construction"); // We construct the `nk` component of the full viewing key from the hash of the second string: let nk = NullifierKey(Fq::from_le_bytes_mod_order(nk_hash.as_bytes())); @@ -323,10 +323,12 @@ static DAO_FULL_VIEWING_KEY: Lazy = Lazy::new(|| { FullViewingKey::from_components(ak, nk) }); -async fn build_dao_transaction(transaction_plan: TransactionPlan) -> Result { - let effect_hash = transaction_plan.effect_hash(&DAO_FULL_VIEWING_KEY); +async fn build_community_pool_transaction( + transaction_plan: TransactionPlan, +) -> Result { + let effect_hash = transaction_plan.effect_hash(&COMMUNITY_POOL_FULL_VIEWING_KEY); transaction_plan.build( - &DAO_FULL_VIEWING_KEY, + &COMMUNITY_POOL_FULL_VIEWING_KEY, &WitnessData { anchor: penumbra_tct::Tree::new().root(), state_commitment_proofs: Default::default(), @@ -341,9 +343,9 @@ async fn build_dao_transaction(transaction_plan: TransactionPlan) -> Result { - tracing::warn!(?error, "failed to deliver DAO transaction"); + tracing::warn!(?error, "failed to deliver Community Pool transaction"); } - Ok(dao_tx_events) => events.extend(dao_tx_events), + Ok(community_pool_tx_events) => events.extend(community_pool_tx_events), } } @@ -259,22 +264,22 @@ impl App { pub async fn deliver_tx(&mut self, tx: Arc) -> Result> { // Ensure that any normally-delivered transaction (originating from a user) does not contain - // any DAO spends or outputs; the only place those are permitted is transactions originating + // any Community Pool spends or outputs; the only place those are permitted is transactions originating // from the chain itself: anyhow::ensure!( - tx.dao_spends().peekable().peek().is_none(), - "DAO spends are not permitted in user-submitted transactions" + tx.community_pool_spends().peekable().peek().is_none(), + "Community Pool spends are not permitted in user-submitted transactions" ); anyhow::ensure!( - tx.dao_outputs().peekable().peek().is_none(), - "DAO outputs are not permitted in user-submitted transactions" + tx.community_pool_outputs().peekable().peek().is_none(), + "Community Pool outputs are not permitted in user-submitted transactions" ); - // Now that we've ensured that there are not any DAO spends or outputs, we can deliver the transaction: - self.deliver_tx_allowing_dao_spends(tx).await + // Now that we've ensured that there are not any Community Pool spends or outputs, we can deliver the transaction: + self.deliver_tx_allowing_community_pool_spends(tx).await } - async fn deliver_tx_allowing_dao_spends( + async fn deliver_tx_allowing_community_pool_spends( &mut self, tx: Arc, ) -> Result> { @@ -553,7 +558,7 @@ pub trait StateReadExt: StateRead { self.fee_params_updated() || self.governance_params_updated() || self.ibc_params_updated() - || self.dao_params_updated() + || self.community_pool_params_updated() || self.stake_params_updated() || self.distributions_params_updated() || self.chain_params_updated() @@ -565,13 +570,13 @@ pub trait StateReadExt: StateRead { let stake_params = self.get_stake_params().await?; let ibc_params = self.get_ibc_params().await?; let governance_params = self.get_governance_params().await?; - let dao_params = self.get_dao_params().await?; + let community_pool_params = self.get_community_pool_params().await?; let fee_params = self.get_fee_params().await?; let distributions_params = self.get_distributions_params().await?; Ok(AppParameters { chain_params, - dao_params, + community_pool_params, distributions_params, fee_params, governance_params, @@ -605,7 +610,7 @@ impl< + penumbra_stake::StateReadExt + penumbra_governance::component::StateReadExt + penumbra_fee::component::StateReadExt - + penumbra_dao::component::StateReadExt + + penumbra_community_pool::component::StateReadExt + penumbra_chain::component::StateReadExt + penumbra_ibc::component::StateReadExt + penumbra_distributions::component::StateReadExt diff --git a/crates/core/app/src/dao_ext.rs b/crates/core/app/src/community_pool_ext.rs similarity index 62% rename from crates/core/app/src/dao_ext.rs rename to crates/core/app/src/community_pool_ext.rs index 26412bf080..153b8342eb 100644 --- a/crates/core/app/src/dao_ext.rs +++ b/crates/core/app/src/community_pool_ext.rs @@ -14,11 +14,13 @@ use penumbra_transaction::Transaction; // dependency. #[async_trait] -pub trait DaoStateReadExt: StateRead + penumbra_stake::StateReadExt { +pub trait CommunityPoolStateReadExt: StateRead + penumbra_stake::StateReadExt { /// Get all the transactions set to be delivered in this block (scheduled in last block). - async fn pending_dao_transactions(&self) -> Result> { - // Get the proposal IDs of the DAO transactions we are about to deliver. - let prefix = state_key::deliver_dao_transactions_at_height(self.get_block_height().await?); + async fn pending_community_pool_transactions(&self) -> Result> { + // Get the proposal IDs of the Community Pool transactions we are about to deliver. + let prefix = state_key::deliver_community_pool_transactions_at_height( + self.get_block_height().await?, + ); let proposals: Vec = self .prefix_proto::(&prefix) .map(|result| anyhow::Ok(result?.1)) @@ -29,7 +31,7 @@ pub trait DaoStateReadExt: StateRead + penumbra_stake::StateReadExt { let mut transactions = Vec::new(); for proposal in proposals { transactions.push( - self.get(&state_key::dao_transaction(proposal)) + self.get(&state_key::community_pool_transaction(proposal)) .await? .ok_or_else(|| { anyhow::anyhow!("no transaction found for proposal {}", proposal) @@ -40,14 +42,14 @@ pub trait DaoStateReadExt: StateRead + penumbra_stake::StateReadExt { } } -impl DaoStateReadExt for T {} +impl CommunityPoolStateReadExt for T {} #[async_trait] -pub trait DaoStateWriteExt: StateWrite { +pub trait CommunityPoolStateWriteExt: StateWrite { /// Get all the transactions set to be delivered in this block (scheduled in last block). - fn put_dao_transaction(&mut self, proposal: u64, transaction: Transaction) { - self.put(state_key::dao_transaction(proposal), transaction); + fn put_community_pool_transaction(&mut self, proposal: u64, transaction: Transaction) { + self.put(state_key::community_pool_transaction(proposal), transaction); } } -impl DaoStateWriteExt for T {} +impl CommunityPoolStateWriteExt for T {} diff --git a/crates/core/app/src/genesis/app_state.rs b/crates/core/app/src/genesis/app_state.rs index 12bc4a6d30..3e5fcc32dd 100644 --- a/crates/core/app/src/genesis/app_state.rs +++ b/crates/core/app/src/genesis/app_state.rs @@ -1,5 +1,5 @@ use penumbra_chain::genesis::Content as ChainContent; -use penumbra_dao::genesis::Content as DaoContent; +use penumbra_community_pool::genesis::Content as CommunityPoolContent; use penumbra_distributions::genesis::Content as DistributionsContent; use penumbra_fee::genesis::Content as FeeContent; use penumbra_governance::genesis::Content as GovernanceContent; @@ -33,8 +33,8 @@ pub struct Content { pub ibc_content: IBCContent, /// Chain module genesis state. pub chain_content: ChainContent, - /// DAO module genesis state. - pub dao_content: DaoContent, + /// Community Pool module genesis state. + pub community_pool_content: CommunityPoolContent, /// Fee module genesis state. pub fee_content: FeeContent, /// Distributions module genesis state. @@ -73,7 +73,7 @@ impl From for pb::GenesisContent { stake_content: Some(value.stake_content.into()), ibc_content: Some(value.ibc_content.into()), governance_content: Some(value.governance_content.into()), - dao_content: Some(value.dao_content.into()), + community_pool_content: Some(value.community_pool_content.into()), shielded_pool_content: Some(value.shielded_pool_content.into()), fee_content: Some(value.fee_content.into()), distributions_content: Some(value.distributions_content.into()), @@ -120,9 +120,9 @@ impl TryFrom for Content { .ibc_content .ok_or_else(|| anyhow::anyhow!("proto response missing ibc content"))? .try_into()?, - dao_content: msg - .dao_content - .ok_or_else(|| anyhow::anyhow!("proto response missing dao content"))? + community_pool_content: msg + .community_pool_content + .ok_or_else(|| anyhow::anyhow!("proto response missing Community Pool content"))? .try_into()?, chain_content: msg .chain_content diff --git a/crates/core/app/src/lib.rs b/crates/core/app/src/lib.rs index 0236f4810c..37a6b618f2 100644 --- a/crates/core/app/src/lib.rs +++ b/crates/core/app/src/lib.rs @@ -1,12 +1,12 @@ #![deny(clippy::unwrap_used)] mod action_handler; -mod dao_ext; +mod community_pool_ext; mod mock_client; mod temp_storage_ext; pub use action_handler::ActionHandler; pub use app::StateWriteExt; -pub use dao_ext::DaoStateReadExt; +pub use community_pool_ext::CommunityPoolStateReadExt; pub use mock_client::MockClient; pub use temp_storage_ext::TempStorageExt; diff --git a/crates/core/app/src/params.rs b/crates/core/app/src/params.rs index 0169396d8b..bacfdc2550 100644 --- a/crates/core/app/src/params.rs +++ b/crates/core/app/src/params.rs @@ -1,5 +1,5 @@ use penumbra_chain::params::ChainParameters; -use penumbra_dao::params::DaoParameters; +use penumbra_community_pool::params::CommunityPoolParameters; use penumbra_distributions::DistributionsParameters; use penumbra_fee::FeeParameters; use penumbra_governance::params::GovernanceParameters; @@ -16,7 +16,7 @@ pub mod change; #[serde(try_from = "pb::AppParameters", into = "pb::AppParameters")] pub struct AppParameters { pub chain_params: ChainParameters, - pub dao_params: DaoParameters, + pub community_pool_params: CommunityPoolParameters, pub distributions_params: DistributionsParameters, pub fee_params: FeeParameters, pub governance_params: GovernanceParameters, @@ -37,9 +37,9 @@ impl TryFrom for AppParameters { .chain_params .ok_or_else(|| anyhow::anyhow!("proto response missing chain params"))? .try_into()?, - dao_params: msg - .dao_params - .ok_or_else(|| anyhow::anyhow!("proto response missing dao params"))? + community_pool_params: msg + .community_pool_params + .ok_or_else(|| anyhow::anyhow!("proto response missing Community Pool params"))? .try_into()?, distributions_params: msg .distributions_params @@ -69,7 +69,7 @@ impl From for pb::AppParameters { fn from(params: AppParameters) -> Self { pb::AppParameters { chain_params: Some(params.chain_params.into()), - dao_params: Some(params.dao_params.into()), + community_pool_params: Some(params.community_pool_params.into()), distributions_params: Some(params.distributions_params.into()), governance_params: Some(params.governance_params.into()), ibc_params: Some(params.ibc_params.into()), diff --git a/crates/core/app/src/params/change.rs b/crates/core/app/src/params/change.rs index 2b796f26d3..dd73496b7a 100644 --- a/crates/core/app/src/params/change.rs +++ b/crates/core/app/src/params/change.rs @@ -2,7 +2,7 @@ use std::fmt::Display; use anyhow::Result; use penumbra_chain::params::{ChainParameters, Ratio}; -use penumbra_dao::params::DaoParameters; +use penumbra_community_pool::params::CommunityPoolParameters; use penumbra_distributions::params::DistributionsParameters; use penumbra_fee::FeeParameters; use penumbra_governance::{params::GovernanceParameters, proposal::ChangedAppParameters}; @@ -55,9 +55,9 @@ impl AppParameters { DistributionsParameters { staking_issuance_per_block: _, }, - dao_params: - DaoParameters { - dao_spend_proposals_enabled: _, + community_pool_params: + CommunityPoolParameters { + community_pool_spend_proposals_enabled: _, }, // IMPORTANT: Don't use `..` here! We want to ensure every single field is verified! } = self; @@ -137,9 +137,9 @@ impl AppParameters { DistributionsParameters { staking_issuance_per_block: _, }, - dao_params: - DaoParameters { - dao_spend_proposals_enabled: _, + community_pool_params: + CommunityPoolParameters { + community_pool_spend_proposals_enabled: _, }, // IMPORTANT: Don't use `..` here! We want to ensure every single field is verified! } = self; @@ -217,7 +217,7 @@ impl AppParameters { pub fn as_changed_params(&self) -> ChangedAppParameters { ChangedAppParameters { chain_params: Some(self.chain_params.clone()), - dao_params: Some(self.dao_params.clone()), + community_pool_params: Some(self.community_pool_params.clone()), distributions_params: Some(self.distributions_params.clone()), fee_params: Some(self.fee_params.clone()), governance_params: Some(self.governance_params.clone()), @@ -241,7 +241,7 @@ impl AppParameters { || new.ibc_params.is_none() || new.governance_params.is_none() || new.fee_params.is_none() - || new.dao_params.is_none() + || new.community_pool_params.is_none() || new.distributions_params.is_none()) { anyhow::bail!("all parameters must be specified if no old parameters are provided"); @@ -253,9 +253,9 @@ impl AppParameters { .chain_params .clone() }), - dao_params: new.dao_params.clone().unwrap_or_else(|| { + community_pool_params: new.community_pool_params.clone().unwrap_or_else(|| { old.expect("old should be set if new has any None values") - .dao_params + .community_pool_params .clone() }), distributions_params: new.distributions_params.clone().unwrap_or_else(|| { diff --git a/crates/core/component/dao/Cargo.toml b/crates/core/component/community-pool/Cargo.toml similarity index 97% rename from crates/core/component/dao/Cargo.toml rename to crates/core/component/community-pool/Cargo.toml index ed7e4908da..d59368bf4b 100644 --- a/crates/core/component/dao/Cargo.toml +++ b/crates/core/component/community-pool/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "penumbra-dao" +name = "penumbra-community-pool" version = "0.64.1" edition = "2021" diff --git a/crates/core/component/community-pool/src/action.rs b/crates/core/component/community-pool/src/action.rs new file mode 100644 index 0000000000..9436e9baaf --- /dev/null +++ b/crates/core/component/community-pool/src/action.rs @@ -0,0 +1,7 @@ +mod community_pool_deposit; +mod community_pool_output; +mod community_pool_spend; + +pub use community_pool_deposit::CommunityPoolDeposit; +pub use community_pool_output::CommunityPoolOutput; +pub use community_pool_spend::CommunityPoolSpend; diff --git a/crates/core/component/dao/src/action/dao_deposit.rs b/crates/core/component/community-pool/src/action/community_pool_deposit.rs similarity index 52% rename from crates/core/component/dao/src/action/dao_deposit.rs rename to crates/core/component/community-pool/src/action/community_pool_deposit.rs index 1486fdd40e..4c905c09f0 100644 --- a/crates/core/component/dao/src/action/dao_deposit.rs +++ b/crates/core/component/community-pool/src/action/community_pool_deposit.rs @@ -4,50 +4,53 @@ use serde::{Deserialize, Serialize}; use std::convert::{TryFrom, TryInto}; use penumbra_asset::{Balance, Value}; -// TODO: why are the Dao actions not in the dao protos? +// TODO: why are the CommunityPool actions not in the Community Pool protos? use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType}; #[derive(Clone, Debug, Serialize, Deserialize)] -#[serde(try_from = "pb::DaoDeposit", into = "pb::DaoDeposit")] -pub struct DaoDeposit { +#[serde( + try_from = "pb::CommunityPoolDeposit", + into = "pb::CommunityPoolDeposit" +)] +pub struct CommunityPoolDeposit { pub value: Value, } -impl DaoDeposit { +impl CommunityPoolDeposit { pub fn balance(&self) -> Balance { - // Deposits into the DAO require value + // Deposits into the Community Pool require value -Balance::from(self.value) } } -impl EffectingData for DaoDeposit { +impl EffectingData for CommunityPoolDeposit { fn effect_hash(&self) -> EffectHash { EffectHash::from_proto_effecting_data(&self.to_proto()) } } -impl DomainType for DaoDeposit { - type Proto = pb::DaoDeposit; +impl DomainType for CommunityPoolDeposit { + type Proto = pb::CommunityPoolDeposit; } -impl From for pb::DaoDeposit { - fn from(msg: DaoDeposit) -> Self { - pb::DaoDeposit { +impl From for pb::CommunityPoolDeposit { + fn from(msg: CommunityPoolDeposit) -> Self { + pb::CommunityPoolDeposit { value: Some(msg.value.into()), } } } -impl TryFrom for DaoDeposit { +impl TryFrom for CommunityPoolDeposit { type Error = Error; - fn try_from(proto: pb::DaoDeposit) -> anyhow::Result { + fn try_from(proto: pb::CommunityPoolDeposit) -> anyhow::Result { let value = proto .value .ok_or_else(|| anyhow::anyhow!("missing value"))? .try_into() .context("malformed value")?; - Ok(DaoDeposit { value }) + Ok(CommunityPoolDeposit { value }) } } diff --git a/crates/core/component/dao/src/action/dao_output.rs b/crates/core/component/community-pool/src/action/community_pool_output.rs similarity index 62% rename from crates/core/component/dao/src/action/dao_output.rs rename to crates/core/component/community-pool/src/action/community_pool_output.rs index f320546484..6952bd5448 100644 --- a/crates/core/component/dao/src/action/dao_output.rs +++ b/crates/core/component/community-pool/src/action/community_pool_output.rs @@ -8,42 +8,42 @@ use penumbra_keys::Address; use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType}; #[derive(Clone, Debug, Serialize, Deserialize)] -#[serde(try_from = "pb::DaoOutput", into = "pb::DaoOutput")] -pub struct DaoOutput { +#[serde(try_from = "pb::CommunityPoolOutput", into = "pb::CommunityPoolOutput")] +pub struct CommunityPoolOutput { pub value: Value, pub address: Address, } -impl DaoOutput { +impl CommunityPoolOutput { pub fn balance(&self) -> Balance { - // Outputs from the DAO require value + // Outputs from the Community Pool require value -Balance::from(self.value) } } -impl EffectingData for DaoOutput { +impl EffectingData for CommunityPoolOutput { fn effect_hash(&self) -> EffectHash { EffectHash::from_proto_effecting_data(&self.to_proto()) } } -impl DomainType for DaoOutput { - type Proto = pb::DaoOutput; +impl DomainType for CommunityPoolOutput { + type Proto = pb::CommunityPoolOutput; } -impl From for pb::DaoOutput { - fn from(msg: DaoOutput) -> Self { - pb::DaoOutput { +impl From for pb::CommunityPoolOutput { + fn from(msg: CommunityPoolOutput) -> Self { + pb::CommunityPoolOutput { value: Some(msg.value.into()), address: Some(msg.address.into()), } } } -impl TryFrom for DaoOutput { +impl TryFrom for CommunityPoolOutput { type Error = Error; - fn try_from(proto: pb::DaoOutput) -> anyhow::Result { + fn try_from(proto: pb::CommunityPoolOutput) -> anyhow::Result { let value = proto .value .ok_or_else(|| anyhow::anyhow!("missing value"))? @@ -55,6 +55,6 @@ impl TryFrom for DaoOutput { .try_into() .context("malformed address")?; - Ok(DaoOutput { value, address }) + Ok(CommunityPoolOutput { value, address }) } } diff --git a/crates/core/component/dao/src/action/dao_spend.rs b/crates/core/component/community-pool/src/action/community_pool_spend.rs similarity index 55% rename from crates/core/component/dao/src/action/dao_spend.rs rename to crates/core/component/community-pool/src/action/community_pool_spend.rs index c04c703e9d..fbef03cd0a 100644 --- a/crates/core/component/dao/src/action/dao_spend.rs +++ b/crates/core/component/community-pool/src/action/community_pool_spend.rs @@ -7,46 +7,46 @@ use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType}; #[derive(Clone, Debug, Serialize, Deserialize)] -#[serde(try_from = "pb::DaoSpend", into = "pb::DaoSpend")] -pub struct DaoSpend { +#[serde(try_from = "pb::CommunityPoolSpend", into = "pb::CommunityPoolSpend")] +pub struct CommunityPoolSpend { pub value: Value, } -impl EffectingData for DaoSpend { +impl EffectingData for CommunityPoolSpend { fn effect_hash(&self) -> EffectHash { EffectHash::from_proto_effecting_data(&self.to_proto()) } } -impl DaoSpend { +impl CommunityPoolSpend { pub fn balance(&self) -> Balance { - // Spends from the DAO produce value + // Spends from the Community Pool produce value Balance::from(self.value) } } -impl DomainType for DaoSpend { - type Proto = pb::DaoSpend; +impl DomainType for CommunityPoolSpend { + type Proto = pb::CommunityPoolSpend; } -impl From for pb::DaoSpend { - fn from(msg: DaoSpend) -> Self { - pb::DaoSpend { +impl From for pb::CommunityPoolSpend { + fn from(msg: CommunityPoolSpend) -> Self { + pb::CommunityPoolSpend { value: Some(msg.value.into()), } } } -impl TryFrom for DaoSpend { +impl TryFrom for CommunityPoolSpend { type Error = Error; - fn try_from(proto: pb::DaoSpend) -> anyhow::Result { + fn try_from(proto: pb::CommunityPoolSpend) -> anyhow::Result { let value = proto .value .ok_or_else(|| anyhow::anyhow!("missing value"))? .try_into() .context("malformed value")?; - Ok(DaoSpend { value }) + Ok(CommunityPoolSpend { value }) } } diff --git a/crates/core/component/community-pool/src/component.rs b/crates/core/component/community-pool/src/component.rs new file mode 100644 index 0000000000..bf31c2ed60 --- /dev/null +++ b/crates/core/component/community-pool/src/component.rs @@ -0,0 +1,8 @@ +/// The Community Pool isn't really a "component" because it doesn't really execute anything by itself. It's +/// just a collection of state that is modified by CommunityPoolSpend and CommunityPoolDeposit actions. +pub mod state_key; + +mod action_handler; +mod view; + +pub use view::{StateReadExt, StateWriteExt}; diff --git a/crates/core/component/community-pool/src/component/action_handler.rs b/crates/core/component/community-pool/src/component/action_handler.rs new file mode 100644 index 0000000000..3c44c51fc2 --- /dev/null +++ b/crates/core/component/community-pool/src/component/action_handler.rs @@ -0,0 +1,3 @@ +mod community_pool_deposit; +mod community_pool_output; +mod community_pool_spend; diff --git a/crates/core/component/dao/src/component/action_handler/dao_deposit.rs b/crates/core/component/community-pool/src/component/action_handler/community_pool_deposit.rs similarity index 63% rename from crates/core/component/dao/src/component/action_handler/dao_deposit.rs rename to crates/core/component/community-pool/src/component/action_handler/community_pool_deposit.rs index 59adc464d9..6922085815 100644 --- a/crates/core/component/dao/src/component/action_handler/dao_deposit.rs +++ b/crates/core/component/community-pool/src/component/action_handler/community_pool_deposit.rs @@ -5,22 +5,22 @@ use async_trait::async_trait; use cnidarium::{StateRead, StateWrite}; use cnidarium_component::ActionHandler; -use crate::{component::StateWriteExt as _, DaoDeposit}; +use crate::{component::StateWriteExt as _, CommunityPoolDeposit}; #[async_trait] -impl ActionHandler for DaoDeposit { +impl ActionHandler for CommunityPoolDeposit { type CheckStatelessContext = (); async fn check_stateless(&self, _context: ()) -> Result<()> { - // Any deposit into the DAO is valid. + // Any deposit into the Community Pool is valid. Ok(()) } async fn check_stateful(&self, _state: Arc) -> Result<()> { - // Any deposit into the DAO is valid. + // Any deposit into the Community Pool is valid. Ok(()) } async fn execute(&self, mut state: S) -> Result<()> { - state.dao_deposit(self.value).await + state.community_pool_deposit(self.value).await } } diff --git a/crates/core/component/dao/src/component/action_handler/dao_output.rs b/crates/core/component/community-pool/src/component/action_handler/community_pool_output.rs similarity index 54% rename from crates/core/component/dao/src/component/action_handler/dao_output.rs rename to crates/core/component/community-pool/src/component/action_handler/community_pool_output.rs index dbf91e220f..ee923341f2 100644 --- a/crates/core/component/dao/src/component/action_handler/dao_output.rs +++ b/crates/core/component/community-pool/src/component/action_handler/community_pool_output.rs @@ -7,25 +7,29 @@ use cnidarium_component::ActionHandler; use penumbra_sct::CommitmentSource; use penumbra_shielded_pool::component::NoteManager; -use crate::DaoOutput; +use crate::CommunityPoolOutput; #[async_trait] -impl ActionHandler for DaoOutput { +impl ActionHandler for CommunityPoolOutput { type CheckStatelessContext = (); async fn check_stateless(&self, _context: ()) -> Result<()> { - // Any output from the DAO is valid (it's just a transparent output). + // Any output from the Community Pool is valid (it's just a transparent output). Ok(()) } async fn check_stateful(&self, _state: Arc) -> Result<()> { - // Any output from the DAO is valid (it's just a transparent output). + // Any output from the Community Pool is valid (it's just a transparent output). Ok(()) } async fn execute(&self, mut state: S) -> Result<()> { - // Executing a DAO output is just minting a note to the recipient of the output. + // Executing a Community Pool output is just minting a note to the recipient of the output. state - .mint_note(self.value, &self.address, CommitmentSource::DaoOutput) + .mint_note( + self.value, + &self.address, + CommitmentSource::CommunityPoolOutput, + ) .await } } diff --git a/crates/core/component/dao/src/component/action_handler/dao_spend.rs b/crates/core/component/community-pool/src/component/action_handler/community_pool_spend.rs similarity index 59% rename from crates/core/component/dao/src/component/action_handler/dao_spend.rs rename to crates/core/component/community-pool/src/component/action_handler/community_pool_spend.rs index 6fdedc2d53..b68baffde1 100644 --- a/crates/core/component/dao/src/component/action_handler/dao_spend.rs +++ b/crates/core/component/community-pool/src/component/action_handler/community_pool_spend.rs @@ -5,25 +5,25 @@ use async_trait::async_trait; use cnidarium::{StateRead, StateWrite}; use cnidarium_component::ActionHandler; -use crate::{component::StateWriteExt as _, DaoSpend}; +use crate::{component::StateWriteExt as _, CommunityPoolSpend}; #[async_trait] -impl ActionHandler for DaoSpend { +impl ActionHandler for CommunityPoolSpend { type CheckStatelessContext = (); async fn check_stateless(&self, _context: ()) -> Result<()> { - // We can't statelessly check that the DAO has enough funds to spend, because we don't know + // We can't statelessly check that the Community Pool has enough funds to spend, because we don't know // what its state is here. Ok(()) } async fn check_stateful(&self, _state: Arc) -> Result<()> { // Instead of checking here, we just check during execution, which will fail if we try to - // overdraw the DAO. + // overdraw the Community Pool. Ok(()) } async fn execute(&self, mut state: S) -> Result<()> { - // This will fail if we try to overdraw the DAO, so we can never spend more than we have. - state.dao_withdraw(self.value).await + // This will fail if we try to overdraw the Community Pool, so we can never spend more than we have. + state.community_pool_withdraw(self.value).await } } diff --git a/crates/core/component/community-pool/src/component/state_key.rs b/crates/core/component/community-pool/src/component/state_key.rs new file mode 100644 index 0000000000..0532608e0a --- /dev/null +++ b/crates/core/component/community-pool/src/component/state_key.rs @@ -0,0 +1,18 @@ +use penumbra_asset::asset; + +pub fn community_pool_params() -> &'static str { + "community_pool/params" +} + +pub fn community_pool_params_updated() -> &'static str { + "community_pool/community_pool_params_updated" +} + +pub fn balance_for_asset(asset_id: asset::Id) -> String { + format!("community_pool/asset/{asset_id}") +} + +pub fn all_assets_balance() -> &'static str { + // note: this must be the prefix of the above. + "community_pool/asset/" +} diff --git a/crates/core/component/dao/src/component/view.rs b/crates/core/component/community-pool/src/component/view.rs similarity index 60% rename from crates/core/component/dao/src/component/view.rs rename to crates/core/component/community-pool/src/component/view.rs index 7c6f05eb42..e4982afa63 100644 --- a/crates/core/component/dao/src/component/view.rs +++ b/crates/core/component/community-pool/src/component/view.rs @@ -9,33 +9,33 @@ use penumbra_asset::{asset, Value}; use penumbra_num::Amount; use penumbra_proto::{StateReadProto, StateWriteProto}; -use crate::params::DaoParameters; +use crate::params::CommunityPoolParameters; use super::state_key; #[async_trait] pub trait StateReadExt: StateRead { - /// Indicates if the DAO parameters have been updated in this block. - fn dao_params_updated(&self) -> bool { - self.object_get::<()>(state_key::dao_params_updated()) + /// Indicates if the Community Pool parameters have been updated in this block. + fn community_pool_params_updated(&self) -> bool { + self.object_get::<()>(state_key::community_pool_params_updated()) .is_some() } - /// Gets the DAO parameters from the JMT. - async fn get_dao_params(&self) -> Result { - self.get(state_key::dao_params()) + /// Gets the Community Pool parameters from the JMT. + async fn get_community_pool_params(&self) -> Result { + self.get(state_key::community_pool_params()) .await? - .ok_or_else(|| anyhow::anyhow!("Missing DaoParameters")) + .ok_or_else(|| anyhow::anyhow!("Missing CommunityPoolParameters")) } - async fn dao_asset_balance(&self, asset_id: asset::Id) -> Result { + async fn community_pool_asset_balance(&self, asset_id: asset::Id) -> Result { Ok(self .get(&state_key::balance_for_asset(asset_id)) .await? .unwrap_or_else(|| Amount::from(0u64))) } - async fn dao_balance(&self) -> Result> { + async fn community_pool_balance(&self) -> Result> { let prefix = state_key::all_assets_balance(); self.prefix(prefix) .map(|result| { @@ -53,23 +53,23 @@ impl StateReadExt for T where T: StateRead + ?Sized {} #[async_trait] pub trait StateWriteExt: StateWrite { - /// Writes the provided DAO parameters to the JMT. - fn put_dao_params(&mut self, params: DaoParameters) { - // Note that the dao params have been updated: - self.object_put(state_key::dao_params_updated(), ()); + /// Writes the provided Community Pool parameters to the JMT. + fn put_community_pool_params(&mut self, params: CommunityPoolParameters) { + // Note that the Community Pool params have been updated: + self.object_put(state_key::community_pool_params_updated(), ()); - // Change the DAO parameters: - self.put(state_key::dao_params().into(), params) + // Change the Community Pool parameters: + self.put(state_key::community_pool_params().into(), params) } - async fn dao_deposit(&mut self, value: Value) -> Result<()> { + async fn community_pool_deposit(&mut self, value: Value) -> Result<()> { let key = state_key::balance_for_asset(value.asset_id); let current = self.get(&key).await?.unwrap_or_else(|| Amount::from(0u64)); self.put(key, current + value.amount); Ok(()) } - async fn dao_withdraw(&mut self, value: Value) -> Result<()> { + async fn community_pool_withdraw(&mut self, value: Value) -> Result<()> { let key = state_key::balance_for_asset(value.asset_id); let current = self.get(&key).await?.unwrap_or_else(|| Amount::from(0u64)); if let Some(remaining) = u128::from(current).checked_sub(u128::from(value.amount)) { @@ -80,7 +80,7 @@ pub trait StateWriteExt: StateWrite { } } else { anyhow::bail!( - "insufficient balance to withdraw {} of asset ID {} from the DAO", + "insufficient balance to withdraw {} of asset ID {} from the Community Pool", value.amount, value.asset_id ); diff --git a/crates/core/component/community-pool/src/event.rs b/crates/core/component/community-pool/src/event.rs new file mode 100644 index 0000000000..60997ace10 --- /dev/null +++ b/crates/core/component/community-pool/src/event.rs @@ -0,0 +1,5 @@ +// TODO: events for +// +// - Community Pool spend +// - Community Pool deposit +// ? diff --git a/crates/core/component/dao/src/genesis.rs b/crates/core/component/community-pool/src/genesis.rs similarity index 55% rename from crates/core/component/dao/src/genesis.rs rename to crates/core/component/community-pool/src/genesis.rs index 4a550c1c23..1ffeacec4a 100644 --- a/crates/core/component/dao/src/genesis.rs +++ b/crates/core/component/community-pool/src/genesis.rs @@ -1,20 +1,20 @@ use anyhow::Context; -use penumbra_proto::{penumbra::core::component::dao::v1alpha1 as pb, DomainType}; +use penumbra_proto::{penumbra::core::component::community_pool::v1alpha1 as pb, DomainType}; use serde::{Deserialize, Serialize}; -use crate::params::DaoParameters; +use crate::params::CommunityPoolParameters; #[derive(Deserialize, Serialize, Debug, Clone, Default)] #[serde(try_from = "pb::GenesisContent", into = "pb::GenesisContent")] pub struct Content { - /// The initial configuration parameters for the DAO component. - pub dao_params: DaoParameters, + /// The initial configuration parameters for the Community Pool component. + pub community_pool_params: CommunityPoolParameters, } impl From for pb::GenesisContent { fn from(value: Content) -> Self { pb::GenesisContent { - dao_params: Some(value.dao_params.into()), + community_pool_params: Some(value.community_pool_params.into()), } } } @@ -24,9 +24,9 @@ impl TryFrom for Content { fn try_from(msg: pb::GenesisContent) -> Result { Ok(Content { - dao_params: msg - .dao_params - .context("dao params not present in protobuf message")? + community_pool_params: msg + .community_pool_params + .context("Community Pool params not present in protobuf message")? .try_into()?, }) } diff --git a/crates/core/component/dao/src/lib.rs b/crates/core/component/community-pool/src/lib.rs similarity index 82% rename from crates/core/component/dao/src/lib.rs rename to crates/core/component/community-pool/src/lib.rs index 7d16f3f9c3..088fd0edbf 100644 --- a/crates/core/component/dao/src/lib.rs +++ b/crates/core/component/community-pool/src/lib.rs @@ -8,7 +8,7 @@ pub mod component; pub mod event; mod action; -pub use action::{DaoDeposit, DaoOutput, DaoSpend}; +pub use action::{CommunityPoolDeposit, CommunityPoolOutput, CommunityPoolSpend}; pub mod genesis; pub mod params; diff --git a/crates/core/component/community-pool/src/params.rs b/crates/core/component/community-pool/src/params.rs new file mode 100644 index 0000000000..b120208f25 --- /dev/null +++ b/crates/core/component/community-pool/src/params.rs @@ -0,0 +1,43 @@ +use penumbra_proto::core::component::community_pool::v1alpha1 as pb; +use penumbra_proto::DomainType; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde( + try_from = "pb::CommunityPoolParameters", + into = "pb::CommunityPoolParameters" +)] +pub struct CommunityPoolParameters { + /// Whether Community Pool spend proposals are enabled. + pub community_pool_spend_proposals_enabled: bool, +} + +impl DomainType for CommunityPoolParameters { + type Proto = pb::CommunityPoolParameters; +} + +impl TryFrom for CommunityPoolParameters { + type Error = anyhow::Error; + + fn try_from(msg: pb::CommunityPoolParameters) -> anyhow::Result { + Ok(CommunityPoolParameters { + community_pool_spend_proposals_enabled: msg.community_pool_spend_proposals_enabled, + }) + } +} + +impl From for pb::CommunityPoolParameters { + fn from(params: CommunityPoolParameters) -> Self { + pb::CommunityPoolParameters { + community_pool_spend_proposals_enabled: params.community_pool_spend_proposals_enabled, + } + } +} + +impl Default for CommunityPoolParameters { + fn default() -> Self { + Self { + community_pool_spend_proposals_enabled: true, + } + } +} diff --git a/crates/core/component/compact-block/Cargo.toml b/crates/core/component/compact-block/Cargo.toml index e6a5561e60..137438ddf6 100644 --- a/crates/core/component/compact-block/Cargo.toml +++ b/crates/core/component/compact-block/Cargo.toml @@ -31,7 +31,7 @@ penumbra-chain = { path = "../chain", default-features = false } penumbra-shielded-pool = { path = "../shielded-pool", default-features = false } penumbra-dex = { path = "../dex", default-features = false } penumbra-ibc = { path = "../ibc", default-features = false } -penumbra-dao = { path = "../dao", default-features = false } +penumbra-community-pool = { path = "../community-pool", default-features = false } penumbra-governance = { path = "../governance", default-features = false } penumbra-stake = { path = "../stake", default-features = false } penumbra-fee = { path = "../fee", default-features = false } diff --git a/crates/core/component/dao/src/action.rs b/crates/core/component/dao/src/action.rs deleted file mode 100644 index 92f9d5e096..0000000000 --- a/crates/core/component/dao/src/action.rs +++ /dev/null @@ -1,7 +0,0 @@ -mod dao_deposit; -mod dao_output; -mod dao_spend; - -pub use dao_deposit::DaoDeposit; -pub use dao_output::DaoOutput; -pub use dao_spend::DaoSpend; diff --git a/crates/core/component/dao/src/component.rs b/crates/core/component/dao/src/component.rs deleted file mode 100644 index 8e6e5d874b..0000000000 --- a/crates/core/component/dao/src/component.rs +++ /dev/null @@ -1,8 +0,0 @@ -/// The DAO isn't really a "component" because it doesn't really execute anything by itself. It's -/// just a collection of state that is modified by DaoSpend and DaoDeposit actions. -pub mod state_key; - -mod action_handler; -mod view; - -pub use view::{StateReadExt, StateWriteExt}; diff --git a/crates/core/component/dao/src/component/action_handler.rs b/crates/core/component/dao/src/component/action_handler.rs deleted file mode 100644 index ef085d7022..0000000000 --- a/crates/core/component/dao/src/component/action_handler.rs +++ /dev/null @@ -1,3 +0,0 @@ -mod dao_deposit; -mod dao_output; -mod dao_spend; diff --git a/crates/core/component/dao/src/component/state_key.rs b/crates/core/component/dao/src/component/state_key.rs deleted file mode 100644 index ace8c99aba..0000000000 --- a/crates/core/component/dao/src/component/state_key.rs +++ /dev/null @@ -1,18 +0,0 @@ -use penumbra_asset::asset; - -pub fn dao_params() -> &'static str { - "dao/params" -} - -pub fn dao_params_updated() -> &'static str { - "dao/dao_params_updated" -} - -pub fn balance_for_asset(asset_id: asset::Id) -> String { - format!("dao/asset/{asset_id}") -} - -pub fn all_assets_balance() -> &'static str { - // note: this must be the prefix of the above. - "dao/asset/" -} diff --git a/crates/core/component/dao/src/event.rs b/crates/core/component/dao/src/event.rs deleted file mode 100644 index 8dad9c00dd..0000000000 --- a/crates/core/component/dao/src/event.rs +++ /dev/null @@ -1,5 +0,0 @@ -// TODO: events for -// -// - dao spend -// - dao deposit -// ? diff --git a/crates/core/component/dao/src/params.rs b/crates/core/component/dao/src/params.rs deleted file mode 100644 index 8094816bad..0000000000 --- a/crates/core/component/dao/src/params.rs +++ /dev/null @@ -1,40 +0,0 @@ -use penumbra_proto::core::component::dao::v1alpha1 as pb; -use penumbra_proto::DomainType; -use serde::{Deserialize, Serialize}; - -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(try_from = "pb::DaoParameters", into = "pb::DaoParameters")] -pub struct DaoParameters { - /// Whether DAO spend proposals are enabled. - pub dao_spend_proposals_enabled: bool, -} - -impl DomainType for DaoParameters { - type Proto = pb::DaoParameters; -} - -impl TryFrom for DaoParameters { - type Error = anyhow::Error; - - fn try_from(msg: pb::DaoParameters) -> anyhow::Result { - Ok(DaoParameters { - dao_spend_proposals_enabled: msg.dao_spend_proposals_enabled, - }) - } -} - -impl From for pb::DaoParameters { - fn from(params: DaoParameters) -> Self { - pb::DaoParameters { - dao_spend_proposals_enabled: params.dao_spend_proposals_enabled, - } - } -} - -impl Default for DaoParameters { - fn default() -> Self { - Self { - dao_spend_proposals_enabled: true, - } - } -} diff --git a/crates/core/component/governance/Cargo.toml b/crates/core/component/governance/Cargo.toml index ce88d47211..06b893ae81 100644 --- a/crates/core/component/governance/Cargo.toml +++ b/crates/core/component/governance/Cargo.toml @@ -39,7 +39,7 @@ penumbra-proof-params = { path = "../../../crypto/proof-params", default-feature penumbra-sct = { path = "../sct", default-features = false } penumbra-shielded-pool = { path = "../shielded-pool", default-features = false } penumbra-stake = { path = "../stake", default-features = false } -penumbra-dao = { path = "../dao", default-features = false } +penumbra-community-pool = { path = "../community-pool", default-features = false } penumbra-fee = { path = "../fee", default-features = false } penumbra-ibc = { path = "../ibc", default-features = false } penumbra-distributions = { path = "../distributions", default-features = false } diff --git a/crates/core/component/governance/src/component/view.rs b/crates/core/component/governance/src/component/view.rs index 7bb10fe136..acbc6d0a8e 100644 --- a/crates/core/component/governance/src/component/view.rs +++ b/crates/core/component/governance/src/component/view.rs @@ -864,12 +864,12 @@ pub trait StateWriteExt: StateWrite { tracing::info!("app parameters update scheduled successfully"); } - ProposalPayload::DaoSpend { + ProposalPayload::CommunityPoolSpend { transaction_plan: _, } => { // All we need to do here is signal to the `App` that we'd like this transaction to // be slotted in at the end of the block: - self.deliver_dao_transaction(proposal_id).await?; + self.deliver_community_pool_transaction(proposal_id).await?; } ProposalPayload::UpgradePlan { height } => { tracing::info!(target_height = height, "upgrade plan proposal passed"); @@ -880,14 +880,17 @@ pub trait StateWriteExt: StateWrite { Ok(Ok(())) } - async fn deliver_dao_transaction(&mut self, proposal: u64) -> Result<()> { + async fn deliver_community_pool_transaction(&mut self, proposal: u64) -> Result<()> { // Schedule for beginning of next block let delivery_height = self.get_block_height().await? + 1; - tracing::info!(%proposal, %delivery_height, "scheduling DAO transaction for delivery at next block"); + tracing::info!(%proposal, %delivery_height, "scheduling Community Pool transaction for delivery at next block"); self.put_proto( - state_key::deliver_single_dao_transaction_at_height(delivery_height, proposal), + state_key::deliver_single_community_pool_transaction_at_height( + delivery_height, + proposal, + ), proposal, ); Ok(()) diff --git a/crates/core/component/governance/src/proposal.rs b/crates/core/component/governance/src/proposal.rs index deaca2ce95..3ea6bdab34 100644 --- a/crates/core/component/governance/src/proposal.rs +++ b/crates/core/component/governance/src/proposal.rs @@ -5,7 +5,7 @@ use std::str::FromStr; use crate::params::GovernanceParameters; use penumbra_chain::params::ChainParameters; -use penumbra_dao::params::DaoParameters; +use penumbra_community_pool::params::CommunityPoolParameters; use penumbra_distributions::params::DistributionsParameters; use penumbra_fee::params::FeeParameters; use penumbra_ibc::params::IBCParameters; @@ -68,8 +68,8 @@ impl From for pb::Proposal { new_parameters: Some((*new).into()), }); } - ProposalPayload::DaoSpend { transaction_plan } => { - proposal.dao_spend = Some(pb::proposal::DaoSpend { + ProposalPayload::CommunityPoolSpend { transaction_plan } => { + proposal.community_pool_spend = Some(pb::proposal::CommunityPoolSpend { transaction_plan: Some(pbjson_types::Any { type_url: TRANSACTION_PLAN_TYPE_URL.to_owned(), value: transaction_plan.into(), @@ -119,10 +119,10 @@ impl TryFrom for Proposal { .try_into()?, ), } - } else if let Some(dao_spend) = inner.dao_spend { - ProposalPayload::DaoSpend { + } else if let Some(community_pool_spend) = inner.community_pool_spend { + ProposalPayload::CommunityPoolSpend { transaction_plan: { - let transaction_plan = dao_spend + let transaction_plan = community_pool_spend .transaction_plan .ok_or_else(|| anyhow::anyhow!("missing transaction plan"))?; if transaction_plan.type_url != TRANSACTION_PLAN_TYPE_URL { @@ -196,9 +196,9 @@ pub enum ProposalKind { /// A parameter change proposal. #[cfg_attr(feature = "clap", clap(display_order = 300))] ParameterChange, - /// A DAO spend proposal. + /// A Community Pool spend proposal. #[cfg_attr(feature = "clap", clap(display_order = 400))] - DaoSpend, + CommunityPoolSpend, /// An upgrade proposal. #[cfg_attr(feature = "clap", clap(display_order = 500))] UpgradePlan, @@ -212,7 +212,7 @@ impl FromStr for ProposalKind { "signaling" => Ok(ProposalKind::Signaling), "emergency" => Ok(ProposalKind::Emergency), "parameterchange" => Ok(ProposalKind::ParameterChange), - "daospend" => Ok(ProposalKind::DaoSpend), + "communitypoolspend" => Ok(ProposalKind::CommunityPoolSpend), "upgrade_plan" => Ok(ProposalKind::UpgradePlan), _ => Err(anyhow::anyhow!("invalid proposal kind: {}", s)), } @@ -226,7 +226,7 @@ impl Proposal { ProposalPayload::Signaling { .. } => ProposalKind::Signaling, ProposalPayload::Emergency { .. } => ProposalKind::Emergency, ProposalPayload::ParameterChange { .. } => ProposalKind::ParameterChange, - ProposalPayload::DaoSpend { .. } => ProposalKind::DaoSpend, + ProposalPayload::CommunityPoolSpend { .. } => ProposalKind::CommunityPoolSpend, ProposalPayload::UpgradePlan { .. } => ProposalKind::UpgradePlan, } } @@ -263,13 +263,13 @@ pub enum ProposalPayload { /// passed. new: Box, }, - /// A DAO spend proposal describes proposed transaction(s) to be executed or cancelled at - /// specific heights, with the spend authority of the DAO. - DaoSpend { + /// A Community Pool spend proposal describes proposed transaction(s) to be executed or cancelled at + /// specific heights, with the spend authority of the Community Pool. + CommunityPoolSpend { /// The transaction plan to be executed at the time the proposal is passed. /// - /// This must be a transaction plan which can be executed by the DAO, which means it can't - /// require any witness data or authorization signatures, but it may use the `DaoSpend` + /// This must be a transaction plan which can be executed by the Community Pool, which means it can't + /// require any witness data or authorization signatures, but it may use the `CommunityPoolSpend` /// action. transaction_plan: Vec, }, @@ -292,7 +292,7 @@ pub enum ProposalPayloadToml { old: Box, new: Box, }, - DaoSpend { + CommunityPoolSpend { transaction: String, }, UpgradePlan { @@ -312,13 +312,18 @@ impl TryFrom for ProposalPayload { ProposalPayloadToml::ParameterChange { old, new } => { ProposalPayload::ParameterChange { old, new } } - ProposalPayloadToml::DaoSpend { transaction } => ProposalPayload::DaoSpend { - transaction_plan: Bytes::from( - base64::Engine::decode(&base64::engine::general_purpose::STANDARD, transaction) + ProposalPayloadToml::CommunityPoolSpend { transaction } => { + ProposalPayload::CommunityPoolSpend { + transaction_plan: Bytes::from( + base64::Engine::decode( + &base64::engine::general_purpose::STANDARD, + transaction, + ) .context("couldn't decode transaction plan from base64")?, - ) - .to_vec(), - }, + ) + .to_vec(), + } + } ProposalPayloadToml::UpgradePlan { height } => ProposalPayload::UpgradePlan { height }, }) } @@ -334,12 +339,14 @@ impl From for ProposalPayloadToml { ProposalPayload::ParameterChange { old, new } => { ProposalPayloadToml::ParameterChange { old, new } } - ProposalPayload::DaoSpend { transaction_plan } => ProposalPayloadToml::DaoSpend { - transaction: base64::Engine::encode( - &base64::engine::general_purpose::STANDARD, - transaction_plan, - ), - }, + ProposalPayload::CommunityPoolSpend { transaction_plan } => { + ProposalPayloadToml::CommunityPoolSpend { + transaction: base64::Engine::encode( + &base64::engine::general_purpose::STANDARD, + transaction_plan, + ), + } + } ProposalPayload::UpgradePlan { height } => ProposalPayloadToml::UpgradePlan { height }, } } @@ -358,8 +365,8 @@ impl ProposalPayload { matches!(self, ProposalPayload::ParameterChange { .. }) } - pub fn is_dao_spend(&self) -> bool { - matches!(self, ProposalPayload::DaoSpend { .. }) + pub fn is_community_pool_spend(&self) -> bool { + matches!(self, ProposalPayload::CommunityPoolSpend { .. }) } } @@ -375,7 +382,7 @@ impl ProposalPayload { )] pub struct ChangedAppParameters { pub chain_params: Option, - pub dao_params: Option, + pub community_pool_params: Option, pub distributions_params: Option, pub ibc_params: Option, pub stake_params: Option, @@ -393,7 +400,10 @@ impl TryFrom for ChangedAppParameters { fn try_from(msg: pb::ChangedAppParameters) -> anyhow::Result { Ok(ChangedAppParameters { chain_params: msg.chain_params.map(TryInto::try_into).transpose()?, - dao_params: msg.dao_params.map(TryInto::try_into).transpose()?, + community_pool_params: msg + .community_pool_params + .map(TryInto::try_into) + .transpose()?, distributions_params: msg .distributions_params .map(TryInto::try_into) @@ -410,7 +420,7 @@ impl From for pb::ChangedAppParameters { fn from(params: ChangedAppParameters) -> Self { pb::ChangedAppParameters { chain_params: params.chain_params.map(Into::into), - dao_params: params.dao_params.map(Into::into), + community_pool_params: params.community_pool_params.map(Into::into), distributions_params: params.distributions_params.map(Into::into), fee_params: params.fee_params.map(Into::into), governance_params: params.governance_params.map(Into::into), diff --git a/crates/core/component/governance/src/state_key.rs b/crates/core/component/governance/src/state_key.rs index ba3268e8d1..3afa6dc536 100644 --- a/crates/core/component/governance/src/state_key.rs +++ b/crates/core/component/governance/src/state_key.rs @@ -13,8 +13,8 @@ pub fn proposal_definition(proposal_id: u64) -> String { format!("governance/proposal/{proposal_id:020}/data") } -pub fn dao_transaction(proposal_id: u64) -> String { - format!("governance/proposal/{proposal_id:020}/dao_transaction") +pub fn community_pool_transaction(proposal_id: u64) -> String { + format!("governance/proposal/{proposal_id:020}/community_pool_transaction") } pub fn proposal_state(proposal_id: u64) -> String { @@ -108,13 +108,16 @@ pub fn all_untallied_delegator_votes() -> &'static str { "governance/untallied_delegator_vote/" } -pub fn deliver_single_dao_transaction_at_height(block_height: u64, proposal_id: u64) -> String { - format!("governance/deliver_dao_transactions/{block_height}/{proposal_id:020}") +pub fn deliver_single_community_pool_transaction_at_height( + block_height: u64, + proposal_id: u64, +) -> String { + format!("governance/deliver_community_pool_transactions/{block_height}/{proposal_id:020}") } -pub fn deliver_dao_transactions_at_height(block_height: u64) -> String { - // Note: this has to be the prefix of the `deliver_single_dao_transaction_at_height` function above. - format!("governance/deliver_dao_transactions/{block_height}/") +pub fn deliver_community_pool_transactions_at_height(block_height: u64) -> String { + // Note: this has to be the prefix of the `deliver_single_community_pool_transaction_at_height` function above. + format!("governance/deliver_community_pool_transactions/{block_height}/") } // This is in the app's JMT namespace, but governance needs to access diff --git a/crates/core/component/sct/src/source.rs b/crates/core/component/sct/src/source.rs index 3f999d7e05..5795586bc9 100644 --- a/crates/core/component/sct/src/source.rs +++ b/crates/core/component/sct/src/source.rs @@ -17,8 +17,8 @@ pub enum CommitmentSource { }, /// The commitment was created through a validator's funding stream. FundingStreamReward { epoch_index: u64 }, - /// The commitment was created through a `DaoOutput` in a governance-initated transaction. - DaoOutput, + /// The commitment was created through a `CommunityPoolOutput` in a governance-initated transaction. + CommunityPoolOutput, /// The commitment was created by an inbound ICS20 transfer. Ics20Transfer { /// The sequence number of the transfer packet. @@ -70,7 +70,9 @@ impl From for pb::CommitmentSource { CommitmentSource::FundingStreamReward { epoch_index } => { Source::FundingStreamReward(pbcs::FundingStreamReward { epoch_index }) } - CommitmentSource::DaoOutput => Source::DaoOutput(pbcs::DaoOutput {}), + CommitmentSource::CommunityPoolOutput => { + Source::CommunityPoolOutput(pbcs::CommunityPoolOutput {}) + } CommitmentSource::Ics20Transfer { packet_seq, channel_id, @@ -94,7 +96,7 @@ impl TryFrom for CommitmentSource { Ok(match source { Source::Genesis(_) => Self::Genesis, - Source::DaoOutput(_) => Self::DaoOutput, + Source::CommunityPoolOutput(_) => Self::CommunityPoolOutput, Source::FundingStreamReward(x) => Self::FundingStreamReward { epoch_index: x.epoch_index, }, diff --git a/crates/core/component/stake/Cargo.toml b/crates/core/component/stake/Cargo.toml index bb053bb6c5..bc0ee2d9a0 100644 --- a/crates/core/component/stake/Cargo.toml +++ b/crates/core/component/stake/Cargo.toml @@ -14,7 +14,7 @@ component = [ "penumbra-chain/component", "penumbra-sct/component", "penumbra-shielded-pool/component", - "penumbra-dao/component", + "penumbra-community-pool/component", "penumbra-distributions/component", "tokio", "im", @@ -42,7 +42,7 @@ cnidarium = { path = "../../../cnidarium", default-features = false, optional = cnidarium-component = { path = "../../../cnidarium-component", default-features = false, optional = true } penumbra-asset = { path = "../../../core/asset", default-features = false } penumbra-chain = { path = "../chain", default-features = false } -penumbra-dao = { path = "../dao", default-features = false } +penumbra-community-pool = { path = "../community-pool", default-features = false } penumbra-distributions = { path = "../distributions", default-features = false } penumbra-keys = { path = "../../../core/keys", default-features = false } penumbra-effecthash = { path = "../../../core/effecthash", default-features = false } diff --git a/crates/core/component/stake/src/component.rs b/crates/core/component/stake/src/component.rs index a470443d10..9afbfaba6b 100644 --- a/crates/core/component/stake/src/component.rs +++ b/crates/core/component/stake/src/component.rs @@ -21,7 +21,7 @@ use penumbra_chain::{ component::{StateReadExt as _, StateWriteExt as _}, Epoch, }; -use penumbra_dao::component::StateWriteExt as _; +use penumbra_community_pool::component::StateWriteExt as _; use cnidarium::{StateRead, StateWrite}; use penumbra_distributions::component::StateReadExt as _; @@ -508,9 +508,9 @@ pub(crate) trait StakingImpl: StateWriteExt { ) .await?; } - // If the recipient is the DAO, deposit the funds into the DAO - Recipient::Dao => { - self.dao_deposit(Value { + // If the recipient is the Community Pool, deposit the funds into the Community Pool + Recipient::CommunityPool => { + self.community_pool_deposit(Value { amount: commission_reward_amount.into(), asset_id: *STAKING_TOKEN_ASSET_ID, }) diff --git a/crates/core/component/stake/src/funding_stream.rs b/crates/core/component/stake/src/funding_stream.rs index ed8bbf1233..73a8dcad4f 100644 --- a/crates/core/component/stake/src/funding_stream.rs +++ b/crates/core/component/stake/src/funding_stream.rs @@ -18,7 +18,7 @@ pub enum FundingStream { /// validator's total staking reward that goes to this funding stream. rate_bps: u16, }, - ToDao { + ToCommunityPool { /// The portion (in terms of [basis points](https://en.wikipedia.org/wiki/Basis_point)) of the /// validator's total staking reward that goes to this funding stream. rate_bps: u16, @@ -29,21 +29,21 @@ pub enum FundingStream { #[derive(Debug, PartialEq, Eq, Clone, Copy)] pub enum Recipient { Address(Address), - Dao, + CommunityPool, } impl FundingStream { pub fn rate_bps(&self) -> u16 { match self { FundingStream::ToAddress { rate_bps, .. } => *rate_bps, - FundingStream::ToDao { rate_bps } => *rate_bps, + FundingStream::ToCommunityPool { rate_bps } => *rate_bps, } } pub fn recipient(&self) -> Recipient { match self { FundingStream::ToAddress { address, .. } => Recipient::Address(*address), - FundingStream::ToDao { .. } => Recipient::Dao, + FundingStream::ToCommunityPool { .. } => Recipient::CommunityPool, } } } @@ -83,11 +83,13 @@ impl From for pb::FundingStream { rate_bps: rate_bps.into(), }), ), - FundingStream::ToDao { rate_bps } => Some(pb::funding_stream::Recipient::ToDao( - pb::funding_stream::ToDao { - rate_bps: rate_bps.into(), - }, - )), + FundingStream::ToCommunityPool { rate_bps } => { + Some(pb::funding_stream::Recipient::ToCommunityPool( + pb::funding_stream::ToCommunityPool { + rate_bps: rate_bps.into(), + }, + )) + } }, } } @@ -115,15 +117,15 @@ impl TryFrom for FundingStream { } Ok(FundingStream::ToAddress { address, rate_bps }) } - pb::funding_stream::Recipient::ToDao(to_dao) => { - let rate_bps = to_dao + pb::funding_stream::Recipient::ToCommunityPool(to_community_pool) => { + let rate_bps = to_community_pool .rate_bps .try_into() .map_err(|e| anyhow::anyhow!("invalid funding stream rate: {}", e))?; if rate_bps > 10_000 { anyhow::bail!("funding stream rate exceeds 100% (10,000bps)"); } - Ok(FundingStream::ToDao { rate_bps }) + Ok(FundingStream::ToCommunityPool { rate_bps }) } } } diff --git a/crates/core/component/stake/src/validator.rs b/crates/core/component/stake/src/validator.rs index 970ad3e7ff..ab45ea3e8c 100644 --- a/crates/core/component/stake/src/validator.rs +++ b/crates/core/component/stake/src/validator.rs @@ -163,16 +163,15 @@ pub enum FundingStreamToml { address: Address, rate_bps: u16, }, - Dao { - recipient: DAO, + CommunityPool { + recipient: CommunityPool, rate_bps: u16, }, } -// Unit struct solely to add a `recipient = "DAO"` field to the TOML representation -#[allow(non_camel_case_types)] // no way to use `rename` with `serde_unit_struct` +// Unit struct solely to add a `recipient = "CommunityPool"` field to the TOML representation #[derive(Debug, PartialEq, Eq, Clone, Deserialize_unit_struct, Serialize_unit_struct)] -pub struct DAO; +pub struct CommunityPool; impl From for FundingStreamToml { fn from(f: FundingStream) -> Self { @@ -180,9 +179,9 @@ impl From for FundingStreamToml { FundingStream::ToAddress { address, rate_bps } => { FundingStreamToml::Address { address, rate_bps } } - FundingStream::ToDao { rate_bps } => FundingStreamToml::Dao { + FundingStream::ToCommunityPool { rate_bps } => FundingStreamToml::CommunityPool { rate_bps, - recipient: DAO, + recipient: CommunityPool, }, } } @@ -194,7 +193,9 @@ impl From for FundingStream { FundingStreamToml::Address { address, rate_bps } => { FundingStream::ToAddress { address, rate_bps } } - FundingStreamToml::Dao { rate_bps, .. } => FundingStream::ToDao { rate_bps }, + FundingStreamToml::CommunityPool { rate_bps, .. } => { + FundingStream::ToCommunityPool { rate_bps } + } } } } diff --git a/crates/core/transaction/Cargo.toml b/crates/core/transaction/Cargo.toml index 7b82173a02..09517a71dd 100644 --- a/crates/core/transaction/Cargo.toml +++ b/crates/core/transaction/Cargo.toml @@ -16,7 +16,7 @@ penumbra-shielded-pool = { path = "../component/shielded-pool/", default-feature penumbra-sct = { path = "../component/sct/", default-features = false } penumbra-stake = { path = "../component/stake", default-features = false } penumbra-ibc = { path = "../component/ibc/", default-features = false } -penumbra-dao = { path = "../component/dao/", default-features = false } +penumbra-community-pool = { path = "../component/community-pool/", default-features = false } penumbra-dex = { path = "../component/dex/", default-features = false } penumbra-fee = { path = "../component/fee/", default-features = false } penumbra-num = { path = "../num", default-features = false } diff --git a/crates/core/transaction/src/action.rs b/crates/core/transaction/src/action.rs index 486ec730d8..de2667d639 100644 --- a/crates/core/transaction/src/action.rs +++ b/crates/core/transaction/src/action.rs @@ -36,9 +36,9 @@ pub enum Action { Ics20Withdrawal(penumbra_shielded_pool::Ics20Withdrawal), - DaoSpend(penumbra_dao::DaoSpend), - DaoOutput(penumbra_dao::DaoOutput), - DaoDeposit(penumbra_dao::DaoDeposit), + CommunityPoolSpend(penumbra_community_pool::CommunityPoolSpend), + CommunityPoolOutput(penumbra_community_pool::CommunityPoolOutput), + CommunityPoolDeposit(penumbra_community_pool::CommunityPoolDeposit), } impl EffectingData for Action { @@ -63,9 +63,9 @@ impl EffectingData for Action { Action::PositionWithdraw(p) => p.effect_hash(), Action::PositionRewardClaim(p) => p.effect_hash(), Action::Ics20Withdrawal(w) => w.effect_hash(), - Action::DaoSpend(d) => d.effect_hash(), - Action::DaoOutput(d) => d.effect_hash(), - Action::DaoDeposit(d) => d.effect_hash(), + Action::CommunityPoolSpend(d) => d.effect_hash(), + Action::CommunityPoolOutput(d) => d.effect_hash(), + Action::CommunityPoolDeposit(d) => d.effect_hash(), } } } @@ -110,9 +110,9 @@ impl Action { Action::Undelegate(_) => tracing::info_span!("Undelegate", ?idx), Action::UndelegateClaim(_) => tracing::info_span!("UndelegateClaim", ?idx), Action::Ics20Withdrawal(_) => tracing::info_span!("Ics20Withdrawal", ?idx), - Action::DaoDeposit(_) => tracing::info_span!("DaoDeposit", ?idx), - Action::DaoSpend(_) => tracing::info_span!("DaoSpend", ?idx), - Action::DaoOutput(_) => tracing::info_span!("DaoOutput", ?idx), + Action::CommunityPoolDeposit(_) => tracing::info_span!("CommunityPoolDeposit", ?idx), + Action::CommunityPoolSpend(_) => tracing::info_span!("CommunityPoolSpend", ?idx), + Action::CommunityPoolOutput(_) => tracing::info_span!("CommunityPoolOutput", ?idx), } } } @@ -137,9 +137,9 @@ impl IsAction for Action { Action::PositionWithdraw(p) => p.balance_commitment(), Action::PositionRewardClaim(p) => p.balance_commitment(), Action::Ics20Withdrawal(withdrawal) => withdrawal.balance_commitment(), - Action::DaoDeposit(deposit) => deposit.balance_commitment(), - Action::DaoSpend(spend) => spend.balance_commitment(), - Action::DaoOutput(output) => output.balance_commitment(), + Action::CommunityPoolDeposit(deposit) => deposit.balance_commitment(), + Action::CommunityPoolSpend(spend) => spend.balance_commitment(), + Action::CommunityPoolOutput(output) => output.balance_commitment(), // These actions just post Protobuf data to the chain, and leave the // value balance unchanged. Action::IbcRelay(x) => x.balance_commitment(), @@ -166,9 +166,9 @@ impl IsAction for Action { Action::PositionWithdraw(x) => x.view_from_perspective(txp), Action::PositionRewardClaim(x) => x.view_from_perspective(txp), Action::Ics20Withdrawal(x) => x.view_from_perspective(txp), - Action::DaoSpend(x) => x.view_from_perspective(txp), - Action::DaoOutput(x) => x.view_from_perspective(txp), - Action::DaoDeposit(x) => x.view_from_perspective(txp), + Action::CommunityPoolSpend(x) => x.view_from_perspective(txp), + Action::CommunityPoolOutput(x) => x.view_from_perspective(txp), + Action::CommunityPoolDeposit(x) => x.view_from_perspective(txp), // TODO: figure out where to implement the actual decryption methods for these? where are their action definitions? Action::ValidatorDefinition(x) => ActionView::ValidatorDefinition(x.to_owned()), Action::IbcRelay(x) => ActionView::IbcRelay(x.to_owned()), @@ -240,14 +240,14 @@ impl From for pb::Action { Action::Ics20Withdrawal(withdrawal) => pb::Action { action: Some(pb::action::Action::Ics20Withdrawal(withdrawal.into())), }, - Action::DaoSpend(inner) => pb::Action { - action: Some(pb::action::Action::DaoSpend(inner.into())), + Action::CommunityPoolSpend(inner) => pb::Action { + action: Some(pb::action::Action::CommunityPoolSpend(inner.into())), }, - Action::DaoOutput(inner) => pb::Action { - action: Some(pb::action::Action::DaoOutput(inner.into())), + Action::CommunityPoolOutput(inner) => pb::Action { + action: Some(pb::action::Action::CommunityPoolOutput(inner.into())), }, - Action::DaoDeposit(inner) => pb::Action { - action: Some(pb::action::Action::DaoDeposit(inner.into())), + Action::CommunityPoolDeposit(inner) => pb::Action { + action: Some(pb::action::Action::CommunityPoolDeposit(inner.into())), }, } } @@ -305,9 +305,15 @@ impl TryFrom for Action { pb::action::Action::Ics20Withdrawal(inner) => { Ok(Action::Ics20Withdrawal(inner.try_into()?)) } - pb::action::Action::DaoSpend(inner) => Ok(Action::DaoSpend(inner.try_into()?)), - pb::action::Action::DaoOutput(inner) => Ok(Action::DaoOutput(inner.try_into()?)), - pb::action::Action::DaoDeposit(inner) => Ok(Action::DaoDeposit(inner.try_into()?)), + pb::action::Action::CommunityPoolSpend(inner) => { + Ok(Action::CommunityPoolSpend(inner.try_into()?)) + } + pb::action::Action::CommunityPoolOutput(inner) => { + Ok(Action::CommunityPoolOutput(inner.try_into()?)) + } + pb::action::Action::CommunityPoolDeposit(inner) => { + Ok(Action::CommunityPoolDeposit(inner.try_into()?)) + } } } } diff --git a/crates/core/transaction/src/gas.rs b/crates/core/transaction/src/gas.rs index 9876069885..fb8e23aa15 100644 --- a/crates/core/transaction/src/gas.rs +++ b/crates/core/transaction/src/gas.rs @@ -1,5 +1,5 @@ use penumbra_chain::params::ChainParameters; -use penumbra_dao::{DaoDeposit, DaoOutput, DaoSpend}; +use penumbra_community_pool::{CommunityPoolDeposit, CommunityPoolOutput, CommunityPoolSpend}; use penumbra_dex::{ PositionClose, PositionOpen, PositionRewardClaim, PositionWithdraw, Swap, SwapClaim, }; @@ -260,9 +260,9 @@ impl GasCost for ActionPlan { ActionPlan::PositionClose(pc) => pc.gas_cost(), ActionPlan::PositionWithdraw(_) => position_withdraw_gas_cost(), ActionPlan::PositionRewardClaim(_) => position_reward_claim_gas_cost(), - ActionPlan::DaoSpend(ds) => ds.gas_cost(), - ActionPlan::DaoOutput(d) => d.gas_cost(), - ActionPlan::DaoDeposit(dd) => dd.gas_cost(), + ActionPlan::CommunityPoolSpend(ds) => ds.gas_cost(), + ActionPlan::CommunityPoolOutput(d) => d.gas_cost(), + ActionPlan::CommunityPoolDeposit(dd) => dd.gas_cost(), ActionPlan::Withdrawal(w) => w.gas_cost(), } } @@ -288,9 +288,9 @@ impl GasCost for Action { Action::PositionWithdraw(p) => p.gas_cost(), Action::PositionRewardClaim(p) => p.gas_cost(), Action::Ics20Withdrawal(withdrawal) => withdrawal.gas_cost(), - Action::DaoDeposit(deposit) => deposit.gas_cost(), - Action::DaoSpend(spend) => spend.gas_cost(), - Action::DaoOutput(output) => output.gas_cost(), + Action::CommunityPoolDeposit(deposit) => deposit.gas_cost(), + Action::CommunityPoolSpend(spend) => spend.gas_cost(), + Action::CommunityPoolOutput(output) => output.gas_cost(), Action::IbcRelay(x) => x.gas_cost(), Action::ValidatorDefinition(x) => x.gas_cost(), } @@ -487,7 +487,7 @@ impl GasCost for Ics20Withdrawal { } } -impl GasCost for DaoDeposit { +impl GasCost for CommunityPoolDeposit { fn gas_cost(&self) -> Gas { Gas { // Each [`Action`] has a `0` `block_space` cost, since the [`Transaction`] itself @@ -495,7 +495,7 @@ impl GasCost for DaoDeposit { block_space: 0, // The compact block space cost is based on the byte size of the data the [`Action`] adds // to the compact block. - // For a DaoDeposit the compact block is not modified. + // For a CommunityPoolDeposit the compact block is not modified. compact_block_space: 0u64, // Does not include a zk-SNARK proof, so there's no verification cost. verification: 0, @@ -505,7 +505,7 @@ impl GasCost for DaoDeposit { } } -impl GasCost for DaoSpend { +impl GasCost for CommunityPoolSpend { fn gas_cost(&self) -> Gas { Gas { // Each [`Action`] has a `0` `block_space` cost, since the [`Transaction`] itself @@ -513,7 +513,7 @@ impl GasCost for DaoSpend { block_space: 0, // The compact block space cost is based on the byte size of the data the [`Action`] adds // to the compact block. - // For a DaoSpend the compact block is not modified. + // For a CommunityPoolSpend the compact block is not modified. compact_block_space: 0u64, // Does not include a zk-SNARK proof, so there's no verification cost. verification: 0, @@ -523,9 +523,9 @@ impl GasCost for DaoSpend { } } -impl GasCost for DaoOutput { +impl GasCost for CommunityPoolOutput { fn gas_cost(&self) -> Gas { - // We hardcode the gas costs of a `DaoOutput` to 0, since it's a protocol action. + // We hardcode the gas costs of a `CommunityPoolOutput` to 0, since it's a protocol action. Gas { block_space: 0, compact_block_space: 0, diff --git a/crates/core/transaction/src/is_action.rs b/crates/core/transaction/src/is_action.rs index 2f388c3f8b..6e0ee23498 100644 --- a/crates/core/transaction/src/is_action.rs +++ b/crates/core/transaction/src/is_action.rs @@ -1,7 +1,7 @@ use ark_ff::Zero; use decaf377::Fr; use penumbra_asset::{balance, Value}; -use penumbra_dao::{DaoDeposit, DaoOutput, DaoSpend}; +use penumbra_community_pool::{CommunityPoolDeposit, CommunityPoolOutput, CommunityPoolSpend}; use penumbra_dex::{ lp::{ action::{PositionClose, PositionOpen, PositionRewardClaim, PositionWithdraw}, @@ -215,34 +215,34 @@ impl IsAction for Ics20Withdrawal { } } -impl IsAction for DaoDeposit { +impl IsAction for CommunityPoolDeposit { fn balance_commitment(&self) -> balance::Commitment { self.balance().commit(Fr::zero()) } fn view_from_perspective(&self, _txp: &TransactionPerspective) -> ActionView { - ActionView::DaoDeposit(self.clone()) + ActionView::CommunityPoolDeposit(self.clone()) } } -impl IsAction for DaoOutput { +impl IsAction for CommunityPoolOutput { fn balance_commitment(&self) -> balance::Commitment { - // Outputs from the DAO require value + // Outputs from the Community Pool require value self.balance().commit(Fr::zero()) } fn view_from_perspective(&self, _txp: &TransactionPerspective) -> ActionView { - ActionView::DaoOutput(self.clone()) + ActionView::CommunityPoolOutput(self.clone()) } } -impl IsAction for DaoSpend { +impl IsAction for CommunityPoolSpend { fn balance_commitment(&self) -> balance::Commitment { self.balance().commit(Fr::zero()) } fn view_from_perspective(&self, _txp: &TransactionPerspective) -> ActionView { - ActionView::DaoSpend(self.clone()) + ActionView::CommunityPoolSpend(self.clone()) } } diff --git a/crates/core/transaction/src/plan.rs b/crates/core/transaction/src/plan.rs index 62a4f3ee25..8c04c321f0 100644 --- a/crates/core/transaction/src/plan.rs +++ b/crates/core/transaction/src/plan.rs @@ -2,7 +2,7 @@ //! creation. use anyhow::Result; -use penumbra_dao::{DaoDeposit, DaoOutput, DaoSpend}; +use penumbra_community_pool::{CommunityPoolDeposit, CommunityPoolOutput, CommunityPoolSpend}; use penumbra_dex::{ lp::action::{PositionClose, PositionOpen}, lp::plan::PositionWithdrawPlan, @@ -253,9 +253,9 @@ impl TransactionPlan { }) } - pub fn dao_spends(&self) -> impl Iterator { + pub fn community_pool_spends(&self) -> impl Iterator { self.actions.iter().filter_map(|action| { - if let ActionPlan::DaoSpend(v) = action { + if let ActionPlan::CommunityPoolSpend(v) = action { Some(v) } else { None @@ -263,9 +263,9 @@ impl TransactionPlan { }) } - pub fn dao_deposits(&self) -> impl Iterator { + pub fn community_pool_deposits(&self) -> impl Iterator { self.actions.iter().filter_map(|action| { - if let ActionPlan::DaoDeposit(v) = action { + if let ActionPlan::CommunityPoolDeposit(v) = action { Some(v) } else { None @@ -273,9 +273,9 @@ impl TransactionPlan { }) } - pub fn dao_outputs(&self) -> impl Iterator { + pub fn community_pool_outputs(&self) -> impl Iterator { self.actions.iter().filter_map(|action| { - if let ActionPlan::DaoOutput(v) = action { + if let ActionPlan::CommunityPoolOutput(v) = action { Some(v) } else { None diff --git a/crates/core/transaction/src/plan/action.rs b/crates/core/transaction/src/plan/action.rs index 63655303e1..2558c462e6 100644 --- a/crates/core/transaction/src/plan/action.rs +++ b/crates/core/transaction/src/plan/action.rs @@ -4,7 +4,7 @@ use anyhow::{anyhow, Context, Result}; use ark_ff::Zero; use decaf377::Fr; use penumbra_asset::Balance; -use penumbra_dao::{DaoDeposit, DaoOutput, DaoSpend}; +use penumbra_community_pool::{CommunityPoolDeposit, CommunityPoolOutput, CommunityPoolSpend}; use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_dex::{ @@ -73,9 +73,9 @@ pub enum ActionPlan { // must be used. PositionRewardClaim(PositionRewardClaimPlan), - DaoSpend(DaoSpend), - DaoOutput(DaoOutput), - DaoDeposit(DaoDeposit), + CommunityPoolSpend(CommunityPoolSpend), + CommunityPoolOutput(CommunityPoolOutput), + CommunityPoolDeposit(CommunityPoolDeposit), Withdrawal(Ics20Withdrawal), } @@ -155,9 +155,9 @@ impl ActionPlan { PositionRewardClaim(_plan) => unimplemented!( "this api is wrong and needs to be fixed, but we don't do reward claims anyways" ), - DaoSpend(plan) => Action::DaoSpend(plan.clone()), - DaoOutput(plan) => Action::DaoOutput(plan.clone()), - DaoDeposit(plan) => Action::DaoDeposit(plan.clone()), + CommunityPoolSpend(plan) => Action::CommunityPoolSpend(plan.clone()), + CommunityPoolOutput(plan) => Action::CommunityPoolOutput(plan.clone()), + CommunityPoolDeposit(plan) => Action::CommunityPoolDeposit(plan.clone()), // Fixme: action name Withdrawal(plan) => Action::Ics20Withdrawal(plan.clone()), }) @@ -178,9 +178,9 @@ impl ActionPlan { ProposalWithdraw(proposal_withdraw) => proposal_withdraw.balance(), ProposalDepositClaim(proposal_deposit_claim) => proposal_deposit_claim.balance(), DelegatorVote(delegator_vote) => delegator_vote.balance(), - DaoSpend(dao_spend) => dao_spend.balance(), - DaoOutput(dao_output) => dao_output.balance(), - DaoDeposit(dao_deposit) => dao_deposit.balance(), + CommunityPoolSpend(community_pool_spend) => community_pool_spend.balance(), + CommunityPoolOutput(community_pool_output) => community_pool_output.balance(), + CommunityPoolDeposit(community_pool_deposit) => community_pool_deposit.balance(), PositionOpen(position_open) => position_open.balance(), PositionClose(position_close) => position_close.balance(), PositionWithdraw(position_withdraw) => position_withdraw.balance(), @@ -213,9 +213,9 @@ impl ActionPlan { PositionClose(_) => Fr::zero(), PositionWithdraw(_) => Fr::zero(), PositionRewardClaim(_) => Fr::zero(), - DaoSpend(_) => Fr::zero(), - DaoOutput(_) => Fr::zero(), - DaoDeposit(_) => Fr::zero(), + CommunityPoolSpend(_) => Fr::zero(), + CommunityPoolOutput(_) => Fr::zero(), + CommunityPoolDeposit(_) => Fr::zero(), Withdrawal(_) => Fr::zero(), } } @@ -243,9 +243,9 @@ impl ActionPlan { PositionClose(plan) => plan.effect_hash(), PositionWithdraw(plan) => plan.position_withdraw().effect_hash(), PositionRewardClaim(_plan) => todo!("position reward claim plan is not implemented"), - DaoSpend(plan) => plan.effect_hash(), - DaoOutput(plan) => plan.effect_hash(), - DaoDeposit(plan) => plan.effect_hash(), + CommunityPoolSpend(plan) => plan.effect_hash(), + CommunityPoolOutput(plan) => plan.effect_hash(), + CommunityPoolDeposit(plan) => plan.effect_hash(), Withdrawal(plan) => plan.effect_hash(), } } @@ -416,14 +416,16 @@ impl From for pb_t::ActionPlan { ActionPlan::PositionRewardClaim(inner) => pb_t::ActionPlan { action: Some(pb_t::action_plan::Action::PositionRewardClaim(inner.into())), }, - ActionPlan::DaoDeposit(inner) => pb_t::ActionPlan { - action: Some(pb_t::action_plan::Action::DaoDeposit(inner.into())), + ActionPlan::CommunityPoolDeposit(inner) => pb_t::ActionPlan { + action: Some(pb_t::action_plan::Action::CommunityPoolDeposit( + inner.into(), + )), }, - ActionPlan::DaoSpend(inner) => pb_t::ActionPlan { - action: Some(pb_t::action_plan::Action::DaoSpend(inner.into())), + ActionPlan::CommunityPoolSpend(inner) => pb_t::ActionPlan { + action: Some(pb_t::action_plan::Action::CommunityPoolSpend(inner.into())), }, - ActionPlan::DaoOutput(inner) => pb_t::ActionPlan { - action: Some(pb_t::action_plan::Action::DaoOutput(inner.into())), + ActionPlan::CommunityPoolOutput(inner) => pb_t::ActionPlan { + action: Some(pb_t::action_plan::Action::CommunityPoolOutput(inner.into())), }, ActionPlan::Withdrawal(inner) => pb_t::ActionPlan { action: Some(pb_t::action_plan::Action::Withdrawal(inner.into())), @@ -492,14 +494,14 @@ impl TryFrom for ActionPlan { pb_t::action_plan::Action::PositionRewardClaim(inner) => { Ok(ActionPlan::PositionRewardClaim(inner.try_into()?)) } - pb_t::action_plan::Action::DaoSpend(inner) => { - Ok(ActionPlan::DaoSpend(inner.try_into()?)) + pb_t::action_plan::Action::CommunityPoolSpend(inner) => { + Ok(ActionPlan::CommunityPoolSpend(inner.try_into()?)) } - pb_t::action_plan::Action::DaoDeposit(inner) => { - Ok(ActionPlan::DaoDeposit(inner.try_into()?)) + pb_t::action_plan::Action::CommunityPoolDeposit(inner) => { + Ok(ActionPlan::CommunityPoolDeposit(inner.try_into()?)) } - pb_t::action_plan::Action::DaoOutput(inner) => { - Ok(ActionPlan::DaoOutput(inner.try_into()?)) + pb_t::action_plan::Action::CommunityPoolOutput(inner) => { + Ok(ActionPlan::CommunityPoolOutput(inner.try_into()?)) } pb_t::action_plan::Action::Withdrawal(inner) => { Ok(ActionPlan::Withdrawal(inner.try_into()?)) diff --git a/crates/core/transaction/src/transaction.rs b/crates/core/transaction/src/transaction.rs index b17f98bf5b..f7f3cf67a0 100644 --- a/crates/core/transaction/src/transaction.rs +++ b/crates/core/transaction/src/transaction.rs @@ -8,7 +8,7 @@ use ark_ff::Zero; use decaf377::Fr; use decaf377_rdsa::{Binding, Signature, VerificationKey, VerificationKeyBytes}; use penumbra_chain::TransactionContext; -use penumbra_dao::{DaoDeposit, DaoOutput, DaoSpend}; +use penumbra_community_pool::{CommunityPoolDeposit, CommunityPoolOutput, CommunityPoolSpend}; use penumbra_dex::{ lp::action::{PositionClose, PositionOpen}, swap::Swap, @@ -237,9 +237,9 @@ impl Transaction { | Action::PositionWithdraw(_) | Action::PositionRewardClaim(_) | Action::Ics20Withdrawal(_) - | Action::DaoSpend(_) - | Action::DaoOutput(_) - | Action::DaoDeposit(_) => {} + | Action::CommunityPoolSpend(_) + | Action::CommunityPoolOutput(_) + | Action::CommunityPoolDeposit(_) => {} } } @@ -463,9 +463,9 @@ impl Transaction { .filter_map(|x| x) } - pub fn dao_deposits(&self) -> impl Iterator { + pub fn community_pool_deposits(&self) -> impl Iterator { self.actions().filter_map(|action| { - if let Action::DaoDeposit(d) = action { + if let Action::CommunityPoolDeposit(d) = action { Some(d) } else { None @@ -473,9 +473,9 @@ impl Transaction { }) } - pub fn dao_spends(&self) -> impl Iterator { + pub fn community_pool_spends(&self) -> impl Iterator { self.actions().filter_map(|action| { - if let Action::DaoSpend(s) = action { + if let Action::CommunityPoolSpend(s) = action { Some(s) } else { None @@ -493,9 +493,9 @@ impl Transaction { }) } - pub fn dao_outputs(&self) -> impl Iterator { + pub fn community_pool_outputs(&self) -> impl Iterator { self.actions().filter_map(|action| { - if let Action::DaoOutput(o) = action { + if let Action::CommunityPoolOutput(o) = action { Some(o) } else { None diff --git a/crates/core/transaction/src/view/action_view.rs b/crates/core/transaction/src/view/action_view.rs index e8e3dc6419..fde65cb2bc 100644 --- a/crates/core/transaction/src/view/action_view.rs +++ b/crates/core/transaction/src/view/action_view.rs @@ -1,4 +1,4 @@ -use penumbra_dao::{DaoDeposit, DaoOutput, DaoSpend}; +use penumbra_community_pool::{CommunityPoolDeposit, CommunityPoolOutput, CommunityPoolSpend}; use penumbra_dex::{ lp::action::{PositionClose, PositionOpen, PositionRewardClaim, PositionWithdraw}, swap::SwapView, @@ -42,9 +42,9 @@ pub enum ActionView { Undelegate(Undelegate), UndelegateClaim(UndelegateClaim), Ics20Withdrawal(Ics20Withdrawal), - DaoDeposit(DaoDeposit), - DaoSpend(DaoSpend), - DaoOutput(DaoOutput), + CommunityPoolDeposit(CommunityPoolDeposit), + CommunityPoolSpend(CommunityPoolSpend), + CommunityPoolOutput(CommunityPoolOutput), } impl DomainType for ActionView { @@ -80,9 +80,9 @@ impl TryFrom for ActionView { AV::PositionWithdraw(x) => ActionView::PositionWithdraw(x.try_into()?), AV::PositionRewardClaim(x) => ActionView::PositionRewardClaim(x.try_into()?), AV::Ics20Withdrawal(x) => ActionView::Ics20Withdrawal(x.try_into()?), - AV::DaoDeposit(x) => ActionView::DaoDeposit(x.try_into()?), - AV::DaoSpend(x) => ActionView::DaoSpend(x.try_into()?), - AV::DaoOutput(x) => ActionView::DaoOutput(x.try_into()?), + AV::CommunityPoolDeposit(x) => ActionView::CommunityPoolDeposit(x.try_into()?), + AV::CommunityPoolSpend(x) => ActionView::CommunityPoolSpend(x.try_into()?), + AV::CommunityPoolOutput(x) => ActionView::CommunityPoolOutput(x.try_into()?), }, ) } @@ -112,9 +112,9 @@ impl From for pbt::ActionView { ActionView::PositionWithdraw(x) => AV::PositionWithdraw(x.into()), ActionView::PositionRewardClaim(x) => AV::PositionRewardClaim(x.into()), ActionView::Ics20Withdrawal(x) => AV::Ics20Withdrawal(x.into()), - ActionView::DaoDeposit(x) => AV::DaoDeposit(x.into()), - ActionView::DaoSpend(x) => AV::DaoSpend(x.into()), - ActionView::DaoOutput(x) => AV::DaoOutput(x.into()), + ActionView::CommunityPoolDeposit(x) => AV::CommunityPoolDeposit(x.into()), + ActionView::CommunityPoolSpend(x) => AV::CommunityPoolSpend(x.into()), + ActionView::CommunityPoolOutput(x) => AV::CommunityPoolOutput(x.into()), }), } } @@ -142,9 +142,9 @@ impl From for Action { ActionView::PositionWithdraw(x) => Action::PositionWithdraw(x), ActionView::PositionRewardClaim(x) => Action::PositionRewardClaim(x), ActionView::Ics20Withdrawal(x) => Action::Ics20Withdrawal(x), - ActionView::DaoDeposit(x) => Action::DaoDeposit(x), - ActionView::DaoSpend(x) => Action::DaoSpend(x), - ActionView::DaoOutput(x) => Action::DaoOutput(x), + ActionView::CommunityPoolDeposit(x) => Action::CommunityPoolDeposit(x), + ActionView::CommunityPoolSpend(x) => Action::CommunityPoolSpend(x), + ActionView::CommunityPoolOutput(x) => Action::CommunityPoolOutput(x), } } } diff --git a/crates/crypto/proof-setup/Cargo.toml b/crates/crypto/proof-setup/Cargo.toml index fd41765527..dbbc3483ca 100644 --- a/crates/crypto/proof-setup/Cargo.toml +++ b/crates/crypto/proof-setup/Cargo.toml @@ -15,12 +15,16 @@ blake2b_simd = "0.5" rand_core = { version = "0.6", features = ["getrandom"] } decaf377 = { version = "0.5", default_features = false } penumbra-dex = { path = "../../core/component/dex/" } -penumbra-dao = { path = "../../core/component/dao/", features = ["component"] } +penumbra-community-pool = { path = "../../core/component/community-pool/", features = [ + "component", +] } penumbra-governance = { path = "../../core/component/governance/" } penumbra-proof-params = { path = "../proof-params" } penumbra-proto = { path = "../../proto" } penumbra-shielded-pool = { path = "../../core/component/shielded-pool/" } -penumbra-stake = { path = "../../core/component/stake/", features = ["component"] } +penumbra-stake = { path = "../../core/component/stake/", features = [ + "component", +] } rayon = { version = "1.8.0", optional = true } [dev-dependencies] @@ -37,4 +41,11 @@ harness = false [features] default = [] -parallel = ["ark-ec/parallel", "ark-ff/parallel", "ark-groth16/parallel", "decaf377/parallel", "rayon", "penumbra-shielded-pool/parallel"] +parallel = [ + "ark-ec/parallel", + "ark-ff/parallel", + "ark-groth16/parallel", + "decaf377/parallel", + "rayon", + "penumbra-shielded-pool/parallel", +] diff --git a/crates/proto/src/gen/penumbra.core.app.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.app.v1alpha1.rs index 03b31b0207..a07aec71e3 100644 --- a/crates/proto/src/gen/penumbra.core.app.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.app.v1alpha1.rs @@ -22,9 +22,7 @@ impl ::prost::Name for TransactionsByHeightRequest { pub struct TransactionsByHeightResponse { /// The transactions. #[prost(message, repeated, tag = "1")] - pub transactions: ::prost::alloc::vec::Vec< - super::super::transaction::v1alpha1::Transaction, - >, + pub transactions: ::prost::alloc::vec::Vec, /// The block height. #[prost(uint64, tag = "2")] pub block_height: u64, @@ -41,34 +39,27 @@ impl ::prost::Name for TransactionsByHeightResponse { pub struct AppParameters { /// Chain module parameters. #[prost(message, optional, tag = "1")] - pub chain_params: ::core::option::Option< - super::super::component::chain::v1alpha1::ChainParameters, - >, - /// DAO module parameters. + pub chain_params: + ::core::option::Option, + /// Community Pool module parameters. #[prost(message, optional, tag = "2")] - pub dao_params: ::core::option::Option< - super::super::component::dao::v1alpha1::DaoParameters, + pub community_pool_params: ::core::option::Option< + super::super::component::community_pool::v1alpha1::CommunityPoolParameters, >, /// Governance module parameters. #[prost(message, optional, tag = "3")] - pub governance_params: ::core::option::Option< - super::super::component::governance::v1alpha1::GovernanceParameters, - >, + pub governance_params: + ::core::option::Option, /// IBC module parameters. #[prost(message, optional, tag = "4")] - pub ibc_params: ::core::option::Option< - super::super::component::ibc::v1alpha1::IbcParameters, - >, + pub ibc_params: ::core::option::Option, /// Stake module parameters. #[prost(message, optional, tag = "5")] - pub stake_params: ::core::option::Option< - super::super::component::stake::v1alpha1::StakeParameters, - >, + pub stake_params: + ::core::option::Option, /// Fee module parameters. #[prost(message, optional, tag = "6")] - pub fee_params: ::core::option::Option< - super::super::component::fee::v1alpha1::FeeParameters, - >, + pub fee_params: ::core::option::Option, /// Distributions module parameters. #[prost(message, optional, tag = "7")] pub distributions_params: ::core::option::Option< @@ -139,44 +130,34 @@ impl ::prost::Name for GenesisAppState { pub struct GenesisContent { /// Stake module genesis state. #[prost(message, optional, tag = "1")] - pub stake_content: ::core::option::Option< - super::super::component::stake::v1alpha1::GenesisContent, - >, + pub stake_content: + ::core::option::Option, /// Shielded pool module genesis state. #[prost(message, optional, tag = "2")] - pub shielded_pool_content: ::core::option::Option< - super::super::component::shielded_pool::v1alpha1::GenesisContent, - >, + pub shielded_pool_content: + ::core::option::Option, /// Governance module genesis state. #[prost(message, optional, tag = "3")] - pub governance_content: ::core::option::Option< - super::super::component::governance::v1alpha1::GenesisContent, - >, + pub governance_content: + ::core::option::Option, /// IBC module genesis state. #[prost(message, optional, tag = "4")] - pub ibc_content: ::core::option::Option< - super::super::component::ibc::v1alpha1::GenesisContent, - >, + pub ibc_content: ::core::option::Option, /// Chain module genesis state. #[prost(message, optional, tag = "5")] - pub chain_content: ::core::option::Option< - super::super::component::chain::v1alpha1::GenesisContent, - >, - /// DAO module genesis state. + pub chain_content: + ::core::option::Option, + /// Community Pool module genesis state. #[prost(message, optional, tag = "6")] - pub dao_content: ::core::option::Option< - super::super::component::dao::v1alpha1::GenesisContent, - >, + pub community_pool_content: + ::core::option::Option, /// Fee module genesis state. #[prost(message, optional, tag = "7")] - pub fee_content: ::core::option::Option< - super::super::component::fee::v1alpha1::GenesisContent, - >, + pub fee_content: ::core::option::Option, /// Distributions module genesis state. #[prost(message, optional, tag = "8")] - pub distributions_content: ::core::option::Option< - super::super::component::distributions::v1alpha1::GenesisContent, - >, + pub distributions_content: + ::core::option::Option, } impl ::prost::Name for GenesisContent { const NAME: &'static str = "GenesisContent"; @@ -189,8 +170,8 @@ impl ::prost::Name for GenesisContent { #[cfg(feature = "rpc")] pub mod query_service_client { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] - use tonic::codegen::*; use tonic::codegen::http::Uri; + use tonic::codegen::*; /// Query operations for the overall Penumbra application. #[derive(Debug, Clone)] pub struct QueryServiceClient { @@ -235,9 +216,8 @@ pub mod query_service_client { >::ResponseBody, >, >, - , - >>::Error: Into + Send + Sync, + >>::Error: + Into + Send + Sync, { QueryServiceClient::new(InterceptedService::new(inner, interceptor)) } @@ -276,62 +256,46 @@ pub mod query_service_client { pub async fn app_parameters( &mut self, request: impl tonic::IntoRequest, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + ) -> std::result::Result, tonic::Status> + { + self.inner.ready().await.map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.app.v1alpha1.QueryService/AppParameters", ); let mut req = request.into_request(); - req.extensions_mut() - .insert( - GrpcMethod::new( - "penumbra.core.app.v1alpha1.QueryService", - "AppParameters", - ), - ); + req.extensions_mut().insert(GrpcMethod::new( + "penumbra.core.app.v1alpha1.QueryService", + "AppParameters", + )); self.inner.unary(req, path, codec).await } /// Returns the CometBFT transactions that occurred during a given block. pub async fn transactions_by_height( &mut self, request: impl tonic::IntoRequest, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + ) -> std::result::Result, tonic::Status> + { + self.inner.ready().await.map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.app.v1alpha1.QueryService/TransactionsByHeight", ); let mut req = request.into_request(); - req.extensions_mut() - .insert( - GrpcMethod::new( - "penumbra.core.app.v1alpha1.QueryService", - "TransactionsByHeight", - ), - ); + req.extensions_mut().insert(GrpcMethod::new( + "penumbra.core.app.v1alpha1.QueryService", + "TransactionsByHeight", + )); self.inner.unary(req, path, codec).await } } @@ -348,18 +312,12 @@ pub mod query_service_server { async fn app_parameters( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; /// Returns the CometBFT transactions that occurred during a given block. async fn transactions_by_height( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; } /// Query operations for the overall Penumbra application. #[derive(Debug)] @@ -385,10 +343,7 @@ pub mod query_service_server { max_encoding_message_size: None, } } - pub fn with_interceptor( - inner: T, - interceptor: F, - ) -> InterceptedService + pub fn with_interceptor(inner: T, interceptor: F) -> InterceptedService where F: tonic::service::Interceptor, { @@ -444,15 +399,11 @@ pub mod query_service_server { "/penumbra.core.app.v1alpha1.QueryService/AppParameters" => { #[allow(non_camel_case_types)] struct AppParametersSvc(pub Arc); - impl< - T: QueryService, - > tonic::server::UnaryService - for AppParametersSvc { + impl tonic::server::UnaryService + for AppParametersSvc + { type Response = super::AppParametersResponse; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, @@ -490,23 +441,19 @@ pub mod query_service_server { "/penumbra.core.app.v1alpha1.QueryService/TransactionsByHeight" => { #[allow(non_camel_case_types)] struct TransactionsByHeightSvc(pub Arc); - impl< - T: QueryService, - > tonic::server::UnaryService - for TransactionsByHeightSvc { + impl + tonic::server::UnaryService + for TransactionsByHeightSvc + { type Response = super::TransactionsByHeightResponse; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::transactions_by_height(&inner, request) - .await + ::transactions_by_height(&inner, request).await }; Box::pin(fut) } @@ -534,18 +481,14 @@ pub mod query_service_server { }; Box::pin(fut) } - _ => { - Box::pin(async move { - Ok( - http::Response::builder() - .status(200) - .header("grpc-status", "12") - .header("content-type", "application/grpc") - .body(empty_body()) - .unwrap(), - ) - }) - } + _ => Box::pin(async move { + Ok(http::Response::builder() + .status(200) + .header("grpc-status", "12") + .header("content-type", "application/grpc") + .body(empty_body()) + .unwrap()) + }), } } } diff --git a/crates/proto/src/gen/penumbra.core.app.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.app.v1alpha1.serde.rs index e93121a00b..2a398eba80 100644 --- a/crates/proto/src/gen/penumbra.core.app.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.app.v1alpha1.serde.rs @@ -9,7 +9,7 @@ impl serde::Serialize for AppParameters { if self.chain_params.is_some() { len += 1; } - if self.dao_params.is_some() { + if self.community_pool_params.is_some() { len += 1; } if self.governance_params.is_some() { @@ -31,8 +31,8 @@ impl serde::Serialize for AppParameters { if let Some(v) = self.chain_params.as_ref() { struct_ser.serialize_field("chainParams", v)?; } - if let Some(v) = self.dao_params.as_ref() { - struct_ser.serialize_field("daoParams", v)?; + if let Some(v) = self.community_pool_params.as_ref() { + struct_ser.serialize_field("communityPoolParams", v)?; } if let Some(v) = self.governance_params.as_ref() { struct_ser.serialize_field("governanceParams", v)?; @@ -61,8 +61,8 @@ impl<'de> serde::Deserialize<'de> for AppParameters { const FIELDS: &[&str] = &[ "chain_params", "chainParams", - "dao_params", - "daoParams", + "community_pool_params", + "communityPoolParams", "governance_params", "governanceParams", "ibc_params", @@ -78,7 +78,7 @@ impl<'de> serde::Deserialize<'de> for AppParameters { #[allow(clippy::enum_variant_names)] enum GeneratedField { ChainParams, - DaoParams, + CommunityPoolParams, GovernanceParams, IbcParams, StakeParams, @@ -106,7 +106,7 @@ impl<'de> serde::Deserialize<'de> for AppParameters { { match value { "chainParams" | "chain_params" => Ok(GeneratedField::ChainParams), - "daoParams" | "dao_params" => Ok(GeneratedField::DaoParams), + "communityPoolParams" | "community_pool_params" => Ok(GeneratedField::CommunityPoolParams), "governanceParams" | "governance_params" => Ok(GeneratedField::GovernanceParams), "ibcParams" | "ibc_params" => Ok(GeneratedField::IbcParams), "stakeParams" | "stake_params" => Ok(GeneratedField::StakeParams), @@ -132,7 +132,7 @@ impl<'de> serde::Deserialize<'de> for AppParameters { V: serde::de::MapAccess<'de>, { let mut chain_params__ = None; - let mut dao_params__ = None; + let mut community_pool_params__ = None; let mut governance_params__ = None; let mut ibc_params__ = None; let mut stake_params__ = None; @@ -146,11 +146,11 @@ impl<'de> serde::Deserialize<'de> for AppParameters { } chain_params__ = map_.next_value()?; } - GeneratedField::DaoParams => { - if dao_params__.is_some() { - return Err(serde::de::Error::duplicate_field("daoParams")); + GeneratedField::CommunityPoolParams => { + if community_pool_params__.is_some() { + return Err(serde::de::Error::duplicate_field("communityPoolParams")); } - dao_params__ = map_.next_value()?; + community_pool_params__ = map_.next_value()?; } GeneratedField::GovernanceParams => { if governance_params__.is_some() { @@ -186,7 +186,7 @@ impl<'de> serde::Deserialize<'de> for AppParameters { } Ok(AppParameters { chain_params: chain_params__, - dao_params: dao_params__, + community_pool_params: community_pool_params__, governance_params: governance_params__, ibc_params: ibc_params__, stake_params: stake_params__, @@ -516,7 +516,7 @@ impl serde::Serialize for GenesisContent { if self.chain_content.is_some() { len += 1; } - if self.dao_content.is_some() { + if self.community_pool_content.is_some() { len += 1; } if self.fee_content.is_some() { @@ -541,8 +541,8 @@ impl serde::Serialize for GenesisContent { if let Some(v) = self.chain_content.as_ref() { struct_ser.serialize_field("chainContent", v)?; } - if let Some(v) = self.dao_content.as_ref() { - struct_ser.serialize_field("daoContent", v)?; + if let Some(v) = self.community_pool_content.as_ref() { + struct_ser.serialize_field("communityPoolContent", v)?; } if let Some(v) = self.fee_content.as_ref() { struct_ser.serialize_field("feeContent", v)?; @@ -570,8 +570,8 @@ impl<'de> serde::Deserialize<'de> for GenesisContent { "ibcContent", "chain_content", "chainContent", - "dao_content", - "daoContent", + "community_pool_content", + "communityPoolContent", "fee_content", "feeContent", "distributions_content", @@ -585,7 +585,7 @@ impl<'de> serde::Deserialize<'de> for GenesisContent { GovernanceContent, IbcContent, ChainContent, - DaoContent, + CommunityPoolContent, FeeContent, DistributionsContent, } @@ -614,7 +614,7 @@ impl<'de> serde::Deserialize<'de> for GenesisContent { "governanceContent" | "governance_content" => Ok(GeneratedField::GovernanceContent), "ibcContent" | "ibc_content" => Ok(GeneratedField::IbcContent), "chainContent" | "chain_content" => Ok(GeneratedField::ChainContent), - "daoContent" | "dao_content" => Ok(GeneratedField::DaoContent), + "communityPoolContent" | "community_pool_content" => Ok(GeneratedField::CommunityPoolContent), "feeContent" | "fee_content" => Ok(GeneratedField::FeeContent), "distributionsContent" | "distributions_content" => Ok(GeneratedField::DistributionsContent), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), @@ -641,7 +641,7 @@ impl<'de> serde::Deserialize<'de> for GenesisContent { let mut governance_content__ = None; let mut ibc_content__ = None; let mut chain_content__ = None; - let mut dao_content__ = None; + let mut community_pool_content__ = None; let mut fee_content__ = None; let mut distributions_content__ = None; while let Some(k) = map_.next_key()? { @@ -676,11 +676,11 @@ impl<'de> serde::Deserialize<'de> for GenesisContent { } chain_content__ = map_.next_value()?; } - GeneratedField::DaoContent => { - if dao_content__.is_some() { - return Err(serde::de::Error::duplicate_field("daoContent")); + GeneratedField::CommunityPoolContent => { + if community_pool_content__.is_some() { + return Err(serde::de::Error::duplicate_field("communityPoolContent")); } - dao_content__ = map_.next_value()?; + community_pool_content__ = map_.next_value()?; } GeneratedField::FeeContent => { if fee_content__.is_some() { @@ -702,7 +702,7 @@ impl<'de> serde::Deserialize<'de> for GenesisContent { governance_content: governance_content__, ibc_content: ibc_content__, chain_content: chain_content__, - dao_content: dao_content__, + community_pool_content: community_pool_content__, fee_content: fee_content__, distributions_content: distributions_content__, }) diff --git a/crates/proto/src/gen/penumbra.core.component.dao.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.component.community_pool.v1alpha1.rs similarity index 72% rename from crates/proto/src/gen/penumbra.core.component.dao.v1alpha1.rs rename to crates/proto/src/gen/penumbra.core.component.community_pool.v1alpha1.rs index 440b8143cd..44184b8a0e 100644 --- a/crates/proto/src/gen/penumbra.core.component.dao.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.component.community_pool.v1alpha1.rs @@ -1,75 +1,85 @@ -/// Dao parameter data. +/// CommunityPool parameter data. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct DaoParameters { - /// Whether DAO spend proposals are enabled. +pub struct CommunityPoolParameters { + /// Whether Community Pool spend proposals are enabled. #[prost(bool, tag = "1")] - pub dao_spend_proposals_enabled: bool, + pub community_pool_spend_proposals_enabled: bool, } -impl ::prost::Name for DaoParameters { - const NAME: &'static str = "DaoParameters"; - const PACKAGE: &'static str = "penumbra.core.component.dao.v1alpha1"; +impl ::prost::Name for CommunityPoolParameters { + const NAME: &'static str = "CommunityPoolParameters"; + const PACKAGE: &'static str = "penumbra.core.component.community_pool.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.dao.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.community_pool.v1alpha1.{}", + Self::NAME + ) } } -/// Dao genesis state. +/// CommunityPool genesis state. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GenesisContent { - /// Dao parameters. + /// CommunityPool parameters. #[prost(message, optional, tag = "1")] - pub dao_params: ::core::option::Option, + pub community_pool_params: ::core::option::Option, } impl ::prost::Name for GenesisContent { const NAME: &'static str = "GenesisContent"; - const PACKAGE: &'static str = "penumbra.core.component.dao.v1alpha1"; + const PACKAGE: &'static str = "penumbra.core.component.community_pool.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.dao.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.community_pool.v1alpha1.{}", + Self::NAME + ) } } -/// Requests the list of all asset balances associated with the DAO. +/// Requests the list of all asset balances associated with the Community Pool. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct DaoAssetBalancesRequest { +pub struct CommunityPoolAssetBalancesRequest { /// The expected chain id (empty string if no expectation). #[prost(string, tag = "1")] pub chain_id: ::prost::alloc::string::String, /// (Optional): The specific asset balances to retrieve, if excluded all will be returned. #[prost(message, repeated, tag = "2")] - pub asset_ids: ::prost::alloc::vec::Vec< - super::super::super::asset::v1alpha1::AssetId, - >, + pub asset_ids: ::prost::alloc::vec::Vec, } -impl ::prost::Name for DaoAssetBalancesRequest { - const NAME: &'static str = "DaoAssetBalancesRequest"; - const PACKAGE: &'static str = "penumbra.core.component.dao.v1alpha1"; +impl ::prost::Name for CommunityPoolAssetBalancesRequest { + const NAME: &'static str = "CommunityPoolAssetBalancesRequest"; + const PACKAGE: &'static str = "penumbra.core.component.community_pool.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.dao.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.community_pool.v1alpha1.{}", + Self::NAME + ) } } -/// The DAO's balance of a single asset. +/// The Community Pool's balance of a single asset. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct DaoAssetBalancesResponse { +pub struct CommunityPoolAssetBalancesResponse { /// The balance for a single asset. #[prost(message, optional, tag = "1")] pub balance: ::core::option::Option, } -impl ::prost::Name for DaoAssetBalancesResponse { - const NAME: &'static str = "DaoAssetBalancesResponse"; - const PACKAGE: &'static str = "penumbra.core.component.dao.v1alpha1"; +impl ::prost::Name for CommunityPoolAssetBalancesResponse { + const NAME: &'static str = "CommunityPoolAssetBalancesResponse"; + const PACKAGE: &'static str = "penumbra.core.component.community_pool.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.dao.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.community_pool.v1alpha1.{}", + Self::NAME + ) } } /// Generated client implementations. #[cfg(feature = "rpc")] pub mod query_service_client { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] - use tonic::codegen::*; use tonic::codegen::http::Uri; - /// Query operations for the dao component. + use tonic::codegen::*; + /// Query operations for the community_pool component. #[derive(Debug, Clone)] pub struct QueryServiceClient { inner: tonic::client::Grpc, @@ -113,9 +123,8 @@ pub mod query_service_client { >::ResponseBody, >, >, - , - >>::Error: Into + Send + Sync, + >>::Error: + Into + Send + Sync, { QueryServiceClient::new(InterceptedService::new(inner, interceptor)) } @@ -150,34 +159,28 @@ pub mod query_service_client { self.inner = self.inner.max_encoding_message_size(limit); self } - pub async fn dao_asset_balances( + pub async fn community_pool_asset_balances( &mut self, - request: impl tonic::IntoRequest, + request: impl tonic::IntoRequest, ) -> std::result::Result< - tonic::Response>, + tonic::Response>, tonic::Status, > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + self.inner.ready().await.map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( - "/penumbra.core.component.dao.v1alpha1.QueryService/DaoAssetBalances", + "/penumbra.core.component.community_pool.v1alpha1.QueryService/CommunityPoolAssetBalances", ); let mut req = request.into_request(); - req.extensions_mut() - .insert( - GrpcMethod::new( - "penumbra.core.component.dao.v1alpha1.QueryService", - "DaoAssetBalances", - ), - ); + req.extensions_mut().insert(GrpcMethod::new( + "penumbra.core.component.community_pool.v1alpha1.QueryService", + "CommunityPoolAssetBalances", + )); self.inner.server_streaming(req, path, codec).await } } @@ -190,24 +193,23 @@ pub mod query_service_server { /// Generated trait containing gRPC methods that should be implemented for use with QueryServiceServer. #[async_trait] pub trait QueryService: Send + Sync + 'static { - /// Server streaming response type for the DaoAssetBalances method. - type DaoAssetBalancesStream: tonic::codegen::tokio_stream::Stream< + /// Server streaming response type for the CommunityPoolAssetBalances method. + type CommunityPoolAssetBalancesStream: tonic::codegen::tokio_stream::Stream< Item = std::result::Result< - super::DaoAssetBalancesResponse, + super::CommunityPoolAssetBalancesResponse, tonic::Status, >, - > - + Send + > + Send + 'static; - async fn dao_asset_balances( + async fn community_pool_asset_balances( &self, - request: tonic::Request, + request: tonic::Request, ) -> std::result::Result< - tonic::Response, + tonic::Response, tonic::Status, >; } - /// Query operations for the dao component. + /// Query operations for the community_pool component. #[derive(Debug)] pub struct QueryServiceServer { inner: _Inner, @@ -231,10 +233,7 @@ pub mod query_service_server { max_encoding_message_size: None, } } - pub fn with_interceptor( - inner: T, - interceptor: F, - ) -> InterceptedService + pub fn with_interceptor(inner: T, interceptor: F) -> InterceptedService where F: tonic::service::Interceptor, { @@ -287,27 +286,32 @@ pub mod query_service_server { fn call(&mut self, req: http::Request) -> Self::Future { let inner = self.inner.clone(); match req.uri().path() { - "/penumbra.core.component.dao.v1alpha1.QueryService/DaoAssetBalances" => { + "/penumbra.core.component.community_pool.v1alpha1.QueryService/CommunityPoolAssetBalances" => { #[allow(non_camel_case_types)] - struct DaoAssetBalancesSvc(pub Arc); + struct CommunityPoolAssetBalancesSvc(pub Arc); impl< T: QueryService, > tonic::server::ServerStreamingService< - super::DaoAssetBalancesRequest, - > for DaoAssetBalancesSvc { - type Response = super::DaoAssetBalancesResponse; - type ResponseStream = T::DaoAssetBalancesStream; + super::CommunityPoolAssetBalancesRequest, + > for CommunityPoolAssetBalancesSvc { + type Response = super::CommunityPoolAssetBalancesResponse; + type ResponseStream = T::CommunityPoolAssetBalancesStream; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, - request: tonic::Request, + request: tonic::Request< + super::CommunityPoolAssetBalancesRequest, + >, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::dao_asset_balances(&inner, request) + ::community_pool_asset_balances( + &inner, + request, + ) .await }; Box::pin(fut) @@ -320,7 +324,7 @@ pub mod query_service_server { let inner = self.inner.clone(); let fut = async move { let inner = inner.0; - let method = DaoAssetBalancesSvc(inner); + let method = CommunityPoolAssetBalancesSvc(inner); let codec = tonic::codec::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( @@ -374,6 +378,6 @@ pub mod query_service_server { } } impl tonic::server::NamedService for QueryServiceServer { - const NAME: &'static str = "penumbra.core.component.dao.v1alpha1.QueryService"; + const NAME: &'static str = "penumbra.core.component.community_pool.v1alpha1.QueryService"; } } diff --git a/crates/proto/src/gen/penumbra.core.component.dao.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.component.community_pool.v1alpha1.serde.rs similarity index 77% rename from crates/proto/src/gen/penumbra.core.component.dao.v1alpha1.serde.rs rename to crates/proto/src/gen/penumbra.core.component.community_pool.v1alpha1.serde.rs index ca0ba6c6a3..7992a7731f 100644 --- a/crates/proto/src/gen/penumbra.core.component.dao.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.component.community_pool.v1alpha1.serde.rs @@ -1,4 +1,4 @@ -impl serde::Serialize for DaoAssetBalancesRequest { +impl serde::Serialize for CommunityPoolAssetBalancesRequest { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -12,7 +12,7 @@ impl serde::Serialize for DaoAssetBalancesRequest { if !self.asset_ids.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.component.dao.v1alpha1.DaoAssetBalancesRequest", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.community_pool.v1alpha1.CommunityPoolAssetBalancesRequest", len)?; if !self.chain_id.is_empty() { struct_ser.serialize_field("chainId", &self.chain_id)?; } @@ -22,7 +22,7 @@ impl serde::Serialize for DaoAssetBalancesRequest { struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for DaoAssetBalancesRequest { +impl<'de> serde::Deserialize<'de> for CommunityPoolAssetBalancesRequest { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where @@ -71,13 +71,13 @@ impl<'de> serde::Deserialize<'de> for DaoAssetBalancesRequest { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = DaoAssetBalancesRequest; + type Value = CommunityPoolAssetBalancesRequest; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.component.dao.v1alpha1.DaoAssetBalancesRequest") + formatter.write_str("struct penumbra.core.component.community_pool.v1alpha1.CommunityPoolAssetBalancesRequest") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { @@ -99,16 +99,16 @@ impl<'de> serde::Deserialize<'de> for DaoAssetBalancesRequest { } } } - Ok(DaoAssetBalancesRequest { + Ok(CommunityPoolAssetBalancesRequest { chain_id: chain_id__.unwrap_or_default(), asset_ids: asset_ids__.unwrap_or_default(), }) } } - deserializer.deserialize_struct("penumbra.core.component.dao.v1alpha1.DaoAssetBalancesRequest", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.component.community_pool.v1alpha1.CommunityPoolAssetBalancesRequest", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for DaoAssetBalancesResponse { +impl serde::Serialize for CommunityPoolAssetBalancesResponse { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -119,14 +119,14 @@ impl serde::Serialize for DaoAssetBalancesResponse { if self.balance.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.component.dao.v1alpha1.DaoAssetBalancesResponse", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.community_pool.v1alpha1.CommunityPoolAssetBalancesResponse", len)?; if let Some(v) = self.balance.as_ref() { struct_ser.serialize_field("balance", v)?; } struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for DaoAssetBalancesResponse { +impl<'de> serde::Deserialize<'de> for CommunityPoolAssetBalancesResponse { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where @@ -170,13 +170,13 @@ impl<'de> serde::Deserialize<'de> for DaoAssetBalancesResponse { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = DaoAssetBalancesResponse; + type Value = CommunityPoolAssetBalancesResponse; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.component.dao.v1alpha1.DaoAssetBalancesResponse") + formatter.write_str("struct penumbra.core.component.community_pool.v1alpha1.CommunityPoolAssetBalancesResponse") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { @@ -191,15 +191,15 @@ impl<'de> serde::Deserialize<'de> for DaoAssetBalancesResponse { } } } - Ok(DaoAssetBalancesResponse { + Ok(CommunityPoolAssetBalancesResponse { balance: balance__, }) } } - deserializer.deserialize_struct("penumbra.core.component.dao.v1alpha1.DaoAssetBalancesResponse", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.component.community_pool.v1alpha1.CommunityPoolAssetBalancesResponse", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for DaoParameters { +impl serde::Serialize for CommunityPoolParameters { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -207,30 +207,30 @@ impl serde::Serialize for DaoParameters { { use serde::ser::SerializeStruct; let mut len = 0; - if self.dao_spend_proposals_enabled { + if self.community_pool_spend_proposals_enabled { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.component.dao.v1alpha1.DaoParameters", len)?; - if self.dao_spend_proposals_enabled { - struct_ser.serialize_field("daoSpendProposalsEnabled", &self.dao_spend_proposals_enabled)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.community_pool.v1alpha1.CommunityPoolParameters", len)?; + if self.community_pool_spend_proposals_enabled { + struct_ser.serialize_field("communityPoolSpendProposalsEnabled", &self.community_pool_spend_proposals_enabled)?; } struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for DaoParameters { +impl<'de> serde::Deserialize<'de> for CommunityPoolParameters { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where D: serde::Deserializer<'de>, { const FIELDS: &[&str] = &[ - "dao_spend_proposals_enabled", - "daoSpendProposalsEnabled", + "community_pool_spend_proposals_enabled", + "communityPoolSpendProposalsEnabled", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { - DaoSpendProposalsEnabled, + CommunityPoolSpendProposalsEnabled, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -252,7 +252,7 @@ impl<'de> serde::Deserialize<'de> for DaoParameters { E: serde::de::Error, { match value { - "daoSpendProposalsEnabled" | "dao_spend_proposals_enabled" => Ok(GeneratedField::DaoSpendProposalsEnabled), + "communityPoolSpendProposalsEnabled" | "community_pool_spend_proposals_enabled" => Ok(GeneratedField::CommunityPoolSpendProposalsEnabled), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -262,33 +262,33 @@ impl<'de> serde::Deserialize<'de> for DaoParameters { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = DaoParameters; + type Value = CommunityPoolParameters; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.component.dao.v1alpha1.DaoParameters") + formatter.write_str("struct penumbra.core.component.community_pool.v1alpha1.CommunityPoolParameters") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { - let mut dao_spend_proposals_enabled__ = None; + let mut community_pool_spend_proposals_enabled__ = None; while let Some(k) = map_.next_key()? { match k { - GeneratedField::DaoSpendProposalsEnabled => { - if dao_spend_proposals_enabled__.is_some() { - return Err(serde::de::Error::duplicate_field("daoSpendProposalsEnabled")); + GeneratedField::CommunityPoolSpendProposalsEnabled => { + if community_pool_spend_proposals_enabled__.is_some() { + return Err(serde::de::Error::duplicate_field("communityPoolSpendProposalsEnabled")); } - dao_spend_proposals_enabled__ = Some(map_.next_value()?); + community_pool_spend_proposals_enabled__ = Some(map_.next_value()?); } } } - Ok(DaoParameters { - dao_spend_proposals_enabled: dao_spend_proposals_enabled__.unwrap_or_default(), + Ok(CommunityPoolParameters { + community_pool_spend_proposals_enabled: community_pool_spend_proposals_enabled__.unwrap_or_default(), }) } } - deserializer.deserialize_struct("penumbra.core.component.dao.v1alpha1.DaoParameters", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.component.community_pool.v1alpha1.CommunityPoolParameters", FIELDS, GeneratedVisitor) } } impl serde::Serialize for GenesisContent { @@ -299,12 +299,12 @@ impl serde::Serialize for GenesisContent { { use serde::ser::SerializeStruct; let mut len = 0; - if self.dao_params.is_some() { + if self.community_pool_params.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.component.dao.v1alpha1.GenesisContent", len)?; - if let Some(v) = self.dao_params.as_ref() { - struct_ser.serialize_field("daoParams", v)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.community_pool.v1alpha1.GenesisContent", len)?; + if let Some(v) = self.community_pool_params.as_ref() { + struct_ser.serialize_field("communityPoolParams", v)?; } struct_ser.end() } @@ -316,13 +316,13 @@ impl<'de> serde::Deserialize<'de> for GenesisContent { D: serde::Deserializer<'de>, { const FIELDS: &[&str] = &[ - "dao_params", - "daoParams", + "community_pool_params", + "communityPoolParams", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { - DaoParams, + CommunityPoolParams, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -344,7 +344,7 @@ impl<'de> serde::Deserialize<'de> for GenesisContent { E: serde::de::Error, { match value { - "daoParams" | "dao_params" => Ok(GeneratedField::DaoParams), + "communityPoolParams" | "community_pool_params" => Ok(GeneratedField::CommunityPoolParams), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -357,29 +357,29 @@ impl<'de> serde::Deserialize<'de> for GenesisContent { type Value = GenesisContent; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.component.dao.v1alpha1.GenesisContent") + formatter.write_str("struct penumbra.core.component.community_pool.v1alpha1.GenesisContent") } fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { - let mut dao_params__ = None; + let mut community_pool_params__ = None; while let Some(k) = map_.next_key()? { match k { - GeneratedField::DaoParams => { - if dao_params__.is_some() { - return Err(serde::de::Error::duplicate_field("daoParams")); + GeneratedField::CommunityPoolParams => { + if community_pool_params__.is_some() { + return Err(serde::de::Error::duplicate_field("communityPoolParams")); } - dao_params__ = map_.next_value()?; + community_pool_params__ = map_.next_value()?; } } } Ok(GenesisContent { - dao_params: dao_params__, + community_pool_params: community_pool_params__, }) } } - deserializer.deserialize_struct("penumbra.core.component.dao.v1alpha1.GenesisContent", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.component.community_pool.v1alpha1.GenesisContent", FIELDS, GeneratedVisitor) } } diff --git a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs index 4b17608197..92c70a3399 100644 --- a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs @@ -9,9 +9,7 @@ impl ::prost::Name for ZkDelegatorVoteProof { const NAME: &'static str = "ZKDelegatorVoteProof"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -22,17 +20,13 @@ pub struct ProposalSubmit { pub proposal: ::core::option::Option, /// The amount of the proposal deposit. #[prost(message, optional, tag = "3")] - pub deposit_amount: ::core::option::Option< - super::super::super::num::v1alpha1::Amount, - >, + pub deposit_amount: ::core::option::Option, } impl ::prost::Name for ProposalSubmit { const NAME: &'static str = "ProposalSubmit"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -49,9 +43,7 @@ impl ::prost::Name for ProposalWithdraw { const NAME: &'static str = "ProposalWithdraw"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -62,9 +54,7 @@ pub struct ProposalDepositClaim { pub proposal: u64, /// The expected deposit amount. #[prost(message, optional, tag = "2")] - pub deposit_amount: ::core::option::Option< - super::super::super::num::v1alpha1::Amount, - >, + pub deposit_amount: ::core::option::Option, /// The outcome of the proposal. #[prost(message, optional, tag = "3")] pub outcome: ::core::option::Option, @@ -73,9 +63,7 @@ impl ::prost::Name for ProposalDepositClaim { const NAME: &'static str = "ProposalDepositClaim"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -94,9 +82,7 @@ impl ::prost::Name for ValidatorVote { const NAME: &'static str = "ValidatorVote"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -109,9 +95,7 @@ impl ::prost::Name for ValidatorVoteReason { const NAME: &'static str = "ValidatorVoteReason"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -125,14 +109,10 @@ pub struct ValidatorVoteBody { pub vote: ::core::option::Option, /// The validator identity. #[prost(message, optional, tag = "3")] - pub identity_key: ::core::option::Option< - super::super::super::keys::v1alpha1::IdentityKey, - >, + pub identity_key: ::core::option::Option, /// The validator governance key. #[prost(message, optional, tag = "4")] - pub governance_key: ::core::option::Option< - super::super::super::keys::v1alpha1::GovernanceKey, - >, + pub governance_key: ::core::option::Option, /// A justification of the vote. #[prost(message, optional, tag = "5")] pub reason: ::core::option::Option, @@ -141,9 +121,7 @@ impl ::prost::Name for ValidatorVoteBody { const NAME: &'static str = "ValidatorVoteBody"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -165,9 +143,7 @@ impl ::prost::Name for DelegatorVote { const NAME: &'static str = "DelegatorVote"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -187,9 +163,7 @@ pub struct DelegatorVoteBody { pub value: ::core::option::Option, /// The amount of the delegation note, in unbonded penumbra. #[prost(message, optional, tag = "5")] - pub unbonded_amount: ::core::option::Option< - super::super::super::num::v1alpha1::Amount, - >, + pub unbonded_amount: ::core::option::Option, /// The nullifier of the input note. #[prost(message, optional, tag = "6")] pub nullifier: ::core::option::Option, @@ -203,9 +177,7 @@ impl ::prost::Name for DelegatorVoteBody { const NAME: &'static str = "DelegatorVoteBody"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -222,9 +194,7 @@ pub mod delegator_vote_view { #[prost(message, optional, tag = "1")] pub delegator_vote: ::core::option::Option, #[prost(message, optional, tag = "2")] - pub note: ::core::option::Option< - super::super::super::shielded_pool::v1alpha1::NoteView, - >, + pub note: ::core::option::Option, } impl ::prost::Name for Visible { const NAME: &'static str = "Visible"; @@ -265,9 +235,7 @@ impl ::prost::Name for DelegatorVoteView { const NAME: &'static str = "DelegatorVoteView"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -290,9 +258,7 @@ pub struct DelegatorVotePlan { pub staked_note_position: u64, /// The unbonded amount equivalent to the delegation note. #[prost(message, optional, tag = "6")] - pub unbonded_amount: ::core::option::Option< - super::super::super::num::v1alpha1::Amount, - >, + pub unbonded_amount: ::core::option::Option, /// The randomizer to use for the proof of spend capability. #[prost(bytes = "vec", tag = "7")] pub randomizer: ::prost::alloc::vec::Vec, @@ -307,60 +273,52 @@ impl ::prost::Name for DelegatorVotePlan { const NAME: &'static str = "DelegatorVotePlan"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct DaoDeposit { - /// The value to deposit into the DAO. +pub struct CommunityPoolDeposit { + /// The value to deposit into the Community Pool. #[prost(message, optional, tag = "1")] pub value: ::core::option::Option, } -impl ::prost::Name for DaoDeposit { - const NAME: &'static str = "DaoDeposit"; +impl ::prost::Name for CommunityPoolDeposit { + const NAME: &'static str = "CommunityPoolDeposit"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct DaoSpend { - /// The value to spend from the DAO. +pub struct CommunityPoolSpend { + /// The value to spend from the Community Pool. #[prost(message, optional, tag = "1")] pub value: ::core::option::Option, } -impl ::prost::Name for DaoSpend { - const NAME: &'static str = "DaoSpend"; +impl ::prost::Name for CommunityPoolSpend { + const NAME: &'static str = "CommunityPoolSpend"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct DaoOutput { - /// The value to output from the DAO. +pub struct CommunityPoolOutput { + /// The value to output from the Community Pool. #[prost(message, optional, tag = "1")] pub value: ::core::option::Option, /// The address to send the output to. #[prost(message, optional, tag = "2")] pub address: ::core::option::Option, } -impl ::prost::Name for DaoOutput { - const NAME: &'static str = "DaoOutput"; +impl ::prost::Name for CommunityPoolOutput { + const NAME: &'static str = "CommunityPoolOutput"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } /// A vote on a proposal. @@ -374,17 +332,7 @@ pub struct Vote { /// Nested message and enum types in `Vote`. pub mod vote { /// A vote. - #[derive( - Clone, - Copy, - Debug, - PartialEq, - Eq, - Hash, - PartialOrd, - Ord, - ::prost::Enumeration - )] + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] pub enum Vote { Unspecified = 0, @@ -421,9 +369,7 @@ impl ::prost::Name for Vote { const NAME: &'static str = "Vote"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } /// The current state of a proposal. @@ -520,9 +466,7 @@ impl ::prost::Name for ProposalState { const NAME: &'static str = "ProposalState"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } /// The outcome of a concluded proposal. @@ -617,9 +561,7 @@ impl ::prost::Name for ProposalOutcome { const NAME: &'static str = "ProposalOutcome"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } /// A tally of votes on a proposal. @@ -640,9 +582,7 @@ impl ::prost::Name for Tally { const NAME: &'static str = "Tally"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } /// A proposal to be voted upon. @@ -666,7 +606,7 @@ pub struct Proposal { #[prost(message, optional, tag = "7")] pub parameter_change: ::core::option::Option, #[prost(message, optional, tag = "8")] - pub dao_spend: ::core::option::Option, + pub community_pool_spend: ::core::option::Option, #[prost(message, optional, tag = "9")] pub upgrade_plan: ::core::option::Option, } @@ -688,7 +628,8 @@ pub mod proposal { const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.Proposal.{}", Self::NAME + "penumbra.core.component.governance.v1alpha1.Proposal.{}", + Self::NAME ) } } @@ -709,7 +650,8 @@ pub mod proposal { const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.Proposal.{}", Self::NAME + "penumbra.core.component.governance.v1alpha1.Proposal.{}", + Self::NAME ) } } @@ -734,28 +676,30 @@ pub mod proposal { const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.Proposal.{}", Self::NAME + "penumbra.core.component.governance.v1alpha1.Proposal.{}", + Self::NAME ) } } - /// A DAO spend proposal describes zero or more transactions to execute on behalf of the DAO, with + /// A Community Pool spend proposal describes zero or more transactions to execute on behalf of the Community Pool, with /// access to its funds, and zero or more scheduled transactions from previous passed proposals to /// cancel. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] - pub struct DaoSpend { + pub struct CommunityPoolSpend { /// The transaction plan to be executed at the time the proposal is passed. This must be a - /// transaction plan which can be executed by the DAO, which means it can't require any witness - /// data or authorization signatures, but it may use the `DaoSpend` action. + /// transaction plan which can be executed by the Community Pool, which means it can't require any witness + /// data or authorization signatures, but it may use the `CommunityPoolSpend` action. #[prost(message, optional, tag = "2")] pub transaction_plan: ::core::option::Option<::pbjson_types::Any>, } - impl ::prost::Name for DaoSpend { - const NAME: &'static str = "DaoSpend"; + impl ::prost::Name for CommunityPoolSpend { + const NAME: &'static str = "CommunityPoolSpend"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.Proposal.{}", Self::NAME + "penumbra.core.component.governance.v1alpha1.Proposal.{}", + Self::NAME ) } } @@ -772,7 +716,8 @@ pub mod proposal { const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.Proposal.{}", Self::NAME + "penumbra.core.component.governance.v1alpha1.Proposal.{}", + Self::NAME ) } } @@ -781,9 +726,7 @@ impl ::prost::Name for Proposal { const NAME: &'static str = "Proposal"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -800,9 +743,7 @@ impl ::prost::Name for ProposalInfoRequest { const NAME: &'static str = "ProposalInfoRequest"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -819,9 +760,7 @@ impl ::prost::Name for ProposalInfoResponse { const NAME: &'static str = "ProposalInfoResponse"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -838,9 +777,7 @@ impl ::prost::Name for ProposalDataRequest { const NAME: &'static str = "ProposalDataRequest"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -863,17 +800,13 @@ pub struct ProposalDataResponse { pub state: ::core::option::Option, /// The deposit amount paid for the proposal. #[prost(message, optional, tag = "6")] - pub proposal_deposit_amount: ::core::option::Option< - super::super::super::num::v1alpha1::Amount, - >, + pub proposal_deposit_amount: ::core::option::Option, } impl ::prost::Name for ProposalDataResponse { const NAME: &'static str = "ProposalDataResponse"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } /// Requests the validator rate data for a proposal. @@ -891,9 +824,7 @@ impl ::prost::Name for ProposalRateDataRequest { const NAME: &'static str = "ProposalRateDataRequest"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } /// The rate data for a single validator. @@ -907,9 +838,7 @@ impl ::prost::Name for ProposalRateDataResponse { const NAME: &'static str = "ProposalRateDataResponse"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } /// Requests the list of all proposals. @@ -929,9 +858,7 @@ impl ::prost::Name for ProposalListRequest { const NAME: &'static str = "ProposalListRequest"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } /// The data for a single proposal. @@ -958,9 +885,7 @@ impl ::prost::Name for ProposalListResponse { const NAME: &'static str = "ProposalListResponse"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } /// Requests the list of all validator votes for a given proposal. @@ -978,9 +903,7 @@ impl ::prost::Name for ValidatorVotesRequest { const NAME: &'static str = "ValidatorVotesRequest"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } /// The data for a single validator vote. @@ -992,17 +915,13 @@ pub struct ValidatorVotesResponse { pub vote: ::core::option::Option, /// The validator identity. #[prost(message, optional, tag = "2")] - pub identity_key: ::core::option::Option< - super::super::super::keys::v1alpha1::IdentityKey, - >, + pub identity_key: ::core::option::Option, } impl ::prost::Name for ValidatorVotesResponse { const NAME: &'static str = "ValidatorVotesResponse"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } /// Governance configuration data. @@ -1014,9 +933,7 @@ pub struct GovernanceParameters { pub proposal_voting_blocks: u64, /// The deposit required to create a proposal. #[prost(message, optional, tag = "2")] - pub proposal_deposit_amount: ::core::option::Option< - super::super::super::num::v1alpha1::Amount, - >, + pub proposal_deposit_amount: ::core::option::Option, /// The quorum required for a proposal to be considered valid, as a fraction of the total stake /// weight of the network. #[prost(string, tag = "3")] @@ -1033,9 +950,7 @@ impl ::prost::Name for GovernanceParameters { const NAME: &'static str = "GovernanceParameters"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } /// Governance genesis state. @@ -1050,9 +965,7 @@ impl ::prost::Name for GenesisContent { const NAME: &'static str = "GenesisContent"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } /// Note: must be kept in sync with AppParameters. @@ -1062,12 +975,11 @@ impl ::prost::Name for GenesisContent { pub struct ChangedAppParameters { /// Chain module parameters. #[prost(message, optional, tag = "1")] - pub chain_params: ::core::option::Option< - super::super::chain::v1alpha1::ChainParameters, - >, - /// DAO module parameters. + pub chain_params: ::core::option::Option, + /// Community Pool module parameters. #[prost(message, optional, tag = "2")] - pub dao_params: ::core::option::Option, + pub community_pool_params: + ::core::option::Option, /// Governance module parameters. #[prost(message, optional, tag = "3")] pub governance_params: ::core::option::Option, @@ -1076,25 +988,20 @@ pub struct ChangedAppParameters { pub ibc_params: ::core::option::Option, /// Stake module parameters. #[prost(message, optional, tag = "5")] - pub stake_params: ::core::option::Option< - super::super::stake::v1alpha1::StakeParameters, - >, + pub stake_params: ::core::option::Option, /// Fee module parameters. #[prost(message, optional, tag = "6")] pub fee_params: ::core::option::Option, /// Distributions module parameters. #[prost(message, optional, tag = "7")] - pub distributions_params: ::core::option::Option< - super::super::distributions::v1alpha1::DistributionsParameters, - >, + pub distributions_params: + ::core::option::Option, } impl ::prost::Name for ChangedAppParameters { const NAME: &'static str = "ChangedAppParameters"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -1111,9 +1018,7 @@ impl ::prost::Name for ChangedAppParametersSet { const NAME: &'static str = "ChangedAppParametersSet"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -1127,17 +1032,13 @@ pub struct VotingPowerAtProposalStartRequest { pub proposal_id: u64, /// The validator identity key to request information on. #[prost(message, optional, tag = "3")] - pub identity_key: ::core::option::Option< - super::super::super::keys::v1alpha1::IdentityKey, - >, + pub identity_key: ::core::option::Option, } impl ::prost::Name for VotingPowerAtProposalStartRequest { const NAME: &'static str = "VotingPowerAtProposalStartRequest"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -1154,9 +1055,7 @@ impl ::prost::Name for VotingPowerAtProposalStartResponse { const NAME: &'static str = "VotingPowerAtProposalStartResponse"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -1173,9 +1072,7 @@ impl ::prost::Name for AllTalliedDelegatorVotesForProposalRequest { const NAME: &'static str = "AllTalliedDelegatorVotesForProposalRequest"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -1186,17 +1083,13 @@ pub struct AllTalliedDelegatorVotesForProposalResponse { pub tally: ::core::option::Option, /// The validator identity associated with the tally. #[prost(message, optional, tag = "2")] - pub identity_key: ::core::option::Option< - super::super::super::keys::v1alpha1::IdentityKey, - >, + pub identity_key: ::core::option::Option, } impl ::prost::Name for AllTalliedDelegatorVotesForProposalResponse { const NAME: &'static str = "AllTalliedDelegatorVotesForProposalResponse"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -1210,9 +1103,7 @@ impl ::prost::Name for NextProposalIdRequest { const NAME: &'static str = "NextProposalIdRequest"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -1226,17 +1117,15 @@ impl ::prost::Name for NextProposalIdResponse { const NAME: &'static str = "NextProposalIdResponse"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) } } /// Generated client implementations. #[cfg(feature = "rpc")] pub mod query_service_client { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] - use tonic::codegen::*; use tonic::codegen::http::Uri; + use tonic::codegen::*; /// Query operations for the governance component. #[derive(Debug, Clone)] pub struct QueryServiceClient { @@ -1281,9 +1170,8 @@ pub mod query_service_client { >::ResponseBody, >, >, - , - >>::Error: Into + Send + Sync, + >>::Error: + Into + Send + Sync, { QueryServiceClient::new(InterceptedService::new(inner, interceptor)) } @@ -1321,31 +1209,23 @@ pub mod query_service_client { pub async fn proposal_info( &mut self, request: impl tonic::IntoRequest, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + ) -> std::result::Result, tonic::Status> + { + self.inner.ready().await.map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.governance.v1alpha1.QueryService/ProposalInfo", ); let mut req = request.into_request(); - req.extensions_mut() - .insert( - GrpcMethod::new( - "penumbra.core.component.governance.v1alpha1.QueryService", - "ProposalInfo", - ), - ); + req.extensions_mut().insert(GrpcMethod::new( + "penumbra.core.component.governance.v1alpha1.QueryService", + "ProposalInfo", + )); self.inner.unary(req, path, codec).await } pub async fn proposal_list( @@ -1355,87 +1235,65 @@ pub mod query_service_client { tonic::Response>, tonic::Status, > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + self.inner.ready().await.map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.governance.v1alpha1.QueryService/ProposalList", ); let mut req = request.into_request(); - req.extensions_mut() - .insert( - GrpcMethod::new( - "penumbra.core.component.governance.v1alpha1.QueryService", - "ProposalList", - ), - ); + req.extensions_mut().insert(GrpcMethod::new( + "penumbra.core.component.governance.v1alpha1.QueryService", + "ProposalList", + )); self.inner.server_streaming(req, path, codec).await } pub async fn proposal_data( &mut self, request: impl tonic::IntoRequest, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + ) -> std::result::Result, tonic::Status> + { + self.inner.ready().await.map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.governance.v1alpha1.QueryService/ProposalData", ); let mut req = request.into_request(); - req.extensions_mut() - .insert( - GrpcMethod::new( - "penumbra.core.component.governance.v1alpha1.QueryService", - "ProposalData", - ), - ); + req.extensions_mut().insert(GrpcMethod::new( + "penumbra.core.component.governance.v1alpha1.QueryService", + "ProposalData", + )); self.inner.unary(req, path, codec).await } pub async fn next_proposal_id( &mut self, request: impl tonic::IntoRequest, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + ) -> std::result::Result, tonic::Status> + { + self.inner.ready().await.map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.governance.v1alpha1.QueryService/NextProposalId", ); let mut req = request.into_request(); - req.extensions_mut() - .insert( - GrpcMethod::new( - "penumbra.core.component.governance.v1alpha1.QueryService", - "NextProposalId", - ), - ); + req.extensions_mut().insert(GrpcMethod::new( + "penumbra.core.component.governance.v1alpha1.QueryService", + "NextProposalId", + )); self.inner.unary(req, path, codec).await } pub async fn validator_votes( @@ -1445,27 +1303,21 @@ pub mod query_service_client { tonic::Response>, tonic::Status, > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + self.inner.ready().await.map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.governance.v1alpha1.QueryService/ValidatorVotes", ); let mut req = request.into_request(); - req.extensions_mut() - .insert( - GrpcMethod::new( - "penumbra.core.component.governance.v1alpha1.QueryService", - "ValidatorVotes", - ), - ); + req.extensions_mut().insert(GrpcMethod::new( + "penumbra.core.component.governance.v1alpha1.QueryService", + "ValidatorVotes", + )); self.inner.server_streaming(req, path, codec).await } pub async fn voting_power_at_proposal_start( @@ -1475,63 +1327,47 @@ pub mod query_service_client { tonic::Response, tonic::Status, > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + self.inner.ready().await.map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.governance.v1alpha1.QueryService/VotingPowerAtProposalStart", ); let mut req = request.into_request(); - req.extensions_mut() - .insert( - GrpcMethod::new( - "penumbra.core.component.governance.v1alpha1.QueryService", - "VotingPowerAtProposalStart", - ), - ); + req.extensions_mut().insert(GrpcMethod::new( + "penumbra.core.component.governance.v1alpha1.QueryService", + "VotingPowerAtProposalStart", + )); self.inner.unary(req, path, codec).await } pub async fn all_tallied_delegator_votes_for_proposal( &mut self, - request: impl tonic::IntoRequest< - super::AllTalliedDelegatorVotesForProposalRequest, - >, + request: impl tonic::IntoRequest, ) -> std::result::Result< tonic::Response< - tonic::codec::Streaming< - super::AllTalliedDelegatorVotesForProposalResponse, - >, + tonic::codec::Streaming, >, tonic::Status, > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + self.inner.ready().await.map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.governance.v1alpha1.QueryService/AllTalliedDelegatorVotesForProposal", ); let mut req = request.into_request(); - req.extensions_mut() - .insert( - GrpcMethod::new( - "penumbra.core.component.governance.v1alpha1.QueryService", - "AllTalliedDelegatorVotesForProposal", - ), - ); + req.extensions_mut().insert(GrpcMethod::new( + "penumbra.core.component.governance.v1alpha1.QueryService", + "AllTalliedDelegatorVotesForProposal", + )); self.inner.server_streaming(req, path, codec).await } /// Used for computing voting power ? @@ -1542,27 +1378,21 @@ pub mod query_service_client { tonic::Response>, tonic::Status, > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + self.inner.ready().await.map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.governance.v1alpha1.QueryService/ProposalRateData", ); let mut req = request.into_request(); - req.extensions_mut() - .insert( - GrpcMethod::new( - "penumbra.core.component.governance.v1alpha1.QueryService", - "ProposalRateData", - ), - ); + req.extensions_mut().insert(GrpcMethod::new( + "penumbra.core.component.governance.v1alpha1.QueryService", + "ProposalRateData", + )); self.inner.server_streaming(req, path, codec).await } } @@ -1578,50 +1408,33 @@ pub mod query_service_server { async fn proposal_info( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; /// Server streaming response type for the ProposalList method. type ProposalListStream: tonic::codegen::tokio_stream::Stream< Item = std::result::Result, - > - + Send + > + Send + 'static; async fn proposal_list( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; async fn proposal_data( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; async fn next_proposal_id( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; /// Server streaming response type for the ValidatorVotes method. type ValidatorVotesStream: tonic::codegen::tokio_stream::Stream< Item = std::result::Result, - > - + Send + > + Send + 'static; async fn validator_votes( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; async fn voting_power_at_proposal_start( &self, request: tonic::Request, @@ -1635,8 +1448,7 @@ pub mod query_service_server { super::AllTalliedDelegatorVotesForProposalResponse, tonic::Status, >, - > - + Send + > + Send + 'static; async fn all_tallied_delegator_votes_for_proposal( &self, @@ -1647,21 +1459,14 @@ pub mod query_service_server { >; /// Server streaming response type for the ProposalRateData method. type ProposalRateDataStream: tonic::codegen::tokio_stream::Stream< - Item = std::result::Result< - super::ProposalRateDataResponse, - tonic::Status, - >, - > - + Send + Item = std::result::Result, + > + Send + 'static; /// Used for computing voting power ? async fn proposal_rate_data( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; } /// Query operations for the governance component. #[derive(Debug)] @@ -1687,10 +1492,7 @@ pub mod query_service_server { max_encoding_message_size: None, } } - pub fn with_interceptor( - inner: T, - interceptor: F, - ) -> InterceptedService + pub fn with_interceptor(inner: T, interceptor: F) -> InterceptedService where F: tonic::service::Interceptor, { diff --git a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.serde.rs index 70f7950a93..0f40a860f3 100644 --- a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.serde.rs @@ -231,7 +231,7 @@ impl serde::Serialize for ChangedAppParameters { if self.chain_params.is_some() { len += 1; } - if self.dao_params.is_some() { + if self.community_pool_params.is_some() { len += 1; } if self.governance_params.is_some() { @@ -253,8 +253,8 @@ impl serde::Serialize for ChangedAppParameters { if let Some(v) = self.chain_params.as_ref() { struct_ser.serialize_field("chainParams", v)?; } - if let Some(v) = self.dao_params.as_ref() { - struct_ser.serialize_field("daoParams", v)?; + if let Some(v) = self.community_pool_params.as_ref() { + struct_ser.serialize_field("communityPoolParams", v)?; } if let Some(v) = self.governance_params.as_ref() { struct_ser.serialize_field("governanceParams", v)?; @@ -283,8 +283,8 @@ impl<'de> serde::Deserialize<'de> for ChangedAppParameters { const FIELDS: &[&str] = &[ "chain_params", "chainParams", - "dao_params", - "daoParams", + "community_pool_params", + "communityPoolParams", "governance_params", "governanceParams", "ibc_params", @@ -300,7 +300,7 @@ impl<'de> serde::Deserialize<'de> for ChangedAppParameters { #[allow(clippy::enum_variant_names)] enum GeneratedField { ChainParams, - DaoParams, + CommunityPoolParams, GovernanceParams, IbcParams, StakeParams, @@ -328,7 +328,7 @@ impl<'de> serde::Deserialize<'de> for ChangedAppParameters { { match value { "chainParams" | "chain_params" => Ok(GeneratedField::ChainParams), - "daoParams" | "dao_params" => Ok(GeneratedField::DaoParams), + "communityPoolParams" | "community_pool_params" => Ok(GeneratedField::CommunityPoolParams), "governanceParams" | "governance_params" => Ok(GeneratedField::GovernanceParams), "ibcParams" | "ibc_params" => Ok(GeneratedField::IbcParams), "stakeParams" | "stake_params" => Ok(GeneratedField::StakeParams), @@ -354,7 +354,7 @@ impl<'de> serde::Deserialize<'de> for ChangedAppParameters { V: serde::de::MapAccess<'de>, { let mut chain_params__ = None; - let mut dao_params__ = None; + let mut community_pool_params__ = None; let mut governance_params__ = None; let mut ibc_params__ = None; let mut stake_params__ = None; @@ -368,11 +368,11 @@ impl<'de> serde::Deserialize<'de> for ChangedAppParameters { } chain_params__ = map_.next_value()?; } - GeneratedField::DaoParams => { - if dao_params__.is_some() { - return Err(serde::de::Error::duplicate_field("daoParams")); + GeneratedField::CommunityPoolParams => { + if community_pool_params__.is_some() { + return Err(serde::de::Error::duplicate_field("communityPoolParams")); } - dao_params__ = map_.next_value()?; + community_pool_params__ = map_.next_value()?; } GeneratedField::GovernanceParams => { if governance_params__.is_some() { @@ -408,7 +408,7 @@ impl<'de> serde::Deserialize<'de> for ChangedAppParameters { } Ok(ChangedAppParameters { chain_params: chain_params__, - dao_params: dao_params__, + community_pool_params: community_pool_params__, governance_params: governance_params__, ibc_params: ibc_params__, stake_params: stake_params__, @@ -528,7 +528,7 @@ impl<'de> serde::Deserialize<'de> for ChangedAppParametersSet { deserializer.deserialize_struct("penumbra.core.component.governance.v1alpha1.ChangedAppParametersSet", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for DaoDeposit { +impl serde::Serialize for CommunityPoolDeposit { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -539,14 +539,14 @@ impl serde::Serialize for DaoDeposit { if self.value.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.component.governance.v1alpha1.DaoDeposit", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit", len)?; if let Some(v) = self.value.as_ref() { struct_ser.serialize_field("value", v)?; } struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for DaoDeposit { +impl<'de> serde::Deserialize<'de> for CommunityPoolDeposit { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where @@ -590,13 +590,13 @@ impl<'de> serde::Deserialize<'de> for DaoDeposit { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = DaoDeposit; + type Value = CommunityPoolDeposit; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.component.governance.v1alpha1.DaoDeposit") + formatter.write_str("struct penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { @@ -611,15 +611,15 @@ impl<'de> serde::Deserialize<'de> for DaoDeposit { } } } - Ok(DaoDeposit { + Ok(CommunityPoolDeposit { value: value__, }) } } - deserializer.deserialize_struct("penumbra.core.component.governance.v1alpha1.DaoDeposit", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for DaoOutput { +impl serde::Serialize for CommunityPoolOutput { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -633,7 +633,7 @@ impl serde::Serialize for DaoOutput { if self.address.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.component.governance.v1alpha1.DaoOutput", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.governance.v1alpha1.CommunityPoolOutput", len)?; if let Some(v) = self.value.as_ref() { struct_ser.serialize_field("value", v)?; } @@ -643,7 +643,7 @@ impl serde::Serialize for DaoOutput { struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for DaoOutput { +impl<'de> serde::Deserialize<'de> for CommunityPoolOutput { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where @@ -690,13 +690,13 @@ impl<'de> serde::Deserialize<'de> for DaoOutput { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = DaoOutput; + type Value = CommunityPoolOutput; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.component.governance.v1alpha1.DaoOutput") + formatter.write_str("struct penumbra.core.component.governance.v1alpha1.CommunityPoolOutput") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { @@ -718,16 +718,16 @@ impl<'de> serde::Deserialize<'de> for DaoOutput { } } } - Ok(DaoOutput { + Ok(CommunityPoolOutput { value: value__, address: address__, }) } } - deserializer.deserialize_struct("penumbra.core.component.governance.v1alpha1.DaoOutput", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.component.governance.v1alpha1.CommunityPoolOutput", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for DaoSpend { +impl serde::Serialize for CommunityPoolSpend { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -738,14 +738,14 @@ impl serde::Serialize for DaoSpend { if self.value.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.component.governance.v1alpha1.DaoSpend", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.governance.v1alpha1.CommunityPoolSpend", len)?; if let Some(v) = self.value.as_ref() { struct_ser.serialize_field("value", v)?; } struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for DaoSpend { +impl<'de> serde::Deserialize<'de> for CommunityPoolSpend { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where @@ -789,13 +789,13 @@ impl<'de> serde::Deserialize<'de> for DaoSpend { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = DaoSpend; + type Value = CommunityPoolSpend; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.component.governance.v1alpha1.DaoSpend") + formatter.write_str("struct penumbra.core.component.governance.v1alpha1.CommunityPoolSpend") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { @@ -810,12 +810,12 @@ impl<'de> serde::Deserialize<'de> for DaoSpend { } } } - Ok(DaoSpend { + Ok(CommunityPoolSpend { value: value__, }) } } - deserializer.deserialize_struct("penumbra.core.component.governance.v1alpha1.DaoSpend", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.component.governance.v1alpha1.CommunityPoolSpend", FIELDS, GeneratedVisitor) } } impl serde::Serialize for DelegatorVote { @@ -2178,7 +2178,7 @@ impl serde::Serialize for Proposal { if self.parameter_change.is_some() { len += 1; } - if self.dao_spend.is_some() { + if self.community_pool_spend.is_some() { len += 1; } if self.upgrade_plan.is_some() { @@ -2204,8 +2204,8 @@ impl serde::Serialize for Proposal { if let Some(v) = self.parameter_change.as_ref() { struct_ser.serialize_field("parameterChange", v)?; } - if let Some(v) = self.dao_spend.as_ref() { - struct_ser.serialize_field("daoSpend", v)?; + if let Some(v) = self.community_pool_spend.as_ref() { + struct_ser.serialize_field("communityPoolSpend", v)?; } if let Some(v) = self.upgrade_plan.as_ref() { struct_ser.serialize_field("upgradePlan", v)?; @@ -2227,8 +2227,8 @@ impl<'de> serde::Deserialize<'de> for Proposal { "emergency", "parameter_change", "parameterChange", - "dao_spend", - "daoSpend", + "community_pool_spend", + "communityPoolSpend", "upgrade_plan", "upgradePlan", ]; @@ -2241,7 +2241,7 @@ impl<'de> serde::Deserialize<'de> for Proposal { Signaling, Emergency, ParameterChange, - DaoSpend, + CommunityPoolSpend, UpgradePlan, } impl<'de> serde::Deserialize<'de> for GeneratedField { @@ -2270,7 +2270,7 @@ impl<'de> serde::Deserialize<'de> for Proposal { "signaling" => Ok(GeneratedField::Signaling), "emergency" => Ok(GeneratedField::Emergency), "parameterChange" | "parameter_change" => Ok(GeneratedField::ParameterChange), - "daoSpend" | "dao_spend" => Ok(GeneratedField::DaoSpend), + "communityPoolSpend" | "community_pool_spend" => Ok(GeneratedField::CommunityPoolSpend), "upgradePlan" | "upgrade_plan" => Ok(GeneratedField::UpgradePlan), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } @@ -2297,7 +2297,7 @@ impl<'de> serde::Deserialize<'de> for Proposal { let mut signaling__ = None; let mut emergency__ = None; let mut parameter_change__ = None; - let mut dao_spend__ = None; + let mut community_pool_spend__ = None; let mut upgrade_plan__ = None; while let Some(k) = map_.next_key()? { match k { @@ -2339,11 +2339,11 @@ impl<'de> serde::Deserialize<'de> for Proposal { } parameter_change__ = map_.next_value()?; } - GeneratedField::DaoSpend => { - if dao_spend__.is_some() { - return Err(serde::de::Error::duplicate_field("daoSpend")); + GeneratedField::CommunityPoolSpend => { + if community_pool_spend__.is_some() { + return Err(serde::de::Error::duplicate_field("communityPoolSpend")); } - dao_spend__ = map_.next_value()?; + community_pool_spend__ = map_.next_value()?; } GeneratedField::UpgradePlan => { if upgrade_plan__.is_some() { @@ -2360,7 +2360,7 @@ impl<'de> serde::Deserialize<'de> for Proposal { signaling: signaling__, emergency: emergency__, parameter_change: parameter_change__, - dao_spend: dao_spend__, + community_pool_spend: community_pool_spend__, upgrade_plan: upgrade_plan__, }) } @@ -2368,7 +2368,7 @@ impl<'de> serde::Deserialize<'de> for Proposal { deserializer.deserialize_struct("penumbra.core.component.governance.v1alpha1.Proposal", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for proposal::DaoSpend { +impl serde::Serialize for proposal::CommunityPoolSpend { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -2379,14 +2379,14 @@ impl serde::Serialize for proposal::DaoSpend { if self.transaction_plan.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.governance.v1alpha1.Proposal.CommunityPoolSpend", len)?; if let Some(v) = self.transaction_plan.as_ref() { struct_ser.serialize_field("transactionPlan", v)?; } struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for proposal::DaoSpend { +impl<'de> serde::Deserialize<'de> for proposal::CommunityPoolSpend { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where @@ -2431,13 +2431,13 @@ impl<'de> serde::Deserialize<'de> for proposal::DaoSpend { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = proposal::DaoSpend; + type Value = proposal::CommunityPoolSpend; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend") + formatter.write_str("struct penumbra.core.component.governance.v1alpha1.Proposal.CommunityPoolSpend") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { @@ -2452,12 +2452,12 @@ impl<'de> serde::Deserialize<'de> for proposal::DaoSpend { } } } - Ok(proposal::DaoSpend { + Ok(proposal::CommunityPoolSpend { transaction_plan: transaction_plan__, }) } } - deserializer.deserialize_struct("penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.component.governance.v1alpha1.Proposal.CommunityPoolSpend", FIELDS, GeneratedVisitor) } } impl serde::Serialize for proposal::Emergency { diff --git a/crates/proto/src/gen/penumbra.core.component.sct.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.component.sct.v1alpha1.rs index 1ad0ebc81f..20ae6e8f73 100644 --- a/crates/proto/src/gen/penumbra.core.component.sct.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.component.sct.v1alpha1.rs @@ -64,12 +64,12 @@ pub mod commitment_source { ) } } - /// The commitment was created through a `DaoOutput` in a governance-initated transaction. + /// The commitment was created through a `CommunityPoolOutput` in a governance-initated transaction. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] - pub struct DaoOutput {} - impl ::prost::Name for DaoOutput { - const NAME: &'static str = "DaoOutput"; + pub struct CommunityPoolOutput {} + impl ::prost::Name for CommunityPoolOutput { + const NAME: &'static str = "CommunityPoolOutput"; const PACKAGE: &'static str = "penumbra.core.component.sct.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!( @@ -110,7 +110,7 @@ pub mod commitment_source { #[prost(message, tag = "20")] FundingStreamReward(FundingStreamReward), #[prost(message, tag = "30")] - DaoOutput(DaoOutput), + CommunityPoolOutput(CommunityPoolOutput), #[prost(message, tag = "40")] Genesis(Genesis), } diff --git a/crates/proto/src/gen/penumbra.core.component.sct.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.component.sct.v1alpha1.serde.rs index 765993f553..29b7f43cc4 100644 --- a/crates/proto/src/gen/penumbra.core.component.sct.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.component.sct.v1alpha1.serde.rs @@ -21,8 +21,8 @@ impl serde::Serialize for CommitmentSource { commitment_source::Source::FundingStreamReward(v) => { struct_ser.serialize_field("fundingStreamReward", v)?; } - commitment_source::Source::DaoOutput(v) => { - struct_ser.serialize_field("daoOutput", v)?; + commitment_source::Source::CommunityPoolOutput(v) => { + struct_ser.serialize_field("communityPoolOutput", v)?; } commitment_source::Source::Genesis(v) => { struct_ser.serialize_field("genesis", v)?; @@ -44,8 +44,8 @@ impl<'de> serde::Deserialize<'de> for CommitmentSource { "ics20Transfer", "funding_stream_reward", "fundingStreamReward", - "dao_output", - "daoOutput", + "community_pool_output", + "communityPoolOutput", "genesis", ]; @@ -54,7 +54,7 @@ impl<'de> serde::Deserialize<'de> for CommitmentSource { Transaction, Ics20Transfer, FundingStreamReward, - DaoOutput, + CommunityPoolOutput, Genesis, } impl<'de> serde::Deserialize<'de> for GeneratedField { @@ -80,7 +80,7 @@ impl<'de> serde::Deserialize<'de> for CommitmentSource { "transaction" => Ok(GeneratedField::Transaction), "ics20Transfer" | "ics_20_transfer" => Ok(GeneratedField::Ics20Transfer), "fundingStreamReward" | "funding_stream_reward" => Ok(GeneratedField::FundingStreamReward), - "daoOutput" | "dao_output" => Ok(GeneratedField::DaoOutput), + "communityPoolOutput" | "community_pool_output" => Ok(GeneratedField::CommunityPoolOutput), "genesis" => Ok(GeneratedField::Genesis), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } @@ -125,11 +125,11 @@ impl<'de> serde::Deserialize<'de> for CommitmentSource { source__ = map_.next_value::<::std::option::Option<_>>()?.map(commitment_source::Source::FundingStreamReward) ; } - GeneratedField::DaoOutput => { + GeneratedField::CommunityPoolOutput => { if source__.is_some() { - return Err(serde::de::Error::duplicate_field("daoOutput")); + return Err(serde::de::Error::duplicate_field("communityPoolOutput")); } - source__ = map_.next_value::<::std::option::Option<_>>()?.map(commitment_source::Source::DaoOutput) + source__ = map_.next_value::<::std::option::Option<_>>()?.map(commitment_source::Source::CommunityPoolOutput) ; } GeneratedField::Genesis => { @@ -149,7 +149,7 @@ impl<'de> serde::Deserialize<'de> for CommitmentSource { deserializer.deserialize_struct("penumbra.core.component.sct.v1alpha1.CommitmentSource", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for commitment_source::DaoOutput { +impl serde::Serialize for commitment_source::CommunityPoolOutput { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -157,11 +157,11 @@ impl serde::Serialize for commitment_source::DaoOutput { { use serde::ser::SerializeStruct; let len = 0; - let struct_ser = serializer.serialize_struct("penumbra.core.component.sct.v1alpha1.CommitmentSource.DaoOutput", len)?; + let struct_ser = serializer.serialize_struct("penumbra.core.component.sct.v1alpha1.CommitmentSource.CommunityPoolOutput", len)?; struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for commitment_source::DaoOutput { +impl<'de> serde::Deserialize<'de> for commitment_source::CommunityPoolOutput { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where @@ -200,24 +200,24 @@ impl<'de> serde::Deserialize<'de> for commitment_source::DaoOutput { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = commitment_source::DaoOutput; + type Value = commitment_source::CommunityPoolOutput; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.component.sct.v1alpha1.CommitmentSource.DaoOutput") + formatter.write_str("struct penumbra.core.component.sct.v1alpha1.CommitmentSource.CommunityPoolOutput") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { while map_.next_key::()?.is_some() { let _ = map_.next_value::()?; } - Ok(commitment_source::DaoOutput { + Ok(commitment_source::CommunityPoolOutput { }) } } - deserializer.deserialize_struct("penumbra.core.component.sct.v1alpha1.CommitmentSource.DaoOutput", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.component.sct.v1alpha1.CommitmentSource.CommunityPoolOutput", FIELDS, GeneratedVisitor) } } impl serde::Serialize for commitment_source::FundingStreamReward { diff --git a/crates/proto/src/gen/penumbra.core.component.stake.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.component.stake.v1alpha1.rs index b85515e70e..3a308c420f 100644 --- a/crates/proto/src/gen/penumbra.core.component.stake.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.component.stake.v1alpha1.rs @@ -107,14 +107,14 @@ pub mod funding_stream { } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] - pub struct ToDao { + pub struct ToCommunityPool { /// The portion of the staking reward for the entire delegation pool /// allocated to this funding stream, specified in basis points. #[prost(uint32, tag = "2")] pub rate_bps: u32, } - impl ::prost::Name for ToDao { - const NAME: &'static str = "ToDao"; + impl ::prost::Name for ToCommunityPool { + const NAME: &'static str = "ToCommunityPool"; const PACKAGE: &'static str = "penumbra.core.component.stake.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!( @@ -129,7 +129,7 @@ pub mod funding_stream { #[prost(message, tag = "1")] ToAddress(ToAddress), #[prost(message, tag = "2")] - ToDao(ToDao), + ToCommunityPool(ToCommunityPool), } } impl ::prost::Name for FundingStream { diff --git a/crates/proto/src/gen/penumbra.core.component.stake.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.component.stake.v1alpha1.serde.rs index b96455a36c..f144508e87 100644 --- a/crates/proto/src/gen/penumbra.core.component.stake.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.component.stake.v1alpha1.serde.rs @@ -893,8 +893,8 @@ impl serde::Serialize for FundingStream { funding_stream::Recipient::ToAddress(v) => { struct_ser.serialize_field("toAddress", v)?; } - funding_stream::Recipient::ToDao(v) => { - struct_ser.serialize_field("toDao", v)?; + funding_stream::Recipient::ToCommunityPool(v) => { + struct_ser.serialize_field("toCommunityPool", v)?; } } } @@ -910,14 +910,14 @@ impl<'de> serde::Deserialize<'de> for FundingStream { const FIELDS: &[&str] = &[ "to_address", "toAddress", - "to_dao", - "toDao", + "to_community_pool", + "toCommunityPool", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { ToAddress, - ToDao, + ToCommunityPool, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -940,7 +940,7 @@ impl<'de> serde::Deserialize<'de> for FundingStream { { match value { "toAddress" | "to_address" => Ok(GeneratedField::ToAddress), - "toDao" | "to_dao" => Ok(GeneratedField::ToDao), + "toCommunityPool" | "to_community_pool" => Ok(GeneratedField::ToCommunityPool), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -970,11 +970,11 @@ impl<'de> serde::Deserialize<'de> for FundingStream { recipient__ = map_.next_value::<::std::option::Option<_>>()?.map(funding_stream::Recipient::ToAddress) ; } - GeneratedField::ToDao => { + GeneratedField::ToCommunityPool => { if recipient__.is_some() { - return Err(serde::de::Error::duplicate_field("toDao")); + return Err(serde::de::Error::duplicate_field("toCommunityPool")); } - recipient__ = map_.next_value::<::std::option::Option<_>>()?.map(funding_stream::Recipient::ToDao) + recipient__ = map_.next_value::<::std::option::Option<_>>()?.map(funding_stream::Recipient::ToCommunityPool) ; } } @@ -1098,7 +1098,7 @@ impl<'de> serde::Deserialize<'de> for funding_stream::ToAddress { deserializer.deserialize_struct("penumbra.core.component.stake.v1alpha1.FundingStream.ToAddress", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for funding_stream::ToDao { +impl serde::Serialize for funding_stream::ToCommunityPool { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -1109,14 +1109,14 @@ impl serde::Serialize for funding_stream::ToDao { if self.rate_bps != 0 { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.component.stake.v1alpha1.FundingStream.ToDao", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.stake.v1alpha1.FundingStream.ToCommunityPool", len)?; if self.rate_bps != 0 { struct_ser.serialize_field("rateBps", &self.rate_bps)?; } struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for funding_stream::ToDao { +impl<'de> serde::Deserialize<'de> for funding_stream::ToCommunityPool { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where @@ -1161,13 +1161,13 @@ impl<'de> serde::Deserialize<'de> for funding_stream::ToDao { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = funding_stream::ToDao; + type Value = funding_stream::ToCommunityPool; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.component.stake.v1alpha1.FundingStream.ToDao") + formatter.write_str("struct penumbra.core.component.stake.v1alpha1.FundingStream.ToCommunityPool") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { @@ -1184,12 +1184,12 @@ impl<'de> serde::Deserialize<'de> for funding_stream::ToDao { } } } - Ok(funding_stream::ToDao { + Ok(funding_stream::ToCommunityPool { rate_bps: rate_bps__.unwrap_or_default(), }) } } - deserializer.deserialize_struct("penumbra.core.component.stake.v1alpha1.FundingStream.ToDao", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.component.stake.v1alpha1.FundingStream.ToCommunityPool", FIELDS, GeneratedVisitor) } } impl serde::Serialize for GenesisContent { diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs index cbb683746a..98a8577bff 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs @@ -12,9 +12,7 @@ pub struct Transaction { /// The root of some previous state of the state commitment tree, used as an anchor for all /// ZK state transition proofs. #[prost(message, optional, tag = "3")] - pub anchor: ::core::option::Option< - super::super::super::crypto::tct::v1alpha1::MerkleRoot, - >, + pub anchor: ::core::option::Option, } impl ::prost::Name for Transaction { const NAME: &'static str = "Transaction"; @@ -93,9 +91,8 @@ impl ::prost::Name for TransactionParameters { pub struct DetectionData { /// A list of clues for use with Fuzzy Message Detection. #[prost(message, repeated, tag = "4")] - pub fmd_clues: ::prost::alloc::vec::Vec< - super::super::super::crypto::decaf377_fmd::v1alpha1::Clue, - >, + pub fmd_clues: + ::prost::alloc::vec::Vec, } impl ::prost::Name for DetectionData { const NAME: &'static str = "DetectionData"; @@ -129,28 +126,18 @@ pub mod action { #[prost(message, tag = "4")] SwapClaim(super::super::super::component::dex::v1alpha1::SwapClaim), #[prost(message, tag = "16")] - ValidatorDefinition( - super::super::super::component::stake::v1alpha1::ValidatorDefinition, - ), + ValidatorDefinition(super::super::super::component::stake::v1alpha1::ValidatorDefinition), #[prost(message, tag = "17")] IbcRelayAction(super::super::super::component::ibc::v1alpha1::IbcRelay), /// Governance: #[prost(message, tag = "18")] - ProposalSubmit( - super::super::super::component::governance::v1alpha1::ProposalSubmit, - ), + ProposalSubmit(super::super::super::component::governance::v1alpha1::ProposalSubmit), #[prost(message, tag = "19")] - ProposalWithdraw( - super::super::super::component::governance::v1alpha1::ProposalWithdraw, - ), + ProposalWithdraw(super::super::super::component::governance::v1alpha1::ProposalWithdraw), #[prost(message, tag = "20")] - ValidatorVote( - super::super::super::component::governance::v1alpha1::ValidatorVote, - ), + ValidatorVote(super::super::super::component::governance::v1alpha1::ValidatorVote), #[prost(message, tag = "21")] - DelegatorVote( - super::super::super::component::governance::v1alpha1::DelegatorVote, - ), + DelegatorVote(super::super::super::component::governance::v1alpha1::DelegatorVote), #[prost(message, tag = "22")] ProposalDepositClaim( super::super::super::component::governance::v1alpha1::ProposalDepositClaim, @@ -161,29 +148,29 @@ pub mod action { #[prost(message, tag = "31")] PositionClose(super::super::super::component::dex::v1alpha1::PositionClose), #[prost(message, tag = "32")] - PositionWithdraw( - super::super::super::component::dex::v1alpha1::PositionWithdraw, - ), + PositionWithdraw(super::super::super::component::dex::v1alpha1::PositionWithdraw), #[prost(message, tag = "34")] - PositionRewardClaim( - super::super::super::component::dex::v1alpha1::PositionRewardClaim, - ), + PositionRewardClaim(super::super::super::component::dex::v1alpha1::PositionRewardClaim), /// (un)delegation #[prost(message, tag = "40")] Delegate(super::super::super::component::stake::v1alpha1::Delegate), #[prost(message, tag = "41")] Undelegate(super::super::super::component::stake::v1alpha1::Undelegate), #[prost(message, tag = "42")] - UndelegateClaim( - super::super::super::component::stake::v1alpha1::UndelegateClaim, - ), - /// DAO + UndelegateClaim(super::super::super::component::stake::v1alpha1::UndelegateClaim), + /// Community Pool #[prost(message, tag = "50")] - DaoSpend(super::super::super::component::governance::v1alpha1::DaoSpend), + CommunityPoolSpend( + super::super::super::component::governance::v1alpha1::CommunityPoolSpend, + ), #[prost(message, tag = "51")] - DaoOutput(super::super::super::component::governance::v1alpha1::DaoOutput), + CommunityPoolOutput( + super::super::super::component::governance::v1alpha1::CommunityPoolOutput, + ), #[prost(message, tag = "52")] - DaoDeposit(super::super::super::component::governance::v1alpha1::DaoDeposit), + CommunityPoolDeposit( + super::super::super::component::governance::v1alpha1::CommunityPoolDeposit, + ), #[prost(message, tag = "200")] Ics20Withdrawal(super::super::super::component::ibc::v1alpha1::Ics20Withdrawal), } @@ -207,14 +194,11 @@ pub struct TransactionPerspective { /// The openings of note commitments referred to in the transaction /// but not included in the transaction. #[prost(message, repeated, tag = "3")] - pub advice_notes: ::prost::alloc::vec::Vec< - super::super::component::shielded_pool::v1alpha1::Note, - >, + pub advice_notes: + ::prost::alloc::vec::Vec, /// Any relevant address views. #[prost(message, repeated, tag = "4")] - pub address_views: ::prost::alloc::vec::Vec< - super::super::keys::v1alpha1::AddressView, - >, + pub address_views: ::prost::alloc::vec::Vec, /// Any relevant denoms for viewed assets. #[prost(message, repeated, tag = "5")] pub denoms: ::prost::alloc::vec::Vec, @@ -235,9 +219,8 @@ pub struct PayloadKeyWithCommitment { #[prost(message, optional, tag = "1")] pub payload_key: ::core::option::Option, #[prost(message, optional, tag = "2")] - pub commitment: ::core::option::Option< - super::super::super::crypto::tct::v1alpha1::StateCommitment, - >, + pub commitment: + ::core::option::Option, } impl ::prost::Name for PayloadKeyWithCommitment { const NAME: &'static str = "PayloadKeyWithCommitment"; @@ -250,13 +233,9 @@ impl ::prost::Name for PayloadKeyWithCommitment { #[derive(Clone, PartialEq, ::prost::Message)] pub struct NullifierWithNote { #[prost(message, optional, tag = "1")] - pub nullifier: ::core::option::Option< - super::super::component::sct::v1alpha1::Nullifier, - >, + pub nullifier: ::core::option::Option, #[prost(message, optional, tag = "2")] - pub note: ::core::option::Option< - super::super::component::shielded_pool::v1alpha1::Note, - >, + pub note: ::core::option::Option, } impl ::prost::Name for NullifierWithNote { const NAME: &'static str = "NullifierWithNote"; @@ -280,9 +259,7 @@ pub struct TransactionView { /// The root of some previous state of the state commitment tree, used as an anchor for all /// ZK state transition proofs. #[prost(message, optional, tag = "3")] - pub anchor: ::core::option::Option< - super::super::super::crypto::tct::v1alpha1::MerkleRoot, - >, + pub anchor: ::core::option::Option, } impl ::prost::Name for TransactionView { const NAME: &'static str = "TransactionView"; @@ -342,28 +319,18 @@ pub mod action_view { SwapClaim(super::super::super::component::dex::v1alpha1::SwapClaimView), /// Action types without visible/opaque variants #[prost(message, tag = "16")] - ValidatorDefinition( - super::super::super::component::stake::v1alpha1::ValidatorDefinition, - ), + ValidatorDefinition(super::super::super::component::stake::v1alpha1::ValidatorDefinition), #[prost(message, tag = "17")] IbcRelayAction(super::super::super::component::ibc::v1alpha1::IbcRelay), /// Governance: #[prost(message, tag = "18")] - ProposalSubmit( - super::super::super::component::governance::v1alpha1::ProposalSubmit, - ), + ProposalSubmit(super::super::super::component::governance::v1alpha1::ProposalSubmit), #[prost(message, tag = "19")] - ProposalWithdraw( - super::super::super::component::governance::v1alpha1::ProposalWithdraw, - ), + ProposalWithdraw(super::super::super::component::governance::v1alpha1::ProposalWithdraw), #[prost(message, tag = "20")] - ValidatorVote( - super::super::super::component::governance::v1alpha1::ValidatorVote, - ), + ValidatorVote(super::super::super::component::governance::v1alpha1::ValidatorVote), #[prost(message, tag = "21")] - DelegatorVote( - super::super::super::component::governance::v1alpha1::DelegatorVoteView, - ), + DelegatorVote(super::super::super::component::governance::v1alpha1::DelegatorVoteView), #[prost(message, tag = "22")] ProposalDepositClaim( super::super::super::component::governance::v1alpha1::ProposalDepositClaim, @@ -373,31 +340,31 @@ pub mod action_view { #[prost(message, tag = "31")] PositionClose(super::super::super::component::dex::v1alpha1::PositionClose), #[prost(message, tag = "32")] - PositionWithdraw( - super::super::super::component::dex::v1alpha1::PositionWithdraw, - ), + PositionWithdraw(super::super::super::component::dex::v1alpha1::PositionWithdraw), #[prost(message, tag = "34")] - PositionRewardClaim( - super::super::super::component::dex::v1alpha1::PositionRewardClaim, - ), + PositionRewardClaim(super::super::super::component::dex::v1alpha1::PositionRewardClaim), #[prost(message, tag = "41")] Delegate(super::super::super::component::stake::v1alpha1::Delegate), #[prost(message, tag = "42")] Undelegate(super::super::super::component::stake::v1alpha1::Undelegate), - /// DAO + /// Community Pool #[prost(message, tag = "50")] - DaoSpend(super::super::super::component::governance::v1alpha1::DaoSpend), + CommunityPoolSpend( + super::super::super::component::governance::v1alpha1::CommunityPoolSpend, + ), #[prost(message, tag = "51")] - DaoOutput(super::super::super::component::governance::v1alpha1::DaoOutput), + CommunityPoolOutput( + super::super::super::component::governance::v1alpha1::CommunityPoolOutput, + ), #[prost(message, tag = "52")] - DaoDeposit(super::super::super::component::governance::v1alpha1::DaoDeposit), + CommunityPoolDeposit( + super::super::super::component::governance::v1alpha1::CommunityPoolDeposit, + ), /// TODO: we have no way to recover the opening of the undelegate_claim's /// balance commitment, and can only infer the value from looking at the rest /// of the transaction. is that fine? #[prost(message, tag = "43")] - UndelegateClaim( - super::super::super::component::stake::v1alpha1::UndelegateClaim, - ), + UndelegateClaim(super::super::super::component::stake::v1alpha1::UndelegateClaim), #[prost(message, tag = "200")] Ics20Withdrawal(super::super::super::component::ibc::v1alpha1::Ics20Withdrawal), } @@ -415,9 +382,7 @@ impl ::prost::Name for ActionView { pub struct AuthorizationData { /// The computed auth hash for the approved transaction plan. #[prost(message, optional, tag = "1")] - pub effect_hash: ::core::option::Option< - super::super::effecthash::v1alpha1::EffectHash, - >, + pub effect_hash: ::core::option::Option, /// The required spend authorizations, returned in the same order as the /// Spend actions in the original request. #[prost(message, repeated, tag = "2")] @@ -444,15 +409,12 @@ impl ::prost::Name for AuthorizationData { pub struct WitnessData { /// The anchor for the state transition proofs. #[prost(message, optional, tag = "1")] - pub anchor: ::core::option::Option< - super::super::super::crypto::tct::v1alpha1::MerkleRoot, - >, + pub anchor: ::core::option::Option, /// The auth paths for the notes the transaction spends, in the /// same order as the spends in the transaction plan. #[prost(message, repeated, tag = "2")] - pub state_commitment_proofs: ::prost::alloc::vec::Vec< - super::super::super::crypto::tct::v1alpha1::StateCommitmentProof, - >, + pub state_commitment_proofs: + ::prost::alloc::vec::Vec, } impl ::prost::Name for WitnessData { const NAME: &'static str = "WitnessData"; @@ -530,29 +492,19 @@ pub mod action_plan { SwapClaim(super::super::super::component::dex::v1alpha1::SwapClaimPlan), /// This is just a message relayed to the chain. #[prost(message, tag = "16")] - ValidatorDefinition( - super::super::super::component::stake::v1alpha1::ValidatorDefinition, - ), + ValidatorDefinition(super::super::super::component::stake::v1alpha1::ValidatorDefinition), /// This is just a message relayed to the chain. #[prost(message, tag = "17")] IbcRelayAction(super::super::super::component::ibc::v1alpha1::IbcRelay), /// Governance: #[prost(message, tag = "18")] - ProposalSubmit( - super::super::super::component::governance::v1alpha1::ProposalSubmit, - ), + ProposalSubmit(super::super::super::component::governance::v1alpha1::ProposalSubmit), #[prost(message, tag = "19")] - ProposalWithdraw( - super::super::super::component::governance::v1alpha1::ProposalWithdraw, - ), + ProposalWithdraw(super::super::super::component::governance::v1alpha1::ProposalWithdraw), #[prost(message, tag = "20")] - ValidatorVote( - super::super::super::component::governance::v1alpha1::ValidatorVote, - ), + ValidatorVote(super::super::super::component::governance::v1alpha1::ValidatorVote), #[prost(message, tag = "21")] - DelegatorVote( - super::super::super::component::governance::v1alpha1::DelegatorVotePlan, - ), + DelegatorVote(super::super::super::component::governance::v1alpha1::DelegatorVotePlan), #[prost(message, tag = "22")] ProposalDepositClaim( super::super::super::component::governance::v1alpha1::ProposalDepositClaim, @@ -565,13 +517,9 @@ pub mod action_plan { PositionClose(super::super::super::component::dex::v1alpha1::PositionClose), /// The position withdraw/reward claim actions require balance information so they have Plan types. #[prost(message, tag = "32")] - PositionWithdraw( - super::super::super::component::dex::v1alpha1::PositionWithdrawPlan, - ), + PositionWithdraw(super::super::super::component::dex::v1alpha1::PositionWithdrawPlan), #[prost(message, tag = "34")] - PositionRewardClaim( - super::super::super::component::dex::v1alpha1::PositionRewardClaimPlan, - ), + PositionRewardClaim(super::super::super::component::dex::v1alpha1::PositionRewardClaimPlan), /// We don't need any extra information (yet) to understand delegations, /// because we don't yet use flow encryption. #[prost(message, tag = "40")] @@ -581,16 +529,20 @@ pub mod action_plan { #[prost(message, tag = "41")] Undelegate(super::super::super::component::stake::v1alpha1::Undelegate), #[prost(message, tag = "42")] - UndelegateClaim( - super::super::super::component::stake::v1alpha1::UndelegateClaimPlan, - ), - /// DAO + UndelegateClaim(super::super::super::component::stake::v1alpha1::UndelegateClaimPlan), + /// Community Pool #[prost(message, tag = "50")] - DaoSpend(super::super::super::component::governance::v1alpha1::DaoSpend), + CommunityPoolSpend( + super::super::super::component::governance::v1alpha1::CommunityPoolSpend, + ), #[prost(message, tag = "51")] - DaoOutput(super::super::super::component::governance::v1alpha1::DaoOutput), + CommunityPoolOutput( + super::super::super::component::governance::v1alpha1::CommunityPoolOutput, + ), #[prost(message, tag = "52")] - DaoDeposit(super::super::super::component::governance::v1alpha1::DaoDeposit), + CommunityPoolDeposit( + super::super::super::component::governance::v1alpha1::CommunityPoolDeposit, + ), } } impl ::prost::Name for ActionPlan { @@ -679,9 +631,7 @@ impl ::prost::Name for MemoPlaintext { #[derive(Clone, PartialEq, ::prost::Message)] pub struct MemoPlaintextView { #[prost(message, optional, tag = "1")] - pub return_address: ::core::option::Option< - super::super::keys::v1alpha1::AddressView, - >, + pub return_address: ::core::option::Option, #[prost(string, tag = "2")] pub text: ::prost::alloc::string::String, } @@ -712,9 +662,7 @@ pub mod memo_view { const NAME: &'static str = "Visible"; const PACKAGE: &'static str = "penumbra.core.transaction.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.transaction.v1alpha1.MemoView.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.MemoView.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -727,9 +675,7 @@ pub mod memo_view { const NAME: &'static str = "Opaque"; const PACKAGE: &'static str = "penumbra.core.transaction.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!( - "penumbra.core.transaction.v1alpha1.MemoView.{}", Self::NAME - ) + ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.MemoView.{}", Self::NAME) } } #[allow(clippy::derive_partial_eq_without_eq)] diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs index 0b649f1cb4..e9a13de4cb 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs @@ -66,14 +66,14 @@ impl serde::Serialize for Action { action::Action::UndelegateClaim(v) => { struct_ser.serialize_field("undelegateClaim", v)?; } - action::Action::DaoSpend(v) => { - struct_ser.serialize_field("daoSpend", v)?; + action::Action::CommunityPoolSpend(v) => { + struct_ser.serialize_field("communityPoolSpend", v)?; } - action::Action::DaoOutput(v) => { - struct_ser.serialize_field("daoOutput", v)?; + action::Action::CommunityPoolOutput(v) => { + struct_ser.serialize_field("communityPoolOutput", v)?; } - action::Action::DaoDeposit(v) => { - struct_ser.serialize_field("daoDeposit", v)?; + action::Action::CommunityPoolDeposit(v) => { + struct_ser.serialize_field("communityPoolDeposit", v)?; } action::Action::Ics20Withdrawal(v) => { struct_ser.serialize_field("ics20Withdrawal", v)?; @@ -121,12 +121,12 @@ impl<'de> serde::Deserialize<'de> for Action { "undelegate", "undelegate_claim", "undelegateClaim", - "dao_spend", - "daoSpend", - "dao_output", - "daoOutput", - "dao_deposit", - "daoDeposit", + "community_pool_spend", + "communityPoolSpend", + "community_pool_output", + "communityPoolOutput", + "community_pool_deposit", + "communityPoolDeposit", "ics20_withdrawal", "ics20Withdrawal", ]; @@ -151,9 +151,9 @@ impl<'de> serde::Deserialize<'de> for Action { Delegate, Undelegate, UndelegateClaim, - DaoSpend, - DaoOutput, - DaoDeposit, + CommunityPoolSpend, + CommunityPoolOutput, + CommunityPoolDeposit, Ics20Withdrawal, } impl<'de> serde::Deserialize<'de> for GeneratedField { @@ -194,9 +194,9 @@ impl<'de> serde::Deserialize<'de> for Action { "delegate" => Ok(GeneratedField::Delegate), "undelegate" => Ok(GeneratedField::Undelegate), "undelegateClaim" | "undelegate_claim" => Ok(GeneratedField::UndelegateClaim), - "daoSpend" | "dao_spend" => Ok(GeneratedField::DaoSpend), - "daoOutput" | "dao_output" => Ok(GeneratedField::DaoOutput), - "daoDeposit" | "dao_deposit" => Ok(GeneratedField::DaoDeposit), + "communityPoolSpend" | "community_pool_spend" => Ok(GeneratedField::CommunityPoolSpend), + "communityPoolOutput" | "community_pool_output" => Ok(GeneratedField::CommunityPoolOutput), + "communityPoolDeposit" | "community_pool_deposit" => Ok(GeneratedField::CommunityPoolDeposit), "ics20Withdrawal" | "ics20_withdrawal" => Ok(GeneratedField::Ics20Withdrawal), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } @@ -346,25 +346,25 @@ impl<'de> serde::Deserialize<'de> for Action { action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::UndelegateClaim) ; } - GeneratedField::DaoSpend => { + GeneratedField::CommunityPoolSpend => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("daoSpend")); + return Err(serde::de::Error::duplicate_field("communityPoolSpend")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::DaoSpend) + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::CommunityPoolSpend) ; } - GeneratedField::DaoOutput => { + GeneratedField::CommunityPoolOutput => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("daoOutput")); + return Err(serde::de::Error::duplicate_field("communityPoolOutput")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::DaoOutput) + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::CommunityPoolOutput) ; } - GeneratedField::DaoDeposit => { + GeneratedField::CommunityPoolDeposit => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("daoDeposit")); + return Err(serde::de::Error::duplicate_field("communityPoolDeposit")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::DaoDeposit) + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::CommunityPoolDeposit) ; } GeneratedField::Ics20Withdrawal => { @@ -455,14 +455,14 @@ impl serde::Serialize for ActionPlan { action_plan::Action::UndelegateClaim(v) => { struct_ser.serialize_field("undelegateClaim", v)?; } - action_plan::Action::DaoSpend(v) => { - struct_ser.serialize_field("daoSpend", v)?; + action_plan::Action::CommunityPoolSpend(v) => { + struct_ser.serialize_field("communityPoolSpend", v)?; } - action_plan::Action::DaoOutput(v) => { - struct_ser.serialize_field("daoOutput", v)?; + action_plan::Action::CommunityPoolOutput(v) => { + struct_ser.serialize_field("communityPoolOutput", v)?; } - action_plan::Action::DaoDeposit(v) => { - struct_ser.serialize_field("daoDeposit", v)?; + action_plan::Action::CommunityPoolDeposit(v) => { + struct_ser.serialize_field("communityPoolDeposit", v)?; } } } @@ -508,12 +508,12 @@ impl<'de> serde::Deserialize<'de> for ActionPlan { "undelegate", "undelegate_claim", "undelegateClaim", - "dao_spend", - "daoSpend", - "dao_output", - "daoOutput", - "dao_deposit", - "daoDeposit", + "community_pool_spend", + "communityPoolSpend", + "community_pool_output", + "communityPoolOutput", + "community_pool_deposit", + "communityPoolDeposit", ]; #[allow(clippy::enum_variant_names)] @@ -537,9 +537,9 @@ impl<'de> serde::Deserialize<'de> for ActionPlan { Delegate, Undelegate, UndelegateClaim, - DaoSpend, - DaoOutput, - DaoDeposit, + CommunityPoolSpend, + CommunityPoolOutput, + CommunityPoolDeposit, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -580,9 +580,9 @@ impl<'de> serde::Deserialize<'de> for ActionPlan { "delegate" => Ok(GeneratedField::Delegate), "undelegate" => Ok(GeneratedField::Undelegate), "undelegateClaim" | "undelegate_claim" => Ok(GeneratedField::UndelegateClaim), - "daoSpend" | "dao_spend" => Ok(GeneratedField::DaoSpend), - "daoOutput" | "dao_output" => Ok(GeneratedField::DaoOutput), - "daoDeposit" | "dao_deposit" => Ok(GeneratedField::DaoDeposit), + "communityPoolSpend" | "community_pool_spend" => Ok(GeneratedField::CommunityPoolSpend), + "communityPoolOutput" | "community_pool_output" => Ok(GeneratedField::CommunityPoolOutput), + "communityPoolDeposit" | "community_pool_deposit" => Ok(GeneratedField::CommunityPoolDeposit), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -738,25 +738,25 @@ impl<'de> serde::Deserialize<'de> for ActionPlan { action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::UndelegateClaim) ; } - GeneratedField::DaoSpend => { + GeneratedField::CommunityPoolSpend => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("daoSpend")); + return Err(serde::de::Error::duplicate_field("communityPoolSpend")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::DaoSpend) + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::CommunityPoolSpend) ; } - GeneratedField::DaoOutput => { + GeneratedField::CommunityPoolOutput => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("daoOutput")); + return Err(serde::de::Error::duplicate_field("communityPoolOutput")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::DaoOutput) + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::CommunityPoolOutput) ; } - GeneratedField::DaoDeposit => { + GeneratedField::CommunityPoolDeposit => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("daoDeposit")); + return Err(serde::de::Error::duplicate_field("communityPoolDeposit")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::DaoDeposit) + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::CommunityPoolDeposit) ; } } @@ -834,14 +834,14 @@ impl serde::Serialize for ActionView { action_view::ActionView::Undelegate(v) => { struct_ser.serialize_field("undelegate", v)?; } - action_view::ActionView::DaoSpend(v) => { - struct_ser.serialize_field("daoSpend", v)?; + action_view::ActionView::CommunityPoolSpend(v) => { + struct_ser.serialize_field("communityPoolSpend", v)?; } - action_view::ActionView::DaoOutput(v) => { - struct_ser.serialize_field("daoOutput", v)?; + action_view::ActionView::CommunityPoolOutput(v) => { + struct_ser.serialize_field("communityPoolOutput", v)?; } - action_view::ActionView::DaoDeposit(v) => { - struct_ser.serialize_field("daoDeposit", v)?; + action_view::ActionView::CommunityPoolDeposit(v) => { + struct_ser.serialize_field("communityPoolDeposit", v)?; } action_view::ActionView::UndelegateClaim(v) => { struct_ser.serialize_field("undelegateClaim", v)?; @@ -890,12 +890,12 @@ impl<'de> serde::Deserialize<'de> for ActionView { "positionRewardClaim", "delegate", "undelegate", - "dao_spend", - "daoSpend", - "dao_output", - "daoOutput", - "dao_deposit", - "daoDeposit", + "community_pool_spend", + "communityPoolSpend", + "community_pool_output", + "communityPoolOutput", + "community_pool_deposit", + "communityPoolDeposit", "undelegate_claim", "undelegateClaim", "ics20_withdrawal", @@ -921,9 +921,9 @@ impl<'de> serde::Deserialize<'de> for ActionView { PositionRewardClaim, Delegate, Undelegate, - DaoSpend, - DaoOutput, - DaoDeposit, + CommunityPoolSpend, + CommunityPoolOutput, + CommunityPoolDeposit, UndelegateClaim, Ics20Withdrawal, } @@ -964,9 +964,9 @@ impl<'de> serde::Deserialize<'de> for ActionView { "positionRewardClaim" | "position_reward_claim" => Ok(GeneratedField::PositionRewardClaim), "delegate" => Ok(GeneratedField::Delegate), "undelegate" => Ok(GeneratedField::Undelegate), - "daoSpend" | "dao_spend" => Ok(GeneratedField::DaoSpend), - "daoOutput" | "dao_output" => Ok(GeneratedField::DaoOutput), - "daoDeposit" | "dao_deposit" => Ok(GeneratedField::DaoDeposit), + "communityPoolSpend" | "community_pool_spend" => Ok(GeneratedField::CommunityPoolSpend), + "communityPoolOutput" | "community_pool_output" => Ok(GeneratedField::CommunityPoolOutput), + "communityPoolDeposit" | "community_pool_deposit" => Ok(GeneratedField::CommunityPoolDeposit), "undelegateClaim" | "undelegate_claim" => Ok(GeneratedField::UndelegateClaim), "ics20Withdrawal" | "ics20_withdrawal" => Ok(GeneratedField::Ics20Withdrawal), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), @@ -1110,25 +1110,25 @@ impl<'de> serde::Deserialize<'de> for ActionView { action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::Undelegate) ; } - GeneratedField::DaoSpend => { + GeneratedField::CommunityPoolSpend => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field("daoSpend")); + return Err(serde::de::Error::duplicate_field("communityPoolSpend")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::DaoSpend) + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::CommunityPoolSpend) ; } - GeneratedField::DaoOutput => { + GeneratedField::CommunityPoolOutput => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field("daoOutput")); + return Err(serde::de::Error::duplicate_field("communityPoolOutput")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::DaoOutput) + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::CommunityPoolOutput) ; } - GeneratedField::DaoDeposit => { + GeneratedField::CommunityPoolDeposit => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field("daoDeposit")); + return Err(serde::de::Error::duplicate_field("communityPoolDeposit")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::DaoDeposit) + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::CommunityPoolDeposit) ; } GeneratedField::UndelegateClaim => { diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index c4c03ac1271a792fd86b62a8c0eb6360bb8b0ee3..3b98f11d1bf5500f9b163cb7c8414f264335c4c9 100644 GIT binary patch delta 3540 zcmds4U2Gdw7WO%JJV|bx#2GuSJI=!usuCRAw9zIW zH=cwIg@pnYh`(L1+ABav<)LC9ihu?&ZTbY;{doZ)gv8$im5?a=P;IM~SW(o%nej}z zlPXfR`>@*e+jsB%&i&3k_kL%5{PW=XbHO*yHA|n@@@?YMgDljU(Wa(m@)P>pSV7Y! z6SH0E$-@40SHeBsS(w&zO-YDX53z9dzYt1^SZ{oauN-v3Bq>TVJ)NG)>AC5mGRj-s zkxCE5BEO0)j+x6-gBM4_#^`wlS>Ms=5?#9GnmB-FW#!qLED$VKVJ*rULkU4&9(weHXGn0xTW z)w{Yr1@7B1lbfDP<)&vRGCAchz*X0>fnqVI-#}gBm_Cm1jCSJvnc@)Mx-F!Vq$)iZJrwY_a)Fry~VM}9e zg!gkv@*pj*#O~7NmfN!(+{eA<5TmgTU3?vd07de7>OgIBhluVgmoHk>(|WFx(~n62 z3iDO2;B6Eb%)qtStA^dg((`N7^{cFnXbBN&)r5m++uH6PzLld)$`wx#)ZUU-5w39^ zh)6#I4W-J~x}W~WB+8_h!UW`~gOE`3tqzh24W%4JTLgB_mXfV|pnd*CYZ74HV^`K1 zSJr}j8+&sN7s-cMLafwK711ZbC-&r_9o{hx=Rt$;BXHd%)n@dzd&uH+o7S}0{ zSW|a+mfS*-EWn@q4LsmlY=jTMcUW~HR4(Xlv!D^<79D;k)oNy)7%6YUW_4VQ%t2#F z-#@L*?AsqrNAGpT5o``N!B31WbMRYS-(#jt1!Z&yacQN4=(yq`r`TrT_=axdn}hJ@ z9!m9%Hz2{_EAiz?C^i;(y{?UAT<0G`>qTxC^$XA@I_AOet}ta>r)zFiug$}t66bY0 zmyCZf4`HL`ZFs#2RvBkLf?vS;b(TtoK$ z!`D!Dy(ONsoa>2qHH;dC@8O?5{|+8>%blvk!G;m8xJE526J7JtCMEWJSX#fUl{h5h z%az7Z9XP`n<`d1jfAIM#}B z7&hK-#VS8EicdD;K~P1iALppl@Au;mHJzQjhOVW8GMU%6fI$b6*L({N?G9unjCUB9 zx8vg#D;xQX$YqJljhsb#6{QaKNsR6k&tH@R;txakNzGzv*2z6Oj8_|Ak2sXYw#Zg1 zW(3Khq!Vmlw*zU56YQ?LjlX8`-DA>ge*`X~`&pmyo|h$L-%Ise9?0kuT3#6viKk(k zG2mmf@~Yx8#qAb9oP>z*hcGzk5@VH?-i5ok)~GVOoTv1NTL61*a|K$)Q_9229AA-f zJ=L*njvDWT9_ker!`QRN6>D30j$~cCs@BOZ1lYqe8ui8|^?y0r_zh)ipMpp#tikxO znLQ!l$$I0iRyI)a|6b=;I@x9a!y~FUx@};DTh{7Dg=}|R>U9v=?s(tN9YnS}e&;Z+ zriSFjfWk7;4tpvl3S(*6lnoSZ@fH9d75~my*NPJ1t7)tEO8frB)>Auj@P**`_becL0d9G z;vPX;GC|@VL0hsPgNk$%ZOMd)O0X=MAW@H^Etw!ukD@Kvj}3|>(2-1#xP;4+2@+SJ zEtw#31(M_o_pl8Wc(_AE?qm1=8@*IeFWqC@ypJgepNXLfHuYaTieVftw6Np*L&_N9B$ndBz%^m7n3sf7)-35qt@c^k$g zSy@OiGiN6LA}^s>Zhuu)f0l>UXJd6J*DzsT%^~3K75%BcEp4g3%^NyWMh>{2Hq6gt zQrSn7o08ofsf;0Z)U!x6m^~{~z5S_7HX>Fen0ehXTj{(ooXst*E)zc&qLM070qWpoTxi+GVfqAQQlP9i)*ooICwgOb_yj&|U*Mhzn z?@TcJLX7T$ak)?;A_jWFE!KE7xA<}wlwo|gT$hG4_>!Dc-P_as*`EGvI4X)mET%R` z)hjJGS08hjZ!MPf!smJsFQkBs_rYz1YqG2#PHEnhDk~#FQ7nn97FV{wL`J(ra4R%J zK(=m$?N}dG!l~4Zu946@HlhnBykQ$rjznp>y!{e=Hs;;(>NL(z3g+aZ7Ec;1P>6v#7v+zH;bT-mBU zqZ}D_i3>3{RSbI2n26@uJA_vs3PJ{d6S=M# zjFGvt_fVT083pm_VK!cLEys(hhvc$W91TIUcw#-)#_G*HF$79`ge4xaA*DUSnr6w| zdOSC%y>*V>>%zNiy4+L1rs(*wUw-0YpXuIJ|E})C;(~{I{YH$1s;t^l7pdx+bvB+E z*}Z3hzz`L zMiVch$>hXzq8( zM#SrEo+HOEU}rq{bSg^}VKG@^7)YoEsdtBglvjo1_+@VQ8m;wC00!MFsP1 zPeG!d2CMA}67@8Y+&nd4Xd^&+6L~J(Q{jY_DnQ&3AjMXcxFbN42Uf5l-&o0hRNVb& zNhV0#{b)%hNZkEsN%mvV&<>y_nGjJ4<|Pv(>H)MQ6C~;Zv?Tj6WM~3y$pnc@I4_wX zaRpkE2@+QzN&YIy9xA}0gn$j~h5sDKg2wSSHL|MEIwU0#*X3D!+R;1-8SE;Dj%JeGrms5xN z)!e%%N=0r+WtBdbnX3;7q(b_QIc{)0Y)@F4cA)>W4&wlm% Mb|%kn*WNk)H(?TK#Q*>R diff --git a/crates/proto/src/lib.rs b/crates/proto/src/lib.rs index 88c70fadcd..d83ab7a8a5 100644 --- a/crates/proto/src/lib.rs +++ b/crates/proto/src/lib.rs @@ -85,10 +85,10 @@ pub mod penumbra { } } - pub mod dao { + pub mod community_pool { pub mod v1alpha1 { - include!("gen/penumbra.core.component.dao.v1alpha1.rs"); - include!("gen/penumbra.core.component.dao.v1alpha1.serde.rs"); + include!("gen/penumbra.core.component.community_pool.v1alpha1.rs"); + include!("gen/penumbra.core.component.community_pool.v1alpha1.serde.rs"); } } diff --git a/crates/view/Cargo.toml b/crates/view/Cargo.toml index c8ba80e57e..fbafb99c11 100644 --- a/crates/view/Cargo.toml +++ b/crates/view/Cargo.toml @@ -31,7 +31,7 @@ penumbra-governance = { path = "../core/component/governance", default-features penumbra-stake = { path = "../core/component/stake", default-features = false } penumbra-ibc = { path = "../core/component/ibc", default-features = false } penumbra-distributions = { path = "../core/component/distributions", default-features = false } -penumbra-dao = { path = "../core/component/dao", default-features = false } +penumbra-community-pool = { path = "../core/component/community-pool", default-features = false } penumbra-dex = { path = "../core/component/dex", default-features = false } penumbra-sct = { path = "../core/component/sct", default-features = false } penumbra-fee = { path = "../core/component/fee", default-features = false } diff --git a/crates/view/src/planner.rs b/crates/view/src/planner.rs index 4bc6e0f07f..a9c40e2162 100644 --- a/crates/view/src/planner.rs +++ b/crates/view/src/planner.rs @@ -8,7 +8,7 @@ use anyhow::Result; use penumbra_asset::{asset, Balance, Value, STAKING_TOKEN_ASSET_ID}; use penumbra_chain::params::{ChainParameters, FmdParameters}; -use penumbra_dao::DaoDeposit; +use penumbra_community_pool::CommunityPoolDeposit; use penumbra_dex::{ lp::action::{PositionClose, PositionOpen}, lp::plan::PositionWithdrawPlan, @@ -357,10 +357,12 @@ impl Planner { self } - /// Deposit a value into the DAO. + /// Deposit a value into the Community Pool. #[instrument(skip(self))] - pub fn dao_deposit(&mut self, value: Value) -> &mut Self { - self.action(ActionPlan::DaoDeposit(DaoDeposit { value })); + pub fn community_pool_deposit(&mut self, value: Value) -> &mut Self { + self.action(ActionPlan::CommunityPoolDeposit(CommunityPoolDeposit { + value, + })); self } diff --git a/crates/view/src/storage.rs b/crates/view/src/storage.rs index e65dfc2362..9645914910 100644 --- a/crates/view/src/storage.rs +++ b/crates/view/src/storage.rs @@ -6,7 +6,7 @@ use parking_lot::Mutex; use penumbra_app::params::AppParameters; use penumbra_asset::{asset, asset::DenomMetadata, asset::Id, Value}; use penumbra_chain::params::{ChainParameters, FmdParameters}; -use penumbra_dao::params::DaoParameters; +use penumbra_community_pool::params::CommunityPoolParameters; use penumbra_dex::{ lp::position::{self, Position, State}, TradingPair, @@ -222,10 +222,11 @@ impl Storage { [fee_params_bytes], )?; - let dao_params_bytes = &DaoParameters::encode_to_vec(¶ms.dao_params)[..]; + let community_pool_params_bytes = + &CommunityPoolParameters::encode_to_vec(¶ms.community_pool_params)[..]; tx.execute( - "INSERT INTO dao_params (bytes) VALUES (?1)", - [dao_params_bytes], + "INSERT INTO community_pool_params (bytes) VALUES (?1)", + [community_pool_params_bytes], )?; let distributions_params_bytes = @@ -588,11 +589,11 @@ impl Storage { .prepare_cached("SELECT bytes FROM governance_params LIMIT 1")? .query_row([], |row| row.get::<_, Option>>("bytes"))? .ok_or_else(|| anyhow!("missing governance params"))?; - let dao_bytes = pool + let community_pool_bytes = pool .get()? - .prepare_cached("SELECT bytes FROM dao_params LIMIT 1")? + .prepare_cached("SELECT bytes FROM community_pool_params LIMIT 1")? .query_row([], |row| row.get::<_, Option>>("bytes"))? - .ok_or_else(|| anyhow!("missing dao params"))?; + .ok_or_else(|| anyhow!("missing Community Pool params"))?; let fee_bytes = pool .get()? .prepare_cached("SELECT bytes FROM fee_params LIMIT 1")? @@ -609,7 +610,9 @@ impl Storage { stake_params: StakeParameters::decode(stake_bytes.as_slice())?, ibc_params: IBCParameters::decode(ibc_bytes.as_slice())?, governance_params: GovernanceParameters::decode(governance_bytes.as_slice())?, - dao_params: DaoParameters::decode(dao_bytes.as_slice())?, + community_pool_params: CommunityPoolParameters::decode( + community_pool_bytes.as_slice(), + )?, fee_params: FeeParameters::decode(fee_bytes.as_slice())?, distributions_params: DistributionsParameters::decode( distributions_bytes.as_slice(), @@ -1385,10 +1388,10 @@ impl Storage { [fee_params_bytes], )?; - let dao_params_bytes = &DaoParameters::encode_to_vec(¶ms.dao_params)[..]; + let community_pool_params_bytes = &CommunityPoolParameters::encode_to_vec(¶ms.community_pool_params)[..]; dbtx.execute( - "UPDATE dao_params SET bytes = ?1", - [dao_params_bytes], + "UPDATE community_pool_params SET bytes = ?1", + [community_pool_params_bytes], )?; let distributions_params_bytes = &DistributionsParameters::encode_to_vec(¶ms.distributions_params)[..]; diff --git a/crates/view/src/storage/schema.sql b/crates/view/src/storage/schema.sql index 5ec09e8396..3722fbe6a1 100644 --- a/crates/view/src/storage/schema.sql +++ b/crates/view/src/storage/schema.sql @@ -9,7 +9,7 @@ CREATE TABLE stake_params (bytes BLOB NOT NULL); CREATE TABLE ibc_params (bytes BLOB NOT NULL); CREATE TABLE governance_params (bytes BLOB NOT NULL); CREATE TABLE chain_params (bytes BLOB NOT NULL); -CREATE TABLE dao_params (bytes BLOB NOT NULL); +CREATE TABLE community_pool_params (bytes BLOB NOT NULL); CREATE TABLE fee_params (bytes BLOB NOT NULL); CREATE TABLE distributions_params (bytes BLOB NOT NULL); CREATE TABLE fmd_parameters (bytes BLOB NOT NULL); diff --git a/deployments/scripts/rust-docs b/deployments/scripts/rust-docs index 149fbea3f1..b8bacd2041 100755 --- a/deployments/scripts/rust-docs +++ b/deployments/scripts/rust-docs @@ -38,7 +38,7 @@ cargo +nightly doc --no-deps \ -p penumbra-asset \ -p penumbra-chain \ -p penumbra-custody \ - -p penumbra-dao \ + -p penumbra-community-pool \ -p penumbra-dex \ -p penumbra-distributions \ -p penumbra-governance \ diff --git a/docs/guide/src/pcli/governance.md b/docs/guide/src/pcli/governance.md index fa7bab5453..0596cba343 100644 --- a/docs/guide/src/pcli/governance.md +++ b/docs/guide/src/pcli/governance.md @@ -14,7 +14,7 @@ in mind, here are some quick links: - [I want to submit a new proposal.](#submitting-a-proposal) - [I submitted a proposal and I want to withdraw it before voting concludes.](#withdrawing-a-proposal) - [Voting has concluded on a proposal I submitted and I want to claim my deposit.](#claiming-a-proposal-deposit) -- [I want to contribute funds to the DAO.](#contributing-to-the-dao) +- [I want to contribute funds to the Community Pool.](#contributing-to-the-community-pool) ## Getting Proposal Information @@ -114,7 +114,7 @@ boxes are the state of the proposal on chain, and colored circles are outcomes o ### Kinds Of Proposal There are 4 kinds of governance proposal on Penumbra: **signaling**, **emergency**, **parameter -change**, and **DAO spend**. +change**, and **community pool spend**. #### Signaling Proposals @@ -147,15 +147,15 @@ nothing happens. This is to prevent two simultaneous parameter change proposals each others' changes or merging with one another into an undesired state. Almost always, the set of old parameters should be the current parameters at the time the proposal is submitted. -#### DAO Spend Proposals +#### Community Pool Spend Proposals -DAO spend proposals submit a _transaction plan_ which may spend funds from the DAO if passed. +Community Pool spend proposals submit a _transaction plan_ which may spend funds from the Community Pool if passed. -DAO spend transactions have exclusive capability to use two special actions which are not allowed in -directly submitted user transactions: `DaoSpend` and `DaoOutput`. These actions, respectively, spend -funds from the DAO, and mint funds _transparently_ to an output address (unlike regular output -actions, which are shielded). DAO spend transactions are unable to use regular shielded outputs, -spend funds from any source other than the DAO itself, perform swaps, or submit, withdraw, or claim +Community Pool spend transactions have exclusive capability to use two special actions which are not allowed in +directly submitted user transactions: `CommunityPoolSpend` and `CommunityPoolOutput`. These actions, respectively, spend +funds from the Community Pool, and mint funds _transparently_ to an output address (unlike regular output +actions, which are shielded). Community Pool spend transactions are unable to use regular shielded outputs, +spend funds from any source other than the Community Pool itself, perform swaps, or submit, withdraw, or claim governance proposals. ### Submitting A Proposal @@ -188,42 +188,48 @@ for the proposal deposit after voting concludes, provided the proposal is not sl denomination `proposal_N_deposit`, where `N` is the ID of your proposal. Note that _whoever holds this NFT has exclusive control of the proposal_: they can withdraw it or claim the deposit. -#### Making A DAO Spend Transaction Plan +#### Making A Community Pool Spend Transaction Plan -In order to submit a DAO spend proposal, it is necessary to create a transaction plan. At present, +In order to submit a Community Pool spend proposal, it is necessary to create a transaction plan. At present, the only way to specify this is to provide a rather human-unfriendly JSON-formatted transaction plan, because there is no stable human-readable representation for a transaction plan at present. This will change in the future as better tooling is developed. -For now, here is a template for a transaction plan that withdraws 100 penumbra from the DAO and +For now, here is a template for a transaction plan that withdraws 100 penumbra from the Community Pool and sends it to a specified address (in this case, the address of the author of this document): ```json { - "fee": { "amount": { "lo": 0, "hi": 0 } }, - "actions": [ - { "daoSpend": { "value": { - "amount": { "lo": 100000000, "hi": 0 }, - "assetId": { "inner": "KeqcLzNx9qSH5+lcJHBB9KNW+YPrBk5dKzvPMiypahA=" } - } } }, - { "daoOutput": { - "value": { - "amount": { "lo": 100000000, "hi": 0 }, - "assetId": { "inner": "KeqcLzNx9qSH5+lcJHBB9KNW+YPrBk5dKzvPMiypahA=" } - }, - "address": { - "inner": "vzZ60xfMPPwewTiSb08jk5OdUjc0BhQ7IXLgHAayJoi5mvmlnTpqFuaPU2hCBhwaEwO2c03tBbN/GVh0+CajAjYBmBq3yHAbzNJCnZS8jUs=" - } - } } - ] + "fee": { "amount": { "lo": 0, "hi": 0 } }, + "actions": [ + { + "communityPoolSpend": { + "value": { + "amount": { "lo": 100000000, "hi": 0 }, + "assetId": { "inner": "KeqcLzNx9qSH5+lcJHBB9KNW+YPrBk5dKzvPMiypahA=" } + } + } + }, + { + "communityPoolOutput": { + "value": { + "amount": { "lo": 100000000, "hi": 0 }, + "assetId": { "inner": "KeqcLzNx9qSH5+lcJHBB9KNW+YPrBk5dKzvPMiypahA=" } + }, + "address": { + "inner": "vzZ60xfMPPwewTiSb08jk5OdUjc0BhQ7IXLgHAayJoi5mvmlnTpqFuaPU2hCBhwaEwO2c03tBbN/GVh0+CajAjYBmBq3yHAbzNJCnZS8jUs=" + } + } + } + ] } ``` Note that the asset ID and address are specified not in the usual bech32 formats you are used to seeing, but in base64. To get your address in this format, use `pcli view address 0 --base64`. -To template a DAO spend proposal using a JSON transaction plan, use the `pcli tx proposal template -dao-spend --transaction-plan .json`, which will take the transaction plan and include it +To template a Community Pool spend proposal using a JSON transaction plan, use the `pcli tx proposal template +community-pool-spend --transaction-plan .json`, which will take the transaction plan and include it in the generated proposal template. If no plan is specified, the transaction plan will be the empty transaction which does nothing when executed. @@ -261,34 +267,34 @@ proposal was not slashed (that is, it passed _or_ failed), this action will also original proposal deposit. Note that you _can_ claim a slashed proposal: you will receive the slashed proposal result NFT, but you will not receive the original proposal deposit. -## Contributing To The DAO +## Contributing To The Community Pool -Anyone can contribute any amount of any denomination to the Penumbra DAO. To do this, use the -command `pcli tx dao-deposit`, like so: +Anyone can contribute any amount of any denomination to the Penumbra Community Pool. To do this, use the +command `pcli tx community-pool-deposit`, like so: ```bash -pcli tx dao-deposit 100penumbra +pcli tx community-pool-deposit 100penumbra ``` -Funds contributed to the DAO cannot be withdrawn except by a successful DAO spend governance +Funds contributed to the Community Pool cannot be withdrawn except by a successful Community Pool spend governance proposal. -To query the current DAO balance, use `pcli query dao balance` with the **base denomination** of an +To query the current Community Pool balance, use `pcli query community-pool balance` with the **base denomination** of an asset or its asset ID (display denominations are not currently accepted). For example: ```bash -pcli query dao balance upenumbra +pcli query Community Pool balance upenumbra ``` -DAO spend proposals are only accepted for voting if they would not overdraw the current funds in the -DAO at the time the proposal is submitted, so it's worth checking this information before submitting +Community Pool spend proposals are only accepted for voting if they would not overdraw the current funds in the +Community Pool at the time the proposal is submitted, so it's worth checking this information before submitting such a proposal. -### Sending Validator Funding Streams To The DAO +### Sending Validator Funding Streams To The Community Pool -A validator may non-custodially send funds to the DAO, similarly to any other funding stream. To do +A validator may non-custodially send funds to the Community Pool, similarly to any other funding stream. To do this, add a `[[funding_stream]]` section to your validator definition TOML file that declares the -DAO as a recipient for a funding stream. For example, your definition might look like this: +Community Pool as a recipient for a funding stream. For example, your definition might look like this: ```toml sequence_number = 0 @@ -308,8 +314,8 @@ value = "tDk3/k8zjEyDQjQC1jUyv8nJ1cC1B/MgrDzeWvBTGDM=" recipient = "penumbrav2t1hum845ches70c8kp8zfx7nerjwfe653hxsrpgwepwtspcp4jy6ytnxhe5kwn56sku684x6zzqcwp5ycrkee5mmg9kdl3jkr5lqn2xq3kqxvp4d7gwqdue5jznk2ter2t66mk4n" rate_bps = 100 -# Send another 1% commission to the DAO: +# Send another 1% commission to the Community Pool: [[funding_stream]] -recipient = "DAO" +recipient = "CommunityPool" rate_bps = 100 ``` diff --git a/docs/guide/src/pcli/transaction.md b/docs/guide/src/pcli/transaction.md index 32bf0b5f21..212b8a7dc4 100644 --- a/docs/guide/src/pcli/transaction.md +++ b/docs/guide/src/pcli/transaction.md @@ -50,7 +50,7 @@ later to add the previously delegated funds to your wallet. Penumbra features on-chain governance similar to Cosmos Hub where anyone can submit proposals and both validators and delegators to vote on them. Penumbra's governance model incorporates a single -DAO account, into which anyone can freely deposit, but from which only a successful governance vote +Community Pool account, into which anyone can freely deposit, but from which only a successful governance vote can spend. For details on using governance, see the [governance section](./governance.md). ## Managing Liquidity Positions @@ -159,6 +159,7 @@ Penumbra's constant-price pool is a versatile market primitive, allowing users e ```bash pcli tx lp replicate xyk [--current-price AMT] [--fee-bps AMT] ``` + For instance, to provide ~100penumbra and ~100test_usd liquidity on the `penumbra:test_usd` pair with a pool fee of `33bps`, run: ```bash diff --git a/docs/guide/src/pd/validator.md b/docs/guide/src/pd/validator.md index c2f1f21048..1aa817da53 100644 --- a/docs/guide/src/pd/validator.md +++ b/docs/guide/src/pd/validator.md @@ -14,9 +14,9 @@ A validator definition contains fields defining metadata regarding your validator as well as funding streams, which are Penumbra's analogue to validator commissions. -The root of a validator's identity is their *identity key*. Currently, `pcli` +The root of a validator's identity is their _identity key_. Currently, `pcli` reuses the spend authorization key in whatever wallet is active as the -validator's identity key. This key is used to sign validator definitions that +validator's identity key. This key is used to sign validator definitions that update the configuration for a validator. #### Creating a template definition @@ -59,7 +59,7 @@ recipient = 'penumbrav2t1cntf73e36y3um4zmqm4j0zar3jyxvyfqxywwg5q6fjxzhe28qttppmc rate_bps = 100 [[funding_stream]] -recipient = "DAO" +recipient = "CommunityPool" rate_bps = 100 ``` @@ -78,7 +78,7 @@ Note that by default the `enabled` field is set to false and will need to be enabled in order to activate one's validator. In the default template, there is a funding stream declared to [contribute funds to the -DAO](../pcli/governance.md#contributing-to-the-dao). This is not required, and may be altered or +Community Pool](../pcli/governance.md#contributing-to-the-community-pool). This is not required, and may be altered or removed if you wish. #### Setting the consensus key @@ -104,11 +104,11 @@ as the `value` field under the `[consensus_key]` heading. #### Configuring funding streams Unlike the Cosmos SDK, which has validators specify a commission percentage that -goes to the validator, Penumbra uses *funding streams*, a list of pairs of -commission amounts and addresses. This design allows validators to dedicate +goes to the validator, Penumbra uses _funding streams_, a list of pairs of +commission amounts and addresses. This design allows validators to dedicate portions of their commission non-custodially -- for instance, a validator could declare some amount of commission to cover their operating costs, and another -that would be sent to an address controlled by a DAO. +that would be sent to an address controlled by the Community Pool. ## Uploading a definition @@ -150,11 +150,11 @@ pcli view balance ``` Voting power will be calculated on the next epoch transition after your -delegation takes place. Assuming that your delegation was enough to place your +delegation takes place. Assuming that your delegation was enough to place your validator in the top N validators by voting power, it should appear in the -validator list as `Active` after the next epoch transition. The epoch duration +validator list as `Active` after the next epoch transition. The epoch duration and the active validator limit are chain parameters, and will vary by -deployment. You can find the values in use for the current chain in its +deployment. You can find the values in use for the current chain in its `genesis.json` file. ## Updating your validator diff --git a/docs/protocol/src/governance.md b/docs/protocol/src/governance.md index d36c5f977b..3b6593801e 100644 --- a/docs/protocol/src/governance.md +++ b/docs/protocol/src/governance.md @@ -59,7 +59,7 @@ proposal deposit itself, provided the deposit has not been slashed. This is the ### Kinds Of Proposal There are 4 kinds of governance proposals on Penumbra: **signaling**, **emergency**, **parameter -change**, and **DAO spend**. +change**, and **community pool spend**. #### Signaling Proposals @@ -92,15 +92,15 @@ nothing happens. This is to prevent two simultaneous parameter change proposals each others' changes or merging with one another into an undesired state. Almost always, the set of old parameters should be the current parameters at the time the proposal is submitted. -#### DAO Spend Proposals +#### Community Pool Spend Proposals -DAO spend proposals submit a _transaction plan_ which may spend funds from the DAO if passed. +Community Pool spend proposals submit a _transaction plan_ which may spend funds from the Community Pool if passed. -DAO spend transactions have exclusive capability to use two special actions which are not allowed in -directly submitted user transactions: `DaoSpend` and `DaoOutput`. These actions, respectively, spend -funds from the DAO, and mint funds _transparently_ to an output address (unlike regular output -actions, which are shielded). DAO spend transactions are unable to use regular shielded outputs, -spend funds from any source other than the DAO itself, perform swaps, or submit, withdraw, or claim +Community Pool spend transactions have exclusive capability to use two special actions which are not allowed in +directly submitted user transactions: `CommunityPoolSpend` and `CommunityPoolOutput`. These actions, respectively, spend +funds from the Community Pool, and mint funds _transparently_ to an output address (unlike regular output +actions, which are shielded). Community Pool spend transactions are unable to use regular shielded outputs, +spend funds from any source other than the Community Pool itself, perform swaps, or submit, withdraw, or claim governance proposals. ## Validator Voting @@ -123,13 +123,13 @@ votes on different proposals from being linkable by correlating nullifiers. If t submitted concurrently, it is not possible for the delegator to prevent their votes on the two proposals from being linked; this is considered an acceptable sacrifice. -## Contributing To The DAO +## Contributing To The Community Pool -Anyone can contribute any amount of any denomination to the Penumbra DAO. Funds contributed to the -DAO cannot be withdrawn except by a successful DAO spend governance proposal. DAO spend proposals -are only accepted for voting if they would not overdraw the current funds in the DAO at the time the +Anyone can contribute any amount of any denomination to the Penumbra Community Pool. Funds contributed to the +Community Pool cannot be withdrawn except by a successful Community Pool spend governance proposal. Community Pool spend proposals +are only accepted for voting if they would not overdraw the current funds in the Community Pool at the time the proposal is submitted. -A validator may non-custodially send funds to the DAO, similarly to any other funding stream. To do +A validator may non-custodially send funds to the Community Pool, similarly to any other funding stream. To do this, a validator declares in their validator declaration that one of their funding streams has the -DAO as a recipient rather than a penumbra address. +Community Pool as a recipient rather than a penumbra address. diff --git a/docs/rustdoc/index.html b/docs/rustdoc/index.html index 87dc3287ab..8fa4dbf88f 100644 --- a/docs/rustdoc/index.html +++ b/docs/rustdoc/index.html @@ -1 +1 @@ -Index of crates

\ No newline at end of file +Index of crates
\ No newline at end of file diff --git a/proto/go/gen/penumbra/core/app/v1alpha1/app.pb.go b/proto/go/gen/penumbra/core/app/v1alpha1/app.pb.go index ff135d7606..7b6789a8ed 100644 --- a/proto/go/gen/penumbra/core/app/v1alpha1/app.pb.go +++ b/proto/go/gen/penumbra/core/app/v1alpha1/app.pb.go @@ -8,7 +8,7 @@ package appv1alpha1 import ( v1alpha11 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/chain/v1alpha1" - v1alpha12 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/dao/v1alpha1" + v1alpha12 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/community_pool/v1alpha1" v1alpha17 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/distributions/v1alpha1" v1alpha16 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/fee/v1alpha1" v1alpha13 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/governance/v1alpha1" @@ -152,8 +152,8 @@ type AppParameters struct { // Chain module parameters. ChainParams *v1alpha11.ChainParameters `protobuf:"bytes,1,opt,name=chain_params,json=chainParams,proto3" json:"chain_params,omitempty"` - // DAO module parameters. - DaoParams *v1alpha12.DaoParameters `protobuf:"bytes,2,opt,name=dao_params,json=daoParams,proto3" json:"dao_params,omitempty"` + // Community Pool module parameters. + CommunityPoolParams *v1alpha12.CommunityPoolParameters `protobuf:"bytes,2,opt,name=community_pool_params,json=communityPoolParams,proto3" json:"community_pool_params,omitempty"` // Governance module parameters. GovernanceParams *v1alpha13.GovernanceParameters `protobuf:"bytes,3,opt,name=governance_params,json=governanceParams,proto3" json:"governance_params,omitempty"` // IBC module parameters. @@ -205,9 +205,9 @@ func (x *AppParameters) GetChainParams() *v1alpha11.ChainParameters { return nil } -func (x *AppParameters) GetDaoParams() *v1alpha12.DaoParameters { +func (x *AppParameters) GetCommunityPoolParams() *v1alpha12.CommunityPoolParameters { if x != nil { - return x.DaoParams + return x.CommunityPoolParams } return nil } @@ -439,8 +439,8 @@ type GenesisContent struct { IbcContent *v1alpha14.GenesisContent `protobuf:"bytes,4,opt,name=ibc_content,json=ibcContent,proto3" json:"ibc_content,omitempty"` // Chain module genesis state. ChainContent *v1alpha11.GenesisContent `protobuf:"bytes,5,opt,name=chain_content,json=chainContent,proto3" json:"chain_content,omitempty"` - // DAO module genesis state. - DaoContent *v1alpha12.GenesisContent `protobuf:"bytes,6,opt,name=dao_content,json=daoContent,proto3" json:"dao_content,omitempty"` + // Community Pool module genesis state. + CommunityPoolContent *v1alpha12.GenesisContent `protobuf:"bytes,6,opt,name=community_pool_content,json=communityPoolContent,proto3" json:"community_pool_content,omitempty"` // Fee module genesis state. FeeContent *v1alpha16.GenesisContent `protobuf:"bytes,7,opt,name=fee_content,json=feeContent,proto3" json:"fee_content,omitempty"` // Distributions module genesis state. @@ -514,9 +514,9 @@ func (x *GenesisContent) GetChainContent() *v1alpha11.GenesisContent { return nil } -func (x *GenesisContent) GetDaoContent() *v1alpha12.GenesisContent { +func (x *GenesisContent) GetCommunityPoolContent() *v1alpha12.GenesisContent { if x != nil { - return x.DaoContent + return x.CommunityPoolContent } return nil } @@ -545,62 +545,66 @@ var file_penumbra_core_app_v1alpha1_app_proto_rawDesc = []byte{ 0x61, 0x31, 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x44, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, - 0x64, 0x61, 0x6f, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x61, 0x6f, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x42, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, - 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2f, 0x66, 0x65, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2f, 0x66, 0x65, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3c, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2f, 0x69, 0x62, 0x63, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, - 0x62, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x42, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, - 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x32, 0x70, 0x65, + 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x42, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x34, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5b, 0x0a, 0x1b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, - 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x22, 0x96, 0x01, 0x0a, 0x1c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xaf, 0x05, 0x0a, - 0x0d, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5a, - 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x64, 0x61, - 0x6f, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x61, 0x6f, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x6e, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x69, 0x73, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x66, 0x65, 0x65, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x66, 0x65, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x3c, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x69, 0x62, 0x63, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, 0x62, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x42, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x74, 0x61, 0x6b, + 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5b, 0x0a, 0x1b, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x48, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x96, 0x01, 0x0a, 0x1c, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x48, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x0c, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x22, 0xd9, 0x05, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x5a, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x12, 0x7c, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, + 0x6f, 0x6c, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x48, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x6e, 0x0a, 0x11, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, @@ -652,7 +656,7 @@ var file_penumbra_core_app_v1alpha1_app_proto_rawDesc = []byte{ 0x69, 0x73, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x67, 0x65, 0x6e, 0x65, - 0x73, 0x69, 0x73, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xa4, 0x06, + 0x73, 0x69, 0x73, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xc4, 0x06, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x5b, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, @@ -685,12 +689,14 @@ var file_penumbra_core_app_v1alpha1_app_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x12, 0x55, 0x0a, 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x64, 0x61, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x64, 0x61, - 0x6f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x55, 0x0a, 0x0b, 0x66, 0x65, 0x65, 0x5f, + 0x74, 0x12, 0x75, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, + 0x6f, 0x6f, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, + 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x55, 0x0a, 0x0b, 0x66, 0x65, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, @@ -763,7 +769,7 @@ var file_penumbra_core_app_v1alpha1_app_proto_goTypes = []interface{}{ (*GenesisContent)(nil), // 6: penumbra.core.app.v1alpha1.GenesisContent (*v1alpha1.Transaction)(nil), // 7: penumbra.core.transaction.v1alpha1.Transaction (*v1alpha11.ChainParameters)(nil), // 8: penumbra.core.component.chain.v1alpha1.ChainParameters - (*v1alpha12.DaoParameters)(nil), // 9: penumbra.core.component.dao.v1alpha1.DaoParameters + (*v1alpha12.CommunityPoolParameters)(nil), // 9: penumbra.core.component.community_pool.v1alpha1.CommunityPoolParameters (*v1alpha13.GovernanceParameters)(nil), // 10: penumbra.core.component.governance.v1alpha1.GovernanceParameters (*v1alpha14.IbcParameters)(nil), // 11: penumbra.core.component.ibc.v1alpha1.IbcParameters (*v1alpha15.StakeParameters)(nil), // 12: penumbra.core.component.stake.v1alpha1.StakeParameters @@ -774,14 +780,14 @@ var file_penumbra_core_app_v1alpha1_app_proto_goTypes = []interface{}{ (*v1alpha13.GenesisContent)(nil), // 17: penumbra.core.component.governance.v1alpha1.GenesisContent (*v1alpha14.GenesisContent)(nil), // 18: penumbra.core.component.ibc.v1alpha1.GenesisContent (*v1alpha11.GenesisContent)(nil), // 19: penumbra.core.component.chain.v1alpha1.GenesisContent - (*v1alpha12.GenesisContent)(nil), // 20: penumbra.core.component.dao.v1alpha1.GenesisContent + (*v1alpha12.GenesisContent)(nil), // 20: penumbra.core.component.community_pool.v1alpha1.GenesisContent (*v1alpha16.GenesisContent)(nil), // 21: penumbra.core.component.fee.v1alpha1.GenesisContent (*v1alpha17.GenesisContent)(nil), // 22: penumbra.core.component.distributions.v1alpha1.GenesisContent } var file_penumbra_core_app_v1alpha1_app_proto_depIdxs = []int32{ 7, // 0: penumbra.core.app.v1alpha1.TransactionsByHeightResponse.transactions:type_name -> penumbra.core.transaction.v1alpha1.Transaction 8, // 1: penumbra.core.app.v1alpha1.AppParameters.chain_params:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters - 9, // 2: penumbra.core.app.v1alpha1.AppParameters.dao_params:type_name -> penumbra.core.component.dao.v1alpha1.DaoParameters + 9, // 2: penumbra.core.app.v1alpha1.AppParameters.community_pool_params:type_name -> penumbra.core.component.community_pool.v1alpha1.CommunityPoolParameters 10, // 3: penumbra.core.app.v1alpha1.AppParameters.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters 11, // 4: penumbra.core.app.v1alpha1.AppParameters.ibc_params:type_name -> penumbra.core.component.ibc.v1alpha1.IbcParameters 12, // 5: penumbra.core.app.v1alpha1.AppParameters.stake_params:type_name -> penumbra.core.component.stake.v1alpha1.StakeParameters @@ -794,7 +800,7 @@ var file_penumbra_core_app_v1alpha1_app_proto_depIdxs = []int32{ 17, // 12: penumbra.core.app.v1alpha1.GenesisContent.governance_content:type_name -> penumbra.core.component.governance.v1alpha1.GenesisContent 18, // 13: penumbra.core.app.v1alpha1.GenesisContent.ibc_content:type_name -> penumbra.core.component.ibc.v1alpha1.GenesisContent 19, // 14: penumbra.core.app.v1alpha1.GenesisContent.chain_content:type_name -> penumbra.core.component.chain.v1alpha1.GenesisContent - 20, // 15: penumbra.core.app.v1alpha1.GenesisContent.dao_content:type_name -> penumbra.core.component.dao.v1alpha1.GenesisContent + 20, // 15: penumbra.core.app.v1alpha1.GenesisContent.community_pool_content:type_name -> penumbra.core.component.community_pool.v1alpha1.GenesisContent 21, // 16: penumbra.core.app.v1alpha1.GenesisContent.fee_content:type_name -> penumbra.core.component.fee.v1alpha1.GenesisContent 22, // 17: penumbra.core.app.v1alpha1.GenesisContent.distributions_content:type_name -> penumbra.core.component.distributions.v1alpha1.GenesisContent 3, // 18: penumbra.core.app.v1alpha1.QueryService.AppParameters:input_type -> penumbra.core.app.v1alpha1.AppParametersRequest diff --git a/proto/go/gen/penumbra/core/component/community_pool/v1alpha1/community_pool.pb.go b/proto/go/gen/penumbra/core/component/community_pool/v1alpha1/community_pool.pb.go new file mode 100644 index 0000000000..a6403397c5 --- /dev/null +++ b/proto/go/gen/penumbra/core/component/community_pool/v1alpha1/community_pool.pb.go @@ -0,0 +1,422 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.32.0 +// protoc (unknown) +// source: penumbra/core/component/community_pool/v1alpha1/community_pool.proto + +package community_poolv1alpha1 + +import ( + v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/asset/v1alpha1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// CommunityPool parameter data. +type CommunityPoolParameters struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Whether Community Pool spend proposals are enabled. + CommunityPoolSpendProposalsEnabled bool `protobuf:"varint,1,opt,name=community_pool_spend_proposals_enabled,json=communityPoolSpendProposalsEnabled,proto3" json:"community_pool_spend_proposals_enabled,omitempty"` +} + +func (x *CommunityPoolParameters) Reset() { + *x = CommunityPoolParameters{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CommunityPoolParameters) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CommunityPoolParameters) ProtoMessage() {} + +func (x *CommunityPoolParameters) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CommunityPoolParameters.ProtoReflect.Descriptor instead. +func (*CommunityPoolParameters) Descriptor() ([]byte, []int) { + return file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_rawDescGZIP(), []int{0} +} + +func (x *CommunityPoolParameters) GetCommunityPoolSpendProposalsEnabled() bool { + if x != nil { + return x.CommunityPoolSpendProposalsEnabled + } + return false +} + +// CommunityPool genesis state. +type GenesisContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // CommunityPool parameters. + CommunityPoolParams *CommunityPoolParameters `protobuf:"bytes,1,opt,name=community_pool_params,json=communityPoolParams,proto3" json:"community_pool_params,omitempty"` +} + +func (x *GenesisContent) Reset() { + *x = GenesisContent{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisContent) ProtoMessage() {} + +func (x *GenesisContent) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenesisContent.ProtoReflect.Descriptor instead. +func (*GenesisContent) Descriptor() ([]byte, []int) { + return file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_rawDescGZIP(), []int{1} +} + +func (x *GenesisContent) GetCommunityPoolParams() *CommunityPoolParameters { + if x != nil { + return x.CommunityPoolParams + } + return nil +} + +// Requests the list of all asset balances associated with the Community Pool. +type CommunityPoolAssetBalancesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The expected chain id (empty string if no expectation). + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + // (Optional): The specific asset balances to retrieve, if excluded all will be returned. + AssetIds []*v1alpha1.AssetId `protobuf:"bytes,2,rep,name=asset_ids,json=assetIds,proto3" json:"asset_ids,omitempty"` +} + +func (x *CommunityPoolAssetBalancesRequest) Reset() { + *x = CommunityPoolAssetBalancesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CommunityPoolAssetBalancesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CommunityPoolAssetBalancesRequest) ProtoMessage() {} + +func (x *CommunityPoolAssetBalancesRequest) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CommunityPoolAssetBalancesRequest.ProtoReflect.Descriptor instead. +func (*CommunityPoolAssetBalancesRequest) Descriptor() ([]byte, []int) { + return file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_rawDescGZIP(), []int{2} +} + +func (x *CommunityPoolAssetBalancesRequest) GetChainId() string { + if x != nil { + return x.ChainId + } + return "" +} + +func (x *CommunityPoolAssetBalancesRequest) GetAssetIds() []*v1alpha1.AssetId { + if x != nil { + return x.AssetIds + } + return nil +} + +// The Community Pool's balance of a single asset. +type CommunityPoolAssetBalancesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The balance for a single asset. + Balance *v1alpha1.Value `protobuf:"bytes,1,opt,name=balance,proto3" json:"balance,omitempty"` +} + +func (x *CommunityPoolAssetBalancesResponse) Reset() { + *x = CommunityPoolAssetBalancesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CommunityPoolAssetBalancesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CommunityPoolAssetBalancesResponse) ProtoMessage() {} + +func (x *CommunityPoolAssetBalancesResponse) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CommunityPoolAssetBalancesResponse.ProtoReflect.Descriptor instead. +func (*CommunityPoolAssetBalancesResponse) Descriptor() ([]byte, []int) { + return file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_rawDescGZIP(), []int{3} +} + +func (x *CommunityPoolAssetBalancesResponse) GetBalance() *v1alpha1.Value { + if x != nil { + return x.Balance + } + return nil +} + +var File_penumbra_core_component_community_pool_v1alpha1_community_pool_proto protoreflect.FileDescriptor + +var file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_rawDesc = []byte{ + 0x0a, 0x44, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x28, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2f, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x6d, 0x0a, 0x17, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, + 0x6f, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x52, 0x0a, 0x26, + 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, + 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x5f, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x22, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, + 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x22, 0x8e, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, + 0x6f, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x13, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x22, 0x82, 0x01, 0x0a, 0x21, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, + 0x6f, 0x6f, 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x49, 0x64, 0x12, 0x42, 0x0a, 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x61, 0x73, + 0x73, 0x65, 0x74, 0x49, 0x64, 0x73, 0x22, 0x63, 0x0a, 0x22, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x07, + 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, + 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x32, 0xd8, 0x01, 0x0a, 0x0c, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xc7, 0x01, 0x0a, + 0x1a, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x52, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x53, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x9d, 0x03, 0x0a, 0x33, 0x63, 0x6f, 0x6d, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x12, + 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x75, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, + 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, + 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, + 0x6f, 0x6f, 0x6c, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, + 0x43, 0x43, 0xaa, 0x02, 0x2e, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, + 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0xca, 0x02, 0x2e, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, + 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x43, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x5c, 0x56, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x3a, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, + 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x43, + 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x5c, 0x56, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x32, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, + 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x43, + 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x3a, 0x3a, 0x56, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_rawDescOnce sync.Once + file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_rawDescData = file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_rawDesc +) + +func file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_rawDescGZIP() []byte { + file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_rawDescOnce.Do(func() { + file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_rawDescData = protoimpl.X.CompressGZIP(file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_rawDescData) + }) + return file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_rawDescData +} + +var file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_goTypes = []interface{}{ + (*CommunityPoolParameters)(nil), // 0: penumbra.core.component.community_pool.v1alpha1.CommunityPoolParameters + (*GenesisContent)(nil), // 1: penumbra.core.component.community_pool.v1alpha1.GenesisContent + (*CommunityPoolAssetBalancesRequest)(nil), // 2: penumbra.core.component.community_pool.v1alpha1.CommunityPoolAssetBalancesRequest + (*CommunityPoolAssetBalancesResponse)(nil), // 3: penumbra.core.component.community_pool.v1alpha1.CommunityPoolAssetBalancesResponse + (*v1alpha1.AssetId)(nil), // 4: penumbra.core.asset.v1alpha1.AssetId + (*v1alpha1.Value)(nil), // 5: penumbra.core.asset.v1alpha1.Value +} +var file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_depIdxs = []int32{ + 0, // 0: penumbra.core.component.community_pool.v1alpha1.GenesisContent.community_pool_params:type_name -> penumbra.core.component.community_pool.v1alpha1.CommunityPoolParameters + 4, // 1: penumbra.core.component.community_pool.v1alpha1.CommunityPoolAssetBalancesRequest.asset_ids:type_name -> penumbra.core.asset.v1alpha1.AssetId + 5, // 2: penumbra.core.component.community_pool.v1alpha1.CommunityPoolAssetBalancesResponse.balance:type_name -> penumbra.core.asset.v1alpha1.Value + 2, // 3: penumbra.core.component.community_pool.v1alpha1.QueryService.CommunityPoolAssetBalances:input_type -> penumbra.core.component.community_pool.v1alpha1.CommunityPoolAssetBalancesRequest + 3, // 4: penumbra.core.component.community_pool.v1alpha1.QueryService.CommunityPoolAssetBalances:output_type -> penumbra.core.component.community_pool.v1alpha1.CommunityPoolAssetBalancesResponse + 4, // [4:5] is the sub-list for method output_type + 3, // [3:4] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_init() } +func file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_init() { + if File_penumbra_core_component_community_pool_v1alpha1_community_pool_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CommunityPoolParameters); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CommunityPoolAssetBalancesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CommunityPoolAssetBalancesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_goTypes, + DependencyIndexes: file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_depIdxs, + MessageInfos: file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_msgTypes, + }.Build() + File_penumbra_core_component_community_pool_v1alpha1_community_pool_proto = out.File + file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_rawDesc = nil + file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_goTypes = nil + file_penumbra_core_component_community_pool_v1alpha1_community_pool_proto_depIdxs = nil +} diff --git a/proto/go/gen/penumbra/core/component/dao/v1alpha1/dao.pb.go b/proto/go/gen/penumbra/core/component/dao/v1alpha1/dao.pb.go deleted file mode 100644 index bc58764418..0000000000 --- a/proto/go/gen/penumbra/core/component/dao/v1alpha1/dao.pb.go +++ /dev/null @@ -1,406 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.32.0 -// protoc (unknown) -// source: penumbra/core/component/dao/v1alpha1/dao.proto - -package daov1alpha1 - -import ( - v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/asset/v1alpha1" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Dao parameter data. -type DaoParameters struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Whether DAO spend proposals are enabled. - DaoSpendProposalsEnabled bool `protobuf:"varint,1,opt,name=dao_spend_proposals_enabled,json=daoSpendProposalsEnabled,proto3" json:"dao_spend_proposals_enabled,omitempty"` -} - -func (x *DaoParameters) Reset() { - *x = DaoParameters{} - if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DaoParameters) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DaoParameters) ProtoMessage() {} - -func (x *DaoParameters) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DaoParameters.ProtoReflect.Descriptor instead. -func (*DaoParameters) Descriptor() ([]byte, []int) { - return file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescGZIP(), []int{0} -} - -func (x *DaoParameters) GetDaoSpendProposalsEnabled() bool { - if x != nil { - return x.DaoSpendProposalsEnabled - } - return false -} - -// Dao genesis state. -type GenesisContent struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Dao parameters. - DaoParams *DaoParameters `protobuf:"bytes,1,opt,name=dao_params,json=daoParams,proto3" json:"dao_params,omitempty"` -} - -func (x *GenesisContent) Reset() { - *x = GenesisContent{} - if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GenesisContent) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GenesisContent) ProtoMessage() {} - -func (x *GenesisContent) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GenesisContent.ProtoReflect.Descriptor instead. -func (*GenesisContent) Descriptor() ([]byte, []int) { - return file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescGZIP(), []int{1} -} - -func (x *GenesisContent) GetDaoParams() *DaoParameters { - if x != nil { - return x.DaoParams - } - return nil -} - -// Requests the list of all asset balances associated with the DAO. -type DaoAssetBalancesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The expected chain id (empty string if no expectation). - ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` - // (Optional): The specific asset balances to retrieve, if excluded all will be returned. - AssetIds []*v1alpha1.AssetId `protobuf:"bytes,2,rep,name=asset_ids,json=assetIds,proto3" json:"asset_ids,omitempty"` -} - -func (x *DaoAssetBalancesRequest) Reset() { - *x = DaoAssetBalancesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DaoAssetBalancesRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DaoAssetBalancesRequest) ProtoMessage() {} - -func (x *DaoAssetBalancesRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DaoAssetBalancesRequest.ProtoReflect.Descriptor instead. -func (*DaoAssetBalancesRequest) Descriptor() ([]byte, []int) { - return file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescGZIP(), []int{2} -} - -func (x *DaoAssetBalancesRequest) GetChainId() string { - if x != nil { - return x.ChainId - } - return "" -} - -func (x *DaoAssetBalancesRequest) GetAssetIds() []*v1alpha1.AssetId { - if x != nil { - return x.AssetIds - } - return nil -} - -// The DAO's balance of a single asset. -type DaoAssetBalancesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The balance for a single asset. - Balance *v1alpha1.Value `protobuf:"bytes,1,opt,name=balance,proto3" json:"balance,omitempty"` -} - -func (x *DaoAssetBalancesResponse) Reset() { - *x = DaoAssetBalancesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DaoAssetBalancesResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DaoAssetBalancesResponse) ProtoMessage() {} - -func (x *DaoAssetBalancesResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DaoAssetBalancesResponse.ProtoReflect.Descriptor instead. -func (*DaoAssetBalancesResponse) Descriptor() ([]byte, []int) { - return file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescGZIP(), []int{3} -} - -func (x *DaoAssetBalancesResponse) GetBalance() *v1alpha1.Value { - if x != nil { - return x.Balance - } - return nil -} - -var File_penumbra_core_component_dao_v1alpha1_dao_proto protoreflect.FileDescriptor - -var file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDesc = []byte{ - 0x0a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x61, 0x6f, 0x2f, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x61, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x24, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x61, 0x6f, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x28, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x4e, 0x0a, 0x0d, 0x44, 0x61, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x22, 0x64, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x64, 0x61, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, - 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x09, 0x64, 0x61, 0x6f, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x78, 0x0a, 0x17, 0x44, 0x61, 0x6f, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x09, - 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x73, - 0x22, 0x59, 0x0a, 0x18, 0x44, 0x61, 0x6f, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x07, - 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x32, 0xa4, 0x01, 0x0a, 0x0c, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x93, 0x01, 0x0a, - 0x10, 0x44, 0x61, 0x6f, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x73, 0x12, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x61, 0x6f, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x61, 0x6f, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x42, 0xca, 0x02, 0x0a, 0x28, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x64, 0x61, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, - 0x08, 0x44, 0x61, 0x6f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x61, 0x6f, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x3b, 0x64, 0x61, 0x6f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, - 0x43, 0x43, 0x44, 0xaa, 0x02, 0x24, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, - 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x61, - 0x6f, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x24, 0x50, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x44, 0x61, 0x6f, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0xe2, 0x02, 0x30, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, - 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x44, 0x61, 0x6f, 0x5c, - 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, - 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x3a, 0x3a, 0x44, 0x61, 0x6f, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescOnce sync.Once - file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescData = file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDesc -) - -func file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescGZIP() []byte { - file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescOnce.Do(func() { - file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescData = protoimpl.X.CompressGZIP(file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescData) - }) - return file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescData -} - -var file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_penumbra_core_component_dao_v1alpha1_dao_proto_goTypes = []interface{}{ - (*DaoParameters)(nil), // 0: penumbra.core.component.dao.v1alpha1.DaoParameters - (*GenesisContent)(nil), // 1: penumbra.core.component.dao.v1alpha1.GenesisContent - (*DaoAssetBalancesRequest)(nil), // 2: penumbra.core.component.dao.v1alpha1.DaoAssetBalancesRequest - (*DaoAssetBalancesResponse)(nil), // 3: penumbra.core.component.dao.v1alpha1.DaoAssetBalancesResponse - (*v1alpha1.AssetId)(nil), // 4: penumbra.core.asset.v1alpha1.AssetId - (*v1alpha1.Value)(nil), // 5: penumbra.core.asset.v1alpha1.Value -} -var file_penumbra_core_component_dao_v1alpha1_dao_proto_depIdxs = []int32{ - 0, // 0: penumbra.core.component.dao.v1alpha1.GenesisContent.dao_params:type_name -> penumbra.core.component.dao.v1alpha1.DaoParameters - 4, // 1: penumbra.core.component.dao.v1alpha1.DaoAssetBalancesRequest.asset_ids:type_name -> penumbra.core.asset.v1alpha1.AssetId - 5, // 2: penumbra.core.component.dao.v1alpha1.DaoAssetBalancesResponse.balance:type_name -> penumbra.core.asset.v1alpha1.Value - 2, // 3: penumbra.core.component.dao.v1alpha1.QueryService.DaoAssetBalances:input_type -> penumbra.core.component.dao.v1alpha1.DaoAssetBalancesRequest - 3, // 4: penumbra.core.component.dao.v1alpha1.QueryService.DaoAssetBalances:output_type -> penumbra.core.component.dao.v1alpha1.DaoAssetBalancesResponse - 4, // [4:5] is the sub-list for method output_type - 3, // [3:4] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name -} - -func init() { file_penumbra_core_component_dao_v1alpha1_dao_proto_init() } -func file_penumbra_core_component_dao_v1alpha1_dao_proto_init() { - if File_penumbra_core_component_dao_v1alpha1_dao_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DaoParameters); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenesisContent); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DaoAssetBalancesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DaoAssetBalancesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDesc, - NumEnums: 0, - NumMessages: 4, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_penumbra_core_component_dao_v1alpha1_dao_proto_goTypes, - DependencyIndexes: file_penumbra_core_component_dao_v1alpha1_dao_proto_depIdxs, - MessageInfos: file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes, - }.Build() - File_penumbra_core_component_dao_v1alpha1_dao_proto = out.File - file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDesc = nil - file_penumbra_core_component_dao_v1alpha1_dao_proto_goTypes = nil - file_penumbra_core_component_dao_v1alpha1_dao_proto_depIdxs = nil -} diff --git a/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go b/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go index a3d3590a39..d726aaa837 100644 --- a/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go +++ b/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go @@ -9,7 +9,7 @@ package governancev1alpha1 import ( v1alpha13 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/asset/v1alpha1" v1alpha17 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/chain/v1alpha1" - v1alpha18 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/dao/v1alpha1" + v1alpha18 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/community_pool/v1alpha1" v1alpha111 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/distributions/v1alpha1" v1alpha110 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/fee/v1alpha1" v1alpha19 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/ibc/v1alpha1" @@ -871,17 +871,17 @@ func (x *DelegatorVotePlan) GetProofBlindingS() []byte { return nil } -type DaoDeposit struct { +type CommunityPoolDeposit struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The value to deposit into the DAO. + // The value to deposit into the Community Pool. Value *v1alpha13.Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` } -func (x *DaoDeposit) Reset() { - *x = DaoDeposit{} +func (x *CommunityPoolDeposit) Reset() { + *x = CommunityPoolDeposit{} if protoimpl.UnsafeEnabled { mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -889,13 +889,13 @@ func (x *DaoDeposit) Reset() { } } -func (x *DaoDeposit) String() string { +func (x *CommunityPoolDeposit) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DaoDeposit) ProtoMessage() {} +func (*CommunityPoolDeposit) ProtoMessage() {} -func (x *DaoDeposit) ProtoReflect() protoreflect.Message { +func (x *CommunityPoolDeposit) ProtoReflect() protoreflect.Message { mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -907,29 +907,29 @@ func (x *DaoDeposit) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DaoDeposit.ProtoReflect.Descriptor instead. -func (*DaoDeposit) Descriptor() ([]byte, []int) { +// Deprecated: Use CommunityPoolDeposit.ProtoReflect.Descriptor instead. +func (*CommunityPoolDeposit) Descriptor() ([]byte, []int) { return file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDescGZIP(), []int{11} } -func (x *DaoDeposit) GetValue() *v1alpha13.Value { +func (x *CommunityPoolDeposit) GetValue() *v1alpha13.Value { if x != nil { return x.Value } return nil } -type DaoSpend struct { +type CommunityPoolSpend struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The value to spend from the DAO. + // The value to spend from the Community Pool. Value *v1alpha13.Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` } -func (x *DaoSpend) Reset() { - *x = DaoSpend{} +func (x *CommunityPoolSpend) Reset() { + *x = CommunityPoolSpend{} if protoimpl.UnsafeEnabled { mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -937,13 +937,13 @@ func (x *DaoSpend) Reset() { } } -func (x *DaoSpend) String() string { +func (x *CommunityPoolSpend) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DaoSpend) ProtoMessage() {} +func (*CommunityPoolSpend) ProtoMessage() {} -func (x *DaoSpend) ProtoReflect() protoreflect.Message { +func (x *CommunityPoolSpend) ProtoReflect() protoreflect.Message { mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -955,31 +955,31 @@ func (x *DaoSpend) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DaoSpend.ProtoReflect.Descriptor instead. -func (*DaoSpend) Descriptor() ([]byte, []int) { +// Deprecated: Use CommunityPoolSpend.ProtoReflect.Descriptor instead. +func (*CommunityPoolSpend) Descriptor() ([]byte, []int) { return file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDescGZIP(), []int{12} } -func (x *DaoSpend) GetValue() *v1alpha13.Value { +func (x *CommunityPoolSpend) GetValue() *v1alpha13.Value { if x != nil { return x.Value } return nil } -type DaoOutput struct { +type CommunityPoolOutput struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The value to output from the DAO. + // The value to output from the Community Pool. Value *v1alpha13.Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` // The address to send the output to. Address *v1alpha12.Address `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` } -func (x *DaoOutput) Reset() { - *x = DaoOutput{} +func (x *CommunityPoolOutput) Reset() { + *x = CommunityPoolOutput{} if protoimpl.UnsafeEnabled { mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -987,13 +987,13 @@ func (x *DaoOutput) Reset() { } } -func (x *DaoOutput) String() string { +func (x *CommunityPoolOutput) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DaoOutput) ProtoMessage() {} +func (*CommunityPoolOutput) ProtoMessage() {} -func (x *DaoOutput) ProtoReflect() protoreflect.Message { +func (x *CommunityPoolOutput) ProtoReflect() protoreflect.Message { mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1005,19 +1005,19 @@ func (x *DaoOutput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DaoOutput.ProtoReflect.Descriptor instead. -func (*DaoOutput) Descriptor() ([]byte, []int) { +// Deprecated: Use CommunityPoolOutput.ProtoReflect.Descriptor instead. +func (*CommunityPoolOutput) Descriptor() ([]byte, []int) { return file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDescGZIP(), []int{13} } -func (x *DaoOutput) GetValue() *v1alpha13.Value { +func (x *CommunityPoolOutput) GetValue() *v1alpha13.Value { if x != nil { return x.Value } return nil } -func (x *DaoOutput) GetAddress() *v1alpha12.Address { +func (x *CommunityPoolOutput) GetAddress() *v1alpha12.Address { if x != nil { return x.Address } @@ -1361,11 +1361,11 @@ type Proposal struct { // A natural-language description of the effect of the proposal and its justification. Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` // The different kinds of proposal. Only one of these should be set. - Signaling *Proposal_Signaling `protobuf:"bytes,5,opt,name=signaling,proto3" json:"signaling,omitempty"` - Emergency *Proposal_Emergency `protobuf:"bytes,6,opt,name=emergency,proto3" json:"emergency,omitempty"` - ParameterChange *Proposal_ParameterChange `protobuf:"bytes,7,opt,name=parameter_change,json=parameterChange,proto3" json:"parameter_change,omitempty"` - DaoSpend *Proposal_DaoSpend `protobuf:"bytes,8,opt,name=dao_spend,json=daoSpend,proto3" json:"dao_spend,omitempty"` - UpgradePlan *Proposal_UpgradePlan `protobuf:"bytes,9,opt,name=upgrade_plan,json=upgradePlan,proto3" json:"upgrade_plan,omitempty"` + Signaling *Proposal_Signaling `protobuf:"bytes,5,opt,name=signaling,proto3" json:"signaling,omitempty"` + Emergency *Proposal_Emergency `protobuf:"bytes,6,opt,name=emergency,proto3" json:"emergency,omitempty"` + ParameterChange *Proposal_ParameterChange `protobuf:"bytes,7,opt,name=parameter_change,json=parameterChange,proto3" json:"parameter_change,omitempty"` + CommunityPoolSpend *Proposal_CommunityPoolSpend `protobuf:"bytes,8,opt,name=community_pool_spend,json=communityPoolSpend,proto3" json:"community_pool_spend,omitempty"` + UpgradePlan *Proposal_UpgradePlan `protobuf:"bytes,9,opt,name=upgrade_plan,json=upgradePlan,proto3" json:"upgrade_plan,omitempty"` } func (x *Proposal) Reset() { @@ -1442,9 +1442,9 @@ func (x *Proposal) GetParameterChange() *Proposal_ParameterChange { return nil } -func (x *Proposal) GetDaoSpend() *Proposal_DaoSpend { +func (x *Proposal) GetCommunityPoolSpend() *Proposal_CommunityPoolSpend { if x != nil { - return x.DaoSpend + return x.CommunityPoolSpend } return nil } @@ -2230,8 +2230,8 @@ type ChangedAppParameters struct { // Chain module parameters. ChainParams *v1alpha17.ChainParameters `protobuf:"bytes,1,opt,name=chain_params,json=chainParams,proto3" json:"chain_params,omitempty"` - // DAO module parameters. - DaoParams *v1alpha18.DaoParameters `protobuf:"bytes,2,opt,name=dao_params,json=daoParams,proto3" json:"dao_params,omitempty"` + // Community Pool module parameters. + CommunityPoolParams *v1alpha18.CommunityPoolParameters `protobuf:"bytes,2,opt,name=community_pool_params,json=communityPoolParams,proto3" json:"community_pool_params,omitempty"` // Governance module parameters. GovernanceParams *GovernanceParameters `protobuf:"bytes,3,opt,name=governance_params,json=governanceParams,proto3" json:"governance_params,omitempty"` // IBC module parameters. @@ -2283,9 +2283,9 @@ func (x *ChangedAppParameters) GetChainParams() *v1alpha17.ChainParameters { return nil } -func (x *ChangedAppParameters) GetDaoParams() *v1alpha18.DaoParameters { +func (x *ChangedAppParameters) GetCommunityPoolParams() *v1alpha18.CommunityPoolParameters { if x != nil { - return x.DaoParams + return x.CommunityPoolParams } return nil } @@ -3349,22 +3349,22 @@ func (x *Proposal_ParameterChange) GetNewParameters() *ChangedAppParameters { return nil } -// A DAO spend proposal describes zero or more transactions to execute on behalf of the DAO, with +// A Community Pool spend proposal describes zero or more transactions to execute on behalf of the Community Pool, with // access to its funds, and zero or more scheduled transactions from previous passed proposals to // cancel. -type Proposal_DaoSpend struct { +type Proposal_CommunityPoolSpend struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The transaction plan to be executed at the time the proposal is passed. This must be a - // transaction plan which can be executed by the DAO, which means it can't require any witness - // data or authorization signatures, but it may use the `DaoSpend` action. + // transaction plan which can be executed by the Community Pool, which means it can't require any witness + // data or authorization signatures, but it may use the `CommunityPoolSpend` action. TransactionPlan *anypb.Any `protobuf:"bytes,2,opt,name=transaction_plan,json=transactionPlan,proto3" json:"transaction_plan,omitempty"` } -func (x *Proposal_DaoSpend) Reset() { - *x = Proposal_DaoSpend{} +func (x *Proposal_CommunityPoolSpend) Reset() { + *x = Proposal_CommunityPoolSpend{} if protoimpl.UnsafeEnabled { mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3372,13 +3372,13 @@ func (x *Proposal_DaoSpend) Reset() { } } -func (x *Proposal_DaoSpend) String() string { +func (x *Proposal_CommunityPoolSpend) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Proposal_DaoSpend) ProtoMessage() {} +func (*Proposal_CommunityPoolSpend) ProtoMessage() {} -func (x *Proposal_DaoSpend) ProtoReflect() protoreflect.Message { +func (x *Proposal_CommunityPoolSpend) ProtoReflect() protoreflect.Message { mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3390,12 +3390,12 @@ func (x *Proposal_DaoSpend) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Proposal_DaoSpend.ProtoReflect.Descriptor instead. -func (*Proposal_DaoSpend) Descriptor() ([]byte, []int) { +// Deprecated: Use Proposal_CommunityPoolSpend.ProtoReflect.Descriptor instead. +func (*Proposal_CommunityPoolSpend) Descriptor() ([]byte, []int) { return file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDescGZIP(), []int{18, 3} } -func (x *Proposal_DaoSpend) GetTransactionPlan() *anypb.Any { +func (x *Proposal_CommunityPoolSpend) GetTransactionPlan() *anypb.Any { if x != nil { return x.TransactionPlan } @@ -3468,725 +3468,734 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDesc = 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, - 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x61, - 0x6f, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x61, 0x6f, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x42, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, - 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x69, - 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2f, 0x66, 0x65, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x66, - 0x65, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2f, 0x69, 0x62, 0x63, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, - 0x62, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2f, 0x73, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, - 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x42, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, - 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x32, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, - 0x6b, 0x65, 0x79, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6b, 0x65, - 0x79, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6e, 0x75, 0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, - 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2f, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, - 0x72, 0x64, 0x73, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2c, 0x0a, 0x14, 0x5a, 0x4b, - 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x6f, - 0x6f, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0xae, 0x01, 0x0a, 0x0e, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x51, 0x0a, 0x08, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x49, - 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x46, 0x0a, 0x10, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x1a, 0x0a, - 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x22, 0xd5, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x49, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, - 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x56, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, - 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x22, 0xba, 0x01, 0x0a, 0x0d, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x52, 0x0a, 0x04, 0x62, - 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x56, 0x6f, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, - 0x55, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, - 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, - 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x07, 0x61, - 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x22, 0x2d, 0x0a, 0x13, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, - 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0xf0, 0x02, 0x0a, 0x11, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x45, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x12, 0x4b, - 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x0e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, - 0x0d, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x58, - 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x44, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, + 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x42, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x66, 0x65, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x66, 0x65, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x69, 0x62, 0x63, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, 0x62, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x42, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x74, 0x61, 0x6b, + 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6e, 0x75, + 0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6e, 0x75, 0x6d, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, + 0x64, 0x73, 0x61, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x63, + 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x2c, 0x0a, 0x14, 0x5a, 0x4b, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, + 0x6f, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0xae, + 0x01, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x49, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, + 0x46, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, + 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0xd5, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x49, 0x0a, 0x0e, + 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x56, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, + 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x22, + 0xba, 0x01, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, + 0x65, 0x12, 0x52, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x52, + 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x55, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, 0x69, + 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, + 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x22, 0x2d, 0x0a, 0x13, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0xf0, 0x02, 0x0a, 0x11, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x42, 0x6f, 0x64, + 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x45, 0x0a, + 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, + 0x76, 0x6f, 0x74, 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, + 0x79, 0x12, 0x51, 0x0a, 0x0e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, + 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x0d, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x4b, 0x65, 0x79, 0x12, 0x58, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, + 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x93, + 0x02, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, + 0x12, 0x52, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x93, 0x02, 0x0a, 0x0d, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x52, 0x0a, 0x04, 0x62, 0x6f, - 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, + 0x62, 0x6f, 0x64, 0x79, 0x12, 0x55, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, 0x69, 0x67, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, + 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x12, 0x57, 0x0a, 0x05, 0x70, + 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x5a, 0x4b, 0x44, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x70, + 0x72, 0x6f, 0x6f, 0x66, 0x22, 0xc2, 0x03, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, + 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, + 0x76, 0x6f, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x4b, 0x0a, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0e, 0x75, 0x6e, + 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x09, + 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x02, 0x72, + 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, + 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x52, 0x02, 0x72, 0x6b, 0x22, 0x94, 0x04, 0x0a, 0x11, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x12, + 0x62, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x46, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, + 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, + 0x62, 0x6c, 0x65, 0x12, 0x5f, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, + 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, + 0x61, 0x71, 0x75, 0x65, 0x1a, 0xba, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, + 0x12, 0x61, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, + 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x56, 0x6f, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x55, - 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, - 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x07, 0x61, 0x75, - 0x74, 0x68, 0x53, 0x69, 0x67, 0x12, 0x57, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x5a, 0x4b, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, - 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0xc2, - 0x03, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, - 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x56, 0x6f, 0x74, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, + 0x6f, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, 0x74, + 0x65, 0x1a, 0x6b, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x61, 0x0a, 0x0e, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x52, + 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x42, 0x10, + 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, + 0x22, 0xe7, 0x03, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, + 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x04, 0x76, 0x6f, 0x74, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, + 0x12, 0x55, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x12, 0x39, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x0f, 0x75, 0x6e, 0x62, - 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0a, 0x73, 0x74, 0x61, + 0x6b, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x4e, 0x6f, 0x74, + 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x0f, 0x75, 0x6e, 0x62, + 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0e, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, - 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x02, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, - 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x52, - 0x02, 0x72, 0x6b, 0x22, 0x94, 0x04, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x12, 0x62, 0x0a, 0x07, 0x76, 0x69, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, - 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x5f, 0x0a, - 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, - 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xba, - 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x61, 0x0a, 0x0e, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x0d, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x4c, 0x0a, - 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, - 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, - 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x1a, 0x6b, 0x0a, 0x06, 0x4f, - 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x61, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x42, 0x10, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x22, 0xe7, 0x03, 0x0a, 0x11, 0x44, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x25, 0x0a, 0x0e, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x0b, 0x73, 0x74, - 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x4e, 0x6f, 0x74, - 0x65, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x65, - 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x12, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x0e, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, + 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, + 0x69, 0x7a, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x72, 0x61, 0x6e, 0x64, + 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, + 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x5f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, - 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, - 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x53, 0x22, 0x47, 0x0a, 0x0a, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, + 0x6e, 0x67, 0x5f, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, + 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x22, 0x51, 0x0a, 0x14, 0x43, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x0a, - 0x08, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x86, 0x01, 0x0a, 0x09, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3e, 0x0a, - 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, - 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x9d, 0x01, - 0x0a, 0x04, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, - 0x74, 0x65, 0x22, 0x49, 0x0a, 0x04, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x56, 0x4f, - 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x41, 0x42, 0x53, 0x54, 0x41, 0x49, 0x4e, - 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x59, 0x45, 0x53, 0x10, 0x02, - 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x10, 0x03, 0x22, 0x94, 0x05, - 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x5b, 0x0a, 0x06, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x6f, 0x74, 0x69, - 0x6e, 0x67, 0x48, 0x00, 0x52, 0x06, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x64, 0x0a, 0x09, - 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x57, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, - 0x77, 0x6e, 0x12, 0x61, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x48, 0x00, 0x52, 0x08, 0x66, 0x69, 0x6e, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x5e, 0x0a, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x65, 0x64, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x1a, - 0x23, 0x0a, 0x09, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x12, 0x16, 0x0a, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x1a, 0x62, 0x0a, 0x08, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, - 0x12, 0x56, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x52, - 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x1a, 0x61, 0x0a, 0x07, 0x43, 0x6c, 0x61, 0x69, - 0x6d, 0x65, 0x64, 0x12, 0x56, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, - 0x6d, 0x65, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x22, 0xcc, 0x04, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x12, 0x5d, 0x0a, 0x06, 0x70, 0x61, 0x73, 0x73, - 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4f, 0x0a, + 0x12, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, + 0x65, 0x6e, 0x64, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x90, + 0x01, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x22, 0x9d, 0x01, 0x0a, 0x04, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x76, 0x6f, + 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, - 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x48, 0x00, 0x52, - 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x12, 0x5d, 0x0a, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, - 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x48, 0x00, 0x52, 0x06, - 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x60, 0x0a, 0x07, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, - 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x64, 0x48, 0x00, 0x52, - 0x07, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x64, 0x1a, 0x23, 0x0a, 0x09, 0x57, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x1a, 0x08, 0x0a, - 0x06, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x1a, 0x6e, 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x12, 0x64, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, - 0x6d, 0x65, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x52, 0x09, 0x77, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x1a, 0x6f, 0x0a, 0x07, 0x53, 0x6c, 0x61, 0x73, 0x68, - 0x65, 0x64, 0x12, 0x64, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x2e, 0x56, 0x6f, 0x74, 0x65, + 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x22, 0x49, 0x0a, 0x04, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x14, + 0x0a, 0x10, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x41, 0x42, 0x53, + 0x54, 0x41, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x59, + 0x45, 0x53, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x10, + 0x03, 0x22, 0x94, 0x05, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x5b, 0x0a, 0x06, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, + 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x06, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, + 0x12, 0x64, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, + 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x77, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x12, 0x61, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, + 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x48, 0x00, 0x52, + 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x5e, 0x0a, 0x07, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x48, 0x00, + 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x74, + 0x69, 0x6e, 0x67, 0x1a, 0x23, 0x0a, 0x09, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x1a, 0x62, 0x0a, 0x08, 0x46, 0x69, 0x6e, 0x69, + 0x73, 0x68, 0x65, 0x64, 0x12, 0x56, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, - 0x6f, 0x6d, 0x65, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x52, 0x09, 0x77, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, - 0x6f, 0x6d, 0x65, 0x22, 0x43, 0x0a, 0x05, 0x54, 0x61, 0x6c, 0x6c, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x79, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x79, 0x65, 0x73, 0x12, 0x0e, - 0x0a, 0x02, 0x6e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x6e, 0x6f, 0x12, 0x18, - 0x0a, 0x07, 0x61, 0x62, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x07, 0x61, 0x62, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x22, 0xf2, 0x07, 0x0a, 0x08, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5d, 0x0a, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, - 0x67, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x5d, 0x0a, 0x09, - 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x52, 0x09, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x70, 0x0a, 0x10, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x5b, 0x0a, - 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, - 0x52, 0x08, 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x64, 0x0a, 0x0c, 0x75, 0x70, - 0x67, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, - 0x6c, 0x61, 0x6e, 0x52, 0x0b, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6c, 0x61, 0x6e, - 0x1a, 0x23, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, - 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x1a, 0x2a, 0x0a, 0x09, 0x45, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, - 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x6c, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x6c, 0x74, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x1a, 0xe5, 0x01, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x68, 0x0a, 0x0e, 0x6f, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x52, 0x0d, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, - 0x68, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0d, 0x6e, 0x65, 0x77, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x4b, 0x0a, 0x08, 0x44, 0x61, 0x6f, - 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x3f, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x1a, 0x25, 0x0a, 0x0b, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, - 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x51, 0x0a, - 0x13, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, - 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, - 0x22, 0x6b, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, - 0x13, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, - 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, - 0x22, 0x96, 0x03, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, + 0x6f, 0x6d, 0x65, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x1a, 0x61, 0x0a, 0x07, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x12, 0x56, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, + 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x42, + 0x07, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xcc, 0x04, 0x0a, 0x0f, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x12, 0x5d, 0x0a, 0x06, + 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x65, + 0x64, 0x48, 0x00, 0x52, 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x12, 0x5d, 0x0a, 0x06, 0x66, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x2c, 0x0a, 0x12, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x6e, - 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5a, 0x0a, - 0x17, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, - 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x55, 0x0a, 0x17, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, - 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, - 0x22, 0x69, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x09, - 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x4c, 0x0a, 0x13, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0xba, 0x02, 0x0a, 0x14, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x48, 0x00, 0x52, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x60, 0x0a, 0x07, 0x73, 0x6c, + 0x61, 0x73, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x65, + 0x64, 0x48, 0x00, 0x52, 0x07, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x64, 0x1a, 0x23, 0x0a, 0x09, + 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, + 0x6e, 0x1a, 0x08, 0x0a, 0x06, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x1a, 0x6e, 0x0a, 0x06, 0x46, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x64, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4f, + 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, + 0x52, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x1a, 0x6f, 0x0a, 0x07, 0x53, + 0x6c, 0x61, 0x73, 0x68, 0x65, 0x64, 0x12, 0x64, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, + 0x61, 0x77, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x6e, 0x52, 0x09, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x42, 0x09, 0x0a, 0x07, + 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x22, 0x43, 0x0a, 0x05, 0x54, 0x61, 0x6c, 0x6c, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x79, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x79, + 0x65, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x6e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, + 0x6e, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x62, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x61, 0x62, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x22, 0x9b, 0x08, 0x0a, + 0x08, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x5d, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x6e, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, - 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x25, 0x0a, - 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, + 0x12, 0x5d, 0x0a, 0x09, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x53, 0x0a, 0x15, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, 0xac, 0x01, 0x0a, 0x16, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x12, 0x4b, 0x0a, - 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0xce, 0x02, 0x0a, 0x14, 0x47, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, - 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x56, 0x6f, 0x74, - 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x5a, 0x0a, 0x17, 0x70, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x15, - 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x41, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x12, 0x36, 0x0a, 0x17, 0x70, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, - 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x70, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x50, 0x61, 0x73, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, - 0x64, 0x12, 0x38, 0x0a, 0x18, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x6c, - 0x61, 0x73, 0x68, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x6c, 0x61, - 0x73, 0x68, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x0e, - 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x6e, - 0x0a, 0x11, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x45, 0x6d, 0x65, 0x72, 0x67, + 0x65, 0x6e, 0x63, 0x79, 0x52, 0x09, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, + 0x70, 0x0a, 0x10, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x10, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xb6, - 0x05, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5a, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x64, 0x61, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, - 0x61, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x09, 0x64, 0x61, - 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x6e, 0x0a, 0x11, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x10, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x69, 0x62, 0x63, 0x5f, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x52, 0x09, 0x69, 0x62, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x5a, 0x0a, 0x0c, 0x73, - 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x6b, - 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x5f, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x52, 0x09, 0x66, 0x65, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x7a, 0x0a, 0x14, 0x64, - 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x52, 0x13, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x53, 0x65, 0x74, 0x12, 0x53, 0x0a, 0x03, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x52, 0x0f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x12, 0x7a, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, + 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x48, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x64, 0x0a, + 0x0c, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, + 0x64, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0b, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, + 0x6c, 0x61, 0x6e, 0x1a, 0x23, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x67, + 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x1a, 0x2a, 0x0a, 0x09, 0x45, 0x6d, 0x65, 0x72, + 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x6c, 0x74, 0x5f, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x6c, 0x74, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x1a, 0xe5, 0x01, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x68, 0x0a, 0x0e, 0x6f, 0x6c, 0x64, 0x5f, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x03, 0x6f, 0x6c, 0x64, 0x12, 0x53, 0x0a, 0x03, 0x6e, 0x65, 0x77, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x03, 0x6e, 0x65, 0x77, 0x22, 0xac, 0x01, - 0x0a, 0x21, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x12, - 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, - 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x47, 0x0a, 0x22, - 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x77, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, - 0x50, 0x6f, 0x77, 0x65, 0x72, 0x22, 0x68, 0x0a, 0x2a, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, - 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, - 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, - 0xc4, 0x01, 0x0a, 0x2b, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x48, 0x0a, 0x05, 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x61, 0x6c, - 0x6c, 0x79, 0x52, 0x05, 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x32, 0x0a, 0x15, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x42, 0x0a, 0x16, 0x4e, 0x65, - 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, - 0x6e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x32, 0xcd, - 0x0a, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x93, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x65, 0x72, 0x73, 0x52, 0x0d, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x12, 0x68, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0d, 0x6e, + 0x65, 0x77, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x55, 0x0a, 0x12, + 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, + 0x6e, 0x64, 0x12, 0x3f, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, + 0x6e, 0x79, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x6c, 0x61, 0x6e, 0x1a, 0x25, 0x0a, 0x0b, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6c, + 0x61, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x51, 0x0a, 0x13, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, + 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x6b, 0x0a, + 0x14, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x13, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, + 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x96, 0x03, + 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x93, 0x01, - 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, + 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x6e, 0x64, 0x5f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0e, 0x65, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5a, 0x0a, 0x17, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x61, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, + 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x55, 0x0a, 0x17, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, + 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x69, 0x0a, + 0x18, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x09, 0x72, 0x61, 0x74, + 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, + 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x4c, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x6e, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0xba, 0x02, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x51, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, + 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x12, 0x28, 0x0a, 0x10, 0x65, 0x6e, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, 0x6e, 0x64, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x50, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x99, 0x01, 0x0a, 0x0e, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x22, 0x53, 0x0a, 0x15, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x56, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, 0xac, 0x01, 0x0a, 0x16, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, + 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0xce, 0x02, 0x0a, 0x14, 0x47, 0x6f, 0x76, 0x65, + 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x76, 0x6f, 0x74, + 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x5a, 0x0a, 0x17, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x15, 0x70, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x41, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x12, 0x36, 0x0a, 0x17, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x50, 0x61, 0x73, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x38, + 0x0a, 0x18, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x6c, 0x61, 0x73, 0x68, + 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x54, + 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x6e, + 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x6e, 0x0a, 0x11, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x70, 0x65, 0x6e, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x10, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xe0, 0x05, 0x0a, 0x14, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x5a, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x9b, 0x01, 0x0a, 0x0e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, - 0x65, 0x73, 0x12, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, - 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0xbd, 0x01, - 0x0a, 0x1a, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x4e, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x69, 0x6e, - 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4f, 0x2e, 0x70, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x12, 0x7c, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, + 0x6f, 0x6c, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x48, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x6e, + 0x0a, 0x11, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x10, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, + 0x0a, 0x0a, 0x69, 0x62, 0x63, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x09, 0x69, 0x62, 0x63, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x12, 0x5a, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, + 0x0a, 0x0a, 0x66, 0x65, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x09, 0x66, 0x65, 0x65, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x12, 0x7a, 0x0a, 0x14, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x47, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x13, 0x64, 0x69, 0x73, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xc3, + 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x53, 0x65, 0x74, 0x12, 0x53, 0x0a, 0x03, 0x6f, 0x6c, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x03, 0x6f, 0x6c, 0x64, 0x12, + 0x53, 0x0a, 0x03, 0x6e, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x69, 0x6e, - 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xda, 0x01, - 0x0a, 0x23, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x57, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, + 0x03, 0x6e, 0x65, 0x77, 0x22, 0xac, 0x01, 0x0a, 0x21, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, + 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, + 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x4b, 0x65, 0x79, 0x22, 0x47, 0x0a, 0x22, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, + 0x65, 0x72, 0x41, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x6f, 0x74, + 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0b, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x22, 0x68, 0x0a, 0x2a, + 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x2b, 0x41, 0x6c, 0x6c, 0x54, 0x61, + 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, + 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x05, 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x58, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x6c, - 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0xa1, 0x01, 0x0a, 0x10, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x68, 0x61, 0x31, 0x2e, 0x54, 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x05, 0x74, 0x61, 0x6c, 0x6c, 0x79, + 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, + 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x32, 0x0a, + 0x15, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, + 0x64, 0x22, 0x42, 0x0a, 0x16, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6e, + 0x65, 0x78, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x49, 0x64, 0x32, 0xcd, 0x0a, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, 0x01, 0x0a, + 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x40, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x30, 0x01, 0x12, 0x93, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x82, - 0x03, 0x0a, 0x2f, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x42, 0x0f, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x6d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, - 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, - 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x3b, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x47, 0xaa, 0x02, 0x2b, 0x50, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x2b, 0x50, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x5c, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5c, 0x56, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x37, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x5c, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5c, 0x56, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xea, 0x02, 0x2f, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, - 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x47, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x99, 0x01, 0x0a, 0x0e, 0x4e, + 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x42, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x78, 0x74, + 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, + 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x0e, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x30, 0x01, 0x12, 0xbd, 0x01, 0x0a, 0x1a, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, + 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x12, 0x4e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x4f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x41, 0x74, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xda, 0x01, 0x0a, 0x23, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, + 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, + 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x57, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x6c, 0x54, 0x61, + 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, + 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x58, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x6c, 0x6c, 0x69, 0x65, 0x64, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, + 0x01, 0x12, 0xa1, 0x01, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, + 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x82, 0x03, 0x0a, 0x2f, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0f, 0x47, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x6d, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2f, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, + 0x6e, 0x63, 0x65, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, + 0x43, 0x47, 0xaa, 0x02, 0x2b, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, + 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0xca, 0x02, 0x2b, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, + 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x47, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, + 0x37, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, + 0x6e, 0x63, 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x2f, 0x50, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, + 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -4216,9 +4225,9 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_goTypes = (*DelegatorVoteBody)(nil), // 9: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody (*DelegatorVoteView)(nil), // 10: penumbra.core.component.governance.v1alpha1.DelegatorVoteView (*DelegatorVotePlan)(nil), // 11: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan - (*DaoDeposit)(nil), // 12: penumbra.core.component.governance.v1alpha1.DaoDeposit - (*DaoSpend)(nil), // 13: penumbra.core.component.governance.v1alpha1.DaoSpend - (*DaoOutput)(nil), // 14: penumbra.core.component.governance.v1alpha1.DaoOutput + (*CommunityPoolDeposit)(nil), // 12: penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit + (*CommunityPoolSpend)(nil), // 13: penumbra.core.component.governance.v1alpha1.CommunityPoolSpend + (*CommunityPoolOutput)(nil), // 14: penumbra.core.component.governance.v1alpha1.CommunityPoolOutput (*Vote)(nil), // 15: penumbra.core.component.governance.v1alpha1.Vote (*ProposalState)(nil), // 16: penumbra.core.component.governance.v1alpha1.ProposalState (*ProposalOutcome)(nil), // 17: penumbra.core.component.governance.v1alpha1.ProposalOutcome @@ -4257,7 +4266,7 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_goTypes = (*Proposal_Signaling)(nil), // 50: penumbra.core.component.governance.v1alpha1.Proposal.Signaling (*Proposal_Emergency)(nil), // 51: penumbra.core.component.governance.v1alpha1.Proposal.Emergency (*Proposal_ParameterChange)(nil), // 52: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange - (*Proposal_DaoSpend)(nil), // 53: penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend + (*Proposal_CommunityPoolSpend)(nil), // 53: penumbra.core.component.governance.v1alpha1.Proposal.CommunityPoolSpend (*Proposal_UpgradePlan)(nil), // 54: penumbra.core.component.governance.v1alpha1.Proposal.UpgradePlan (*v1alpha1.Amount)(nil), // 55: penumbra.core.num.v1alpha1.Amount (*v1alpha11.SpendAuthSignature)(nil), // 56: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature @@ -4270,7 +4279,7 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_goTypes = (*v1alpha12.Address)(nil), // 63: penumbra.core.keys.v1alpha1.Address (*v1alpha16.RateData)(nil), // 64: penumbra.core.component.stake.v1alpha1.RateData (*v1alpha17.ChainParameters)(nil), // 65: penumbra.core.component.chain.v1alpha1.ChainParameters - (*v1alpha18.DaoParameters)(nil), // 66: penumbra.core.component.dao.v1alpha1.DaoParameters + (*v1alpha18.CommunityPoolParameters)(nil), // 66: penumbra.core.component.community_pool.v1alpha1.CommunityPoolParameters (*v1alpha19.IbcParameters)(nil), // 67: penumbra.core.component.ibc.v1alpha1.IbcParameters (*v1alpha16.StakeParameters)(nil), // 68: penumbra.core.component.stake.v1alpha1.StakeParameters (*v1alpha110.FeeParameters)(nil), // 69: penumbra.core.component.fee.v1alpha1.FeeParameters @@ -4302,10 +4311,10 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_depIdxs = 15, // 20: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote 62, // 21: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.staked_note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note 55, // 22: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 59, // 23: penumbra.core.component.governance.v1alpha1.DaoDeposit.value:type_name -> penumbra.core.asset.v1alpha1.Value - 59, // 24: penumbra.core.component.governance.v1alpha1.DaoSpend.value:type_name -> penumbra.core.asset.v1alpha1.Value - 59, // 25: penumbra.core.component.governance.v1alpha1.DaoOutput.value:type_name -> penumbra.core.asset.v1alpha1.Value - 63, // 26: penumbra.core.component.governance.v1alpha1.DaoOutput.address:type_name -> penumbra.core.keys.v1alpha1.Address + 59, // 23: penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit.value:type_name -> penumbra.core.asset.v1alpha1.Value + 59, // 24: penumbra.core.component.governance.v1alpha1.CommunityPoolSpend.value:type_name -> penumbra.core.asset.v1alpha1.Value + 59, // 25: penumbra.core.component.governance.v1alpha1.CommunityPoolOutput.value:type_name -> penumbra.core.asset.v1alpha1.Value + 63, // 26: penumbra.core.component.governance.v1alpha1.CommunityPoolOutput.address:type_name -> penumbra.core.keys.v1alpha1.Address 0, // 27: penumbra.core.component.governance.v1alpha1.Vote.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote.Vote 42, // 28: penumbra.core.component.governance.v1alpha1.ProposalState.voting:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Voting 43, // 29: penumbra.core.component.governance.v1alpha1.ProposalState.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Withdrawn @@ -4317,7 +4326,7 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_depIdxs = 50, // 35: penumbra.core.component.governance.v1alpha1.Proposal.signaling:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.Signaling 51, // 36: penumbra.core.component.governance.v1alpha1.Proposal.emergency:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.Emergency 52, // 37: penumbra.core.component.governance.v1alpha1.Proposal.parameter_change:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange - 53, // 38: penumbra.core.component.governance.v1alpha1.Proposal.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend + 53, // 38: penumbra.core.component.governance.v1alpha1.Proposal.community_pool_spend:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.CommunityPoolSpend 54, // 39: penumbra.core.component.governance.v1alpha1.Proposal.upgrade_plan:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.UpgradePlan 19, // 40: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.proposal:type_name -> penumbra.core.component.governance.v1alpha1.Proposal 16, // 41: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.state:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState @@ -4330,7 +4339,7 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_depIdxs = 55, // 48: penumbra.core.component.governance.v1alpha1.GovernanceParameters.proposal_deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount 30, // 49: penumbra.core.component.governance.v1alpha1.GenesisContent.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters 65, // 50: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.chain_params:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters - 66, // 51: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.dao_params:type_name -> penumbra.core.component.dao.v1alpha1.DaoParameters + 66, // 51: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.community_pool_params:type_name -> penumbra.core.component.community_pool.v1alpha1.CommunityPoolParameters 30, // 52: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters 67, // 53: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.ibc_params:type_name -> penumbra.core.component.ibc.v1alpha1.IbcParameters 68, // 54: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.stake_params:type_name -> penumbra.core.component.stake.v1alpha1.StakeParameters @@ -4350,7 +4359,7 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_depIdxs = 46, // 68: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn 32, // 69: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.old_parameters:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters 32, // 70: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.new_parameters:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters - 72, // 71: penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend.transaction_plan:type_name -> google.protobuf.Any + 72, // 71: penumbra.core.component.governance.v1alpha1.Proposal.CommunityPoolSpend.transaction_plan:type_name -> google.protobuf.Any 20, // 72: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:input_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoRequest 26, // 73: penumbra.core.component.governance.v1alpha1.QueryService.ProposalList:input_type -> penumbra.core.component.governance.v1alpha1.ProposalListRequest 22, // 74: penumbra.core.component.governance.v1alpha1.QueryService.ProposalData:input_type -> penumbra.core.component.governance.v1alpha1.ProposalDataRequest @@ -4513,7 +4522,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DaoDeposit); i { + switch v := v.(*CommunityPoolDeposit); i { case 0: return &v.state case 1: @@ -4525,7 +4534,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DaoSpend); i { + switch v := v.(*CommunityPoolSpend); i { case 0: return &v.state case 1: @@ -4537,7 +4546,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DaoOutput); i { + switch v := v.(*CommunityPoolOutput); i { case 0: return &v.state case 1: @@ -5005,7 +5014,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Proposal_DaoSpend); i { + switch v := v.(*Proposal_CommunityPoolSpend); i { case 0: return &v.state case 1: diff --git a/proto/go/gen/penumbra/core/component/sct/v1alpha1/sct.pb.go b/proto/go/gen/penumbra/core/component/sct/v1alpha1/sct.pb.go index dc2b10a5aa..46e03501e9 100644 --- a/proto/go/gen/penumbra/core/component/sct/v1alpha1/sct.pb.go +++ b/proto/go/gen/penumbra/core/component/sct/v1alpha1/sct.pb.go @@ -35,7 +35,7 @@ type CommitmentSource struct { // *CommitmentSource_Transaction_ // *CommitmentSource_Ics_20Transfer // *CommitmentSource_FundingStreamReward_ - // *CommitmentSource_DaoOutput_ + // *CommitmentSource_CommunityPoolOutput_ // *CommitmentSource_Genesis_ Source isCommitmentSource_Source `protobuf_oneof:"source"` } @@ -100,9 +100,9 @@ func (x *CommitmentSource) GetFundingStreamReward() *CommitmentSource_FundingStr return nil } -func (x *CommitmentSource) GetDaoOutput() *CommitmentSource_DaoOutput { - if x, ok := x.GetSource().(*CommitmentSource_DaoOutput_); ok { - return x.DaoOutput +func (x *CommitmentSource) GetCommunityPoolOutput() *CommitmentSource_CommunityPoolOutput { + if x, ok := x.GetSource().(*CommitmentSource_CommunityPoolOutput_); ok { + return x.CommunityPoolOutput } return nil } @@ -130,8 +130,8 @@ type CommitmentSource_FundingStreamReward_ struct { FundingStreamReward *CommitmentSource_FundingStreamReward `protobuf:"bytes,20,opt,name=funding_stream_reward,json=fundingStreamReward,proto3,oneof"` } -type CommitmentSource_DaoOutput_ struct { - DaoOutput *CommitmentSource_DaoOutput `protobuf:"bytes,30,opt,name=dao_output,json=daoOutput,proto3,oneof"` +type CommitmentSource_CommunityPoolOutput_ struct { + CommunityPoolOutput *CommitmentSource_CommunityPoolOutput `protobuf:"bytes,30,opt,name=community_pool_output,json=communityPoolOutput,proto3,oneof"` } type CommitmentSource_Genesis_ struct { @@ -144,7 +144,7 @@ func (*CommitmentSource_Ics_20Transfer) isCommitmentSource_Source() {} func (*CommitmentSource_FundingStreamReward_) isCommitmentSource_Source() {} -func (*CommitmentSource_DaoOutput_) isCommitmentSource_Source() {} +func (*CommitmentSource_CommunityPoolOutput_) isCommitmentSource_Source() {} func (*CommitmentSource_Genesis_) isCommitmentSource_Source() {} @@ -627,15 +627,15 @@ func (x *CommitmentSource_FundingStreamReward) GetEpochIndex() uint64 { return 0 } -// The commitment was created through a `DaoOutput` in a governance-initated transaction. -type CommitmentSource_DaoOutput struct { +// The commitment was created through a `CommunityPoolOutput` in a governance-initated transaction. +type CommitmentSource_CommunityPoolOutput struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *CommitmentSource_DaoOutput) Reset() { - *x = CommitmentSource_DaoOutput{} +func (x *CommitmentSource_CommunityPoolOutput) Reset() { + *x = CommitmentSource_CommunityPoolOutput{} if protoimpl.UnsafeEnabled { mi := &file_penumbra_core_component_sct_v1alpha1_sct_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -643,13 +643,13 @@ func (x *CommitmentSource_DaoOutput) Reset() { } } -func (x *CommitmentSource_DaoOutput) String() string { +func (x *CommitmentSource_CommunityPoolOutput) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CommitmentSource_DaoOutput) ProtoMessage() {} +func (*CommitmentSource_CommunityPoolOutput) ProtoMessage() {} -func (x *CommitmentSource_DaoOutput) ProtoReflect() protoreflect.Message { +func (x *CommitmentSource_CommunityPoolOutput) ProtoReflect() protoreflect.Message { mi := &file_penumbra_core_component_sct_v1alpha1_sct_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -661,8 +661,8 @@ func (x *CommitmentSource_DaoOutput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CommitmentSource_DaoOutput.ProtoReflect.Descriptor instead. -func (*CommitmentSource_DaoOutput) Descriptor() ([]byte, []int) { +// Deprecated: Use CommitmentSource_CommunityPoolOutput.ProtoReflect.Descriptor instead. +func (*CommitmentSource_CommunityPoolOutput) Descriptor() ([]byte, []int) { return file_penumbra_core_component_sct_v1alpha1_sct_proto_rawDescGZIP(), []int{0, 3} } @@ -743,7 +743,7 @@ var file_penumbra_core_component_sct_v1alpha1_sct_proto_rawDesc = []byte{ 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x74, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb6, 0x06, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x66, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, @@ -766,13 +766,15 @@ var file_penumbra_core_component_sct_v1alpha1_sct_proto_rawDesc = []byte{ 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x48, 0x00, 0x52, 0x13, 0x66, 0x75, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x61, - 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x1e, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x80, + 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, + 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x13, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x5a, 0x0a, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, @@ -785,76 +787,76 @@ var file_penumbra_core_component_sct_v1alpha1_sct_proto_rawDesc = []byte{ 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x1a, - 0x0b, 0x0a, 0x09, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x1a, 0x65, 0x0a, 0x0d, - 0x49, 0x63, 0x73, 0x32, 0x30, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x1d, 0x0a, - 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x21, 0x0a, - 0x09, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, - 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, - 0x22, 0x46, 0x0a, 0x11, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x70, 0x65, - 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xcc, 0x01, 0x0a, 0x0f, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0a, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x15, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x1a, 0x65, 0x0a, 0x0d, 0x49, 0x63, 0x73, 0x32, 0x30, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x5f, 0x73, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x53, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x42, 0x08, 0x0a, + 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x21, 0x0a, 0x09, 0x4e, 0x75, 0x6c, 0x6c, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x46, 0x0a, 0x11, 0x4e, 0x75, + 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x21, 0x0a, 0x0c, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x22, 0xcc, 0x01, 0x0a, 0x0f, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x22, 0x67, 0x0a, 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, + 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x67, 0x0a, 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, - 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x22, 0x64, 0x0a, 0x0e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x6f, + 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, + 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x64, 0x0a, 0x0e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x3c, 0x0a, 0x04, + 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, + 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x22, 0x66, 0x0a, 0x0e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x66, 0x0a, 0x0e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, - 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x32, 0x0e, - 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0xca, - 0x02, 0x0a, 0x28, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, - 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x08, 0x53, 0x63, 0x74, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, - 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, - 0x73, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x73, 0x63, 0x74, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x53, 0xaa, - 0x02, 0x24, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, - 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x74, 0x2e, 0x56, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x24, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x5c, 0x53, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x30, - 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0xea, 0x02, 0x28, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, - 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x53, 0x63, - 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x32, 0x0e, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0xca, 0x02, 0x0a, 0x28, 0x63, 0x6f, 0x6d, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x08, 0x53, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x5f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, + 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x63, 0x74, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x73, 0x63, 0x74, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x53, 0xaa, 0x02, 0x24, 0x50, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x74, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0xca, 0x02, 0x24, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, + 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x63, 0x74, 0x5c, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x30, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x5c, 0x53, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x50, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x53, 0x63, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -881,7 +883,7 @@ var file_penumbra_core_component_sct_v1alpha1_sct_proto_goTypes = []interface{}{ (*CommitmentSource_Genesis)(nil), // 7: penumbra.core.component.sct.v1alpha1.CommitmentSource.Genesis (*CommitmentSource_Transaction)(nil), // 8: penumbra.core.component.sct.v1alpha1.CommitmentSource.Transaction (*CommitmentSource_FundingStreamReward)(nil), // 9: penumbra.core.component.sct.v1alpha1.CommitmentSource.FundingStreamReward - (*CommitmentSource_DaoOutput)(nil), // 10: penumbra.core.component.sct.v1alpha1.CommitmentSource.DaoOutput + (*CommitmentSource_CommunityPoolOutput)(nil), // 10: penumbra.core.component.sct.v1alpha1.CommitmentSource.CommunityPoolOutput (*CommitmentSource_Ics20Transfer)(nil), // 11: penumbra.core.component.sct.v1alpha1.CommitmentSource.Ics20Transfer (*v1alpha1.StateCommitment)(nil), // 12: penumbra.crypto.tct.v1alpha1.StateCommitment (*v1alpha1.MerkleRoot)(nil), // 13: penumbra.crypto.tct.v1alpha1.MerkleRoot @@ -890,7 +892,7 @@ var file_penumbra_core_component_sct_v1alpha1_sct_proto_depIdxs = []int32{ 8, // 0: penumbra.core.component.sct.v1alpha1.CommitmentSource.transaction:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource.Transaction 11, // 1: penumbra.core.component.sct.v1alpha1.CommitmentSource.ics_20_transfer:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource.Ics20Transfer 9, // 2: penumbra.core.component.sct.v1alpha1.CommitmentSource.funding_stream_reward:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource.FundingStreamReward - 10, // 3: penumbra.core.component.sct.v1alpha1.CommitmentSource.dao_output:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource.DaoOutput + 10, // 3: penumbra.core.component.sct.v1alpha1.CommitmentSource.community_pool_output:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource.CommunityPoolOutput 7, // 4: penumbra.core.component.sct.v1alpha1.CommitmentSource.genesis:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource.Genesis 12, // 5: penumbra.core.component.sct.v1alpha1.EventCommitment.commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment 0, // 6: penumbra.core.component.sct.v1alpha1.EventCommitment.source:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource @@ -1031,7 +1033,7 @@ func file_penumbra_core_component_sct_v1alpha1_sct_proto_init() { } } file_penumbra_core_component_sct_v1alpha1_sct_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommitmentSource_DaoOutput); i { + switch v := v.(*CommitmentSource_CommunityPoolOutput); i { case 0: return &v.state case 1: @@ -1059,7 +1061,7 @@ func file_penumbra_core_component_sct_v1alpha1_sct_proto_init() { (*CommitmentSource_Transaction_)(nil), (*CommitmentSource_Ics_20Transfer)(nil), (*CommitmentSource_FundingStreamReward_)(nil), - (*CommitmentSource_DaoOutput_)(nil), + (*CommitmentSource_CommunityPoolOutput_)(nil), (*CommitmentSource_Genesis_)(nil), } type x struct{} diff --git a/proto/go/gen/penumbra/core/component/stake/v1alpha1/stake.pb.go b/proto/go/gen/penumbra/core/component/stake/v1alpha1/stake.pb.go index a44b11cbf5..cce5012900 100644 --- a/proto/go/gen/penumbra/core/component/stake/v1alpha1/stake.pb.go +++ b/proto/go/gen/penumbra/core/component/stake/v1alpha1/stake.pb.go @@ -365,7 +365,7 @@ type FundingStream struct { // Types that are assignable to Recipient: // // *FundingStream_ToAddress_ - // *FundingStream_ToDao_ + // *FundingStream_ToCommunityPool_ Recipient isFundingStream_Recipient `protobuf_oneof:"recipient"` } @@ -415,9 +415,9 @@ func (x *FundingStream) GetToAddress() *FundingStream_ToAddress { return nil } -func (x *FundingStream) GetToDao() *FundingStream_ToDao { - if x, ok := x.GetRecipient().(*FundingStream_ToDao_); ok { - return x.ToDao +func (x *FundingStream) GetToCommunityPool() *FundingStream_ToCommunityPool { + if x, ok := x.GetRecipient().(*FundingStream_ToCommunityPool_); ok { + return x.ToCommunityPool } return nil } @@ -430,13 +430,13 @@ type FundingStream_ToAddress_ struct { ToAddress *FundingStream_ToAddress `protobuf:"bytes,1,opt,name=to_address,json=toAddress,proto3,oneof"` } -type FundingStream_ToDao_ struct { - ToDao *FundingStream_ToDao `protobuf:"bytes,2,opt,name=to_dao,json=toDao,proto3,oneof"` +type FundingStream_ToCommunityPool_ struct { + ToCommunityPool *FundingStream_ToCommunityPool `protobuf:"bytes,2,opt,name=to_community_pool,json=toCommunityPool,proto3,oneof"` } func (*FundingStream_ToAddress_) isFundingStream_Recipient() {} -func (*FundingStream_ToDao_) isFundingStream_Recipient() {} +func (*FundingStream_ToCommunityPool_) isFundingStream_Recipient() {} // Describes the reward and exchange rates and voting power for a validator in some epoch. type RateData struct { @@ -2138,7 +2138,7 @@ func (x *FundingStream_ToAddress) GetRateBps() uint32 { return 0 } -type FundingStream_ToDao struct { +type FundingStream_ToCommunityPool struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -2148,8 +2148,8 @@ type FundingStream_ToDao struct { RateBps uint32 `protobuf:"varint,2,opt,name=rate_bps,json=rateBps,proto3" json:"rate_bps,omitempty"` } -func (x *FundingStream_ToDao) Reset() { - *x = FundingStream_ToDao{} +func (x *FundingStream_ToCommunityPool) Reset() { + *x = FundingStream_ToCommunityPool{} if protoimpl.UnsafeEnabled { mi := &file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2157,13 +2157,13 @@ func (x *FundingStream_ToDao) Reset() { } } -func (x *FundingStream_ToDao) String() string { +func (x *FundingStream_ToCommunityPool) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FundingStream_ToDao) ProtoMessage() {} +func (*FundingStream_ToCommunityPool) ProtoMessage() {} -func (x *FundingStream_ToDao) ProtoReflect() protoreflect.Message { +func (x *FundingStream_ToCommunityPool) ProtoReflect() protoreflect.Message { mi := &file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2175,12 +2175,12 @@ func (x *FundingStream_ToDao) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use FundingStream_ToDao.ProtoReflect.Descriptor instead. -func (*FundingStream_ToDao) Descriptor() ([]byte, []int) { +// Deprecated: Use FundingStream_ToCommunityPool.ProtoReflect.Descriptor instead. +func (*FundingStream_ToCommunityPool) Descriptor() ([]byte, []int) { return file_penumbra_core_component_stake_v1alpha1_stake_proto_rawDescGZIP(), []int{3, 1} } -func (x *FundingStream_ToDao) GetRateBps() uint32 { +func (x *FundingStream_ToCommunityPool) GetRateBps() uint32 { if x != nil { return x.RateBps } @@ -2240,7 +2240,7 @@ var file_penumbra_core_component_stake_v1alpha1_stake_proto_rawDesc = []byte{ 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0d, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x22, 0xba, 0x02, 0x0a, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x22, 0xe3, 0x02, 0x0a, 0x0d, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x60, 0x0a, 0x0a, 0x74, 0x6f, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, @@ -2248,408 +2248,411 @@ var file_penumbra_core_component_stake_v1alpha1_stake_proto_rawDesc = []byte{ 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x54, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x09, 0x74, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x54, 0x0a, 0x06, 0x74, 0x6f, 0x5f, 0x64, 0x61, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x54, 0x6f, 0x44, 0x61, 0x6f, 0x48, 0x00, 0x52, - 0x05, 0x74, 0x6f, 0x44, 0x61, 0x6f, 0x1a, 0x40, 0x0a, 0x09, 0x54, 0x6f, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x19, 0x0a, - 0x08, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x07, 0x72, 0x61, 0x74, 0x65, 0x42, 0x70, 0x73, 0x1a, 0x22, 0x0a, 0x05, 0x54, 0x6f, 0x44, 0x61, - 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x70, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x07, 0x72, 0x61, 0x74, 0x65, 0x42, 0x70, 0x73, 0x42, 0x0b, 0x0a, 0x09, - 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x22, 0xe4, 0x01, 0x0a, 0x08, 0x52, 0x61, - 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, - 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x12, 0x32, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, - 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, - 0x22, 0x87, 0x01, 0x0a, 0x0c, 0x42, 0x61, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x62, 0x61, - 0x73, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x12, - 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x61, - 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x62, 0x61, 0x73, 0x65, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x22, 0xaa, 0x02, 0x0a, 0x0f, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4b, - 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x4c, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x6f, 0x74, - 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0b, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x59, 0x0a, 0x0d, - 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, - 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x6f, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x62, 0x6f, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xaf, 0x02, 0x0a, 0x0c, 0x42, 0x6f, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x42, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x42, 0x6f, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, - 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x98, - 0x01, 0x0a, 0x10, 0x42, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, - 0x6e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x1e, 0x42, 0x4f, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x42, 0x4f, 0x4e, 0x44, 0x49, - 0x4e, 0x47, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x42, 0x4f, - 0x4e, 0x44, 0x45, 0x44, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x42, 0x4f, 0x4e, 0x44, 0x49, 0x4e, - 0x47, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x42, - 0x4f, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x42, 0x4f, 0x4e, 0x44, - 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, - 0x4e, 0x42, 0x4f, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x03, 0x22, 0xdb, 0x02, 0x0a, 0x0e, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x49, 0x2e, 0x70, 0x65, + 0x12, 0x73, 0x0a, 0x11, 0x74, 0x6f, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xe7, 0x01, - 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x20, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, - 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x56, 0x41, - 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, - 0x55, 0x4d, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x1f, 0x0a, - 0x1b, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x1f, - 0x0a, 0x1b, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x4a, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, - 0x23, 0x0a, 0x1f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, - 0x45, 0x44, 0x10, 0x04, 0x12, 0x21, 0x0a, 0x1d, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, - 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x44, 0x49, 0x53, - 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x22, 0x80, 0x02, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4f, 0x0a, 0x09, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x2e, 0x54, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, + 0x6f, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x74, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x1a, 0x40, 0x0a, 0x09, 0x54, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x19, 0x0a, 0x08, + 0x72, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, + 0x72, 0x61, 0x74, 0x65, 0x42, 0x70, 0x73, 0x1a, 0x2c, 0x0a, 0x0f, 0x54, 0x6f, 0x43, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x61, + 0x74, 0x65, 0x5f, 0x62, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x72, 0x61, + 0x74, 0x65, 0x42, 0x70, 0x73, 0x42, 0x0b, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, + 0x6e, 0x74, 0x22, 0xe4, 0x01, 0x0a, 0x08, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, + 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0a, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x32, 0x0a, + 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x74, + 0x65, 0x12, 0x36, 0x0a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x22, 0x87, 0x01, 0x0a, 0x0c, 0x42, 0x61, + 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x70, + 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0a, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x28, 0x0a, 0x10, 0x62, + 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x10, 0x62, 0x61, 0x73, 0x65, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, + 0x61, 0x74, 0x65, 0x22, 0xaa, 0x02, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, + 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x4b, 0x65, 0x79, 0x12, 0x4c, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x77, + 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, + 0x50, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x59, 0x0a, 0x0d, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, - 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x4f, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4d, 0x0a, 0x09, 0x72, - 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x81, 0x01, 0x0a, 0x13, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x0c, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x22, 0xaf, 0x02, 0x0a, 0x0c, 0x42, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x5b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x6f, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x42, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, + 0x0a, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x98, 0x01, 0x0a, 0x10, 0x42, 0x6f, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x1e, + 0x42, 0x4f, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, + 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x1d, 0x0a, 0x19, 0x42, 0x4f, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x42, 0x4f, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x01, 0x12, + 0x20, 0x0a, 0x1c, 0x42, 0x4f, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x42, 0x4f, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, + 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x42, 0x4f, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x42, 0x4f, 0x4e, 0x44, 0x45, 0x44, + 0x10, 0x03, 0x22, 0xdb, 0x02, 0x0a, 0x0e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x49, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xe7, 0x01, 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x24, 0x0a, + 0x20, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x49, 0x4e, 0x41, 0x43, + 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, + 0x54, 0x4f, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, + 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x56, 0x41, 0x4c, 0x49, 0x44, + 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, + 0x4a, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x23, 0x0a, 0x1f, 0x56, 0x41, 0x4c, 0x49, + 0x44, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, + 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x44, 0x10, 0x04, 0x12, 0x21, 0x0a, + 0x1d, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x05, + 0x22, 0x80, 0x02, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x4f, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, 0x69, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x22, 0xa2, - 0x02, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x57, 0x0a, 0x12, 0x76, + 0x74, 0x6f, 0x72, 0x12, 0x4f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x4d, 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x22, 0x81, 0x01, 0x0a, 0x13, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x09, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x19, 0x0a, 0x08, + 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, + 0x61, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x22, 0xa2, 0x02, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x12, 0x57, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x11, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1f, 0x0a, + 0x0b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0a, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4b, + 0x0a, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0e, 0x75, 0x6e, 0x62, + 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4f, 0x0a, 0x11, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xaf, 0x02, 0x0a, + 0x0a, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x57, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4b, 0x0a, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, - 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, - 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x0e, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x4f, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, - 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x22, 0xaf, 0x02, 0x0a, 0x0a, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x12, 0x57, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, - 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x45, 0x70, 0x6f, - 0x63, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4b, 0x0a, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, - 0x64, 0x65, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0e, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4f, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x78, 0x0a, 0x0f, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4f, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x74, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x65, 0x70, + 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x4b, 0x0a, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x61, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0e, 0x75, + 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4f, 0x0a, + 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x10, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x78, + 0x0a, 0x0f, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x12, 0x4f, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, + 0x64, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0xc5, 0x02, 0x0a, 0x13, 0x55, 0x6e, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x42, 0x6f, 0x64, 0x79, + 0x12, 0x57, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, + 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x49, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x42, - 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x6f, - 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, - 0xc5, 0x02, 0x0a, 0x13, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x57, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x11, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x49, 0x0a, 0x07, - 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x52, 0x07, - 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x12, 0x5e, 0x0a, 0x12, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x11, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xb3, 0x03, 0x0a, 0x13, 0x55, 0x6e, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x12, - 0x57, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x12, 0x49, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x12, - 0x4d, 0x0a, 0x10, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0f, 0x75, - 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x29, - 0x0a, 0x10, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, - 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, - 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x22, 0xc1, 0x01, - 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x0d, 0x75, 0x6e, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, + 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, + 0x12, 0x5e, 0x0a, 0x12, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x11, 0x62, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x22, 0xb3, 0x03, 0x0a, 0x13, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x57, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x11, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x49, 0x0a, + 0x07, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x52, 0x0d, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x22, 0x6c, 0x0a, 0x06, 0x55, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x12, 0x61, - 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x61, 0x73, 0x4f, 0x66, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x77, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x77, 0x69, - 0x6e, 0x64, 0x6f, 0x77, 0x4c, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x69, 0x74, 0x76, 0x65, - 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x62, 0x69, 0x74, 0x76, 0x65, 0x63, 0x22, - 0x68, 0x0a, 0x14, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, - 0x73, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x50, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x73, 0x65, - 0x6e, 0x73, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, - 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x73, - 0x65, 0x6e, 0x73, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x1f, 0x0a, 0x07, 0x50, 0x65, 0x6e, - 0x61, 0x6c, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x56, 0x0a, 0x14, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, - 0x0d, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x68, 0x6f, 0x77, 0x49, 0x6e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x22, 0x75, 0x0a, 0x15, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x0e, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, - 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x80, 0x01, 0x0a, 0x16, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, - 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, - 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x6a, 0x0a, 0x17, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x52, + 0x07, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x12, 0x4d, 0x0a, 0x10, 0x75, 0x6e, 0x62, 0x6f, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x62, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, + 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, + 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x22, 0xc1, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x0b, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x58, 0x0a, 0x0d, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x17, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, - 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, - 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x11, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x6e, 0x64, 0x5f, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0d, 0x65, 0x6e, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x22, 0x65, 0x0a, 0x18, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x6e, - 0x61, 0x6c, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x07, - 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x52, 0x07, - 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x22, 0x85, 0x01, 0x0a, 0x1b, 0x43, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x49, 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x75, 0x6e, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x6c, 0x0a, 0x06, 0x55, 0x70, + 0x74, 0x69, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x12, 0x61, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0f, 0x61, 0x73, 0x4f, 0x66, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x6c, 0x65, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x4c, 0x65, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x62, 0x69, 0x74, 0x76, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x06, 0x62, 0x69, 0x74, 0x76, 0x65, 0x63, 0x22, 0x68, 0x0a, 0x14, 0x43, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x73, + 0x12, 0x50, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x5f, 0x6b, 0x65, + 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, - 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, - 0x64, 0x0a, 0x1c, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x44, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, + 0x4b, 0x65, 0x79, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x4b, 0x65, + 0x79, 0x73, 0x22, 0x1f, 0x0a, 0x07, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, + 0x6e, 0x65, 0x72, 0x22, 0x56, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x69, + 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, + 0x68, 0x6f, 0x77, 0x49, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x75, 0x0a, 0x15, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, + 0x66, 0x6f, 0x22, 0x80, 0x01, 0x0a, 0x16, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, + 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, + 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x6a, 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x17, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, + 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, + 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, + 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x65, + 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x6e, 0x64, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x65, 0x6e, 0x64, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x65, 0x0a, 0x18, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, + 0x22, 0x85, 0x01, 0x0a, 0x1b, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x64, 0x0a, 0x1c, 0x43, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x87, + 0x03, 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x75, 0x6e, + 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x12, 0x34, 0x0a, + 0x16, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4c, 0x69, + 0x6d, 0x69, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x62, + 0x61, 0x73, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x74, 0x65, 0x12, 0x40, 0x0a, + 0x1c, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, + 0x79, 0x5f, 0x6d, 0x69, 0x73, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x1a, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x65, 0x6e, + 0x61, 0x6c, 0x74, 0x79, 0x4d, 0x69, 0x73, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, + 0x3a, 0x0a, 0x19, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x65, 0x6e, 0x61, + 0x6c, 0x74, 0x79, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x17, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x65, 0x6e, 0x61, + 0x6c, 0x74, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x73, + 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x77, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x73, + 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57, 0x69, 0x6e, 0x64, 0x6f, + 0x77, 0x4c, 0x65, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x69, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x13, 0x6d, 0x69, 0x73, 0x73, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x73, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x22, 0xbf, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x6e, + 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x5a, 0x0a, 0x0c, 0x73, + 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x6b, + 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x51, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0a, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x32, 0xf0, 0x04, 0x0a, 0x0c, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x0d, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x87, 0x03, 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x62, - 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x61, - 0x73, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x52, 0x61, 0x74, 0x65, 0x12, 0x40, 0x0a, 0x1c, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, - 0x5f, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x5f, 0x6d, 0x69, 0x73, 0x62, 0x65, 0x68, 0x61, - 0x76, 0x69, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1a, 0x73, 0x6c, 0x61, 0x73, - 0x68, 0x69, 0x6e, 0x67, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x4d, 0x69, 0x73, 0x62, 0x65, - 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x3a, 0x0a, 0x19, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, - 0x6e, 0x67, 0x5f, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x17, 0x73, 0x6c, 0x61, 0x73, 0x68, - 0x69, 0x6e, 0x67, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x73, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x4c, 0x65, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x6d, - 0x69, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x6d, 0x61, 0x78, - 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x6d, 0x69, 0x73, 0x73, - 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x22, - 0xbf, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x5a, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x51, - 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x73, 0x32, 0xf0, 0x04, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x30, 0x01, 0x12, 0x92, 0x01, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x92, 0x01, 0x0a, + 0x0f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x95, 0x01, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, + 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x12, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa1, 0x01, 0x0a, 0x14, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x61, + 0x74, 0x65, 0x12, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x10, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x12, 0x3f, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0xa1, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, 0x12, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x44, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xda, 0x02, 0x0a, 0x2a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x42, 0x0a, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x63, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, - 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x53, 0xaa, 0x02, 0x26, - 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x56, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x26, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, - 0x02, 0x32, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, + 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x52, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xda, 0x02, + 0x0a, 0x2a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0a, 0x53, 0x74, + 0x61, 0x6b, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x63, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, + 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, + 0x02, 0x04, 0x50, 0x43, 0x43, 0x53, 0xaa, 0x02, 0x26, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, + 0x02, 0x26, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x5c, - 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x2a, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, - 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x32, 0x50, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x2a, + 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, + 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x65, + 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -2700,7 +2703,7 @@ var file_penumbra_core_component_stake_v1alpha1_stake_proto_goTypes = []interfac (*StakeParameters)(nil), // 30: penumbra.core.component.stake.v1alpha1.StakeParameters (*GenesisContent)(nil), // 31: penumbra.core.component.stake.v1alpha1.GenesisContent (*FundingStream_ToAddress)(nil), // 32: penumbra.core.component.stake.v1alpha1.FundingStream.ToAddress - (*FundingStream_ToDao)(nil), // 33: penumbra.core.component.stake.v1alpha1.FundingStream.ToDao + (*FundingStream_ToCommunityPool)(nil), // 33: penumbra.core.component.stake.v1alpha1.FundingStream.ToCommunityPool (*v1alpha1.IdentityKey)(nil), // 34: penumbra.core.keys.v1alpha1.IdentityKey (*v1alpha1.GovernanceKey)(nil), // 35: penumbra.core.keys.v1alpha1.GovernanceKey (*v1alpha11.Amount)(nil), // 36: penumbra.core.num.v1alpha1.Amount @@ -2713,7 +2716,7 @@ var file_penumbra_core_component_stake_v1alpha1_stake_proto_depIdxs = []int32{ 35, // 2: penumbra.core.component.stake.v1alpha1.Validator.governance_key:type_name -> penumbra.core.keys.v1alpha1.GovernanceKey 34, // 3: penumbra.core.component.stake.v1alpha1.ValidatorList.validator_keys:type_name -> penumbra.core.keys.v1alpha1.IdentityKey 32, // 4: penumbra.core.component.stake.v1alpha1.FundingStream.to_address:type_name -> penumbra.core.component.stake.v1alpha1.FundingStream.ToAddress - 33, // 5: penumbra.core.component.stake.v1alpha1.FundingStream.to_dao:type_name -> penumbra.core.component.stake.v1alpha1.FundingStream.ToDao + 33, // 5: penumbra.core.component.stake.v1alpha1.FundingStream.to_community_pool:type_name -> penumbra.core.component.stake.v1alpha1.FundingStream.ToCommunityPool 34, // 6: penumbra.core.component.stake.v1alpha1.RateData.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey 34, // 7: penumbra.core.component.stake.v1alpha1.ValidatorStatus.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey 10, // 8: penumbra.core.component.stake.v1alpha1.ValidatorStatus.state:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorState @@ -3143,7 +3146,7 @@ func file_penumbra_core_component_stake_v1alpha1_stake_proto_init() { } } file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FundingStream_ToDao); i { + switch v := v.(*FundingStream_ToCommunityPool); i { case 0: return &v.state case 1: @@ -3157,7 +3160,7 @@ func file_penumbra_core_component_stake_v1alpha1_stake_proto_init() { } file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[3].OneofWrappers = []interface{}{ (*FundingStream_ToAddress_)(nil), - (*FundingStream_ToDao_)(nil), + (*FundingStream_ToCommunityPool_)(nil), } type x struct{} out := protoimpl.TypeBuilder{ diff --git a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go index efaf1da0a1..b6836b493c 100644 --- a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go +++ b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go @@ -371,9 +371,9 @@ type Action struct { // *Action_Delegate // *Action_Undelegate // *Action_UndelegateClaim - // *Action_DaoSpend - // *Action_DaoOutput - // *Action_DaoDeposit + // *Action_CommunityPoolSpend + // *Action_CommunityPoolOutput + // *Action_CommunityPoolDeposit // *Action_Ics20Withdrawal Action isAction_Action `protobuf_oneof:"action"` } @@ -543,23 +543,23 @@ func (x *Action) GetUndelegateClaim() *v1alpha16.UndelegateClaim { return nil } -func (x *Action) GetDaoSpend() *v1alpha18.DaoSpend { - if x, ok := x.GetAction().(*Action_DaoSpend); ok { - return x.DaoSpend +func (x *Action) GetCommunityPoolSpend() *v1alpha18.CommunityPoolSpend { + if x, ok := x.GetAction().(*Action_CommunityPoolSpend); ok { + return x.CommunityPoolSpend } return nil } -func (x *Action) GetDaoOutput() *v1alpha18.DaoOutput { - if x, ok := x.GetAction().(*Action_DaoOutput); ok { - return x.DaoOutput +func (x *Action) GetCommunityPoolOutput() *v1alpha18.CommunityPoolOutput { + if x, ok := x.GetAction().(*Action_CommunityPoolOutput); ok { + return x.CommunityPoolOutput } return nil } -func (x *Action) GetDaoDeposit() *v1alpha18.DaoDeposit { - if x, ok := x.GetAction().(*Action_DaoDeposit); ok { - return x.DaoDeposit +func (x *Action) GetCommunityPoolDeposit() *v1alpha18.CommunityPoolDeposit { + if x, ok := x.GetAction().(*Action_CommunityPoolDeposit); ok { + return x.CommunityPoolDeposit } return nil } @@ -651,17 +651,17 @@ type Action_UndelegateClaim struct { UndelegateClaim *v1alpha16.UndelegateClaim `protobuf:"bytes,42,opt,name=undelegate_claim,json=undelegateClaim,proto3,oneof"` } -type Action_DaoSpend struct { - // DAO - DaoSpend *v1alpha18.DaoSpend `protobuf:"bytes,50,opt,name=dao_spend,json=daoSpend,proto3,oneof"` +type Action_CommunityPoolSpend struct { + // Community Pool + CommunityPoolSpend *v1alpha18.CommunityPoolSpend `protobuf:"bytes,50,opt,name=community_pool_spend,json=communityPoolSpend,proto3,oneof"` } -type Action_DaoOutput struct { - DaoOutput *v1alpha18.DaoOutput `protobuf:"bytes,51,opt,name=dao_output,json=daoOutput,proto3,oneof"` +type Action_CommunityPoolOutput struct { + CommunityPoolOutput *v1alpha18.CommunityPoolOutput `protobuf:"bytes,51,opt,name=community_pool_output,json=communityPoolOutput,proto3,oneof"` } -type Action_DaoDeposit struct { - DaoDeposit *v1alpha18.DaoDeposit `protobuf:"bytes,52,opt,name=dao_deposit,json=daoDeposit,proto3,oneof"` +type Action_CommunityPoolDeposit struct { + CommunityPoolDeposit *v1alpha18.CommunityPoolDeposit `protobuf:"bytes,52,opt,name=community_pool_deposit,json=communityPoolDeposit,proto3,oneof"` } type Action_Ics20Withdrawal struct { @@ -704,11 +704,11 @@ func (*Action_Undelegate) isAction_Action() {} func (*Action_UndelegateClaim) isAction_Action() {} -func (*Action_DaoSpend) isAction_Action() {} +func (*Action_CommunityPoolSpend) isAction_Action() {} -func (*Action_DaoOutput) isAction_Action() {} +func (*Action_CommunityPoolOutput) isAction_Action() {} -func (*Action_DaoDeposit) isAction_Action() {} +func (*Action_CommunityPoolDeposit) isAction_Action() {} func (*Action_Ics20Withdrawal) isAction_Action() {} @@ -1086,9 +1086,9 @@ type ActionView struct { // *ActionView_PositionRewardClaim // *ActionView_Delegate // *ActionView_Undelegate - // *ActionView_DaoSpend - // *ActionView_DaoOutput - // *ActionView_DaoDeposit + // *ActionView_CommunityPoolSpend + // *ActionView_CommunityPoolOutput + // *ActionView_CommunityPoolDeposit // *ActionView_UndelegateClaim // *ActionView_Ics20Withdrawal ActionView isActionView_ActionView `protobuf_oneof:"action_view"` @@ -1252,23 +1252,23 @@ func (x *ActionView) GetUndelegate() *v1alpha16.Undelegate { return nil } -func (x *ActionView) GetDaoSpend() *v1alpha18.DaoSpend { - if x, ok := x.GetActionView().(*ActionView_DaoSpend); ok { - return x.DaoSpend +func (x *ActionView) GetCommunityPoolSpend() *v1alpha18.CommunityPoolSpend { + if x, ok := x.GetActionView().(*ActionView_CommunityPoolSpend); ok { + return x.CommunityPoolSpend } return nil } -func (x *ActionView) GetDaoOutput() *v1alpha18.DaoOutput { - if x, ok := x.GetActionView().(*ActionView_DaoOutput); ok { - return x.DaoOutput +func (x *ActionView) GetCommunityPoolOutput() *v1alpha18.CommunityPoolOutput { + if x, ok := x.GetActionView().(*ActionView_CommunityPoolOutput); ok { + return x.CommunityPoolOutput } return nil } -func (x *ActionView) GetDaoDeposit() *v1alpha18.DaoDeposit { - if x, ok := x.GetActionView().(*ActionView_DaoDeposit); ok { - return x.DaoDeposit +func (x *ActionView) GetCommunityPoolDeposit() *v1alpha18.CommunityPoolDeposit { + if x, ok := x.GetActionView().(*ActionView_CommunityPoolDeposit); ok { + return x.CommunityPoolDeposit } return nil } @@ -1362,17 +1362,17 @@ type ActionView_Undelegate struct { Undelegate *v1alpha16.Undelegate `protobuf:"bytes,42,opt,name=undelegate,proto3,oneof"` } -type ActionView_DaoSpend struct { - // DAO - DaoSpend *v1alpha18.DaoSpend `protobuf:"bytes,50,opt,name=dao_spend,json=daoSpend,proto3,oneof"` +type ActionView_CommunityPoolSpend struct { + // Community Pool + CommunityPoolSpend *v1alpha18.CommunityPoolSpend `protobuf:"bytes,50,opt,name=community_pool_spend,json=communityPoolSpend,proto3,oneof"` } -type ActionView_DaoOutput struct { - DaoOutput *v1alpha18.DaoOutput `protobuf:"bytes,51,opt,name=dao_output,json=daoOutput,proto3,oneof"` +type ActionView_CommunityPoolOutput struct { + CommunityPoolOutput *v1alpha18.CommunityPoolOutput `protobuf:"bytes,51,opt,name=community_pool_output,json=communityPoolOutput,proto3,oneof"` } -type ActionView_DaoDeposit struct { - DaoDeposit *v1alpha18.DaoDeposit `protobuf:"bytes,52,opt,name=dao_deposit,json=daoDeposit,proto3,oneof"` +type ActionView_CommunityPoolDeposit struct { + CommunityPoolDeposit *v1alpha18.CommunityPoolDeposit `protobuf:"bytes,52,opt,name=community_pool_deposit,json=communityPoolDeposit,proto3,oneof"` } type ActionView_UndelegateClaim struct { @@ -1420,11 +1420,11 @@ func (*ActionView_Delegate) isActionView_ActionView() {} func (*ActionView_Undelegate) isActionView_ActionView() {} -func (*ActionView_DaoSpend) isActionView_ActionView() {} +func (*ActionView_CommunityPoolSpend) isActionView_ActionView() {} -func (*ActionView_DaoOutput) isActionView_ActionView() {} +func (*ActionView_CommunityPoolOutput) isActionView_ActionView() {} -func (*ActionView_DaoDeposit) isActionView_ActionView() {} +func (*ActionView_CommunityPoolDeposit) isActionView_ActionView() {} func (*ActionView_UndelegateClaim) isActionView_ActionView() {} @@ -1715,9 +1715,9 @@ type ActionPlan struct { // *ActionPlan_Delegate // *ActionPlan_Undelegate // *ActionPlan_UndelegateClaim - // *ActionPlan_DaoSpend - // *ActionPlan_DaoOutput - // *ActionPlan_DaoDeposit + // *ActionPlan_CommunityPoolSpend + // *ActionPlan_CommunityPoolOutput + // *ActionPlan_CommunityPoolDeposit Action isActionPlan_Action `protobuf_oneof:"action"` } @@ -1893,23 +1893,23 @@ func (x *ActionPlan) GetUndelegateClaim() *v1alpha16.UndelegateClaimPlan { return nil } -func (x *ActionPlan) GetDaoSpend() *v1alpha18.DaoSpend { - if x, ok := x.GetAction().(*ActionPlan_DaoSpend); ok { - return x.DaoSpend +func (x *ActionPlan) GetCommunityPoolSpend() *v1alpha18.CommunityPoolSpend { + if x, ok := x.GetAction().(*ActionPlan_CommunityPoolSpend); ok { + return x.CommunityPoolSpend } return nil } -func (x *ActionPlan) GetDaoOutput() *v1alpha18.DaoOutput { - if x, ok := x.GetAction().(*ActionPlan_DaoOutput); ok { - return x.DaoOutput +func (x *ActionPlan) GetCommunityPoolOutput() *v1alpha18.CommunityPoolOutput { + if x, ok := x.GetAction().(*ActionPlan_CommunityPoolOutput); ok { + return x.CommunityPoolOutput } return nil } -func (x *ActionPlan) GetDaoDeposit() *v1alpha18.DaoDeposit { - if x, ok := x.GetAction().(*ActionPlan_DaoDeposit); ok { - return x.DaoDeposit +func (x *ActionPlan) GetCommunityPoolDeposit() *v1alpha18.CommunityPoolDeposit { + if x, ok := x.GetAction().(*ActionPlan_CommunityPoolDeposit); ok { + return x.CommunityPoolDeposit } return nil } @@ -2002,17 +2002,17 @@ type ActionPlan_UndelegateClaim struct { UndelegateClaim *v1alpha16.UndelegateClaimPlan `protobuf:"bytes,42,opt,name=undelegate_claim,json=undelegateClaim,proto3,oneof"` } -type ActionPlan_DaoSpend struct { - // DAO - DaoSpend *v1alpha18.DaoSpend `protobuf:"bytes,50,opt,name=dao_spend,json=daoSpend,proto3,oneof"` +type ActionPlan_CommunityPoolSpend struct { + // Community Pool + CommunityPoolSpend *v1alpha18.CommunityPoolSpend `protobuf:"bytes,50,opt,name=community_pool_spend,json=communityPoolSpend,proto3,oneof"` } -type ActionPlan_DaoOutput struct { - DaoOutput *v1alpha18.DaoOutput `protobuf:"bytes,51,opt,name=dao_output,json=daoOutput,proto3,oneof"` +type ActionPlan_CommunityPoolOutput struct { + CommunityPoolOutput *v1alpha18.CommunityPoolOutput `protobuf:"bytes,51,opt,name=community_pool_output,json=communityPoolOutput,proto3,oneof"` } -type ActionPlan_DaoDeposit struct { - DaoDeposit *v1alpha18.DaoDeposit `protobuf:"bytes,52,opt,name=dao_deposit,json=daoDeposit,proto3,oneof"` +type ActionPlan_CommunityPoolDeposit struct { + CommunityPoolDeposit *v1alpha18.CommunityPoolDeposit `protobuf:"bytes,52,opt,name=community_pool_deposit,json=communityPoolDeposit,proto3,oneof"` } func (*ActionPlan_Spend) isActionPlan_Action() {} @@ -2053,11 +2053,11 @@ func (*ActionPlan_Undelegate) isActionPlan_Action() {} func (*ActionPlan_UndelegateClaim) isActionPlan_Action() {} -func (*ActionPlan_DaoSpend) isActionPlan_Action() {} +func (*ActionPlan_CommunityPoolSpend) isActionPlan_Action() {} -func (*ActionPlan_DaoOutput) isActionPlan_Action() {} +func (*ActionPlan_CommunityPoolOutput) isActionPlan_Action() {} -func (*ActionPlan_DaoDeposit) isActionPlan_Action() {} +func (*ActionPlan_CommunityPoolDeposit) isActionPlan_Action() {} // Describes a plan for forming a `Clue`. type CluePlan struct { @@ -2637,7 +2637,7 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x66, 0x6d, 0x64, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x66, 0x6d, 0x64, 0x43, - 0x6c, 0x75, 0x65, 0x73, 0x22, 0xbd, 0x10, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x6c, 0x75, 0x65, 0x73, 0x22, 0x9a, 0x11, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, @@ -2745,538 +2745,555 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x54, 0x0a, 0x09, 0x64, 0x61, - 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x53, - 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, - 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, - 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x5a, 0x0a, 0x0b, 0x64, 0x61, 0x6f, - 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x73, 0x0a, 0x14, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x70, 0x65, + 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, + 0x76, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, + 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, - 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x61, 0x6f, 0x44, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, - 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x97, 0x04, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, - 0x5f, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x73, - 0x12, 0x60, 0x0a, 0x10, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, - 0x65, 0x52, 0x0f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x73, 0x12, 0x57, 0x0a, 0x0c, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x74, - 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0b, - 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0c, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x64, 0x65, - 0x6e, 0x6f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x12, - 0x4d, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, - 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xb3, - 0x01, 0x0a, 0x18, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, - 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x0b, 0x70, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xac, 0x01, 0x0a, 0x11, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, - 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, - 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x48, 0x00, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, + 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x79, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, - 0x6f, 0x74, 0x65, 0x22, 0x84, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x54, 0x0a, 0x09, 0x62, 0x6f, 0x64, 0x79, 0x5f, - 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, - 0x69, 0x65, 0x77, 0x52, 0x08, 0x62, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x59, 0x0a, - 0x0b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, - 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x62, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, - 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, - 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0xff, 0x02, 0x0a, 0x13, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, - 0x65, 0x77, 0x12, 0x51, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, - 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x49, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, + 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, + 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, + 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x97, 0x04, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x5f, 0x0a, 0x0c, + 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, + 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x60, 0x0a, + 0x10, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, + 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0f, + 0x73, 0x70, 0x65, 0x6e, 0x64, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, + 0x57, 0x0a, 0x0c, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0b, 0x61, 0x64, 0x76, + 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x12, 0x4d, 0x0a, 0x0e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, - 0x65, 0x77, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x22, 0xda, 0x10, 0x0a, - 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, 0x05, 0x73, - 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, 0x0d, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x18, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, + 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, + 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, + 0x74, 0x22, 0xac, 0x01, 0x0a, 0x11, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, + 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, - 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, - 0x64, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, - 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, - 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x56, 0x69, - 0x65, 0x77, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, - 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x56, - 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, + 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, + 0x22, 0x84, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x56, 0x69, 0x65, 0x77, 0x12, 0x54, 0x0a, 0x09, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x76, 0x69, 0x65, + 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, + 0x52, 0x08, 0x62, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x59, 0x0a, 0x0b, 0x62, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x62, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, + 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0xff, 0x02, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, + 0x51, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, + 0x77, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x49, + 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x52, + 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x22, 0xb7, 0x11, 0x0a, 0x0a, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, + 0x65, 0x77, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, + 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x56, 0x69, 0x65, 0x77, 0x48, + 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x56, 0x69, 0x65, 0x77, + 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, + 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, + 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, + 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, + 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, + 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, - 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, - 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, - 0x77, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, - 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, - 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, - 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, + 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, + 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, - 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, - 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, - 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x2a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, - 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, - 0x52, 0x08, 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, - 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, + 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, + 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, + 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x12, 0x5a, 0x0a, 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, - 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, - 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0xae, 0x02, 0x0a, 0x11, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x4e, 0x0a, 0x0b, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x68, 0x61, 0x73, 0x68, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, - 0x61, 0x73, 0x68, 0x52, 0x0a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, - 0x5b, 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x02, + 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, + 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, + 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x65, 0x12, 0x73, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, + 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, + 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, + 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x76, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, + 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, + 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x79, + 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, + 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, + 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x0f, + 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, + 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, + 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, + 0x61, 0x77, 0x61, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, + 0x69, 0x65, 0x77, 0x22, 0xae, 0x02, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4e, 0x0a, 0x0b, 0x65, 0x66, 0x66, + 0x65, 0x63, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x65, + 0x66, 0x66, 0x65, 0x63, 0x74, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0a, 0x65, + 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x5b, 0x0a, 0x0b, 0x73, 0x70, 0x65, + 0x6e, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, + 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x73, 0x70, 0x65, 0x6e, + 0x64, 0x41, 0x75, 0x74, 0x68, 0x73, 0x12, 0x6c, 0x0a, 0x14, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x52, 0x0a, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x73, 0x12, 0x6c, 0x0a, 0x14, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x5f, 0x61, - 0x75, 0x74, 0x68, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, - 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x56, 0x6f, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x0b, 0x57, - 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, - 0x63, 0x68, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, - 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x6a, 0x0a, 0x17, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, - 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, + 0x52, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x41, + 0x75, 0x74, 0x68, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x0b, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, + 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x6a, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x15, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x52, 0x15, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x22, 0xed, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x48, 0x0a, 0x07, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x07, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5c, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x66, 0x73, 0x22, 0xed, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x48, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, - 0x61, 0x6e, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x60, 0x0a, 0x11, 0x44, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4b, 0x0a, - 0x0a, 0x63, 0x6c, 0x75, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, - 0x09, 0x63, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x73, 0x22, 0xd5, 0x10, 0x0a, 0x0a, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, - 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, - 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, - 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6c, 0x61, 0x6e, - 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, - 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, - 0x6e, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, - 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, - 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x12, 0x5c, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, + 0x6e, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x40, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x04, 0x6d, 0x65, + 0x6d, 0x6f, 0x22, 0x60, 0x0a, 0x11, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, + 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4b, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x65, 0x5f, + 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x65, 0x50, + 0x6c, 0x61, 0x6e, 0x73, 0x22, 0xb2, 0x11, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x6c, 0x61, 0x6e, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, + 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x6c, + 0x61, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, + 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, - 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, - 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, + 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, + 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x73, + 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, + 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, + 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, + 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, - 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, + 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, + 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, + 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, + 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, + 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, + 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x48, - 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, - 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x57, 0x0a, 0x0a, 0x77, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x61, 0x6c, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, + 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x57, 0x0a, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x61, 0x6c, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, + 0x48, 0x00, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, 0x59, + 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, + 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, + 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, + 0x61, 0x77, 0x12, 0x73, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, + 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, - 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, - 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, - 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, + 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, + 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x69, 0x0a, - 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x73, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, - 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, - 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x54, 0x0a, - 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, - 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, 0x64, 0x61, 0x6f, 0x53, 0x70, - 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, - 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x5a, 0x0a, 0x0b, - 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x61, - 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x87, 0x01, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x12, - 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, - 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x70, - 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x08, - 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4f, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x09, - 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x26, 0x0a, 0x0e, 0x4d, - 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, - 0x6e, 0x65, 0x72, 0x22, 0x70, 0x0a, 0x0d, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, - 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x78, 0x0a, 0x11, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, - 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x12, 0x4f, 0x0a, 0x0e, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0d, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, - 0xcb, 0x03, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x12, 0x50, 0x0a, 0x07, - 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4d, - 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, - 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xb2, 0x01, - 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, - 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x53, 0x0a, - 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x1a, 0x5c, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x52, 0x0a, 0x0a, - 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, - 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, - 0x42, 0x0b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x42, 0xcc, 0x02, - 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x65, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x54, 0xaa, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, - 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2e, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, - 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, - 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x25, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, - 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x73, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, + 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, + 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x76, 0x0a, 0x15, + 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, + 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x12, 0x79, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, + 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x42, + 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x87, 0x01, 0x0a, 0x08, 0x43, 0x6c, + 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, + 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x69, 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x6e, 0x12, + 0x4f, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x22, 0x26, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, + 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x70, 0x0a, 0x0d, 0x4d, 0x65, + 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x78, 0x0a, 0x11, + 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, + 0x77, 0x12, 0x4f, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, + 0x69, 0x65, 0x77, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0xcb, 0x03, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x56, + 0x69, 0x65, 0x77, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, + 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, + 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, + 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, + 0x61, 0x71, 0x75, 0x65, 0x1a, 0xb2, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, + 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, + 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, + 0x74, 0x65, 0x78, 0x74, 0x12, 0x53, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, + 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x52, 0x09, + 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x5c, 0x0a, 0x06, 0x4f, 0x70, 0x61, + 0x71, 0x75, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, + 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, + 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, + 0x76, 0x69, 0x65, 0x77, 0x42, 0xcc, 0x02, 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, + 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x65, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, + 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x54, + 0xaa, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2e, 0x50, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x25, 0x50, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3340,9 +3357,9 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_goTypes = []interf (*v1alpha16.Delegate)(nil), // 44: penumbra.core.component.stake.v1alpha1.Delegate (*v1alpha16.Undelegate)(nil), // 45: penumbra.core.component.stake.v1alpha1.Undelegate (*v1alpha16.UndelegateClaim)(nil), // 46: penumbra.core.component.stake.v1alpha1.UndelegateClaim - (*v1alpha18.DaoSpend)(nil), // 47: penumbra.core.component.governance.v1alpha1.DaoSpend - (*v1alpha18.DaoOutput)(nil), // 48: penumbra.core.component.governance.v1alpha1.DaoOutput - (*v1alpha18.DaoDeposit)(nil), // 49: penumbra.core.component.governance.v1alpha1.DaoDeposit + (*v1alpha18.CommunityPoolSpend)(nil), // 47: penumbra.core.component.governance.v1alpha1.CommunityPoolSpend + (*v1alpha18.CommunityPoolOutput)(nil), // 48: penumbra.core.component.governance.v1alpha1.CommunityPoolOutput + (*v1alpha18.CommunityPoolDeposit)(nil), // 49: penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit (*v1alpha17.Ics20Withdrawal)(nil), // 50: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal (*v1alpha14.Note)(nil), // 51: penumbra.core.component.shielded_pool.v1alpha1.Note (*v1alpha19.AddressView)(nil), // 52: penumbra.core.keys.v1alpha1.AddressView @@ -3396,9 +3413,9 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_depIdxs = []int32{ 44, // 24: penumbra.core.transaction.v1alpha1.Action.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate 45, // 25: penumbra.core.transaction.v1alpha1.Action.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate 46, // 26: penumbra.core.transaction.v1alpha1.Action.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim - 47, // 27: penumbra.core.transaction.v1alpha1.Action.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 48, // 28: penumbra.core.transaction.v1alpha1.Action.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 49, // 29: penumbra.core.transaction.v1alpha1.Action.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 47, // 27: penumbra.core.transaction.v1alpha1.Action.community_pool_spend:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolSpend + 48, // 28: penumbra.core.transaction.v1alpha1.Action.community_pool_output:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolOutput + 49, // 29: penumbra.core.transaction.v1alpha1.Action.community_pool_deposit:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit 50, // 30: penumbra.core.transaction.v1alpha1.Action.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal 7, // 31: penumbra.core.transaction.v1alpha1.TransactionPerspective.payload_keys:type_name -> penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment 8, // 32: penumbra.core.transaction.v1alpha1.TransactionPerspective.spend_nullifiers:type_name -> penumbra.core.transaction.v1alpha1.NullifierWithNote @@ -3434,9 +3451,9 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_depIdxs = []int32{ 43, // 62: penumbra.core.transaction.v1alpha1.ActionView.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim 44, // 63: penumbra.core.transaction.v1alpha1.ActionView.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate 45, // 64: penumbra.core.transaction.v1alpha1.ActionView.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 47, // 65: penumbra.core.transaction.v1alpha1.ActionView.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 48, // 66: penumbra.core.transaction.v1alpha1.ActionView.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 49, // 67: penumbra.core.transaction.v1alpha1.ActionView.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 47, // 65: penumbra.core.transaction.v1alpha1.ActionView.community_pool_spend:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolSpend + 48, // 66: penumbra.core.transaction.v1alpha1.ActionView.community_pool_output:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolOutput + 49, // 67: penumbra.core.transaction.v1alpha1.ActionView.community_pool_deposit:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit 46, // 68: penumbra.core.transaction.v1alpha1.ActionView.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim 50, // 69: penumbra.core.transaction.v1alpha1.ActionView.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal 62, // 70: penumbra.core.transaction.v1alpha1.AuthorizationData.effect_hash:type_name -> penumbra.core.effecthash.v1alpha1.EffectHash @@ -3468,9 +3485,9 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_depIdxs = []int32{ 44, // 96: penumbra.core.transaction.v1alpha1.ActionPlan.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate 45, // 97: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate 72, // 98: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan - 47, // 99: penumbra.core.transaction.v1alpha1.ActionPlan.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 48, // 100: penumbra.core.transaction.v1alpha1.ActionPlan.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 49, // 101: penumbra.core.transaction.v1alpha1.ActionPlan.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 47, // 99: penumbra.core.transaction.v1alpha1.ActionPlan.community_pool_spend:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolSpend + 48, // 100: penumbra.core.transaction.v1alpha1.ActionPlan.community_pool_output:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolOutput + 49, // 101: penumbra.core.transaction.v1alpha1.ActionPlan.community_pool_deposit:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit 73, // 102: penumbra.core.transaction.v1alpha1.CluePlan.address:type_name -> penumbra.core.keys.v1alpha1.Address 20, // 103: penumbra.core.transaction.v1alpha1.MemoPlan.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext 73, // 104: penumbra.core.transaction.v1alpha1.MemoPlaintext.return_address:type_name -> penumbra.core.keys.v1alpha1.Address @@ -3813,9 +3830,9 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { (*Action_Delegate)(nil), (*Action_Undelegate)(nil), (*Action_UndelegateClaim)(nil), - (*Action_DaoSpend)(nil), - (*Action_DaoOutput)(nil), - (*Action_DaoDeposit)(nil), + (*Action_CommunityPoolSpend)(nil), + (*Action_CommunityPoolOutput)(nil), + (*Action_CommunityPoolDeposit)(nil), (*Action_Ics20Withdrawal)(nil), } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[11].OneofWrappers = []interface{}{ @@ -3836,9 +3853,9 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { (*ActionView_PositionRewardClaim)(nil), (*ActionView_Delegate)(nil), (*ActionView_Undelegate)(nil), - (*ActionView_DaoSpend)(nil), - (*ActionView_DaoOutput)(nil), - (*ActionView_DaoDeposit)(nil), + (*ActionView_CommunityPoolSpend)(nil), + (*ActionView_CommunityPoolOutput)(nil), + (*ActionView_CommunityPoolDeposit)(nil), (*ActionView_UndelegateClaim)(nil), (*ActionView_Ics20Withdrawal)(nil), } @@ -3862,9 +3879,9 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { (*ActionPlan_Delegate)(nil), (*ActionPlan_Undelegate)(nil), (*ActionPlan_UndelegateClaim)(nil), - (*ActionPlan_DaoSpend)(nil), - (*ActionPlan_DaoOutput)(nil), - (*ActionPlan_DaoDeposit)(nil), + (*ActionPlan_CommunityPoolSpend)(nil), + (*ActionPlan_CommunityPoolOutput)(nil), + (*ActionPlan_CommunityPoolDeposit)(nil), } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22].OneofWrappers = []interface{}{ (*MemoView_Visible_)(nil), diff --git a/proto/penumbra/penumbra/core/app/v1alpha1/app.proto b/proto/penumbra/penumbra/core/app/v1alpha1/app.proto index f85c3ff19f..dc58eee45a 100644 --- a/proto/penumbra/penumbra/core/app/v1alpha1/app.proto +++ b/proto/penumbra/penumbra/core/app/v1alpha1/app.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package penumbra.core.app.v1alpha1; import "penumbra/core/component/chain/v1alpha1/chain.proto"; -import "penumbra/core/component/dao/v1alpha1/dao.proto"; +import "penumbra/core/component/community_pool/v1alpha1/community_pool.proto"; import "penumbra/core/component/distributions/v1alpha1/distributions.proto"; import "penumbra/core/component/fee/v1alpha1/fee.proto"; import "penumbra/core/component/governance/v1alpha1/governance.proto"; @@ -38,8 +38,8 @@ message TransactionsByHeightResponse { message AppParameters { // Chain module parameters. core.component.chain.v1alpha1.ChainParameters chain_params = 1; - // DAO module parameters. - core.component.dao.v1alpha1.DaoParameters dao_params = 2; + // Community Pool module parameters. + core.component.community_pool.v1alpha1.CommunityPoolParameters community_pool_params = 2; // Governance module parameters. core.component.governance.v1alpha1.GovernanceParameters governance_params = 3; // IBC module parameters. @@ -80,8 +80,8 @@ message GenesisContent { core.component.ibc.v1alpha1.GenesisContent ibc_content = 4; // Chain module genesis state. core.component.chain.v1alpha1.GenesisContent chain_content = 5; - // DAO module genesis state. - core.component.dao.v1alpha1.GenesisContent dao_content = 6; + // Community Pool module genesis state. + core.component.community_pool.v1alpha1.GenesisContent community_pool_content = 6; // Fee module genesis state. core.component.fee.v1alpha1.GenesisContent fee_content = 7; // Distributions module genesis state. diff --git a/proto/penumbra/penumbra/core/component/community_pool/v1alpha1/community_pool.proto b/proto/penumbra/penumbra/core/component/community_pool/v1alpha1/community_pool.proto new file mode 100644 index 0000000000..19c39b7a8c --- /dev/null +++ b/proto/penumbra/penumbra/core/component/community_pool/v1alpha1/community_pool.proto @@ -0,0 +1,35 @@ +syntax = "proto3"; +package penumbra.core.component.community_pool.v1alpha1; + +import "penumbra/core/asset/v1alpha1/asset.proto"; + +// CommunityPool parameter data. +message CommunityPoolParameters { + // Whether Community Pool spend proposals are enabled. + bool community_pool_spend_proposals_enabled = 1; +} + +// CommunityPool genesis state. +message GenesisContent { + // CommunityPool parameters. + CommunityPoolParameters community_pool_params = 1; +} + +// Query operations for the community_pool component. +service QueryService { + rpc CommunityPoolAssetBalances(CommunityPoolAssetBalancesRequest) returns (stream CommunityPoolAssetBalancesResponse); +} + +// Requests the list of all asset balances associated with the Community Pool. +message CommunityPoolAssetBalancesRequest { + // The expected chain id (empty string if no expectation). + string chain_id = 1; + // (Optional): The specific asset balances to retrieve, if excluded all will be returned. + repeated asset.v1alpha1.AssetId asset_ids = 2; +} + +// The Community Pool's balance of a single asset. +message CommunityPoolAssetBalancesResponse { + // The balance for a single asset. + core.asset.v1alpha1.Value balance = 1; +} diff --git a/proto/penumbra/penumbra/core/component/dao/v1alpha1/dao.proto b/proto/penumbra/penumbra/core/component/dao/v1alpha1/dao.proto deleted file mode 100644 index 39f3d3d953..0000000000 --- a/proto/penumbra/penumbra/core/component/dao/v1alpha1/dao.proto +++ /dev/null @@ -1,35 +0,0 @@ -syntax = "proto3"; -package penumbra.core.component.dao.v1alpha1; - -import "penumbra/core/asset/v1alpha1/asset.proto"; - -// Dao parameter data. -message DaoParameters { - // Whether DAO spend proposals are enabled. - bool dao_spend_proposals_enabled = 1; -} - -// Dao genesis state. -message GenesisContent { - // Dao parameters. - DaoParameters dao_params = 1; -} - -// Query operations for the dao component. -service QueryService { - rpc DaoAssetBalances(DaoAssetBalancesRequest) returns (stream DaoAssetBalancesResponse); -} - -// Requests the list of all asset balances associated with the DAO. -message DaoAssetBalancesRequest { - // The expected chain id (empty string if no expectation). - string chain_id = 1; - // (Optional): The specific asset balances to retrieve, if excluded all will be returned. - repeated asset.v1alpha1.AssetId asset_ids = 2; -} - -// The DAO's balance of a single asset. -message DaoAssetBalancesResponse { - // The balance for a single asset. - core.asset.v1alpha1.Value balance = 1; -} diff --git a/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto b/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto index 2f2b3c35d1..790c69e3d7 100644 --- a/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto +++ b/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto @@ -4,7 +4,7 @@ package penumbra.core.component.governance.v1alpha1; import "google/protobuf/any.proto"; import "penumbra/core/asset/v1alpha1/asset.proto"; import "penumbra/core/component/chain/v1alpha1/chain.proto"; -import "penumbra/core/component/dao/v1alpha1/dao.proto"; +import "penumbra/core/component/community_pool/v1alpha1/community_pool.proto"; import "penumbra/core/component/distributions/v1alpha1/distributions.proto"; import "penumbra/core/component/fee/v1alpha1/fee.proto"; import "penumbra/core/component/ibc/v1alpha1/ibc.proto"; @@ -128,18 +128,18 @@ message DelegatorVotePlan { bytes proof_blinding_s = 9; } -message DaoDeposit { - // The value to deposit into the DAO. +message CommunityPoolDeposit { + // The value to deposit into the Community Pool. asset.v1alpha1.Value value = 1; } -message DaoSpend { - // The value to spend from the DAO. +message CommunityPoolSpend { + // The value to spend from the Community Pool. asset.v1alpha1.Value value = 1; } -message DaoOutput { - // The value to output from the DAO. +message CommunityPoolOutput { + // The value to output from the Community Pool. asset.v1alpha1.Value value = 1; // The address to send the output to. keys.v1alpha1.Address address = 2; @@ -244,7 +244,7 @@ message Proposal { Signaling signaling = 5; Emergency emergency = 6; ParameterChange parameter_change = 7; - DaoSpend dao_spend = 8; + CommunityPoolSpend community_pool_spend = 8; UpgradePlan upgrade_plan = 9; // A signaling proposal is meant to register a vote on-chain, but does not have an automatic @@ -280,13 +280,13 @@ message Proposal { ChangedAppParameters new_parameters = 2; } - // A DAO spend proposal describes zero or more transactions to execute on behalf of the DAO, with + // A Community Pool spend proposal describes zero or more transactions to execute on behalf of the Community Pool, with // access to its funds, and zero or more scheduled transactions from previous passed proposals to // cancel. - message DaoSpend { + message CommunityPoolSpend { // The transaction plan to be executed at the time the proposal is passed. This must be a - // transaction plan which can be executed by the DAO, which means it can't require any witness - // data or authorization signatures, but it may use the `DaoSpend` action. + // transaction plan which can be executed by the Community Pool, which means it can't require any witness + // data or authorization signatures, but it may use the `CommunityPoolSpend` action. google.protobuf.Any transaction_plan = 2; } @@ -425,8 +425,8 @@ message GenesisContent { message ChangedAppParameters { // Chain module parameters. core.component.chain.v1alpha1.ChainParameters chain_params = 1; - // DAO module parameters. - core.component.dao.v1alpha1.DaoParameters dao_params = 2; + // Community Pool module parameters. + core.component.community_pool.v1alpha1.CommunityPoolParameters community_pool_params = 2; // Governance module parameters. core.component.governance.v1alpha1.GovernanceParameters governance_params = 3; // IBC module parameters. diff --git a/proto/penumbra/penumbra/core/component/sct/v1alpha1/sct.proto b/proto/penumbra/penumbra/core/component/sct/v1alpha1/sct.proto index 32f5ed9202..42b1376798 100644 --- a/proto/penumbra/penumbra/core/component/sct/v1alpha1/sct.proto +++ b/proto/penumbra/penumbra/core/component/sct/v1alpha1/sct.proto @@ -27,8 +27,8 @@ message CommitmentSource { // The epoch index the rewards were issued in. uint64 epoch_index = 1; } - // The commitment was created through a `DaoOutput` in a governance-initated transaction. - message DaoOutput { } + // The commitment was created through a `CommunityPoolOutput` in a governance-initated transaction. + message CommunityPoolOutput { } // The commitment was created by an inbound ICS20 transfer. message Ics20Transfer { // The sequence number of the packet that triggered the transfer @@ -42,7 +42,7 @@ message CommitmentSource { Transaction transaction = 1; Ics20Transfer ics_20_transfer = 2; FundingStreamReward funding_stream_reward = 20; - DaoOutput dao_output = 30; + CommunityPoolOutput community_pool_output = 30; Genesis genesis = 40; } } diff --git a/proto/penumbra/penumbra/core/component/stake/v1alpha1/stake.proto b/proto/penumbra/penumbra/core/component/stake/v1alpha1/stake.proto index 29a1410c58..6e0b57f594 100644 --- a/proto/penumbra/penumbra/core/component/stake/v1alpha1/stake.proto +++ b/proto/penumbra/penumbra/core/component/stake/v1alpha1/stake.proto @@ -51,7 +51,7 @@ message FundingStream { uint32 rate_bps = 2; } - message ToDao { + message ToCommunityPool { // The portion of the staking reward for the entire delegation pool // allocated to this funding stream, specified in basis points. uint32 rate_bps = 2; @@ -60,7 +60,7 @@ message FundingStream { // The recipient of the funding stream. oneof recipient { ToAddress to_address = 1; - ToDao to_dao = 2; + ToCommunityPool to_community_pool = 2; } } diff --git a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto index b77170adbb..fe455d4e27 100644 --- a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto +++ b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto @@ -95,10 +95,10 @@ message Action { component.stake.v1alpha1.Undelegate undelegate = 41; component.stake.v1alpha1.UndelegateClaim undelegate_claim = 42; - // DAO - component.governance.v1alpha1.DaoSpend dao_spend = 50; - component.governance.v1alpha1.DaoOutput dao_output = 51; - component.governance.v1alpha1.DaoDeposit dao_deposit = 52; + // Community Pool + component.governance.v1alpha1.CommunityPoolSpend community_pool_spend = 50; + component.governance.v1alpha1.CommunityPoolOutput community_pool_output = 51; + component.governance.v1alpha1.CommunityPoolDeposit community_pool_deposit = 52; component.ibc.v1alpha1.Ics20Withdrawal ics20_withdrawal = 200; } @@ -181,10 +181,10 @@ message ActionView { component.stake.v1alpha1.Delegate delegate = 41; component.stake.v1alpha1.Undelegate undelegate = 42; - // DAO - component.governance.v1alpha1.DaoSpend dao_spend = 50; - component.governance.v1alpha1.DaoOutput dao_output = 51; - component.governance.v1alpha1.DaoDeposit dao_deposit = 52; + // Community Pool + component.governance.v1alpha1.CommunityPoolSpend community_pool_spend = 50; + component.governance.v1alpha1.CommunityPoolOutput community_pool_output = 51; + component.governance.v1alpha1.CommunityPoolDeposit community_pool_deposit = 52; // TODO: we have no way to recover the opening of the undelegate_claim's // balance commitment, and can only infer the value from looking at the rest @@ -274,10 +274,10 @@ message ActionPlan { component.stake.v1alpha1.Undelegate undelegate = 41; component.stake.v1alpha1.UndelegateClaimPlan undelegate_claim = 42; - // DAO - component.governance.v1alpha1.DaoSpend dao_spend = 50; - component.governance.v1alpha1.DaoOutput dao_output = 51; - component.governance.v1alpha1.DaoDeposit dao_deposit = 52; + // Community Pool + component.governance.v1alpha1.CommunityPoolSpend community_pool_spend = 50; + component.governance.v1alpha1.CommunityPoolOutput community_pool_output = 51; + component.governance.v1alpha1.CommunityPoolDeposit community_pool_deposit = 52; } } diff --git a/tools/parameter-setup/Cargo.toml b/tools/parameter-setup/Cargo.toml index a171161f3e..111c48e07e 100644 --- a/tools/parameter-setup/Cargo.toml +++ b/tools/parameter-setup/Cargo.toml @@ -6,12 +6,20 @@ publish = false [dependencies] penumbra-proof-params = { path = "../../crates/crypto/proof-params" } -penumbra-proof-setup = { path = "../../crates/crypto/proof-setup", features = ["parallel"] } +penumbra-proof-setup = { path = "../../crates/crypto/proof-setup", features = [ + "parallel", +] } penumbra-dex = { path = "../../crates/core/component/dex/" } -penumbra-dao = { path = "../../crates/core/component/dao/", features = ["component"] } +penumbra-community-pool = { path = "../../crates/core/component/community-pool/", features = [ + "component", +] } penumbra-governance = { path = "../../crates/core/component/governance/" } -penumbra-shielded-pool = { path = "../../crates/core/component/shielded-pool/", features = ["parallel"] } -penumbra-stake = { path = "../../crates/core/component/stake/", features = ["component"] } +penumbra-shielded-pool = { path = "../../crates/core/component/shielded-pool/", features = [ + "parallel", +] } +penumbra-stake = { path = "../../crates/core/component/stake/", features = [ + "component", +] } ark-groth16 = "0.4" ark-serialize = "0.4" decaf377 = { version = "0.5", features = ["r1cs"] } diff --git a/tools/proto-compiler/src/main.rs b/tools/proto-compiler/src/main.rs index 442b0e5ef0..4c2289ce5c 100644 --- a/tools/proto-compiler/src/main.rs +++ b/tools/proto-compiler/src/main.rs @@ -92,7 +92,7 @@ fn main() -> anyhow::Result<()> { "../../proto/penumbra/penumbra/core/effecthash/v1alpha1/effecthash.proto", "../../proto/penumbra/penumbra/core/component/chain/v1alpha1/chain.proto", "../../proto/penumbra/penumbra/core/component/compact_block/v1alpha1/compact_block.proto", - "../../proto/penumbra/penumbra/core/component/dao/v1alpha1/dao.proto", + "../../proto/penumbra/penumbra/core/component/community_pool/v1alpha1/community_pool.proto", "../../proto/penumbra/penumbra/core/component/dex/v1alpha1/dex.proto", "../../proto/penumbra/penumbra/core/component/distributions/v1alpha1/distributions.proto", "../../proto/penumbra/penumbra/core/component/fee/v1alpha1/fee.proto", From 58cc8cca7b2364c7a9a507218169889f2b42d6f3 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Sat, 30 Dec 2023 12:21:41 -0500 Subject: [PATCH 14/84] Rename effecthash crate to txhash This allows us to put not just the effect hash but also the auth hash and transaction ID, letting other parts of the source tree reference transaction IDs without depending on the transaction crate. --- Cargo.lock | 40 +- Cargo.toml | 2 +- crates/core/app/Cargo.toml | 2 +- crates/core/app/src/tests/spend.rs | 2 +- crates/core/component/chain/Cargo.toml | 2 +- .../core/component/chain/src/transaction.rs | 2 +- .../core/component/community-pool/Cargo.toml | 2 +- .../src/action/community_pool_deposit.rs | 2 +- .../src/action/community_pool_output.rs | 2 +- .../src/action/community_pool_spend.rs | 2 +- crates/core/component/dex/Cargo.toml | 2 +- crates/core/component/dex/src/lp/action.rs | 2 +- crates/core/component/dex/src/swap/action.rs | 2 +- .../component/dex/src/swap_claim/action.rs | 2 +- crates/core/component/governance/Cargo.toml | 2 +- .../governance/src/delegator_vote/action.rs | 2 +- .../src/proposal_deposit_claim/action.rs | 2 +- .../governance/src/proposal_submit/action.rs | 2 +- .../src/proposal_withdraw/action.rs | 2 +- .../governance/src/validator_vote/action.rs | 2 +- crates/core/component/ibc/Cargo.toml | 2 +- crates/core/component/ibc/src/ibc_action.rs | 2 +- .../core/component/shielded-pool/Cargo.toml | 2 +- .../shielded-pool/src/ics20_withdrawal.rs | 2 +- .../shielded-pool/src/output/action.rs | 2 +- .../shielded-pool/src/spend/action.rs | 2 +- crates/core/component/stake/Cargo.toml | 2 +- crates/core/component/stake/src/delegate.rs | 2 +- crates/core/component/stake/src/undelegate.rs | 2 +- .../stake/src/undelegate_claim/action.rs | 2 +- .../stake/src/validator/definition.rs | 2 +- crates/core/transaction/Cargo.toml | 2 +- crates/core/transaction/src/action.rs | 2 +- crates/core/transaction/src/auth_data.rs | 2 +- crates/core/transaction/src/detection_data.rs | 2 +- crates/core/transaction/src/memo.rs | 2 +- crates/core/transaction/src/parameters.rs | 2 +- crates/core/transaction/src/plan.rs | 4 +- crates/core/transaction/src/plan/action.rs | 2 +- crates/core/transaction/src/transaction.rs | 2 +- crates/core/{effecthash => txhash}/Cargo.toml | 2 +- .../{effecthash => txhash}/src/effect_hash.rs | 2 +- .../src/effecting_data.rs | 0 crates/core/{effecthash => txhash}/src/lib.rs | 0 crates/custody/Cargo.toml | 2 +- crates/custody/src/threshold/sign.rs | 2 +- .../src/gen/penumbra.core.app.v1alpha1.rs | 199 ++- ....core.component.community_pool.v1alpha1.rs | 61 +- ...mbra.core.component.governance.v1alpha1.rs | 542 +++++-- .../gen/penumbra.core.transaction.v1alpha1.rs | 154 +- ...a1.rs => penumbra.core.txhash.v1alpha1.rs} | 4 +- ...=> penumbra.core.txhash.v1alpha1.serde.rs} | 6 +- .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 340071 -> 340212 bytes crates/proto/src/lib.rs | 6 +- deployments/scripts/rust-docs | 2 +- docs/rustdoc/index.html | 3 +- .../core/effecthash/v1alpha1/effecthash.pb.go | 167 -- .../transaction/v1alpha1/transaction.pb.go | 1443 ++++++++--------- .../core/txhash/v1alpha1/txhash.pb.go | 164 ++ .../transaction/v1alpha1/transaction.proto | 4 +- .../v1alpha1/txhash.proto} | 2 +- tools/proto-compiler/src/main.rs | 2 +- 62 files changed, 1611 insertions(+), 1276 deletions(-) rename crates/core/{effecthash => txhash}/Cargo.toml (87%) rename crates/core/{effecthash => txhash}/src/effect_hash.rs (96%) rename crates/core/{effecthash => txhash}/src/effecting_data.rs (100%) rename crates/core/{effecthash => txhash}/src/lib.rs (100%) rename crates/proto/src/gen/{penumbra.core.effecthash.v1alpha1.rs => penumbra.core.txhash.v1alpha1.rs} (75%) rename crates/proto/src/gen/{penumbra.core.effecthash.v1alpha1.serde.rs => penumbra.core.txhash.v1alpha1.serde.rs} (92%) delete mode 100644 proto/go/gen/penumbra/core/effecthash/v1alpha1/effecthash.pb.go create mode 100644 proto/go/gen/penumbra/core/txhash/v1alpha1/txhash.pb.go rename proto/penumbra/penumbra/core/{effecthash/v1alpha1/effecthash.proto => txhash/v1alpha1/txhash.proto} (81%) diff --git a/Cargo.lock b/Cargo.lock index c0ab72010c..95847adb07 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4927,7 +4927,6 @@ dependencies = [ "penumbra-compact-block", "penumbra-dex", "penumbra-distributions", - "penumbra-effecthash", "penumbra-fee", "penumbra-governance", "penumbra-ibc", @@ -4940,6 +4939,7 @@ dependencies = [ "penumbra-stake", "penumbra-tct", "penumbra-transaction", + "penumbra-txhash", "prost", "rand_chacha 0.3.1", "rand_core 0.6.4", @@ -5067,11 +5067,11 @@ dependencies = [ "ics23", "once_cell", "penumbra-asset", - "penumbra-effecthash", "penumbra-keys", "penumbra-num", "penumbra-proto", "penumbra-tct", + "penumbra-txhash", "serde", "sha2 0.9.9", "tendermint", @@ -5098,12 +5098,12 @@ dependencies = [ "pbjson-types", "penumbra-asset", "penumbra-chain", - "penumbra-effecthash", "penumbra-keys", "penumbra-num", "penumbra-proto", "penumbra-sct", "penumbra-shielded-pool", + "penumbra-txhash", "prost", "serde", "sha2 0.10.8", @@ -5169,10 +5169,10 @@ dependencies = [ "futures", "hex", "penumbra-chain", - "penumbra-effecthash", "penumbra-keys", "penumbra-proto", "penumbra-transaction", + "penumbra-txhash", "prost", "rand_core 0.6.4", "serde", @@ -5215,7 +5215,6 @@ dependencies = [ "pbjson-types", "penumbra-asset", "penumbra-chain", - "penumbra-effecthash", "penumbra-fee", "penumbra-keys", "penumbra-num", @@ -5224,6 +5223,7 @@ dependencies = [ "penumbra-sct", "penumbra-shielded-pool", "penumbra-tct", + "penumbra-txhash", "poseidon377", "proptest", "prost", @@ -5279,16 +5279,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "penumbra-effecthash" -version = "0.64.1" -dependencies = [ - "anyhow", - "blake2b_simd 0.5.11", - "hex", - "penumbra-proto", -] - [[package]] name = "penumbra-fee" version = "0.64.1" @@ -5343,7 +5333,6 @@ dependencies = [ "penumbra-chain", "penumbra-community-pool", "penumbra-distributions", - "penumbra-effecthash", "penumbra-fee", "penumbra-ibc", "penumbra-keys", @@ -5354,6 +5343,7 @@ dependencies = [ "penumbra-shielded-pool", "penumbra-stake", "penumbra-tct", + "penumbra-txhash", "proptest", "proptest-derive", "rand 0.8.5", @@ -5388,10 +5378,10 @@ dependencies = [ "pbjson-types", "penumbra-asset", "penumbra-chain", - "penumbra-effecthash", "penumbra-keys", "penumbra-num", "penumbra-proto", + "penumbra-txhash", "prost", "serde", "serde_json", @@ -5673,7 +5663,6 @@ dependencies = [ "once_cell", "penumbra-asset", "penumbra-chain", - "penumbra-effecthash", "penumbra-ibc", "penumbra-keys", "penumbra-num", @@ -5681,6 +5670,7 @@ dependencies = [ "penumbra-proto", "penumbra-sct", "penumbra-tct", + "penumbra-txhash", "poseidon377", "proptest", "prost", @@ -5724,7 +5714,6 @@ dependencies = [ "penumbra-chain", "penumbra-community-pool", "penumbra-distributions", - "penumbra-effecthash", "penumbra-keys", "penumbra-num", "penumbra-proof-params", @@ -5732,6 +5721,7 @@ dependencies = [ "penumbra-sct", "penumbra-shielded-pool", "penumbra-tct", + "penumbra-txhash", "proptest", "rand_chacha 0.3.1", "rand_core 0.6.4", @@ -5902,7 +5892,6 @@ dependencies = [ "penumbra-chain", "penumbra-community-pool", "penumbra-dex", - "penumbra-effecthash", "penumbra-fee", "penumbra-governance", "penumbra-ibc", @@ -5914,6 +5903,7 @@ dependencies = [ "penumbra-shielded-pool", "penumbra-stake", "penumbra-tct", + "penumbra-txhash", "poseidon377", "proptest", "proptest-derive", @@ -5929,6 +5919,16 @@ dependencies = [ "wasm-bindgen-test", ] +[[package]] +name = "penumbra-txhash" +version = "0.64.1" +dependencies = [ + "anyhow", + "blake2b_simd 0.5.11", + "hex", + "penumbra-proto", +] + [[package]] name = "penumbra-view" version = "0.64.1" diff --git a/Cargo.toml b/Cargo.toml index 1d0fa843e9..e6ac21c3c2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ members = [ "crates/core/num", "crates/core/keys", "crates/core/asset", - "crates/core/effecthash", + "crates/core/txhash", "crates/core/component/chain", "crates/core/component/shielded-pool", "crates/core/component/governance", diff --git a/crates/core/app/Cargo.toml b/crates/core/app/Cargo.toml index 58cdab50ab..fff6d8d8f4 100644 --- a/crates/core/app/Cargo.toml +++ b/crates/core/app/Cargo.toml @@ -14,7 +14,7 @@ penumbra-tct = { path = "../../crypto/tct" } penumbra-proof-params = { path = "../../crypto/proof-params" } penumbra-asset = { path = "../asset" } penumbra-keys = { path = "../keys" } -penumbra-effecthash = { path = "../effecthash" } +penumbra-txhash = { path = "../txhash" } penumbra-num = { path = "../num" } penumbra-chain = { path = "../component/chain", features = ["component"] } penumbra-shielded-pool = { path = "../component/shielded-pool", features = [ diff --git a/crates/core/app/src/tests/spend.rs b/crates/core/app/src/tests/spend.rs index 6c9d0ca4eb..963800a6ae 100644 --- a/crates/core/app/src/tests/spend.rs +++ b/crates/core/app/src/tests/spend.rs @@ -7,12 +7,12 @@ use decaf377_rdsa::SigningKey; use penumbra_asset::Value; use penumbra_chain::{component::StateWriteExt, TransactionContext}; use penumbra_compact_block::component::CompactBlockManager; -use penumbra_effecthash::EffectHash; use penumbra_keys::{test_keys, PayloadKey}; use penumbra_num::Amount; use penumbra_sct::component::SourceContext; use penumbra_shielded_pool::{component::ShieldedPool, SpendPlan}; use penumbra_transaction::{AuthorizingData, Transaction, TransactionBody, TransactionParameters}; +use penumbra_txhash::EffectHash; use rand_core::SeedableRng; use tendermint::abci; diff --git a/crates/core/component/chain/Cargo.toml b/crates/core/component/chain/Cargo.toml index d2b5eef08e..12ff7e17e1 100644 --- a/crates/core/component/chain/Cargo.toml +++ b/crates/core/component/chain/Cargo.toml @@ -11,7 +11,7 @@ penumbra-asset = { path = "../../../core/asset", default-features = false } penumbra-proto = { path = "../../../proto", default-features = false } penumbra-tct = { path = "../../../crypto/tct" } penumbra-keys = { path = "../../../core/keys", default-features = false } -penumbra-effecthash = { path = "../../../core/effecthash", default-features = false } +penumbra-txhash = { path = "../../../core/txhash", default-features = false } penumbra-num = { path = "../../../core/num", default-features = false } # Penumbra dependencies diff --git a/crates/core/component/chain/src/transaction.rs b/crates/core/component/chain/src/transaction.rs index aca9653eea..7f731ef20f 100644 --- a/crates/core/component/chain/src/transaction.rs +++ b/crates/core/component/chain/src/transaction.rs @@ -1,5 +1,5 @@ -use penumbra_effecthash::EffectHash; use penumbra_tct as tct; +use penumbra_txhash::EffectHash; /// Stateless verification context for a transaction. /// diff --git a/crates/core/component/community-pool/Cargo.toml b/crates/core/component/community-pool/Cargo.toml index d59368bf4b..c3e0f0b035 100644 --- a/crates/core/component/community-pool/Cargo.toml +++ b/crates/core/component/community-pool/Cargo.toml @@ -27,7 +27,7 @@ penumbra-sct = { path = "../sct", default-features = false } penumbra-asset = { path = "../../../core/asset", default-features = false } penumbra-num = { path = "../../../core/num", default-features = false } penumbra-keys = { path = "../../../core/keys", default-features = false } -penumbra-effecthash = { path = "../../../core/effecthash", default-features = false } +penumbra-txhash = { path = "../../../core/txhash", default-features = false } # Crates.io deps ark-ff = { version = "0.4", default_features = false } diff --git a/crates/core/component/community-pool/src/action/community_pool_deposit.rs b/crates/core/component/community-pool/src/action/community_pool_deposit.rs index 4c905c09f0..9512b217d6 100644 --- a/crates/core/component/community-pool/src/action/community_pool_deposit.rs +++ b/crates/core/component/community-pool/src/action/community_pool_deposit.rs @@ -1,5 +1,5 @@ use anyhow::{Context, Error}; -use penumbra_effecthash::{EffectHash, EffectingData}; +use penumbra_txhash::{EffectHash, EffectingData}; use serde::{Deserialize, Serialize}; use std::convert::{TryFrom, TryInto}; diff --git a/crates/core/component/community-pool/src/action/community_pool_output.rs b/crates/core/component/community-pool/src/action/community_pool_output.rs index 6952bd5448..d3e1cf5bf5 100644 --- a/crates/core/component/community-pool/src/action/community_pool_output.rs +++ b/crates/core/component/community-pool/src/action/community_pool_output.rs @@ -3,9 +3,9 @@ use serde::{Deserialize, Serialize}; use std::convert::{TryFrom, TryInto}; use penumbra_asset::{Balance, Value}; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_keys::Address; use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType}; +use penumbra_txhash::{EffectHash, EffectingData}; #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(try_from = "pb::CommunityPoolOutput", into = "pb::CommunityPoolOutput")] diff --git a/crates/core/component/community-pool/src/action/community_pool_spend.rs b/crates/core/component/community-pool/src/action/community_pool_spend.rs index fbef03cd0a..ceeca2ce28 100644 --- a/crates/core/component/community-pool/src/action/community_pool_spend.rs +++ b/crates/core/component/community-pool/src/action/community_pool_spend.rs @@ -3,8 +3,8 @@ use serde::{Deserialize, Serialize}; use std::convert::TryFrom; use penumbra_asset::{Balance, Value}; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType}; +use penumbra_txhash::{EffectHash, EffectingData}; #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(try_from = "pb::CommunityPoolSpend", into = "pb::CommunityPoolSpend")] diff --git a/crates/core/component/dex/Cargo.toml b/crates/core/component/dex/Cargo.toml index 373c906273..47fa6cbdde 100644 --- a/crates/core/component/dex/Cargo.toml +++ b/crates/core/component/dex/Cargo.toml @@ -43,7 +43,7 @@ penumbra-proof-params = { path = "../../../crypto/proof-params" } penumbra-asset = { path = "../../../core/asset", default-features = false } penumbra-num = { path = "../../../core/num", default-features = false } penumbra-keys = { path = "../../../core/keys", default-features = false } -penumbra-effecthash = { path = "../../../core/effecthash", default-features = false } +penumbra-txhash = { path = "../../../core/txhash", default-features = false } decaf377-ka = { path = "../../../crypto/decaf377-ka/" } decaf377-fmd = { path = "../../../crypto/decaf377-fmd/" } diff --git a/crates/core/component/dex/src/lp/action.rs b/crates/core/component/dex/src/lp/action.rs index 2373115d2d..0eec1ad32d 100644 --- a/crates/core/component/dex/src/lp/action.rs +++ b/crates/core/component/dex/src/lp/action.rs @@ -1,8 +1,8 @@ use serde::{Deserialize, Serialize}; use penumbra_asset::{balance, Balance, Value}; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::{penumbra::core::component::dex::v1alpha1 as pb, DomainType}; +use penumbra_txhash::{EffectHash, EffectingData}; use super::{position, position::Position, LpNft}; diff --git a/crates/core/component/dex/src/swap/action.rs b/crates/core/component/dex/src/swap/action.rs index 16e887d825..4eb43ae65c 100644 --- a/crates/core/component/dex/src/swap/action.rs +++ b/crates/core/component/dex/src/swap/action.rs @@ -2,12 +2,12 @@ use anyhow::Context; use ark_ff::Zero; use decaf377::Fr; use penumbra_asset::{balance, Balance, Value}; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_num::Amount; use penumbra_proto::{ core::component::dex::v1alpha1 as pbc, penumbra::core::component::dex::v1alpha1 as pb, DomainType, }; +use penumbra_txhash::{EffectHash, EffectingData}; use serde::{Deserialize, Serialize}; use crate::TradingPair; diff --git a/crates/core/component/dex/src/swap_claim/action.rs b/crates/core/component/dex/src/swap_claim/action.rs index 285daeea88..8d352c019a 100644 --- a/crates/core/component/dex/src/swap_claim/action.rs +++ b/crates/core/component/dex/src/swap_claim/action.rs @@ -1,11 +1,11 @@ use anyhow::Context; use penumbra_asset::Balance; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_fee::Fee; use penumbra_proof_params::GROTH16_PROOF_LENGTH_BYTES; use penumbra_proto::{penumbra::core::component::dex::v1alpha1 as pb, DomainType}; use penumbra_sct::Nullifier; use penumbra_tct as tct; +use penumbra_txhash::{EffectHash, EffectingData}; use serde::{Deserialize, Serialize}; use crate::BatchSwapOutputData; diff --git a/crates/core/component/governance/Cargo.toml b/crates/core/component/governance/Cargo.toml index 06b893ae81..5175e25fbc 100644 --- a/crates/core/component/governance/Cargo.toml +++ b/crates/core/component/governance/Cargo.toml @@ -46,7 +46,7 @@ penumbra-distributions = { path = "../distributions", default-features = false } penumbra-chain = { path = "../chain", default-features = false } penumbra-asset = { path = "../../../core/asset", default-features = false } penumbra-keys = { path = "../../../core/keys", default-features = false } -penumbra-effecthash = { path = "../../../core/effecthash", default-features = false } +penumbra-txhash = { path = "../../../core/txhash", default-features = false } penumbra-num = { path = "../../../core/num", default-features = false } # Penumbra dependencies diff --git a/crates/core/component/governance/src/delegator_vote/action.rs b/crates/core/component/governance/src/delegator_vote/action.rs index 6edfefddca..393a855410 100644 --- a/crates/core/component/governance/src/delegator_vote/action.rs +++ b/crates/core/component/governance/src/delegator_vote/action.rs @@ -3,11 +3,11 @@ use anyhow::Context; use crate::{vote::Vote, DelegatorVoteProof}; use decaf377_rdsa::{Signature, SpendAuth, VerificationKey}; use penumbra_asset::Value; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_num::Amount; use penumbra_proto::{core::component::governance::v1alpha1 as pb, DomainType}; use penumbra_sct::Nullifier; use penumbra_tct as tct; +use penumbra_txhash::{EffectHash, EffectingData}; #[derive(Debug, Clone)] pub struct DelegatorVote { diff --git a/crates/core/component/governance/src/proposal_deposit_claim/action.rs b/crates/core/component/governance/src/proposal_deposit_claim/action.rs index 0be3a2b797..aa0c5245fc 100644 --- a/crates/core/component/governance/src/proposal_deposit_claim/action.rs +++ b/crates/core/component/governance/src/proposal_deposit_claim/action.rs @@ -4,9 +4,9 @@ use penumbra_asset::{ asset::{self, DenomMetadata}, Balance, Value, STAKING_TOKEN_ASSET_ID, }; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_num::Amount; use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType}; +use penumbra_txhash::{EffectHash, EffectingData}; use crate::proposal_state::{Outcome, Withdrawn}; diff --git a/crates/core/component/governance/src/proposal_submit/action.rs b/crates/core/component/governance/src/proposal_submit/action.rs index 08c059e482..293128cb30 100644 --- a/crates/core/component/governance/src/proposal_submit/action.rs +++ b/crates/core/component/governance/src/proposal_submit/action.rs @@ -1,9 +1,9 @@ use serde::{Deserialize, Serialize}; use penumbra_asset::{Balance, Value, STAKING_TOKEN_ASSET_ID}; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_num::Amount; use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType}; +use penumbra_txhash::{EffectHash, EffectingData}; use crate::proposal::Proposal; diff --git a/crates/core/component/governance/src/proposal_withdraw/action.rs b/crates/core/component/governance/src/proposal_withdraw/action.rs index 978f5bfb1c..80ca8a2a2b 100644 --- a/crates/core/component/governance/src/proposal_withdraw/action.rs +++ b/crates/core/component/governance/src/proposal_withdraw/action.rs @@ -1,9 +1,9 @@ use serde::{Deserialize, Serialize}; use penumbra_asset::{Balance, Value}; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_num::Amount; use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType}; +use penumbra_txhash::{EffectHash, EffectingData}; use crate::ProposalNft; diff --git a/crates/core/component/governance/src/validator_vote/action.rs b/crates/core/component/governance/src/validator_vote/action.rs index 0204aa01cf..3f0f4cd9a7 100644 --- a/crates/core/component/governance/src/validator_vote/action.rs +++ b/crates/core/component/governance/src/validator_vote/action.rs @@ -1,7 +1,7 @@ use decaf377_rdsa::{Signature, SpendAuth}; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType}; use penumbra_stake::{GovernanceKey, IdentityKey}; +use penumbra_txhash::{EffectHash, EffectingData}; use serde::{Deserialize, Serialize}; use crate::vote::Vote; diff --git a/crates/core/component/ibc/Cargo.toml b/crates/core/component/ibc/Cargo.toml index 89fdac9f1d..3b99204bbe 100644 --- a/crates/core/component/ibc/Cargo.toml +++ b/crates/core/component/ibc/Cargo.toml @@ -26,7 +26,7 @@ penumbra-chain = { path = "../chain", default-features = false } penumbra-asset = { path = "../../../core/asset", default-features = false } penumbra-num = { path = "../../../core/num", default-features = false } penumbra-keys = { path = "../../../core/keys", default-features = false } -penumbra-effecthash = { path = "../../../core/effecthash", default-features = false } +penumbra-txhash = { path = "../../../core/txhash", default-features = false } # Penumbra dependencies ibc-types = { version = "0.10.0", default-features = false } diff --git a/crates/core/component/ibc/src/ibc_action.rs b/crates/core/component/ibc/src/ibc_action.rs index 782b1feec1..29ac6c5cd2 100644 --- a/crates/core/component/ibc/src/ibc_action.rs +++ b/crates/core/component/ibc/src/ibc_action.rs @@ -31,9 +31,9 @@ use ibc_types::core::{ use ibc_types::DomainType as IbcTypesDomainType; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::penumbra::core::component::ibc::v1alpha1::{self as pb}; use penumbra_proto::{DomainType, Name}; +use penumbra_txhash::{EffectHash, EffectingData}; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/crates/core/component/shielded-pool/Cargo.toml b/crates/core/component/shielded-pool/Cargo.toml index 2d147dc9a0..33b4edade8 100644 --- a/crates/core/component/shielded-pool/Cargo.toml +++ b/crates/core/component/shielded-pool/Cargo.toml @@ -43,7 +43,7 @@ penumbra-chain = { path = "../chain", default-features = false } penumbra-asset = { path = "../../../core/asset", default-features = false } penumbra-num = { path = "../../../core/num", default-features = false } penumbra-keys = { path = "../../../core/keys", default-features = false } -penumbra-effecthash = { path = "../../../core/effecthash", default-features = false } +penumbra-txhash = { path = "../../../core/txhash", default-features = false } decaf377-ka = { path = "../../../crypto/decaf377-ka/" } decaf377-fmd = { path = "../../../crypto/decaf377-fmd/" } diff --git a/crates/core/component/shielded-pool/src/ics20_withdrawal.rs b/crates/core/component/shielded-pool/src/ics20_withdrawal.rs index 9d6cd6f612..79d363d9ab 100644 --- a/crates/core/component/shielded-pool/src/ics20_withdrawal.rs +++ b/crates/core/component/shielded-pool/src/ics20_withdrawal.rs @@ -3,13 +3,13 @@ use penumbra_asset::{ asset::{self, DenomMetadata}, Balance, Value, }; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_keys::Address; use penumbra_num::Amount; use penumbra_proto::{ penumbra::core::component::ibc::v1alpha1::{self as pb, FungibleTokenPacketData}, DomainType, }; +use penumbra_txhash::{EffectHash, EffectingData}; use serde::{Deserialize, Serialize}; use std::str::FromStr; diff --git a/crates/core/component/shielded-pool/src/output/action.rs b/crates/core/component/shielded-pool/src/output/action.rs index b974c9f88e..b23be1d2ca 100644 --- a/crates/core/component/shielded-pool/src/output/action.rs +++ b/crates/core/component/shielded-pool/src/output/action.rs @@ -2,12 +2,12 @@ use std::convert::{TryFrom, TryInto}; use anyhow::{Context, Error}; use penumbra_asset::balance; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_keys::symmetric::{OvkWrappedKey, WrappedMemoKey}; use penumbra_proto::{ core::component::shielded_pool::v1alpha1 as pb, penumbra::core::component::shielded_pool::v1alpha1 as pbc, DomainType, }; +use penumbra_txhash::{EffectHash, EffectingData}; use serde::{Deserialize, Serialize}; use crate::{NotePayload, OutputProof}; diff --git a/crates/core/component/shielded-pool/src/spend/action.rs b/crates/core/component/shielded-pool/src/spend/action.rs index 1bf0285538..db10402ab1 100644 --- a/crates/core/component/shielded-pool/src/spend/action.rs +++ b/crates/core/component/shielded-pool/src/spend/action.rs @@ -3,9 +3,9 @@ use std::convert::{TryFrom, TryInto}; use anyhow::{Context, Error}; use decaf377_rdsa::{Signature, SpendAuth, VerificationKey}; use penumbra_asset::balance; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::{core::component::shielded_pool::v1alpha1 as pb, DomainType}; use penumbra_sct::Nullifier; +use penumbra_txhash::{EffectHash, EffectingData}; use serde::{Deserialize, Serialize}; use crate::SpendProof; diff --git a/crates/core/component/stake/Cargo.toml b/crates/core/component/stake/Cargo.toml index bc0ee2d9a0..da57cd70ac 100644 --- a/crates/core/component/stake/Cargo.toml +++ b/crates/core/component/stake/Cargo.toml @@ -45,7 +45,7 @@ penumbra-chain = { path = "../chain", default-features = false } penumbra-community-pool = { path = "../community-pool", default-features = false } penumbra-distributions = { path = "../distributions", default-features = false } penumbra-keys = { path = "../../../core/keys", default-features = false } -penumbra-effecthash = { path = "../../../core/effecthash", default-features = false } +penumbra-txhash = { path = "../../../core/txhash", default-features = false } penumbra-num = { path = "../../../core/num", default-features = false } penumbra-proof-params = { path = "../../../crypto/proof-params" } penumbra-proto = { path = "../../../proto" } diff --git a/crates/core/component/stake/src/delegate.rs b/crates/core/component/stake/src/delegate.rs index f9016316e5..899e15268e 100644 --- a/crates/core/component/stake/src/delegate.rs +++ b/crates/core/component/stake/src/delegate.rs @@ -1,7 +1,7 @@ use penumbra_asset::{Balance, Value, STAKING_TOKEN_ASSET_ID}; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_num::Amount; use penumbra_proto::{penumbra::core::component::stake::v1alpha1 as pb, DomainType}; +use penumbra_txhash::{EffectHash, EffectingData}; use serde::{Deserialize, Serialize}; use crate::{DelegationToken, IdentityKey}; diff --git a/crates/core/component/stake/src/undelegate.rs b/crates/core/component/stake/src/undelegate.rs index 7785912350..34ff6aa2aa 100644 --- a/crates/core/component/stake/src/undelegate.rs +++ b/crates/core/component/stake/src/undelegate.rs @@ -1,7 +1,7 @@ use penumbra_asset::{Balance, Value}; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_num::Amount; use penumbra_proto::{penumbra::core::component::stake::v1alpha1 as pb, DomainType}; +use penumbra_txhash::{EffectHash, EffectingData}; use serde::{Deserialize, Serialize}; use crate::{DelegationToken, IdentityKey, UnbondingToken}; diff --git a/crates/core/component/stake/src/undelegate_claim/action.rs b/crates/core/component/stake/src/undelegate_claim/action.rs index 502eb68f92..ace21b54bb 100644 --- a/crates/core/component/stake/src/undelegate_claim/action.rs +++ b/crates/core/component/stake/src/undelegate_claim/action.rs @@ -1,6 +1,6 @@ use penumbra_asset::balance; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::{penumbra::core::component::stake::v1alpha1 as pb, DomainType}; +use penumbra_txhash::{EffectHash, EffectingData}; use serde::{Deserialize, Serialize}; use crate::{IdentityKey, Penalty, UndelegateClaimProof}; diff --git a/crates/core/component/stake/src/validator/definition.rs b/crates/core/component/stake/src/validator/definition.rs index efc10dde4a..6c6cfcad8d 100644 --- a/crates/core/component/stake/src/validator/definition.rs +++ b/crates/core/component/stake/src/validator/definition.rs @@ -1,6 +1,6 @@ use decaf377_rdsa::{Signature, SpendAuth}; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::{penumbra::core::component::stake::v1alpha1 as pb, DomainType}; +use penumbra_txhash::{EffectHash, EffectingData}; use serde::{Deserialize, Serialize}; use crate::validator::Validator; diff --git a/crates/core/transaction/Cargo.toml b/crates/core/transaction/Cargo.toml index 09517a71dd..6a3f2e23c1 100644 --- a/crates/core/transaction/Cargo.toml +++ b/crates/core/transaction/Cargo.toml @@ -22,7 +22,7 @@ penumbra-fee = { path = "../component/fee/", default-features = false } penumbra-num = { path = "../num", default-features = false } penumbra-asset = { path = "../asset", default-features = false } penumbra-keys = { path = "../keys", default-features = false } -penumbra-effecthash = { path = "../effecthash", default-features = false } +penumbra-txhash = { path = "../txhash", default-features = false } # Git deps ibc-types = { version = "0.10.0", default-features = false } diff --git a/crates/core/transaction/src/action.rs b/crates/core/transaction/src/action.rs index de2667d639..4a530a0912 100644 --- a/crates/core/transaction/src/action.rs +++ b/crates/core/transaction/src/action.rs @@ -1,5 +1,5 @@ use anyhow::anyhow; -use penumbra_effecthash::{EffectHash, EffectingData}; +use penumbra_txhash::{EffectHash, EffectingData}; use std::convert::{TryFrom, TryInto}; use penumbra_asset::balance; diff --git a/crates/core/transaction/src/auth_data.rs b/crates/core/transaction/src/auth_data.rs index b7c016d637..d94abd9577 100644 --- a/crates/core/transaction/src/auth_data.rs +++ b/crates/core/transaction/src/auth_data.rs @@ -1,6 +1,6 @@ use decaf377_rdsa::{Signature, SpendAuth}; -use penumbra_effecthash::EffectHash; use penumbra_proto::{core::transaction::v1alpha1 as pb, DomainType}; +use penumbra_txhash::EffectHash; /// Authorization data returned in response to a /// [`TransactionDescription`](crate::TransactionDescription). diff --git a/crates/core/transaction/src/detection_data.rs b/crates/core/transaction/src/detection_data.rs index 0c25b2b984..9adb9c4185 100644 --- a/crates/core/transaction/src/detection_data.rs +++ b/crates/core/transaction/src/detection_data.rs @@ -1,8 +1,8 @@ use anyhow::Error; use decaf377_fmd::Clue; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_proto::core::transaction::v1alpha1 as pbt; use penumbra_proto::DomainType; +use penumbra_txhash::{EffectHash, EffectingData}; /// Detection data used by a detection server using Fuzzy Message Detection. /// diff --git a/crates/core/transaction/src/memo.rs b/crates/core/transaction/src/memo.rs index f38822a45a..809a43f54b 100644 --- a/crates/core/transaction/src/memo.rs +++ b/crates/core/transaction/src/memo.rs @@ -7,7 +7,6 @@ use anyhow::anyhow; use decaf377_ka as ka; use penumbra_asset::balance; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_keys::{ keys::OutgoingViewingKey, symmetric::{OvkWrappedKey, PayloadKey, PayloadKind, WrappedMemoKey}, @@ -15,6 +14,7 @@ use penumbra_keys::{ }; use penumbra_proto::{core::transaction::v1alpha1 as pbt, DomainType}; use penumbra_shielded_pool::{note, Note}; +use penumbra_txhash::{EffectHash, EffectingData}; pub const MEMO_CIPHERTEXT_LEN_BYTES: usize = 528; diff --git a/crates/core/transaction/src/parameters.rs b/crates/core/transaction/src/parameters.rs index c82697893e..88e04b044d 100644 --- a/crates/core/transaction/src/parameters.rs +++ b/crates/core/transaction/src/parameters.rs @@ -1,8 +1,8 @@ use anyhow::Error; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_fee::Fee; use penumbra_proto::core::transaction::v1alpha1 as pbt; use penumbra_proto::DomainType; +use penumbra_txhash::{EffectHash, EffectingData}; /// Parameters determining when the transaction should be accepted to the chain. #[derive(Clone, Debug, Default)] diff --git a/crates/core/transaction/src/plan.rs b/crates/core/transaction/src/plan.rs index 8c04c321f0..4e756dfa13 100644 --- a/crates/core/transaction/src/plan.rs +++ b/crates/core/transaction/src/plan.rs @@ -9,7 +9,6 @@ use penumbra_dex::{ swap::SwapPlan, swap_claim::SwapClaimPlan, }; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_governance::{ DelegatorVotePlan, ProposalDepositClaim, ProposalSubmit, ProposalWithdraw, ValidatorVote, }; @@ -18,6 +17,7 @@ use penumbra_keys::{Address, FullViewingKey, PayloadKey}; use penumbra_proto::{core::transaction::v1alpha1 as pb, DomainType}; use penumbra_shielded_pool::{Ics20Withdrawal, OutputPlan, SpendPlan}; use penumbra_stake::{Delegate, Undelegate, UndelegateClaimPlan}; +use penumbra_txhash::{EffectHash, EffectingData}; use rand::{CryptoRng, Rng}; use serde::{Deserialize, Serialize}; @@ -405,7 +405,6 @@ impl TryFrom for TransactionPlan { mod tests { use penumbra_asset::{asset, Value, STAKING_TOKEN_ASSET_ID}; use penumbra_dex::{swap::SwapPlaintext, swap::SwapPlan, TradingPair}; - use penumbra_effecthash::EffectingData as _; use penumbra_fee::Fee; use penumbra_keys::{ keys::{Bip44Path, SeedPhrase, SpendKey}, @@ -414,6 +413,7 @@ mod tests { use penumbra_shielded_pool::Note; use penumbra_shielded_pool::{OutputPlan, SpendPlan}; use penumbra_tct as tct; + use penumbra_txhash::EffectingData as _; use rand_core::OsRng; use crate::{ diff --git a/crates/core/transaction/src/plan/action.rs b/crates/core/transaction/src/plan/action.rs index 2558c462e6..afeeabe2b3 100644 --- a/crates/core/transaction/src/plan/action.rs +++ b/crates/core/transaction/src/plan/action.rs @@ -5,7 +5,7 @@ use ark_ff::Zero; use decaf377::Fr; use penumbra_asset::Balance; use penumbra_community_pool::{CommunityPoolDeposit, CommunityPoolOutput, CommunityPoolSpend}; -use penumbra_effecthash::{EffectHash, EffectingData}; +use penumbra_txhash::{EffectHash, EffectingData}; use penumbra_dex::{ lp::{ diff --git a/crates/core/transaction/src/transaction.rs b/crates/core/transaction/src/transaction.rs index f7f3cf67a0..3e012e4fc4 100644 --- a/crates/core/transaction/src/transaction.rs +++ b/crates/core/transaction/src/transaction.rs @@ -13,7 +13,6 @@ use penumbra_dex::{ lp::action::{PositionClose, PositionOpen}, swap::Swap, }; -use penumbra_effecthash::{EffectHash, EffectingData}; use penumbra_governance::{DelegatorVote, ProposalSubmit, ProposalWithdraw, ValidatorVote}; use penumbra_ibc::IbcRelay; use penumbra_keys::{FullViewingKey, PayloadKey}; @@ -26,6 +25,7 @@ use penumbra_shielded_pool::{Note, Output, Spend}; use penumbra_stake::{Delegate, Undelegate, UndelegateClaim}; use penumbra_tct as tct; use penumbra_tct::StateCommitment; +use penumbra_txhash::{EffectHash, EffectingData}; use serde::{Deserialize, Serialize}; use crate::{ diff --git a/crates/core/effecthash/Cargo.toml b/crates/core/txhash/Cargo.toml similarity index 87% rename from crates/core/effecthash/Cargo.toml rename to crates/core/txhash/Cargo.toml index 1596c18f90..93bf497d28 100644 --- a/crates/core/effecthash/Cargo.toml +++ b/crates/core/txhash/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "penumbra-effecthash" +name = "penumbra-txhash" version = "0.64.1" edition = "2021" diff --git a/crates/core/effecthash/src/effect_hash.rs b/crates/core/txhash/src/effect_hash.rs similarity index 96% rename from crates/core/effecthash/src/effect_hash.rs rename to crates/core/txhash/src/effect_hash.rs index b752dcc7d3..13a266c703 100644 --- a/crates/core/effecthash/src/effect_hash.rs +++ b/crates/core/txhash/src/effect_hash.rs @@ -1,4 +1,4 @@ -use penumbra_proto::{penumbra::core::effecthash::v1alpha1 as pb, DomainType, Message, Name}; +use penumbra_proto::{penumbra::core::txhash::v1alpha1 as pb, DomainType, Message, Name}; /// A hash of a transaction's _effecting data_, describing its effects on the /// chain state. diff --git a/crates/core/effecthash/src/effecting_data.rs b/crates/core/txhash/src/effecting_data.rs similarity index 100% rename from crates/core/effecthash/src/effecting_data.rs rename to crates/core/txhash/src/effecting_data.rs diff --git a/crates/core/effecthash/src/lib.rs b/crates/core/txhash/src/lib.rs similarity index 100% rename from crates/core/effecthash/src/lib.rs rename to crates/core/txhash/src/lib.rs diff --git a/crates/custody/Cargo.toml b/crates/custody/Cargo.toml index 76d50a95ca..67aa378788 100644 --- a/crates/custody/Cargo.toml +++ b/crates/custody/Cargo.toml @@ -17,7 +17,7 @@ decaf377-frost = { path = "../crypto/decaf377-frost" } decaf377-ka = { path = "../crypto/decaf377-ka" } penumbra-chain = { path = "../core/component/chain" } penumbra-keys = { path = "../core/keys" } -penumbra-effecthash = { path = "../core/effecthash" } +penumbra-txhash = { path = "../core/txhash" } penumbra-proto = { path = "../proto", features = ["rpc"] } penumbra-transaction = { path = "../core/transaction" } diff --git a/crates/custody/src/threshold/sign.rs b/crates/custody/src/threshold/sign.rs index 1e3ee621d6..69aee5321c 100644 --- a/crates/custody/src/threshold/sign.rs +++ b/crates/custody/src/threshold/sign.rs @@ -7,9 +7,9 @@ use anyhow::{anyhow, Result}; use decaf377_frost as frost; use ed25519_consensus::{Signature, SigningKey, VerificationKey}; use frost::round1::SigningCommitments; -use penumbra_effecthash::EffectHash; use penumbra_proto::{penumbra::custody::threshold::v1alpha1 as pb, DomainType, Message}; use penumbra_transaction::{plan::TransactionPlan, AuthorizationData}; +use penumbra_txhash::EffectHash; use rand_core::CryptoRngCore; use super::config::Config; diff --git a/crates/proto/src/gen/penumbra.core.app.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.app.v1alpha1.rs index a07aec71e3..e6a4771bc9 100644 --- a/crates/proto/src/gen/penumbra.core.app.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.app.v1alpha1.rs @@ -22,7 +22,9 @@ impl ::prost::Name for TransactionsByHeightRequest { pub struct TransactionsByHeightResponse { /// The transactions. #[prost(message, repeated, tag = "1")] - pub transactions: ::prost::alloc::vec::Vec, + pub transactions: ::prost::alloc::vec::Vec< + super::super::transaction::v1alpha1::Transaction, + >, /// The block height. #[prost(uint64, tag = "2")] pub block_height: u64, @@ -39,8 +41,9 @@ impl ::prost::Name for TransactionsByHeightResponse { pub struct AppParameters { /// Chain module parameters. #[prost(message, optional, tag = "1")] - pub chain_params: - ::core::option::Option, + pub chain_params: ::core::option::Option< + super::super::component::chain::v1alpha1::ChainParameters, + >, /// Community Pool module parameters. #[prost(message, optional, tag = "2")] pub community_pool_params: ::core::option::Option< @@ -48,18 +51,24 @@ pub struct AppParameters { >, /// Governance module parameters. #[prost(message, optional, tag = "3")] - pub governance_params: - ::core::option::Option, + pub governance_params: ::core::option::Option< + super::super::component::governance::v1alpha1::GovernanceParameters, + >, /// IBC module parameters. #[prost(message, optional, tag = "4")] - pub ibc_params: ::core::option::Option, + pub ibc_params: ::core::option::Option< + super::super::component::ibc::v1alpha1::IbcParameters, + >, /// Stake module parameters. #[prost(message, optional, tag = "5")] - pub stake_params: - ::core::option::Option, + pub stake_params: ::core::option::Option< + super::super::component::stake::v1alpha1::StakeParameters, + >, /// Fee module parameters. #[prost(message, optional, tag = "6")] - pub fee_params: ::core::option::Option, + pub fee_params: ::core::option::Option< + super::super::component::fee::v1alpha1::FeeParameters, + >, /// Distributions module parameters. #[prost(message, optional, tag = "7")] pub distributions_params: ::core::option::Option< @@ -130,34 +139,44 @@ impl ::prost::Name for GenesisAppState { pub struct GenesisContent { /// Stake module genesis state. #[prost(message, optional, tag = "1")] - pub stake_content: - ::core::option::Option, + pub stake_content: ::core::option::Option< + super::super::component::stake::v1alpha1::GenesisContent, + >, /// Shielded pool module genesis state. #[prost(message, optional, tag = "2")] - pub shielded_pool_content: - ::core::option::Option, + pub shielded_pool_content: ::core::option::Option< + super::super::component::shielded_pool::v1alpha1::GenesisContent, + >, /// Governance module genesis state. #[prost(message, optional, tag = "3")] - pub governance_content: - ::core::option::Option, + pub governance_content: ::core::option::Option< + super::super::component::governance::v1alpha1::GenesisContent, + >, /// IBC module genesis state. #[prost(message, optional, tag = "4")] - pub ibc_content: ::core::option::Option, + pub ibc_content: ::core::option::Option< + super::super::component::ibc::v1alpha1::GenesisContent, + >, /// Chain module genesis state. #[prost(message, optional, tag = "5")] - pub chain_content: - ::core::option::Option, + pub chain_content: ::core::option::Option< + super::super::component::chain::v1alpha1::GenesisContent, + >, /// Community Pool module genesis state. #[prost(message, optional, tag = "6")] - pub community_pool_content: - ::core::option::Option, + pub community_pool_content: ::core::option::Option< + super::super::component::community_pool::v1alpha1::GenesisContent, + >, /// Fee module genesis state. #[prost(message, optional, tag = "7")] - pub fee_content: ::core::option::Option, + pub fee_content: ::core::option::Option< + super::super::component::fee::v1alpha1::GenesisContent, + >, /// Distributions module genesis state. #[prost(message, optional, tag = "8")] - pub distributions_content: - ::core::option::Option, + pub distributions_content: ::core::option::Option< + super::super::component::distributions::v1alpha1::GenesisContent, + >, } impl ::prost::Name for GenesisContent { const NAME: &'static str = "GenesisContent"; @@ -170,8 +189,8 @@ impl ::prost::Name for GenesisContent { #[cfg(feature = "rpc")] pub mod query_service_client { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] - use tonic::codegen::http::Uri; use tonic::codegen::*; + use tonic::codegen::http::Uri; /// Query operations for the overall Penumbra application. #[derive(Debug, Clone)] pub struct QueryServiceClient { @@ -216,8 +235,9 @@ pub mod query_service_client { >::ResponseBody, >, >, - >>::Error: - Into + Send + Sync, + , + >>::Error: Into + Send + Sync, { QueryServiceClient::new(InterceptedService::new(inner, interceptor)) } @@ -256,46 +276,62 @@ pub mod query_service_client { pub async fn app_parameters( &mut self, request: impl tonic::IntoRequest, - ) -> std::result::Result, tonic::Status> - { - self.inner.ready().await.map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.app.v1alpha1.QueryService/AppParameters", ); let mut req = request.into_request(); - req.extensions_mut().insert(GrpcMethod::new( - "penumbra.core.app.v1alpha1.QueryService", - "AppParameters", - )); + req.extensions_mut() + .insert( + GrpcMethod::new( + "penumbra.core.app.v1alpha1.QueryService", + "AppParameters", + ), + ); self.inner.unary(req, path, codec).await } /// Returns the CometBFT transactions that occurred during a given block. pub async fn transactions_by_height( &mut self, request: impl tonic::IntoRequest, - ) -> std::result::Result, tonic::Status> - { - self.inner.ready().await.map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.app.v1alpha1.QueryService/TransactionsByHeight", ); let mut req = request.into_request(); - req.extensions_mut().insert(GrpcMethod::new( - "penumbra.core.app.v1alpha1.QueryService", - "TransactionsByHeight", - )); + req.extensions_mut() + .insert( + GrpcMethod::new( + "penumbra.core.app.v1alpha1.QueryService", + "TransactionsByHeight", + ), + ); self.inner.unary(req, path, codec).await } } @@ -312,12 +348,18 @@ pub mod query_service_server { async fn app_parameters( &self, request: tonic::Request, - ) -> std::result::Result, tonic::Status>; + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; /// Returns the CometBFT transactions that occurred during a given block. async fn transactions_by_height( &self, request: tonic::Request, - ) -> std::result::Result, tonic::Status>; + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; } /// Query operations for the overall Penumbra application. #[derive(Debug)] @@ -343,7 +385,10 @@ pub mod query_service_server { max_encoding_message_size: None, } } - pub fn with_interceptor(inner: T, interceptor: F) -> InterceptedService + pub fn with_interceptor( + inner: T, + interceptor: F, + ) -> InterceptedService where F: tonic::service::Interceptor, { @@ -399,11 +444,15 @@ pub mod query_service_server { "/penumbra.core.app.v1alpha1.QueryService/AppParameters" => { #[allow(non_camel_case_types)] struct AppParametersSvc(pub Arc); - impl tonic::server::UnaryService - for AppParametersSvc - { + impl< + T: QueryService, + > tonic::server::UnaryService + for AppParametersSvc { type Response = super::AppParametersResponse; - type Future = BoxFuture, tonic::Status>; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; fn call( &mut self, request: tonic::Request, @@ -441,19 +490,23 @@ pub mod query_service_server { "/penumbra.core.app.v1alpha1.QueryService/TransactionsByHeight" => { #[allow(non_camel_case_types)] struct TransactionsByHeightSvc(pub Arc); - impl - tonic::server::UnaryService - for TransactionsByHeightSvc - { + impl< + T: QueryService, + > tonic::server::UnaryService + for TransactionsByHeightSvc { type Response = super::TransactionsByHeightResponse; - type Future = BoxFuture, tonic::Status>; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::transactions_by_height(&inner, request).await + ::transactions_by_height(&inner, request) + .await }; Box::pin(fut) } @@ -481,14 +534,18 @@ pub mod query_service_server { }; Box::pin(fut) } - _ => Box::pin(async move { - Ok(http::Response::builder() - .status(200) - .header("grpc-status", "12") - .header("content-type", "application/grpc") - .body(empty_body()) - .unwrap()) - }), + _ => { + Box::pin(async move { + Ok( + http::Response::builder() + .status(200) + .header("grpc-status", "12") + .header("content-type", "application/grpc") + .body(empty_body()) + .unwrap(), + ) + }) + } } } } diff --git a/crates/proto/src/gen/penumbra.core.component.community_pool.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.component.community_pool.v1alpha1.rs index 44184b8a0e..6d1d8b104f 100644 --- a/crates/proto/src/gen/penumbra.core.component.community_pool.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.component.community_pool.v1alpha1.rs @@ -11,8 +11,7 @@ impl ::prost::Name for CommunityPoolParameters { const PACKAGE: &'static str = "penumbra.core.component.community_pool.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!( - "penumbra.core.component.community_pool.v1alpha1.{}", - Self::NAME + "penumbra.core.component.community_pool.v1alpha1.{}", Self::NAME ) } } @@ -29,8 +28,7 @@ impl ::prost::Name for GenesisContent { const PACKAGE: &'static str = "penumbra.core.component.community_pool.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!( - "penumbra.core.component.community_pool.v1alpha1.{}", - Self::NAME + "penumbra.core.component.community_pool.v1alpha1.{}", Self::NAME ) } } @@ -43,15 +41,16 @@ pub struct CommunityPoolAssetBalancesRequest { pub chain_id: ::prost::alloc::string::String, /// (Optional): The specific asset balances to retrieve, if excluded all will be returned. #[prost(message, repeated, tag = "2")] - pub asset_ids: ::prost::alloc::vec::Vec, + pub asset_ids: ::prost::alloc::vec::Vec< + super::super::super::asset::v1alpha1::AssetId, + >, } impl ::prost::Name for CommunityPoolAssetBalancesRequest { const NAME: &'static str = "CommunityPoolAssetBalancesRequest"; const PACKAGE: &'static str = "penumbra.core.component.community_pool.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!( - "penumbra.core.component.community_pool.v1alpha1.{}", - Self::NAME + "penumbra.core.component.community_pool.v1alpha1.{}", Self::NAME ) } } @@ -68,8 +67,7 @@ impl ::prost::Name for CommunityPoolAssetBalancesResponse { const PACKAGE: &'static str = "penumbra.core.component.community_pool.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!( - "penumbra.core.component.community_pool.v1alpha1.{}", - Self::NAME + "penumbra.core.component.community_pool.v1alpha1.{}", Self::NAME ) } } @@ -77,8 +75,8 @@ impl ::prost::Name for CommunityPoolAssetBalancesResponse { #[cfg(feature = "rpc")] pub mod query_service_client { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] - use tonic::codegen::http::Uri; use tonic::codegen::*; + use tonic::codegen::http::Uri; /// Query operations for the community_pool component. #[derive(Debug, Clone)] pub struct QueryServiceClient { @@ -123,8 +121,9 @@ pub mod query_service_client { >::ResponseBody, >, >, - >>::Error: - Into + Send + Sync, + , + >>::Error: Into + Send + Sync, { QueryServiceClient::new(InterceptedService::new(inner, interceptor)) } @@ -163,24 +162,32 @@ pub mod query_service_client { &mut self, request: impl tonic::IntoRequest, ) -> std::result::Result< - tonic::Response>, + tonic::Response< + tonic::codec::Streaming, + >, tonic::Status, > { - self.inner.ready().await.map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.community_pool.v1alpha1.QueryService/CommunityPoolAssetBalances", ); let mut req = request.into_request(); - req.extensions_mut().insert(GrpcMethod::new( - "penumbra.core.component.community_pool.v1alpha1.QueryService", - "CommunityPoolAssetBalances", - )); + req.extensions_mut() + .insert( + GrpcMethod::new( + "penumbra.core.component.community_pool.v1alpha1.QueryService", + "CommunityPoolAssetBalances", + ), + ); self.inner.server_streaming(req, path, codec).await } } @@ -199,7 +206,8 @@ pub mod query_service_server { super::CommunityPoolAssetBalancesResponse, tonic::Status, >, - > + Send + > + + Send + 'static; async fn community_pool_asset_balances( &self, @@ -233,7 +241,10 @@ pub mod query_service_server { max_encoding_message_size: None, } } - pub fn with_interceptor(inner: T, interceptor: F) -> InterceptedService + pub fn with_interceptor( + inner: T, + interceptor: F, + ) -> InterceptedService where F: tonic::service::Interceptor, { diff --git a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs index 92c70a3399..9142cc034f 100644 --- a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs @@ -9,7 +9,9 @@ impl ::prost::Name for ZkDelegatorVoteProof { const NAME: &'static str = "ZKDelegatorVoteProof"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -20,13 +22,17 @@ pub struct ProposalSubmit { pub proposal: ::core::option::Option, /// The amount of the proposal deposit. #[prost(message, optional, tag = "3")] - pub deposit_amount: ::core::option::Option, + pub deposit_amount: ::core::option::Option< + super::super::super::num::v1alpha1::Amount, + >, } impl ::prost::Name for ProposalSubmit { const NAME: &'static str = "ProposalSubmit"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -43,7 +49,9 @@ impl ::prost::Name for ProposalWithdraw { const NAME: &'static str = "ProposalWithdraw"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -54,7 +62,9 @@ pub struct ProposalDepositClaim { pub proposal: u64, /// The expected deposit amount. #[prost(message, optional, tag = "2")] - pub deposit_amount: ::core::option::Option, + pub deposit_amount: ::core::option::Option< + super::super::super::num::v1alpha1::Amount, + >, /// The outcome of the proposal. #[prost(message, optional, tag = "3")] pub outcome: ::core::option::Option, @@ -63,7 +73,9 @@ impl ::prost::Name for ProposalDepositClaim { const NAME: &'static str = "ProposalDepositClaim"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -82,7 +94,9 @@ impl ::prost::Name for ValidatorVote { const NAME: &'static str = "ValidatorVote"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -95,7 +109,9 @@ impl ::prost::Name for ValidatorVoteReason { const NAME: &'static str = "ValidatorVoteReason"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -109,10 +125,14 @@ pub struct ValidatorVoteBody { pub vote: ::core::option::Option, /// The validator identity. #[prost(message, optional, tag = "3")] - pub identity_key: ::core::option::Option, + pub identity_key: ::core::option::Option< + super::super::super::keys::v1alpha1::IdentityKey, + >, /// The validator governance key. #[prost(message, optional, tag = "4")] - pub governance_key: ::core::option::Option, + pub governance_key: ::core::option::Option< + super::super::super::keys::v1alpha1::GovernanceKey, + >, /// A justification of the vote. #[prost(message, optional, tag = "5")] pub reason: ::core::option::Option, @@ -121,7 +141,9 @@ impl ::prost::Name for ValidatorVoteBody { const NAME: &'static str = "ValidatorVoteBody"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -143,7 +165,9 @@ impl ::prost::Name for DelegatorVote { const NAME: &'static str = "DelegatorVote"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -163,7 +187,9 @@ pub struct DelegatorVoteBody { pub value: ::core::option::Option, /// The amount of the delegation note, in unbonded penumbra. #[prost(message, optional, tag = "5")] - pub unbonded_amount: ::core::option::Option, + pub unbonded_amount: ::core::option::Option< + super::super::super::num::v1alpha1::Amount, + >, /// The nullifier of the input note. #[prost(message, optional, tag = "6")] pub nullifier: ::core::option::Option, @@ -177,7 +203,9 @@ impl ::prost::Name for DelegatorVoteBody { const NAME: &'static str = "DelegatorVoteBody"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -194,7 +222,9 @@ pub mod delegator_vote_view { #[prost(message, optional, tag = "1")] pub delegator_vote: ::core::option::Option, #[prost(message, optional, tag = "2")] - pub note: ::core::option::Option, + pub note: ::core::option::Option< + super::super::super::shielded_pool::v1alpha1::NoteView, + >, } impl ::prost::Name for Visible { const NAME: &'static str = "Visible"; @@ -235,7 +265,9 @@ impl ::prost::Name for DelegatorVoteView { const NAME: &'static str = "DelegatorVoteView"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -258,7 +290,9 @@ pub struct DelegatorVotePlan { pub staked_note_position: u64, /// The unbonded amount equivalent to the delegation note. #[prost(message, optional, tag = "6")] - pub unbonded_amount: ::core::option::Option, + pub unbonded_amount: ::core::option::Option< + super::super::super::num::v1alpha1::Amount, + >, /// The randomizer to use for the proof of spend capability. #[prost(bytes = "vec", tag = "7")] pub randomizer: ::prost::alloc::vec::Vec, @@ -273,7 +307,9 @@ impl ::prost::Name for DelegatorVotePlan { const NAME: &'static str = "DelegatorVotePlan"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -287,7 +323,9 @@ impl ::prost::Name for CommunityPoolDeposit { const NAME: &'static str = "CommunityPoolDeposit"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -301,7 +339,9 @@ impl ::prost::Name for CommunityPoolSpend { const NAME: &'static str = "CommunityPoolSpend"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -318,7 +358,9 @@ impl ::prost::Name for CommunityPoolOutput { const NAME: &'static str = "CommunityPoolOutput"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } /// A vote on a proposal. @@ -332,7 +374,17 @@ pub struct Vote { /// Nested message and enum types in `Vote`. pub mod vote { /// A vote. - #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + Hash, + PartialOrd, + Ord, + ::prost::Enumeration + )] #[repr(i32)] pub enum Vote { Unspecified = 0, @@ -369,7 +421,9 @@ impl ::prost::Name for Vote { const NAME: &'static str = "Vote"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } /// The current state of a proposal. @@ -466,7 +520,9 @@ impl ::prost::Name for ProposalState { const NAME: &'static str = "ProposalState"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } /// The outcome of a concluded proposal. @@ -561,7 +617,9 @@ impl ::prost::Name for ProposalOutcome { const NAME: &'static str = "ProposalOutcome"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } /// A tally of votes on a proposal. @@ -582,7 +640,9 @@ impl ::prost::Name for Tally { const NAME: &'static str = "Tally"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } /// A proposal to be voted upon. @@ -628,8 +688,7 @@ pub mod proposal { const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.Proposal.{}", - Self::NAME + "penumbra.core.component.governance.v1alpha1.Proposal.{}", Self::NAME ) } } @@ -650,8 +709,7 @@ pub mod proposal { const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.Proposal.{}", - Self::NAME + "penumbra.core.component.governance.v1alpha1.Proposal.{}", Self::NAME ) } } @@ -676,8 +734,7 @@ pub mod proposal { const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.Proposal.{}", - Self::NAME + "penumbra.core.component.governance.v1alpha1.Proposal.{}", Self::NAME ) } } @@ -698,8 +755,7 @@ pub mod proposal { const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.Proposal.{}", - Self::NAME + "penumbra.core.component.governance.v1alpha1.Proposal.{}", Self::NAME ) } } @@ -716,8 +772,7 @@ pub mod proposal { const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!( - "penumbra.core.component.governance.v1alpha1.Proposal.{}", - Self::NAME + "penumbra.core.component.governance.v1alpha1.Proposal.{}", Self::NAME ) } } @@ -726,7 +781,9 @@ impl ::prost::Name for Proposal { const NAME: &'static str = "Proposal"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -743,7 +800,9 @@ impl ::prost::Name for ProposalInfoRequest { const NAME: &'static str = "ProposalInfoRequest"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -760,7 +819,9 @@ impl ::prost::Name for ProposalInfoResponse { const NAME: &'static str = "ProposalInfoResponse"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -777,7 +838,9 @@ impl ::prost::Name for ProposalDataRequest { const NAME: &'static str = "ProposalDataRequest"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -800,13 +863,17 @@ pub struct ProposalDataResponse { pub state: ::core::option::Option, /// The deposit amount paid for the proposal. #[prost(message, optional, tag = "6")] - pub proposal_deposit_amount: ::core::option::Option, + pub proposal_deposit_amount: ::core::option::Option< + super::super::super::num::v1alpha1::Amount, + >, } impl ::prost::Name for ProposalDataResponse { const NAME: &'static str = "ProposalDataResponse"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } /// Requests the validator rate data for a proposal. @@ -824,7 +891,9 @@ impl ::prost::Name for ProposalRateDataRequest { const NAME: &'static str = "ProposalRateDataRequest"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } /// The rate data for a single validator. @@ -838,7 +907,9 @@ impl ::prost::Name for ProposalRateDataResponse { const NAME: &'static str = "ProposalRateDataResponse"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } /// Requests the list of all proposals. @@ -858,7 +929,9 @@ impl ::prost::Name for ProposalListRequest { const NAME: &'static str = "ProposalListRequest"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } /// The data for a single proposal. @@ -885,7 +958,9 @@ impl ::prost::Name for ProposalListResponse { const NAME: &'static str = "ProposalListResponse"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } /// Requests the list of all validator votes for a given proposal. @@ -903,7 +978,9 @@ impl ::prost::Name for ValidatorVotesRequest { const NAME: &'static str = "ValidatorVotesRequest"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } /// The data for a single validator vote. @@ -915,13 +992,17 @@ pub struct ValidatorVotesResponse { pub vote: ::core::option::Option, /// The validator identity. #[prost(message, optional, tag = "2")] - pub identity_key: ::core::option::Option, + pub identity_key: ::core::option::Option< + super::super::super::keys::v1alpha1::IdentityKey, + >, } impl ::prost::Name for ValidatorVotesResponse { const NAME: &'static str = "ValidatorVotesResponse"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } /// Governance configuration data. @@ -933,7 +1014,9 @@ pub struct GovernanceParameters { pub proposal_voting_blocks: u64, /// The deposit required to create a proposal. #[prost(message, optional, tag = "2")] - pub proposal_deposit_amount: ::core::option::Option, + pub proposal_deposit_amount: ::core::option::Option< + super::super::super::num::v1alpha1::Amount, + >, /// The quorum required for a proposal to be considered valid, as a fraction of the total stake /// weight of the network. #[prost(string, tag = "3")] @@ -950,7 +1033,9 @@ impl ::prost::Name for GovernanceParameters { const NAME: &'static str = "GovernanceParameters"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } /// Governance genesis state. @@ -965,7 +1050,9 @@ impl ::prost::Name for GenesisContent { const NAME: &'static str = "GenesisContent"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } /// Note: must be kept in sync with AppParameters. @@ -975,11 +1062,14 @@ impl ::prost::Name for GenesisContent { pub struct ChangedAppParameters { /// Chain module parameters. #[prost(message, optional, tag = "1")] - pub chain_params: ::core::option::Option, + pub chain_params: ::core::option::Option< + super::super::chain::v1alpha1::ChainParameters, + >, /// Community Pool module parameters. #[prost(message, optional, tag = "2")] - pub community_pool_params: - ::core::option::Option, + pub community_pool_params: ::core::option::Option< + super::super::community_pool::v1alpha1::CommunityPoolParameters, + >, /// Governance module parameters. #[prost(message, optional, tag = "3")] pub governance_params: ::core::option::Option, @@ -988,20 +1078,25 @@ pub struct ChangedAppParameters { pub ibc_params: ::core::option::Option, /// Stake module parameters. #[prost(message, optional, tag = "5")] - pub stake_params: ::core::option::Option, + pub stake_params: ::core::option::Option< + super::super::stake::v1alpha1::StakeParameters, + >, /// Fee module parameters. #[prost(message, optional, tag = "6")] pub fee_params: ::core::option::Option, /// Distributions module parameters. #[prost(message, optional, tag = "7")] - pub distributions_params: - ::core::option::Option, + pub distributions_params: ::core::option::Option< + super::super::distributions::v1alpha1::DistributionsParameters, + >, } impl ::prost::Name for ChangedAppParameters { const NAME: &'static str = "ChangedAppParameters"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -1018,7 +1113,9 @@ impl ::prost::Name for ChangedAppParametersSet { const NAME: &'static str = "ChangedAppParametersSet"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -1032,13 +1129,17 @@ pub struct VotingPowerAtProposalStartRequest { pub proposal_id: u64, /// The validator identity key to request information on. #[prost(message, optional, tag = "3")] - pub identity_key: ::core::option::Option, + pub identity_key: ::core::option::Option< + super::super::super::keys::v1alpha1::IdentityKey, + >, } impl ::prost::Name for VotingPowerAtProposalStartRequest { const NAME: &'static str = "VotingPowerAtProposalStartRequest"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -1055,7 +1156,9 @@ impl ::prost::Name for VotingPowerAtProposalStartResponse { const NAME: &'static str = "VotingPowerAtProposalStartResponse"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -1072,7 +1175,9 @@ impl ::prost::Name for AllTalliedDelegatorVotesForProposalRequest { const NAME: &'static str = "AllTalliedDelegatorVotesForProposalRequest"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -1083,13 +1188,17 @@ pub struct AllTalliedDelegatorVotesForProposalResponse { pub tally: ::core::option::Option, /// The validator identity associated with the tally. #[prost(message, optional, tag = "2")] - pub identity_key: ::core::option::Option, + pub identity_key: ::core::option::Option< + super::super::super::keys::v1alpha1::IdentityKey, + >, } impl ::prost::Name for AllTalliedDelegatorVotesForProposalResponse { const NAME: &'static str = "AllTalliedDelegatorVotesForProposalResponse"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -1103,7 +1212,9 @@ impl ::prost::Name for NextProposalIdRequest { const NAME: &'static str = "NextProposalIdRequest"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -1117,15 +1228,17 @@ impl ::prost::Name for NextProposalIdResponse { const NAME: &'static str = "NextProposalIdResponse"; const PACKAGE: &'static str = "penumbra.core.component.governance.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.component.governance.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.component.governance.v1alpha1.{}", Self::NAME + ) } } /// Generated client implementations. #[cfg(feature = "rpc")] pub mod query_service_client { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] - use tonic::codegen::http::Uri; use tonic::codegen::*; + use tonic::codegen::http::Uri; /// Query operations for the governance component. #[derive(Debug, Clone)] pub struct QueryServiceClient { @@ -1170,8 +1283,9 @@ pub mod query_service_client { >::ResponseBody, >, >, - >>::Error: - Into + Send + Sync, + , + >>::Error: Into + Send + Sync, { QueryServiceClient::new(InterceptedService::new(inner, interceptor)) } @@ -1209,23 +1323,31 @@ pub mod query_service_client { pub async fn proposal_info( &mut self, request: impl tonic::IntoRequest, - ) -> std::result::Result, tonic::Status> - { - self.inner.ready().await.map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.governance.v1alpha1.QueryService/ProposalInfo", ); let mut req = request.into_request(); - req.extensions_mut().insert(GrpcMethod::new( - "penumbra.core.component.governance.v1alpha1.QueryService", - "ProposalInfo", - )); + req.extensions_mut() + .insert( + GrpcMethod::new( + "penumbra.core.component.governance.v1alpha1.QueryService", + "ProposalInfo", + ), + ); self.inner.unary(req, path, codec).await } pub async fn proposal_list( @@ -1235,65 +1357,87 @@ pub mod query_service_client { tonic::Response>, tonic::Status, > { - self.inner.ready().await.map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.governance.v1alpha1.QueryService/ProposalList", ); let mut req = request.into_request(); - req.extensions_mut().insert(GrpcMethod::new( - "penumbra.core.component.governance.v1alpha1.QueryService", - "ProposalList", - )); + req.extensions_mut() + .insert( + GrpcMethod::new( + "penumbra.core.component.governance.v1alpha1.QueryService", + "ProposalList", + ), + ); self.inner.server_streaming(req, path, codec).await } pub async fn proposal_data( &mut self, request: impl tonic::IntoRequest, - ) -> std::result::Result, tonic::Status> - { - self.inner.ready().await.map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.governance.v1alpha1.QueryService/ProposalData", ); let mut req = request.into_request(); - req.extensions_mut().insert(GrpcMethod::new( - "penumbra.core.component.governance.v1alpha1.QueryService", - "ProposalData", - )); + req.extensions_mut() + .insert( + GrpcMethod::new( + "penumbra.core.component.governance.v1alpha1.QueryService", + "ProposalData", + ), + ); self.inner.unary(req, path, codec).await } pub async fn next_proposal_id( &mut self, request: impl tonic::IntoRequest, - ) -> std::result::Result, tonic::Status> - { - self.inner.ready().await.map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.governance.v1alpha1.QueryService/NextProposalId", ); let mut req = request.into_request(); - req.extensions_mut().insert(GrpcMethod::new( - "penumbra.core.component.governance.v1alpha1.QueryService", - "NextProposalId", - )); + req.extensions_mut() + .insert( + GrpcMethod::new( + "penumbra.core.component.governance.v1alpha1.QueryService", + "NextProposalId", + ), + ); self.inner.unary(req, path, codec).await } pub async fn validator_votes( @@ -1303,21 +1447,27 @@ pub mod query_service_client { tonic::Response>, tonic::Status, > { - self.inner.ready().await.map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.governance.v1alpha1.QueryService/ValidatorVotes", ); let mut req = request.into_request(); - req.extensions_mut().insert(GrpcMethod::new( - "penumbra.core.component.governance.v1alpha1.QueryService", - "ValidatorVotes", - )); + req.extensions_mut() + .insert( + GrpcMethod::new( + "penumbra.core.component.governance.v1alpha1.QueryService", + "ValidatorVotes", + ), + ); self.inner.server_streaming(req, path, codec).await } pub async fn voting_power_at_proposal_start( @@ -1327,47 +1477,63 @@ pub mod query_service_client { tonic::Response, tonic::Status, > { - self.inner.ready().await.map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.governance.v1alpha1.QueryService/VotingPowerAtProposalStart", ); let mut req = request.into_request(); - req.extensions_mut().insert(GrpcMethod::new( - "penumbra.core.component.governance.v1alpha1.QueryService", - "VotingPowerAtProposalStart", - )); + req.extensions_mut() + .insert( + GrpcMethod::new( + "penumbra.core.component.governance.v1alpha1.QueryService", + "VotingPowerAtProposalStart", + ), + ); self.inner.unary(req, path, codec).await } pub async fn all_tallied_delegator_votes_for_proposal( &mut self, - request: impl tonic::IntoRequest, + request: impl tonic::IntoRequest< + super::AllTalliedDelegatorVotesForProposalRequest, + >, ) -> std::result::Result< tonic::Response< - tonic::codec::Streaming, + tonic::codec::Streaming< + super::AllTalliedDelegatorVotesForProposalResponse, + >, >, tonic::Status, > { - self.inner.ready().await.map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.governance.v1alpha1.QueryService/AllTalliedDelegatorVotesForProposal", ); let mut req = request.into_request(); - req.extensions_mut().insert(GrpcMethod::new( - "penumbra.core.component.governance.v1alpha1.QueryService", - "AllTalliedDelegatorVotesForProposal", - )); + req.extensions_mut() + .insert( + GrpcMethod::new( + "penumbra.core.component.governance.v1alpha1.QueryService", + "AllTalliedDelegatorVotesForProposal", + ), + ); self.inner.server_streaming(req, path, codec).await } /// Used for computing voting power ? @@ -1378,21 +1544,27 @@ pub mod query_service_client { tonic::Response>, tonic::Status, > { - self.inner.ready().await.map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/penumbra.core.component.governance.v1alpha1.QueryService/ProposalRateData", ); let mut req = request.into_request(); - req.extensions_mut().insert(GrpcMethod::new( - "penumbra.core.component.governance.v1alpha1.QueryService", - "ProposalRateData", - )); + req.extensions_mut() + .insert( + GrpcMethod::new( + "penumbra.core.component.governance.v1alpha1.QueryService", + "ProposalRateData", + ), + ); self.inner.server_streaming(req, path, codec).await } } @@ -1408,33 +1580,50 @@ pub mod query_service_server { async fn proposal_info( &self, request: tonic::Request, - ) -> std::result::Result, tonic::Status>; + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; /// Server streaming response type for the ProposalList method. type ProposalListStream: tonic::codegen::tokio_stream::Stream< Item = std::result::Result, - > + Send + > + + Send + 'static; async fn proposal_list( &self, request: tonic::Request, - ) -> std::result::Result, tonic::Status>; + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; async fn proposal_data( &self, request: tonic::Request, - ) -> std::result::Result, tonic::Status>; + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; async fn next_proposal_id( &self, request: tonic::Request, - ) -> std::result::Result, tonic::Status>; + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; /// Server streaming response type for the ValidatorVotes method. type ValidatorVotesStream: tonic::codegen::tokio_stream::Stream< Item = std::result::Result, - > + Send + > + + Send + 'static; async fn validator_votes( &self, request: tonic::Request, - ) -> std::result::Result, tonic::Status>; + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; async fn voting_power_at_proposal_start( &self, request: tonic::Request, @@ -1448,7 +1637,8 @@ pub mod query_service_server { super::AllTalliedDelegatorVotesForProposalResponse, tonic::Status, >, - > + Send + > + + Send + 'static; async fn all_tallied_delegator_votes_for_proposal( &self, @@ -1459,14 +1649,21 @@ pub mod query_service_server { >; /// Server streaming response type for the ProposalRateData method. type ProposalRateDataStream: tonic::codegen::tokio_stream::Stream< - Item = std::result::Result, - > + Send + Item = std::result::Result< + super::ProposalRateDataResponse, + tonic::Status, + >, + > + + Send + 'static; /// Used for computing voting power ? async fn proposal_rate_data( &self, request: tonic::Request, - ) -> std::result::Result, tonic::Status>; + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; } /// Query operations for the governance component. #[derive(Debug)] @@ -1492,7 +1689,10 @@ pub mod query_service_server { max_encoding_message_size: None, } } - pub fn with_interceptor(inner: T, interceptor: F) -> InterceptedService + pub fn with_interceptor( + inner: T, + interceptor: F, + ) -> InterceptedService where F: tonic::service::Interceptor, { diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs index 98a8577bff..a362675375 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs @@ -12,7 +12,9 @@ pub struct Transaction { /// The root of some previous state of the state commitment tree, used as an anchor for all /// ZK state transition proofs. #[prost(message, optional, tag = "3")] - pub anchor: ::core::option::Option, + pub anchor: ::core::option::Option< + super::super::super::crypto::tct::v1alpha1::MerkleRoot, + >, } impl ::prost::Name for Transaction { const NAME: &'static str = "Transaction"; @@ -91,8 +93,9 @@ impl ::prost::Name for TransactionParameters { pub struct DetectionData { /// A list of clues for use with Fuzzy Message Detection. #[prost(message, repeated, tag = "4")] - pub fmd_clues: - ::prost::alloc::vec::Vec, + pub fmd_clues: ::prost::alloc::vec::Vec< + super::super::super::crypto::decaf377_fmd::v1alpha1::Clue, + >, } impl ::prost::Name for DetectionData { const NAME: &'static str = "DetectionData"; @@ -126,18 +129,28 @@ pub mod action { #[prost(message, tag = "4")] SwapClaim(super::super::super::component::dex::v1alpha1::SwapClaim), #[prost(message, tag = "16")] - ValidatorDefinition(super::super::super::component::stake::v1alpha1::ValidatorDefinition), + ValidatorDefinition( + super::super::super::component::stake::v1alpha1::ValidatorDefinition, + ), #[prost(message, tag = "17")] IbcRelayAction(super::super::super::component::ibc::v1alpha1::IbcRelay), /// Governance: #[prost(message, tag = "18")] - ProposalSubmit(super::super::super::component::governance::v1alpha1::ProposalSubmit), + ProposalSubmit( + super::super::super::component::governance::v1alpha1::ProposalSubmit, + ), #[prost(message, tag = "19")] - ProposalWithdraw(super::super::super::component::governance::v1alpha1::ProposalWithdraw), + ProposalWithdraw( + super::super::super::component::governance::v1alpha1::ProposalWithdraw, + ), #[prost(message, tag = "20")] - ValidatorVote(super::super::super::component::governance::v1alpha1::ValidatorVote), + ValidatorVote( + super::super::super::component::governance::v1alpha1::ValidatorVote, + ), #[prost(message, tag = "21")] - DelegatorVote(super::super::super::component::governance::v1alpha1::DelegatorVote), + DelegatorVote( + super::super::super::component::governance::v1alpha1::DelegatorVote, + ), #[prost(message, tag = "22")] ProposalDepositClaim( super::super::super::component::governance::v1alpha1::ProposalDepositClaim, @@ -148,16 +161,22 @@ pub mod action { #[prost(message, tag = "31")] PositionClose(super::super::super::component::dex::v1alpha1::PositionClose), #[prost(message, tag = "32")] - PositionWithdraw(super::super::super::component::dex::v1alpha1::PositionWithdraw), + PositionWithdraw( + super::super::super::component::dex::v1alpha1::PositionWithdraw, + ), #[prost(message, tag = "34")] - PositionRewardClaim(super::super::super::component::dex::v1alpha1::PositionRewardClaim), + PositionRewardClaim( + super::super::super::component::dex::v1alpha1::PositionRewardClaim, + ), /// (un)delegation #[prost(message, tag = "40")] Delegate(super::super::super::component::stake::v1alpha1::Delegate), #[prost(message, tag = "41")] Undelegate(super::super::super::component::stake::v1alpha1::Undelegate), #[prost(message, tag = "42")] - UndelegateClaim(super::super::super::component::stake::v1alpha1::UndelegateClaim), + UndelegateClaim( + super::super::super::component::stake::v1alpha1::UndelegateClaim, + ), /// Community Pool #[prost(message, tag = "50")] CommunityPoolSpend( @@ -194,11 +213,14 @@ pub struct TransactionPerspective { /// The openings of note commitments referred to in the transaction /// but not included in the transaction. #[prost(message, repeated, tag = "3")] - pub advice_notes: - ::prost::alloc::vec::Vec, + pub advice_notes: ::prost::alloc::vec::Vec< + super::super::component::shielded_pool::v1alpha1::Note, + >, /// Any relevant address views. #[prost(message, repeated, tag = "4")] - pub address_views: ::prost::alloc::vec::Vec, + pub address_views: ::prost::alloc::vec::Vec< + super::super::keys::v1alpha1::AddressView, + >, /// Any relevant denoms for viewed assets. #[prost(message, repeated, tag = "5")] pub denoms: ::prost::alloc::vec::Vec, @@ -219,8 +241,9 @@ pub struct PayloadKeyWithCommitment { #[prost(message, optional, tag = "1")] pub payload_key: ::core::option::Option, #[prost(message, optional, tag = "2")] - pub commitment: - ::core::option::Option, + pub commitment: ::core::option::Option< + super::super::super::crypto::tct::v1alpha1::StateCommitment, + >, } impl ::prost::Name for PayloadKeyWithCommitment { const NAME: &'static str = "PayloadKeyWithCommitment"; @@ -233,9 +256,13 @@ impl ::prost::Name for PayloadKeyWithCommitment { #[derive(Clone, PartialEq, ::prost::Message)] pub struct NullifierWithNote { #[prost(message, optional, tag = "1")] - pub nullifier: ::core::option::Option, + pub nullifier: ::core::option::Option< + super::super::component::sct::v1alpha1::Nullifier, + >, #[prost(message, optional, tag = "2")] - pub note: ::core::option::Option, + pub note: ::core::option::Option< + super::super::component::shielded_pool::v1alpha1::Note, + >, } impl ::prost::Name for NullifierWithNote { const NAME: &'static str = "NullifierWithNote"; @@ -259,7 +286,9 @@ pub struct TransactionView { /// The root of some previous state of the state commitment tree, used as an anchor for all /// ZK state transition proofs. #[prost(message, optional, tag = "3")] - pub anchor: ::core::option::Option, + pub anchor: ::core::option::Option< + super::super::super::crypto::tct::v1alpha1::MerkleRoot, + >, } impl ::prost::Name for TransactionView { const NAME: &'static str = "TransactionView"; @@ -319,18 +348,28 @@ pub mod action_view { SwapClaim(super::super::super::component::dex::v1alpha1::SwapClaimView), /// Action types without visible/opaque variants #[prost(message, tag = "16")] - ValidatorDefinition(super::super::super::component::stake::v1alpha1::ValidatorDefinition), + ValidatorDefinition( + super::super::super::component::stake::v1alpha1::ValidatorDefinition, + ), #[prost(message, tag = "17")] IbcRelayAction(super::super::super::component::ibc::v1alpha1::IbcRelay), /// Governance: #[prost(message, tag = "18")] - ProposalSubmit(super::super::super::component::governance::v1alpha1::ProposalSubmit), + ProposalSubmit( + super::super::super::component::governance::v1alpha1::ProposalSubmit, + ), #[prost(message, tag = "19")] - ProposalWithdraw(super::super::super::component::governance::v1alpha1::ProposalWithdraw), + ProposalWithdraw( + super::super::super::component::governance::v1alpha1::ProposalWithdraw, + ), #[prost(message, tag = "20")] - ValidatorVote(super::super::super::component::governance::v1alpha1::ValidatorVote), + ValidatorVote( + super::super::super::component::governance::v1alpha1::ValidatorVote, + ), #[prost(message, tag = "21")] - DelegatorVote(super::super::super::component::governance::v1alpha1::DelegatorVoteView), + DelegatorVote( + super::super::super::component::governance::v1alpha1::DelegatorVoteView, + ), #[prost(message, tag = "22")] ProposalDepositClaim( super::super::super::component::governance::v1alpha1::ProposalDepositClaim, @@ -340,9 +379,13 @@ pub mod action_view { #[prost(message, tag = "31")] PositionClose(super::super::super::component::dex::v1alpha1::PositionClose), #[prost(message, tag = "32")] - PositionWithdraw(super::super::super::component::dex::v1alpha1::PositionWithdraw), + PositionWithdraw( + super::super::super::component::dex::v1alpha1::PositionWithdraw, + ), #[prost(message, tag = "34")] - PositionRewardClaim(super::super::super::component::dex::v1alpha1::PositionRewardClaim), + PositionRewardClaim( + super::super::super::component::dex::v1alpha1::PositionRewardClaim, + ), #[prost(message, tag = "41")] Delegate(super::super::super::component::stake::v1alpha1::Delegate), #[prost(message, tag = "42")] @@ -364,7 +407,9 @@ pub mod action_view { /// balance commitment, and can only infer the value from looking at the rest /// of the transaction. is that fine? #[prost(message, tag = "43")] - UndelegateClaim(super::super::super::component::stake::v1alpha1::UndelegateClaim), + UndelegateClaim( + super::super::super::component::stake::v1alpha1::UndelegateClaim, + ), #[prost(message, tag = "200")] Ics20Withdrawal(super::super::super::component::ibc::v1alpha1::Ics20Withdrawal), } @@ -382,7 +427,7 @@ impl ::prost::Name for ActionView { pub struct AuthorizationData { /// The computed auth hash for the approved transaction plan. #[prost(message, optional, tag = "1")] - pub effect_hash: ::core::option::Option, + pub effect_hash: ::core::option::Option, /// The required spend authorizations, returned in the same order as the /// Spend actions in the original request. #[prost(message, repeated, tag = "2")] @@ -409,12 +454,15 @@ impl ::prost::Name for AuthorizationData { pub struct WitnessData { /// The anchor for the state transition proofs. #[prost(message, optional, tag = "1")] - pub anchor: ::core::option::Option, + pub anchor: ::core::option::Option< + super::super::super::crypto::tct::v1alpha1::MerkleRoot, + >, /// The auth paths for the notes the transaction spends, in the /// same order as the spends in the transaction plan. #[prost(message, repeated, tag = "2")] - pub state_commitment_proofs: - ::prost::alloc::vec::Vec, + pub state_commitment_proofs: ::prost::alloc::vec::Vec< + super::super::super::crypto::tct::v1alpha1::StateCommitmentProof, + >, } impl ::prost::Name for WitnessData { const NAME: &'static str = "WitnessData"; @@ -492,19 +540,29 @@ pub mod action_plan { SwapClaim(super::super::super::component::dex::v1alpha1::SwapClaimPlan), /// This is just a message relayed to the chain. #[prost(message, tag = "16")] - ValidatorDefinition(super::super::super::component::stake::v1alpha1::ValidatorDefinition), + ValidatorDefinition( + super::super::super::component::stake::v1alpha1::ValidatorDefinition, + ), /// This is just a message relayed to the chain. #[prost(message, tag = "17")] IbcRelayAction(super::super::super::component::ibc::v1alpha1::IbcRelay), /// Governance: #[prost(message, tag = "18")] - ProposalSubmit(super::super::super::component::governance::v1alpha1::ProposalSubmit), + ProposalSubmit( + super::super::super::component::governance::v1alpha1::ProposalSubmit, + ), #[prost(message, tag = "19")] - ProposalWithdraw(super::super::super::component::governance::v1alpha1::ProposalWithdraw), + ProposalWithdraw( + super::super::super::component::governance::v1alpha1::ProposalWithdraw, + ), #[prost(message, tag = "20")] - ValidatorVote(super::super::super::component::governance::v1alpha1::ValidatorVote), + ValidatorVote( + super::super::super::component::governance::v1alpha1::ValidatorVote, + ), #[prost(message, tag = "21")] - DelegatorVote(super::super::super::component::governance::v1alpha1::DelegatorVotePlan), + DelegatorVote( + super::super::super::component::governance::v1alpha1::DelegatorVotePlan, + ), #[prost(message, tag = "22")] ProposalDepositClaim( super::super::super::component::governance::v1alpha1::ProposalDepositClaim, @@ -517,9 +575,13 @@ pub mod action_plan { PositionClose(super::super::super::component::dex::v1alpha1::PositionClose), /// The position withdraw/reward claim actions require balance information so they have Plan types. #[prost(message, tag = "32")] - PositionWithdraw(super::super::super::component::dex::v1alpha1::PositionWithdrawPlan), + PositionWithdraw( + super::super::super::component::dex::v1alpha1::PositionWithdrawPlan, + ), #[prost(message, tag = "34")] - PositionRewardClaim(super::super::super::component::dex::v1alpha1::PositionRewardClaimPlan), + PositionRewardClaim( + super::super::super::component::dex::v1alpha1::PositionRewardClaimPlan, + ), /// We don't need any extra information (yet) to understand delegations, /// because we don't yet use flow encryption. #[prost(message, tag = "40")] @@ -529,7 +591,9 @@ pub mod action_plan { #[prost(message, tag = "41")] Undelegate(super::super::super::component::stake::v1alpha1::Undelegate), #[prost(message, tag = "42")] - UndelegateClaim(super::super::super::component::stake::v1alpha1::UndelegateClaimPlan), + UndelegateClaim( + super::super::super::component::stake::v1alpha1::UndelegateClaimPlan, + ), /// Community Pool #[prost(message, tag = "50")] CommunityPoolSpend( @@ -631,7 +695,9 @@ impl ::prost::Name for MemoPlaintext { #[derive(Clone, PartialEq, ::prost::Message)] pub struct MemoPlaintextView { #[prost(message, optional, tag = "1")] - pub return_address: ::core::option::Option, + pub return_address: ::core::option::Option< + super::super::keys::v1alpha1::AddressView, + >, #[prost(string, tag = "2")] pub text: ::prost::alloc::string::String, } @@ -662,7 +728,9 @@ pub mod memo_view { const NAME: &'static str = "Visible"; const PACKAGE: &'static str = "penumbra.core.transaction.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.MemoView.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.transaction.v1alpha1.MemoView.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -675,7 +743,9 @@ pub mod memo_view { const NAME: &'static str = "Opaque"; const PACKAGE: &'static str = "penumbra.core.transaction.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.MemoView.{}", Self::NAME) + ::prost::alloc::format!( + "penumbra.core.transaction.v1alpha1.MemoView.{}", Self::NAME + ) } } #[allow(clippy::derive_partial_eq_without_eq)] diff --git a/crates/proto/src/gen/penumbra.core.effecthash.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.txhash.v1alpha1.rs similarity index 75% rename from crates/proto/src/gen/penumbra.core.effecthash.v1alpha1.rs rename to crates/proto/src/gen/penumbra.core.txhash.v1alpha1.rs index abdfe82039..458eef47bb 100644 --- a/crates/proto/src/gen/penumbra.core.effecthash.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.txhash.v1alpha1.rs @@ -8,8 +8,8 @@ pub struct EffectHash { } impl ::prost::Name for EffectHash { const NAME: &'static str = "EffectHash"; - const PACKAGE: &'static str = "penumbra.core.effecthash.v1alpha1"; + const PACKAGE: &'static str = "penumbra.core.txhash.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.effecthash.v1alpha1.{}", Self::NAME) + ::prost::alloc::format!("penumbra.core.txhash.v1alpha1.{}", Self::NAME) } } diff --git a/crates/proto/src/gen/penumbra.core.effecthash.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.txhash.v1alpha1.serde.rs similarity index 92% rename from crates/proto/src/gen/penumbra.core.effecthash.v1alpha1.serde.rs rename to crates/proto/src/gen/penumbra.core.txhash.v1alpha1.serde.rs index cd24e93abe..7f0cd38e2e 100644 --- a/crates/proto/src/gen/penumbra.core.effecthash.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.txhash.v1alpha1.serde.rs @@ -9,7 +9,7 @@ impl serde::Serialize for EffectHash { if !self.inner.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.effecthash.v1alpha1.EffectHash", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.txhash.v1alpha1.EffectHash", len)?; if !self.inner.is_empty() { #[allow(clippy::needless_borrow)] struct_ser.serialize_field("inner", pbjson::private::base64::encode(&self.inner).as_str())?; @@ -64,7 +64,7 @@ impl<'de> serde::Deserialize<'de> for EffectHash { type Value = EffectHash; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.effecthash.v1alpha1.EffectHash") + formatter.write_str("struct penumbra.core.txhash.v1alpha1.EffectHash") } fn visit_map(self, mut map_: V) -> std::result::Result @@ -89,6 +89,6 @@ impl<'de> serde::Deserialize<'de> for EffectHash { }) } } - deserializer.deserialize_struct("penumbra.core.effecthash.v1alpha1.EffectHash", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.txhash.v1alpha1.EffectHash", FIELDS, GeneratedVisitor) } } diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index 3b98f11d1bf5500f9b163cb7c8414f264335c4c9..370d1d4432a9d423eb75320cfe6ef0290ad99a21 100644 GIT binary patch delta 955 zcma))TSyd97{~W~=d3QXuCC)|HMzU9+NxdLb+rYpq%0qzC0E!Yq98__Z8n^pWu5g> zC`LjTPzb5>(1nbMj37m5A|jI@QR<=at@83@k3IC}OJ^h@1|NDn@cUoB?>no@p5H5; ziRA!Vn_3Ad7;ZU6V?il+gd@ZTHXb{mPKb)96~+2$L0mp>x7k)Pow-UphExp=?xH4E)5&U*Ap`*-OrJG?-;zw{8z8p- z00Rq5@TLjYtY>#iojF<5HL)urr!R=ftfq==N=ql&(g?AlgG}!-^&_S}L?1SS&k|%z zH^N=d&R>Y3JjQ(91AxbXg(W05TRqdQ&}Na-nN}Dqc>-LXsWzj=fYb=1K&PML?Np6J z+M+NP;~2N-d2mi~NE)F4) ze#$_pamazcmsLIouDCg;D_S;nS<+Klx<%3@{y689lS#QlKX2CChUlY7vIX>B<6IEC z-DsSuQCyGq8DmlWxxnjX3$O#v<8~4k+?M%`!6W!sq0h${ClvGKHQEgN)`la1>ZmJ$ zWBvf=;_T*cVLP2g+iatAhZ+#}(Ie01+s3eP#woH4KC xdg85REr6X0@7m;2Mo}NWWEbiglLvMlCmDs(ex+#0EBs%ON7SDHnCk)U~YA7fY@b0y=UfBp^UZwe1j+ zd)dwa$n%$5o3P+>tqM9Au{frr!Pbc67UhDj3F)0ekQag||H=Mg3rRh!_#4%5{tGP~ zb$)+eaOga?OHmm4Vk)nO>dtFtD_lR4gd2kl*t;V zLH&E0kkEv7HEi2}Bx>WQGcd`>v-e11m9I!A+jih2OY9)G{C{sgP>!qWn_q%d8Oxcv zksZ0Nnj^+|pK7W!Avt%I10oh%UL{`X?^ymOfIS{*W_Y){k07dJo1M4{^|0_PR(N$3 zzo?+p+Jqe_#e*a%+e^zX_TsY#yj}}9p^}nSv`@~Q$6-KGHkHEhhJfUf?4o3AjcceS zymz#o)*3p|$-kuVf~#cX0WT$wVBcm@#p@1qk57)^yc4bPSPma2G++$`s}p==uM$2t hg|FCY&;n&(r#J;Exvtce`zAhoKRS(hbegIndex of crates
\ No newline at end of file +Index of crates +
\ No newline at end of file diff --git a/proto/go/gen/penumbra/core/effecthash/v1alpha1/effecthash.pb.go b/proto/go/gen/penumbra/core/effecthash/v1alpha1/effecthash.pb.go deleted file mode 100644 index 47cc43c2db..0000000000 --- a/proto/go/gen/penumbra/core/effecthash/v1alpha1/effecthash.pb.go +++ /dev/null @@ -1,167 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.32.0 -// protoc (unknown) -// source: penumbra/core/effecthash/v1alpha1/effecthash.proto - -package effecthashv1alpha1 - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// The hash of a Penumbra transaction's _effecting data_, describing the effects -// of the transaction on the chain state. -type EffectHash struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Inner []byte `protobuf:"bytes,1,opt,name=inner,proto3" json:"inner,omitempty"` -} - -func (x *EffectHash) Reset() { - *x = EffectHash{} - if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_effecthash_v1alpha1_effecthash_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EffectHash) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EffectHash) ProtoMessage() {} - -func (x *EffectHash) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_effecthash_v1alpha1_effecthash_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EffectHash.ProtoReflect.Descriptor instead. -func (*EffectHash) Descriptor() ([]byte, []int) { - return file_penumbra_core_effecthash_v1alpha1_effecthash_proto_rawDescGZIP(), []int{0} -} - -func (x *EffectHash) GetInner() []byte { - if x != nil { - return x.Inner - } - return nil -} - -var File_penumbra_core_effecthash_v1alpha1_effecthash_proto protoreflect.FileDescriptor - -var file_penumbra_core_effecthash_v1alpha1_effecthash_proto_rawDesc = []byte{ - 0x0a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x68, 0x61, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x21, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x22, 0x22, 0x0a, 0x0a, 0x45, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x42, 0xc4, 0x02, 0x0a, 0x25, - 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0f, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x68, 0x61, 0x73, - 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x63, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, - 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x68, 0x61, 0x73, - 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x65, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x68, 0x61, 0x73, 0x68, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, - 0x50, 0x43, 0x45, 0xaa, 0x02, 0x21, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, - 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x56, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x21, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x68, 0x61, - 0x73, 0x68, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2d, 0x50, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x45, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x68, 0x61, 0x73, 0x68, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x24, 0x50, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x45, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x68, 0x61, 0x73, 0x68, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_penumbra_core_effecthash_v1alpha1_effecthash_proto_rawDescOnce sync.Once - file_penumbra_core_effecthash_v1alpha1_effecthash_proto_rawDescData = file_penumbra_core_effecthash_v1alpha1_effecthash_proto_rawDesc -) - -func file_penumbra_core_effecthash_v1alpha1_effecthash_proto_rawDescGZIP() []byte { - file_penumbra_core_effecthash_v1alpha1_effecthash_proto_rawDescOnce.Do(func() { - file_penumbra_core_effecthash_v1alpha1_effecthash_proto_rawDescData = protoimpl.X.CompressGZIP(file_penumbra_core_effecthash_v1alpha1_effecthash_proto_rawDescData) - }) - return file_penumbra_core_effecthash_v1alpha1_effecthash_proto_rawDescData -} - -var file_penumbra_core_effecthash_v1alpha1_effecthash_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_penumbra_core_effecthash_v1alpha1_effecthash_proto_goTypes = []interface{}{ - (*EffectHash)(nil), // 0: penumbra.core.effecthash.v1alpha1.EffectHash -} -var file_penumbra_core_effecthash_v1alpha1_effecthash_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_penumbra_core_effecthash_v1alpha1_effecthash_proto_init() } -func file_penumbra_core_effecthash_v1alpha1_effecthash_proto_init() { - if File_penumbra_core_effecthash_v1alpha1_effecthash_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_penumbra_core_effecthash_v1alpha1_effecthash_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EffectHash); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_penumbra_core_effecthash_v1alpha1_effecthash_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_penumbra_core_effecthash_v1alpha1_effecthash_proto_goTypes, - DependencyIndexes: file_penumbra_core_effecthash_v1alpha1_effecthash_proto_depIdxs, - MessageInfos: file_penumbra_core_effecthash_v1alpha1_effecthash_proto_msgTypes, - }.Build() - File_penumbra_core_effecthash_v1alpha1_effecthash_proto = out.File - file_penumbra_core_effecthash_v1alpha1_effecthash_proto_rawDesc = nil - file_penumbra_core_effecthash_v1alpha1_effecthash_proto_goTypes = nil - file_penumbra_core_effecthash_v1alpha1_effecthash_proto_depIdxs = nil -} diff --git a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go index b6836b493c..8fb1a6bd7d 100644 --- a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go +++ b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go @@ -15,8 +15,8 @@ import ( v1alpha111 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/sct/v1alpha1" v1alpha14 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1" v1alpha16 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/stake/v1alpha1" - v1alpha112 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/effecthash/v1alpha1" v1alpha19 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/keys/v1alpha1" + v1alpha112 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/txhash/v1alpha1" v1alpha13 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/decaf377_fmd/v1alpha1" v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1" v1alpha11 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/tct/v1alpha1" @@ -2543,757 +2543,756 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x28, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, - 0x6f, 0x72, 0x65, 0x2f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x68, 0x61, 0x73, 0x68, 0x2f, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x68, 0x61, - 0x73, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2f, 0x64, 0x65, 0x78, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, - 0x65, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2f, 0x66, 0x65, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x66, - 0x65, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3c, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, - 0x69, 0x62, 0x63, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, 0x62, 0x63, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, - 0x73, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x63, 0x74, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x42, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, - 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6b, 0x65, - 0x79, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x38, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, - 0x5f, 0x66, 0x6d, 0x64, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x65, - 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x66, 0x6d, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x3a, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x6f, 0x2f, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2f, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, - 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x74, 0x63, - 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x63, 0x74, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf3, 0x01, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x59, 0x0a, - 0x0b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, - 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x62, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, - 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, - 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0x18, 0x0a, 0x02, 0x49, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, - 0x68, 0x61, 0x73, 0x68, 0x22, 0xeb, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x44, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x70, - 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, - 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x74, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x46, 0x0a, 0x04, 0x6d, 0x65, - 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, - 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x04, 0x6d, 0x65, - 0x6d, 0x6f, 0x22, 0x94, 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, - 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x03, - 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x22, 0x59, 0x0a, 0x0d, 0x44, 0x65, 0x74, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x09, 0x66, 0x6d, - 0x64, 0x5f, 0x63, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, - 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x66, 0x6d, 0x64, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x66, 0x6d, 0x64, 0x43, - 0x6c, 0x75, 0x65, 0x73, 0x22, 0x9a, 0x11, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x4d, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, - 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x50, - 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, - 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x12, 0x40, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, - 0x61, 0x70, 0x12, 0x50, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, + 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2f, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x65, 0x78, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x66, 0x65, 0x65, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x66, 0x65, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x3c, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x69, 0x62, 0x63, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, 0x62, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x42, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x74, 0x61, 0x6b, + 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x38, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, + 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x66, 0x6d, 0x64, 0x2f, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x66, + 0x6d, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, + 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2f, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x74, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2f, 0x74, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf3, 0x01, 0x0a, + 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x04, + 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x52, + 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x59, 0x0a, 0x0b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, + 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, + 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, + 0x6f, 0x72, 0x22, 0x18, 0x0a, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0xeb, 0x02, 0x0a, + 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, + 0x12, 0x44, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x46, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, + 0x74, 0x65, 0x78, 0x74, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x94, 0x01, 0x0a, 0x15, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, + 0x65, 0x22, 0x59, 0x0a, 0x0d, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x48, 0x0a, 0x09, 0x66, 0x6d, 0x64, 0x5f, 0x63, 0x6c, 0x75, 0x65, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, + 0x5f, 0x66, 0x6d, 0x64, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, + 0x75, 0x65, 0x52, 0x08, 0x66, 0x6d, 0x64, 0x43, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x9a, 0x11, 0x0a, + 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, + 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x50, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, + 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, - 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, - 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, - 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, - 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x63, 0x0a, - 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, - 0x65, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, - 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, - 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, - 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, - 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, - 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, - 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x12, 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, + 0x61, 0x70, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x50, 0x0a, 0x0a, 0x73, 0x77, + 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x73, 0x0a, 0x14, 0x63, 0x6f, - 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x70, 0x65, - 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, + 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, + 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, + 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, + 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, + 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, - 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, 0x6d, - 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, - 0x76, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, - 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x48, 0x00, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, - 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x79, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x75, - 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, - 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, - 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x97, 0x04, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x5f, 0x0a, 0x0c, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, - 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x60, 0x0a, - 0x10, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, - 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0f, - 0x73, 0x70, 0x65, 0x6e, 0x64, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, - 0x57, 0x0a, 0x0c, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, + 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, + 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, + 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, + 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, + 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, + 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, + 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, + 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, + 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x64, 0x0a, 0x10, + 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, + 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x12, 0x73, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, + 0x64, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, + 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x76, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, + 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, + 0x79, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, + 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, + 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, + 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0b, 0x61, 0x64, 0x76, - 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x12, 0x4d, 0x0a, 0x0e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, 0x0d, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x18, + 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, + 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, + 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, + 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x97, 0x04, 0x0a, 0x16, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, + 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, - 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, - 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x22, 0xac, 0x01, 0x0a, 0x11, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, - 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, - 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, - 0x22, 0x84, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x56, 0x69, 0x65, 0x77, 0x12, 0x54, 0x0a, 0x09, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x76, 0x69, 0x65, - 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, - 0x52, 0x08, 0x62, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x59, 0x0a, 0x0b, 0x62, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x62, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, - 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0xff, 0x02, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, - 0x51, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, - 0x77, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, + 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x60, 0x0a, 0x10, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x6e, + 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, + 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x4e, 0x75, 0x6c, + 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x57, 0x0a, 0x0c, 0x61, 0x64, 0x76, 0x69, 0x63, + 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, + 0x6f, 0x74, 0x65, 0x52, 0x0b, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x73, + 0x12, 0x4d, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, + 0x77, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, + 0x43, 0x0a, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, + 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x06, 0x64, 0x65, + 0x6e, 0x6f, 0x6d, 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x49, - 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x52, - 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x22, 0xb7, 0x11, 0x0a, 0x0a, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x31, 0x2e, 0x49, 0x64, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x18, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, + 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x0a, + 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xac, 0x01, 0x0a, 0x11, 0x4e, 0x75, + 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x12, + 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x48, + 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, + 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, 0x84, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x54, 0x0a, 0x09, + 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, 0x62, 0x6f, 0x64, 0x79, 0x56, 0x69, + 0x65, 0x77, 0x12, 0x59, 0x0a, 0x0b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, + 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, + 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x52, 0x0a, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, + 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, + 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, + 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, + 0xff, 0x02, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, + 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x49, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, + 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, + 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, + 0x77, 0x22, 0xb7, 0x11, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, + 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, + 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, + 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x48, + 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, + 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, - 0x65, 0x77, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, - 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x56, 0x69, 0x65, 0x77, 0x48, - 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x56, 0x69, 0x65, 0x77, - 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, - 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, - 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, - 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, - 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, - 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, - 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, - 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, - 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, + 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, + 0x77, 0x61, 0x70, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, + 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, + 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, + 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, + 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, + 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, + 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, + 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, + 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, + 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, + 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, + 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, + 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, + 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, + 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, + 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, + 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, + 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, + 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, + 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x73, 0x0a, 0x14, 0x63, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x6e, + 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, + 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x6d, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x76, + 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, + 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, - 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, - 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, + 0x00, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x79, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, + 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x12, 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, + 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, + 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0xaa, 0x02, 0x0a, 0x11, + 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x4a, 0x0a, 0x0b, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, + 0x68, 0x52, 0x0a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x5b, 0x0a, + 0x0b, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, + 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, + 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, + 0x73, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x73, 0x12, 0x6c, 0x0a, 0x14, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, + 0x68, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, + 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x52, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, + 0x6f, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x0b, 0x57, 0x69, 0x74, + 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, + 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, + 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x6a, 0x0a, 0x17, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, + 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, + 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, + 0x15, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x22, 0xed, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x48, 0x0a, 0x07, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, + 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5c, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, + 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x6e, + 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x60, 0x0a, 0x11, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4b, 0x0a, 0x0a, 0x63, + 0x6c, 0x75, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x09, 0x63, + 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x73, 0x22, 0xb2, 0x11, 0x0a, 0x0a, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, 0x6c, 0x61, + 0x6e, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, + 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, + 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, + 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, + 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, + 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, + 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, + 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, + 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, + 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x57, 0x0a, 0x0a, 0x77, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, + 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x61, 0x6c, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, + 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, + 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, + 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, + 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x11, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x50, 0x6c, + 0x61, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x73, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, + 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, - 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x12, 0x73, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, - 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, - 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, - 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x76, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, - 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, - 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, - 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x75, - 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x79, - 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, - 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, - 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2b, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, - 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x0f, - 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, - 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, - 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, - 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x61, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, - 0x69, 0x65, 0x77, 0x22, 0xae, 0x02, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4e, 0x0a, 0x0b, 0x65, 0x66, 0x66, - 0x65, 0x63, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0a, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x5b, 0x0a, 0x0b, 0x73, 0x70, 0x65, - 0x6e, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, - 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, - 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x73, 0x70, 0x65, 0x6e, - 0x64, 0x41, 0x75, 0x74, 0x68, 0x73, 0x12, 0x6c, 0x0a, 0x14, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, - 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, - 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x52, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x41, - 0x75, 0x74, 0x68, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x0b, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, - 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x6a, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x15, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x73, 0x22, 0xed, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x48, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x12, 0x5c, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, - 0x6e, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x40, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x04, 0x6d, 0x65, - 0x6d, 0x6f, 0x22, 0x60, 0x0a, 0x11, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4b, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x65, 0x5f, - 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x65, 0x50, - 0x6c, 0x61, 0x6e, 0x73, 0x22, 0xb2, 0x11, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x6c, 0x61, 0x6e, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, - 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, - 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x6c, - 0x61, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, - 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, - 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, - 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x73, - 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, - 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, - 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, - 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, - 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, - 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, - 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, - 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, - 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, - 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x57, 0x0a, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, - 0x77, 0x61, 0x6c, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, - 0x48, 0x00, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, 0x59, - 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, - 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, - 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x12, 0x73, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, - 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, + 0x65, 0x12, 0x68, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, - 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, - 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x73, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, - 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, - 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, - 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, - 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x76, 0x0a, 0x15, - 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, - 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, - 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x12, 0x79, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, - 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, - 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, - 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x42, - 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x87, 0x01, 0x0a, 0x08, 0x43, 0x6c, - 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x73, 0x0a, 0x14, 0x63, + 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x70, + 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, + 0x12, 0x76, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, + 0x6f, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x48, 0x00, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, + 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x79, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, + 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x87, 0x01, + 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, + 0x65, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, + 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x69, + 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x50, + 0x6c, 0x61, 0x6e, 0x12, 0x4f, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, + 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x26, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, + 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x70, + 0x0a, 0x0d, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, + 0x4b, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, - 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x69, 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x6e, 0x12, - 0x4f, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x22, 0x26, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, - 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x70, 0x0a, 0x0d, 0x4d, 0x65, - 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x78, 0x0a, 0x11, - 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, - 0x77, 0x12, 0x4f, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, - 0x69, 0x65, 0x77, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0xcb, 0x03, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x56, - 0x69, 0x65, 0x77, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, - 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, - 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, - 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, - 0x61, 0x71, 0x75, 0x65, 0x1a, 0xb2, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, - 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, - 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, - 0x74, 0x65, 0x78, 0x74, 0x12, 0x53, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, - 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x52, 0x09, - 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x5c, 0x0a, 0x06, 0x4f, 0x70, 0x61, - 0x71, 0x75, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, - 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, - 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, - 0x76, 0x69, 0x65, 0x77, 0x42, 0xcc, 0x02, 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, - 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x65, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, - 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, - 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x54, - 0xaa, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, - 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2e, 0x50, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x25, 0x50, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0d, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, + 0x22, 0x78, 0x0a, 0x11, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x56, 0x69, 0x65, 0x77, 0x12, 0x4f, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, + 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0xcb, 0x03, 0x0a, 0x08, 0x4d, + 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, + 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, + 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, + 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x6f, 0x70, 0x61, + 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, + 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, + 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xb2, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, + 0x69, 0x62, 0x6c, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, + 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, + 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x53, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, + 0x65, 0x77, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x5c, 0x0a, + 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, + 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, + 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x6d, + 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x42, 0xcc, 0x02, 0x0a, 0x26, 0x63, 0x6f, 0x6d, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x42, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x65, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, + 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, + 0x03, 0x50, 0x43, 0x54, 0xaa, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, + 0x2e, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, + 0x02, 0x25, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, + 0x3a, 0x3a, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3372,7 +3371,7 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_goTypes = []interf (*v1alpha15.SwapView)(nil), // 59: penumbra.core.component.dex.v1alpha1.SwapView (*v1alpha15.SwapClaimView)(nil), // 60: penumbra.core.component.dex.v1alpha1.SwapClaimView (*v1alpha18.DelegatorVoteView)(nil), // 61: penumbra.core.component.governance.v1alpha1.DelegatorVoteView - (*v1alpha112.EffectHash)(nil), // 62: penumbra.core.effecthash.v1alpha1.EffectHash + (*v1alpha112.EffectHash)(nil), // 62: penumbra.core.txhash.v1alpha1.EffectHash (*v1alpha1.SpendAuthSignature)(nil), // 63: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature (*v1alpha11.StateCommitmentProof)(nil), // 64: penumbra.crypto.tct.v1alpha1.StateCommitmentProof (*v1alpha14.SpendPlan)(nil), // 65: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan @@ -3456,7 +3455,7 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_depIdxs = []int32{ 49, // 67: penumbra.core.transaction.v1alpha1.ActionView.community_pool_deposit:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit 46, // 68: penumbra.core.transaction.v1alpha1.ActionView.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim 50, // 69: penumbra.core.transaction.v1alpha1.ActionView.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 62, // 70: penumbra.core.transaction.v1alpha1.AuthorizationData.effect_hash:type_name -> penumbra.core.effecthash.v1alpha1.EffectHash + 62, // 70: penumbra.core.transaction.v1alpha1.AuthorizationData.effect_hash:type_name -> penumbra.core.txhash.v1alpha1.EffectHash 63, // 71: penumbra.core.transaction.v1alpha1.AuthorizationData.spend_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature 63, // 72: penumbra.core.transaction.v1alpha1.AuthorizationData.delegator_vote_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature 26, // 73: penumbra.core.transaction.v1alpha1.WitnessData.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot diff --git a/proto/go/gen/penumbra/core/txhash/v1alpha1/txhash.pb.go b/proto/go/gen/penumbra/core/txhash/v1alpha1/txhash.pb.go new file mode 100644 index 0000000000..021254711f --- /dev/null +++ b/proto/go/gen/penumbra/core/txhash/v1alpha1/txhash.pb.go @@ -0,0 +1,164 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.32.0 +// protoc (unknown) +// source: penumbra/core/txhash/v1alpha1/txhash.proto + +package txhashv1alpha1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// The hash of a Penumbra transaction's _effecting data_, describing the effects +// of the transaction on the chain state. +type EffectHash struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Inner []byte `protobuf:"bytes,1,opt,name=inner,proto3" json:"inner,omitempty"` +} + +func (x *EffectHash) Reset() { + *x = EffectHash{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_txhash_v1alpha1_txhash_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EffectHash) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EffectHash) ProtoMessage() {} + +func (x *EffectHash) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_txhash_v1alpha1_txhash_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EffectHash.ProtoReflect.Descriptor instead. +func (*EffectHash) Descriptor() ([]byte, []int) { + return file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDescGZIP(), []int{0} +} + +func (x *EffectHash) GetInner() []byte { + if x != nil { + return x.Inner + } + return nil +} + +var File_penumbra_core_txhash_v1alpha1_txhash_proto protoreflect.FileDescriptor + +var file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDesc = []byte{ + 0x0a, 0x2a, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, + 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, 0x61, + 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x22, 0x22, 0x0a, 0x0a, 0x45, + 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x42, + 0xa4, 0x02, 0x0a, 0x21, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0b, 0x54, 0x78, 0x68, 0x61, 0x73, 0x68, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, + 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, + 0x72, 0x65, 0x2f, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x3b, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x54, 0xaa, 0x02, 0x1d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x1d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x78, 0x68, 0x61, 0x73, 0x68, 0x5c, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x29, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x78, 0x68, 0x61, 0x73, 0x68, 0x5c, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x20, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, + 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x54, 0x78, 0x68, 0x61, 0x73, 0x68, 0x3a, 0x3a, 0x56, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDescOnce sync.Once + file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDescData = file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDesc +) + +func file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDescGZIP() []byte { + file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDescOnce.Do(func() { + file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDescData = protoimpl.X.CompressGZIP(file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDescData) + }) + return file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDescData +} + +var file_penumbra_core_txhash_v1alpha1_txhash_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_penumbra_core_txhash_v1alpha1_txhash_proto_goTypes = []interface{}{ + (*EffectHash)(nil), // 0: penumbra.core.txhash.v1alpha1.EffectHash +} +var file_penumbra_core_txhash_v1alpha1_txhash_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_penumbra_core_txhash_v1alpha1_txhash_proto_init() } +func file_penumbra_core_txhash_v1alpha1_txhash_proto_init() { + if File_penumbra_core_txhash_v1alpha1_txhash_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_penumbra_core_txhash_v1alpha1_txhash_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EffectHash); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_penumbra_core_txhash_v1alpha1_txhash_proto_goTypes, + DependencyIndexes: file_penumbra_core_txhash_v1alpha1_txhash_proto_depIdxs, + MessageInfos: file_penumbra_core_txhash_v1alpha1_txhash_proto_msgTypes, + }.Build() + File_penumbra_core_txhash_v1alpha1_txhash_proto = out.File + file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDesc = nil + file_penumbra_core_txhash_v1alpha1_txhash_proto_goTypes = nil + file_penumbra_core_txhash_v1alpha1_txhash_proto_depIdxs = nil +} diff --git a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto index fe455d4e27..a2a195fc78 100644 --- a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto +++ b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package penumbra.core.transaction.v1alpha1; import "penumbra/core/asset/v1alpha1/asset.proto"; -import "penumbra/core/effecthash/v1alpha1/effecthash.proto"; +import "penumbra/core/txhash/v1alpha1/txhash.proto"; import "penumbra/core/component/dex/v1alpha1/dex.proto"; import "penumbra/core/component/fee/v1alpha1/fee.proto"; import "penumbra/core/component/governance/v1alpha1/governance.proto"; @@ -197,7 +197,7 @@ message ActionView { // The data required to authorize a transaction plan. message AuthorizationData { // The computed auth hash for the approved transaction plan. - core.effecthash.v1alpha1.EffectHash effect_hash = 1; + core.txhash.v1alpha1.EffectHash effect_hash = 1; // The required spend authorizations, returned in the same order as the // Spend actions in the original request. repeated crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature spend_auths = 2; diff --git a/proto/penumbra/penumbra/core/effecthash/v1alpha1/effecthash.proto b/proto/penumbra/penumbra/core/txhash/v1alpha1/txhash.proto similarity index 81% rename from proto/penumbra/penumbra/core/effecthash/v1alpha1/effecthash.proto rename to proto/penumbra/penumbra/core/txhash/v1alpha1/txhash.proto index 70cd6fccbf..4480f74a84 100644 --- a/proto/penumbra/penumbra/core/effecthash/v1alpha1/effecthash.proto +++ b/proto/penumbra/penumbra/core/txhash/v1alpha1/txhash.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -package penumbra.core.effecthash.v1alpha1; +package penumbra.core.txhash.v1alpha1; // The hash of a Penumbra transaction's _effecting data_, describing the effects // of the transaction on the chain state. diff --git a/tools/proto-compiler/src/main.rs b/tools/proto-compiler/src/main.rs index 4c2289ce5c..540859efde 100644 --- a/tools/proto-compiler/src/main.rs +++ b/tools/proto-compiler/src/main.rs @@ -89,7 +89,7 @@ fn main() -> anyhow::Result<()> { &[ "../../proto/penumbra/penumbra/core/app/v1alpha1/app.proto", "../../proto/penumbra/penumbra/core/asset/v1alpha1/asset.proto", - "../../proto/penumbra/penumbra/core/effecthash/v1alpha1/effecthash.proto", + "../../proto/penumbra/penumbra/core/txhash/v1alpha1/txhash.proto", "../../proto/penumbra/penumbra/core/component/chain/v1alpha1/chain.proto", "../../proto/penumbra/penumbra/core/component/compact_block/v1alpha1/compact_block.proto", "../../proto/penumbra/penumbra/core/component/community_pool/v1alpha1/community_pool.proto", From 7bc81bdb065d561d9879ffcc013bb1a337dbb789 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Sat, 30 Dec 2023 12:28:19 -0500 Subject: [PATCH 15/84] txhash: move AuthHash into txhash --- .../action_handler/transaction/stateless.rs | 3 ++- crates/core/app/src/tests/spend.rs | 4 ++-- crates/core/transaction/src/lib.rs | 2 -- crates/core/transaction/src/plan/build.rs | 5 ++--- crates/core/transaction/src/transaction.rs | 20 ++++++++++++++++++- .../{transaction => txhash}/src/auth_hash.rs | 20 ------------------- crates/core/txhash/src/lib.rs | 2 ++ 7 files changed, 27 insertions(+), 29 deletions(-) rename crates/core/{transaction => txhash}/src/auth_hash.rs (68%) diff --git a/crates/core/app/src/action_handler/transaction/stateless.rs b/crates/core/app/src/action_handler/transaction/stateless.rs index 1726017b04..282559a9ea 100644 --- a/crates/core/app/src/action_handler/transaction/stateless.rs +++ b/crates/core/app/src/action_handler/transaction/stateless.rs @@ -1,7 +1,8 @@ use std::collections::{BTreeMap, BTreeSet}; use anyhow::{Context, Result}; -use penumbra_transaction::{AuthorizingData, Transaction}; +use penumbra_transaction::Transaction; +use penumbra_txhash::AuthorizingData; #[tracing::instrument(skip(tx))] pub(super) fn valid_binding_signature(tx: &Transaction) -> Result<()> { diff --git a/crates/core/app/src/tests/spend.rs b/crates/core/app/src/tests/spend.rs index 963800a6ae..d50ad794b0 100644 --- a/crates/core/app/src/tests/spend.rs +++ b/crates/core/app/src/tests/spend.rs @@ -11,8 +11,8 @@ use penumbra_keys::{test_keys, PayloadKey}; use penumbra_num::Amount; use penumbra_sct::component::SourceContext; use penumbra_shielded_pool::{component::ShieldedPool, SpendPlan}; -use penumbra_transaction::{AuthorizingData, Transaction, TransactionBody, TransactionParameters}; -use penumbra_txhash::EffectHash; +use penumbra_transaction::{Transaction, TransactionBody, TransactionParameters}; +use penumbra_txhash::{AuthorizingData, EffectHash}; use rand_core::SeedableRng; use tendermint::abci; diff --git a/crates/core/transaction/src/lib.rs b/crates/core/transaction/src/lib.rs index 0754af67c7..3e5194116c 100644 --- a/crates/core/transaction/src/lib.rs +++ b/crates/core/transaction/src/lib.rs @@ -16,7 +16,6 @@ #![allow(clippy::clone_on_copy)] mod auth_data; -mod auth_hash; mod detection_data; mod error; mod id; @@ -33,7 +32,6 @@ pub mod view; pub use action::Action; pub use auth_data::AuthorizationData; -pub use auth_hash::{AuthHash, AuthorizingData}; pub use detection_data::DetectionData; pub use error::Error; pub use id::Id; diff --git a/crates/core/transaction/src/plan/build.rs b/crates/core/transaction/src/plan/build.rs index 4ce5198e5c..61caedfdb9 100644 --- a/crates/core/transaction/src/plan/build.rs +++ b/crates/core/transaction/src/plan/build.rs @@ -3,15 +3,14 @@ use ark_ff::Zero; use decaf377::Fr; use decaf377_rdsa as rdsa; use penumbra_keys::FullViewingKey; +use penumbra_txhash::AuthorizingData; use rand_core::OsRng; use rand_core::{CryptoRng, RngCore}; use std::fmt::Debug; use super::TransactionPlan; use crate::ActionPlan; -use crate::{ - action::Action, AuthorizationData, AuthorizingData, Transaction, TransactionBody, WitnessData, -}; +use crate::{action::Action, AuthorizationData, Transaction, TransactionBody, WitnessData}; impl TransactionPlan { /// Builds a [`TransactionPlan`] by slotting in the diff --git a/crates/core/transaction/src/transaction.rs b/crates/core/transaction/src/transaction.rs index 3e012e4fc4..ed05f5e541 100644 --- a/crates/core/transaction/src/transaction.rs +++ b/crates/core/transaction/src/transaction.rs @@ -25,7 +25,7 @@ use penumbra_shielded_pool::{Note, Output, Spend}; use penumbra_stake::{Delegate, Undelegate, UndelegateClaim}; use penumbra_tct as tct; use penumbra_tct::StateCommitment; -use penumbra_txhash::{EffectHash, EffectingData}; +use penumbra_txhash::{AuthHash, AuthorizingData, EffectHash, EffectingData}; use serde::{Deserialize, Serialize}; use crate::{ @@ -87,6 +87,24 @@ impl EffectingData for Transaction { } } +impl AuthorizingData for TransactionBody { + fn auth_hash(&self) -> AuthHash { + AuthHash( + blake2b_simd::Params::default() + .hash(&self.encode_to_vec()) + .as_bytes()[0..32] + .try_into() + .expect("blake2b output is always 32 bytes long"), + ) + } +} + +impl AuthorizingData for Transaction { + fn auth_hash(&self) -> AuthHash { + self.transaction_body.auth_hash() + } +} + #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(try_from = "pbt::Transaction", into = "pbt::Transaction")] pub struct Transaction { diff --git a/crates/core/transaction/src/auth_hash.rs b/crates/core/txhash/src/auth_hash.rs similarity index 68% rename from crates/core/transaction/src/auth_hash.rs rename to crates/core/txhash/src/auth_hash.rs index c8bfb88906..39636e74b6 100644 --- a/crates/core/transaction/src/auth_hash.rs +++ b/crates/core/txhash/src/auth_hash.rs @@ -1,7 +1,5 @@ use penumbra_proto::DomainType; -use crate::{Transaction, TransactionBody}; - /// A hash of a transaction's _authorizing data_, describing both its effects on /// the chain state as well as the cryptographic authorization of those effects. /// @@ -33,21 +31,3 @@ impl AuthHash { pub trait AuthorizingData { fn auth_hash(&self) -> AuthHash; } - -impl AuthorizingData for TransactionBody { - fn auth_hash(&self) -> AuthHash { - AuthHash( - blake2b_simd::Params::default() - .hash(&self.encode_to_vec()) - .as_bytes()[0..32] - .try_into() - .expect("blake2b output is always 32 bytes long"), - ) - } -} - -impl AuthorizingData for Transaction { - fn auth_hash(&self) -> AuthHash { - self.transaction_body.auth_hash() - } -} diff --git a/crates/core/txhash/src/lib.rs b/crates/core/txhash/src/lib.rs index 464d7086d5..baf91471f4 100644 --- a/crates/core/txhash/src/lib.rs +++ b/crates/core/txhash/src/lib.rs @@ -1,5 +1,7 @@ mod effect_hash; mod effecting_data; +mod auth_hash; pub use effect_hash::EffectHash; pub use effecting_data::EffectingData; +pub use auth_hash::{AuthHash, AuthorizingData}; From 0846508d0cdaf4d6b1f1388e957ac3194d6e3406 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Sat, 30 Dec 2023 12:46:14 -0500 Subject: [PATCH 16/84] txhash: move transaction::Id to txhash::TransactionId --- Cargo.lock | 1 + crates/bin/pcli/src/network.rs | 2 +- crates/core/transaction/src/lib.rs | 4 +- crates/core/transaction/src/transaction.rs | 8 +- .../src/view/transaction_perspective.rs | 9 +- crates/core/txhash/Cargo.toml | 1 + crates/core/txhash/src/auth_hash.rs | 2 - crates/core/txhash/src/lib.rs | 6 +- .../id.rs => txhash/src/transaction_id.rs} | 36 +- .../gen/penumbra.core.transaction.v1alpha1.rs | 18 +- ...enumbra.core.transaction.v1alpha1.serde.rs | 94 - .../src/gen/penumbra.core.txhash.v1alpha1.rs | 16 + .../penumbra.core.txhash.v1alpha1.serde.rs | 94 + .../proto/src/gen/penumbra.view.v1alpha1.rs | 6 +- .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 340212 -> 340367 bytes crates/view/src/client.rs | 14 +- crates/view/src/service.rs | 9 +- crates/view/src/transaction_info.rs | 6 +- .../transaction/v1alpha1/transaction.pb.go | 1873 ++++++++------- .../core/txhash/v1alpha1/txhash.pb.go | 112 +- .../go/gen/penumbra/view/v1alpha1/view.pb.go | 2049 +++++++++-------- .../transaction/v1alpha1/transaction.proto | 7 +- .../core/txhash/v1alpha1/txhash.proto | 7 + .../penumbra/view/v1alpha1/view.proto | 7 +- 24 files changed, 2201 insertions(+), 2180 deletions(-) rename crates/core/{transaction/src/id.rs => txhash/src/transaction_id.rs} (57%) diff --git a/Cargo.lock b/Cargo.lock index 95847adb07..a633017bb3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5927,6 +5927,7 @@ dependencies = [ "blake2b_simd 0.5.11", "hex", "penumbra-proto", + "serde", ] [[package]] diff --git a/crates/bin/pcli/src/network.rs b/crates/bin/pcli/src/network.rs index 86af3aff24..0f8eef5025 100644 --- a/crates/bin/pcli/src/network.rs +++ b/crates/bin/pcli/src/network.rs @@ -3,7 +3,7 @@ use penumbra_proto::{ util::tendermint_proxy::v1alpha1::tendermint_proxy_service_client::TendermintProxyServiceClient, DomainType, }; -use penumbra_transaction::{plan::TransactionPlan, Id as TransactionId, Transaction}; +use penumbra_transaction::{plan::TransactionPlan, txhash::TransactionId, Transaction}; use penumbra_view::ViewClient; use std::future::Future; use tonic::transport::{Channel, ClientTlsConfig}; diff --git a/crates/core/transaction/src/lib.rs b/crates/core/transaction/src/lib.rs index 3e5194116c..bdbaf0a5f9 100644 --- a/crates/core/transaction/src/lib.rs +++ b/crates/core/transaction/src/lib.rs @@ -18,7 +18,6 @@ mod auth_data; mod detection_data; mod error; -mod id; mod is_action; mod parameters; mod transaction; @@ -34,7 +33,6 @@ pub use action::Action; pub use auth_data::AuthorizationData; pub use detection_data::DetectionData; pub use error::Error; -pub use id::Id; pub use is_action::IsAction; pub use parameters::TransactionParameters; pub use plan::ActionPlan; @@ -42,6 +40,8 @@ pub use transaction::{Transaction, TransactionBody}; pub use view::{ActionView, MemoPlaintextView, MemoView, TransactionPerspective, TransactionView}; pub use witness_data::WitnessData; +pub use penumbra_txhash as txhash; + /// A compatibility wrapper for trait implementations that are temporarily duplicated /// in multiple crates as an orphan rule work around until we finish splitting crates (#2288). pub struct Compat<'a, T>(pub &'a T); diff --git a/crates/core/transaction/src/transaction.rs b/crates/core/transaction/src/transaction.rs index ed05f5e541..545da86a46 100644 --- a/crates/core/transaction/src/transaction.rs +++ b/crates/core/transaction/src/transaction.rs @@ -25,13 +25,13 @@ use penumbra_shielded_pool::{Note, Output, Spend}; use penumbra_stake::{Delegate, Undelegate, UndelegateClaim}; use penumbra_tct as tct; use penumbra_tct::StateCommitment; -use penumbra_txhash::{AuthHash, AuthorizingData, EffectHash, EffectingData}; +use penumbra_txhash::{AuthHash, AuthorizingData, EffectHash, EffectingData, TransactionId}; use serde::{Deserialize, Serialize}; use crate::{ memo::{MemoCiphertext, MemoPlaintext}, view::{action_view::OutputView, MemoView, TransactionBodyView}, - Action, ActionView, DetectionData, Id, IsAction, MemoPlaintextView, TransactionParameters, + Action, ActionView, DetectionData, IsAction, MemoPlaintextView, TransactionParameters, TransactionPerspective, TransactionView, }; @@ -553,14 +553,14 @@ impl Transaction { &self.binding_sig } - pub fn id(&self) -> Id { + pub fn id(&self) -> TransactionId { use sha2::{Digest, Sha256}; let tx_bytes: Vec = self.clone().try_into().expect("can serialize transaction"); let mut id_bytes = [0; 32]; id_bytes[..].copy_from_slice(Sha256::digest(&tx_bytes).as_slice()); - Id(id_bytes) + TransactionId(id_bytes) } /// Compute the binding verification key from the transaction data. diff --git a/crates/core/transaction/src/view/transaction_perspective.rs b/crates/core/transaction/src/view/transaction_perspective.rs index d1fe0c5d8e..b5ecbbc259 100644 --- a/crates/core/transaction/src/view/transaction_perspective.rs +++ b/crates/core/transaction/src/view/transaction_perspective.rs @@ -6,11 +6,10 @@ use penumbra_proto::core::transaction::v1alpha1::{ }; use penumbra_sct::Nullifier; use penumbra_shielded_pool::{note, Note, NoteView}; +use penumbra_txhash::TransactionId; use std::collections::BTreeMap; -use crate::Id; - /// This represents the data to understand an individual transaction without /// disclosing viewing keys. #[derive(Debug, Clone, Default)] @@ -40,7 +39,7 @@ pub struct TransactionPerspective { /// Any relevant denoms for viewed assets. pub denoms: asset::Cache, /// The transaction ID associated with this TransactionPerspective - pub transaction_id: Id, + pub transaction_id: TransactionId, } impl TransactionPerspective { @@ -173,9 +172,9 @@ impl TryFrom for TransactionPerspective { ); } - let transaction_id: crate::Id = match msg.transaction_id { + let transaction_id: penumbra_txhash::TransactionId = match msg.transaction_id { Some(tx_id) => tx_id.try_into()?, - None => Id::default(), + None => TransactionId::default(), }; Ok(Self { diff --git a/crates/core/txhash/Cargo.toml b/crates/core/txhash/Cargo.toml index 93bf497d28..6b0be96e93 100644 --- a/crates/core/txhash/Cargo.toml +++ b/crates/core/txhash/Cargo.toml @@ -9,3 +9,4 @@ penumbra-proto = { path = "../../proto", default-features = false } anyhow = "1" hex = "0.4" blake2b_simd = "0.5" +serde = "1" diff --git a/crates/core/txhash/src/auth_hash.rs b/crates/core/txhash/src/auth_hash.rs index 39636e74b6..4c2188263c 100644 --- a/crates/core/txhash/src/auth_hash.rs +++ b/crates/core/txhash/src/auth_hash.rs @@ -1,5 +1,3 @@ -use penumbra_proto::DomainType; - /// A hash of a transaction's _authorizing data_, describing both its effects on /// the chain state as well as the cryptographic authorization of those effects. /// diff --git a/crates/core/txhash/src/lib.rs b/crates/core/txhash/src/lib.rs index baf91471f4..8bded27042 100644 --- a/crates/core/txhash/src/lib.rs +++ b/crates/core/txhash/src/lib.rs @@ -1,7 +1,9 @@ +mod auth_hash; mod effect_hash; mod effecting_data; -mod auth_hash; +mod transaction_id; +pub use auth_hash::{AuthHash, AuthorizingData}; pub use effect_hash::EffectHash; pub use effecting_data::EffectingData; -pub use auth_hash::{AuthHash, AuthorizingData}; +pub use transaction_id::TransactionId; diff --git a/crates/core/transaction/src/id.rs b/crates/core/txhash/src/transaction_id.rs similarity index 57% rename from crates/core/transaction/src/id.rs rename to crates/core/txhash/src/transaction_id.rs index c04c8c6d7e..e0ac128c7b 100644 --- a/crates/core/transaction/src/id.rs +++ b/crates/core/txhash/src/transaction_id.rs @@ -1,32 +1,32 @@ use std::str::FromStr; -use penumbra_proto::{penumbra::core::transaction::v1alpha1 as pb, DomainType}; +use penumbra_proto::{penumbra::core::txhash::v1alpha1 as pb, DomainType}; use serde::{Deserialize, Serialize}; /// A transaction ID (hash), the Sha256 hash used by Tendermint to identify transactions. #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize, Default)] -#[serde(try_from = "pb::Id", into = "pb::Id")] -pub struct Id(pub [u8; 32]); +#[serde(try_from = "pb::TransactionId", into = "pb::TransactionId")] +pub struct TransactionId(pub [u8; 32]); -impl AsRef<[u8]> for Id { +impl AsRef<[u8]> for TransactionId { fn as_ref(&self) -> &[u8] { &self.0 } } -impl std::fmt::Debug for Id { +impl std::fmt::Debug for TransactionId { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", hex::encode(self.0)) } } -impl std::fmt::Display for Id { +impl std::fmt::Display for TransactionId { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", hex::encode(self.0)) } } -impl FromStr for Id { +impl FromStr for TransactionId { type Err = anyhow::Error; fn from_str(s: &str) -> Result { @@ -36,32 +36,32 @@ impl FromStr for Id { } let mut id = [0u8; 32]; id.copy_from_slice(&bytes); - Ok(Id(id)) + Ok(TransactionId(id)) } } -impl DomainType for Id { - type Proto = pb::Id; +impl DomainType for TransactionId { + type Proto = pb::TransactionId; } -impl From for pb::Id { - fn from(id: Id) -> pb::Id { - pb::Id { - hash: id.0.to_vec(), +impl From for pb::TransactionId { + fn from(id: TransactionId) -> pb::TransactionId { + pb::TransactionId { + inner: id.0.to_vec(), } } } -impl TryFrom for Id { +impl TryFrom for TransactionId { type Error = anyhow::Error; - fn try_from(proto: pb::Id) -> anyhow::Result { - let hash = proto.hash; + fn try_from(proto: pb::TransactionId) -> anyhow::Result { + let hash = proto.inner; if hash.len() != 32 { anyhow::bail!("invalid transaction ID length"); } let mut id = [0u8; 32]; id.copy_from_slice(&hash); - Ok(Id(id)) + Ok(TransactionId(id)) } } diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs index a362675375..f76afdc2b2 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs @@ -23,20 +23,6 @@ impl ::prost::Name for Transaction { ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) } } -/// A transaction ID, the Sha256 hash of a transaction. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct Id { - #[prost(bytes = "vec", tag = "1")] - pub hash: ::prost::alloc::vec::Vec, -} -impl ::prost::Name for Id { - const NAME: &'static str = "Id"; - const PACKAGE: &'static str = "penumbra.core.transaction.v1alpha1"; - fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) - } -} /// The body of a transaction. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -226,7 +212,9 @@ pub struct TransactionPerspective { pub denoms: ::prost::alloc::vec::Vec, /// The transaction ID associated with this TransactionPerspective #[prost(message, optional, tag = "6")] - pub transaction_id: ::core::option::Option, + pub transaction_id: ::core::option::Option< + super::super::txhash::v1alpha1::TransactionId, + >, } impl ::prost::Name for TransactionPerspective { const NAME: &'static str = "TransactionPerspective"; diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs index e9a13de4cb..cb1d94f397 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs @@ -1599,100 +1599,6 @@ impl<'de> serde::Deserialize<'de> for DetectionDataPlan { deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.DetectionDataPlan", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for Id { - #[allow(deprecated)] - fn serialize(&self, serializer: S) -> std::result::Result - where - S: serde::Serializer, - { - use serde::ser::SerializeStruct; - let mut len = 0; - if !self.hash.is_empty() { - len += 1; - } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.Id", len)?; - if !self.hash.is_empty() { - #[allow(clippy::needless_borrow)] - struct_ser.serialize_field("hash", pbjson::private::base64::encode(&self.hash).as_str())?; - } - struct_ser.end() - } -} -impl<'de> serde::Deserialize<'de> for Id { - #[allow(deprecated)] - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - const FIELDS: &[&str] = &[ - "hash", - ]; - - #[allow(clippy::enum_variant_names)] - enum GeneratedField { - Hash, - } - impl<'de> serde::Deserialize<'de> for GeneratedField { - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - struct GeneratedVisitor; - - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = GeneratedField; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(formatter, "expected one of: {:?}", &FIELDS) - } - - #[allow(unused_variables)] - fn visit_str(self, value: &str) -> std::result::Result - where - E: serde::de::Error, - { - match value { - "hash" => Ok(GeneratedField::Hash), - _ => Err(serde::de::Error::unknown_field(value, FIELDS)), - } - } - } - deserializer.deserialize_identifier(GeneratedVisitor) - } - } - struct GeneratedVisitor; - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = Id; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.transaction.v1alpha1.Id") - } - - fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, - { - let mut hash__ = None; - while let Some(k) = map_.next_key()? { - match k { - GeneratedField::Hash => { - if hash__.is_some() { - return Err(serde::de::Error::duplicate_field("hash")); - } - hash__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; - } - } - } - Ok(Id { - hash: hash__.unwrap_or_default(), - }) - } - } - deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.Id", FIELDS, GeneratedVisitor) - } -} impl serde::Serialize for MemoCiphertext { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result diff --git a/crates/proto/src/gen/penumbra.core.txhash.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.txhash.v1alpha1.rs index 458eef47bb..431eb9954a 100644 --- a/crates/proto/src/gen/penumbra.core.txhash.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.txhash.v1alpha1.rs @@ -13,3 +13,19 @@ impl ::prost::Name for EffectHash { ::prost::alloc::format!("penumbra.core.txhash.v1alpha1.{}", Self::NAME) } } +/// A transaction ID, the Sha256 hash of a transaction. +/// +/// This is the hash of the plain byte encoding, used by Tendermint. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TransactionId { + #[prost(bytes = "vec", tag = "1")] + pub inner: ::prost::alloc::vec::Vec, +} +impl ::prost::Name for TransactionId { + const NAME: &'static str = "TransactionId"; + const PACKAGE: &'static str = "penumbra.core.txhash.v1alpha1"; + fn full_name() -> ::prost::alloc::string::String { + ::prost::alloc::format!("penumbra.core.txhash.v1alpha1.{}", Self::NAME) + } +} diff --git a/crates/proto/src/gen/penumbra.core.txhash.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.txhash.v1alpha1.serde.rs index 7f0cd38e2e..e73d476268 100644 --- a/crates/proto/src/gen/penumbra.core.txhash.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.txhash.v1alpha1.serde.rs @@ -92,3 +92,97 @@ impl<'de> serde::Deserialize<'de> for EffectHash { deserializer.deserialize_struct("penumbra.core.txhash.v1alpha1.EffectHash", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for TransactionId { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.inner.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.txhash.v1alpha1.TransactionId", len)?; + if !self.inner.is_empty() { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("inner", pbjson::private::base64::encode(&self.inner).as_str())?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for TransactionId { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "inner", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Inner, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "inner" => Ok(GeneratedField::Inner), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = TransactionId; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.txhash.v1alpha1.TransactionId") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut inner__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Inner => { + if inner__.is_some() { + return Err(serde::de::Error::duplicate_field("inner")); + } + inner__ = + Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) + ; + } + } + } + Ok(TransactionId { + inner: inner__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.core.txhash.v1alpha1.TransactionId", FIELDS, GeneratedVisitor) + } +} diff --git a/crates/proto/src/gen/penumbra.view.v1alpha1.rs b/crates/proto/src/gen/penumbra.view.v1alpha1.rs index f887f5dc95..85841435e6 100644 --- a/crates/proto/src/gen/penumbra.view.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.view.v1alpha1.rs @@ -59,7 +59,7 @@ impl ::prost::Name for BroadcastTransactionRequest { pub struct BroadcastTransactionResponse { /// The hash of the transaction that was broadcast. #[prost(message, optional, tag = "1")] - pub id: ::core::option::Option, + pub id: ::core::option::Option, /// The height in which the transaction was detected as included in the chain, if any. /// Will not be included unless await_detection was true. #[prost(uint64, tag = "2")] @@ -991,7 +991,7 @@ impl ::prost::Name for NullifierStatusResponse { pub struct TransactionInfoByHashRequest { /// The transaction hash to query for. #[prost(message, optional, tag = "2")] - pub id: ::core::option::Option, + pub id: ::core::option::Option, } impl ::prost::Name for TransactionInfoByHashRequest { const NAME: &'static str = "TransactionInfoByHashRequest"; @@ -1025,7 +1025,7 @@ pub struct TransactionInfo { pub height: u64, /// The hash of the transaction. #[prost(message, optional, tag = "2")] - pub id: ::core::option::Option, + pub id: ::core::option::Option, /// The transaction data itself. #[prost(message, optional, tag = "3")] pub transaction: ::core::option::Option< diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index 370d1d4432a9d423eb75320cfe6ef0290ad99a21..ff94835c341d886e198f19ddcd04f8c762594de3 100644 GIT binary patch delta 19067 zcmZ{sd7PESmG^Hg_jdQwK*Q5b15JZ1vUbzmG~Er2EV3ztRTf1}Tu_MOC=kRrCXQF4 z#JGW=$)h3=^<&(FMwE$5f<_aU#Ap&<-%+E{(Wnz#NR)&a!+cLIx92nO=k>!M_g8g( zr%s)!r|MLlYCnCeX7hj6TymM(t#_@_FWT&ZHF`~-A;XfMOV=%5ectjj)~{N#`b#Ua zmmW~H$(&s#DWo=+>vi2rEj8JcwfecLZQrQmN@t-Z!aCtW`Rfnw~mMdL(%Pc|m0nA=tCLXGGQj_Y}US@Bf~?@ky0r zeRkQ-Js+2u`^=t)E6o>)+P-IZt$9wVC0Vh*>6cwvZ~9~(t4#9v03kl=BVtx38rd{(h3C)x?iA(V;cIm zM1+Edwz0`{r$DD>NVac+nbM}ThBZW21vw3CNbkWB!5VV-kmM5OXrSTQmya|T(U^fY zT=x!w2HNmGeIpXV{sWSeaD+~6W3D4Bn`n+tMR{ZSpyYhCX&I}QY|TXTwKje;R4uyP z@j=M7RMbXY%mN^i7U%EPC9Y{d$r) z43_k`UDpToqOg5XLqxFJj~JSK8PiQ_$LEgB22VE2Qt9A$rrAui88LlAcKKv8bqc>3 zL_V>^c3g4sZC=dqS2}C9q#+E(${Hr ze5jK7GR-zcBz2?5Mg(nI=eR(_d(-WxP$ll0ZV!v-czDwrhDHc)`iPN%2bf_yLY2&z z88!-vLuU+Yjddb9wmli^x`{_;WfvS}TIidFHOt1{h^uC`9UWNm4bPfACp5-fm~D>? zRe5N$?GX_{n>{odl7}{X{Dh>=HHP3^drV!=hFNRAzH;5_<*UzFd88jrtBVC!8(S}+ zW^UWmptOLRxigLqt(T={o}Ck_%An1&(U)b==C#j^b7lt^sX4ARAiba+XZ>PmbuVbgwMMV^f_5AOGRXC`Dm5qAj=J6rBhOzws<>k1IV;ax zE**~jtwPfYc33c{3QZ>rk9w=nbV6HuFras8PPAP?us5_5OK$27?ZlCBe)NWRV(0ik z>yw(3Vs~40A9yEOzn)m#2i{4|vA=!bokV}V;c044&NeSMeT%aDvF^e=x%Ba+Fi-CM zQm`h4dGfpkp~dRdoMIP+s%mJb*f@gK&`udQH`YNrWx=t5R+E}jOLM6P+NpjneVN8< z;GJ5UOf~RMJ$7;6^-axkJ3XlE3vYR8>FNt@dDFyL2W|P3Y00e;J>*k+X70S~@fl`E zF^|}p<%6BRyex`mX>Txqwd1U?8iUY&R;6DBK+w(_>OW=>+Rq9LV_p`Qp+&tQyqpYy_fZ)tI(qJ(DM|StrlQ{yNjFox*RFoKsRFi{?3%v2AJY zoHjp>NTTDMsne21rvtD$yZvZ0932K7t4lg$0bO0`7f|ZZv3giE*$9pGy3^@^wl=Fc z#PuA0Q@DhfJ(C_@*zbY4+$#Qvqd4n6Kf(+Bwwcl(2sQbFEb4~;y`1OIqBSPKR zM>Pf-RTmV)@D^N%bAk3>A4n>Pd#8fnUBG~f8D**cM(*Fd8M6F-qkMqVS0-kBQ@6RM z0GRPjJtQIozj=iJ)~G|>H(SRD?I>F&BX&`VCsX1g?Y&5q)QyZhG2WpDqx|Z>ieDA|w#`mKt(I za)u*Pd0Dn|wmG%4T>N1#Q+iC0#1dfJqzEBirjD8_@wYTdEOxod){i&eT)9qnH0$+9&o(K-*#IGK zQp`CQnN~>8wq&2oF&DvZ z-)%cz7_hP?F!{uQ{rV?MaYvFCZcw?$voFsx3&*l`+8b1Pn)E_tLIhX1QR&B&aYQiH zH>&dLWP((Sv$kcg&oiAxe$(PM#l|GY0g>FMT00`7#cgW5>>)y=@@8cxhDsTFU~7b~ zcFed4q28 zQF)6Z$nySzUv7m#4jt0LF~676{_SYLjih%S63;hw;;5kmceBH#7IB*d;~M}E-~$rz z1qk(iMabuy?VZ{Ox<3_SK7r9u1bslFK2Ig;19tWtpA2@hvrlRtR1&}qz$C&xP{|15 zJ|N+nrxN%9iQjyyX=-;X0ytku+$S)O2Z0}u5H8e0-K~h>JheKt4|UH9Vn2aRaSZ6J%a5^hPWm?#)a?dJN*TMDC%7zuo*Dr5aw=x^I#57mSMBJ;` z=)Z(@m9oq}nSFhUIl7(SH1VX;hdZ4>B%f46{Bj7Si6<37+(nK^<h^k4mf?9Td;GDV1HR7L2*_58i?pkWDKoQZPeWqKHtiaE7E0U%C z88zwHph%Y7XVj9V$?^2LM_Tx$%Kaug|2VU#TE3WH%2qOw7J5h@U&#LBI5WPT->7^c z?&UxvUx<4-5S1^;UVgD7Qu$Ig<9PFpnLS(|Uy7yy(esk3^s5R`L{*2MKS1=nq!uhp zUe?&wGcEjw%DufuEi=ceYEEPJKP138nl^fhaj#`7PB7EH#BaL)T5JPI8?VKv00{9l zRXfOaA4nUosfNRo6P+F^f3N=MbyxF=rmDTCGn5J+Apo6Rh!B7%`MpF4Gn^8};>~Q$ ziRLJX;`}$2t`5zK^WRi8J|>|S;+qnav^yf`t?aE6O>42Iix1xF?uG1qZ>dTjXizJn zDy`_7{Vo4ao&-sDPLVL@yxqQ`%MdkZ-9Ou0%F~}s?u8rg!-V8=uE`10=Bu*e?xWxSz*>0|@u?7;sc+0*->px-X z=yw(%)PKaC1qk&YG2W=s#2f$Yo?jAg0NEcTR-qQ|KUI_8;DB)d83T?gO~7%94nZ;q zF3@kmK&Y4K5UT*8UZO*+QpH7+-JnCP0)h&R^Gg=D!5eglRj7u$K@+R2anpo=B-*%4&pgJh1y!18W23eULZw6-z&Nn-MQ_yYKHx(Z z>P9_xeo}O85^Y?exvTnG!!owQHLFLgZ&o=~MF_@LIuEkHC~p+npPMAH?T zxMhQERaKhc<7#cY>dwm!p32qsTc??$=!iri6i4q#6mqo=0SvY1xLR{>C5u{>CJMPm zTfY~ApaSFUmMG*J-4=bo{Sy!$Na$0gi9)W`b|IH;GuE7Y?)j@%t-p}e#?IxY0wW|S zq1MM^Kr~&eLns79)3rK;LRAuyY|$YU0zn1FnIb{S79Bz%YN2k?Arz|81SMN_2#`Tg zfguzE!`-SwCODk0SEer_vM%~|^`++oaqvqT%=f>W$Hg3z_I^A@(^P6R9n2_Ta4Ui>vyRIAPf~`Jj z;TE0yLALV@Gr3yE{ub$$j94G()@|9xXPCNne$$EDbU1GVk-Sa!9^hI4qVhIP>PoiL zKGNRp*`yVwwS(W-a(nCqQ0jDfWgyDFal7tSm7I=?)3k7x&fS~sTwzYGmdSLNF0V~m zP??G?_heNoO=AbYQF%{P2}JUq=ocU=?-9S8fXeE$uuJFmWaq9lOKN0R?b76To|W&R zT6FHtez(#*-Og|Nw>u6J5YgSb|8Qp}5S_a<*Hv=!RxSN|IQ!*SOx4S?@G?!i_33NOm z)8AXE(!x_(|GZ?SxbrEUNGHTf$^F`=yR8J%0tL}ZrHj(Br@PHWgeIQ$X5t8mn0}%4 zbFm2*G5tc9%Mej54LqZ5f9Gis>VbZ`0@3}9?%~5WAex`iwUUe#DwWUb(Y7{lrSs2n zi4>u$CiN?0h%nq|FF$*g*>mpi<>($GR>VDlB2p*{LX1bgTaE~N>Z zbVGqXSJvqKwa7J7w_R3bmK%Dra5Fd{`WbJT>;2Ip!%ujdKd_X#yH~Yhvc~b9oR!$j_OuC^^N+lYd;0efXh0t!qKa zo?gf=DA^-P$pxcax)-*jAs399ntauz%Vw|$e&#A@}nYw z{K+#;Oa9HtlUiJ!nfwZ{w_JpHCPy4|>d+G_vF^=6oHRoni{$giOKer&; zgM4uPVV~RIC9(t|f9}MkE|JB0x;A&dPh_#hn6>27aM!O8X#pBMu{yl|vkj=DO`xsU^SCGn0< z^B3hda62MTxMZ=vsQd_*7jw^oF3vhXvn@>*2Sxrt(8WO!2t^m8NUn$6mBA${yXG@{ z>~XSvQb5>siP8nPn*!;|C92GCy+AhCOBBzEBg)qf}3cEH{|`#UPc*%V5ts_;QE z5YBfLL9rNN)529M_ewBAZX>Qzcw6qRuXbkh=6K~vp_D3lv*##cz-BdaRC0l%a6;Ico&Gm_Ve?j{M+F&Cv{g0w zDC&>S_WYQ&<9>XR~v5dfN0vLdiM>QMv8p@)AWZVQyC12mT;b0i!Cp zlDRo13#mob&8n}@tO8MWvpPZ&*J2b`GTRktY;SQnnt)N0+|X=~7l6p3X}c=c_){Sm zRom4Nc?KY=xT4w7J!TcC0!CGmA=(k|S&>E64pr+fuYhRUp@z#oFPgZp*{QU@g9f1q z7&R5;0%xbH^l3o%S_n8{PUwPM;OtcM7Y0>a;Cx@{WudYXRlul9?sLAcDvye_81;QM z)u%74yUzK(T6%oY#C6Use1u8SyQ&AOz)_W4@7$s){qfbh>z!LvIGO=5>J~Lh;vVTA z*E_c=9j9|oGy$U~x$U`CRr=r_S&X_>4TuxDr#VG%ldPMfirb#sl=fE=AXEXPD!Kl- zO;!2>ntN;ntdH%=_0MgRF_PCFR?c2OQ2L(iKmTDz_4$F~I5Usq4CV6W--I8>_Y8V|1q5$Ikil-Ca1w2hn?T@mSL%85aa^)%qLm|q-^dmKN zM0WwiAITDYOlT3jJKJ^0&R#+$EV_U$sL%Jw}3GleLq?=FDxxEd6FV2aMmkBgV14kUge_xVwWoG~eA>@IK;O@^!_Ju ztM7ZyKD1ZqpOvhXm3gm9YC;QcFM1+a$#TfPEoM>@=Yrpup6H$nertN7+e)`NJ=tv~ z7!?#mEB!|Gq$*iS0aiZQZDl?!JVlo4xssW({F9KZP5#Rd5-+M>-*QZTRuRKX28Mn;ln~!{{TQ9}Pz0|GO zy-1<}y<-9qf!}hcUe`b@w)1sepS^1HRqYhTndIIkAyeu!1sL~R>2!Ng!bkRUR-eyz z7GIX^y6;4p`^a8aqr18bAik_7N^mK!@g(v0T8LR>2uS?NJ1ThvM}J;bJlT>Z8^j0$ zn<7N^RW;gQ4Er&7Rq<-8N5b_GL-2c*do!q&0r;SDv! zUy}JDcti1^Sd3)=-cq^$3|htgZz*06idN_RxBdQE%nL*$cKJ@1m0FW zZE&`Tpo@pFZCoeNDFdQ_sHW<>?pT!aM32UGqL7%YxENb-$>(9Jap%&3}AjWZ|p$QCuKF0S+>H{&x_etsl zF~%oHeNg2-4;IPBeo%3U5{pPROS&sWygn@r^ltNM>AwfJwTUo(`+M{o3EnSM?pxtT zRdPIE$oQXyT9UM>J(TS$&!0W^Q0$=3+(R<+mpBRvHfTMz?&xfPdA=?C zaYg>HA_YE7?&UVi4SKMDvH--C4VotlGK3_7FVnfpgDH|Tx=e@p=F+?yb%=UEOmCp~ zIS|>6dWetsfoR>RNBbzJN>8Qs+gke|$me;1KCS_}+WMFY6^p*D*^iFJA~GUZ>fF^? zmgE-}uatXraktBcT*a>LCO?Ql1jZzW7;{y;toPZEtK$7Qxrj|VcWvmRBqKIy_qBy& z#AY2nDW8r2db@x!b2e+D1^ME9K4P;bRuIpTR@ka@*9WzdSJ)aom&zbsr+K3)JP@7( z`eZ*4+3R#TDgf#Ib(%kUK`YBv;d?rFgV$PED31DGu(sgBs7!13ghUXPndX9sRs^yd zXPO(L08yK1uB;|tED4Kkl4fe}k?*P^+tb(mwS>!6Y|l>Xmv8CtxeC%de%AP0#daMI zS3Xy=|4+p^Po=TB?rHzP!9$7hRtuHiNv zPO(1M;8HtWqxe+A?b-W1^QSkH)QJ@7{O!8Je^R6)=+N!@um(arq0rkqvI~0U7qr~L zQvl~_3ZdM=VJku?cj&&g$x4jwn-=cTxgTbK>6KqmMP_H9^MSjXzt8)?U(DYZec&(V z?~6Y07xVXt4_Z)Hn-(6>xqr`|smeE3J)q0$<#x>0%FsWU+1~lq<_BX}D8#M@b%lQ? z0>rKdHSa{kZM9k?-7T6C0p1hUufOa%@b{V zqSp|Fw@18ozr6YAmll4abHC0m>yzJAMH;8Z{ZUdsF?w${JbkPl>U?YVL7J~=roc}hs$KnHf8qr~{+Xn@#z?4q5NF44__;nBmD$EpFLik-`f0q{In>9^SmC|7;KcF{CP=X z$sYstlUsuq{Lu27kMMp&F!P7fOFywqR1^orIU(M!+v#Y+_UMU-k+AG!>L z{EBp0%${WDWiD z)y)+6AdPBQ&qboFeL%=>Yi<&yO9P}!?@E_CitonGPzdGS*cl*{cVlPj(!%>X_g|qi zbx6J+SMNIM%m-TgcSs<50raai5ZMp(NPp4>qV)sq9z<(9FfA7L>D_Rl)J+y|od&*JeZ%!NT| z;egJ4J3G`rKe_h-S@<{0*EC2p9?a$q$Zu&r7{7Q5(R5Ik`Hc#Qrh}SSX>x5hNc#49 zmel2EP5L}e9SX7KbIo6t$Z!KiNDrG4AsRl{$IMC=ISq{d7uhv+`6bO?bT=w`ztCm= zx@(Xd{Vz0sM!DEgP;e;gIWWJp`A|1SzWPJD%wKB_a(9J?B-<;W=^**)H)NXz=EpT} zFkxq)5XuGSW z*P3t;YLJGu82%PTMhiqkK))IRk=rGKHvo+yVJDz>qj81?KI&qIxH>RYI1i5 zt;3MK)r7BZm}s4Jo6-Ic27ssq`m0wU!nc{>{;Uc_?QN!OLUJ4%5dq%JtiDfK=cCWFRFpa-eYS0j0K|g9+|N+lSZT`6@F-P zyMx*hi2g8oXN0KT6`cb@Ezmm$i0rQD93X0UMdyr=o;)DVS=RhO^b3Vj8vO!<@<8;< z2=U8<;+Kx%gV7}vLU}N{1PJB9=#r6K$eG-~2ir#?`EYc}NU?p7(LMfTwF3L9a4D24O&|G znaMp9)HWgdv#7R7)IMdx<^)15(0`&pWS=r4{Yn8u?Nf%UA6c)O#P3g=aGV3Nd;)zC z4s^BkVXXzjeL9Y0lZ@mq+zc=Bn?`>TJp_dLi|8RB#9zem9Gw=PGr3=eu8c_%ZB6OY^Q9T3VN z49QvfBaBu-Z)azW$j@zg+wkYLvSU$5^KYAW|2IxR5i--JCwnBSX_c-2o$U1y`5zbG zF(D$Q5Y9U$TpI%6ykp$8A&*Sc!h0t7LGaEPB;Sj(YK(a2eWU$f|ACmRKtIWV$i8nv z>JW(5_f1I4wh>cr^YTFR~lPUKZyf#t0FRBHh7U?Wa*K2(3V`6^QJoQ7aIwpL(q`t!q;eL|_!u`x}D>WC3 zI=FW;xhu2d8}oCj4jPW?5~g*CF`s9<8VS=rk6R6eDEd5ZH9!=7E?bQx$vVV_FS7nk z`O(c^Fl*f`qEJdrvtQhRP`;4G?PNz`t{%$1)|5ZB`B03FI^0}6WWq@e2<4FBq&Cb^ zKpV0zn(`x>H`uU*cDT8^!GYLS6* zspUPr#U~ec!dp@e;qC-eT8l93>3*pUtw{w%%9G*aJ9`{ zZ+*boiSnzt;C4GjrwrLOHiS?h>;d{H0f_81HiS?>v|i)2THERFZ8zDF4Cr+82k6h4 zK)9Q1_^N?$H(B>p3zsq6Y{Lc*!gE0HWgyhevHw7*o2CD!gVPEW&LEU1t|LZgmRG^<`K&V^nSRbVVp>DBLr-f!QajOmY$DKM4EP|uS zGRj-y#Go4PR+$*yWZJo|+sX1W0q9Tjo$h7Ab#dr`P_K(aH;(H@o7)zKZXAt#&l3L5 z#S!DQW$bRq?r+V{Z@wY=eViM!8!T@CW%2+~cY~cg#cfaH#IrYLjbrk2iZ|I1a#ARz zw$UGhflzL;?(d7W9iJAq+uY7z!FVLM+Yq^qm&vokhVwm$egQ|imVwCbu%rCB9EjE( Rc6`_Ag|+L}tY4$r{~P6kt|R~e delta 18948 zcmZvkd7M?nnfGrk_tJeD=;qLD&DPM+KsUY7-RvNUEP^0gP<&lbz{re32pY}eTr{{~ z5Jg8$G(wOVj2bs$B#uci8ck%xXmp%7iCbbMaf@q49YfylQ_Jmq=6(O+bAPAm_p7I# zs#EoxdaAkR57i&OTD^ITx?kV3LBFiC`!?te$^1X6q>$QNu3NU`3;Lx4pKR23@3cRD zR3+IN_t?$@uaud)Oum1jk6)90VVkW!u&ui}nyBo+H~N`FYQVyz=lNeebN!|>SD(Lb z!}>GUt?6H=Rii7$)n~){n-K@TIly!qoZSBTq+6QL<(}5pKhs=&;3wnFB;8|XqOD5p zpxh8u)0s`*sK;lulT0!zNh%U+mCmJRuloa)EjtJJswsFa^j-^vGO4nr%uQU@UNoTaya7XFNP+ROARW&3c zxTA&*Pc|z@1~uxMnoZezYfN=^XtG(;sGs>WiukMr7ITrn$nAJ}+Lt#lzC+b0gC4v(N*G2?uV%>=3|6r+2?bO^c z*#*xuX_VkLeP7MTWdeiub(4IbNaxxL^ zd}@!)os*q9-E?G|@6op5*s`8fvo>FrOYJQEdE-bRBxX@|jFd^kv$LO0H&crIrm5Ms z!Pj$5&2DUsh^A(@ceqKLmmbcs6GD;9kvX<8A}Jd?E+S}iI>!eZKAUUDgd%a;Tst(P z74YWPj))N6+)<+g4=~Smgd&+1^K7gr13qtLODvO`Wu8L-e!4n=ur3vFFQ&=!t}hUB3woG>Y=ag9-Nv7J-Xqjv6w zFRlIJ`ZL$BUOU;pdwE?fxYF2q0hz^ZGlFOVnZ>haht|8LW{I62in>8tVxup+L0i&( zTr7jOWbW~SR+gHjHWrmZTWX_E%2Zl3OIxQ0UKzZlGiL=}d1{uGc;)bxm3ZYex2!}f zhqkOlOH#AkE(?mRs~|ro^E!dHe8R$525tG`;?ktQb5ccWPO?*KDry&R*tAYo(oNAt z6^NWr#jG}}>ARXh5E^<%ONk2O_H!b<3;*^$A9O6aH6N3lxir?s_*R;yBTx}6v*RzW+x zTpm%Ck+a;l>H?-9@j$*Ml zyw&3u#6ozh7cCCF>eQ?$O{i*kYf2NU8rquDgsO(NX7SQM>yw(Z?Xf|z545vO%U2(0 zXE#oXWhSjMXHTD*>{YCl1On&gF3PHpGrNoOGM-yD#0eH;IXq8$ivcVk=Y@qBg#39G zeklM!J8y)4qd{18URWIqvO2EUet-aotS^bkTDiW$?-Z1&bg)@JxXBp_L}h(zTXH@# zsGwOaH)e}wn=ee~HzFHLBC>LBtcYz(a~s?IxKb01jWcE@4Ne2FDf?`;sYk=0v8kjX ztLUZ*zlu_Z#-@?cWFs^d?M|lw?SgF89Md+VAUl}3prj#d>ID`4ouv$o3r73t3_{}q zf`f%lgEjR+-IP5u$ILAjv@EI@Y9D-n;9XebUttiu3meBK3B%MawO`3ytoUuLEPh`p zt98TFO@`^K+V403-j0n1(>3=xfC=yxm-E^EK_?MvxTNd#8fn zea#K1wqDB-Rq57HQ*7C)+NMSb zajQCJMzTf1r*h`0-Ii@W-fUjPZF z6U>R@*#GP{QSPJznHG6KLCaJw!v1fZ-`M3r$TZ(St$qRkAV%rYIaPL;^ z+rHU~)ZW`Q@reBd`emX*%jCaT5&d~;1=M>L;h(2=Pwjn*_|F#-{|Stfr#sZ*eTon; z6vMqw5d(T|kJRp0#7Dl67*JqigmCvOqQFoJb-yA)^3Cih*;46sLO_4Fn^?o;XIRI5J(W`8%>B z<8Y)c}n)rnxko%e=Qg|qvy4+ketGh&l_E6jqfan}j72Y>w23gtl z52^VJlB>l(-DOWYoc;H5vlSsCLVLJNNEYD3T|%<5A68Qr2O(K;536O%lNI#2M_PDB z<^D5!^mArOZ@zr&GqRIRp@kmO$7i!qE6jv;ek1v8+{=N~d^YaoKqQ})z5HJsk;3P* z9V^UNj_cw2_!Y?X7sj52s`~jl#yjpZ(@*f)8dZvY!RPM-u6HhXWRd0E% zUXs{mHf{72<6g=3pKNB%;y2xYCAI;ijaOn&0EGC8>O0tVA4nUosM=x4N~c5N@0A>I zEuJ7#qNlU)_c1a6x(XpO0K)#gLk{HT)f<9(&Ssg3I=nBw)U1 z<9~=VvU^S?Py@mRM}sBM_@5YPPzv{dVxUnao%`GW6KMExrqGxAI0J~%-(s8rMCora z&ZyGF8Al1!e4qh@3-((G5bn_!XaM0Jjr&-YCeZkM3^YJcfj-UvLj8M;Gk{S49^;HE zO`Ne=hd2WyF$&nP31GOJbqF+oa5w7^XjEwejZ1V0G(b>+eoFyDy+nsC1qk&L9pa2C zO`P#{9RgesR3ICJ#3*36U)PO(X9L3hx(U2?Ikhg)^) z%$LS-9|$Ti&S?ocuG4L?=bSkK>A3_tRhppV z2K~Q}ud=t#H02l}F$kqT`U0YKgAS1o5TzS*h8b&) z1t5~&)8wXP6P09_y(7D7jcMuNH@4gnI{}n3T~-l@vRmAtdsZfA;o{zD;clI~FME59 zIjy%$fxC5C-=rDI-eSwW*=cJ{LkGW+yf;b$sd;bo3lPbB#V;o#S)CT{*SQ~O53M!J zs%2{2ugT^-A#XvoXg-(?KifRk&TsnnU>qbMRUg#->z$cEG#}KQP|0Ciwe;_ytmgBk zE&JW)O?&ZY+8>X|^!cd{+kPLBKd7}|c|kM)9Ox8*)IF#NvC1*FKpHrxo8(;10x5i$ ztuqvg3xR$(DRiafejWgea37WqOCZuWEj+5pZF-CPQuR?8P&uLKYX}j3uJtcMhybSe z=Q`;{aY2g3V5?JjQ4qq+JhSJf?dO?s{O-B2Nh0q6Re{*JOU8hQtdz=+pJU z)!>M$RD%vYF0X*MQl*6_wEp*!mD1lQbRwM)Dbnb$1`I0nK#5eI@%UTuPr} z7y?&15A;g`g|3wRu8cYmtDd^zN9)XiAFZ>e&r-J^=y#X>7oAm56z7S_ zpsei=wmN(FK3m>{m58ji`p2wx>wddph+2_d@w6Qp%Jn~#XD>c&SF7JYcp&P35!VyR+Iq+FN_HCU5CP7jVRY+<6Cn_eXoK>N$Xezm~)nWSW?P*@`2! zt#M$%CBEeuC*cEoxbs~>oXid!*`93UO#^ZqJ2cyW#BQHBw2rlY8YU#u92-!d z4gIq{W>S5jI@C9?>-#iB1iQY|B_UwTxqAK7rOAJ5N9QcP`9St(`(<@zbD>9IklHuR zJzatThMb}|k8V)T>zj)8TBVuxwN<->Q8Q*8X6%DIZYZF-!QGDUrzmL zC4I?1PD6jP(xzYlHma@mb?Lwx!|t zg1c#eY7gok-_PYl1X2I^NlTK`U40UZ3$rcn*i{o3mTc-t{e>l)B-^-fjLYM~mi*$v z))~p!j!k}XaW?2L_MC>rrPeB8FD|tv3B|><=IfJCT$bG}^_P|E6K0uZrTUUdTtXC3*(mDz3Y+BFR;OH(w3y|Oe# zC2hEpDN1ZY-$)ytnsvTsr!<^e7#PNXR;9mEH87Elylj z(yyles*=9s5LZobSuxm>HC#3Qb4jCPlQmqOEqUKIHLotj_q-46)dO4xjQYf9X7#j_ zl2xvLUowgMjGATHuy5J{*<UCHVFFmv6cV?vkv!Cp7x0`)(yGyeZGo4#cUvNCg(eDdEJuOQ}+0WcFD1uw9iuVjQX3J{p|(6o^G0ToNJdY=u5dT`*x+) zm&%5@7)$n5b5XYPBilObB2rw^lG{nmMWf}Q(;?cuh>z?FA`PA9zna_3iH9WqWQG4~ zS)I#ox%*8QXHR})n;R|;LjEq(#X$&!(8UOq?lKj#k$<&|mrFAo3$TV3b-^_XLc7?_ zy{u9Ov&gj|33g0cxK!n?#0JSu$@$Ess%(V2Gb7iE>=vc#Yud7fqw<5Y^FFc_*$02M zeVTddvqIE?vPBK`Cxq_G5pcxF~fSI(s5_7Ew!nvd=5CX#Pn&0Q5D+g9%51t4nM6y1~STH;l^ zJ=^xNJ+5hcJjdjrJXOQ}rydZ>b~SoTa-pN}9k3(&+sF3HO{C+-xIja^##7bck9&Yn zcF19w9NAex*Jt1P#LjIZ^X7fQLnzm);iH3soUdFjXESW7P&i-Nnf3eB9@9k1&7a`$ z5Xw$9#D9GQq3l!*W0P7(A&9*(`}(JLc(Iggv+jI_T$>MwfGFIkxbY_O5fFtN)gW2@ zrBPz3n^cIPLD&HFp%u`ThSND9N;j#hK0!&&S8h`MW!hNonaBalx0oEEv>Q^uC?&@& z---!9>LT?m)yJnxfk=Hz)k#KLjN-WEW<`G5TU>?`Fe=IE%gym{kGd$`tcunC+YgM? z&1$&h_eF~1mt9?BR*n=fN=epdS3EqWE>gQxUw<$KL}{0*mwjH8IE*0`=?|7cC;_8V zQ4VKzs|ugmqZp~(YSR4B1v#AAtrngbq&S@Uw$dks!V08-QA*BgzO5>biKQrgTg~t} z3G0q(zO9z82ud8)>`{7bQuMCsjubdb$)5d!Pi2N^+8Oi>mP9J9RPY7BwJF_Nog1 z(MBm!d)1)Wt{m;`l`N24q|SW^xd#Z|rs_wr4|pOKZYMKS(|E&)`M%lmqjvaG@Q@NgmV(>W(E6?i zDBQ02P?b+9SrH3&Dt&)QNrS0>r=oD7Ye1HKdsp_$qxQshGK$eMx9XEbELp|_bng<& z<_97|_hj?`Zck{xM{zw+KIM>iYtucdc5K%Ji1)~y2=5Ce2g3JdPyF33Y9}KYyUt?- z?^7d2m58z`-6yGwIiW@H4{n&BpSO&ZUi5%+%hV6l(5?n$p(4xI8a%)m)en{aw~_~> zogb>CcXB^BjWJm^EBoLLf6PBnBz+c}ciR;iv(XcRJ#NS1!Q?4Hm#ya^rGHw|mF4mw zmB?KHk#*b8kL9@9dj`x@;=!P<2QYrD21ggL;fa%fEKZIZ)cA><*+&ien&d%4*8^9h zv7_q&5Eiz@LSZw zT~@kH>StY6f|1}sw2}w3`ZHCsk_TA%vo0(1oLP{f2T3l#+Fxc9 zP5!N=zwB}U(|!L3-bBOb{@r<Sjy;zh$mctY&q?OoccPnn$DUJTCw4uc_2<+Si7Mr4a^W{B_g^7)ks{>vz{Uuv`+^$lkAeLdyr8(2)jcUn@}=-Qm3t}3$^iUMarIjkU+4Z8 z&M_#HF!jX_~2E=C1$zH#%BJS%GJ1VQa0K zWMdQO_zPV?7Zeo*Q~5}Yih#6th_aZ`HYPWaBFGClj4(JmVKAU`1JdpR<H)J(r5- zuG3sS6&{G?0O-^BKdzR+}QOgfPApnJFKa{nFy>CdftXf0u# z@aXKmEUnBhYTieV-#MCxQ1j1c*bdv)$Wwz?|cR7nUGA@b$kBaj_iL_xh`-#){r%#vRqgy{M&I8>l-}PTz2?vD?~h*VE4_a}ymnU0 z16>s9{R7cq)S;~h#9{Z!J&t~9;U_xxR5mot-&6S$T~_V>z^I>e|6ulFnxE4|s>u71 zhbSG?-Kw1*fhZl++(+g7$@Y_G9?2H>&d+OlBzla8@>CD;-?u<0k4XATZV~qrdmqal z>z!ZQ{8(H;cnIY&9d=tFl*cr??X_|g(of)_?BweFbxnujtHeV%hxEXPV3~y8ha`z5 z)489V5ghi@ncqz3!(H}C9C|p8D5Ve&%ZSdwH~rJXGdlNQ*_Zp|XIDO>i4{2Fw*AF7 z&t`}FK&rl}L%cRnWZ%+yzLNzZ3-mfb z>b|8rXU9@x-_rB^t=fUolee{A6bj|b1L$v^Q0PjF6Z{2AFxfHOm zqCr%BSBI!(kXZDd)-#}Th2pNKi1v+wgg1=W6kX{IiedZ{roih zZcTpf)KB9S;vsf@s`>K}nE*hkq({z*5QR_moVm#or@(ypEE_#AzpUxAu0}=oGu_P} zZ4Gua;WN#jK`wO^1de9k8<=0-bhL{i@BC5S%^zV6cK5E1O72!((!ui1Z_dUH;w9Z| z!UD!aD4R_P<$&mJHiU9yiJ-93UYczil%LvkX%|I4KQ1-h{B}bfD3=;mPdOGHEYo>Q z_R*mHam`!0DDr8s#dM3_kQ2WxhKN{(Wk_1M(&VnnZW@rElHW1=KA9Vmx-D*bo8#+K#w;KNHW*(|T30|_d2IuFWbG2dPk$GOr-%FU>4&zUx zYaw4_!q-l%G<2;Ae}@91A)t@ofYiO#4EJ9VKpMK%aEx&rs>4$IuO>IJW@7fW@vIaGCNJUgD_m0%wpd_Gzs)?ERedH30Hl9G?~S|)p5uv zeH)maHZE*ufFf+HRx$^`xtmw6@!X zZ_klw;TDs-EvSy9<}D_?j3Y&L>RzM$-G3mmK!4&2r1D#cFRP$ETfQUc-KDw9%H&yliv?!)w~tuEhK1kxthA9MrZ?lU18 z1H#>B!cI`17H&7WJ409Msd>8z-zN3al{-v0l?R~;^k>vS>fT}c`Uwm~^$wZ9t7Kx0 zN(*mG?;T&6u?CpvnC>$c~}vgEA*&B*%#CLs@fOzN7e1G?ItZ zc_VvWE-jaNR(|9*+)&-w?N1O{c8%O?xSXOn{x#a*+&hhJ+gW=io1Vq!nYiV)fDJM zN1!Y9EAIfQ4EN`8BpYQUA1{q0kaod-B!Q40k4^%@eLRlj*tGD3$^Coi%~)za5vSu= z>CGX-|CS)z5(txk-XtJ(51DS>XFyaB8Tk(r#7j+S;jqa)9b}uRdf1TAlaXu^*_?+QCG?Cp4Kv*w|cRY(3@N)K@QTgVkm*a$MaRdJ{ zf1KzB5D4XEL$X%>!lFgctJ%>}`323d8vcG(2APL6|Eg)99-&k+GmlLUNW{}3VZk4= z3rFW4EdIfS_?3rn{$RqfArQ_Vj5{{uN@-en-Q@lhywgg}*W>(Z74IC09Rx9JfquFH zse8nP6e1ASBPOJ0+jt4zFuAvaY#UYIFl9cI*Cw)WMp+QDKraiV?we5-i0qqDc3fI` z$K>7(s^h5njtM6v<3#l@jEi&3I9(K3u%AzqQu!~YuMYx%$o?hH-S)KbzR7(QWZS9v zeq1ryMfQUz3qlp>Re{v~AgTgU{lKdpXKlN@*B{2A1HlFQ7!c@6hxuI_2=_z7`P2g5 zrVh^COm1uTUPFF<<;RAvb_wA+#F$UB`Hh5dpT>QMhX{Qd_Z=WYpUS=?$+8Zy;j`=q zjrp-npP6vt!$Wy$n*2%!gz}lJbf-BAbMTq-Qs0p8~KqyBIUvncJ z1++Q)=GgqGrp-32ryXvtZnj}P1xh7LD{=w1L#FDb*;`}tQ<^R%LF%ieCya}C3W zNR(n%-rzr+fsk*s?yrcooxsI+o7)|1nLy2(Z3t*5$TZqz!-)Wh9s)-@8-Uc^Wykn0 Wc_6C0?1YJD6~6Gr4d-uA?f(} Pin> + Send + 'static>>; /// Queries for transactions in a range of block heights @@ -183,7 +184,7 @@ pub trait ViewClient { &mut self, transaction: Transaction, await_detection: bool, - ) -> Pin> + Send + 'static>>; + ) -> Pin> + Send + 'static>>; /// Return unspent notes, grouped by address index and then by asset id. #[instrument(skip(self, wallet_id))] @@ -753,7 +754,7 @@ where fn transaction_info_by_hash( &mut self, - id: penumbra_transaction::Id, + id: TransactionId, ) -> Pin> + Send + 'static>> { let mut self2 = self.clone(); async move { @@ -861,8 +862,7 @@ where &mut self, transaction: Transaction, await_detection: bool, - ) -> Pin> + Send + 'static>> - { + ) -> Pin> + Send + 'static>> { let mut self2 = self.clone(); async move { let rsp = ViewProtocolServiceClient::broadcast_transaction( diff --git a/crates/view/src/service.rs b/crates/view/src/service.rs index 2b414bf92b..33d65dec5d 100644 --- a/crates/view/src/service.rs +++ b/crates/view/src/service.rs @@ -52,7 +52,8 @@ use penumbra_proto::{ use penumbra_stake::rate::RateData; use penumbra_tct::{Proof, StateCommitment}; use penumbra_transaction::{ - plan::TransactionPlan, AuthorizationData, Transaction, TransactionPerspective, WitnessData, + plan::TransactionPlan, txhash::TransactionId, AuthorizationData, Transaction, + TransactionPerspective, WitnessData, }; use crate::{Planner, Storage, Worker}; @@ -173,7 +174,7 @@ impl ViewService { &self, transaction: Transaction, await_detection: bool, - ) -> anyhow::Result { + ) -> anyhow::Result { use penumbra_app::ActionHandler; // 1. Pre-check the transaction for (stateless) validity. @@ -718,13 +719,13 @@ impl ViewProtocolService for ViewService { "missing transaction ID in TransactionInfoByHashRequest", ) })? - .hash, + .inner, ) .await .map_err(|_| { tonic::Status::failed_precondition(format!( "Error retrieving transaction by hash {}", - hex::encode(request.id.expect("transaction id is present").hash) + hex::encode(request.id.expect("transaction id is present").inner) )) })?; diff --git a/crates/view/src/transaction_info.rs b/crates/view/src/transaction_info.rs index eb3b83da14..24faf63bd1 100644 --- a/crates/view/src/transaction_info.rs +++ b/crates/view/src/transaction_info.rs @@ -1,11 +1,13 @@ -use penumbra_transaction::{Id, Transaction, TransactionPerspective, TransactionView}; +use penumbra_transaction::{ + txhash::TransactionId, Transaction, TransactionPerspective, TransactionView, +}; #[derive(Debug, Clone)] pub struct TransactionInfo { // The height the transaction was included in a block, if known. pub height: u64, // The hash of the transaction. - pub id: Id, + pub id: TransactionId, // The transaction data itself. pub transaction: Transaction, // The transaction perspective, as seen by this view server. diff --git a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go index 8fb1a6bd7d..ab2683e377 100644 --- a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go +++ b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go @@ -12,11 +12,11 @@ import ( v1alpha12 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/fee/v1alpha1" v1alpha18 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/governance/v1alpha1" v1alpha17 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/ibc/v1alpha1" - v1alpha111 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/sct/v1alpha1" + v1alpha112 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/sct/v1alpha1" v1alpha14 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1" v1alpha16 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/stake/v1alpha1" v1alpha19 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/keys/v1alpha1" - v1alpha112 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/txhash/v1alpha1" + v1alpha111 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/txhash/v1alpha1" v1alpha13 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/decaf377_fmd/v1alpha1" v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1" v1alpha11 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/tct/v1alpha1" @@ -100,54 +100,6 @@ func (x *Transaction) GetAnchor() *v1alpha11.MerkleRoot { return nil } -// A transaction ID, the Sha256 hash of a transaction. -type Id struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` -} - -func (x *Id) Reset() { - *x = Id{} - if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Id) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Id) ProtoMessage() {} - -func (x *Id) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Id.ProtoReflect.Descriptor instead. -func (*Id) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{1} -} - -func (x *Id) GetHash() []byte { - if x != nil { - return x.Hash - } - return nil -} - // The body of a transaction. type TransactionBody struct { state protoimpl.MessageState @@ -169,7 +121,7 @@ type TransactionBody struct { func (x *TransactionBody) Reset() { *x = TransactionBody{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[2] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -182,7 +134,7 @@ func (x *TransactionBody) String() string { func (*TransactionBody) ProtoMessage() {} func (x *TransactionBody) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[2] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -195,7 +147,7 @@ func (x *TransactionBody) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionBody.ProtoReflect.Descriptor instead. func (*TransactionBody) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{2} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{1} } func (x *TransactionBody) GetActions() []*Action { @@ -246,7 +198,7 @@ type TransactionParameters struct { func (x *TransactionParameters) Reset() { *x = TransactionParameters{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[3] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -259,7 +211,7 @@ func (x *TransactionParameters) String() string { func (*TransactionParameters) ProtoMessage() {} func (x *TransactionParameters) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[3] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -272,7 +224,7 @@ func (x *TransactionParameters) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionParameters.ProtoReflect.Descriptor instead. func (*TransactionParameters) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{3} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{2} } func (x *TransactionParameters) GetExpiryHeight() uint64 { @@ -309,7 +261,7 @@ type DetectionData struct { func (x *DetectionData) Reset() { *x = DetectionData{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[4] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -322,7 +274,7 @@ func (x *DetectionData) String() string { func (*DetectionData) ProtoMessage() {} func (x *DetectionData) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[4] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -335,7 +287,7 @@ func (x *DetectionData) ProtoReflect() protoreflect.Message { // Deprecated: Use DetectionData.ProtoReflect.Descriptor instead. func (*DetectionData) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{4} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{3} } func (x *DetectionData) GetFmdClues() []*v1alpha13.Clue { @@ -381,7 +333,7 @@ type Action struct { func (x *Action) Reset() { *x = Action{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[5] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -394,7 +346,7 @@ func (x *Action) String() string { func (*Action) ProtoMessage() {} func (x *Action) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[5] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -407,7 +359,7 @@ func (x *Action) ProtoReflect() protoreflect.Message { // Deprecated: Use Action.ProtoReflect.Descriptor instead. func (*Action) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{5} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{4} } func (m *Action) GetAction() isAction_Action { @@ -729,13 +681,13 @@ type TransactionPerspective struct { // Any relevant denoms for viewed assets. Denoms []*v1alpha110.DenomMetadata `protobuf:"bytes,5,rep,name=denoms,proto3" json:"denoms,omitempty"` // The transaction ID associated with this TransactionPerspective - TransactionId *Id `protobuf:"bytes,6,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + TransactionId *v1alpha111.TransactionId `protobuf:"bytes,6,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` } func (x *TransactionPerspective) Reset() { *x = TransactionPerspective{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[6] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -748,7 +700,7 @@ func (x *TransactionPerspective) String() string { func (*TransactionPerspective) ProtoMessage() {} func (x *TransactionPerspective) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[6] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -761,7 +713,7 @@ func (x *TransactionPerspective) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionPerspective.ProtoReflect.Descriptor instead. func (*TransactionPerspective) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{6} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{5} } func (x *TransactionPerspective) GetPayloadKeys() []*PayloadKeyWithCommitment { @@ -799,7 +751,7 @@ func (x *TransactionPerspective) GetDenoms() []*v1alpha110.DenomMetadata { return nil } -func (x *TransactionPerspective) GetTransactionId() *Id { +func (x *TransactionPerspective) GetTransactionId() *v1alpha111.TransactionId { if x != nil { return x.TransactionId } @@ -818,7 +770,7 @@ type PayloadKeyWithCommitment struct { func (x *PayloadKeyWithCommitment) Reset() { *x = PayloadKeyWithCommitment{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[7] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -831,7 +783,7 @@ func (x *PayloadKeyWithCommitment) String() string { func (*PayloadKeyWithCommitment) ProtoMessage() {} func (x *PayloadKeyWithCommitment) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[7] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -844,7 +796,7 @@ func (x *PayloadKeyWithCommitment) ProtoReflect() protoreflect.Message { // Deprecated: Use PayloadKeyWithCommitment.ProtoReflect.Descriptor instead. func (*PayloadKeyWithCommitment) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{7} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{6} } func (x *PayloadKeyWithCommitment) GetPayloadKey() *v1alpha19.PayloadKey { @@ -866,14 +818,14 @@ type NullifierWithNote struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Nullifier *v1alpha111.Nullifier `protobuf:"bytes,1,opt,name=nullifier,proto3" json:"nullifier,omitempty"` + Nullifier *v1alpha112.Nullifier `protobuf:"bytes,1,opt,name=nullifier,proto3" json:"nullifier,omitempty"` Note *v1alpha14.Note `protobuf:"bytes,2,opt,name=note,proto3" json:"note,omitempty"` } func (x *NullifierWithNote) Reset() { *x = NullifierWithNote{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[8] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -886,7 +838,7 @@ func (x *NullifierWithNote) String() string { func (*NullifierWithNote) ProtoMessage() {} func (x *NullifierWithNote) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[8] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -899,10 +851,10 @@ func (x *NullifierWithNote) ProtoReflect() protoreflect.Message { // Deprecated: Use NullifierWithNote.ProtoReflect.Descriptor instead. func (*NullifierWithNote) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{8} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{7} } -func (x *NullifierWithNote) GetNullifier() *v1alpha111.Nullifier { +func (x *NullifierWithNote) GetNullifier() *v1alpha112.Nullifier { if x != nil { return x.Nullifier } @@ -934,7 +886,7 @@ type TransactionView struct { func (x *TransactionView) Reset() { *x = TransactionView{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[9] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -947,7 +899,7 @@ func (x *TransactionView) String() string { func (*TransactionView) ProtoMessage() {} func (x *TransactionView) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[9] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -960,7 +912,7 @@ func (x *TransactionView) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionView.ProtoReflect.Descriptor instead. func (*TransactionView) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{9} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{8} } func (x *TransactionView) GetBodyView() *TransactionBodyView { @@ -1004,7 +956,7 @@ type TransactionBodyView struct { func (x *TransactionBodyView) Reset() { *x = TransactionBodyView{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[10] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1017,7 +969,7 @@ func (x *TransactionBodyView) String() string { func (*TransactionBodyView) ProtoMessage() {} func (x *TransactionBodyView) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[10] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1030,7 +982,7 @@ func (x *TransactionBodyView) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionBodyView.ProtoReflect.Descriptor instead. func (*TransactionBodyView) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{10} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{9} } func (x *TransactionBodyView) GetActionViews() []*ActionView { @@ -1097,7 +1049,7 @@ type ActionView struct { func (x *ActionView) Reset() { *x = ActionView{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[11] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1110,7 +1062,7 @@ func (x *ActionView) String() string { func (*ActionView) ProtoMessage() {} func (x *ActionView) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[11] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1123,7 +1075,7 @@ func (x *ActionView) ProtoReflect() protoreflect.Message { // Deprecated: Use ActionView.ProtoReflect.Descriptor instead. func (*ActionView) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{11} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{10} } func (m *ActionView) GetActionView() isActionView_ActionView { @@ -1437,7 +1389,7 @@ type AuthorizationData struct { unknownFields protoimpl.UnknownFields // The computed auth hash for the approved transaction plan. - EffectHash *v1alpha112.EffectHash `protobuf:"bytes,1,opt,name=effect_hash,json=effectHash,proto3" json:"effect_hash,omitempty"` + EffectHash *v1alpha111.EffectHash `protobuf:"bytes,1,opt,name=effect_hash,json=effectHash,proto3" json:"effect_hash,omitempty"` // The required spend authorizations, returned in the same order as the // Spend actions in the original request. SpendAuths []*v1alpha1.SpendAuthSignature `protobuf:"bytes,2,rep,name=spend_auths,json=spendAuths,proto3" json:"spend_auths,omitempty"` @@ -1449,7 +1401,7 @@ type AuthorizationData struct { func (x *AuthorizationData) Reset() { *x = AuthorizationData{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[12] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1462,7 +1414,7 @@ func (x *AuthorizationData) String() string { func (*AuthorizationData) ProtoMessage() {} func (x *AuthorizationData) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[12] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1475,10 +1427,10 @@ func (x *AuthorizationData) ProtoReflect() protoreflect.Message { // Deprecated: Use AuthorizationData.ProtoReflect.Descriptor instead. func (*AuthorizationData) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{12} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{11} } -func (x *AuthorizationData) GetEffectHash() *v1alpha112.EffectHash { +func (x *AuthorizationData) GetEffectHash() *v1alpha111.EffectHash { if x != nil { return x.EffectHash } @@ -1515,7 +1467,7 @@ type WitnessData struct { func (x *WitnessData) Reset() { *x = WitnessData{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[13] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1528,7 +1480,7 @@ func (x *WitnessData) String() string { func (*WitnessData) ProtoMessage() {} func (x *WitnessData) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[13] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1541,7 +1493,7 @@ func (x *WitnessData) ProtoReflect() protoreflect.Message { // Deprecated: Use WitnessData.ProtoReflect.Descriptor instead. func (*WitnessData) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{13} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{12} } func (x *WitnessData) GetAnchor() *v1alpha11.MerkleRoot { @@ -1581,7 +1533,7 @@ type TransactionPlan struct { func (x *TransactionPlan) Reset() { *x = TransactionPlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[14] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1594,7 +1546,7 @@ func (x *TransactionPlan) String() string { func (*TransactionPlan) ProtoMessage() {} func (x *TransactionPlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[14] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1607,7 +1559,7 @@ func (x *TransactionPlan) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionPlan.ProtoReflect.Descriptor instead. func (*TransactionPlan) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{14} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{13} } func (x *TransactionPlan) GetActions() []*ActionPlan { @@ -1649,7 +1601,7 @@ type DetectionDataPlan struct { func (x *DetectionDataPlan) Reset() { *x = DetectionDataPlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[15] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1662,7 +1614,7 @@ func (x *DetectionDataPlan) String() string { func (*DetectionDataPlan) ProtoMessage() {} func (x *DetectionDataPlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[15] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1675,7 +1627,7 @@ func (x *DetectionDataPlan) ProtoReflect() protoreflect.Message { // Deprecated: Use DetectionDataPlan.ProtoReflect.Descriptor instead. func (*DetectionDataPlan) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{15} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{14} } func (x *DetectionDataPlan) GetCluePlans() []*CluePlan { @@ -1724,7 +1676,7 @@ type ActionPlan struct { func (x *ActionPlan) Reset() { *x = ActionPlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[16] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1737,7 +1689,7 @@ func (x *ActionPlan) String() string { func (*ActionPlan) ProtoMessage() {} func (x *ActionPlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[16] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1750,7 +1702,7 @@ func (x *ActionPlan) ProtoReflect() protoreflect.Message { // Deprecated: Use ActionPlan.ProtoReflect.Descriptor instead. func (*ActionPlan) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{16} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{15} } func (m *ActionPlan) GetAction() isActionPlan_Action { @@ -2076,7 +2028,7 @@ type CluePlan struct { func (x *CluePlan) Reset() { *x = CluePlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2089,7 +2041,7 @@ func (x *CluePlan) String() string { func (*CluePlan) ProtoMessage() {} func (x *CluePlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2102,7 +2054,7 @@ func (x *CluePlan) ProtoReflect() protoreflect.Message { // Deprecated: Use CluePlan.ProtoReflect.Descriptor instead. func (*CluePlan) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{17} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{16} } func (x *CluePlan) GetAddress() *v1alpha19.Address { @@ -2141,7 +2093,7 @@ type MemoPlan struct { func (x *MemoPlan) Reset() { *x = MemoPlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2154,7 +2106,7 @@ func (x *MemoPlan) String() string { func (*MemoPlan) ProtoMessage() {} func (x *MemoPlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2167,7 +2119,7 @@ func (x *MemoPlan) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoPlan.ProtoReflect.Descriptor instead. func (*MemoPlan) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{18} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{17} } func (x *MemoPlan) GetPlaintext() *MemoPlaintext { @@ -2197,7 +2149,7 @@ type MemoCiphertext struct { func (x *MemoCiphertext) Reset() { *x = MemoCiphertext{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2210,7 +2162,7 @@ func (x *MemoCiphertext) String() string { func (*MemoCiphertext) ProtoMessage() {} func (x *MemoCiphertext) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2223,7 +2175,7 @@ func (x *MemoCiphertext) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoCiphertext.ProtoReflect.Descriptor instead. func (*MemoCiphertext) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{19} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{18} } func (x *MemoCiphertext) GetInner() []byte { @@ -2251,7 +2203,7 @@ type MemoPlaintext struct { func (x *MemoPlaintext) Reset() { *x = MemoPlaintext{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2264,7 +2216,7 @@ func (x *MemoPlaintext) String() string { func (*MemoPlaintext) ProtoMessage() {} func (x *MemoPlaintext) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2277,7 +2229,7 @@ func (x *MemoPlaintext) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoPlaintext.ProtoReflect.Descriptor instead. func (*MemoPlaintext) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{20} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{19} } func (x *MemoPlaintext) GetReturnAddress() *v1alpha19.Address { @@ -2306,7 +2258,7 @@ type MemoPlaintextView struct { func (x *MemoPlaintextView) Reset() { *x = MemoPlaintextView{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2319,7 +2271,7 @@ func (x *MemoPlaintextView) String() string { func (*MemoPlaintextView) ProtoMessage() {} func (x *MemoPlaintextView) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2332,7 +2284,7 @@ func (x *MemoPlaintextView) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoPlaintextView.ProtoReflect.Descriptor instead. func (*MemoPlaintextView) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{21} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{20} } func (x *MemoPlaintextView) GetReturnAddress() *v1alpha19.AddressView { @@ -2364,7 +2316,7 @@ type MemoView struct { func (x *MemoView) Reset() { *x = MemoView{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2377,7 +2329,7 @@ func (x *MemoView) String() string { func (*MemoView) ProtoMessage() {} func (x *MemoView) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2390,7 +2342,7 @@ func (x *MemoView) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoView.ProtoReflect.Descriptor instead. func (*MemoView) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{22} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{21} } func (m *MemoView) GetMemoView() isMemoView_MemoView { @@ -2442,7 +2394,7 @@ type MemoView_Visible struct { func (x *MemoView_Visible) Reset() { *x = MemoView_Visible{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2455,7 +2407,7 @@ func (x *MemoView_Visible) String() string { func (*MemoView_Visible) ProtoMessage() {} func (x *MemoView_Visible) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2468,7 +2420,7 @@ func (x *MemoView_Visible) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoView_Visible.ProtoReflect.Descriptor instead. func (*MemoView_Visible) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{22, 0} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{21, 0} } func (x *MemoView_Visible) GetCiphertext() *MemoCiphertext { @@ -2496,7 +2448,7 @@ type MemoView_Opaque struct { func (x *MemoView_Opaque) Reset() { *x = MemoView_Opaque{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2509,7 +2461,7 @@ func (x *MemoView_Opaque) String() string { func (*MemoView_Opaque) ProtoMessage() {} func (x *MemoView_Opaque) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2522,7 +2474,7 @@ func (x *MemoView_Opaque) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoView_Opaque.ProtoReflect.Descriptor instead. func (*MemoView_Opaque) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{22, 1} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{21, 1} } func (x *MemoView_Opaque) GetCiphertext() *MemoCiphertext { @@ -2597,14 +2549,262 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, - 0x6f, 0x72, 0x22, 0x18, 0x0a, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0xeb, 0x02, 0x0a, - 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, - 0x12, 0x44, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x6f, 0x72, 0x22, 0xeb, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x44, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x70, 0x0a, 0x16, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, + 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x46, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, + 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, + 0x22, 0x94, 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, + 0x70, 0x69, 0x72, 0x79, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, + 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, + 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x22, 0x59, 0x0a, 0x0d, 0x44, 0x65, 0x74, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x09, 0x66, 0x6d, 0x64, 0x5f, + 0x63, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, + 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x66, 0x6d, 0x64, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x66, 0x6d, 0x64, 0x43, 0x6c, 0x75, + 0x65, 0x73, 0x22, 0x9a, 0x11, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, + 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, + 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x50, 0x0a, 0x06, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x40, + 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, + 0x12, 0x50, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, + 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, + 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, + 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, + 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, + 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, + 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, + 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, + 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x12, 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x73, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x6d, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, + 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x76, 0x0a, + 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, + 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x79, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, + 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, + 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x6d, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, + 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x9d, 0x04, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x70, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, + 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, + 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x60, 0x0a, 0x10, 0x73, + 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0f, 0x73, 0x70, + 0x65, 0x6e, 0x64, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x57, 0x0a, + 0x0c, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0b, 0x61, 0x64, 0x76, 0x69, 0x63, + 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, + 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x12, 0x53, 0x0a, 0x0e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, + 0xb3, 0x01, 0x0a, 0x18, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, + 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x0b, + 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xac, 0x01, 0x0a, 0x11, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x09, 0x6e, + 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, + 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, + 0x6e, 0x6f, 0x74, 0x65, 0x22, 0x84, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x54, 0x0a, 0x09, 0x62, 0x6f, 0x64, 0x79, + 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, + 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, 0x62, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x59, + 0x0a, 0x0b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, + 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x62, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, + 0x68, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, + 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0xff, 0x02, 0x0a, 0x13, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, + 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, + 0x65, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, @@ -2617,84 +2817,270 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x46, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, - 0x74, 0x65, 0x78, 0x74, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x94, 0x01, 0x0a, 0x15, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x70, - 0x69, 0x72, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, - 0x65, 0x22, 0x59, 0x0a, 0x0d, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x48, 0x0a, 0x09, 0x66, 0x6d, 0x64, 0x5f, 0x63, 0x6c, 0x75, 0x65, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, - 0x5f, 0x66, 0x6d, 0x64, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, - 0x75, 0x65, 0x52, 0x08, 0x66, 0x6d, 0x64, 0x43, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x9a, 0x11, 0x0a, - 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, - 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x50, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, - 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, - 0x61, 0x70, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x50, 0x0a, 0x0a, 0x73, 0x77, - 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, - 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, - 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, - 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, + 0x74, 0x61, 0x12, 0x49, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, + 0x69, 0x65, 0x77, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x22, 0xb7, 0x11, + 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, 0x05, + 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, + 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, + 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, + 0x54, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, + 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x06, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, + 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x56, + 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, + 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, + 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, - 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, - 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, + 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, + 0x65, 0x77, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, + 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, + 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, + 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, + 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, + 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, + 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, + 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x2a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x73, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, + 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x76, 0x0a, 0x15, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x13, 0x63, + 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x12, 0x79, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x64, 0x0a, + 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0xaa, 0x02, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4a, 0x0a, + 0x0b, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0a, 0x65, + 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x5b, 0x0a, 0x0b, 0x73, 0x70, 0x65, + 0x6e, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, + 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, 0x73, 0x70, 0x65, 0x6e, + 0x64, 0x41, 0x75, 0x74, 0x68, 0x73, 0x12, 0x6c, 0x0a, 0x14, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, + 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, + 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x52, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x41, + 0x75, 0x74, 0x68, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x0b, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, + 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x6a, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x15, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, + 0x66, 0x73, 0x22, 0xed, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x48, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x12, 0x5c, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, + 0x6e, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x40, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x04, 0x6d, 0x65, + 0x6d, 0x6f, 0x22, 0x60, 0x0a, 0x11, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, + 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4b, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x65, 0x5f, + 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x65, 0x50, + 0x6c, 0x61, 0x6e, 0x73, 0x22, 0xb2, 0x11, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x6c, 0x61, 0x6e, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, + 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x6c, + 0x61, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, + 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, + 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, + 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x73, + 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, + 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, + 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, + 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, + 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, + 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, + 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, + 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, + 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, + 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, @@ -2703,596 +3089,161 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, - 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, - 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, - 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, - 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, - 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x57, 0x0a, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x61, 0x6c, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, - 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, - 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, - 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, - 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x64, 0x0a, 0x10, - 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, - 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x12, 0x73, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, - 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, - 0x64, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, - 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x76, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x75, - 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, - 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, - 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, - 0x79, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, - 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, - 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, - 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, - 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, - 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, - 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x97, 0x04, 0x0a, 0x16, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, - 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x60, 0x0a, 0x10, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x6e, - 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, - 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x4e, 0x75, 0x6c, - 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x57, 0x0a, 0x0c, 0x61, 0x64, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, - 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, - 0x6f, 0x74, 0x65, 0x52, 0x0b, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x73, - 0x12, 0x4d, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, - 0x77, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, - 0x43, 0x0a, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, - 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x06, 0x64, 0x65, - 0x6e, 0x6f, 0x6d, 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x49, 0x64, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x18, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, - 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x0a, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, - 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xac, 0x01, 0x0a, 0x11, 0x4e, 0x75, - 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x12, - 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x48, - 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, - 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, - 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, 0x84, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x54, 0x0a, 0x09, - 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, 0x62, 0x6f, 0x64, 0x79, 0x56, 0x69, - 0x65, 0x77, 0x12, 0x59, 0x0a, 0x0b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, - 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x52, 0x0a, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, - 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, - 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, - 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, - 0xff, 0x02, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, - 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x49, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, - 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, - 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, - 0x77, 0x22, 0xb7, 0x11, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, - 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, - 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, - 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x48, - 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, - 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, - 0x77, 0x61, 0x70, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, - 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, - 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, - 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, - 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, - 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, - 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, - 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, - 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, - 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, - 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, - 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, - 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, - 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, + 0x48, 0x00, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, 0x59, + 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, + 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, + 0x61, 0x77, 0x12, 0x73, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, - 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, - 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x73, 0x0a, 0x14, 0x63, 0x6f, 0x6d, - 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x6e, - 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, - 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x6d, - 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x76, - 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, - 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, - 0x00, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x79, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, - 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, - 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6d, - 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x12, 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, + 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, + 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, - 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, - 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0xaa, 0x02, 0x0a, 0x11, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x4a, 0x0a, 0x0b, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, - 0x68, 0x52, 0x0a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x5b, 0x0a, - 0x0b, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, - 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, - 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0a, - 0x73, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x73, 0x12, 0x6c, 0x0a, 0x14, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, - 0x68, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, - 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x52, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, - 0x6f, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x0b, 0x57, 0x69, 0x74, - 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, - 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, - 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x6a, 0x0a, 0x17, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, - 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, - 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, - 0x15, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x22, 0xed, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x48, 0x0a, 0x07, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, - 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5c, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, - 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x6e, - 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x60, 0x0a, 0x11, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4b, 0x0a, 0x0a, 0x63, - 0x6c, 0x75, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x09, 0x63, - 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x73, 0x22, 0xb2, 0x11, 0x0a, 0x0a, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, 0x6c, 0x61, - 0x6e, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, - 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, - 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, - 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, - 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, - 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, - 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, - 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, - 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, - 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, - 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x57, 0x0a, 0x0a, 0x77, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x61, 0x6c, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, - 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, - 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, - 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x11, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x50, 0x6c, - 0x61, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x73, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, - 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, + 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, + 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x73, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, + 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, - 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, - 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x12, 0x68, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, + 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x76, 0x0a, 0x15, + 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x73, 0x0a, 0x14, 0x63, - 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x70, - 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, - 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, - 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x70, 0x65, 0x6e, 0x64, - 0x12, 0x76, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, - 0x6f, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x48, 0x00, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, - 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x79, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, - 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, - 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, - 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x87, 0x01, - 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, - 0x65, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, - 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x69, - 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x50, - 0x6c, 0x61, 0x6e, 0x12, 0x4f, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, - 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x26, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, - 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x70, - 0x0a, 0x0d, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, - 0x4b, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, + 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x12, 0x79, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, + 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x42, + 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x87, 0x01, 0x0a, 0x08, 0x43, 0x6c, + 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0d, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, - 0x22, 0x78, 0x0a, 0x11, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x56, 0x69, 0x65, 0x77, 0x12, 0x4f, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, - 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0xcb, 0x03, 0x0a, 0x08, 0x4d, - 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, - 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, - 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, - 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x6f, 0x70, 0x61, - 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, - 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, - 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xb2, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, - 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, - 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x53, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, - 0x65, 0x77, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x5c, 0x0a, - 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, - 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, - 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x6d, - 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x42, 0xcc, 0x02, 0x0a, 0x26, 0x63, 0x6f, 0x6d, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x42, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x65, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, - 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, - 0x03, 0x50, 0x43, 0x54, 0xaa, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, - 0x2e, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x25, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, - 0x3a, 0x3a, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, + 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x69, 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x6e, 0x12, + 0x4f, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x22, 0x26, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, + 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x70, 0x0a, 0x0d, 0x4d, 0x65, + 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x78, 0x0a, 0x11, + 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, + 0x77, 0x12, 0x4f, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, + 0x69, 0x65, 0x77, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0xcb, 0x03, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x56, + 0x69, 0x65, 0x77, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, + 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, + 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, + 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, + 0x61, 0x71, 0x75, 0x65, 0x1a, 0xb2, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, + 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, + 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, + 0x74, 0x65, 0x78, 0x74, 0x12, 0x53, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, + 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x52, 0x09, + 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x5c, 0x0a, 0x06, 0x4f, 0x70, 0x61, + 0x71, 0x75, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, + 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, + 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, + 0x76, 0x69, 0x65, 0x77, 0x42, 0xcc, 0x02, 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, + 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x65, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, + 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x54, + 0xaa, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2e, 0x50, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x25, 0x50, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3307,71 +3258,71 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP() []b return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescData } -var file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes = make([]protoimpl.MessageInfo, 25) +var file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes = make([]protoimpl.MessageInfo, 24) var file_penumbra_core_transaction_v1alpha1_transaction_proto_goTypes = []interface{}{ (*Transaction)(nil), // 0: penumbra.core.transaction.v1alpha1.Transaction - (*Id)(nil), // 1: penumbra.core.transaction.v1alpha1.Id - (*TransactionBody)(nil), // 2: penumbra.core.transaction.v1alpha1.TransactionBody - (*TransactionParameters)(nil), // 3: penumbra.core.transaction.v1alpha1.TransactionParameters - (*DetectionData)(nil), // 4: penumbra.core.transaction.v1alpha1.DetectionData - (*Action)(nil), // 5: penumbra.core.transaction.v1alpha1.Action - (*TransactionPerspective)(nil), // 6: penumbra.core.transaction.v1alpha1.TransactionPerspective - (*PayloadKeyWithCommitment)(nil), // 7: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment - (*NullifierWithNote)(nil), // 8: penumbra.core.transaction.v1alpha1.NullifierWithNote - (*TransactionView)(nil), // 9: penumbra.core.transaction.v1alpha1.TransactionView - (*TransactionBodyView)(nil), // 10: penumbra.core.transaction.v1alpha1.TransactionBodyView - (*ActionView)(nil), // 11: penumbra.core.transaction.v1alpha1.ActionView - (*AuthorizationData)(nil), // 12: penumbra.core.transaction.v1alpha1.AuthorizationData - (*WitnessData)(nil), // 13: penumbra.core.transaction.v1alpha1.WitnessData - (*TransactionPlan)(nil), // 14: penumbra.core.transaction.v1alpha1.TransactionPlan - (*DetectionDataPlan)(nil), // 15: penumbra.core.transaction.v1alpha1.DetectionDataPlan - (*ActionPlan)(nil), // 16: penumbra.core.transaction.v1alpha1.ActionPlan - (*CluePlan)(nil), // 17: penumbra.core.transaction.v1alpha1.CluePlan - (*MemoPlan)(nil), // 18: penumbra.core.transaction.v1alpha1.MemoPlan - (*MemoCiphertext)(nil), // 19: penumbra.core.transaction.v1alpha1.MemoCiphertext - (*MemoPlaintext)(nil), // 20: penumbra.core.transaction.v1alpha1.MemoPlaintext - (*MemoPlaintextView)(nil), // 21: penumbra.core.transaction.v1alpha1.MemoPlaintextView - (*MemoView)(nil), // 22: penumbra.core.transaction.v1alpha1.MemoView - (*MemoView_Visible)(nil), // 23: penumbra.core.transaction.v1alpha1.MemoView.Visible - (*MemoView_Opaque)(nil), // 24: penumbra.core.transaction.v1alpha1.MemoView.Opaque - (*v1alpha1.BindingSignature)(nil), // 25: penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature - (*v1alpha11.MerkleRoot)(nil), // 26: penumbra.crypto.tct.v1alpha1.MerkleRoot - (*v1alpha12.Fee)(nil), // 27: penumbra.core.component.fee.v1alpha1.Fee - (*v1alpha13.Clue)(nil), // 28: penumbra.crypto.decaf377_fmd.v1alpha1.Clue - (*v1alpha14.Spend)(nil), // 29: penumbra.core.component.shielded_pool.v1alpha1.Spend - (*v1alpha14.Output)(nil), // 30: penumbra.core.component.shielded_pool.v1alpha1.Output - (*v1alpha15.Swap)(nil), // 31: penumbra.core.component.dex.v1alpha1.Swap - (*v1alpha15.SwapClaim)(nil), // 32: penumbra.core.component.dex.v1alpha1.SwapClaim - (*v1alpha16.ValidatorDefinition)(nil), // 33: penumbra.core.component.stake.v1alpha1.ValidatorDefinition - (*v1alpha17.IbcRelay)(nil), // 34: penumbra.core.component.ibc.v1alpha1.IbcRelay - (*v1alpha18.ProposalSubmit)(nil), // 35: penumbra.core.component.governance.v1alpha1.ProposalSubmit - (*v1alpha18.ProposalWithdraw)(nil), // 36: penumbra.core.component.governance.v1alpha1.ProposalWithdraw - (*v1alpha18.ValidatorVote)(nil), // 37: penumbra.core.component.governance.v1alpha1.ValidatorVote - (*v1alpha18.DelegatorVote)(nil), // 38: penumbra.core.component.governance.v1alpha1.DelegatorVote - (*v1alpha18.ProposalDepositClaim)(nil), // 39: penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - (*v1alpha15.PositionOpen)(nil), // 40: penumbra.core.component.dex.v1alpha1.PositionOpen - (*v1alpha15.PositionClose)(nil), // 41: penumbra.core.component.dex.v1alpha1.PositionClose - (*v1alpha15.PositionWithdraw)(nil), // 42: penumbra.core.component.dex.v1alpha1.PositionWithdraw - (*v1alpha15.PositionRewardClaim)(nil), // 43: penumbra.core.component.dex.v1alpha1.PositionRewardClaim - (*v1alpha16.Delegate)(nil), // 44: penumbra.core.component.stake.v1alpha1.Delegate - (*v1alpha16.Undelegate)(nil), // 45: penumbra.core.component.stake.v1alpha1.Undelegate - (*v1alpha16.UndelegateClaim)(nil), // 46: penumbra.core.component.stake.v1alpha1.UndelegateClaim - (*v1alpha18.CommunityPoolSpend)(nil), // 47: penumbra.core.component.governance.v1alpha1.CommunityPoolSpend - (*v1alpha18.CommunityPoolOutput)(nil), // 48: penumbra.core.component.governance.v1alpha1.CommunityPoolOutput - (*v1alpha18.CommunityPoolDeposit)(nil), // 49: penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit - (*v1alpha17.Ics20Withdrawal)(nil), // 50: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - (*v1alpha14.Note)(nil), // 51: penumbra.core.component.shielded_pool.v1alpha1.Note - (*v1alpha19.AddressView)(nil), // 52: penumbra.core.keys.v1alpha1.AddressView - (*v1alpha110.DenomMetadata)(nil), // 53: penumbra.core.asset.v1alpha1.DenomMetadata + (*TransactionBody)(nil), // 1: penumbra.core.transaction.v1alpha1.TransactionBody + (*TransactionParameters)(nil), // 2: penumbra.core.transaction.v1alpha1.TransactionParameters + (*DetectionData)(nil), // 3: penumbra.core.transaction.v1alpha1.DetectionData + (*Action)(nil), // 4: penumbra.core.transaction.v1alpha1.Action + (*TransactionPerspective)(nil), // 5: penumbra.core.transaction.v1alpha1.TransactionPerspective + (*PayloadKeyWithCommitment)(nil), // 6: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment + (*NullifierWithNote)(nil), // 7: penumbra.core.transaction.v1alpha1.NullifierWithNote + (*TransactionView)(nil), // 8: penumbra.core.transaction.v1alpha1.TransactionView + (*TransactionBodyView)(nil), // 9: penumbra.core.transaction.v1alpha1.TransactionBodyView + (*ActionView)(nil), // 10: penumbra.core.transaction.v1alpha1.ActionView + (*AuthorizationData)(nil), // 11: penumbra.core.transaction.v1alpha1.AuthorizationData + (*WitnessData)(nil), // 12: penumbra.core.transaction.v1alpha1.WitnessData + (*TransactionPlan)(nil), // 13: penumbra.core.transaction.v1alpha1.TransactionPlan + (*DetectionDataPlan)(nil), // 14: penumbra.core.transaction.v1alpha1.DetectionDataPlan + (*ActionPlan)(nil), // 15: penumbra.core.transaction.v1alpha1.ActionPlan + (*CluePlan)(nil), // 16: penumbra.core.transaction.v1alpha1.CluePlan + (*MemoPlan)(nil), // 17: penumbra.core.transaction.v1alpha1.MemoPlan + (*MemoCiphertext)(nil), // 18: penumbra.core.transaction.v1alpha1.MemoCiphertext + (*MemoPlaintext)(nil), // 19: penumbra.core.transaction.v1alpha1.MemoPlaintext + (*MemoPlaintextView)(nil), // 20: penumbra.core.transaction.v1alpha1.MemoPlaintextView + (*MemoView)(nil), // 21: penumbra.core.transaction.v1alpha1.MemoView + (*MemoView_Visible)(nil), // 22: penumbra.core.transaction.v1alpha1.MemoView.Visible + (*MemoView_Opaque)(nil), // 23: penumbra.core.transaction.v1alpha1.MemoView.Opaque + (*v1alpha1.BindingSignature)(nil), // 24: penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature + (*v1alpha11.MerkleRoot)(nil), // 25: penumbra.crypto.tct.v1alpha1.MerkleRoot + (*v1alpha12.Fee)(nil), // 26: penumbra.core.component.fee.v1alpha1.Fee + (*v1alpha13.Clue)(nil), // 27: penumbra.crypto.decaf377_fmd.v1alpha1.Clue + (*v1alpha14.Spend)(nil), // 28: penumbra.core.component.shielded_pool.v1alpha1.Spend + (*v1alpha14.Output)(nil), // 29: penumbra.core.component.shielded_pool.v1alpha1.Output + (*v1alpha15.Swap)(nil), // 30: penumbra.core.component.dex.v1alpha1.Swap + (*v1alpha15.SwapClaim)(nil), // 31: penumbra.core.component.dex.v1alpha1.SwapClaim + (*v1alpha16.ValidatorDefinition)(nil), // 32: penumbra.core.component.stake.v1alpha1.ValidatorDefinition + (*v1alpha17.IbcRelay)(nil), // 33: penumbra.core.component.ibc.v1alpha1.IbcRelay + (*v1alpha18.ProposalSubmit)(nil), // 34: penumbra.core.component.governance.v1alpha1.ProposalSubmit + (*v1alpha18.ProposalWithdraw)(nil), // 35: penumbra.core.component.governance.v1alpha1.ProposalWithdraw + (*v1alpha18.ValidatorVote)(nil), // 36: penumbra.core.component.governance.v1alpha1.ValidatorVote + (*v1alpha18.DelegatorVote)(nil), // 37: penumbra.core.component.governance.v1alpha1.DelegatorVote + (*v1alpha18.ProposalDepositClaim)(nil), // 38: penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + (*v1alpha15.PositionOpen)(nil), // 39: penumbra.core.component.dex.v1alpha1.PositionOpen + (*v1alpha15.PositionClose)(nil), // 40: penumbra.core.component.dex.v1alpha1.PositionClose + (*v1alpha15.PositionWithdraw)(nil), // 41: penumbra.core.component.dex.v1alpha1.PositionWithdraw + (*v1alpha15.PositionRewardClaim)(nil), // 42: penumbra.core.component.dex.v1alpha1.PositionRewardClaim + (*v1alpha16.Delegate)(nil), // 43: penumbra.core.component.stake.v1alpha1.Delegate + (*v1alpha16.Undelegate)(nil), // 44: penumbra.core.component.stake.v1alpha1.Undelegate + (*v1alpha16.UndelegateClaim)(nil), // 45: penumbra.core.component.stake.v1alpha1.UndelegateClaim + (*v1alpha18.CommunityPoolSpend)(nil), // 46: penumbra.core.component.governance.v1alpha1.CommunityPoolSpend + (*v1alpha18.CommunityPoolOutput)(nil), // 47: penumbra.core.component.governance.v1alpha1.CommunityPoolOutput + (*v1alpha18.CommunityPoolDeposit)(nil), // 48: penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit + (*v1alpha17.Ics20Withdrawal)(nil), // 49: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + (*v1alpha14.Note)(nil), // 50: penumbra.core.component.shielded_pool.v1alpha1.Note + (*v1alpha19.AddressView)(nil), // 51: penumbra.core.keys.v1alpha1.AddressView + (*v1alpha110.DenomMetadata)(nil), // 52: penumbra.core.asset.v1alpha1.DenomMetadata + (*v1alpha111.TransactionId)(nil), // 53: penumbra.core.txhash.v1alpha1.TransactionId (*v1alpha19.PayloadKey)(nil), // 54: penumbra.core.keys.v1alpha1.PayloadKey (*v1alpha11.StateCommitment)(nil), // 55: penumbra.crypto.tct.v1alpha1.StateCommitment - (*v1alpha111.Nullifier)(nil), // 56: penumbra.core.component.sct.v1alpha1.Nullifier + (*v1alpha112.Nullifier)(nil), // 56: penumbra.core.component.sct.v1alpha1.Nullifier (*v1alpha14.SpendView)(nil), // 57: penumbra.core.component.shielded_pool.v1alpha1.SpendView (*v1alpha14.OutputView)(nil), // 58: penumbra.core.component.shielded_pool.v1alpha1.OutputView (*v1alpha15.SwapView)(nil), // 59: penumbra.core.component.dex.v1alpha1.SwapView (*v1alpha15.SwapClaimView)(nil), // 60: penumbra.core.component.dex.v1alpha1.SwapClaimView (*v1alpha18.DelegatorVoteView)(nil), // 61: penumbra.core.component.governance.v1alpha1.DelegatorVoteView - (*v1alpha112.EffectHash)(nil), // 62: penumbra.core.txhash.v1alpha1.EffectHash + (*v1alpha111.EffectHash)(nil), // 62: penumbra.core.txhash.v1alpha1.EffectHash (*v1alpha1.SpendAuthSignature)(nil), // 63: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature (*v1alpha11.StateCommitmentProof)(nil), // 64: penumbra.crypto.tct.v1alpha1.StateCommitmentProof (*v1alpha14.SpendPlan)(nil), // 65: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan @@ -3385,117 +3336,117 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_goTypes = []interf (*v1alpha19.Address)(nil), // 73: penumbra.core.keys.v1alpha1.Address } var file_penumbra_core_transaction_v1alpha1_transaction_proto_depIdxs = []int32{ - 2, // 0: penumbra.core.transaction.v1alpha1.Transaction.body:type_name -> penumbra.core.transaction.v1alpha1.TransactionBody - 25, // 1: penumbra.core.transaction.v1alpha1.Transaction.binding_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature - 26, // 2: penumbra.core.transaction.v1alpha1.Transaction.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot - 5, // 3: penumbra.core.transaction.v1alpha1.TransactionBody.actions:type_name -> penumbra.core.transaction.v1alpha1.Action - 3, // 4: penumbra.core.transaction.v1alpha1.TransactionBody.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters - 4, // 5: penumbra.core.transaction.v1alpha1.TransactionBody.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData - 19, // 6: penumbra.core.transaction.v1alpha1.TransactionBody.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext - 27, // 7: penumbra.core.transaction.v1alpha1.TransactionParameters.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee - 28, // 8: penumbra.core.transaction.v1alpha1.DetectionData.fmd_clues:type_name -> penumbra.crypto.decaf377_fmd.v1alpha1.Clue - 29, // 9: penumbra.core.transaction.v1alpha1.Action.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend - 30, // 10: penumbra.core.transaction.v1alpha1.Action.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output - 31, // 11: penumbra.core.transaction.v1alpha1.Action.swap:type_name -> penumbra.core.component.dex.v1alpha1.Swap - 32, // 12: penumbra.core.transaction.v1alpha1.Action.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaim - 33, // 13: penumbra.core.transaction.v1alpha1.Action.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 34, // 14: penumbra.core.transaction.v1alpha1.Action.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 35, // 15: penumbra.core.transaction.v1alpha1.Action.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 36, // 16: penumbra.core.transaction.v1alpha1.Action.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 37, // 17: penumbra.core.transaction.v1alpha1.Action.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote - 38, // 18: penumbra.core.transaction.v1alpha1.Action.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote - 39, // 19: penumbra.core.transaction.v1alpha1.Action.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 40, // 20: penumbra.core.transaction.v1alpha1.Action.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 41, // 21: penumbra.core.transaction.v1alpha1.Action.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose - 42, // 22: penumbra.core.transaction.v1alpha1.Action.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw - 43, // 23: penumbra.core.transaction.v1alpha1.Action.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim - 44, // 24: penumbra.core.transaction.v1alpha1.Action.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 45, // 25: penumbra.core.transaction.v1alpha1.Action.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 46, // 26: penumbra.core.transaction.v1alpha1.Action.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim - 47, // 27: penumbra.core.transaction.v1alpha1.Action.community_pool_spend:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolSpend - 48, // 28: penumbra.core.transaction.v1alpha1.Action.community_pool_output:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolOutput - 49, // 29: penumbra.core.transaction.v1alpha1.Action.community_pool_deposit:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit - 50, // 30: penumbra.core.transaction.v1alpha1.Action.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 7, // 31: penumbra.core.transaction.v1alpha1.TransactionPerspective.payload_keys:type_name -> penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment - 8, // 32: penumbra.core.transaction.v1alpha1.TransactionPerspective.spend_nullifiers:type_name -> penumbra.core.transaction.v1alpha1.NullifierWithNote - 51, // 33: penumbra.core.transaction.v1alpha1.TransactionPerspective.advice_notes:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 52, // 34: penumbra.core.transaction.v1alpha1.TransactionPerspective.address_views:type_name -> penumbra.core.keys.v1alpha1.AddressView - 53, // 35: penumbra.core.transaction.v1alpha1.TransactionPerspective.denoms:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata - 1, // 36: penumbra.core.transaction.v1alpha1.TransactionPerspective.transaction_id:type_name -> penumbra.core.transaction.v1alpha1.Id + 1, // 0: penumbra.core.transaction.v1alpha1.Transaction.body:type_name -> penumbra.core.transaction.v1alpha1.TransactionBody + 24, // 1: penumbra.core.transaction.v1alpha1.Transaction.binding_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature + 25, // 2: penumbra.core.transaction.v1alpha1.Transaction.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 4, // 3: penumbra.core.transaction.v1alpha1.TransactionBody.actions:type_name -> penumbra.core.transaction.v1alpha1.Action + 2, // 4: penumbra.core.transaction.v1alpha1.TransactionBody.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters + 3, // 5: penumbra.core.transaction.v1alpha1.TransactionBody.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData + 18, // 6: penumbra.core.transaction.v1alpha1.TransactionBody.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext + 26, // 7: penumbra.core.transaction.v1alpha1.TransactionParameters.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee + 27, // 8: penumbra.core.transaction.v1alpha1.DetectionData.fmd_clues:type_name -> penumbra.crypto.decaf377_fmd.v1alpha1.Clue + 28, // 9: penumbra.core.transaction.v1alpha1.Action.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend + 29, // 10: penumbra.core.transaction.v1alpha1.Action.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output + 30, // 11: penumbra.core.transaction.v1alpha1.Action.swap:type_name -> penumbra.core.component.dex.v1alpha1.Swap + 31, // 12: penumbra.core.transaction.v1alpha1.Action.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaim + 32, // 13: penumbra.core.transaction.v1alpha1.Action.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 33, // 14: penumbra.core.transaction.v1alpha1.Action.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 34, // 15: penumbra.core.transaction.v1alpha1.Action.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 35, // 16: penumbra.core.transaction.v1alpha1.Action.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 36, // 17: penumbra.core.transaction.v1alpha1.Action.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 37, // 18: penumbra.core.transaction.v1alpha1.Action.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote + 38, // 19: penumbra.core.transaction.v1alpha1.Action.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 39, // 20: penumbra.core.transaction.v1alpha1.Action.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 40, // 21: penumbra.core.transaction.v1alpha1.Action.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 41, // 22: penumbra.core.transaction.v1alpha1.Action.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw + 42, // 23: penumbra.core.transaction.v1alpha1.Action.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim + 43, // 24: penumbra.core.transaction.v1alpha1.Action.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 44, // 25: penumbra.core.transaction.v1alpha1.Action.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 45, // 26: penumbra.core.transaction.v1alpha1.Action.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim + 46, // 27: penumbra.core.transaction.v1alpha1.Action.community_pool_spend:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolSpend + 47, // 28: penumbra.core.transaction.v1alpha1.Action.community_pool_output:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolOutput + 48, // 29: penumbra.core.transaction.v1alpha1.Action.community_pool_deposit:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit + 49, // 30: penumbra.core.transaction.v1alpha1.Action.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 6, // 31: penumbra.core.transaction.v1alpha1.TransactionPerspective.payload_keys:type_name -> penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment + 7, // 32: penumbra.core.transaction.v1alpha1.TransactionPerspective.spend_nullifiers:type_name -> penumbra.core.transaction.v1alpha1.NullifierWithNote + 50, // 33: penumbra.core.transaction.v1alpha1.TransactionPerspective.advice_notes:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 51, // 34: penumbra.core.transaction.v1alpha1.TransactionPerspective.address_views:type_name -> penumbra.core.keys.v1alpha1.AddressView + 52, // 35: penumbra.core.transaction.v1alpha1.TransactionPerspective.denoms:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata + 53, // 36: penumbra.core.transaction.v1alpha1.TransactionPerspective.transaction_id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId 54, // 37: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey 55, // 38: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment 56, // 39: penumbra.core.transaction.v1alpha1.NullifierWithNote.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 51, // 40: penumbra.core.transaction.v1alpha1.NullifierWithNote.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 10, // 41: penumbra.core.transaction.v1alpha1.TransactionView.body_view:type_name -> penumbra.core.transaction.v1alpha1.TransactionBodyView - 25, // 42: penumbra.core.transaction.v1alpha1.TransactionView.binding_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature - 26, // 43: penumbra.core.transaction.v1alpha1.TransactionView.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot - 11, // 44: penumbra.core.transaction.v1alpha1.TransactionBodyView.action_views:type_name -> penumbra.core.transaction.v1alpha1.ActionView - 3, // 45: penumbra.core.transaction.v1alpha1.TransactionBodyView.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters - 4, // 46: penumbra.core.transaction.v1alpha1.TransactionBodyView.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData - 22, // 47: penumbra.core.transaction.v1alpha1.TransactionBodyView.memo_view:type_name -> penumbra.core.transaction.v1alpha1.MemoView + 50, // 40: penumbra.core.transaction.v1alpha1.NullifierWithNote.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 9, // 41: penumbra.core.transaction.v1alpha1.TransactionView.body_view:type_name -> penumbra.core.transaction.v1alpha1.TransactionBodyView + 24, // 42: penumbra.core.transaction.v1alpha1.TransactionView.binding_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.BindingSignature + 25, // 43: penumbra.core.transaction.v1alpha1.TransactionView.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 10, // 44: penumbra.core.transaction.v1alpha1.TransactionBodyView.action_views:type_name -> penumbra.core.transaction.v1alpha1.ActionView + 2, // 45: penumbra.core.transaction.v1alpha1.TransactionBodyView.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters + 3, // 46: penumbra.core.transaction.v1alpha1.TransactionBodyView.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData + 21, // 47: penumbra.core.transaction.v1alpha1.TransactionBodyView.memo_view:type_name -> penumbra.core.transaction.v1alpha1.MemoView 57, // 48: penumbra.core.transaction.v1alpha1.ActionView.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView 58, // 49: penumbra.core.transaction.v1alpha1.ActionView.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView 59, // 50: penumbra.core.transaction.v1alpha1.ActionView.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapView 60, // 51: penumbra.core.transaction.v1alpha1.ActionView.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimView - 33, // 52: penumbra.core.transaction.v1alpha1.ActionView.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 34, // 53: penumbra.core.transaction.v1alpha1.ActionView.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 35, // 54: penumbra.core.transaction.v1alpha1.ActionView.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 36, // 55: penumbra.core.transaction.v1alpha1.ActionView.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 37, // 56: penumbra.core.transaction.v1alpha1.ActionView.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 32, // 52: penumbra.core.transaction.v1alpha1.ActionView.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 33, // 53: penumbra.core.transaction.v1alpha1.ActionView.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 34, // 54: penumbra.core.transaction.v1alpha1.ActionView.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 35, // 55: penumbra.core.transaction.v1alpha1.ActionView.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 36, // 56: penumbra.core.transaction.v1alpha1.ActionView.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote 61, // 57: penumbra.core.transaction.v1alpha1.ActionView.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView - 39, // 58: penumbra.core.transaction.v1alpha1.ActionView.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 40, // 59: penumbra.core.transaction.v1alpha1.ActionView.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 41, // 60: penumbra.core.transaction.v1alpha1.ActionView.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose - 42, // 61: penumbra.core.transaction.v1alpha1.ActionView.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw - 43, // 62: penumbra.core.transaction.v1alpha1.ActionView.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim - 44, // 63: penumbra.core.transaction.v1alpha1.ActionView.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 45, // 64: penumbra.core.transaction.v1alpha1.ActionView.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 47, // 65: penumbra.core.transaction.v1alpha1.ActionView.community_pool_spend:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolSpend - 48, // 66: penumbra.core.transaction.v1alpha1.ActionView.community_pool_output:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolOutput - 49, // 67: penumbra.core.transaction.v1alpha1.ActionView.community_pool_deposit:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit - 46, // 68: penumbra.core.transaction.v1alpha1.ActionView.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim - 50, // 69: penumbra.core.transaction.v1alpha1.ActionView.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 38, // 58: penumbra.core.transaction.v1alpha1.ActionView.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 39, // 59: penumbra.core.transaction.v1alpha1.ActionView.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 40, // 60: penumbra.core.transaction.v1alpha1.ActionView.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 41, // 61: penumbra.core.transaction.v1alpha1.ActionView.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw + 42, // 62: penumbra.core.transaction.v1alpha1.ActionView.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim + 43, // 63: penumbra.core.transaction.v1alpha1.ActionView.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 44, // 64: penumbra.core.transaction.v1alpha1.ActionView.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 46, // 65: penumbra.core.transaction.v1alpha1.ActionView.community_pool_spend:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolSpend + 47, // 66: penumbra.core.transaction.v1alpha1.ActionView.community_pool_output:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolOutput + 48, // 67: penumbra.core.transaction.v1alpha1.ActionView.community_pool_deposit:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit + 45, // 68: penumbra.core.transaction.v1alpha1.ActionView.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim + 49, // 69: penumbra.core.transaction.v1alpha1.ActionView.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal 62, // 70: penumbra.core.transaction.v1alpha1.AuthorizationData.effect_hash:type_name -> penumbra.core.txhash.v1alpha1.EffectHash 63, // 71: penumbra.core.transaction.v1alpha1.AuthorizationData.spend_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature 63, // 72: penumbra.core.transaction.v1alpha1.AuthorizationData.delegator_vote_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - 26, // 73: penumbra.core.transaction.v1alpha1.WitnessData.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 25, // 73: penumbra.core.transaction.v1alpha1.WitnessData.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot 64, // 74: penumbra.core.transaction.v1alpha1.WitnessData.state_commitment_proofs:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitmentProof - 16, // 75: penumbra.core.transaction.v1alpha1.TransactionPlan.actions:type_name -> penumbra.core.transaction.v1alpha1.ActionPlan - 3, // 76: penumbra.core.transaction.v1alpha1.TransactionPlan.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters - 15, // 77: penumbra.core.transaction.v1alpha1.TransactionPlan.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionDataPlan - 18, // 78: penumbra.core.transaction.v1alpha1.TransactionPlan.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoPlan - 17, // 79: penumbra.core.transaction.v1alpha1.DetectionDataPlan.clue_plans:type_name -> penumbra.core.transaction.v1alpha1.CluePlan + 15, // 75: penumbra.core.transaction.v1alpha1.TransactionPlan.actions:type_name -> penumbra.core.transaction.v1alpha1.ActionPlan + 2, // 76: penumbra.core.transaction.v1alpha1.TransactionPlan.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters + 14, // 77: penumbra.core.transaction.v1alpha1.TransactionPlan.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionDataPlan + 17, // 78: penumbra.core.transaction.v1alpha1.TransactionPlan.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoPlan + 16, // 79: penumbra.core.transaction.v1alpha1.DetectionDataPlan.clue_plans:type_name -> penumbra.core.transaction.v1alpha1.CluePlan 65, // 80: penumbra.core.transaction.v1alpha1.ActionPlan.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendPlan 66, // 81: penumbra.core.transaction.v1alpha1.ActionPlan.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputPlan 67, // 82: penumbra.core.transaction.v1alpha1.ActionPlan.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapPlan 68, // 83: penumbra.core.transaction.v1alpha1.ActionPlan.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimPlan - 33, // 84: penumbra.core.transaction.v1alpha1.ActionPlan.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 34, // 85: penumbra.core.transaction.v1alpha1.ActionPlan.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 35, // 86: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 36, // 87: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 37, // 88: penumbra.core.transaction.v1alpha1.ActionPlan.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 32, // 84: penumbra.core.transaction.v1alpha1.ActionPlan.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 33, // 85: penumbra.core.transaction.v1alpha1.ActionPlan.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 34, // 86: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 35, // 87: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 36, // 88: penumbra.core.transaction.v1alpha1.ActionPlan.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote 69, // 89: penumbra.core.transaction.v1alpha1.ActionPlan.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVotePlan - 39, // 90: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 50, // 91: penumbra.core.transaction.v1alpha1.ActionPlan.withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 40, // 92: penumbra.core.transaction.v1alpha1.ActionPlan.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 41, // 93: penumbra.core.transaction.v1alpha1.ActionPlan.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 38, // 90: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 49, // 91: penumbra.core.transaction.v1alpha1.ActionPlan.withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 39, // 92: penumbra.core.transaction.v1alpha1.ActionPlan.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 40, // 93: penumbra.core.transaction.v1alpha1.ActionPlan.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose 70, // 94: penumbra.core.transaction.v1alpha1.ActionPlan.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan 71, // 95: penumbra.core.transaction.v1alpha1.ActionPlan.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan - 44, // 96: penumbra.core.transaction.v1alpha1.ActionPlan.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 45, // 97: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 43, // 96: penumbra.core.transaction.v1alpha1.ActionPlan.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 44, // 97: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate 72, // 98: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan - 47, // 99: penumbra.core.transaction.v1alpha1.ActionPlan.community_pool_spend:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolSpend - 48, // 100: penumbra.core.transaction.v1alpha1.ActionPlan.community_pool_output:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolOutput - 49, // 101: penumbra.core.transaction.v1alpha1.ActionPlan.community_pool_deposit:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit + 46, // 99: penumbra.core.transaction.v1alpha1.ActionPlan.community_pool_spend:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolSpend + 47, // 100: penumbra.core.transaction.v1alpha1.ActionPlan.community_pool_output:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolOutput + 48, // 101: penumbra.core.transaction.v1alpha1.ActionPlan.community_pool_deposit:type_name -> penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit 73, // 102: penumbra.core.transaction.v1alpha1.CluePlan.address:type_name -> penumbra.core.keys.v1alpha1.Address - 20, // 103: penumbra.core.transaction.v1alpha1.MemoPlan.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext + 19, // 103: penumbra.core.transaction.v1alpha1.MemoPlan.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext 73, // 104: penumbra.core.transaction.v1alpha1.MemoPlaintext.return_address:type_name -> penumbra.core.keys.v1alpha1.Address - 52, // 105: penumbra.core.transaction.v1alpha1.MemoPlaintextView.return_address:type_name -> penumbra.core.keys.v1alpha1.AddressView - 23, // 106: penumbra.core.transaction.v1alpha1.MemoView.visible:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Visible - 24, // 107: penumbra.core.transaction.v1alpha1.MemoView.opaque:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Opaque - 19, // 108: penumbra.core.transaction.v1alpha1.MemoView.Visible.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext - 21, // 109: penumbra.core.transaction.v1alpha1.MemoView.Visible.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintextView - 19, // 110: penumbra.core.transaction.v1alpha1.MemoView.Opaque.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext + 51, // 105: penumbra.core.transaction.v1alpha1.MemoPlaintextView.return_address:type_name -> penumbra.core.keys.v1alpha1.AddressView + 22, // 106: penumbra.core.transaction.v1alpha1.MemoView.visible:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Visible + 23, // 107: penumbra.core.transaction.v1alpha1.MemoView.opaque:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Opaque + 18, // 108: penumbra.core.transaction.v1alpha1.MemoView.Visible.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext + 20, // 109: penumbra.core.transaction.v1alpha1.MemoView.Visible.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintextView + 18, // 110: penumbra.core.transaction.v1alpha1.MemoView.Opaque.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext 111, // [111:111] is the sub-list for method output_type 111, // [111:111] is the sub-list for method input_type 111, // [111:111] is the sub-list for extension type_name @@ -3522,18 +3473,6 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Id); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionBody); i { case 0: return &v.state @@ -3545,7 +3484,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionParameters); i { case 0: return &v.state @@ -3557,7 +3496,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DetectionData); i { case 0: return &v.state @@ -3569,7 +3508,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Action); i { case 0: return &v.state @@ -3581,7 +3520,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionPerspective); i { case 0: return &v.state @@ -3593,7 +3532,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PayloadKeyWithCommitment); i { case 0: return &v.state @@ -3605,7 +3544,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NullifierWithNote); i { case 0: return &v.state @@ -3617,7 +3556,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionView); i { case 0: return &v.state @@ -3629,7 +3568,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionBodyView); i { case 0: return &v.state @@ -3641,7 +3580,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ActionView); i { case 0: return &v.state @@ -3653,7 +3592,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AuthorizationData); i { case 0: return &v.state @@ -3665,7 +3604,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WitnessData); i { case 0: return &v.state @@ -3677,7 +3616,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionPlan); i { case 0: return &v.state @@ -3689,7 +3628,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DetectionDataPlan); i { case 0: return &v.state @@ -3701,7 +3640,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ActionPlan); i { case 0: return &v.state @@ -3713,7 +3652,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CluePlan); i { case 0: return &v.state @@ -3725,7 +3664,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoPlan); i { case 0: return &v.state @@ -3737,7 +3676,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoCiphertext); i { case 0: return &v.state @@ -3749,7 +3688,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoPlaintext); i { case 0: return &v.state @@ -3761,7 +3700,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoPlaintextView); i { case 0: return &v.state @@ -3773,7 +3712,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoView); i { case 0: return &v.state @@ -3785,7 +3724,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoView_Visible); i { case 0: return &v.state @@ -3797,7 +3736,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { return nil } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoView_Opaque); i { case 0: return &v.state @@ -3810,7 +3749,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[5].OneofWrappers = []interface{}{ + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[4].OneofWrappers = []interface{}{ (*Action_Spend)(nil), (*Action_Output)(nil), (*Action_Swap)(nil), @@ -3834,7 +3773,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { (*Action_CommunityPoolDeposit)(nil), (*Action_Ics20Withdrawal)(nil), } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[11].OneofWrappers = []interface{}{ + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[10].OneofWrappers = []interface{}{ (*ActionView_Spend)(nil), (*ActionView_Output)(nil), (*ActionView_Swap)(nil), @@ -3858,7 +3797,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { (*ActionView_UndelegateClaim)(nil), (*ActionView_Ics20Withdrawal)(nil), } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[16].OneofWrappers = []interface{}{ + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[15].OneofWrappers = []interface{}{ (*ActionPlan_Spend)(nil), (*ActionPlan_Output)(nil), (*ActionPlan_Swap)(nil), @@ -3882,7 +3821,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { (*ActionPlan_CommunityPoolOutput)(nil), (*ActionPlan_CommunityPoolDeposit)(nil), } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22].OneofWrappers = []interface{}{ + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21].OneofWrappers = []interface{}{ (*MemoView_Visible_)(nil), (*MemoView_Opaque_)(nil), } @@ -3892,7 +3831,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc, NumEnums: 0, - NumMessages: 25, + NumMessages: 24, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/go/gen/penumbra/core/txhash/v1alpha1/txhash.pb.go b/proto/go/gen/penumbra/core/txhash/v1alpha1/txhash.pb.go index 021254711f..d63fea7c28 100644 --- a/proto/go/gen/penumbra/core/txhash/v1alpha1/txhash.pb.go +++ b/proto/go/gen/penumbra/core/txhash/v1alpha1/txhash.pb.go @@ -69,6 +69,56 @@ func (x *EffectHash) GetInner() []byte { return nil } +// A transaction ID, the Sha256 hash of a transaction. +// +// This is the hash of the plain byte encoding, used by Tendermint. +type TransactionId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Inner []byte `protobuf:"bytes,1,opt,name=inner,proto3" json:"inner,omitempty"` +} + +func (x *TransactionId) Reset() { + *x = TransactionId{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_txhash_v1alpha1_txhash_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TransactionId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TransactionId) ProtoMessage() {} + +func (x *TransactionId) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_txhash_v1alpha1_txhash_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TransactionId.ProtoReflect.Descriptor instead. +func (*TransactionId) Descriptor() ([]byte, []int) { + return file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDescGZIP(), []int{1} +} + +func (x *TransactionId) GetInner() []byte { + if x != nil { + return x.Inner + } + return nil +} + var File_penumbra_core_txhash_v1alpha1_txhash_proto protoreflect.FileDescriptor var file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDesc = []byte{ @@ -78,26 +128,29 @@ var file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDesc = []byte{ 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x22, 0x22, 0x0a, 0x0a, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x42, - 0xa4, 0x02, 0x0a, 0x21, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0b, 0x54, 0x78, 0x68, 0x61, 0x73, 0x68, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, - 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, - 0x72, 0x65, 0x2f, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x3b, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x54, 0xaa, 0x02, 0x1d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x56, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x1d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x78, 0x68, 0x61, 0x73, 0x68, 0x5c, 0x56, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x29, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x78, 0x68, 0x61, 0x73, 0x68, 0x5c, 0x56, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0xea, 0x02, 0x20, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, - 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x54, 0x78, 0x68, 0x61, 0x73, 0x68, 0x3a, 0x3a, 0x56, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, + 0x25, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x42, 0xa4, 0x02, 0x0a, 0x21, 0x63, 0x6f, 0x6d, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, + 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0b, 0x54, 0x78, + 0x68, 0x61, 0x73, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5b, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, + 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x54, 0xaa, 0x02, + 0x1d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x54, + 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, + 0x1d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, + 0x78, 0x68, 0x61, 0x73, 0x68, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, + 0x29, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, + 0x78, 0x68, 0x61, 0x73, 0x68, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x20, 0x50, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x54, 0x78, 0x68, + 0x61, 0x73, 0x68, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -112,9 +165,10 @@ func file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDescGZIP() []byte { return file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDescData } -var file_penumbra_core_txhash_v1alpha1_txhash_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_penumbra_core_txhash_v1alpha1_txhash_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_penumbra_core_txhash_v1alpha1_txhash_proto_goTypes = []interface{}{ - (*EffectHash)(nil), // 0: penumbra.core.txhash.v1alpha1.EffectHash + (*EffectHash)(nil), // 0: penumbra.core.txhash.v1alpha1.EffectHash + (*TransactionId)(nil), // 1: penumbra.core.txhash.v1alpha1.TransactionId } var file_penumbra_core_txhash_v1alpha1_txhash_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type @@ -142,6 +196,18 @@ func file_penumbra_core_txhash_v1alpha1_txhash_proto_init() { return nil } } + file_penumbra_core_txhash_v1alpha1_txhash_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TransactionId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -149,7 +215,7 @@ func file_penumbra_core_txhash_v1alpha1_txhash_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_core_txhash_v1alpha1_txhash_proto_rawDesc, NumEnums: 0, - NumMessages: 1, + NumMessages: 2, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/go/gen/penumbra/view/v1alpha1/view.pb.go b/proto/go/gen/penumbra/view/v1alpha1/view.pb.go index 55d0a710b5..1da7167264 100644 --- a/proto/go/gen/penumbra/view/v1alpha1/view.pb.go +++ b/proto/go/gen/penumbra/view/v1alpha1/view.pb.go @@ -7,19 +7,20 @@ package viewv1alpha1 import ( - v1alpha17 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/app/v1alpha1" - v1alpha14 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/asset/v1alpha1" - v1alpha18 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/chain/v1alpha1" - v1alpha111 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/dex/v1alpha1" - v1alpha11 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/fee/v1alpha1" - v1alpha13 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/ibc/v1alpha1" - v1alpha19 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/sct/v1alpha1" - v1alpha110 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1" - v1alpha112 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/stake/v1alpha1" - v1alpha12 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/keys/v1alpha1" - v1alpha15 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/num/v1alpha1" + v1alpha18 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/app/v1alpha1" + v1alpha15 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/asset/v1alpha1" + v1alpha19 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/chain/v1alpha1" + v1alpha112 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/dex/v1alpha1" + v1alpha12 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/fee/v1alpha1" + v1alpha14 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/ibc/v1alpha1" + v1alpha110 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/sct/v1alpha1" + v1alpha111 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1" + v1alpha113 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/stake/v1alpha1" + v1alpha13 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/keys/v1alpha1" + v1alpha16 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/num/v1alpha1" v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/transaction/v1alpha1" - v1alpha16 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/tct/v1alpha1" + v1alpha11 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/txhash/v1alpha1" + v1alpha17 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/tct/v1alpha1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -201,7 +202,7 @@ type BroadcastTransactionResponse struct { unknownFields protoimpl.UnknownFields // The hash of the transaction that was broadcast. - Id *v1alpha1.Id `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Id *v1alpha11.TransactionId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // The height in which the transaction was detected as included in the chain, if any. // Will not be included unless await_detection was true. DetectionHeight uint64 `protobuf:"varint,2,opt,name=detection_height,json=detectionHeight,proto3" json:"detection_height,omitempty"` @@ -239,7 +240,7 @@ func (*BroadcastTransactionResponse) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{3} } -func (x *BroadcastTransactionResponse) GetId() *v1alpha1.Id { +func (x *BroadcastTransactionResponse) GetId() *v1alpha11.TransactionId { if x != nil { return x.Id } @@ -261,22 +262,22 @@ type TransactionPlannerRequest struct { // The expiry height for the requested TransactionPlan ExpiryHeight uint64 `protobuf:"varint,1,opt,name=expiry_height,json=expiryHeight,proto3" json:"expiry_height,omitempty"` // The fee for the requested TransactionPlan, if any. - Fee *v1alpha11.Fee `protobuf:"bytes,2,opt,name=fee,proto3" json:"fee,omitempty"` + Fee *v1alpha12.Fee `protobuf:"bytes,2,opt,name=fee,proto3" json:"fee,omitempty"` // The memo for the requested TransactionPlan. // The memo must be unspecified unless `outputs` is nonempty. Memo *v1alpha1.MemoPlaintext `protobuf:"bytes,3,opt,name=memo,proto3" json:"memo,omitempty"` // If present, only spends funds from the given account. - Source *v1alpha12.AddressIndex `protobuf:"bytes,4,opt,name=source,proto3" json:"source,omitempty"` + Source *v1alpha13.AddressIndex `protobuf:"bytes,4,opt,name=source,proto3" json:"source,omitempty"` // Optionally identifies the wallet id to query. - WalletId *v1alpha12.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` + WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` // Request contents Outputs []*TransactionPlannerRequest_Output `protobuf:"bytes,20,rep,name=outputs,proto3" json:"outputs,omitempty"` Swaps []*TransactionPlannerRequest_Swap `protobuf:"bytes,30,rep,name=swaps,proto3" json:"swaps,omitempty"` SwapClaims []*TransactionPlannerRequest_SwapClaim `protobuf:"bytes,31,rep,name=swap_claims,json=swapClaims,proto3" json:"swap_claims,omitempty"` Delegations []*TransactionPlannerRequest_Delegate `protobuf:"bytes,40,rep,name=delegations,proto3" json:"delegations,omitempty"` Undelegations []*TransactionPlannerRequest_Undelegate `protobuf:"bytes,50,rep,name=undelegations,proto3" json:"undelegations,omitempty"` - IbcRelayActions []*v1alpha13.IbcRelay `protobuf:"bytes,60,rep,name=ibc_relay_actions,json=ibcRelayActions,proto3" json:"ibc_relay_actions,omitempty"` - Ics20Withdrawals []*v1alpha13.Ics20Withdrawal `protobuf:"bytes,61,rep,name=ics20_withdrawals,json=ics20Withdrawals,proto3" json:"ics20_withdrawals,omitempty"` + IbcRelayActions []*v1alpha14.IbcRelay `protobuf:"bytes,60,rep,name=ibc_relay_actions,json=ibcRelayActions,proto3" json:"ibc_relay_actions,omitempty"` + Ics20Withdrawals []*v1alpha14.Ics20Withdrawal `protobuf:"bytes,61,rep,name=ics20_withdrawals,json=ics20Withdrawals,proto3" json:"ics20_withdrawals,omitempty"` PositionOpens []*TransactionPlannerRequest_PositionOpen `protobuf:"bytes,70,rep,name=position_opens,json=positionOpens,proto3" json:"position_opens,omitempty"` PositionCloses []*TransactionPlannerRequest_PositionClose `protobuf:"bytes,71,rep,name=position_closes,json=positionCloses,proto3" json:"position_closes,omitempty"` PositionWithdraws []*TransactionPlannerRequest_PositionWithdraw `protobuf:"bytes,72,rep,name=position_withdraws,json=positionWithdraws,proto3" json:"position_withdraws,omitempty"` @@ -321,7 +322,7 @@ func (x *TransactionPlannerRequest) GetExpiryHeight() uint64 { return 0 } -func (x *TransactionPlannerRequest) GetFee() *v1alpha11.Fee { +func (x *TransactionPlannerRequest) GetFee() *v1alpha12.Fee { if x != nil { return x.Fee } @@ -335,14 +336,14 @@ func (x *TransactionPlannerRequest) GetMemo() *v1alpha1.MemoPlaintext { return nil } -func (x *TransactionPlannerRequest) GetSource() *v1alpha12.AddressIndex { +func (x *TransactionPlannerRequest) GetSource() *v1alpha13.AddressIndex { if x != nil { return x.Source } return nil } -func (x *TransactionPlannerRequest) GetWalletId() *v1alpha12.WalletId { +func (x *TransactionPlannerRequest) GetWalletId() *v1alpha13.WalletId { if x != nil { return x.WalletId } @@ -384,14 +385,14 @@ func (x *TransactionPlannerRequest) GetUndelegations() []*TransactionPlannerRequ return nil } -func (x *TransactionPlannerRequest) GetIbcRelayActions() []*v1alpha13.IbcRelay { +func (x *TransactionPlannerRequest) GetIbcRelayActions() []*v1alpha14.IbcRelay { if x != nil { return x.IbcRelayActions } return nil } -func (x *TransactionPlannerRequest) GetIcs20Withdrawals() []*v1alpha13.Ics20Withdrawal { +func (x *TransactionPlannerRequest) GetIcs20Withdrawals() []*v1alpha14.Ics20Withdrawal { if x != nil { return x.Ics20Withdrawals } @@ -471,7 +472,7 @@ type AddressByIndexRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - AddressIndex *v1alpha12.AddressIndex `protobuf:"bytes,1,opt,name=address_index,json=addressIndex,proto3" json:"address_index,omitempty"` + AddressIndex *v1alpha13.AddressIndex `protobuf:"bytes,1,opt,name=address_index,json=addressIndex,proto3" json:"address_index,omitempty"` } func (x *AddressByIndexRequest) Reset() { @@ -506,7 +507,7 @@ func (*AddressByIndexRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{6} } -func (x *AddressByIndexRequest) GetAddressIndex() *v1alpha12.AddressIndex { +func (x *AddressByIndexRequest) GetAddressIndex() *v1alpha13.AddressIndex { if x != nil { return x.AddressIndex } @@ -518,7 +519,7 @@ type AddressByIndexResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Address *v1alpha12.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Address *v1alpha13.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } func (x *AddressByIndexResponse) Reset() { @@ -553,7 +554,7 @@ func (*AddressByIndexResponse) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{7} } -func (x *AddressByIndexResponse) GetAddress() *v1alpha12.Address { +func (x *AddressByIndexResponse) GetAddress() *v1alpha13.Address { if x != nil { return x.Address } @@ -603,7 +604,7 @@ type WalletIdResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - WalletId *v1alpha12.WalletId `protobuf:"bytes,1,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` + WalletId *v1alpha13.WalletId `protobuf:"bytes,1,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *WalletIdResponse) Reset() { @@ -638,7 +639,7 @@ func (*WalletIdResponse) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{9} } -func (x *WalletIdResponse) GetWalletId() *v1alpha12.WalletId { +func (x *WalletIdResponse) GetWalletId() *v1alpha13.WalletId { if x != nil { return x.WalletId } @@ -650,7 +651,7 @@ type IndexByAddressRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Address *v1alpha12.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Address *v1alpha13.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } func (x *IndexByAddressRequest) Reset() { @@ -685,7 +686,7 @@ func (*IndexByAddressRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{10} } -func (x *IndexByAddressRequest) GetAddress() *v1alpha12.Address { +func (x *IndexByAddressRequest) GetAddress() *v1alpha13.Address { if x != nil { return x.Address } @@ -698,7 +699,7 @@ type IndexByAddressResponse struct { unknownFields protoimpl.UnknownFields // Will be absent if given an address not viewable by this viewing service - AddressIndex *v1alpha12.AddressIndex `protobuf:"bytes,1,opt,name=address_index,json=addressIndex,proto3" json:"address_index,omitempty"` + AddressIndex *v1alpha13.AddressIndex `protobuf:"bytes,1,opt,name=address_index,json=addressIndex,proto3" json:"address_index,omitempty"` } func (x *IndexByAddressResponse) Reset() { @@ -733,7 +734,7 @@ func (*IndexByAddressResponse) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{11} } -func (x *IndexByAddressResponse) GetAddressIndex() *v1alpha12.AddressIndex { +func (x *IndexByAddressResponse) GetAddressIndex() *v1alpha13.AddressIndex { if x != nil { return x.AddressIndex } @@ -745,7 +746,7 @@ type EphemeralAddressRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - AddressIndex *v1alpha12.AddressIndex `protobuf:"bytes,1,opt,name=address_index,json=addressIndex,proto3" json:"address_index,omitempty"` + AddressIndex *v1alpha13.AddressIndex `protobuf:"bytes,1,opt,name=address_index,json=addressIndex,proto3" json:"address_index,omitempty"` DisplayConfirm bool `protobuf:"varint,2,opt,name=display_confirm,json=displayConfirm,proto3" json:"display_confirm,omitempty"` } @@ -781,7 +782,7 @@ func (*EphemeralAddressRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{12} } -func (x *EphemeralAddressRequest) GetAddressIndex() *v1alpha12.AddressIndex { +func (x *EphemeralAddressRequest) GetAddressIndex() *v1alpha13.AddressIndex { if x != nil { return x.AddressIndex } @@ -800,7 +801,7 @@ type EphemeralAddressResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Address *v1alpha12.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Address *v1alpha13.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } func (x *EphemeralAddressResponse) Reset() { @@ -835,7 +836,7 @@ func (*EphemeralAddressResponse) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{13} } -func (x *EphemeralAddressResponse) GetAddress() *v1alpha12.Address { +func (x *EphemeralAddressResponse) GetAddress() *v1alpha13.Address { if x != nil { return x.Address } @@ -848,9 +849,9 @@ type BalancesRequest struct { unknownFields protoimpl.UnknownFields // If present, filter balances to only include the account specified by the `AddressIndex`. - AccountFilter *v1alpha12.AddressIndex `protobuf:"bytes,1,opt,name=account_filter,json=accountFilter,proto3" json:"account_filter,omitempty"` + AccountFilter *v1alpha13.AddressIndex `protobuf:"bytes,1,opt,name=account_filter,json=accountFilter,proto3" json:"account_filter,omitempty"` // If present, filter balances to only include the specified asset ID. - AssetIdFilter *v1alpha14.AssetId `protobuf:"bytes,2,opt,name=asset_id_filter,json=assetIdFilter,proto3" json:"asset_id_filter,omitempty"` + AssetIdFilter *v1alpha15.AssetId `protobuf:"bytes,2,opt,name=asset_id_filter,json=assetIdFilter,proto3" json:"asset_id_filter,omitempty"` } func (x *BalancesRequest) Reset() { @@ -885,14 +886,14 @@ func (*BalancesRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{14} } -func (x *BalancesRequest) GetAccountFilter() *v1alpha12.AddressIndex { +func (x *BalancesRequest) GetAccountFilter() *v1alpha13.AddressIndex { if x != nil { return x.AccountFilter } return nil } -func (x *BalancesRequest) GetAssetIdFilter() *v1alpha14.AssetId { +func (x *BalancesRequest) GetAssetIdFilter() *v1alpha15.AssetId { if x != nil { return x.AssetIdFilter } @@ -904,8 +905,8 @@ type BalancesResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Account *v1alpha12.AddressIndex `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` - Balance *v1alpha14.Value `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` + Account *v1alpha13.AddressIndex `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + Balance *v1alpha15.Value `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` } func (x *BalancesResponse) Reset() { @@ -940,14 +941,14 @@ func (*BalancesResponse) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{15} } -func (x *BalancesResponse) GetAccount() *v1alpha12.AddressIndex { +func (x *BalancesResponse) GetAccount() *v1alpha13.AddressIndex { if x != nil { return x.Account } return nil } -func (x *BalancesResponse) GetBalance() *v1alpha14.Value { +func (x *BalancesResponse) GetBalance() *v1alpha15.Value { if x != nil { return x.Balance } @@ -1007,7 +1008,7 @@ type ViewAuthRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Fvk *v1alpha12.FullViewingKey `protobuf:"bytes,1,opt,name=fvk,proto3" json:"fvk,omitempty"` + Fvk *v1alpha13.FullViewingKey `protobuf:"bytes,1,opt,name=fvk,proto3" json:"fvk,omitempty"` } func (x *ViewAuthRequest) Reset() { @@ -1042,7 +1043,7 @@ func (*ViewAuthRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{17} } -func (x *ViewAuthRequest) GetFvk() *v1alpha12.FullViewingKey { +func (x *ViewAuthRequest) GetFvk() *v1alpha13.FullViewingKey { if x != nil { return x.Fvk } @@ -1103,7 +1104,7 @@ type StatusRequest struct { unknownFields protoimpl.UnknownFields // Identifies the wallet id to query. - WalletId *v1alpha12.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` + WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *StatusRequest) Reset() { @@ -1138,7 +1139,7 @@ func (*StatusRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{19} } -func (x *StatusRequest) GetWalletId() *v1alpha12.WalletId { +func (x *StatusRequest) GetWalletId() *v1alpha13.WalletId { if x != nil { return x.WalletId } @@ -1219,7 +1220,7 @@ type StatusStreamRequest struct { unknownFields protoimpl.UnknownFields // Identifies the wallet id to query. - WalletId *v1alpha12.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` + WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *StatusStreamRequest) Reset() { @@ -1254,7 +1255,7 @@ func (*StatusStreamRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{21} } -func (x *StatusStreamRequest) GetWalletId() *v1alpha12.WalletId { +func (x *StatusStreamRequest) GetWalletId() *v1alpha13.WalletId { if x != nil { return x.WalletId } @@ -1340,15 +1341,15 @@ type NotesRequest struct { // If set, return spent notes as well as unspent notes. IncludeSpent bool `protobuf:"varint,2,opt,name=include_spent,json=includeSpent,proto3" json:"include_spent,omitempty"` // If set, only return notes with the specified asset id. - AssetId *v1alpha14.AssetId `protobuf:"bytes,3,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty"` + AssetId *v1alpha15.AssetId `protobuf:"bytes,3,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty"` // If set, only return notes with the specified address incore.component.dex.v1alpha1. - AddressIndex *v1alpha12.AddressIndex `protobuf:"bytes,4,opt,name=address_index,json=addressIndex,proto3" json:"address_index,omitempty"` + AddressIndex *v1alpha13.AddressIndex `protobuf:"bytes,4,opt,name=address_index,json=addressIndex,proto3" json:"address_index,omitempty"` // If set, stop returning notes once the total exceeds this amount. // // Ignored if `asset_id` is unset or if `include_spent` is set. - AmountToSpend *v1alpha15.Amount `protobuf:"bytes,6,opt,name=amount_to_spend,json=amountToSpend,proto3" json:"amount_to_spend,omitempty"` + AmountToSpend *v1alpha16.Amount `protobuf:"bytes,6,opt,name=amount_to_spend,json=amountToSpend,proto3" json:"amount_to_spend,omitempty"` // Identifies the wallet id to query. - WalletId *v1alpha12.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` + WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *NotesRequest) Reset() { @@ -1390,28 +1391,28 @@ func (x *NotesRequest) GetIncludeSpent() bool { return false } -func (x *NotesRequest) GetAssetId() *v1alpha14.AssetId { +func (x *NotesRequest) GetAssetId() *v1alpha15.AssetId { if x != nil { return x.AssetId } return nil } -func (x *NotesRequest) GetAddressIndex() *v1alpha12.AddressIndex { +func (x *NotesRequest) GetAddressIndex() *v1alpha13.AddressIndex { if x != nil { return x.AddressIndex } return nil } -func (x *NotesRequest) GetAmountToSpend() *v1alpha15.Amount { +func (x *NotesRequest) GetAmountToSpend() *v1alpha16.Amount { if x != nil { return x.AmountToSpend } return nil } -func (x *NotesRequest) GetWalletId() *v1alpha12.WalletId { +func (x *NotesRequest) GetWalletId() *v1alpha13.WalletId { if x != nil { return x.WalletId } @@ -1427,9 +1428,9 @@ type NotesForVotingRequest struct { // The starting height of the proposal. VotableAtHeight uint64 `protobuf:"varint,1,opt,name=votable_at_height,json=votableAtHeight,proto3" json:"votable_at_height,omitempty"` // If set, only return notes with the specified asset id. - AddressIndex *v1alpha12.AddressIndex `protobuf:"bytes,3,opt,name=address_index,json=addressIndex,proto3" json:"address_index,omitempty"` + AddressIndex *v1alpha13.AddressIndex `protobuf:"bytes,3,opt,name=address_index,json=addressIndex,proto3" json:"address_index,omitempty"` // Identifies the wallet id to query. - WalletId *v1alpha12.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` + WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *NotesForVotingRequest) Reset() { @@ -1471,14 +1472,14 @@ func (x *NotesForVotingRequest) GetVotableAtHeight() uint64 { return 0 } -func (x *NotesForVotingRequest) GetAddressIndex() *v1alpha12.AddressIndex { +func (x *NotesForVotingRequest) GetAddressIndex() *v1alpha13.AddressIndex { if x != nil { return x.AddressIndex } return nil } -func (x *NotesForVotingRequest) GetWalletId() *v1alpha12.WalletId { +func (x *NotesForVotingRequest) GetWalletId() *v1alpha13.WalletId { if x != nil { return x.WalletId } @@ -1491,11 +1492,11 @@ type WitnessRequest struct { unknownFields protoimpl.UnknownFields // The note commitments to obtain auth paths for. - NoteCommitments []*v1alpha16.StateCommitment `protobuf:"bytes,2,rep,name=note_commitments,json=noteCommitments,proto3" json:"note_commitments,omitempty"` + NoteCommitments []*v1alpha17.StateCommitment `protobuf:"bytes,2,rep,name=note_commitments,json=noteCommitments,proto3" json:"note_commitments,omitempty"` // The transaction plan to witness TransactionPlan *v1alpha1.TransactionPlan `protobuf:"bytes,3,opt,name=transaction_plan,json=transactionPlan,proto3" json:"transaction_plan,omitempty"` // Identifies the wallet id to query. - WalletId *v1alpha12.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` + WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *WitnessRequest) Reset() { @@ -1530,7 +1531,7 @@ func (*WitnessRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{25} } -func (x *WitnessRequest) GetNoteCommitments() []*v1alpha16.StateCommitment { +func (x *WitnessRequest) GetNoteCommitments() []*v1alpha17.StateCommitment { if x != nil { return x.NoteCommitments } @@ -1544,7 +1545,7 @@ func (x *WitnessRequest) GetTransactionPlan() *v1alpha1.TransactionPlan { return nil } -func (x *WitnessRequest) GetWalletId() *v1alpha12.WalletId { +func (x *WitnessRequest) GetWalletId() *v1alpha13.WalletId { if x != nil { return x.WalletId } @@ -1710,7 +1711,7 @@ type AssetsRequest struct { // the request indicate a filter. Filtered bool `protobuf:"varint,1,opt,name=filtered,proto3" json:"filtered,omitempty"` // Include these specific denominations in the response. - IncludeSpecificDenominations []*v1alpha14.Denom `protobuf:"bytes,2,rep,name=include_specific_denominations,json=includeSpecificDenominations,proto3" json:"include_specific_denominations,omitempty"` + IncludeSpecificDenominations []*v1alpha15.Denom `protobuf:"bytes,2,rep,name=include_specific_denominations,json=includeSpecificDenominations,proto3" json:"include_specific_denominations,omitempty"` // Include all delegation tokens, to any validator, in the response. IncludeDelegationTokens bool `protobuf:"varint,3,opt,name=include_delegation_tokens,json=includeDelegationTokens,proto3" json:"include_delegation_tokens,omitempty"` // Include all unbonding tokens, from any validator, in the response. @@ -1762,7 +1763,7 @@ func (x *AssetsRequest) GetFiltered() bool { return false } -func (x *AssetsRequest) GetIncludeSpecificDenominations() []*v1alpha14.Denom { +func (x *AssetsRequest) GetIncludeSpecificDenominations() []*v1alpha15.Denom { if x != nil { return x.IncludeSpecificDenominations } @@ -1810,7 +1811,7 @@ type AssetsResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DenomMetadata *v1alpha14.DenomMetadata `protobuf:"bytes,2,opt,name=denom_metadata,json=denomMetadata,proto3" json:"denom_metadata,omitempty"` + DenomMetadata *v1alpha15.DenomMetadata `protobuf:"bytes,2,opt,name=denom_metadata,json=denomMetadata,proto3" json:"denom_metadata,omitempty"` } func (x *AssetsResponse) Reset() { @@ -1845,7 +1846,7 @@ func (*AssetsResponse) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{30} } -func (x *AssetsResponse) GetDenomMetadata() *v1alpha14.DenomMetadata { +func (x *AssetsResponse) GetDenomMetadata() *v1alpha15.DenomMetadata { if x != nil { return x.DenomMetadata } @@ -1896,7 +1897,7 @@ type AppParametersResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Parameters *v1alpha17.AppParameters `protobuf:"bytes,1,opt,name=parameters,proto3" json:"parameters,omitempty"` + Parameters *v1alpha18.AppParameters `protobuf:"bytes,1,opt,name=parameters,proto3" json:"parameters,omitempty"` } func (x *AppParametersResponse) Reset() { @@ -1931,7 +1932,7 @@ func (*AppParametersResponse) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{32} } -func (x *AppParametersResponse) GetParameters() *v1alpha17.AppParameters { +func (x *AppParametersResponse) GetParameters() *v1alpha18.AppParameters { if x != nil { return x.Parameters } @@ -1982,7 +1983,7 @@ type GasPricesResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - GasPrices *v1alpha11.GasPrices `protobuf:"bytes,1,opt,name=gas_prices,json=gasPrices,proto3" json:"gas_prices,omitempty"` + GasPrices *v1alpha12.GasPrices `protobuf:"bytes,1,opt,name=gas_prices,json=gasPrices,proto3" json:"gas_prices,omitempty"` } func (x *GasPricesResponse) Reset() { @@ -2017,7 +2018,7 @@ func (*GasPricesResponse) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{34} } -func (x *GasPricesResponse) GetGasPrices() *v1alpha11.GasPrices { +func (x *GasPricesResponse) GetGasPrices() *v1alpha12.GasPrices { if x != nil { return x.GasPrices } @@ -2068,7 +2069,7 @@ type FMDParametersResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Parameters *v1alpha18.FmdParameters `protobuf:"bytes,1,opt,name=parameters,proto3" json:"parameters,omitempty"` + Parameters *v1alpha19.FmdParameters `protobuf:"bytes,1,opt,name=parameters,proto3" json:"parameters,omitempty"` } func (x *FMDParametersResponse) Reset() { @@ -2103,7 +2104,7 @@ func (*FMDParametersResponse) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{36} } -func (x *FMDParametersResponse) GetParameters() *v1alpha18.FmdParameters { +func (x *FMDParametersResponse) GetParameters() *v1alpha19.FmdParameters { if x != nil { return x.Parameters } @@ -2115,11 +2116,11 @@ type NoteByCommitmentRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - NoteCommitment *v1alpha16.StateCommitment `protobuf:"bytes,2,opt,name=note_commitment,json=noteCommitment,proto3" json:"note_commitment,omitempty"` + NoteCommitment *v1alpha17.StateCommitment `protobuf:"bytes,2,opt,name=note_commitment,json=noteCommitment,proto3" json:"note_commitment,omitempty"` // If set to true, waits to return until the requested note is detected. AwaitDetection bool `protobuf:"varint,3,opt,name=await_detection,json=awaitDetection,proto3" json:"await_detection,omitempty"` // Identifies the wallet id to query. - WalletId *v1alpha12.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` + WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *NoteByCommitmentRequest) Reset() { @@ -2154,7 +2155,7 @@ func (*NoteByCommitmentRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{37} } -func (x *NoteByCommitmentRequest) GetNoteCommitment() *v1alpha16.StateCommitment { +func (x *NoteByCommitmentRequest) GetNoteCommitment() *v1alpha17.StateCommitment { if x != nil { return x.NoteCommitment } @@ -2168,7 +2169,7 @@ func (x *NoteByCommitmentRequest) GetAwaitDetection() bool { return false } -func (x *NoteByCommitmentRequest) GetWalletId() *v1alpha12.WalletId { +func (x *NoteByCommitmentRequest) GetWalletId() *v1alpha13.WalletId { if x != nil { return x.WalletId } @@ -2227,11 +2228,11 @@ type SwapByCommitmentRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SwapCommitment *v1alpha16.StateCommitment `protobuf:"bytes,2,opt,name=swap_commitment,json=swapCommitment,proto3" json:"swap_commitment,omitempty"` + SwapCommitment *v1alpha17.StateCommitment `protobuf:"bytes,2,opt,name=swap_commitment,json=swapCommitment,proto3" json:"swap_commitment,omitempty"` // If set to true, waits to return until the requested swap is detected. AwaitDetection bool `protobuf:"varint,3,opt,name=await_detection,json=awaitDetection,proto3" json:"await_detection,omitempty"` // Identifies the wallet id to query. - WalletId *v1alpha12.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` + WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *SwapByCommitmentRequest) Reset() { @@ -2266,7 +2267,7 @@ func (*SwapByCommitmentRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{39} } -func (x *SwapByCommitmentRequest) GetSwapCommitment() *v1alpha16.StateCommitment { +func (x *SwapByCommitmentRequest) GetSwapCommitment() *v1alpha17.StateCommitment { if x != nil { return x.SwapCommitment } @@ -2280,7 +2281,7 @@ func (x *SwapByCommitmentRequest) GetAwaitDetection() bool { return false } -func (x *SwapByCommitmentRequest) GetWalletId() *v1alpha12.WalletId { +func (x *SwapByCommitmentRequest) GetWalletId() *v1alpha13.WalletId { if x != nil { return x.WalletId } @@ -2340,7 +2341,7 @@ type UnclaimedSwapsRequest struct { unknownFields protoimpl.UnknownFields // Identifies the wallet id to query. - WalletId *v1alpha12.WalletId `protobuf:"bytes,1,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` + WalletId *v1alpha13.WalletId `protobuf:"bytes,1,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *UnclaimedSwapsRequest) Reset() { @@ -2375,7 +2376,7 @@ func (*UnclaimedSwapsRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{41} } -func (x *UnclaimedSwapsRequest) GetWalletId() *v1alpha12.WalletId { +func (x *UnclaimedSwapsRequest) GetWalletId() *v1alpha13.WalletId { if x != nil { return x.WalletId } @@ -2434,10 +2435,10 @@ type NullifierStatusRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Nullifier *v1alpha19.Nullifier `protobuf:"bytes,2,opt,name=nullifier,proto3" json:"nullifier,omitempty"` - AwaitDetection bool `protobuf:"varint,3,opt,name=await_detection,json=awaitDetection,proto3" json:"await_detection,omitempty"` + Nullifier *v1alpha110.Nullifier `protobuf:"bytes,2,opt,name=nullifier,proto3" json:"nullifier,omitempty"` + AwaitDetection bool `protobuf:"varint,3,opt,name=await_detection,json=awaitDetection,proto3" json:"await_detection,omitempty"` // Identifies the wallet id to query. - WalletId *v1alpha12.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` + WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *NullifierStatusRequest) Reset() { @@ -2472,7 +2473,7 @@ func (*NullifierStatusRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{43} } -func (x *NullifierStatusRequest) GetNullifier() *v1alpha19.Nullifier { +func (x *NullifierStatusRequest) GetNullifier() *v1alpha110.Nullifier { if x != nil { return x.Nullifier } @@ -2486,7 +2487,7 @@ func (x *NullifierStatusRequest) GetAwaitDetection() bool { return false } -func (x *NullifierStatusRequest) GetWalletId() *v1alpha12.WalletId { +func (x *NullifierStatusRequest) GetWalletId() *v1alpha13.WalletId { if x != nil { return x.WalletId } @@ -2546,7 +2547,7 @@ type TransactionInfoByHashRequest struct { unknownFields protoimpl.UnknownFields // The transaction hash to query for. - Id *v1alpha1.Id `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Id *v1alpha11.TransactionId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` } func (x *TransactionInfoByHashRequest) Reset() { @@ -2581,7 +2582,7 @@ func (*TransactionInfoByHashRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{45} } -func (x *TransactionInfoByHashRequest) GetId() *v1alpha1.Id { +func (x *TransactionInfoByHashRequest) GetId() *v1alpha11.TransactionId { if x != nil { return x.Id } @@ -2653,7 +2654,7 @@ type TransactionInfo struct { // The height the transaction was included in a block, if known. Height uint64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` // The hash of the transaction. - Id *v1alpha1.Id `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Id *v1alpha11.TransactionId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` // The transaction data itself. Transaction *v1alpha1.Transaction `protobuf:"bytes,3,opt,name=transaction,proto3" json:"transaction,omitempty"` // The transaction perspective, as seen by this view server. @@ -2701,7 +2702,7 @@ func (x *TransactionInfo) GetHeight() uint64 { return 0 } -func (x *TransactionInfo) GetId() *v1alpha1.Id { +func (x *TransactionInfo) GetId() *v1alpha11.TransactionId { if x != nil { return x.Id } @@ -2876,7 +2877,7 @@ type NotesForVotingResponse struct { unknownFields protoimpl.UnknownFields NoteRecord *SpendableNoteRecord `protobuf:"bytes,1,opt,name=note_record,json=noteRecord,proto3" json:"note_record,omitempty"` - IdentityKey *v1alpha12.IdentityKey `protobuf:"bytes,2,opt,name=identity_key,json=identityKey,proto3" json:"identity_key,omitempty"` + IdentityKey *v1alpha13.IdentityKey `protobuf:"bytes,2,opt,name=identity_key,json=identityKey,proto3" json:"identity_key,omitempty"` } func (x *NotesForVotingResponse) Reset() { @@ -2918,7 +2919,7 @@ func (x *NotesForVotingResponse) GetNoteRecord() *SpendableNoteRecord { return nil } -func (x *NotesForVotingResponse) GetIdentityKey() *v1alpha12.IdentityKey { +func (x *NotesForVotingResponse) GetIdentityKey() *v1alpha13.IdentityKey { if x != nil { return x.IdentityKey } @@ -2932,13 +2933,13 @@ type SpendableNoteRecord struct { unknownFields protoimpl.UnknownFields // The note commitment, identifying the note. - NoteCommitment *v1alpha16.StateCommitment `protobuf:"bytes,1,opt,name=note_commitment,json=noteCommitment,proto3" json:"note_commitment,omitempty"` + NoteCommitment *v1alpha17.StateCommitment `protobuf:"bytes,1,opt,name=note_commitment,json=noteCommitment,proto3" json:"note_commitment,omitempty"` // The note plaintext itself. - Note *v1alpha110.Note `protobuf:"bytes,2,opt,name=note,proto3" json:"note,omitempty"` + Note *v1alpha111.Note `protobuf:"bytes,2,opt,name=note,proto3" json:"note,omitempty"` // A precomputed decryption of the note's address incore.component.dex.v1alpha1. - AddressIndex *v1alpha12.AddressIndex `protobuf:"bytes,3,opt,name=address_index,json=addressIndex,proto3" json:"address_index,omitempty"` + AddressIndex *v1alpha13.AddressIndex `protobuf:"bytes,3,opt,name=address_index,json=addressIndex,proto3" json:"address_index,omitempty"` // The note's nullifier. - Nullifier *v1alpha19.Nullifier `protobuf:"bytes,4,opt,name=nullifier,proto3" json:"nullifier,omitempty"` + Nullifier *v1alpha110.Nullifier `protobuf:"bytes,4,opt,name=nullifier,proto3" json:"nullifier,omitempty"` // The height at which the note was created. HeightCreated uint64 `protobuf:"varint,5,opt,name=height_created,json=heightCreated,proto3" json:"height_created,omitempty"` // Records whether the note was spent (and if so, at what height). @@ -2946,7 +2947,7 @@ type SpendableNoteRecord struct { // The note position. Position uint64 `protobuf:"varint,7,opt,name=position,proto3" json:"position,omitempty"` // The source of the note - Source *v1alpha19.CommitmentSource `protobuf:"bytes,8,opt,name=source,proto3" json:"source,omitempty"` + Source *v1alpha110.CommitmentSource `protobuf:"bytes,8,opt,name=source,proto3" json:"source,omitempty"` } func (x *SpendableNoteRecord) Reset() { @@ -2981,28 +2982,28 @@ func (*SpendableNoteRecord) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{52} } -func (x *SpendableNoteRecord) GetNoteCommitment() *v1alpha16.StateCommitment { +func (x *SpendableNoteRecord) GetNoteCommitment() *v1alpha17.StateCommitment { if x != nil { return x.NoteCommitment } return nil } -func (x *SpendableNoteRecord) GetNote() *v1alpha110.Note { +func (x *SpendableNoteRecord) GetNote() *v1alpha111.Note { if x != nil { return x.Note } return nil } -func (x *SpendableNoteRecord) GetAddressIndex() *v1alpha12.AddressIndex { +func (x *SpendableNoteRecord) GetAddressIndex() *v1alpha13.AddressIndex { if x != nil { return x.AddressIndex } return nil } -func (x *SpendableNoteRecord) GetNullifier() *v1alpha19.Nullifier { +func (x *SpendableNoteRecord) GetNullifier() *v1alpha110.Nullifier { if x != nil { return x.Nullifier } @@ -3030,7 +3031,7 @@ func (x *SpendableNoteRecord) GetPosition() uint64 { return 0 } -func (x *SpendableNoteRecord) GetSource() *v1alpha19.CommitmentSource { +func (x *SpendableNoteRecord) GetSource() *v1alpha110.CommitmentSource { if x != nil { return x.Source } @@ -3042,13 +3043,13 @@ type SwapRecord struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SwapCommitment *v1alpha16.StateCommitment `protobuf:"bytes,1,opt,name=swap_commitment,json=swapCommitment,proto3" json:"swap_commitment,omitempty"` - Swap *v1alpha111.SwapPlaintext `protobuf:"bytes,2,opt,name=swap,proto3" json:"swap,omitempty"` + SwapCommitment *v1alpha17.StateCommitment `protobuf:"bytes,1,opt,name=swap_commitment,json=swapCommitment,proto3" json:"swap_commitment,omitempty"` + Swap *v1alpha112.SwapPlaintext `protobuf:"bytes,2,opt,name=swap,proto3" json:"swap,omitempty"` Position uint64 `protobuf:"varint,3,opt,name=position,proto3" json:"position,omitempty"` - Nullifier *v1alpha19.Nullifier `protobuf:"bytes,4,opt,name=nullifier,proto3" json:"nullifier,omitempty"` - OutputData *v1alpha111.BatchSwapOutputData `protobuf:"bytes,5,opt,name=output_data,json=outputData,proto3" json:"output_data,omitempty"` + Nullifier *v1alpha110.Nullifier `protobuf:"bytes,4,opt,name=nullifier,proto3" json:"nullifier,omitempty"` + OutputData *v1alpha112.BatchSwapOutputData `protobuf:"bytes,5,opt,name=output_data,json=outputData,proto3" json:"output_data,omitempty"` HeightClaimed uint64 `protobuf:"varint,6,opt,name=height_claimed,json=heightClaimed,proto3" json:"height_claimed,omitempty"` - Source *v1alpha19.CommitmentSource `protobuf:"bytes,7,opt,name=source,proto3" json:"source,omitempty"` + Source *v1alpha110.CommitmentSource `protobuf:"bytes,7,opt,name=source,proto3" json:"source,omitempty"` } func (x *SwapRecord) Reset() { @@ -3083,14 +3084,14 @@ func (*SwapRecord) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{53} } -func (x *SwapRecord) GetSwapCommitment() *v1alpha16.StateCommitment { +func (x *SwapRecord) GetSwapCommitment() *v1alpha17.StateCommitment { if x != nil { return x.SwapCommitment } return nil } -func (x *SwapRecord) GetSwap() *v1alpha111.SwapPlaintext { +func (x *SwapRecord) GetSwap() *v1alpha112.SwapPlaintext { if x != nil { return x.Swap } @@ -3104,14 +3105,14 @@ func (x *SwapRecord) GetPosition() uint64 { return 0 } -func (x *SwapRecord) GetNullifier() *v1alpha19.Nullifier { +func (x *SwapRecord) GetNullifier() *v1alpha110.Nullifier { if x != nil { return x.Nullifier } return nil } -func (x *SwapRecord) GetOutputData() *v1alpha111.BatchSwapOutputData { +func (x *SwapRecord) GetOutputData() *v1alpha112.BatchSwapOutputData { if x != nil { return x.OutputData } @@ -3125,7 +3126,7 @@ func (x *SwapRecord) GetHeightClaimed() uint64 { return 0 } -func (x *SwapRecord) GetSource() *v1alpha19.CommitmentSource { +func (x *SwapRecord) GetSource() *v1alpha110.CommitmentSource { if x != nil { return x.Source } @@ -3138,9 +3139,9 @@ type OwnedPositionIdsRequest struct { unknownFields protoimpl.UnknownFields // If present, return only positions with this position state. - PositionState *v1alpha111.PositionState `protobuf:"bytes,1,opt,name=position_state,json=positionState,proto3" json:"position_state,omitempty"` + PositionState *v1alpha112.PositionState `protobuf:"bytes,1,opt,name=position_state,json=positionState,proto3" json:"position_state,omitempty"` // If present, return only positions for this trading pair. - TradingPair *v1alpha111.TradingPair `protobuf:"bytes,2,opt,name=trading_pair,json=tradingPair,proto3" json:"trading_pair,omitempty"` + TradingPair *v1alpha112.TradingPair `protobuf:"bytes,2,opt,name=trading_pair,json=tradingPair,proto3" json:"trading_pair,omitempty"` } func (x *OwnedPositionIdsRequest) Reset() { @@ -3175,14 +3176,14 @@ func (*OwnedPositionIdsRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{54} } -func (x *OwnedPositionIdsRequest) GetPositionState() *v1alpha111.PositionState { +func (x *OwnedPositionIdsRequest) GetPositionState() *v1alpha112.PositionState { if x != nil { return x.PositionState } return nil } -func (x *OwnedPositionIdsRequest) GetTradingPair() *v1alpha111.TradingPair { +func (x *OwnedPositionIdsRequest) GetTradingPair() *v1alpha112.TradingPair { if x != nil { return x.TradingPair } @@ -3194,7 +3195,7 @@ type OwnedPositionIdsResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - PositionId *v1alpha111.PositionId `protobuf:"bytes,1,opt,name=position_id,json=positionId,proto3" json:"position_id,omitempty"` + PositionId *v1alpha112.PositionId `protobuf:"bytes,1,opt,name=position_id,json=positionId,proto3" json:"position_id,omitempty"` } func (x *OwnedPositionIdsResponse) Reset() { @@ -3229,7 +3230,7 @@ func (*OwnedPositionIdsResponse) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{55} } -func (x *OwnedPositionIdsResponse) GetPositionId() *v1alpha111.PositionId { +func (x *OwnedPositionIdsResponse) GetPositionId() *v1alpha112.PositionId { if x != nil { return x.PositionId } @@ -3243,9 +3244,9 @@ type TransactionPlannerRequest_Output struct { unknownFields protoimpl.UnknownFields // The amount and denomination in which the Output is issued. - Value *v1alpha14.Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + Value *v1alpha15.Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` // The address to which Output will be sent. - Address *v1alpha12.Address `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + Address *v1alpha13.Address `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` } func (x *TransactionPlannerRequest_Output) Reset() { @@ -3280,14 +3281,14 @@ func (*TransactionPlannerRequest_Output) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{4, 0} } -func (x *TransactionPlannerRequest_Output) GetValue() *v1alpha14.Value { +func (x *TransactionPlannerRequest_Output) GetValue() *v1alpha15.Value { if x != nil { return x.Value } return nil } -func (x *TransactionPlannerRequest_Output) GetAddress() *v1alpha12.Address { +func (x *TransactionPlannerRequest_Output) GetAddress() *v1alpha13.Address { if x != nil { return x.Address } @@ -3300,13 +3301,13 @@ type TransactionPlannerRequest_Swap struct { unknownFields protoimpl.UnknownFields // The input amount and denomination to be traded in the Swap. - Value *v1alpha14.Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + Value *v1alpha15.Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` // The denomination to be received as a Output of the Swap. - TargetAsset *v1alpha14.AssetId `protobuf:"bytes,2,opt,name=target_asset,json=targetAsset,proto3" json:"target_asset,omitempty"` + TargetAsset *v1alpha15.AssetId `protobuf:"bytes,2,opt,name=target_asset,json=targetAsset,proto3" json:"target_asset,omitempty"` // The pre-paid fee to be paid for claiming the Swap outputs. - Fee *v1alpha11.Fee `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"` + Fee *v1alpha12.Fee `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"` // The address to which swap claim output will be sent. - ClaimAddress *v1alpha12.Address `protobuf:"bytes,4,opt,name=claim_address,json=claimAddress,proto3" json:"claim_address,omitempty"` + ClaimAddress *v1alpha13.Address `protobuf:"bytes,4,opt,name=claim_address,json=claimAddress,proto3" json:"claim_address,omitempty"` } func (x *TransactionPlannerRequest_Swap) Reset() { @@ -3341,28 +3342,28 @@ func (*TransactionPlannerRequest_Swap) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{4, 1} } -func (x *TransactionPlannerRequest_Swap) GetValue() *v1alpha14.Value { +func (x *TransactionPlannerRequest_Swap) GetValue() *v1alpha15.Value { if x != nil { return x.Value } return nil } -func (x *TransactionPlannerRequest_Swap) GetTargetAsset() *v1alpha14.AssetId { +func (x *TransactionPlannerRequest_Swap) GetTargetAsset() *v1alpha15.AssetId { if x != nil { return x.TargetAsset } return nil } -func (x *TransactionPlannerRequest_Swap) GetFee() *v1alpha11.Fee { +func (x *TransactionPlannerRequest_Swap) GetFee() *v1alpha12.Fee { if x != nil { return x.Fee } return nil } -func (x *TransactionPlannerRequest_Swap) GetClaimAddress() *v1alpha12.Address { +func (x *TransactionPlannerRequest_Swap) GetClaimAddress() *v1alpha13.Address { if x != nil { return x.ClaimAddress } @@ -3377,7 +3378,7 @@ type TransactionPlannerRequest_SwapClaim struct { // SwapCommitment to identify the Swap to be claimed. // Use the commitment from the Swap message: // penumbra.core.component.dex.v1alpha1.Swap.body.payload.commitment. - SwapCommitment *v1alpha16.StateCommitment `protobuf:"bytes,1,opt,name=swap_commitment,json=swapCommitment,proto3" json:"swap_commitment,omitempty"` + SwapCommitment *v1alpha17.StateCommitment `protobuf:"bytes,1,opt,name=swap_commitment,json=swapCommitment,proto3" json:"swap_commitment,omitempty"` } func (x *TransactionPlannerRequest_SwapClaim) Reset() { @@ -3412,7 +3413,7 @@ func (*TransactionPlannerRequest_SwapClaim) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{4, 2} } -func (x *TransactionPlannerRequest_SwapClaim) GetSwapCommitment() *v1alpha16.StateCommitment { +func (x *TransactionPlannerRequest_SwapClaim) GetSwapCommitment() *v1alpha17.StateCommitment { if x != nil { return x.SwapCommitment } @@ -3424,8 +3425,8 @@ type TransactionPlannerRequest_Delegate struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Amount *v1alpha15.Amount `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"` - RateData *v1alpha112.RateData `protobuf:"bytes,3,opt,name=rate_data,json=rateData,proto3" json:"rate_data,omitempty"` + Amount *v1alpha16.Amount `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"` + RateData *v1alpha113.RateData `protobuf:"bytes,3,opt,name=rate_data,json=rateData,proto3" json:"rate_data,omitempty"` } func (x *TransactionPlannerRequest_Delegate) Reset() { @@ -3460,14 +3461,14 @@ func (*TransactionPlannerRequest_Delegate) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{4, 3} } -func (x *TransactionPlannerRequest_Delegate) GetAmount() *v1alpha15.Amount { +func (x *TransactionPlannerRequest_Delegate) GetAmount() *v1alpha16.Amount { if x != nil { return x.Amount } return nil } -func (x *TransactionPlannerRequest_Delegate) GetRateData() *v1alpha112.RateData { +func (x *TransactionPlannerRequest_Delegate) GetRateData() *v1alpha113.RateData { if x != nil { return x.RateData } @@ -3479,8 +3480,8 @@ type TransactionPlannerRequest_Undelegate struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Value *v1alpha14.Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - RateData *v1alpha112.RateData `protobuf:"bytes,2,opt,name=rate_data,json=rateData,proto3" json:"rate_data,omitempty"` + Value *v1alpha15.Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + RateData *v1alpha113.RateData `protobuf:"bytes,2,opt,name=rate_data,json=rateData,proto3" json:"rate_data,omitempty"` } func (x *TransactionPlannerRequest_Undelegate) Reset() { @@ -3515,14 +3516,14 @@ func (*TransactionPlannerRequest_Undelegate) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{4, 4} } -func (x *TransactionPlannerRequest_Undelegate) GetValue() *v1alpha14.Value { +func (x *TransactionPlannerRequest_Undelegate) GetValue() *v1alpha15.Value { if x != nil { return x.Value } return nil } -func (x *TransactionPlannerRequest_Undelegate) GetRateData() *v1alpha112.RateData { +func (x *TransactionPlannerRequest_Undelegate) GetRateData() *v1alpha113.RateData { if x != nil { return x.RateData } @@ -3538,7 +3539,7 @@ type TransactionPlannerRequest_PositionOpen struct { // // Positions are immutable, so the `PositionData` (and hence the `PositionId`) // are unchanged over the entire lifetime of the position. - Position *v1alpha111.Position `protobuf:"bytes,1,opt,name=position,proto3" json:"position,omitempty"` + Position *v1alpha112.Position `protobuf:"bytes,1,opt,name=position,proto3" json:"position,omitempty"` } func (x *TransactionPlannerRequest_PositionOpen) Reset() { @@ -3573,7 +3574,7 @@ func (*TransactionPlannerRequest_PositionOpen) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{4, 5} } -func (x *TransactionPlannerRequest_PositionOpen) GetPosition() *v1alpha111.Position { +func (x *TransactionPlannerRequest_PositionOpen) GetPosition() *v1alpha112.Position { if x != nil { return x.Position } @@ -3586,7 +3587,7 @@ type TransactionPlannerRequest_PositionClose struct { unknownFields protoimpl.UnknownFields // The position to close. - PositionId *v1alpha111.PositionId `protobuf:"bytes,1,opt,name=position_id,json=positionId,proto3" json:"position_id,omitempty"` + PositionId *v1alpha112.PositionId `protobuf:"bytes,1,opt,name=position_id,json=positionId,proto3" json:"position_id,omitempty"` } func (x *TransactionPlannerRequest_PositionClose) Reset() { @@ -3621,7 +3622,7 @@ func (*TransactionPlannerRequest_PositionClose) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{4, 6} } -func (x *TransactionPlannerRequest_PositionClose) GetPositionId() *v1alpha111.PositionId { +func (x *TransactionPlannerRequest_PositionClose) GetPositionId() *v1alpha112.PositionId { if x != nil { return x.PositionId } @@ -3634,11 +3635,11 @@ type TransactionPlannerRequest_PositionWithdraw struct { unknownFields protoimpl.UnknownFields // The position to withdraw. - PositionId *v1alpha111.PositionId `protobuf:"bytes,1,opt,name=position_id,json=positionId,proto3" json:"position_id,omitempty"` + PositionId *v1alpha112.PositionId `protobuf:"bytes,1,opt,name=position_id,json=positionId,proto3" json:"position_id,omitempty"` // The position's final reserves. - Reserves *v1alpha111.Reserves `protobuf:"bytes,2,opt,name=reserves,proto3" json:"reserves,omitempty"` + Reserves *v1alpha112.Reserves `protobuf:"bytes,2,opt,name=reserves,proto3" json:"reserves,omitempty"` // The trading pair of the position. - TradingPair *v1alpha111.TradingPair `protobuf:"bytes,3,opt,name=trading_pair,json=tradingPair,proto3" json:"trading_pair,omitempty"` + TradingPair *v1alpha112.TradingPair `protobuf:"bytes,3,opt,name=trading_pair,json=tradingPair,proto3" json:"trading_pair,omitempty"` } func (x *TransactionPlannerRequest_PositionWithdraw) Reset() { @@ -3673,21 +3674,21 @@ func (*TransactionPlannerRequest_PositionWithdraw) Descriptor() ([]byte, []int) return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{4, 7} } -func (x *TransactionPlannerRequest_PositionWithdraw) GetPositionId() *v1alpha111.PositionId { +func (x *TransactionPlannerRequest_PositionWithdraw) GetPositionId() *v1alpha112.PositionId { if x != nil { return x.PositionId } return nil } -func (x *TransactionPlannerRequest_PositionWithdraw) GetReserves() *v1alpha111.Reserves { +func (x *TransactionPlannerRequest_PositionWithdraw) GetReserves() *v1alpha112.Reserves { if x != nil { return x.Reserves } return nil } -func (x *TransactionPlannerRequest_PositionWithdraw) GetTradingPair() *v1alpha111.TradingPair { +func (x *TransactionPlannerRequest_PositionWithdraw) GetTradingPair() *v1alpha112.TradingPair { if x != nil { return x.TradingPair } @@ -3736,875 +3737,879 @@ var file_penumbra_view_v1alpha1_view_proto_rawDesc = []byte{ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x74, 0x63, 0x74, - 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x63, 0x74, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0xe0, 0x01, 0x0a, 0x18, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, - 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, - 0x12, 0x64, 0x0a, 0x12, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x6e, 0x0a, 0x19, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x78, 0x68, 0x61, 0x73, + 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x78, 0x68, 0x61, 0x73, + 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x74, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0xe0, 0x01, 0x0a, 0x18, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, + 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x10, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x64, 0x0a, 0x12, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x99, 0x01, 0x0a, 0x1b, 0x42, 0x72, 0x6f, 0x61, 0x64, - 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, - 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x81, 0x01, 0x0a, 0x1c, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x64, - 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x8d, 0x14, 0x0a, 0x19, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x70, - 0x69, 0x72, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, - 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x61, 0x22, 0x6e, 0x0a, 0x19, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, + 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, - 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x41, 0x0a, - 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, - 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x49, 0x64, 0x12, 0x52, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, - 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, - 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x4c, 0x0a, 0x05, 0x73, 0x77, 0x61, 0x70, - 0x73, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x99, 0x01, 0x0a, 0x1b, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, + 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, + 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x87, + 0x01, 0x0a, 0x1c, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3c, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, 0x61, + 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, + 0x10, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x8d, 0x14, 0x0a, 0x19, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, + 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x3b, 0x0a, 0x03, 0x66, + 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, + 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, + 0x41, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x12, 0x52, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, - 0x05, 0x73, 0x77, 0x61, 0x70, 0x73, 0x12, 0x5c, 0x0a, 0x0b, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, - 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x73, 0x12, 0x5c, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x4c, 0x0a, 0x05, 0x73, 0x77, + 0x61, 0x70, 0x73, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, - 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x0d, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x32, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, - 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x6e, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x11, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, - 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x3c, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, - 0x79, 0x52, 0x0f, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x11, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x73, 0x18, 0x3d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x61, 0x6c, 0x52, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x61, 0x6c, 0x73, 0x12, 0x65, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x18, 0x46, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x52, 0x0d, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x73, 0x12, 0x68, 0x0a, - 0x0f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, - 0x18, 0x47, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x12, 0x71, 0x0a, 0x12, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x73, 0x18, 0x48, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x52, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x73, 0x1a, 0x83, 0x01, 0x0a, 0x06, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x1a, 0x93, 0x02, 0x0a, 0x04, 0x53, 0x77, 0x61, 0x70, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, + 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x77, 0x61, + 0x70, 0x52, 0x05, 0x73, 0x77, 0x61, 0x70, 0x73, 0x12, 0x5c, 0x0a, 0x0b, 0x73, 0x77, 0x61, 0x70, + 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x0a, 0x73, 0x77, 0x61, 0x70, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x5c, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x0d, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x32, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, + 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x75, 0x6e, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x11, 0x69, 0x62, 0x63, 0x5f, + 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x3c, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, + 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, + 0x6c, 0x61, 0x79, 0x52, 0x0f, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x11, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x73, 0x18, 0x3d, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, + 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x73, 0x12, 0x65, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x18, 0x46, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, + 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x73, 0x12, + 0x68, 0x0a, 0x0f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, + 0x65, 0x73, 0x18, 0x47, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, + 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x12, 0x71, 0x0a, 0x12, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x73, 0x18, + 0x48, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x52, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x73, 0x1a, 0x83, 0x01, 0x0a, + 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x1a, 0x93, 0x02, 0x0a, 0x04, 0x53, 0x77, 0x61, 0x70, 0x12, 0x39, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, - 0x64, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x3b, - 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x49, 0x0a, 0x0d, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x49, 0x64, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x49, 0x0a, + 0x0d, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x63, 0x0a, 0x09, 0x53, 0x77, 0x61, 0x70, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x56, 0x0a, 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, + 0x77, 0x61, 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x95, 0x01, + 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x61, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x96, 0x01, 0x0a, 0x0a, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x4d, 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x5a, + 0x0a, 0x0c, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x4a, + 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x62, 0x0a, 0x0d, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x1a, 0x87, + 0x02, 0x0a, 0x10, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x12, 0x51, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x73, 0x12, 0x54, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, + 0x69, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x54, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0b, 0x74, 0x72, 0x61, + 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x22, 0x65, 0x0a, 0x1a, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x22, + 0x67, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x58, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x22, 0x11, 0x0a, 0x0f, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x56, 0x0a, 0x10, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, + 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x57, 0x0a, + 0x15, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x68, 0x0a, 0x16, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, + 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x22, 0x92, 0x01, 0x0a, 0x17, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0d, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x27, 0x0a, 0x0f, + 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x22, 0x5a, 0x0a, 0x18, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, + 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x63, 0x0a, 0x09, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x12, 0x56, 0x0a, 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, - 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, - 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x95, 0x01, 0x0a, 0x08, - 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x1a, 0x96, 0x01, 0x0a, 0x0a, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x22, 0xb2, 0x01, 0x0a, 0x0f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, + 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x0f, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x52, 0x0d, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x96, 0x01, 0x0a, 0x10, 0x42, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, + 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x3d, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4d, 0x0a, - 0x09, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x5a, 0x0a, 0x0c, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x4a, 0x0a, 0x08, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x62, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x1a, 0x87, 0x02, 0x0a, - 0x10, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, - 0x77, 0x12, 0x51, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, - 0x12, 0x54, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, 0x69, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, - 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x64, 0x69, - 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x22, 0x65, 0x0a, 0x1a, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x22, 0x67, 0x0a, - 0x15, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x22, + 0x25, 0x0a, 0x0d, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x50, 0x0a, 0x0f, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, + 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x03, 0x66, 0x76, 0x6b, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x69, 0x6e, 0x67, + 0x4b, 0x65, 0x79, 0x52, 0x03, 0x66, 0x76, 0x6b, 0x22, 0x4f, 0x0a, 0x10, 0x56, 0x69, 0x65, 0x77, + 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x53, 0x0a, 0x0d, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, - 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x58, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x22, 0x11, 0x0a, 0x0f, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x22, 0x56, 0x0a, 0x10, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, - 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x57, 0x0a, 0x15, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x22, 0x68, 0x0a, 0x16, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, - 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x92, - 0x01, 0x0a, 0x17, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x22, 0x5a, 0x0a, 0x18, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, - 0xb2, 0x01, 0x0a, 0x0f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x0f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, - 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x49, 0x64, 0x52, 0x0d, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x22, 0x96, 0x01, 0x0a, 0x10, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, - 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x25, 0x0a, - 0x0d, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, - 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, - 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x50, 0x0a, 0x0f, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x03, 0x66, 0x76, 0x6b, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x69, 0x6e, 0x67, 0x4b, 0x65, - 0x79, 0x52, 0x03, 0x66, 0x76, 0x6b, 0x22, 0x4f, 0x0a, 0x10, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, - 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x53, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x8b, 0x01, 0x0a, - 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x28, 0x0a, 0x10, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x75, 0x6c, 0x6c, 0x53, - 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, - 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x61, 0x74, - 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, - 0x63, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x22, 0x59, 0x0a, 0x13, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x8b, + 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x75, 0x6c, + 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, + 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, + 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x63, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x22, 0x59, 0x0a, 0x13, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0xab, 0x01, 0x0a, 0x14, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x39, 0x0a, 0x19, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, + 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x16, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, + 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x75, 0x6c, 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, + 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xd5, 0x02, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x61, + 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, + 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x49, 0x64, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, + 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0xab, 0x01, 0x0a, 0x14, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, - 0x0a, 0x19, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x16, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x75, 0x6c, - 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x75, 0x6c, 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, - 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x22, 0xd5, 0x02, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, - 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x61, 0x73, 0x73, - 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x49, 0x64, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0d, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4a, 0x0a, 0x0f, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0d, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x54, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, + 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, + 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4a, 0x0a, + 0x0f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0d, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x54, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, + 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0xd7, 0x01, + 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x6f, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x61, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0f, 0x76, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x74, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, - 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0xd7, 0x01, 0x0a, 0x15, - 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x61, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0f, 0x76, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x8e, 0x02, 0x0a, 0x0e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x10, 0x6e, 0x6f, 0x74, 0x65, - 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, - 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, - 0x61, 0x6e, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x65, 0x0a, 0x0f, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0c, 0x77, 0x69, 0x74, - 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x0b, 0x77, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x22, 0xde, 0x01, - 0x0a, 0x16, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x64, 0x0a, 0x12, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x11, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x6c, - 0x0a, 0x17, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x8e, 0x02, 0x0a, 0x0e, 0x57, 0x69, 0x74, 0x6e, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x10, 0x6e, 0x6f, + 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xab, 0x03, 0x0a, - 0x0d, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x12, 0x69, 0x0a, 0x1e, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x5f, 0x64, - 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x52, 0x1c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x73, 0x12, 0x38, 0x0a, 0x18, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x75, 0x6e, 0x62, - 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x16, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x55, 0x6e, 0x62, 0x6f, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6c, 0x70, 0x5f, 0x6e, 0x66, 0x74, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, 0x70, 0x4e, - 0x66, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x6e, 0x66, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x4e, 0x66, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x5f, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, - 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x70, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x64, 0x0a, 0x0e, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, - 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x6c, 0x61, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, + 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x65, 0x0a, 0x0f, 0x57, 0x69, 0x74, 0x6e, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0c, 0x77, + 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x0b, 0x77, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x22, + 0xde, 0x01, 0x0a, 0x16, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, + 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x64, 0x0a, 0x12, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x11, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, + 0x22, 0x6c, 0x0a, 0x17, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, + 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xab, + 0x03, 0x0a, 0x0d, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x12, 0x69, 0x0a, 0x1e, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, + 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x0d, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x16, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x62, 0x0a, 0x15, 0x41, 0x70, 0x70, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0x12, 0x0a, 0x10, - 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x63, 0x0a, 0x11, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0a, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, - 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x09, 0x67, 0x61, 0x73, 0x50, - 0x72, 0x69, 0x63, 0x65, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6e, 0x0a, - 0x15, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x46, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0xde, 0x01, - 0x0a, 0x17, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x6e, 0x6f, 0x74, - 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, - 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, - 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x6e, - 0x0a, 0x18, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, 0x73, 0x70, - 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, - 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, - 0x0d, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x22, 0xde, - 0x01, 0x0a, 0x17, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x73, 0x77, - 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, - 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x09, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, - 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, - 0x52, 0x0a, 0x18, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x73, - 0x77, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x04, 0x73, - 0x77, 0x61, 0x70, 0x22, 0x5b, 0x0a, 0x15, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, - 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x09, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x52, 0x1c, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x75, + 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x55, 0x6e, + 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x26, 0x0a, + 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6c, 0x70, 0x5f, 0x6e, 0x66, 0x74, 0x73, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, + 0x70, 0x4e, 0x66, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x6e, 0x66, 0x74, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4e, 0x66, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x65, + 0x69, 0x70, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x1a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x64, 0x0a, 0x0e, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, + 0x0a, 0x0e, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x22, 0x16, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x62, 0x0a, 0x15, 0x41, 0x70, + 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0x12, + 0x0a, 0x10, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0a, 0x67, 0x61, 0x73, 0x5f, 0x70, + 0x72, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x09, 0x67, 0x61, + 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x46, 0x4d, 0x44, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x6e, 0x0a, 0x15, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, + 0xde, 0x01, 0x0a, 0x17, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x6e, + 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, + 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x09, + 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, - 0x22, 0x50, 0x0a, 0x16, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, - 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x73, 0x77, - 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x04, 0x73, 0x77, - 0x61, 0x70, 0x22, 0xd4, 0x01, 0x0a, 0x16, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, - 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, - 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, - 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x2f, 0x0a, 0x17, 0x4e, 0x75, 0x6c, - 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x22, 0x56, 0x0a, 0x1c, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, - 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, 0x02, - 0x69, 0x64, 0x22, 0x5a, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xdb, - 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5c, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x73, 0x70, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x12, 0x47, 0x0a, 0x04, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x76, 0x69, 0x65, 0x77, 0x22, 0x5b, 0x0a, 0x17, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, - 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x61, 0x0a, 0x1d, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, - 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, 0x78, - 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x5d, 0x0a, 0x0d, - 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, - 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, - 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, - 0x0a, 0x6e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x16, - 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x72, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, + 0x22, 0x6e, 0x0a, 0x18, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, + 0x73, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, + 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x52, 0x0d, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, + 0x22, 0xde, 0x01, 0x0a, 0x17, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x0f, + 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, + 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, + 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, + 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, + 0x64, 0x22, 0x52, 0x0a, 0x18, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, + 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, - 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x6e, 0x6f, 0x74, 0x65, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, + 0x04, 0x73, 0x77, 0x61, 0x70, 0x22, 0x5b, 0x0a, 0x15, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, + 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x49, 0x64, 0x22, 0x50, 0x0a, 0x16, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, + 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, + 0x73, 0x77, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x04, + 0x73, 0x77, 0x61, 0x70, 0x22, 0xd4, 0x01, 0x0a, 0x16, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x27, + 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, + 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, - 0x79, 0x22, 0x8c, 0x04, 0x0a, 0x13, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, - 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x56, 0x0a, 0x0f, 0x6e, 0x6f, 0x74, - 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x0d, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4d, 0x0a, 0x09, 0x6e, - 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, - 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x6e, - 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x53, - 0x70, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x22, 0xeb, 0x03, 0x0a, 0x0a, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, - 0x56, 0x0a, 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, - 0x70, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, - 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x09, - 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x0b, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x77, 0x61, - 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x12, 0x4e, - 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, + 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x2f, 0x0a, 0x17, 0x4e, + 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x22, 0x5c, 0x0a, 0x1c, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, + 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x22, 0x5a, 0x0a, 0x16, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x65, 0x6e, 0x64, + 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xe1, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x12, 0x3c, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, + 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x5c, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x12, 0x47, 0x0a, 0x04, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x76, 0x69, 0x65, 0x77, 0x22, 0x5b, 0x0a, 0x17, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x61, 0x0a, 0x1d, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, + 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x5d, 0x0a, 0x0d, 0x4e, 0x6f, + 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6e, + 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, + 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x6e, + 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x16, 0x4e, 0x6f, + 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x6e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, + 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, + 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, + 0x8c, 0x04, 0x0a, 0x13, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, + 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x56, 0x0a, 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x5f, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, + 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, + 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, + 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, + 0x21, 0x0a, 0x0c, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x53, 0x70, 0x65, + 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, + 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xcb, - 0x01, 0x0a, 0x17, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5a, 0x0a, 0x0e, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, - 0x67, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, - 0x0b, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x22, 0x6d, 0x0a, 0x18, - 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xeb, + 0x03, 0x0a, 0x0a, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x56, 0x0a, + 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, + 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, + 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, + 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, - 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x32, 0xee, 0x15, 0x0a, 0x13, - 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x57, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x2e, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, + 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x0b, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x77, 0x61, 0x70, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xcb, 0x01, 0x0a, + 0x17, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5a, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, + 0x70, 0x61, 0x69, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x54, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0b, 0x74, + 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x22, 0x6d, 0x0a, 0x18, 0x4f, 0x77, + 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x32, 0xee, 0x15, 0x0a, 0x13, 0x56, 0x69, + 0x65, 0x77, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x57, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0c, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x2b, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, + 0x12, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, + 0x71, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, + 0x67, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, + 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, + 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x30, 0x01, 0x12, 0x5a, 0x0a, 0x07, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0c, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x2b, 0x2e, 0x70, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, + 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, + 0x0a, 0x0f, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, + 0x64, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, + 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, + 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x59, 0x0a, 0x06, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x05, 0x4e, 0x6f, 0x74, - 0x65, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, - 0x01, 0x12, 0x71, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, - 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, - 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, - 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x30, 0x01, 0x12, 0x5a, 0x0a, 0x07, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x12, - 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x72, 0x0a, 0x0f, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, - 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, - 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x06, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x25, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, - 0x6c, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x12, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x6c, 0x0a, + 0x0d, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, - 0x09, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x61, - 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x6c, 0x0a, 0x0d, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x12, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x09, 0x47, + 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, + 0x0d, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, - 0x0e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, - 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, - 0x0a, 0x08, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, - 0x0e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, - 0x0a, 0x10, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, 0x65, - 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, - 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x08, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x73, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x75, 0x0a, 0x10, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, - 0x10, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x42, - 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, - 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, - 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, - 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x0f, 0x4e, 0x75, 0x6c, 0x6c, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x15, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, - 0x79, 0x48, 0x61, 0x73, 0x68, 0x12, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, - 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7b, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x31, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x14, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, - 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, - 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, - 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x10, 0x4f, 0x77, 0x6e, - 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2f, 0x2e, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x12, 0x78, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, - 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x08, + 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2d, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x10, + 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, + 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, + 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x08, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, + 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x30, 0x01, 0x12, 0x75, 0x0a, 0x10, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x10, 0x53, + 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, + 0x77, 0x61, 0x70, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x0f, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, + 0x61, 0x73, 0x68, 0x12, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, + 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x74, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7b, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x14, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, + 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, + 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x10, 0x4f, 0x77, 0x6e, 0x65, 0x64, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, + 0x12, 0x78, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, + 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, - 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x70, 0x0a, 0x0f, 0x56, 0x69, + 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, + 0x08, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, - 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x70, 0x0a, 0x0f, - 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x5d, 0x0a, 0x08, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x12, 0x27, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x69, - 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xf5, - 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x09, 0x56, - 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x52, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, - 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2f, 0x76, 0x69, 0x65, 0x77, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x3b, 0x76, 0x69, 0x65, 0x77, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, - 0x03, 0x50, 0x56, 0x58, 0xaa, 0x02, 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x16, - 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x50, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x56, 0x69, 0x65, 0x77, 0x3a, 0x3a, 0x56, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, + 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xf5, 0x01, 0x0a, + 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x09, 0x56, 0x69, 0x65, + 0x77, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x52, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, + 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2f, 0x76, 0x69, 0x65, 0x77, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, + 0x76, 0x69, 0x65, 0x77, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, + 0x56, 0x58, 0xaa, 0x02, 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x56, 0x69, + 0x65, 0x77, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x16, 0x50, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, + 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, + 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x50, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x56, 0x69, 0x65, 0x77, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4688,46 +4693,46 @@ var file_penumbra_view_v1alpha1_view_proto_goTypes = []interface{}{ (*v1alpha1.TransactionPlan)(nil), // 64: penumbra.core.transaction.v1alpha1.TransactionPlan (*v1alpha1.AuthorizationData)(nil), // 65: penumbra.core.transaction.v1alpha1.AuthorizationData (*v1alpha1.Transaction)(nil), // 66: penumbra.core.transaction.v1alpha1.Transaction - (*v1alpha1.Id)(nil), // 67: penumbra.core.transaction.v1alpha1.Id - (*v1alpha11.Fee)(nil), // 68: penumbra.core.component.fee.v1alpha1.Fee + (*v1alpha11.TransactionId)(nil), // 67: penumbra.core.txhash.v1alpha1.TransactionId + (*v1alpha12.Fee)(nil), // 68: penumbra.core.component.fee.v1alpha1.Fee (*v1alpha1.MemoPlaintext)(nil), // 69: penumbra.core.transaction.v1alpha1.MemoPlaintext - (*v1alpha12.AddressIndex)(nil), // 70: penumbra.core.keys.v1alpha1.AddressIndex - (*v1alpha12.WalletId)(nil), // 71: penumbra.core.keys.v1alpha1.WalletId - (*v1alpha13.IbcRelay)(nil), // 72: penumbra.core.component.ibc.v1alpha1.IbcRelay - (*v1alpha13.Ics20Withdrawal)(nil), // 73: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - (*v1alpha12.Address)(nil), // 74: penumbra.core.keys.v1alpha1.Address - (*v1alpha14.AssetId)(nil), // 75: penumbra.core.asset.v1alpha1.AssetId - (*v1alpha14.Value)(nil), // 76: penumbra.core.asset.v1alpha1.Value - (*v1alpha12.FullViewingKey)(nil), // 77: penumbra.core.keys.v1alpha1.FullViewingKey - (*v1alpha15.Amount)(nil), // 78: penumbra.core.num.v1alpha1.Amount - (*v1alpha16.StateCommitment)(nil), // 79: penumbra.crypto.tct.v1alpha1.StateCommitment + (*v1alpha13.AddressIndex)(nil), // 70: penumbra.core.keys.v1alpha1.AddressIndex + (*v1alpha13.WalletId)(nil), // 71: penumbra.core.keys.v1alpha1.WalletId + (*v1alpha14.IbcRelay)(nil), // 72: penumbra.core.component.ibc.v1alpha1.IbcRelay + (*v1alpha14.Ics20Withdrawal)(nil), // 73: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + (*v1alpha13.Address)(nil), // 74: penumbra.core.keys.v1alpha1.Address + (*v1alpha15.AssetId)(nil), // 75: penumbra.core.asset.v1alpha1.AssetId + (*v1alpha15.Value)(nil), // 76: penumbra.core.asset.v1alpha1.Value + (*v1alpha13.FullViewingKey)(nil), // 77: penumbra.core.keys.v1alpha1.FullViewingKey + (*v1alpha16.Amount)(nil), // 78: penumbra.core.num.v1alpha1.Amount + (*v1alpha17.StateCommitment)(nil), // 79: penumbra.crypto.tct.v1alpha1.StateCommitment (*v1alpha1.WitnessData)(nil), // 80: penumbra.core.transaction.v1alpha1.WitnessData - (*v1alpha14.Denom)(nil), // 81: penumbra.core.asset.v1alpha1.Denom - (*v1alpha14.DenomMetadata)(nil), // 82: penumbra.core.asset.v1alpha1.DenomMetadata - (*v1alpha17.AppParameters)(nil), // 83: penumbra.core.app.v1alpha1.AppParameters - (*v1alpha11.GasPrices)(nil), // 84: penumbra.core.component.fee.v1alpha1.GasPrices - (*v1alpha18.FmdParameters)(nil), // 85: penumbra.core.component.chain.v1alpha1.FmdParameters - (*v1alpha19.Nullifier)(nil), // 86: penumbra.core.component.sct.v1alpha1.Nullifier + (*v1alpha15.Denom)(nil), // 81: penumbra.core.asset.v1alpha1.Denom + (*v1alpha15.DenomMetadata)(nil), // 82: penumbra.core.asset.v1alpha1.DenomMetadata + (*v1alpha18.AppParameters)(nil), // 83: penumbra.core.app.v1alpha1.AppParameters + (*v1alpha12.GasPrices)(nil), // 84: penumbra.core.component.fee.v1alpha1.GasPrices + (*v1alpha19.FmdParameters)(nil), // 85: penumbra.core.component.chain.v1alpha1.FmdParameters + (*v1alpha110.Nullifier)(nil), // 86: penumbra.core.component.sct.v1alpha1.Nullifier (*v1alpha1.TransactionPerspective)(nil), // 87: penumbra.core.transaction.v1alpha1.TransactionPerspective (*v1alpha1.TransactionView)(nil), // 88: penumbra.core.transaction.v1alpha1.TransactionView - (*v1alpha12.IdentityKey)(nil), // 89: penumbra.core.keys.v1alpha1.IdentityKey - (*v1alpha110.Note)(nil), // 90: penumbra.core.component.shielded_pool.v1alpha1.Note - (*v1alpha19.CommitmentSource)(nil), // 91: penumbra.core.component.sct.v1alpha1.CommitmentSource - (*v1alpha111.SwapPlaintext)(nil), // 92: penumbra.core.component.dex.v1alpha1.SwapPlaintext - (*v1alpha111.BatchSwapOutputData)(nil), // 93: penumbra.core.component.dex.v1alpha1.BatchSwapOutputData - (*v1alpha111.PositionState)(nil), // 94: penumbra.core.component.dex.v1alpha1.PositionState - (*v1alpha111.TradingPair)(nil), // 95: penumbra.core.component.dex.v1alpha1.TradingPair - (*v1alpha111.PositionId)(nil), // 96: penumbra.core.component.dex.v1alpha1.PositionId - (*v1alpha112.RateData)(nil), // 97: penumbra.core.component.stake.v1alpha1.RateData - (*v1alpha111.Position)(nil), // 98: penumbra.core.component.dex.v1alpha1.Position - (*v1alpha111.Reserves)(nil), // 99: penumbra.core.component.dex.v1alpha1.Reserves + (*v1alpha13.IdentityKey)(nil), // 89: penumbra.core.keys.v1alpha1.IdentityKey + (*v1alpha111.Note)(nil), // 90: penumbra.core.component.shielded_pool.v1alpha1.Note + (*v1alpha110.CommitmentSource)(nil), // 91: penumbra.core.component.sct.v1alpha1.CommitmentSource + (*v1alpha112.SwapPlaintext)(nil), // 92: penumbra.core.component.dex.v1alpha1.SwapPlaintext + (*v1alpha112.BatchSwapOutputData)(nil), // 93: penumbra.core.component.dex.v1alpha1.BatchSwapOutputData + (*v1alpha112.PositionState)(nil), // 94: penumbra.core.component.dex.v1alpha1.PositionState + (*v1alpha112.TradingPair)(nil), // 95: penumbra.core.component.dex.v1alpha1.TradingPair + (*v1alpha112.PositionId)(nil), // 96: penumbra.core.component.dex.v1alpha1.PositionId + (*v1alpha113.RateData)(nil), // 97: penumbra.core.component.stake.v1alpha1.RateData + (*v1alpha112.Position)(nil), // 98: penumbra.core.component.dex.v1alpha1.Position + (*v1alpha112.Reserves)(nil), // 99: penumbra.core.component.dex.v1alpha1.Reserves } var file_penumbra_view_v1alpha1_view_proto_depIdxs = []int32{ 64, // 0: penumbra.view.v1alpha1.AuthorizeAndBuildRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan 65, // 1: penumbra.view.v1alpha1.AuthorizeAndBuildRequest.authorization_data:type_name -> penumbra.core.transaction.v1alpha1.AuthorizationData 66, // 2: penumbra.view.v1alpha1.AuthorizeAndBuildResponse.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction 66, // 3: penumbra.view.v1alpha1.BroadcastTransactionRequest.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction - 67, // 4: penumbra.view.v1alpha1.BroadcastTransactionResponse.id:type_name -> penumbra.core.transaction.v1alpha1.Id + 67, // 4: penumbra.view.v1alpha1.BroadcastTransactionResponse.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId 68, // 5: penumbra.view.v1alpha1.TransactionPlannerRequest.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee 69, // 6: penumbra.view.v1alpha1.TransactionPlannerRequest.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext 70, // 7: penumbra.view.v1alpha1.TransactionPlannerRequest.source:type_name -> penumbra.core.keys.v1alpha1.AddressIndex @@ -4786,8 +4791,8 @@ var file_penumbra_view_v1alpha1_view_proto_depIdxs = []int32{ 53, // 60: penumbra.view.v1alpha1.UnclaimedSwapsResponse.swap:type_name -> penumbra.view.v1alpha1.SwapRecord 86, // 61: penumbra.view.v1alpha1.NullifierStatusRequest.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier 71, // 62: penumbra.view.v1alpha1.NullifierStatusRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 67, // 63: penumbra.view.v1alpha1.TransactionInfoByHashRequest.id:type_name -> penumbra.core.transaction.v1alpha1.Id - 67, // 64: penumbra.view.v1alpha1.TransactionInfo.id:type_name -> penumbra.core.transaction.v1alpha1.Id + 67, // 63: penumbra.view.v1alpha1.TransactionInfoByHashRequest.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId + 67, // 64: penumbra.view.v1alpha1.TransactionInfo.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId 66, // 65: penumbra.view.v1alpha1.TransactionInfo.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction 87, // 66: penumbra.view.v1alpha1.TransactionInfo.perspective:type_name -> penumbra.core.transaction.v1alpha1.TransactionPerspective 88, // 67: penumbra.view.v1alpha1.TransactionInfo.view:type_name -> penumbra.core.transaction.v1alpha1.TransactionView diff --git a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto index a2a195fc78..c3b6db30de 100644 --- a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto +++ b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto @@ -25,11 +25,6 @@ message Transaction { crypto.tct.v1alpha1.MerkleRoot anchor = 3; } -// A transaction ID, the Sha256 hash of a transaction. -message Id { - bytes hash = 1; -} - // The body of a transaction. message TransactionBody { // A list of actions (state changes) performed by this transaction. @@ -117,7 +112,7 @@ message TransactionPerspective { // Any relevant denoms for viewed assets. repeated asset.v1alpha1.DenomMetadata denoms = 5; // The transaction ID associated with this TransactionPerspective - transaction.v1alpha1.Id transaction_id = 6; + txhash.v1alpha1.TransactionId transaction_id = 6; } message PayloadKeyWithCommitment { diff --git a/proto/penumbra/penumbra/core/txhash/v1alpha1/txhash.proto b/proto/penumbra/penumbra/core/txhash/v1alpha1/txhash.proto index 4480f74a84..64c37096ad 100644 --- a/proto/penumbra/penumbra/core/txhash/v1alpha1/txhash.proto +++ b/proto/penumbra/penumbra/core/txhash/v1alpha1/txhash.proto @@ -6,3 +6,10 @@ package penumbra.core.txhash.v1alpha1; message EffectHash { bytes inner = 1; } + +// A transaction ID, the Sha256 hash of a transaction. +// +// This is the hash of the plain byte encoding, used by Tendermint. +message TransactionId { + bytes inner = 1; +} \ No newline at end of file diff --git a/proto/penumbra/penumbra/view/v1alpha1/view.proto b/proto/penumbra/penumbra/view/v1alpha1/view.proto index 03fc754067..9dc75986e6 100644 --- a/proto/penumbra/penumbra/view/v1alpha1/view.proto +++ b/proto/penumbra/penumbra/view/v1alpha1/view.proto @@ -14,6 +14,7 @@ import "penumbra/core/component/stake/v1alpha1/stake.proto"; import "penumbra/core/keys/v1alpha1/keys.proto"; import "penumbra/core/num/v1alpha1/num.proto"; import "penumbra/core/transaction/v1alpha1/transaction.proto"; +import "penumbra/core/txhash/v1alpha1/txhash.proto"; import "penumbra/crypto/tct/v1alpha1/tct.proto"; // The view protocol is used by a view client, who wants to do some @@ -130,7 +131,7 @@ message BroadcastTransactionRequest { message BroadcastTransactionResponse { // The hash of the transaction that was broadcast. - core.transaction.v1alpha1.Id id = 1; + core.txhash.v1alpha1.TransactionId id = 1; // The height in which the transaction was detected as included in the chain, if any. // Will not be included unless await_detection was true. uint64 detection_height = 2; @@ -461,7 +462,7 @@ message NullifierStatusResponse { message TransactionInfoByHashRequest { // The transaction hash to query for. - core.transaction.v1alpha1.Id id = 2; + core.txhash.v1alpha1.TransactionId id = 2; } message TransactionInfoRequest { @@ -475,7 +476,7 @@ message TransactionInfo { // The height the transaction was included in a block, if known. uint64 height = 1; // The hash of the transaction. - core.transaction.v1alpha1.Id id = 2; + core.txhash.v1alpha1.TransactionId id = 2; // The transaction data itself. core.transaction.v1alpha1.Transaction transaction = 3; // The transaction perspective, as seen by this view server. From 64c170c73701b4906bca48ef5b4bbd79f9dc9465 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Sat, 30 Dec 2023 12:51:31 -0500 Subject: [PATCH 17/84] txhash: move chain::TransactionContext into txhash --- Cargo.lock | 1 + crates/core/app/src/action_handler/actions.rs | 2 +- crates/core/app/src/tests/spend.rs | 4 ++-- crates/core/component/chain/src/effect_hash.rs | 1 - crates/core/component/chain/src/lib.rs | 5 ----- .../component/dex/src/component/action_handler/swap_claim.rs | 2 +- .../governance/src/action_handler/delegator_vote.rs | 2 +- .../shielded-pool/src/component/action_handler/spend.rs | 2 +- crates/core/transaction/src/transaction.rs | 5 +++-- crates/core/txhash/Cargo.toml | 1 + .../chain/src/transaction.rs => txhash/src/context.rs} | 2 +- crates/core/txhash/src/lib.rs | 2 ++ 12 files changed, 14 insertions(+), 15 deletions(-) delete mode 100644 crates/core/component/chain/src/effect_hash.rs rename crates/core/{component/chain/src/transaction.rs => txhash/src/context.rs} (91%) diff --git a/Cargo.lock b/Cargo.lock index a633017bb3..14a92dd8e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5927,6 +5927,7 @@ dependencies = [ "blake2b_simd 0.5.11", "hex", "penumbra-proto", + "penumbra-tct", "serde", ] diff --git a/crates/core/app/src/action_handler/actions.rs b/crates/core/app/src/action_handler/actions.rs index d85894ccdb..d56f7745ca 100644 --- a/crates/core/app/src/action_handler/actions.rs +++ b/crates/core/app/src/action_handler/actions.rs @@ -3,10 +3,10 @@ use std::sync::Arc; use anyhow::Result; use async_trait::async_trait; use cnidarium::{StateRead, StateWrite}; -use penumbra_chain::TransactionContext; use penumbra_ibc::component::StateReadExt as _; use penumbra_shielded_pool::component::Ics20Transfer; use penumbra_transaction::Action; +use penumbra_txhash::TransactionContext; mod submit; diff --git a/crates/core/app/src/tests/spend.rs b/crates/core/app/src/tests/spend.rs index d50ad794b0..ffd212d953 100644 --- a/crates/core/app/src/tests/spend.rs +++ b/crates/core/app/src/tests/spend.rs @@ -5,14 +5,14 @@ use cnidarium::{ArcStateDeltaExt, StateDelta, TempStorage}; use cnidarium_component::{ActionHandler as _, Component}; use decaf377_rdsa::SigningKey; use penumbra_asset::Value; -use penumbra_chain::{component::StateWriteExt, TransactionContext}; +use penumbra_chain::component::StateWriteExt; use penumbra_compact_block::component::CompactBlockManager; use penumbra_keys::{test_keys, PayloadKey}; use penumbra_num::Amount; use penumbra_sct::component::SourceContext; use penumbra_shielded_pool::{component::ShieldedPool, SpendPlan}; use penumbra_transaction::{Transaction, TransactionBody, TransactionParameters}; -use penumbra_txhash::{AuthorizingData, EffectHash}; +use penumbra_txhash::{AuthorizingData, EffectHash, TransactionContext}; use rand_core::SeedableRng; use tendermint::abci; diff --git a/crates/core/component/chain/src/effect_hash.rs b/crates/core/component/chain/src/effect_hash.rs deleted file mode 100644 index 8b13789179..0000000000 --- a/crates/core/component/chain/src/effect_hash.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/core/component/chain/src/lib.rs b/crates/core/component/chain/src/lib.rs index 391404be2b..74ff0dacb1 100644 --- a/crates/core/component/chain/src/lib.rs +++ b/crates/core/component/chain/src/lib.rs @@ -2,7 +2,6 @@ #![cfg_attr(docsrs, feature(doc_cfg))] pub use epoch::Epoch; -pub use transaction::TransactionContext; mod epoch; @@ -16,7 +15,3 @@ pub mod component; pub mod genesis; pub mod params; pub mod state_key; - -// Located here at the bottom of the dep tree for convenience -mod effect_hash; -mod transaction; diff --git a/crates/core/component/dex/src/component/action_handler/swap_claim.rs b/crates/core/component/dex/src/component/action_handler/swap_claim.rs index b2e4eeb89d..6b24558645 100644 --- a/crates/core/component/dex/src/component/action_handler/swap_claim.rs +++ b/crates/core/component/dex/src/component/action_handler/swap_claim.rs @@ -4,7 +4,7 @@ use anyhow::{Context, Result}; use async_trait::async_trait; use cnidarium_component::ActionHandler; use penumbra_chain::component::StateReadExt as _; -use penumbra_chain::TransactionContext; +use penumbra_txhash::TransactionContext; use cnidarium::{StateRead, StateWrite}; use penumbra_proof_params::SWAPCLAIM_PROOF_VERIFICATION_KEY; diff --git a/crates/core/component/governance/src/action_handler/delegator_vote.rs b/crates/core/component/governance/src/action_handler/delegator_vote.rs index eff8354f39..bcd978ad16 100644 --- a/crates/core/component/governance/src/action_handler/delegator_vote.rs +++ b/crates/core/component/governance/src/action_handler/delegator_vote.rs @@ -5,8 +5,8 @@ use ark_ff::Zero; use async_trait::async_trait; use cnidarium::{StateRead, StateWrite}; use decaf377::Fr; -use penumbra_chain::TransactionContext; use penumbra_proof_params::DELEGATOR_VOTE_PROOF_VERIFICATION_KEY; +use penumbra_txhash::TransactionContext; use crate::{ DelegatorVote, DelegatorVoteBody, diff --git a/crates/core/component/shielded-pool/src/component/action_handler/spend.rs b/crates/core/component/shielded-pool/src/component/action_handler/spend.rs index 0c74eb6e78..b4b9c3d7c1 100644 --- a/crates/core/component/shielded-pool/src/component/action_handler/spend.rs +++ b/crates/core/component/shielded-pool/src/component/action_handler/spend.rs @@ -4,10 +4,10 @@ use anyhow::{Context, Result}; use async_trait::async_trait; use cnidarium::{StateRead, StateWrite}; use cnidarium_component::ActionHandler; -use penumbra_chain::TransactionContext; use penumbra_proof_params::SPEND_PROOF_VERIFICATION_KEY; use penumbra_proto::StateWriteProto as _; use penumbra_sct::component::{SctManager, SourceContext, StateReadExt as _}; +use penumbra_txhash::TransactionContext; use crate::{event, Spend}; diff --git a/crates/core/transaction/src/transaction.rs b/crates/core/transaction/src/transaction.rs index 545da86a46..0b2ddf013c 100644 --- a/crates/core/transaction/src/transaction.rs +++ b/crates/core/transaction/src/transaction.rs @@ -7,7 +7,6 @@ use anyhow::{Context, Error}; use ark_ff::Zero; use decaf377::Fr; use decaf377_rdsa::{Binding, Signature, VerificationKey, VerificationKeyBytes}; -use penumbra_chain::TransactionContext; use penumbra_community_pool::{CommunityPoolDeposit, CommunityPoolOutput, CommunityPoolSpend}; use penumbra_dex::{ lp::action::{PositionClose, PositionOpen}, @@ -25,7 +24,9 @@ use penumbra_shielded_pool::{Note, Output, Spend}; use penumbra_stake::{Delegate, Undelegate, UndelegateClaim}; use penumbra_tct as tct; use penumbra_tct::StateCommitment; -use penumbra_txhash::{AuthHash, AuthorizingData, EffectHash, EffectingData, TransactionId}; +use penumbra_txhash::{ + AuthHash, AuthorizingData, EffectHash, EffectingData, TransactionContext, TransactionId, +}; use serde::{Deserialize, Serialize}; use crate::{ diff --git a/crates/core/txhash/Cargo.toml b/crates/core/txhash/Cargo.toml index 6b0be96e93..410eb951a0 100644 --- a/crates/core/txhash/Cargo.toml +++ b/crates/core/txhash/Cargo.toml @@ -6,6 +6,7 @@ edition = "2021" [dependencies] # Workspace dependencies penumbra-proto = { path = "../../proto", default-features = false } +penumbra-tct = { path = "../../crypto/tct" } anyhow = "1" hex = "0.4" blake2b_simd = "0.5" diff --git a/crates/core/component/chain/src/transaction.rs b/crates/core/txhash/src/context.rs similarity index 91% rename from crates/core/component/chain/src/transaction.rs rename to crates/core/txhash/src/context.rs index 7f731ef20f..672d003ac4 100644 --- a/crates/core/component/chain/src/transaction.rs +++ b/crates/core/txhash/src/context.rs @@ -1,5 +1,5 @@ +use crate::EffectHash; use penumbra_tct as tct; -use penumbra_txhash::EffectHash; /// Stateless verification context for a transaction. /// diff --git a/crates/core/txhash/src/lib.rs b/crates/core/txhash/src/lib.rs index 8bded27042..a32cdd483f 100644 --- a/crates/core/txhash/src/lib.rs +++ b/crates/core/txhash/src/lib.rs @@ -1,9 +1,11 @@ mod auth_hash; +mod context; mod effect_hash; mod effecting_data; mod transaction_id; pub use auth_hash::{AuthHash, AuthorizingData}; +pub use context::TransactionContext; pub use effect_hash::EffectHash; pub use effecting_data::EffectingData; pub use transaction_id::TransactionId; From e10e07d1e6756368c15a44a5ea5c2a98f37c30bd Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Mon, 1 Jan 2024 16:39:40 -0500 Subject: [PATCH 18/84] proto: run buf format --- .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 340367 -> 340366 bytes .../v1alpha1/shielded_pool.pb.go | 8 +-- .../transaction/v1alpha1/transaction.pb.go | 58 +++++++++--------- .../cnidarium/v1alpha1/cnidarium.proto | 2 +- .../core/component/sct/v1alpha1/sct.proto | 8 +-- .../v1alpha1/shielded_pool.proto | 2 +- .../transaction/v1alpha1/transaction.proto | 2 +- .../core/txhash/v1alpha1/txhash.proto | 2 +- 8 files changed, 40 insertions(+), 42 deletions(-) diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index ff94835c341d886e198f19ddcd04f8c762594de3..e1e23147c8486cba7d5a96b30733f27ce6fe09df 100644 GIT binary patch delta 281 zcmeBwEYkN_q+tsqV?NV*)#-&1j8fC(TN%YBo9ReRUr@-%vpq7O@i8mc8woBpAr=OP zQ1R&>;uz(or<5{&Wfa*SRmQl4nNeZ;|4POzb{-QhCN>5k=1>N4Db48z*Dy+LpU}v7 zglYQmEN02+=Zl!cr-!sKZrpC#%D7HI*Mf_ai;0;@h?$ka0L)|-VrFB|12b8KnAsUz zz)V&lW)22}?E=#n=il7URK!#}b^H2!reLP+_3X?W7$HW>7cq%Vw`pWH+`gNW*^Y7g z)b%Vnj26@7)-g*>pUciHx7~=Fd7<|7z!gklJZ=aJET%s$W!C0_*v=`$%)?;Pu4B%; KUB{dy`4<3*%17t` delta 246 zcmeBsEYkm2q+tsqV?NUc)#-&1j8fZW^BLvYINwTeu?ev-FoaFMs3$)?rIhh2qv-ai zGR7s$jEdX;S2AX?bD456u`vj-gffIp=X=B?yS=}W@d(p&y+}si=@(iUQ>Le{V=>rn z(#p6_K-YkalZ%O&Nr;)1K@ZGi7Gh>&Z~-$}gqYbGAPQK8m^m0Mw)0P8oPTq>HY;;5 z)An`wOtn+D*ReBiV4OZ>J&Vrt8*5n-w)b%|+c9qc!Nq(_o6%%?T_>}`^oOO)V$;uQ jFma3ffQ{u4V&-PB0W&#;n0Xis+O^G@w`-fTB>w^c+qXW6 diff --git a/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go b/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go index eb6f342a64..1c7712332b 100644 --- a/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go +++ b/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go @@ -1575,7 +1575,10 @@ var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_rawD 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x28, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, + 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, @@ -1587,9 +1590,6 @@ var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_rawD 0x73, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x74, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x63, 0x74, 0x2f, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x97, 0x01, 0x0a, 0x04, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, diff --git a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go index ab2683e377..13e1bb2f81 100644 --- a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go +++ b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go @@ -2495,35 +2495,35 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x28, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, - 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2f, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x65, 0x78, 0x2f, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x66, 0x65, 0x65, 0x2f, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x66, 0x65, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x3c, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x69, 0x62, 0x63, 0x2f, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, 0x62, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x42, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, - 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, - 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x74, 0x61, 0x6b, - 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x38, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, + 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x65, + 0x78, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x78, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, + 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x66, 0x65, + 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x66, 0x65, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3c, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, + 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x69, 0x62, 0x63, 0x2f, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, 0x62, 0x63, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x63, 0x74, 0x2f, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x42, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, + 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, + 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2f, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x2a, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2f, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x38, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x66, 0x6d, 0x64, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x66, diff --git a/proto/penumbra/penumbra/cnidarium/v1alpha1/cnidarium.proto b/proto/penumbra/penumbra/cnidarium/v1alpha1/cnidarium.proto index dc1f14d084..4964fd52e6 100644 --- a/proto/penumbra/penumbra/cnidarium/v1alpha1/cnidarium.proto +++ b/proto/penumbra/penumbra/cnidarium/v1alpha1/cnidarium.proto @@ -95,4 +95,4 @@ message WatchResponse { KeyValue kv = 5; NvKeyValue nv_kv = 6; } -} \ No newline at end of file +} diff --git a/proto/penumbra/penumbra/core/component/sct/v1alpha1/sct.proto b/proto/penumbra/penumbra/core/component/sct/v1alpha1/sct.proto index 42b1376798..fd5fa67450 100644 --- a/proto/penumbra/penumbra/core/component/sct/v1alpha1/sct.proto +++ b/proto/penumbra/penumbra/core/component/sct/v1alpha1/sct.proto @@ -9,7 +9,7 @@ import "penumbra/crypto/tct/v1alpha1/tct.proto"; // decide whether or not to download block data. message CommitmentSource { // The state commitment was included in the genesis state. - message Genesis { } + message Genesis {} // The commitment was created by a transaction. // // When included in a `CompactBlock` via a `StatePayload`, the transaction source is "dehydrated" @@ -28,7 +28,7 @@ message CommitmentSource { uint64 epoch_index = 1; } // The commitment was created through a `CommunityPoolOutput` in a governance-initated transaction. - message CommunityPoolOutput { } + message CommunityPoolOutput {} // The commitment was created by an inbound ICS20 transfer. message Ics20Transfer { // The sequence number of the packet that triggered the transfer @@ -83,6 +83,4 @@ message EventBlockRoot { } // Query operations for the SCT component. -service QueryService { -} - +service QueryService {} diff --git a/proto/penumbra/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto b/proto/penumbra/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto index 06b155dd68..fbf42f9ea2 100644 --- a/proto/penumbra/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto +++ b/proto/penumbra/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto @@ -2,11 +2,11 @@ syntax = "proto3"; package penumbra.core.component.shielded_pool.v1alpha1; import "penumbra/core/asset/v1alpha1/asset.proto"; +import "penumbra/core/component/sct/v1alpha1/sct.proto"; import "penumbra/core/keys/v1alpha1/keys.proto"; import "penumbra/core/num/v1alpha1/num.proto"; import "penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.proto"; import "penumbra/crypto/tct/v1alpha1/tct.proto"; -import "penumbra/core/component/sct/v1alpha1/sct.proto"; message Note { asset.v1alpha1.Value value = 1; diff --git a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto index c3b6db30de..1a9f13f109 100644 --- a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto +++ b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto @@ -2,7 +2,6 @@ syntax = "proto3"; package penumbra.core.transaction.v1alpha1; import "penumbra/core/asset/v1alpha1/asset.proto"; -import "penumbra/core/txhash/v1alpha1/txhash.proto"; import "penumbra/core/component/dex/v1alpha1/dex.proto"; import "penumbra/core/component/fee/v1alpha1/fee.proto"; import "penumbra/core/component/governance/v1alpha1/governance.proto"; @@ -11,6 +10,7 @@ import "penumbra/core/component/sct/v1alpha1/sct.proto"; import "penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto"; import "penumbra/core/component/stake/v1alpha1/stake.proto"; import "penumbra/core/keys/v1alpha1/keys.proto"; +import "penumbra/core/txhash/v1alpha1/txhash.proto"; import "penumbra/crypto/decaf377_fmd/v1alpha1/decaf377_fmd.proto"; import "penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.proto"; import "penumbra/crypto/tct/v1alpha1/tct.proto"; diff --git a/proto/penumbra/penumbra/core/txhash/v1alpha1/txhash.proto b/proto/penumbra/penumbra/core/txhash/v1alpha1/txhash.proto index 64c37096ad..746e62b5ac 100644 --- a/proto/penumbra/penumbra/core/txhash/v1alpha1/txhash.proto +++ b/proto/penumbra/penumbra/core/txhash/v1alpha1/txhash.proto @@ -12,4 +12,4 @@ message EffectHash { // This is the hash of the plain byte encoding, used by Tendermint. message TransactionId { bytes inner = 1; -} \ No newline at end of file +} From e15e021fc6a52ef5ac9764f8a04ca7de3f96ed51 Mon Sep 17 00:00:00 2001 From: Gabe Rodriguez Date: Tue, 2 Jan 2024 10:03:42 -0500 Subject: [PATCH 19/84] Bump ibc deps (#3550) --- Cargo.lock | 61 +++++++++++-------- crates/bin/pcli/Cargo.toml | 4 +- crates/bin/pclientd/Cargo.toml | 4 +- crates/bin/pd/Cargo.toml | 4 +- crates/cnidarium/Cargo.toml | 4 +- crates/core/app/Cargo.toml | 4 +- crates/core/component/chain/Cargo.toml | 2 +- crates/core/component/ibc/Cargo.toml | 4 +- .../core/component/shielded-pool/Cargo.toml | 2 +- crates/core/transaction/Cargo.toml | 4 +- crates/proto/Cargo.toml | 4 +- crates/view/Cargo.toml | 2 +- crates/wasm/tests/test_deserialize.rs | 35 +++++++++++ tools/proto-compiler/Cargo.toml | 2 +- 14 files changed, 91 insertions(+), 45 deletions(-) create mode 100644 crates/wasm/tests/test_deserialize.rs diff --git a/Cargo.lock b/Cargo.lock index 14a92dd8e2..5469628668 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3261,14 +3261,15 @@ dependencies = [ [[package]] name = "ibc-proto" -version = "0.39.1" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8a8b1356652b9f160f5a010dd6b084675b8a28e163bf2b41ca5abecf27d9701" +checksum = "4222cfac37f21da28292db0f2673fdb8455284895891ff09979680243efb9a20" dependencies = [ "base64 0.21.5", "bytes", "flex-error", "ics23", + "informalsystems-pbjson 0.7.0", "prost", "serde", "subtle-encoding", @@ -3278,9 +3279,9 @@ dependencies = [ [[package]] name = "ibc-types" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0a8726baeff64a88d7cbfdba30ecc72f43a4c4f666c62be5ad1e13db16dc42" +checksum = "345e31ea9be7b5b3e98bcd8a2a3b2376d2ab8663d455ba6ac83e53c1048510d6" dependencies = [ "ibc-types-core-channel", "ibc-types-core-client", @@ -3296,9 +3297,9 @@ dependencies = [ [[package]] name = "ibc-types-core-channel" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "929ed12868a24aee42ad216da8ce644b3197da8a2a99d232325315cc83b95bac" +checksum = "7dca175f7e461227e22b1978eb65445a4013c233845c2c6aabde5abace557a81" dependencies = [ "anyhow", "bytes", @@ -3329,9 +3330,9 @@ dependencies = [ [[package]] name = "ibc-types-core-client" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be5f2c8a94eba2a1b893254c6e1fed5eaea4d2b782a244c09a9fca6ce327d3d3" +checksum = "35cb6d632bf050c1891fb9c3958b6ec119cc0e3861954f6f87b332f8687f8d51" dependencies = [ "anyhow", "bytes", @@ -3356,9 +3357,9 @@ dependencies = [ [[package]] name = "ibc-types-core-commitment" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07db7e1100ef3ceab4e9218eae3b999b7e728b377fedbe575419a16dbf97b8ce" +checksum = "e57ec19137bd7f35724bb130770d695533e67224c0ff5cb98c30ad591f392377" dependencies = [ "anyhow", "bytes", @@ -3391,9 +3392,9 @@ dependencies = [ [[package]] name = "ibc-types-core-connection" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d891d04932818c943ad26e31e24327089589669e9bbd9eeeadd922fe1c5ec3d0" +checksum = "f86f9467e70cf1236af7c5d0d475983a2ebcc02622c5ccefb30263f33747ebb5" dependencies = [ "anyhow", "bytes", @@ -3421,9 +3422,9 @@ dependencies = [ [[package]] name = "ibc-types-domain-type" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c4aa0ca354ac01399b72b2e338224f49709163416c880a1510b15f3e5461cb4" +checksum = "0ac16371dda10031cb6824352cfaf830da98acc5feacb025e6330f6eb048fd4a" dependencies = [ "anyhow", "bytes", @@ -3432,9 +3433,9 @@ dependencies = [ [[package]] name = "ibc-types-identifier" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "045d626ba8fd79a0d22c19b55470f19741ef5aab43f47eb3659a1757f965cc66" +checksum = "99892ea17faa9b38ac172ed996be8f7a1b28f5020729634c52af7c5e1dc24c0a" dependencies = [ "displaydoc", "serde", @@ -3443,9 +3444,9 @@ dependencies = [ [[package]] name = "ibc-types-lightclients-tendermint" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e016b4520121e1917d4fbb35aa353864c0ec88225652d581a408f59ebd0736" +checksum = "fbfb501b8c9c97d54b6368ff70ac0804af94a0668805e822bb303cc76f6f1aa0" dependencies = [ "anyhow", "bytes", @@ -3480,9 +3481,9 @@ dependencies = [ [[package]] name = "ibc-types-path" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4c25c82d976ead3dd925bb4fabdcf7862e9305ef2ffc50c8a9ba9463b1e005" +checksum = "7121ab67e172915d20d9bdebcb54fb41e940461ddcd37cd108e233df2f898bb9" dependencies = [ "bytes", "derive_more", @@ -3503,9 +3504,9 @@ dependencies = [ [[package]] name = "ibc-types-timestamp" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773c0b6f0cc6d9cec8b04e78fd9fcafbea14ce56ce36d0b4cf5386e4dd171c93" +checksum = "e9f46394de8d492afc1bc43b83bddeffe086c93270b7f89fddf04f046adbaeba" dependencies = [ "bytes", "displaydoc", @@ -3522,9 +3523,9 @@ dependencies = [ [[package]] name = "ibc-types-transfer" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139137fac90c907ccaed4b191844f71347c29ff93e9adf724e5dfc0595b1a60a" +checksum = "c9352195987055fde11c32c1f5ed238e452d96b1fa021d642c3c2b12c05963dc" dependencies = [ "displaydoc", "serde", @@ -3552,7 +3553,7 @@ dependencies = [ "anyhow", "bytes", "hex", - "informalsystems-pbjson", + "informalsystems-pbjson 0.6.0", "prost", "ripemd", "serde", @@ -3723,6 +3724,16 @@ dependencies = [ "serde", ] +[[package]] +name = "informalsystems-pbjson" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa4a0980c8379295100d70854354e78df2ee1c6ca0f96ffe89afeb3140e3a3d" +dependencies = [ + "base64 0.21.5", + "serde", +] + [[package]] name = "inout" version = "0.1.3" diff --git a/crates/bin/pcli/Cargo.toml b/crates/bin/pcli/Cargo.toml index 0ea1b68a8f..4db18b797c 100644 --- a/crates/bin/pcli/Cargo.toml +++ b/crates/bin/pcli/Cargo.toml @@ -59,9 +59,9 @@ tendermint = { version = "0.34.0", features = ["rust-crypto"] } jmt = "0.9" # External dependencies -ibc-types = { version = "0.10.0", features = ["std", "with_serde"] } +ibc-types = { version = "0.11.0", features = ["std", "with_serde"] } -ibc-proto = { version = "0.39.0" } +ibc-proto = { version = "0.40.0" } ark-ff = { version = "0.4", default-features = false } atty = "0.2" ed25519-consensus = "2" diff --git a/crates/bin/pclientd/Cargo.toml b/crates/bin/pclientd/Cargo.toml index b8c30046ef..5dd1608e9a 100644 --- a/crates/bin/pclientd/Cargo.toml +++ b/crates/bin/pclientd/Cargo.toml @@ -63,8 +63,8 @@ directories = "4.0.1" tempfile = "3.3.0" assert_cmd = "2.0" base64 = "0.20" -ibc-types = { version = "0.10.0" } -ibc-proto = { version = "0.39.0", default-features = false, features = ["server"] } +ibc-types = { version = "0.11.0" } +ibc-proto = { version = "0.40.0", default-features = false, features = ["server"] } penumbra-proof-params = { path = "../../crypto/proof-params", features = [ "bundled-proving-keys", "download-proving-keys", diff --git a/crates/bin/pd/Cargo.toml b/crates/bin/pd/Cargo.toml index 33f0b70d3d..925dd7b4a5 100644 --- a/crates/bin/pd/Cargo.toml +++ b/crates/bin/pd/Cargo.toml @@ -57,9 +57,9 @@ tendermint-config = "0.34.0" tendermint-proto = "0.34.0" tendermint = "0.34.0" tendermint-light-client-verifier = "0.34.0" -ibc-types = { version = "0.10.0" } +ibc-types = { version = "0.11.0" } -ibc-proto = { version = "0.39.0", default-features = false, features = [ +ibc-proto = { version = "0.40.0", default-features = false, features = [ "server", ] } prost = "0.12.3" diff --git a/crates/cnidarium/Cargo.toml b/crates/cnidarium/Cargo.toml index da4c345343..1e770b2478 100644 --- a/crates/cnidarium/Cargo.toml +++ b/crates/cnidarium/Cargo.toml @@ -25,7 +25,7 @@ metrics = { version = "0.19.0", optional = true } parking_lot = "0.12" pin-project = "1.0.12" smallvec = { version = "1.10", features = ["union", "const_generics"] } -ibc-types = { version = "0.10.0", default-features = false, features = ["std"] } +ibc-types = { version = "0.11.0", default-features = false, features = ["std"] } once_cell = "1" # Tendermint/IBC crates @@ -39,7 +39,7 @@ tonic = { version = "0.10", optional = true } prost = { version = "0.12.3", optional = true } serde = { version = "1", optional = true } pbjson = { version = "0.5", optional = true } -ibc-proto = { version = "0.39.0", default-features = false, features = ["serde"], optional = true } +ibc-proto = { version = "0.40.0", default-features = false, features = ["serde"], optional = true } regex = "1.10.2" [dev-dependencies] diff --git a/crates/core/app/Cargo.toml b/crates/core/app/Cargo.toml index fff6d8d8f4..dde38a32a4 100644 --- a/crates/core/app/Cargo.toml +++ b/crates/core/app/Cargo.toml @@ -65,8 +65,8 @@ parking_lot = "0.12" tendermint = "0.34.0" tendermint-proto = "0.34.0" tendermint-light-client-verifier = "0.34.0" -ibc-types = { version = "0.10.0", default-features = false } -ibc-proto = { version = "0.39.0", default-features = false, features = [ +ibc-types = { version = "0.11.0", default-features = false } +ibc-proto = { version = "0.40.0", default-features = false, features = [ "server", ] } diff --git a/crates/core/component/chain/Cargo.toml b/crates/core/component/chain/Cargo.toml index 12ff7e17e1..d9d969f237 100644 --- a/crates/core/component/chain/Cargo.toml +++ b/crates/core/component/chain/Cargo.toml @@ -18,7 +18,7 @@ penumbra-num = { path = "../../../core/num", default-features = false } decaf377 = "0.5" tendermint = "0.34.0" -ibc-types = { version = "0.10.0", default-features = false } +ibc-types = { version = "0.11.0", default-features = false } ics23 = "0.11.0" # Crates.io deps diff --git a/crates/core/component/ibc/Cargo.toml b/crates/core/component/ibc/Cargo.toml index 3b99204bbe..2591d1de2c 100644 --- a/crates/core/component/ibc/Cargo.toml +++ b/crates/core/component/ibc/Cargo.toml @@ -29,8 +29,8 @@ penumbra-keys = { path = "../../../core/keys", default-features = false } penumbra-txhash = { path = "../../../core/txhash", default-features = false } # Penumbra dependencies -ibc-types = { version = "0.10.0", default-features = false } -ibc-proto = { version = "0.39.0", default-features = false } +ibc-types = { version = "0.11.0", default-features = false } +ibc-proto = { version = "0.40.0", default-features = false } # Crates.io deps ics23 = "0.11.0" diff --git a/crates/core/component/shielded-pool/Cargo.toml b/crates/core/component/shielded-pool/Cargo.toml index 33b4edade8..f7a2573cce 100644 --- a/crates/core/component/shielded-pool/Cargo.toml +++ b/crates/core/component/shielded-pool/Cargo.toml @@ -48,7 +48,7 @@ decaf377-ka = { path = "../../../crypto/decaf377-ka/" } decaf377-fmd = { path = "../../../crypto/decaf377-fmd/" } # Penumbra dependencies -ibc-types = { version = "0.10.0", default-features = false } +ibc-types = { version = "0.11.0", default-features = false } decaf377-rdsa = { version = "0.7" } decaf377 = { version = "0.5", features = ["r1cs"] } poseidon377 = { version = "0.6", features = ["r1cs"] } diff --git a/crates/core/transaction/Cargo.toml b/crates/core/transaction/Cargo.toml index 6a3f2e23c1..e21739e7b6 100644 --- a/crates/core/transaction/Cargo.toml +++ b/crates/core/transaction/Cargo.toml @@ -25,10 +25,10 @@ penumbra-keys = { path = "../keys", default-features = false } penumbra-txhash = { path = "../txhash", default-features = false } # Git deps -ibc-types = { version = "0.10.0", default-features = false } +ibc-types = { version = "0.11.0", default-features = false } # Crates.io deps -ibc-proto = { version = "0.39.0", default-features = false } +ibc-proto = { version = "0.40.0", default-features = false } decaf377 = "0.5" decaf377-rdsa = { version = "0.7" } poseidon377 = { version = "0.6", features = ["r1cs"] } diff --git a/crates/proto/Cargo.toml b/crates/proto/Cargo.toml index bbde2d7e6b..6f510ca633 100644 --- a/crates/proto/Cargo.toml +++ b/crates/proto/Cargo.toml @@ -18,7 +18,7 @@ anyhow = "1.0" subtle-encoding = "0.5" bech32 = "0.8" cnidarium = { path = "../cnidarium", optional = true } -ibc-types = { version = "0.10.0", features = ["std"] } +ibc-types = { version = "0.11.0", features = ["std"] } pin-project = "1" async-trait = "0.1.52" async-stream = "0.2.0" @@ -27,7 +27,7 @@ futures = "0.3" pbjson = "0.6" pbjson-types = "0.6" -ibc-proto = { version = "0.39.0", default-features = false, features = [ +ibc-proto = { version = "0.40.0", default-features = false, features = [ "std", "serde", ] } diff --git a/crates/view/Cargo.toml b/crates/view/Cargo.toml index fbafb99c11..f483fc5080 100644 --- a/crates/view/Cargo.toml +++ b/crates/view/Cargo.toml @@ -39,7 +39,7 @@ penumbra-compact-block = { path = "../core/component/compact-block", default-fea penumbra-app = { path = "../core/app" } penumbra-transaction = { path = "../core/transaction" } -ibc-types = { version = "0.10.0", default-features = false } +ibc-types = { version = "0.11.0", default-features = false } ark-std = { version = "0.4", default-features = false } decaf377 = { version = "0.5", features = ["r1cs"] } diff --git a/crates/wasm/tests/test_deserialize.rs b/crates/wasm/tests/test_deserialize.rs new file mode 100644 index 0000000000..88d511505c --- /dev/null +++ b/crates/wasm/tests/test_deserialize.rs @@ -0,0 +1,35 @@ +use penumbra_proto::core::component::ibc::v1alpha1::Ics20Withdrawal as PbIcs20Withdrawal; +use penumbra_shielded_pool::Ics20Withdrawal; + +#[test] +fn height_properly_serializes_from_json() { + let data = r#" + { + "amount": { + "lo": "12000000" + }, + "denom": { + "denom": "upenumbra" + }, + "destinationChainAddress": "xyz", + "returnAddress": { + "inner": "by+DwROtdzWZu+W+gQ+e7pJ328aBf4Lng1dtnnkH971ebSC4O1+fQE+QmMNQ0iEg1/ARaF6yop4BurwW0Z1B7v0/o3AYchf6IEMYBxGyN18=" + }, + "timeoutHeight": { + "revisionNumber": "5", + "revisionHeight": "3928271" + }, + "timeoutTime": "1701471437169", + "sourceChannel": "channel-0" + } + "#; + + let withdrawal_proto: PbIcs20Withdrawal = serde_json::from_str(data).unwrap(); + let height = withdrawal_proto.clone().timeout_height.unwrap(); + assert_eq!(height.revision_number, 5u64); + assert_eq!(height.revision_height, 3928271u64); + + let domain_type: Ics20Withdrawal = withdrawal_proto.try_into().unwrap(); + assert_eq!(domain_type.timeout_height.revision_number, 5u64); + assert_eq!(domain_type.timeout_height.revision_height, 3928271u64); +} diff --git a/tools/proto-compiler/Cargo.toml b/tools/proto-compiler/Cargo.toml index 753ac0b823..23a587f00b 100644 --- a/tools/proto-compiler/Cargo.toml +++ b/tools/proto-compiler/Cargo.toml @@ -15,5 +15,5 @@ pbjson-types = "0.6" pbjson-build = "0.6" tempfile = "3" -ibc-proto = { version = "0.39.0" } +ibc-proto = { version = "0.40.0" } ics23 = "0.11.0" From fd82a27e4a8c9a7700ae826b6b0c07b69961867f Mon Sep 17 00:00:00 2001 From: Gabe Rodriguez Date: Tue, 2 Jan 2024 14:45:17 -0500 Subject: [PATCH 20/84] Remove view auth method (#3551) --- .../proto/src/gen/penumbra.view.v1alpha1.rs | 337 --- .../src/gen/penumbra.view.v1alpha1.serde.rs | 276 --- .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 340366 -> 339638 bytes .../go/gen/penumbra/view/v1alpha1/view.pb.go | 2094 ++++++++--------- .../penumbra/view/v1alpha1/view.proto | 17 - tools/proto-compiler/Cargo.lock | 4 +- 6 files changed, 946 insertions(+), 1782 deletions(-) diff --git a/crates/proto/src/gen/penumbra.view.v1alpha1.rs b/crates/proto/src/gen/penumbra.view.v1alpha1.rs index 85841435e6..ec5178a17b 100644 --- a/crates/proto/src/gen/penumbra.view.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.view.v1alpha1.rs @@ -484,46 +484,6 @@ impl ::prost::Name for BalancesResponse { ::prost::alloc::format!("penumbra.view.v1alpha1.{}", Self::NAME) } } -/// Scaffolding for bearer-token authentication for the ViewService. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ViewAuthToken { - #[prost(bytes = "vec", tag = "1")] - pub inner: ::prost::alloc::vec::Vec, -} -impl ::prost::Name for ViewAuthToken { - const NAME: &'static str = "ViewAuthToken"; - const PACKAGE: &'static str = "penumbra.view.v1alpha1"; - fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.view.v1alpha1.{}", Self::NAME) - } -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ViewAuthRequest { - #[prost(message, optional, tag = "1")] - pub fvk: ::core::option::Option, -} -impl ::prost::Name for ViewAuthRequest { - const NAME: &'static str = "ViewAuthRequest"; - const PACKAGE: &'static str = "penumbra.view.v1alpha1"; - fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.view.v1alpha1.{}", Self::NAME) - } -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ViewAuthResponse { - #[prost(message, optional, tag = "1")] - pub token: ::core::option::Option, -} -impl ::prost::Name for ViewAuthResponse { - const NAME: &'static str = "ViewAuthResponse"; - const PACKAGE: &'static str = "penumbra.view.v1alpha1"; - fn full_name() -> ::prost::alloc::string::String { - ::prost::alloc::format!("penumbra.view.v1alpha1.{}", Self::NAME) - } -} /// Requests sync status of the view service. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -2098,121 +2058,6 @@ pub mod view_protocol_service_client { } } } -/// Generated client implementations. -#[cfg(feature = "rpc")] -pub mod view_auth_service_client { - #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] - use tonic::codegen::*; - use tonic::codegen::http::Uri; - #[derive(Debug, Clone)] - pub struct ViewAuthServiceClient { - inner: tonic::client::Grpc, - } - impl ViewAuthServiceClient { - /// Attempt to create a new client by connecting to a given endpoint. - pub async fn connect(dst: D) -> Result - where - D: TryInto, - D::Error: Into, - { - let conn = tonic::transport::Endpoint::new(dst)?.connect().await?; - Ok(Self::new(conn)) - } - } - impl ViewAuthServiceClient - where - T: tonic::client::GrpcService, - T::Error: Into, - T::ResponseBody: Body + Send + 'static, - ::Error: Into + Send, - { - pub fn new(inner: T) -> Self { - let inner = tonic::client::Grpc::new(inner); - Self { inner } - } - pub fn with_origin(inner: T, origin: Uri) -> Self { - let inner = tonic::client::Grpc::with_origin(inner, origin); - Self { inner } - } - pub fn with_interceptor( - inner: T, - interceptor: F, - ) -> ViewAuthServiceClient> - where - F: tonic::service::Interceptor, - T::ResponseBody: Default, - T: tonic::codegen::Service< - http::Request, - Response = http::Response< - >::ResponseBody, - >, - >, - , - >>::Error: Into + Send + Sync, - { - ViewAuthServiceClient::new(InterceptedService::new(inner, interceptor)) - } - /// Compress requests with the given encoding. - /// - /// This requires the server to support it otherwise it might respond with an - /// error. - #[must_use] - pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { - self.inner = self.inner.send_compressed(encoding); - self - } - /// Enable decompressing responses. - #[must_use] - pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { - self.inner = self.inner.accept_compressed(encoding); - self - } - /// Limits the maximum size of a decoded message. - /// - /// Default: `4MB` - #[must_use] - pub fn max_decoding_message_size(mut self, limit: usize) -> Self { - self.inner = self.inner.max_decoding_message_size(limit); - self - } - /// Limits the maximum size of an encoded message. - /// - /// Default: `usize::MAX` - #[must_use] - pub fn max_encoding_message_size(mut self, limit: usize) -> Self { - self.inner = self.inner.max_encoding_message_size(limit); - self - } - pub async fn view_auth( - &mut self, - request: impl tonic::IntoRequest, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; - let codec = tonic::codec::ProstCodec::default(); - let path = http::uri::PathAndQuery::from_static( - "/penumbra.view.v1alpha1.ViewAuthService/ViewAuth", - ); - let mut req = request.into_request(); - req.extensions_mut() - .insert( - GrpcMethod::new("penumbra.view.v1alpha1.ViewAuthService", "ViewAuth"), - ); - self.inner.unary(req, path, codec).await - } - } -} /// Generated server implementations. #[cfg(feature = "rpc")] pub mod view_protocol_service_server { @@ -3816,185 +3661,3 @@ pub mod view_protocol_service_server { const NAME: &'static str = "penumbra.view.v1alpha1.ViewProtocolService"; } } -/// Generated server implementations. -#[cfg(feature = "rpc")] -pub mod view_auth_service_server { - #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] - use tonic::codegen::*; - /// Generated trait containing gRPC methods that should be implemented for use with ViewAuthServiceServer. - #[async_trait] - pub trait ViewAuthService: Send + Sync + 'static { - async fn view_auth( - &self, - request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; - } - #[derive(Debug)] - pub struct ViewAuthServiceServer { - inner: _Inner, - accept_compression_encodings: EnabledCompressionEncodings, - send_compression_encodings: EnabledCompressionEncodings, - max_decoding_message_size: Option, - max_encoding_message_size: Option, - } - struct _Inner(Arc); - impl ViewAuthServiceServer { - pub fn new(inner: T) -> Self { - Self::from_arc(Arc::new(inner)) - } - pub fn from_arc(inner: Arc) -> Self { - let inner = _Inner(inner); - Self { - inner, - accept_compression_encodings: Default::default(), - send_compression_encodings: Default::default(), - max_decoding_message_size: None, - max_encoding_message_size: None, - } - } - pub fn with_interceptor( - inner: T, - interceptor: F, - ) -> InterceptedService - where - F: tonic::service::Interceptor, - { - InterceptedService::new(Self::new(inner), interceptor) - } - /// Enable decompressing requests with the given encoding. - #[must_use] - pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { - self.accept_compression_encodings.enable(encoding); - self - } - /// Compress responses with the given encoding, if the client supports it. - #[must_use] - pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { - self.send_compression_encodings.enable(encoding); - self - } - /// Limits the maximum size of a decoded message. - /// - /// Default: `4MB` - #[must_use] - pub fn max_decoding_message_size(mut self, limit: usize) -> Self { - self.max_decoding_message_size = Some(limit); - self - } - /// Limits the maximum size of an encoded message. - /// - /// Default: `usize::MAX` - #[must_use] - pub fn max_encoding_message_size(mut self, limit: usize) -> Self { - self.max_encoding_message_size = Some(limit); - self - } - } - impl tonic::codegen::Service> for ViewAuthServiceServer - where - T: ViewAuthService, - B: Body + Send + 'static, - B::Error: Into + Send + 'static, - { - type Response = http::Response; - type Error = std::convert::Infallible; - type Future = BoxFuture; - fn poll_ready( - &mut self, - _cx: &mut Context<'_>, - ) -> Poll> { - Poll::Ready(Ok(())) - } - fn call(&mut self, req: http::Request) -> Self::Future { - let inner = self.inner.clone(); - match req.uri().path() { - "/penumbra.view.v1alpha1.ViewAuthService/ViewAuth" => { - #[allow(non_camel_case_types)] - struct ViewAuthSvc(pub Arc); - impl< - T: ViewAuthService, - > tonic::server::UnaryService - for ViewAuthSvc { - type Response = super::ViewAuthResponse; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; - fn call( - &mut self, - request: tonic::Request, - ) -> Self::Future { - let inner = Arc::clone(&self.0); - let fut = async move { - ::view_auth(&inner, request).await - }; - Box::pin(fut) - } - } - let accept_compression_encodings = self.accept_compression_encodings; - let send_compression_encodings = self.send_compression_encodings; - let max_decoding_message_size = self.max_decoding_message_size; - let max_encoding_message_size = self.max_encoding_message_size; - let inner = self.inner.clone(); - let fut = async move { - let inner = inner.0; - let method = ViewAuthSvc(inner); - let codec = tonic::codec::ProstCodec::default(); - let mut grpc = tonic::server::Grpc::new(codec) - .apply_compression_config( - accept_compression_encodings, - send_compression_encodings, - ) - .apply_max_message_size_config( - max_decoding_message_size, - max_encoding_message_size, - ); - let res = grpc.unary(method, req).await; - Ok(res) - }; - Box::pin(fut) - } - _ => { - Box::pin(async move { - Ok( - http::Response::builder() - .status(200) - .header("grpc-status", "12") - .header("content-type", "application/grpc") - .body(empty_body()) - .unwrap(), - ) - }) - } - } - } - } - impl Clone for ViewAuthServiceServer { - fn clone(&self) -> Self { - let inner = self.inner.clone(); - Self { - inner, - accept_compression_encodings: self.accept_compression_encodings, - send_compression_encodings: self.send_compression_encodings, - max_decoding_message_size: self.max_decoding_message_size, - max_encoding_message_size: self.max_encoding_message_size, - } - } - } - impl Clone for _Inner { - fn clone(&self) -> Self { - Self(Arc::clone(&self.0)) - } - } - impl std::fmt::Debug for _Inner { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{:?}", self.0) - } - } - impl tonic::server::NamedService for ViewAuthServiceServer { - const NAME: &'static str = "penumbra.view.v1alpha1.ViewAuthService"; - } -} diff --git a/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs index ba13d30305..d5e6021fca 100644 --- a/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs @@ -6258,282 +6258,6 @@ impl<'de> serde::Deserialize<'de> for UnclaimedSwapsResponse { deserializer.deserialize_struct("penumbra.view.v1alpha1.UnclaimedSwapsResponse", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for ViewAuthRequest { - #[allow(deprecated)] - fn serialize(&self, serializer: S) -> std::result::Result - where - S: serde::Serializer, - { - use serde::ser::SerializeStruct; - let mut len = 0; - if self.fvk.is_some() { - len += 1; - } - let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.ViewAuthRequest", len)?; - if let Some(v) = self.fvk.as_ref() { - struct_ser.serialize_field("fvk", v)?; - } - struct_ser.end() - } -} -impl<'de> serde::Deserialize<'de> for ViewAuthRequest { - #[allow(deprecated)] - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - const FIELDS: &[&str] = &[ - "fvk", - ]; - - #[allow(clippy::enum_variant_names)] - enum GeneratedField { - Fvk, - } - impl<'de> serde::Deserialize<'de> for GeneratedField { - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - struct GeneratedVisitor; - - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = GeneratedField; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(formatter, "expected one of: {:?}", &FIELDS) - } - - #[allow(unused_variables)] - fn visit_str(self, value: &str) -> std::result::Result - where - E: serde::de::Error, - { - match value { - "fvk" => Ok(GeneratedField::Fvk), - _ => Err(serde::de::Error::unknown_field(value, FIELDS)), - } - } - } - deserializer.deserialize_identifier(GeneratedVisitor) - } - } - struct GeneratedVisitor; - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = ViewAuthRequest; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.view.v1alpha1.ViewAuthRequest") - } - - fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, - { - let mut fvk__ = None; - while let Some(k) = map_.next_key()? { - match k { - GeneratedField::Fvk => { - if fvk__.is_some() { - return Err(serde::de::Error::duplicate_field("fvk")); - } - fvk__ = map_.next_value()?; - } - } - } - Ok(ViewAuthRequest { - fvk: fvk__, - }) - } - } - deserializer.deserialize_struct("penumbra.view.v1alpha1.ViewAuthRequest", FIELDS, GeneratedVisitor) - } -} -impl serde::Serialize for ViewAuthResponse { - #[allow(deprecated)] - fn serialize(&self, serializer: S) -> std::result::Result - where - S: serde::Serializer, - { - use serde::ser::SerializeStruct; - let mut len = 0; - if self.token.is_some() { - len += 1; - } - let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.ViewAuthResponse", len)?; - if let Some(v) = self.token.as_ref() { - struct_ser.serialize_field("token", v)?; - } - struct_ser.end() - } -} -impl<'de> serde::Deserialize<'de> for ViewAuthResponse { - #[allow(deprecated)] - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - const FIELDS: &[&str] = &[ - "token", - ]; - - #[allow(clippy::enum_variant_names)] - enum GeneratedField { - Token, - } - impl<'de> serde::Deserialize<'de> for GeneratedField { - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - struct GeneratedVisitor; - - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = GeneratedField; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(formatter, "expected one of: {:?}", &FIELDS) - } - - #[allow(unused_variables)] - fn visit_str(self, value: &str) -> std::result::Result - where - E: serde::de::Error, - { - match value { - "token" => Ok(GeneratedField::Token), - _ => Err(serde::de::Error::unknown_field(value, FIELDS)), - } - } - } - deserializer.deserialize_identifier(GeneratedVisitor) - } - } - struct GeneratedVisitor; - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = ViewAuthResponse; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.view.v1alpha1.ViewAuthResponse") - } - - fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, - { - let mut token__ = None; - while let Some(k) = map_.next_key()? { - match k { - GeneratedField::Token => { - if token__.is_some() { - return Err(serde::de::Error::duplicate_field("token")); - } - token__ = map_.next_value()?; - } - } - } - Ok(ViewAuthResponse { - token: token__, - }) - } - } - deserializer.deserialize_struct("penumbra.view.v1alpha1.ViewAuthResponse", FIELDS, GeneratedVisitor) - } -} -impl serde::Serialize for ViewAuthToken { - #[allow(deprecated)] - fn serialize(&self, serializer: S) -> std::result::Result - where - S: serde::Serializer, - { - use serde::ser::SerializeStruct; - let mut len = 0; - if !self.inner.is_empty() { - len += 1; - } - let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.ViewAuthToken", len)?; - if !self.inner.is_empty() { - #[allow(clippy::needless_borrow)] - struct_ser.serialize_field("inner", pbjson::private::base64::encode(&self.inner).as_str())?; - } - struct_ser.end() - } -} -impl<'de> serde::Deserialize<'de> for ViewAuthToken { - #[allow(deprecated)] - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - const FIELDS: &[&str] = &[ - "inner", - ]; - - #[allow(clippy::enum_variant_names)] - enum GeneratedField { - Inner, - } - impl<'de> serde::Deserialize<'de> for GeneratedField { - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - struct GeneratedVisitor; - - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = GeneratedField; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(formatter, "expected one of: {:?}", &FIELDS) - } - - #[allow(unused_variables)] - fn visit_str(self, value: &str) -> std::result::Result - where - E: serde::de::Error, - { - match value { - "inner" => Ok(GeneratedField::Inner), - _ => Err(serde::de::Error::unknown_field(value, FIELDS)), - } - } - } - deserializer.deserialize_identifier(GeneratedVisitor) - } - } - struct GeneratedVisitor; - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = ViewAuthToken; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.view.v1alpha1.ViewAuthToken") - } - - fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, - { - let mut inner__ = None; - while let Some(k) = map_.next_key()? { - match k { - GeneratedField::Inner => { - if inner__.is_some() { - return Err(serde::de::Error::duplicate_field("inner")); - } - inner__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; - } - } - } - Ok(ViewAuthToken { - inner: inner__.unwrap_or_default(), - }) - } - } - deserializer.deserialize_struct("penumbra.view.v1alpha1.ViewAuthToken", FIELDS, GeneratedVisitor) - } -} impl serde::Serialize for WalletIdRequest { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index e1e23147c8486cba7d5a96b30733f27ce6fe09df..96325d5d9360ffde93bb1672872a933085152f01 100644 GIT binary patch delta 5736 zcmYM2dyE#<8HZ=zGc&t8NQBuN`|X8g?<{-&KCa#X3kZrvYh#+Usj;Q4X(P5$(?6Ol zDoRyAC3L4!BxH*iLlFZCk%n58&`<=6Qn7+pq#>IPMS=#ZNT2u2obG?~eCPfB&UxQ+ z=A1L%nv>b;oi5L5;2FC^61s+45Me3rlQJ^hFiuG*{ zjbcY<^fTPX$KjLWCCU9`gCCcTC-6xrsf>Pv<9KykoBU^NaA%(901zp$9w3oxrL@{1 zmTRT9F1phSXlhWEuScGt$Ol*j5vOv@G2?mc`*F@t#ZW8W&71D3>FyL!@!aI>ptnNXH3ww_aYM!02EsHR(7J!wU_MeF%u z5m}VS;WqL9lGMk+*0ORUw@FEP^ewU|*DSUtC*ojso@YF_yHbNhZkOV6n+1sHcBz^W z&9_1tcOIMh(->b8?#&dTuj+R5h;-QLlm z`snt$$)^?FUY-2;l&vBTUlZ@|$*(JdIb{_Dz9uDgQGuaUXxZLK-mD0E^E^|wH{4W! zM7|-V>BvAV-;la`Teb?#aDUQMN!fU2Ec;#dptiZ}L4^A?dws7fbn*|7L+?#mvjZ*z zen)k{WdNc&pc!0229AB7!T^yFV*GE0phsGnxhN@snzS3rNL}W@9sTm!S&Z`|FJR;Z4wi#7w zMn`p426&{yqb?^9-BFhli0-J%sVWYSiTAH8rz#?kNl6vy`hJz>^q$B}+aH80m~MC= zvF}NH!L{Q0o=l$+4QQz*#Nl!AKFn+<5PDon>aFbrwLKxS$O<8B!PEyN_JmBG=UTBn zAvY|{q%?jYa&y+GGY(F3Xj=!SFLaFd1G#CjoxJKe{8+qCvk_Gj`mvNuw6@hcqEAHT zSRI5d*z1tkPoys`JFU2WqGi99Jach)O1v+mDA(I?+mc`WYRP@el4q-fuJRnBQ&Lh9 zJ)tjKPJ1|={JT1MJkK*L{IuH`KtfMT@s+ka5dYH>mqqiekjCL;b1s-OHz!4`t6{gU zK*l*NW12IeE{|bpx!xf@!!mzCbgT7Yd5k1&HNj#Apu643=m2zmj7V`qCe-yYB2CTF zZB_`KNuH|-ZZ71+AUrcF)NSI76i>{AMnk2s$-dM%-6qaTGPySBLFuDBJF3);;;a-` zW=h>C&PsJInq|8r_M9ZEYJ;gL154S71)@AB#pzK8qCBTt^IWT>BIhOfqBgi@YED9w z=STYtQJ$A#SFRA{d1-66^H>vy7sUIoB1>U;>S~)pV;nwZ zyd-mNB=RYfy~T~Q)po6sSytF+ZNV0Y1g|x%QypTv*36h0eTS+y>MO7=IW{Snl`L-v zstWwT;#p_1Wd~}2$rdb#dYxgx>S@xbd+(r0ipB+90|4m^n(Uqkq8v2YJrP7XXtEQf zDGr}D-XF4bnuvVblr-2GY0_-g8<}j!3*ib@I3#wxsZ19$t+=i?Eap3PeKp77GsgR4 zX4_2YGp~AcB3m&vu3hMi*##&XX>-b)d$ozS051JCRd+k zt4L#{p`${|;umN9a68gNZO`XeDwcVO@HF1#gjOkW4RFKH6Zm1xpTTRCl zyE5D2@CD<&n0dAl`GUz#yf*dR?uH8C3Z_E^iQVpo3gWt5hiVVf_Bh;Oyxo~?JE1$A zZM)j;G}-Y7VGE}3EJ*B5)1Gc5AhtVAVX9qR?OODgjMUijKuji>eieYWwJuxjFxr>g zY_{uc?#gBppx0flL?F^#u0$ZpU2Zlf$Kfl+`*W7dWFlX2%W|^jvd2g|Ul0QV(*c3R z?lHw_#Xwy5m@CJnv)K`cdyV(k%(jEjy{4qu&Sr<&zM3p(3A(?{GedpVNczrzM80ZT z(t3fIzUpRkN*um!yuW3hQ;2+B%f5gWGDSW28Oh~lCb#qk)yW;L!Pw+XOE6&uO^lni z^n(sWxX+ZPFD*zH`^wg{l$P0+&DU|kj6vF zg0`R?p%T$4s1lqJy{| zGkl`km$f?%-#6Zg%(k1*_f1KQedD^-_PDc!umw|Fkl5qS7R2_r+UhL##Nmg=`#5v$ zA@W1R#ZqqzJ?i?Ak=AHH|C9i+h0_HG68w>=Om7b$wjY^h9g+CGarmk6PGz>eM1Jaa zmR_|zskZ70;R>d%Ah9Q%D~RjK8&g}KXj(sW69}ON)5|4jTPLMwJ&5)*)7ux_$cXyl z@U-zRn&k72U|v}tk*5v+IOv_QPe(MIESwTd%kzxqusgIsB8T0f1>!lZhgOFb(m0ar zm=d%i)WM7xNv}_!wwbPUiv$sl=oa~XD`YvJNyc;r-!1gnUG9v#hJgsrnC#0MM0m#V zZP{Xl&{>oGzB6b*sbAJ--HQOCJnMF4(8ki`Osix$pEJowXHYr3F!*Go@8_ zPC%6BOs*!n#VUzCZ<5=)f<*&;_R4&IRH;|y^KKWS73F!|g&M7r@qNkJlq+wz{ijPB z?peBQNyEKM@4I{1-AnK3PQPIL>`j`WbWZ{?{L+-Bix#d*n!1BY zjHMX=3r5n9Ul8d9(=#>8q8RA~ohx0D{c-q}@gDNiYjHo3Uzw8FF7$q#|F7M(1;Q0f zuPq?4U%M3m;`+6^@>cqOzs}YrBWa%yS}^^p25oD$Pk?AIrTc_RSp?s>lN+MUU|I(d z={K$pAkuHN4r#B@z-4zl_uGX4rpFD4_Oe?DAkmlI@!YTb+Hzm!+A2Ye7);kGh;+H% zpI)Cqq|5!;bFyw3;sd^<-$w)eb}hhe$hsCD@UvA!E7}KqR#7@+`gzdLF3|lFrkGA0 zi1a}}n>rBbgMK!3`8a&o_a4ipE>GmcKKF87Yv0f7+^tL&^#%)O@Qmq7KdU}S=t{pc zy|aUuuJo_D)}D}gt?#40T$P@XP02`aP&>e{SnzXtGX`x`NBS=Sh{dD+%vq!)ejyH5 z`QDmrTm>Rm`Pl`#pu<}2XMb-%xPtAr<{+`F{mJRy5+JUt{pmCADh}`c<>r9&79NQ!>gRWZ)xf4mc9$^Efidy3W6vo?wV|}W<@M6(NG1{e>S;G zkY#yDd8pGx0hN#%SwvE`#<*I8!bS|DV%V?<1Yw00R34IL3F&@+^RU_d?|kn3zTcVO zZ|2O*xo>}+v;Lc$KRg|Knw}PK%G}*_?N7b=yXB?qtYkRkzD4a%O?_h7?|#|wNc&>- z@~T*V;oadd_v^g&$De3lx-6O)iiJ-;qSkMY<*PSV#)hiIOJZ0J|5iRX%o>PZ`dG)} zrR~uzp}&m%3Sy

Osv(^%4Z;?H%8D#lnop_q^>=_1zlF>HYUN@^UhLcStfT3f7Rfj$(;v zrS~qFzi?s4qYo`w{BY^QjwPiJw$ESEzNA5qxO6^h(Y|=uq6PDpE$UdT+wnsw_hkpx z7>0vFA+utUTto5PaBwJP7I~3eOB97eLZ8Xkn8BE4M(|pS4{^5%qB!@@Adh#|< zOxq4e5?Tm?EpV7a#BQdnT!*mTOa+B(8^ogEdGflo&mEVoi^efS70bE4p7@?KTjLVsaF4gz1McwYDrEOXd$2T@7lKDB3%KV3aK z)X!_dub4Fa9M|SRXm(I$p+lJOpb^F41KI+OJJoB0{NF$rgK+17kgKwjGDlcp48ol> zvNXI?3sHq`HGZ%^GnGRGVK-4=BMHK8$}o!vtq^uoZeG}qbaJC$7kRI%w+8zUWalDq z7sZQog>pHa-KIi#Mum2}3IP$h+f@h%%iUa|Mp))W!Cvy-QEP_yHQ9Lx+)MEhVFN~) z$Cf>6KN{Nbj8XQu^ni%$q0DkUXdoCudu++rnEpEWlIZ$#aphl zd3cLtuP$vXo+0cV5VC!*D=k_f?B&wF5ko%tQSd%_pQ#zc{9W1khk+(uQYv_PMG95!pu>IXWL8Jo_lWAe^CvXxv9smuOR$viv5sE6X3+l20*I89$qK z2-Hy}Rn~&@*+(_C;R0=eeD7YmahSqb3b=wt)YZrz-G*mW@Q9lgAR>=YrrAz_uslM=CAxwI zoZ?ZU)c;fvzhYGQ*%Sh(qii97usF(v;4PqlSHv-$&Kx{Lc+8~(gz%V42MFOYPKS5a z!YKHfynouAwGfeC^Byn>o`syxNi{RapKv>#QLmFkp`HdHx;ROL8XZD-lA0zvL>DJ% z+O1)e_Ce!mqN#~8wQDXFPI+q4vc>I7mpUs>6U}v2%W0mb`d>JN)oGeMMWzZ!UUvwBE6{A1K*XM>>Xd7R z>v5kfCeyhI-$MQnSK=ngFe!4_zIfQY?FtBU25+;YD>az$SH>C8lOX*{5BSI57*Vue1B~V zp791;cY6pBq1P$HoS;DXU#BQLoUVmvyrDkL_oq%PrWlsm4Y$;Q80QTdRH?@aJUCRXvXc~J=zEB$8Lfup7H$f?(TrTWs1%z_B$jGxw-bj{#hm;xwQ4)lrp2Qb5x zD}ZvP7*(z3u_Ovs3vaDZoe96~&Jskf7I@qFdRD@7w?@!7JysC<0GfLg5V31SWwUFA z>l)EIHk^soF%s7?wP=K2q#BF-x`#(1biKea$!|z$6l@UQCSh)FrD)n9uwQbIrQG92 zL1VNh2t5MLb_Yc4Mp16=bwKpEQ8bOlVMVemlFzBWB7fS$Wr%uC=t~>P@+eTk`?Kw= z98F5Z`BEljId|6O(gUG0pn1!Ii0u;9COsfJ>vHK;MDj&WZ$`QTQ7^j8Dx+YV@LsZ= zRibH|%dC<++b(FL&J2XkfDH~2yInN4IYejM#Vxl*athn- z5HvvxliC)DFBDv;fe79qs#+bwc86#iAN~sICwcMjRQ)CX1odjMpP#}HST;M|vH@~{ zTdF{)ck)u@(Kt&iUdUL9#*@pKHdh}YgnM0mMsa<5Y<&Revd7g2 z2xX6}4-m>8SD)%Acw2by*hH!k`L?T1H7C+5$ZQ@UxB>_3asd(BD~1er2-jYblN(lZ zeQKiMUE%%J+SVZSU0$0!mo;qro}hX)HS+7yK=^{qJq?K9_uOcK@O@9%52o5E_&|6c zTH9Jgejw~|SIf42ZnPk{0?lZFi0yNu1;VwDN2^cKx+vHuyuVr7I)v_Xwsma#k+5eU z2)01;+5!>#k*GF12oSa(iBzjzUv*sfj|CO!3V|@6K=UC1)UCyKZw5pAv7693p3nn! zLILRYfGZIY(gUtUKqwEm39XNUPlWfW&7~fZpSYD-&$%2FWTp&+0Rhc`fQUUPGEBvQ za6Kr7Wraze(1s{DB)re9Z399NiFl=+&<3_WtUAj5#(VLMp&k}wUK=1H4~wL!7Z9e0 z-E1~S!I#4OyY*~D1C ztqGCG1U~rhf@c$t?YO#9;m>NpGX`_qc>)o6Tx6O{1`wXd1uhx&T8PFIs-x1chLCR+ zCtRU`+~x`egzy9x$_TLJ*K-2j^7<7W z69wN1@1nIGgV66pJgMKaF>HIm*@9pTG`2v*UU0TR*j`{;p5^8!_(6D=tZOqOe-QTH zqGopeQBYNw=F<%bTd-MXKm`9N^2}uc2-_b;C69nR}eiei~ zn48$ubzVSj6Afl#1VVU|H^%$55X-q=wbb~(PNnqT*6(gzKnVMV{m2AD*e~#rnbbni za{O;t1z*0P^BPFDsXq@7#_(<>;wLE6K&RZlq3 z940_$H@FE0B6@?ghi@zIUmGP&(^Udt#6Ytifsk&L&E|d#gmj~vGSzmAA#RdnK7G=y zdd|Ua$UNtp+-gB9w3~Rfm?5K|%>zXa44SEH<-capYNrke>1H=|WAU%8^j@%2Hx`l4 zOI*B%%|`vl^4xVvnw*%($68qW}Jk@o5fZWucv#z{{pSJ% hS75cSIS{eiWR3a90SMP^a$MVk8Np*qI+k^`{1=LBLA(F} diff --git a/proto/go/gen/penumbra/view/v1alpha1/view.pb.go b/proto/go/gen/penumbra/view/v1alpha1/view.pb.go index 1da7167264..32975e4f37 100644 --- a/proto/go/gen/penumbra/view/v1alpha1/view.pb.go +++ b/proto/go/gen/penumbra/view/v1alpha1/view.pb.go @@ -955,148 +955,6 @@ func (x *BalancesResponse) GetBalance() *v1alpha15.Value { return nil } -// Scaffolding for bearer-token authentication for the ViewService. -type ViewAuthToken struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Inner []byte `protobuf:"bytes,1,opt,name=inner,proto3" json:"inner,omitempty"` -} - -func (x *ViewAuthToken) Reset() { - *x = ViewAuthToken{} - if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ViewAuthToken) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ViewAuthToken) ProtoMessage() {} - -func (x *ViewAuthToken) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ViewAuthToken.ProtoReflect.Descriptor instead. -func (*ViewAuthToken) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{16} -} - -func (x *ViewAuthToken) GetInner() []byte { - if x != nil { - return x.Inner - } - return nil -} - -type ViewAuthRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Fvk *v1alpha13.FullViewingKey `protobuf:"bytes,1,opt,name=fvk,proto3" json:"fvk,omitempty"` -} - -func (x *ViewAuthRequest) Reset() { - *x = ViewAuthRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ViewAuthRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ViewAuthRequest) ProtoMessage() {} - -func (x *ViewAuthRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ViewAuthRequest.ProtoReflect.Descriptor instead. -func (*ViewAuthRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{17} -} - -func (x *ViewAuthRequest) GetFvk() *v1alpha13.FullViewingKey { - if x != nil { - return x.Fvk - } - return nil -} - -type ViewAuthResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Token *ViewAuthToken `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` -} - -func (x *ViewAuthResponse) Reset() { - *x = ViewAuthResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ViewAuthResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ViewAuthResponse) ProtoMessage() {} - -func (x *ViewAuthResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ViewAuthResponse.ProtoReflect.Descriptor instead. -func (*ViewAuthResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{18} -} - -func (x *ViewAuthResponse) GetToken() *ViewAuthToken { - if x != nil { - return x.Token - } - return nil -} - // Requests sync status of the view service. type StatusRequest struct { state protoimpl.MessageState @@ -1110,7 +968,7 @@ type StatusRequest struct { func (x *StatusRequest) Reset() { *x = StatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[19] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1123,7 +981,7 @@ func (x *StatusRequest) String() string { func (*StatusRequest) ProtoMessage() {} func (x *StatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[19] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1136,7 +994,7 @@ func (x *StatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusRequest.ProtoReflect.Descriptor instead. func (*StatusRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{19} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{16} } func (x *StatusRequest) GetWalletId() *v1alpha13.WalletId { @@ -1163,7 +1021,7 @@ type StatusResponse struct { func (x *StatusResponse) Reset() { *x = StatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[20] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1176,7 +1034,7 @@ func (x *StatusResponse) String() string { func (*StatusResponse) ProtoMessage() {} func (x *StatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[20] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1189,7 +1047,7 @@ func (x *StatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse.ProtoReflect.Descriptor instead. func (*StatusResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{20} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{17} } func (x *StatusResponse) GetFullSyncHeight() uint64 { @@ -1226,7 +1084,7 @@ type StatusStreamRequest struct { func (x *StatusStreamRequest) Reset() { *x = StatusStreamRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[21] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1239,7 +1097,7 @@ func (x *StatusStreamRequest) String() string { func (*StatusStreamRequest) ProtoMessage() {} func (x *StatusStreamRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[21] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1252,7 +1110,7 @@ func (x *StatusStreamRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusStreamRequest.ProtoReflect.Descriptor instead. func (*StatusStreamRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{21} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{18} } func (x *StatusStreamRequest) GetWalletId() *v1alpha13.WalletId { @@ -1279,7 +1137,7 @@ type StatusStreamResponse struct { func (x *StatusStreamResponse) Reset() { *x = StatusStreamResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[22] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1292,7 +1150,7 @@ func (x *StatusStreamResponse) String() string { func (*StatusStreamResponse) ProtoMessage() {} func (x *StatusStreamResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[22] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1305,7 +1163,7 @@ func (x *StatusStreamResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusStreamResponse.ProtoReflect.Descriptor instead. func (*StatusStreamResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{22} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{19} } func (x *StatusStreamResponse) GetLatestKnownBlockHeight() uint64 { @@ -1355,7 +1213,7 @@ type NotesRequest struct { func (x *NotesRequest) Reset() { *x = NotesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[23] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1368,7 +1226,7 @@ func (x *NotesRequest) String() string { func (*NotesRequest) ProtoMessage() {} func (x *NotesRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[23] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1381,7 +1239,7 @@ func (x *NotesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NotesRequest.ProtoReflect.Descriptor instead. func (*NotesRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{23} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{20} } func (x *NotesRequest) GetIncludeSpent() bool { @@ -1436,7 +1294,7 @@ type NotesForVotingRequest struct { func (x *NotesForVotingRequest) Reset() { *x = NotesForVotingRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[24] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1449,7 +1307,7 @@ func (x *NotesForVotingRequest) String() string { func (*NotesForVotingRequest) ProtoMessage() {} func (x *NotesForVotingRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[24] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1462,7 +1320,7 @@ func (x *NotesForVotingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NotesForVotingRequest.ProtoReflect.Descriptor instead. func (*NotesForVotingRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{24} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{21} } func (x *NotesForVotingRequest) GetVotableAtHeight() uint64 { @@ -1502,7 +1360,7 @@ type WitnessRequest struct { func (x *WitnessRequest) Reset() { *x = WitnessRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[25] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1515,7 +1373,7 @@ func (x *WitnessRequest) String() string { func (*WitnessRequest) ProtoMessage() {} func (x *WitnessRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[25] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1528,7 +1386,7 @@ func (x *WitnessRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WitnessRequest.ProtoReflect.Descriptor instead. func (*WitnessRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{25} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{22} } func (x *WitnessRequest) GetNoteCommitments() []*v1alpha17.StateCommitment { @@ -1563,7 +1421,7 @@ type WitnessResponse struct { func (x *WitnessResponse) Reset() { *x = WitnessResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[26] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1576,7 +1434,7 @@ func (x *WitnessResponse) String() string { func (*WitnessResponse) ProtoMessage() {} func (x *WitnessResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[26] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1589,7 +1447,7 @@ func (x *WitnessResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WitnessResponse.ProtoReflect.Descriptor instead. func (*WitnessResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{26} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{23} } func (x *WitnessResponse) GetWitnessData() *v1alpha1.WitnessData { @@ -1611,7 +1469,7 @@ type WitnessAndBuildRequest struct { func (x *WitnessAndBuildRequest) Reset() { *x = WitnessAndBuildRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[27] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1624,7 +1482,7 @@ func (x *WitnessAndBuildRequest) String() string { func (*WitnessAndBuildRequest) ProtoMessage() {} func (x *WitnessAndBuildRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[27] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1637,7 +1495,7 @@ func (x *WitnessAndBuildRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WitnessAndBuildRequest.ProtoReflect.Descriptor instead. func (*WitnessAndBuildRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{27} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{24} } func (x *WitnessAndBuildRequest) GetTransactionPlan() *v1alpha1.TransactionPlan { @@ -1665,7 +1523,7 @@ type WitnessAndBuildResponse struct { func (x *WitnessAndBuildResponse) Reset() { *x = WitnessAndBuildResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[28] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1678,7 +1536,7 @@ func (x *WitnessAndBuildResponse) String() string { func (*WitnessAndBuildResponse) ProtoMessage() {} func (x *WitnessAndBuildResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[28] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1691,7 +1549,7 @@ func (x *WitnessAndBuildResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WitnessAndBuildResponse.ProtoReflect.Descriptor instead. func (*WitnessAndBuildResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{28} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{25} } func (x *WitnessAndBuildResponse) GetTransaction() *v1alpha1.Transaction { @@ -1727,7 +1585,7 @@ type AssetsRequest struct { func (x *AssetsRequest) Reset() { *x = AssetsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[29] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1740,7 +1598,7 @@ func (x *AssetsRequest) String() string { func (*AssetsRequest) ProtoMessage() {} func (x *AssetsRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[29] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1753,7 +1611,7 @@ func (x *AssetsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AssetsRequest.ProtoReflect.Descriptor instead. func (*AssetsRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{29} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{26} } func (x *AssetsRequest) GetFiltered() bool { @@ -1817,7 +1675,7 @@ type AssetsResponse struct { func (x *AssetsResponse) Reset() { *x = AssetsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[30] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1830,7 +1688,7 @@ func (x *AssetsResponse) String() string { func (*AssetsResponse) ProtoMessage() {} func (x *AssetsResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[30] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1843,7 +1701,7 @@ func (x *AssetsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AssetsResponse.ProtoReflect.Descriptor instead. func (*AssetsResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{30} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{27} } func (x *AssetsResponse) GetDenomMetadata() *v1alpha15.DenomMetadata { @@ -1863,7 +1721,7 @@ type AppParametersRequest struct { func (x *AppParametersRequest) Reset() { *x = AppParametersRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[31] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1876,7 +1734,7 @@ func (x *AppParametersRequest) String() string { func (*AppParametersRequest) ProtoMessage() {} func (x *AppParametersRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[31] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1889,7 +1747,7 @@ func (x *AppParametersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AppParametersRequest.ProtoReflect.Descriptor instead. func (*AppParametersRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{31} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{28} } type AppParametersResponse struct { @@ -1903,7 +1761,7 @@ type AppParametersResponse struct { func (x *AppParametersResponse) Reset() { *x = AppParametersResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[32] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1916,7 +1774,7 @@ func (x *AppParametersResponse) String() string { func (*AppParametersResponse) ProtoMessage() {} func (x *AppParametersResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[32] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1929,7 +1787,7 @@ func (x *AppParametersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AppParametersResponse.ProtoReflect.Descriptor instead. func (*AppParametersResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{32} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{29} } func (x *AppParametersResponse) GetParameters() *v1alpha18.AppParameters { @@ -1949,7 +1807,7 @@ type GasPricesRequest struct { func (x *GasPricesRequest) Reset() { *x = GasPricesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[33] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1962,7 +1820,7 @@ func (x *GasPricesRequest) String() string { func (*GasPricesRequest) ProtoMessage() {} func (x *GasPricesRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[33] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1975,7 +1833,7 @@ func (x *GasPricesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GasPricesRequest.ProtoReflect.Descriptor instead. func (*GasPricesRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{33} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{30} } type GasPricesResponse struct { @@ -1989,7 +1847,7 @@ type GasPricesResponse struct { func (x *GasPricesResponse) Reset() { *x = GasPricesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[34] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2002,7 +1860,7 @@ func (x *GasPricesResponse) String() string { func (*GasPricesResponse) ProtoMessage() {} func (x *GasPricesResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[34] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2015,7 +1873,7 @@ func (x *GasPricesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GasPricesResponse.ProtoReflect.Descriptor instead. func (*GasPricesResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{34} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{31} } func (x *GasPricesResponse) GetGasPrices() *v1alpha12.GasPrices { @@ -2035,7 +1893,7 @@ type FMDParametersRequest struct { func (x *FMDParametersRequest) Reset() { *x = FMDParametersRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[35] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2048,7 +1906,7 @@ func (x *FMDParametersRequest) String() string { func (*FMDParametersRequest) ProtoMessage() {} func (x *FMDParametersRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[35] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2061,7 +1919,7 @@ func (x *FMDParametersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FMDParametersRequest.ProtoReflect.Descriptor instead. func (*FMDParametersRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{35} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{32} } type FMDParametersResponse struct { @@ -2075,7 +1933,7 @@ type FMDParametersResponse struct { func (x *FMDParametersResponse) Reset() { *x = FMDParametersResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[36] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2088,7 +1946,7 @@ func (x *FMDParametersResponse) String() string { func (*FMDParametersResponse) ProtoMessage() {} func (x *FMDParametersResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[36] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2101,7 +1959,7 @@ func (x *FMDParametersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FMDParametersResponse.ProtoReflect.Descriptor instead. func (*FMDParametersResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{36} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{33} } func (x *FMDParametersResponse) GetParameters() *v1alpha19.FmdParameters { @@ -2126,7 +1984,7 @@ type NoteByCommitmentRequest struct { func (x *NoteByCommitmentRequest) Reset() { *x = NoteByCommitmentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[37] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2139,7 +1997,7 @@ func (x *NoteByCommitmentRequest) String() string { func (*NoteByCommitmentRequest) ProtoMessage() {} func (x *NoteByCommitmentRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[37] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2152,7 +2010,7 @@ func (x *NoteByCommitmentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NoteByCommitmentRequest.ProtoReflect.Descriptor instead. func (*NoteByCommitmentRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{37} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{34} } func (x *NoteByCommitmentRequest) GetNoteCommitment() *v1alpha17.StateCommitment { @@ -2187,7 +2045,7 @@ type NoteByCommitmentResponse struct { func (x *NoteByCommitmentResponse) Reset() { *x = NoteByCommitmentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[38] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2200,7 +2058,7 @@ func (x *NoteByCommitmentResponse) String() string { func (*NoteByCommitmentResponse) ProtoMessage() {} func (x *NoteByCommitmentResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[38] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2213,7 +2071,7 @@ func (x *NoteByCommitmentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NoteByCommitmentResponse.ProtoReflect.Descriptor instead. func (*NoteByCommitmentResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{38} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{35} } func (x *NoteByCommitmentResponse) GetSpendableNote() *SpendableNoteRecord { @@ -2238,7 +2096,7 @@ type SwapByCommitmentRequest struct { func (x *SwapByCommitmentRequest) Reset() { *x = SwapByCommitmentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[39] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2251,7 +2109,7 @@ func (x *SwapByCommitmentRequest) String() string { func (*SwapByCommitmentRequest) ProtoMessage() {} func (x *SwapByCommitmentRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[39] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2264,7 +2122,7 @@ func (x *SwapByCommitmentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SwapByCommitmentRequest.ProtoReflect.Descriptor instead. func (*SwapByCommitmentRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{39} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{36} } func (x *SwapByCommitmentRequest) GetSwapCommitment() *v1alpha17.StateCommitment { @@ -2299,7 +2157,7 @@ type SwapByCommitmentResponse struct { func (x *SwapByCommitmentResponse) Reset() { *x = SwapByCommitmentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[40] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2312,7 +2170,7 @@ func (x *SwapByCommitmentResponse) String() string { func (*SwapByCommitmentResponse) ProtoMessage() {} func (x *SwapByCommitmentResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[40] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2325,7 +2183,7 @@ func (x *SwapByCommitmentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SwapByCommitmentResponse.ProtoReflect.Descriptor instead. func (*SwapByCommitmentResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{40} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{37} } func (x *SwapByCommitmentResponse) GetSwap() *SwapRecord { @@ -2347,7 +2205,7 @@ type UnclaimedSwapsRequest struct { func (x *UnclaimedSwapsRequest) Reset() { *x = UnclaimedSwapsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[41] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2360,7 +2218,7 @@ func (x *UnclaimedSwapsRequest) String() string { func (*UnclaimedSwapsRequest) ProtoMessage() {} func (x *UnclaimedSwapsRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[41] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2373,7 +2231,7 @@ func (x *UnclaimedSwapsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UnclaimedSwapsRequest.ProtoReflect.Descriptor instead. func (*UnclaimedSwapsRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{41} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{38} } func (x *UnclaimedSwapsRequest) GetWalletId() *v1alpha13.WalletId { @@ -2394,7 +2252,7 @@ type UnclaimedSwapsResponse struct { func (x *UnclaimedSwapsResponse) Reset() { *x = UnclaimedSwapsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[42] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2407,7 +2265,7 @@ func (x *UnclaimedSwapsResponse) String() string { func (*UnclaimedSwapsResponse) ProtoMessage() {} func (x *UnclaimedSwapsResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[42] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2420,7 +2278,7 @@ func (x *UnclaimedSwapsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UnclaimedSwapsResponse.ProtoReflect.Descriptor instead. func (*UnclaimedSwapsResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{42} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{39} } func (x *UnclaimedSwapsResponse) GetSwap() *SwapRecord { @@ -2444,7 +2302,7 @@ type NullifierStatusRequest struct { func (x *NullifierStatusRequest) Reset() { *x = NullifierStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[43] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2457,7 +2315,7 @@ func (x *NullifierStatusRequest) String() string { func (*NullifierStatusRequest) ProtoMessage() {} func (x *NullifierStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[43] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2470,7 +2328,7 @@ func (x *NullifierStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NullifierStatusRequest.ProtoReflect.Descriptor instead. func (*NullifierStatusRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{43} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{40} } func (x *NullifierStatusRequest) GetNullifier() *v1alpha110.Nullifier { @@ -2505,7 +2363,7 @@ type NullifierStatusResponse struct { func (x *NullifierStatusResponse) Reset() { *x = NullifierStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[44] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2518,7 +2376,7 @@ func (x *NullifierStatusResponse) String() string { func (*NullifierStatusResponse) ProtoMessage() {} func (x *NullifierStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[44] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2531,7 +2389,7 @@ func (x *NullifierStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NullifierStatusResponse.ProtoReflect.Descriptor instead. func (*NullifierStatusResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{44} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{41} } func (x *NullifierStatusResponse) GetSpent() bool { @@ -2553,7 +2411,7 @@ type TransactionInfoByHashRequest struct { func (x *TransactionInfoByHashRequest) Reset() { *x = TransactionInfoByHashRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[45] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2566,7 +2424,7 @@ func (x *TransactionInfoByHashRequest) String() string { func (*TransactionInfoByHashRequest) ProtoMessage() {} func (x *TransactionInfoByHashRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[45] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2579,7 +2437,7 @@ func (x *TransactionInfoByHashRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionInfoByHashRequest.ProtoReflect.Descriptor instead. func (*TransactionInfoByHashRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{45} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{42} } func (x *TransactionInfoByHashRequest) GetId() *v1alpha11.TransactionId { @@ -2603,7 +2461,7 @@ type TransactionInfoRequest struct { func (x *TransactionInfoRequest) Reset() { *x = TransactionInfoRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[46] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2616,7 +2474,7 @@ func (x *TransactionInfoRequest) String() string { func (*TransactionInfoRequest) ProtoMessage() {} func (x *TransactionInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[46] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2629,7 +2487,7 @@ func (x *TransactionInfoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionInfoRequest.ProtoReflect.Descriptor instead. func (*TransactionInfoRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{46} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{43} } func (x *TransactionInfoRequest) GetStartHeight() uint64 { @@ -2666,7 +2524,7 @@ type TransactionInfo struct { func (x *TransactionInfo) Reset() { *x = TransactionInfo{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[47] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2679,7 +2537,7 @@ func (x *TransactionInfo) String() string { func (*TransactionInfo) ProtoMessage() {} func (x *TransactionInfo) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[47] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2692,7 +2550,7 @@ func (x *TransactionInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionInfo.ProtoReflect.Descriptor instead. func (*TransactionInfo) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{47} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{44} } func (x *TransactionInfo) GetHeight() uint64 { @@ -2741,7 +2599,7 @@ type TransactionInfoResponse struct { func (x *TransactionInfoResponse) Reset() { *x = TransactionInfoResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[48] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2754,7 +2612,7 @@ func (x *TransactionInfoResponse) String() string { func (*TransactionInfoResponse) ProtoMessage() {} func (x *TransactionInfoResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[48] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2767,7 +2625,7 @@ func (x *TransactionInfoResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionInfoResponse.ProtoReflect.Descriptor instead. func (*TransactionInfoResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{48} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{45} } func (x *TransactionInfoResponse) GetTxInfo() *TransactionInfo { @@ -2788,7 +2646,7 @@ type TransactionInfoByHashResponse struct { func (x *TransactionInfoByHashResponse) Reset() { *x = TransactionInfoByHashResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[49] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2801,7 +2659,7 @@ func (x *TransactionInfoByHashResponse) String() string { func (*TransactionInfoByHashResponse) ProtoMessage() {} func (x *TransactionInfoByHashResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[49] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2814,7 +2672,7 @@ func (x *TransactionInfoByHashResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionInfoByHashResponse.ProtoReflect.Descriptor instead. func (*TransactionInfoByHashResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{49} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{46} } func (x *TransactionInfoByHashResponse) GetTxInfo() *TransactionInfo { @@ -2835,7 +2693,7 @@ type NotesResponse struct { func (x *NotesResponse) Reset() { *x = NotesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[50] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2848,7 +2706,7 @@ func (x *NotesResponse) String() string { func (*NotesResponse) ProtoMessage() {} func (x *NotesResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[50] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2861,7 +2719,7 @@ func (x *NotesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NotesResponse.ProtoReflect.Descriptor instead. func (*NotesResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{50} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{47} } func (x *NotesResponse) GetNoteRecord() *SpendableNoteRecord { @@ -2883,7 +2741,7 @@ type NotesForVotingResponse struct { func (x *NotesForVotingResponse) Reset() { *x = NotesForVotingResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[51] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2896,7 +2754,7 @@ func (x *NotesForVotingResponse) String() string { func (*NotesForVotingResponse) ProtoMessage() {} func (x *NotesForVotingResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[51] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2909,7 +2767,7 @@ func (x *NotesForVotingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NotesForVotingResponse.ProtoReflect.Descriptor instead. func (*NotesForVotingResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{51} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{48} } func (x *NotesForVotingResponse) GetNoteRecord() *SpendableNoteRecord { @@ -2953,7 +2811,7 @@ type SpendableNoteRecord struct { func (x *SpendableNoteRecord) Reset() { *x = SpendableNoteRecord{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[52] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2966,7 +2824,7 @@ func (x *SpendableNoteRecord) String() string { func (*SpendableNoteRecord) ProtoMessage() {} func (x *SpendableNoteRecord) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[52] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2979,7 +2837,7 @@ func (x *SpendableNoteRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use SpendableNoteRecord.ProtoReflect.Descriptor instead. func (*SpendableNoteRecord) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{52} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{49} } func (x *SpendableNoteRecord) GetNoteCommitment() *v1alpha17.StateCommitment { @@ -3055,7 +2913,7 @@ type SwapRecord struct { func (x *SwapRecord) Reset() { *x = SwapRecord{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[53] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3068,7 +2926,7 @@ func (x *SwapRecord) String() string { func (*SwapRecord) ProtoMessage() {} func (x *SwapRecord) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[53] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3081,7 +2939,7 @@ func (x *SwapRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use SwapRecord.ProtoReflect.Descriptor instead. func (*SwapRecord) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{53} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{50} } func (x *SwapRecord) GetSwapCommitment() *v1alpha17.StateCommitment { @@ -3147,7 +3005,7 @@ type OwnedPositionIdsRequest struct { func (x *OwnedPositionIdsRequest) Reset() { *x = OwnedPositionIdsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[54] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3160,7 +3018,7 @@ func (x *OwnedPositionIdsRequest) String() string { func (*OwnedPositionIdsRequest) ProtoMessage() {} func (x *OwnedPositionIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[54] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3173,7 +3031,7 @@ func (x *OwnedPositionIdsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OwnedPositionIdsRequest.ProtoReflect.Descriptor instead. func (*OwnedPositionIdsRequest) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{54} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{51} } func (x *OwnedPositionIdsRequest) GetPositionState() *v1alpha112.PositionState { @@ -3201,7 +3059,7 @@ type OwnedPositionIdsResponse struct { func (x *OwnedPositionIdsResponse) Reset() { *x = OwnedPositionIdsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[55] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3214,7 +3072,7 @@ func (x *OwnedPositionIdsResponse) String() string { func (*OwnedPositionIdsResponse) ProtoMessage() {} func (x *OwnedPositionIdsResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[55] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3227,7 +3085,7 @@ func (x *OwnedPositionIdsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use OwnedPositionIdsResponse.ProtoReflect.Descriptor instead. func (*OwnedPositionIdsResponse) Descriptor() ([]byte, []int) { - return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{55} + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{52} } func (x *OwnedPositionIdsResponse) GetPositionId() *v1alpha112.PositionId { @@ -3252,7 +3110,7 @@ type TransactionPlannerRequest_Output struct { func (x *TransactionPlannerRequest_Output) Reset() { *x = TransactionPlannerRequest_Output{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[56] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3265,7 +3123,7 @@ func (x *TransactionPlannerRequest_Output) String() string { func (*TransactionPlannerRequest_Output) ProtoMessage() {} func (x *TransactionPlannerRequest_Output) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[56] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3313,7 +3171,7 @@ type TransactionPlannerRequest_Swap struct { func (x *TransactionPlannerRequest_Swap) Reset() { *x = TransactionPlannerRequest_Swap{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[57] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3326,7 +3184,7 @@ func (x *TransactionPlannerRequest_Swap) String() string { func (*TransactionPlannerRequest_Swap) ProtoMessage() {} func (x *TransactionPlannerRequest_Swap) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[57] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3384,7 +3242,7 @@ type TransactionPlannerRequest_SwapClaim struct { func (x *TransactionPlannerRequest_SwapClaim) Reset() { *x = TransactionPlannerRequest_SwapClaim{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[58] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3397,7 +3255,7 @@ func (x *TransactionPlannerRequest_SwapClaim) String() string { func (*TransactionPlannerRequest_SwapClaim) ProtoMessage() {} func (x *TransactionPlannerRequest_SwapClaim) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[58] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3432,7 +3290,7 @@ type TransactionPlannerRequest_Delegate struct { func (x *TransactionPlannerRequest_Delegate) Reset() { *x = TransactionPlannerRequest_Delegate{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[59] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3445,7 +3303,7 @@ func (x *TransactionPlannerRequest_Delegate) String() string { func (*TransactionPlannerRequest_Delegate) ProtoMessage() {} func (x *TransactionPlannerRequest_Delegate) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[59] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3487,7 +3345,7 @@ type TransactionPlannerRequest_Undelegate struct { func (x *TransactionPlannerRequest_Undelegate) Reset() { *x = TransactionPlannerRequest_Undelegate{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[60] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3500,7 +3358,7 @@ func (x *TransactionPlannerRequest_Undelegate) String() string { func (*TransactionPlannerRequest_Undelegate) ProtoMessage() {} func (x *TransactionPlannerRequest_Undelegate) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[60] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3545,7 +3403,7 @@ type TransactionPlannerRequest_PositionOpen struct { func (x *TransactionPlannerRequest_PositionOpen) Reset() { *x = TransactionPlannerRequest_PositionOpen{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[61] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3558,7 +3416,7 @@ func (x *TransactionPlannerRequest_PositionOpen) String() string { func (*TransactionPlannerRequest_PositionOpen) ProtoMessage() {} func (x *TransactionPlannerRequest_PositionOpen) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[61] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3593,7 +3451,7 @@ type TransactionPlannerRequest_PositionClose struct { func (x *TransactionPlannerRequest_PositionClose) Reset() { *x = TransactionPlannerRequest_PositionClose{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[62] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3606,7 +3464,7 @@ func (x *TransactionPlannerRequest_PositionClose) String() string { func (*TransactionPlannerRequest_PositionClose) ProtoMessage() {} func (x *TransactionPlannerRequest_PositionClose) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[62] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3645,7 +3503,7 @@ type TransactionPlannerRequest_PositionWithdraw struct { func (x *TransactionPlannerRequest_PositionWithdraw) Reset() { *x = TransactionPlannerRequest_PositionWithdraw{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[63] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3658,7 +3516,7 @@ func (x *TransactionPlannerRequest_PositionWithdraw) String() string { func (*TransactionPlannerRequest_PositionWithdraw) ProtoMessage() {} func (x *TransactionPlannerRequest_PositionWithdraw) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[63] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4017,599 +3875,579 @@ var file_penumbra_view_v1alpha1_view_proto_rawDesc = []byte{ 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x22, - 0x25, 0x0a, 0x0d, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x50, 0x0a, 0x0f, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, - 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x03, 0x66, 0x76, 0x6b, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x69, 0x6e, 0x67, - 0x4b, 0x65, 0x79, 0x52, 0x03, 0x66, 0x76, 0x6b, 0x22, 0x4f, 0x0a, 0x10, 0x56, 0x69, 0x65, 0x77, - 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x05, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x53, 0x0a, 0x0d, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, - 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x8b, - 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x75, 0x6c, - 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, - 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, - 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0a, 0x63, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x22, 0x59, 0x0a, 0x13, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0xab, 0x01, 0x0a, 0x14, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x39, 0x0a, 0x19, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x16, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, - 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x75, 0x6c, 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, - 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xd5, 0x02, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x49, 0x64, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, - 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, - 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4a, 0x0a, - 0x0f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0d, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x54, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, + 0x53, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x49, 0x64, 0x22, 0x8b, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x75, 0x6c, 0x6c, 0x5f, + 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0e, 0x66, 0x75, 0x6c, 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x79, 0x6e, + 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x70, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, + 0x55, 0x70, 0x22, 0x59, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0xd7, 0x01, - 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x6f, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x61, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0f, 0x76, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x74, 0x48, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0xab, 0x01, + 0x0a, 0x14, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, + 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x74, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x75, 0x6c, + 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, + 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xd5, 0x02, 0x0a, 0x0c, + 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x70, 0x65, 0x6e, + 0x74, 0x12, 0x40, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x8e, 0x02, 0x0a, 0x0e, 0x57, 0x69, 0x74, 0x6e, - 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x10, 0x6e, 0x6f, - 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x6c, 0x61, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x65, 0x0a, 0x0f, 0x57, 0x69, 0x74, 0x6e, - 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0c, 0x77, - 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x0b, 0x77, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x22, - 0xde, 0x01, 0x0a, 0x16, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, + 0x64, 0x65, 0x78, 0x12, 0x4a, 0x0a, 0x0f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x6f, + 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x0d, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, + 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x49, 0x64, 0x22, 0xd7, 0x01, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, + 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, + 0x11, 0x76, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x76, 0x6f, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x41, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, + 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x8e, 0x02, + 0x0a, 0x0e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x58, 0x0a, 0x10, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x64, 0x0a, 0x12, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, + 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x65, + 0x0a, 0x0f, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x52, 0x0a, 0x0c, 0x77, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, + 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x77, 0x69, 0x74, 0x6e, 0x65, 0x73, + 0x73, 0x44, 0x61, 0x74, 0x61, 0x22, 0xde, 0x01, 0x0a, 0x16, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, + 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, + 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, + 0x12, 0x64, 0x0a, 0x12, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x6c, 0x0a, 0x17, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, + 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x11, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, - 0x22, 0x6c, 0x0a, 0x17, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xab, - 0x03, 0x0a, 0x0d, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x12, 0x69, 0x0a, 0x1e, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, - 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x52, 0x1c, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x75, - 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x55, 0x6e, - 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x26, 0x0a, - 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6c, 0x70, 0x5f, 0x6e, 0x66, 0x74, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, - 0x70, 0x4e, 0x66, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x6e, 0x66, 0x74, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4e, 0x66, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x70, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x1a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x64, 0x0a, 0x0e, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, - 0x0a, 0x0e, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x22, 0x16, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x62, 0x0a, 0x15, 0x41, 0x70, - 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0x12, - 0x0a, 0x10, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0a, 0x67, 0x61, 0x73, 0x5f, 0x70, - 0x72, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x09, 0x67, 0x61, - 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x46, 0x4d, 0x44, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x6e, 0x0a, 0x15, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, - 0xde, 0x01, 0x0a, 0x17, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x6e, - 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, - 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x09, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, - 0x22, 0x6e, 0x0a, 0x18, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, - 0x73, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, - 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x52, 0x0d, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, - 0x22, 0xde, 0x01, 0x0a, 0x17, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x0f, - 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xab, 0x03, 0x0a, 0x0d, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x65, 0x64, 0x12, 0x69, 0x0a, 0x1e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x52, + 0x1c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, + 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, + 0x19, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x17, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6c, + 0x70, 0x5f, 0x6e, 0x66, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, 0x70, 0x4e, 0x66, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, + 0x6e, 0x66, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4e, 0x66, 0x74, 0x73, 0x12, + 0x41, 0x0a, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x6f, 0x74, 0x69, 0x6e, + 0x67, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, + 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x73, 0x22, 0x64, 0x0a, 0x0e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, + 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x6e, 0x6f, 0x6d, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x16, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x62, 0x0a, 0x15, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, + 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x61, 0x73, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, + 0x0a, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x73, 0x52, 0x09, 0x67, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x22, 0x16, 0x0a, + 0x14, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6e, 0x0a, 0x15, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, + 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x6d, 0x64, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0xde, 0x01, 0x0a, 0x17, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, + 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x6e, 0x0a, 0x18, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, + 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0d, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, + 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x22, 0xde, 0x01, 0x0a, 0x17, 0x53, 0x77, 0x61, 0x70, 0x42, + 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, + 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, + 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x52, 0x0a, 0x18, 0x53, 0x77, 0x61, 0x70, 0x42, + 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x22, 0x5b, 0x0a, 0x15, 0x55, + 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, + 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x50, 0x0a, 0x16, 0x55, 0x6e, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x22, 0xd4, 0x01, 0x0a, 0x16, 0x4e, + 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, - 0x64, 0x22, 0x52, 0x0a, 0x18, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, - 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, - 0x04, 0x73, 0x77, 0x61, 0x70, 0x22, 0x5b, 0x0a, 0x15, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, - 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x49, 0x64, 0x22, 0x50, 0x0a, 0x16, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, - 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, - 0x73, 0x77, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x04, - 0x73, 0x77, 0x61, 0x70, 0x22, 0xd4, 0x01, 0x0a, 0x16, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x27, - 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, - 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, - 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x2f, 0x0a, 0x17, 0x4e, - 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x22, 0x5c, 0x0a, 0x1c, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, - 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x22, 0x5a, 0x0a, 0x16, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x65, 0x6e, 0x64, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xe1, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x12, 0x3c, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, + 0x64, 0x22, 0x2f, 0x0a, 0x17, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x70, 0x65, + 0x6e, 0x74, 0x22, 0x5c, 0x0a, 0x1c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x22, 0x5a, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, + 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xe1, 0x02, 0x0a, + 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x3c, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5c, 0x0a, 0x0b, 0x70, 0x65, 0x72, + 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x47, 0x0a, 0x04, 0x76, 0x69, 0x65, 0x77, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x5c, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x12, 0x47, 0x0a, 0x04, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x76, 0x69, 0x65, 0x77, 0x22, 0x5b, 0x0a, 0x17, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x76, 0x69, 0x65, 0x77, + 0x22, 0x5b, 0x0a, 0x17, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, + 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x61, 0x0a, + 0x1d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, + 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, + 0x22, 0x5d, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x61, 0x0a, 0x1d, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, - 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x5d, 0x0a, 0x0d, 0x4e, 0x6f, - 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6e, - 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, - 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x6e, - 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x16, 0x4e, 0x6f, - 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x6e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, - 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, - 0x8c, 0x04, 0x0a, 0x13, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, - 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x56, 0x0a, 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x5f, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, - 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, - 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, - 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, - 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x21, 0x0a, 0x0c, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x53, 0x70, 0x65, - 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, - 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xeb, - 0x03, 0x0a, 0x0a, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x56, 0x0a, - 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x6e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, + 0xb3, 0x01, 0x0a, 0x16, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, + 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6e, 0x6f, + 0x74, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, + 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x6e, 0x6f, + 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, + 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x8c, 0x04, 0x0a, 0x13, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, + 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x56, 0x0a, + 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, - 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, - 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, - 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, - 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x0b, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x77, 0x61, 0x70, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xcb, 0x01, 0x0a, - 0x17, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5a, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, + 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x25, + 0x0a, 0x0e, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, + 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x22, 0xeb, 0x03, 0x0a, 0x0a, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x12, 0x56, 0x0a, 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, + 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, + 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x04, 0x73, + 0x77, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x04, + 0x73, 0x77, 0x61, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, + 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, + 0x5a, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, + 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x53, 0x77, 0x61, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x22, 0xcb, 0x01, 0x0a, 0x17, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5a, + 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0c, 0x74, 0x72, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, - 0x70, 0x61, 0x69, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x54, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0b, 0x74, - 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x22, 0x6d, 0x0a, 0x18, 0x4f, 0x77, - 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x32, 0xee, 0x15, 0x0a, 0x13, 0x56, 0x69, - 0x65, 0x77, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x57, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0c, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x2b, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, - 0x12, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, - 0x71, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, - 0x67, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, - 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, - 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x12, 0x5a, 0x0a, 0x07, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x26, 0x2e, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, + 0x61, 0x69, 0x72, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, + 0x22, 0x6d, 0x0a, 0x18, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x32, + 0xee, 0x15, 0x0a, 0x13, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x57, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x6b, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x12, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, - 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, - 0x0a, 0x0f, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, - 0x64, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, - 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, - 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x59, 0x0a, 0x06, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x70, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x56, 0x0a, + 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x6c, 0x0a, - 0x0d, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2c, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x71, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, + 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x5a, 0x0a, 0x07, 0x57, 0x69, 0x74, 0x6e, + 0x65, 0x73, 0x73, 0x12, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, + 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0f, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, + 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x06, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x30, 0x01, 0x12, 0x6c, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, + 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x60, 0x0a, 0x09, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x09, 0x47, - 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, - 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, - 0x0d, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2c, + 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x0d, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, + 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x08, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2d, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x08, - 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2d, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x10, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x75, 0x0a, 0x10, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, - 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, - 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x08, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, - 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x30, 0x01, 0x12, 0x75, 0x0a, 0x10, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x08, 0x42, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x75, 0x0a, 0x10, 0x4e, 0x6f, + 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x75, 0x0a, 0x10, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, + 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0e, 0x55, 0x6e, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, + 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x10, 0x53, - 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, - 0x77, 0x61, 0x70, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x0f, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, - 0x61, 0x73, 0x68, 0x12, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, - 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x0f, 0x4e, + 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x84, 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x12, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x74, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7b, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x14, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, - 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, - 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x10, 0x4f, 0x77, 0x6e, 0x65, 0x64, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, - 0x12, 0x78, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, - 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, - 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x70, 0x0a, 0x0f, 0x56, 0x69, - 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, - 0x08, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, - 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xf5, 0x01, 0x0a, - 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x09, 0x56, 0x69, 0x65, - 0x77, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x52, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, - 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2f, 0x76, 0x69, 0x65, 0x77, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, - 0x76, 0x69, 0x65, 0x77, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, - 0x56, 0x58, 0xaa, 0x02, 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x56, 0x69, - 0x65, 0x77, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x16, 0x50, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, - 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, - 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x50, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x56, 0x69, 0x65, 0x77, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7b, 0x0a, 0x12, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, + 0x65, 0x72, 0x12, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x14, 0x42, 0x72, + 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, + 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, + 0x10, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, + 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x78, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x30, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, + 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x42, 0xf5, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, + 0x09, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x52, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x76, 0x69, 0x65, 0x77, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x3b, 0x76, 0x69, 0x65, 0x77, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0xa2, 0x02, 0x03, 0x50, 0x56, 0x58, 0xaa, 0x02, 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, + 0x02, 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, 0x5c, + 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, + 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x56, 0x69, 0x65, 0x77, 0x3a, 0x3a, + 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4624,7 +4462,7 @@ func file_penumbra_view_v1alpha1_view_proto_rawDescGZIP() []byte { return file_penumbra_view_v1alpha1_view_proto_rawDescData } -var file_penumbra_view_v1alpha1_view_proto_msgTypes = make([]protoimpl.MessageInfo, 64) +var file_penumbra_view_v1alpha1_view_proto_msgTypes = make([]protoimpl.MessageInfo, 61) var file_penumbra_view_v1alpha1_view_proto_goTypes = []interface{}{ (*AuthorizeAndBuildRequest)(nil), // 0: penumbra.view.v1alpha1.AuthorizeAndBuildRequest (*AuthorizeAndBuildResponse)(nil), // 1: penumbra.view.v1alpha1.AuthorizeAndBuildResponse @@ -4642,251 +4480,243 @@ var file_penumbra_view_v1alpha1_view_proto_goTypes = []interface{}{ (*EphemeralAddressResponse)(nil), // 13: penumbra.view.v1alpha1.EphemeralAddressResponse (*BalancesRequest)(nil), // 14: penumbra.view.v1alpha1.BalancesRequest (*BalancesResponse)(nil), // 15: penumbra.view.v1alpha1.BalancesResponse - (*ViewAuthToken)(nil), // 16: penumbra.view.v1alpha1.ViewAuthToken - (*ViewAuthRequest)(nil), // 17: penumbra.view.v1alpha1.ViewAuthRequest - (*ViewAuthResponse)(nil), // 18: penumbra.view.v1alpha1.ViewAuthResponse - (*StatusRequest)(nil), // 19: penumbra.view.v1alpha1.StatusRequest - (*StatusResponse)(nil), // 20: penumbra.view.v1alpha1.StatusResponse - (*StatusStreamRequest)(nil), // 21: penumbra.view.v1alpha1.StatusStreamRequest - (*StatusStreamResponse)(nil), // 22: penumbra.view.v1alpha1.StatusStreamResponse - (*NotesRequest)(nil), // 23: penumbra.view.v1alpha1.NotesRequest - (*NotesForVotingRequest)(nil), // 24: penumbra.view.v1alpha1.NotesForVotingRequest - (*WitnessRequest)(nil), // 25: penumbra.view.v1alpha1.WitnessRequest - (*WitnessResponse)(nil), // 26: penumbra.view.v1alpha1.WitnessResponse - (*WitnessAndBuildRequest)(nil), // 27: penumbra.view.v1alpha1.WitnessAndBuildRequest - (*WitnessAndBuildResponse)(nil), // 28: penumbra.view.v1alpha1.WitnessAndBuildResponse - (*AssetsRequest)(nil), // 29: penumbra.view.v1alpha1.AssetsRequest - (*AssetsResponse)(nil), // 30: penumbra.view.v1alpha1.AssetsResponse - (*AppParametersRequest)(nil), // 31: penumbra.view.v1alpha1.AppParametersRequest - (*AppParametersResponse)(nil), // 32: penumbra.view.v1alpha1.AppParametersResponse - (*GasPricesRequest)(nil), // 33: penumbra.view.v1alpha1.GasPricesRequest - (*GasPricesResponse)(nil), // 34: penumbra.view.v1alpha1.GasPricesResponse - (*FMDParametersRequest)(nil), // 35: penumbra.view.v1alpha1.FMDParametersRequest - (*FMDParametersResponse)(nil), // 36: penumbra.view.v1alpha1.FMDParametersResponse - (*NoteByCommitmentRequest)(nil), // 37: penumbra.view.v1alpha1.NoteByCommitmentRequest - (*NoteByCommitmentResponse)(nil), // 38: penumbra.view.v1alpha1.NoteByCommitmentResponse - (*SwapByCommitmentRequest)(nil), // 39: penumbra.view.v1alpha1.SwapByCommitmentRequest - (*SwapByCommitmentResponse)(nil), // 40: penumbra.view.v1alpha1.SwapByCommitmentResponse - (*UnclaimedSwapsRequest)(nil), // 41: penumbra.view.v1alpha1.UnclaimedSwapsRequest - (*UnclaimedSwapsResponse)(nil), // 42: penumbra.view.v1alpha1.UnclaimedSwapsResponse - (*NullifierStatusRequest)(nil), // 43: penumbra.view.v1alpha1.NullifierStatusRequest - (*NullifierStatusResponse)(nil), // 44: penumbra.view.v1alpha1.NullifierStatusResponse - (*TransactionInfoByHashRequest)(nil), // 45: penumbra.view.v1alpha1.TransactionInfoByHashRequest - (*TransactionInfoRequest)(nil), // 46: penumbra.view.v1alpha1.TransactionInfoRequest - (*TransactionInfo)(nil), // 47: penumbra.view.v1alpha1.TransactionInfo - (*TransactionInfoResponse)(nil), // 48: penumbra.view.v1alpha1.TransactionInfoResponse - (*TransactionInfoByHashResponse)(nil), // 49: penumbra.view.v1alpha1.TransactionInfoByHashResponse - (*NotesResponse)(nil), // 50: penumbra.view.v1alpha1.NotesResponse - (*NotesForVotingResponse)(nil), // 51: penumbra.view.v1alpha1.NotesForVotingResponse - (*SpendableNoteRecord)(nil), // 52: penumbra.view.v1alpha1.SpendableNoteRecord - (*SwapRecord)(nil), // 53: penumbra.view.v1alpha1.SwapRecord - (*OwnedPositionIdsRequest)(nil), // 54: penumbra.view.v1alpha1.OwnedPositionIdsRequest - (*OwnedPositionIdsResponse)(nil), // 55: penumbra.view.v1alpha1.OwnedPositionIdsResponse - (*TransactionPlannerRequest_Output)(nil), // 56: penumbra.view.v1alpha1.TransactionPlannerRequest.Output - (*TransactionPlannerRequest_Swap)(nil), // 57: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap - (*TransactionPlannerRequest_SwapClaim)(nil), // 58: penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim - (*TransactionPlannerRequest_Delegate)(nil), // 59: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate - (*TransactionPlannerRequest_Undelegate)(nil), // 60: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate - (*TransactionPlannerRequest_PositionOpen)(nil), // 61: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen - (*TransactionPlannerRequest_PositionClose)(nil), // 62: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose - (*TransactionPlannerRequest_PositionWithdraw)(nil), // 63: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw - (*v1alpha1.TransactionPlan)(nil), // 64: penumbra.core.transaction.v1alpha1.TransactionPlan - (*v1alpha1.AuthorizationData)(nil), // 65: penumbra.core.transaction.v1alpha1.AuthorizationData - (*v1alpha1.Transaction)(nil), // 66: penumbra.core.transaction.v1alpha1.Transaction - (*v1alpha11.TransactionId)(nil), // 67: penumbra.core.txhash.v1alpha1.TransactionId - (*v1alpha12.Fee)(nil), // 68: penumbra.core.component.fee.v1alpha1.Fee - (*v1alpha1.MemoPlaintext)(nil), // 69: penumbra.core.transaction.v1alpha1.MemoPlaintext - (*v1alpha13.AddressIndex)(nil), // 70: penumbra.core.keys.v1alpha1.AddressIndex - (*v1alpha13.WalletId)(nil), // 71: penumbra.core.keys.v1alpha1.WalletId - (*v1alpha14.IbcRelay)(nil), // 72: penumbra.core.component.ibc.v1alpha1.IbcRelay - (*v1alpha14.Ics20Withdrawal)(nil), // 73: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - (*v1alpha13.Address)(nil), // 74: penumbra.core.keys.v1alpha1.Address - (*v1alpha15.AssetId)(nil), // 75: penumbra.core.asset.v1alpha1.AssetId - (*v1alpha15.Value)(nil), // 76: penumbra.core.asset.v1alpha1.Value - (*v1alpha13.FullViewingKey)(nil), // 77: penumbra.core.keys.v1alpha1.FullViewingKey - (*v1alpha16.Amount)(nil), // 78: penumbra.core.num.v1alpha1.Amount - (*v1alpha17.StateCommitment)(nil), // 79: penumbra.crypto.tct.v1alpha1.StateCommitment - (*v1alpha1.WitnessData)(nil), // 80: penumbra.core.transaction.v1alpha1.WitnessData - (*v1alpha15.Denom)(nil), // 81: penumbra.core.asset.v1alpha1.Denom - (*v1alpha15.DenomMetadata)(nil), // 82: penumbra.core.asset.v1alpha1.DenomMetadata - (*v1alpha18.AppParameters)(nil), // 83: penumbra.core.app.v1alpha1.AppParameters - (*v1alpha12.GasPrices)(nil), // 84: penumbra.core.component.fee.v1alpha1.GasPrices - (*v1alpha19.FmdParameters)(nil), // 85: penumbra.core.component.chain.v1alpha1.FmdParameters - (*v1alpha110.Nullifier)(nil), // 86: penumbra.core.component.sct.v1alpha1.Nullifier - (*v1alpha1.TransactionPerspective)(nil), // 87: penumbra.core.transaction.v1alpha1.TransactionPerspective - (*v1alpha1.TransactionView)(nil), // 88: penumbra.core.transaction.v1alpha1.TransactionView - (*v1alpha13.IdentityKey)(nil), // 89: penumbra.core.keys.v1alpha1.IdentityKey - (*v1alpha111.Note)(nil), // 90: penumbra.core.component.shielded_pool.v1alpha1.Note - (*v1alpha110.CommitmentSource)(nil), // 91: penumbra.core.component.sct.v1alpha1.CommitmentSource - (*v1alpha112.SwapPlaintext)(nil), // 92: penumbra.core.component.dex.v1alpha1.SwapPlaintext - (*v1alpha112.BatchSwapOutputData)(nil), // 93: penumbra.core.component.dex.v1alpha1.BatchSwapOutputData - (*v1alpha112.PositionState)(nil), // 94: penumbra.core.component.dex.v1alpha1.PositionState - (*v1alpha112.TradingPair)(nil), // 95: penumbra.core.component.dex.v1alpha1.TradingPair - (*v1alpha112.PositionId)(nil), // 96: penumbra.core.component.dex.v1alpha1.PositionId - (*v1alpha113.RateData)(nil), // 97: penumbra.core.component.stake.v1alpha1.RateData - (*v1alpha112.Position)(nil), // 98: penumbra.core.component.dex.v1alpha1.Position - (*v1alpha112.Reserves)(nil), // 99: penumbra.core.component.dex.v1alpha1.Reserves + (*StatusRequest)(nil), // 16: penumbra.view.v1alpha1.StatusRequest + (*StatusResponse)(nil), // 17: penumbra.view.v1alpha1.StatusResponse + (*StatusStreamRequest)(nil), // 18: penumbra.view.v1alpha1.StatusStreamRequest + (*StatusStreamResponse)(nil), // 19: penumbra.view.v1alpha1.StatusStreamResponse + (*NotesRequest)(nil), // 20: penumbra.view.v1alpha1.NotesRequest + (*NotesForVotingRequest)(nil), // 21: penumbra.view.v1alpha1.NotesForVotingRequest + (*WitnessRequest)(nil), // 22: penumbra.view.v1alpha1.WitnessRequest + (*WitnessResponse)(nil), // 23: penumbra.view.v1alpha1.WitnessResponse + (*WitnessAndBuildRequest)(nil), // 24: penumbra.view.v1alpha1.WitnessAndBuildRequest + (*WitnessAndBuildResponse)(nil), // 25: penumbra.view.v1alpha1.WitnessAndBuildResponse + (*AssetsRequest)(nil), // 26: penumbra.view.v1alpha1.AssetsRequest + (*AssetsResponse)(nil), // 27: penumbra.view.v1alpha1.AssetsResponse + (*AppParametersRequest)(nil), // 28: penumbra.view.v1alpha1.AppParametersRequest + (*AppParametersResponse)(nil), // 29: penumbra.view.v1alpha1.AppParametersResponse + (*GasPricesRequest)(nil), // 30: penumbra.view.v1alpha1.GasPricesRequest + (*GasPricesResponse)(nil), // 31: penumbra.view.v1alpha1.GasPricesResponse + (*FMDParametersRequest)(nil), // 32: penumbra.view.v1alpha1.FMDParametersRequest + (*FMDParametersResponse)(nil), // 33: penumbra.view.v1alpha1.FMDParametersResponse + (*NoteByCommitmentRequest)(nil), // 34: penumbra.view.v1alpha1.NoteByCommitmentRequest + (*NoteByCommitmentResponse)(nil), // 35: penumbra.view.v1alpha1.NoteByCommitmentResponse + (*SwapByCommitmentRequest)(nil), // 36: penumbra.view.v1alpha1.SwapByCommitmentRequest + (*SwapByCommitmentResponse)(nil), // 37: penumbra.view.v1alpha1.SwapByCommitmentResponse + (*UnclaimedSwapsRequest)(nil), // 38: penumbra.view.v1alpha1.UnclaimedSwapsRequest + (*UnclaimedSwapsResponse)(nil), // 39: penumbra.view.v1alpha1.UnclaimedSwapsResponse + (*NullifierStatusRequest)(nil), // 40: penumbra.view.v1alpha1.NullifierStatusRequest + (*NullifierStatusResponse)(nil), // 41: penumbra.view.v1alpha1.NullifierStatusResponse + (*TransactionInfoByHashRequest)(nil), // 42: penumbra.view.v1alpha1.TransactionInfoByHashRequest + (*TransactionInfoRequest)(nil), // 43: penumbra.view.v1alpha1.TransactionInfoRequest + (*TransactionInfo)(nil), // 44: penumbra.view.v1alpha1.TransactionInfo + (*TransactionInfoResponse)(nil), // 45: penumbra.view.v1alpha1.TransactionInfoResponse + (*TransactionInfoByHashResponse)(nil), // 46: penumbra.view.v1alpha1.TransactionInfoByHashResponse + (*NotesResponse)(nil), // 47: penumbra.view.v1alpha1.NotesResponse + (*NotesForVotingResponse)(nil), // 48: penumbra.view.v1alpha1.NotesForVotingResponse + (*SpendableNoteRecord)(nil), // 49: penumbra.view.v1alpha1.SpendableNoteRecord + (*SwapRecord)(nil), // 50: penumbra.view.v1alpha1.SwapRecord + (*OwnedPositionIdsRequest)(nil), // 51: penumbra.view.v1alpha1.OwnedPositionIdsRequest + (*OwnedPositionIdsResponse)(nil), // 52: penumbra.view.v1alpha1.OwnedPositionIdsResponse + (*TransactionPlannerRequest_Output)(nil), // 53: penumbra.view.v1alpha1.TransactionPlannerRequest.Output + (*TransactionPlannerRequest_Swap)(nil), // 54: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap + (*TransactionPlannerRequest_SwapClaim)(nil), // 55: penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim + (*TransactionPlannerRequest_Delegate)(nil), // 56: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate + (*TransactionPlannerRequest_Undelegate)(nil), // 57: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate + (*TransactionPlannerRequest_PositionOpen)(nil), // 58: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen + (*TransactionPlannerRequest_PositionClose)(nil), // 59: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose + (*TransactionPlannerRequest_PositionWithdraw)(nil), // 60: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw + (*v1alpha1.TransactionPlan)(nil), // 61: penumbra.core.transaction.v1alpha1.TransactionPlan + (*v1alpha1.AuthorizationData)(nil), // 62: penumbra.core.transaction.v1alpha1.AuthorizationData + (*v1alpha1.Transaction)(nil), // 63: penumbra.core.transaction.v1alpha1.Transaction + (*v1alpha11.TransactionId)(nil), // 64: penumbra.core.txhash.v1alpha1.TransactionId + (*v1alpha12.Fee)(nil), // 65: penumbra.core.component.fee.v1alpha1.Fee + (*v1alpha1.MemoPlaintext)(nil), // 66: penumbra.core.transaction.v1alpha1.MemoPlaintext + (*v1alpha13.AddressIndex)(nil), // 67: penumbra.core.keys.v1alpha1.AddressIndex + (*v1alpha13.WalletId)(nil), // 68: penumbra.core.keys.v1alpha1.WalletId + (*v1alpha14.IbcRelay)(nil), // 69: penumbra.core.component.ibc.v1alpha1.IbcRelay + (*v1alpha14.Ics20Withdrawal)(nil), // 70: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + (*v1alpha13.Address)(nil), // 71: penumbra.core.keys.v1alpha1.Address + (*v1alpha15.AssetId)(nil), // 72: penumbra.core.asset.v1alpha1.AssetId + (*v1alpha15.Value)(nil), // 73: penumbra.core.asset.v1alpha1.Value + (*v1alpha16.Amount)(nil), // 74: penumbra.core.num.v1alpha1.Amount + (*v1alpha17.StateCommitment)(nil), // 75: penumbra.crypto.tct.v1alpha1.StateCommitment + (*v1alpha1.WitnessData)(nil), // 76: penumbra.core.transaction.v1alpha1.WitnessData + (*v1alpha15.Denom)(nil), // 77: penumbra.core.asset.v1alpha1.Denom + (*v1alpha15.DenomMetadata)(nil), // 78: penumbra.core.asset.v1alpha1.DenomMetadata + (*v1alpha18.AppParameters)(nil), // 79: penumbra.core.app.v1alpha1.AppParameters + (*v1alpha12.GasPrices)(nil), // 80: penumbra.core.component.fee.v1alpha1.GasPrices + (*v1alpha19.FmdParameters)(nil), // 81: penumbra.core.component.chain.v1alpha1.FmdParameters + (*v1alpha110.Nullifier)(nil), // 82: penumbra.core.component.sct.v1alpha1.Nullifier + (*v1alpha1.TransactionPerspective)(nil), // 83: penumbra.core.transaction.v1alpha1.TransactionPerspective + (*v1alpha1.TransactionView)(nil), // 84: penumbra.core.transaction.v1alpha1.TransactionView + (*v1alpha13.IdentityKey)(nil), // 85: penumbra.core.keys.v1alpha1.IdentityKey + (*v1alpha111.Note)(nil), // 86: penumbra.core.component.shielded_pool.v1alpha1.Note + (*v1alpha110.CommitmentSource)(nil), // 87: penumbra.core.component.sct.v1alpha1.CommitmentSource + (*v1alpha112.SwapPlaintext)(nil), // 88: penumbra.core.component.dex.v1alpha1.SwapPlaintext + (*v1alpha112.BatchSwapOutputData)(nil), // 89: penumbra.core.component.dex.v1alpha1.BatchSwapOutputData + (*v1alpha112.PositionState)(nil), // 90: penumbra.core.component.dex.v1alpha1.PositionState + (*v1alpha112.TradingPair)(nil), // 91: penumbra.core.component.dex.v1alpha1.TradingPair + (*v1alpha112.PositionId)(nil), // 92: penumbra.core.component.dex.v1alpha1.PositionId + (*v1alpha113.RateData)(nil), // 93: penumbra.core.component.stake.v1alpha1.RateData + (*v1alpha112.Position)(nil), // 94: penumbra.core.component.dex.v1alpha1.Position + (*v1alpha112.Reserves)(nil), // 95: penumbra.core.component.dex.v1alpha1.Reserves } var file_penumbra_view_v1alpha1_view_proto_depIdxs = []int32{ - 64, // 0: penumbra.view.v1alpha1.AuthorizeAndBuildRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan - 65, // 1: penumbra.view.v1alpha1.AuthorizeAndBuildRequest.authorization_data:type_name -> penumbra.core.transaction.v1alpha1.AuthorizationData - 66, // 2: penumbra.view.v1alpha1.AuthorizeAndBuildResponse.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction - 66, // 3: penumbra.view.v1alpha1.BroadcastTransactionRequest.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction - 67, // 4: penumbra.view.v1alpha1.BroadcastTransactionResponse.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId - 68, // 5: penumbra.view.v1alpha1.TransactionPlannerRequest.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee - 69, // 6: penumbra.view.v1alpha1.TransactionPlannerRequest.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext - 70, // 7: penumbra.view.v1alpha1.TransactionPlannerRequest.source:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 71, // 8: penumbra.view.v1alpha1.TransactionPlannerRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 56, // 9: penumbra.view.v1alpha1.TransactionPlannerRequest.outputs:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Output - 57, // 10: penumbra.view.v1alpha1.TransactionPlannerRequest.swaps:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Swap - 58, // 11: penumbra.view.v1alpha1.TransactionPlannerRequest.swap_claims:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim - 59, // 12: penumbra.view.v1alpha1.TransactionPlannerRequest.delegations:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate - 60, // 13: penumbra.view.v1alpha1.TransactionPlannerRequest.undelegations:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate - 72, // 14: penumbra.view.v1alpha1.TransactionPlannerRequest.ibc_relay_actions:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 73, // 15: penumbra.view.v1alpha1.TransactionPlannerRequest.ics20_withdrawals:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 61, // 16: penumbra.view.v1alpha1.TransactionPlannerRequest.position_opens:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen - 62, // 17: penumbra.view.v1alpha1.TransactionPlannerRequest.position_closes:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose - 63, // 18: penumbra.view.v1alpha1.TransactionPlannerRequest.position_withdraws:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw - 64, // 19: penumbra.view.v1alpha1.TransactionPlannerResponse.plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan - 70, // 20: penumbra.view.v1alpha1.AddressByIndexRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 74, // 21: penumbra.view.v1alpha1.AddressByIndexResponse.address:type_name -> penumbra.core.keys.v1alpha1.Address - 71, // 22: penumbra.view.v1alpha1.WalletIdResponse.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 74, // 23: penumbra.view.v1alpha1.IndexByAddressRequest.address:type_name -> penumbra.core.keys.v1alpha1.Address - 70, // 24: penumbra.view.v1alpha1.IndexByAddressResponse.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 70, // 25: penumbra.view.v1alpha1.EphemeralAddressRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 74, // 26: penumbra.view.v1alpha1.EphemeralAddressResponse.address:type_name -> penumbra.core.keys.v1alpha1.Address - 70, // 27: penumbra.view.v1alpha1.BalancesRequest.account_filter:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 75, // 28: penumbra.view.v1alpha1.BalancesRequest.asset_id_filter:type_name -> penumbra.core.asset.v1alpha1.AssetId - 70, // 29: penumbra.view.v1alpha1.BalancesResponse.account:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 76, // 30: penumbra.view.v1alpha1.BalancesResponse.balance:type_name -> penumbra.core.asset.v1alpha1.Value - 77, // 31: penumbra.view.v1alpha1.ViewAuthRequest.fvk:type_name -> penumbra.core.keys.v1alpha1.FullViewingKey - 16, // 32: penumbra.view.v1alpha1.ViewAuthResponse.token:type_name -> penumbra.view.v1alpha1.ViewAuthToken - 71, // 33: penumbra.view.v1alpha1.StatusRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 71, // 34: penumbra.view.v1alpha1.StatusStreamRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 75, // 35: penumbra.view.v1alpha1.NotesRequest.asset_id:type_name -> penumbra.core.asset.v1alpha1.AssetId - 70, // 36: penumbra.view.v1alpha1.NotesRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 78, // 37: penumbra.view.v1alpha1.NotesRequest.amount_to_spend:type_name -> penumbra.core.num.v1alpha1.Amount - 71, // 38: penumbra.view.v1alpha1.NotesRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 70, // 39: penumbra.view.v1alpha1.NotesForVotingRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 71, // 40: penumbra.view.v1alpha1.NotesForVotingRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 79, // 41: penumbra.view.v1alpha1.WitnessRequest.note_commitments:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 64, // 42: penumbra.view.v1alpha1.WitnessRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan - 71, // 43: penumbra.view.v1alpha1.WitnessRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 80, // 44: penumbra.view.v1alpha1.WitnessResponse.witness_data:type_name -> penumbra.core.transaction.v1alpha1.WitnessData - 64, // 45: penumbra.view.v1alpha1.WitnessAndBuildRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan - 65, // 46: penumbra.view.v1alpha1.WitnessAndBuildRequest.authorization_data:type_name -> penumbra.core.transaction.v1alpha1.AuthorizationData - 66, // 47: penumbra.view.v1alpha1.WitnessAndBuildResponse.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction - 81, // 48: penumbra.view.v1alpha1.AssetsRequest.include_specific_denominations:type_name -> penumbra.core.asset.v1alpha1.Denom - 82, // 49: penumbra.view.v1alpha1.AssetsResponse.denom_metadata:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata - 83, // 50: penumbra.view.v1alpha1.AppParametersResponse.parameters:type_name -> penumbra.core.app.v1alpha1.AppParameters - 84, // 51: penumbra.view.v1alpha1.GasPricesResponse.gas_prices:type_name -> penumbra.core.component.fee.v1alpha1.GasPrices - 85, // 52: penumbra.view.v1alpha1.FMDParametersResponse.parameters:type_name -> penumbra.core.component.chain.v1alpha1.FmdParameters - 79, // 53: penumbra.view.v1alpha1.NoteByCommitmentRequest.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 71, // 54: penumbra.view.v1alpha1.NoteByCommitmentRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 52, // 55: penumbra.view.v1alpha1.NoteByCommitmentResponse.spendable_note:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord - 79, // 56: penumbra.view.v1alpha1.SwapByCommitmentRequest.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 71, // 57: penumbra.view.v1alpha1.SwapByCommitmentRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 53, // 58: penumbra.view.v1alpha1.SwapByCommitmentResponse.swap:type_name -> penumbra.view.v1alpha1.SwapRecord - 71, // 59: penumbra.view.v1alpha1.UnclaimedSwapsRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 53, // 60: penumbra.view.v1alpha1.UnclaimedSwapsResponse.swap:type_name -> penumbra.view.v1alpha1.SwapRecord - 86, // 61: penumbra.view.v1alpha1.NullifierStatusRequest.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 71, // 62: penumbra.view.v1alpha1.NullifierStatusRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 67, // 63: penumbra.view.v1alpha1.TransactionInfoByHashRequest.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId - 67, // 64: penumbra.view.v1alpha1.TransactionInfo.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId - 66, // 65: penumbra.view.v1alpha1.TransactionInfo.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction - 87, // 66: penumbra.view.v1alpha1.TransactionInfo.perspective:type_name -> penumbra.core.transaction.v1alpha1.TransactionPerspective - 88, // 67: penumbra.view.v1alpha1.TransactionInfo.view:type_name -> penumbra.core.transaction.v1alpha1.TransactionView - 47, // 68: penumbra.view.v1alpha1.TransactionInfoResponse.tx_info:type_name -> penumbra.view.v1alpha1.TransactionInfo - 47, // 69: penumbra.view.v1alpha1.TransactionInfoByHashResponse.tx_info:type_name -> penumbra.view.v1alpha1.TransactionInfo - 52, // 70: penumbra.view.v1alpha1.NotesResponse.note_record:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord - 52, // 71: penumbra.view.v1alpha1.NotesForVotingResponse.note_record:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord - 89, // 72: penumbra.view.v1alpha1.NotesForVotingResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 79, // 73: penumbra.view.v1alpha1.SpendableNoteRecord.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 90, // 74: penumbra.view.v1alpha1.SpendableNoteRecord.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 70, // 75: penumbra.view.v1alpha1.SpendableNoteRecord.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 86, // 76: penumbra.view.v1alpha1.SpendableNoteRecord.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 91, // 77: penumbra.view.v1alpha1.SpendableNoteRecord.source:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource - 79, // 78: penumbra.view.v1alpha1.SwapRecord.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 92, // 79: penumbra.view.v1alpha1.SwapRecord.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapPlaintext - 86, // 80: penumbra.view.v1alpha1.SwapRecord.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 93, // 81: penumbra.view.v1alpha1.SwapRecord.output_data:type_name -> penumbra.core.component.dex.v1alpha1.BatchSwapOutputData - 91, // 82: penumbra.view.v1alpha1.SwapRecord.source:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource - 94, // 83: penumbra.view.v1alpha1.OwnedPositionIdsRequest.position_state:type_name -> penumbra.core.component.dex.v1alpha1.PositionState - 95, // 84: penumbra.view.v1alpha1.OwnedPositionIdsRequest.trading_pair:type_name -> penumbra.core.component.dex.v1alpha1.TradingPair - 96, // 85: penumbra.view.v1alpha1.OwnedPositionIdsResponse.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId - 76, // 86: penumbra.view.v1alpha1.TransactionPlannerRequest.Output.value:type_name -> penumbra.core.asset.v1alpha1.Value - 74, // 87: penumbra.view.v1alpha1.TransactionPlannerRequest.Output.address:type_name -> penumbra.core.keys.v1alpha1.Address - 76, // 88: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.value:type_name -> penumbra.core.asset.v1alpha1.Value - 75, // 89: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.target_asset:type_name -> penumbra.core.asset.v1alpha1.AssetId - 68, // 90: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee - 74, // 91: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.claim_address:type_name -> penumbra.core.keys.v1alpha1.Address - 79, // 92: penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 78, // 93: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate.amount:type_name -> penumbra.core.num.v1alpha1.Amount - 97, // 94: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData - 76, // 95: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate.value:type_name -> penumbra.core.asset.v1alpha1.Value - 97, // 96: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData - 98, // 97: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen.position:type_name -> penumbra.core.component.dex.v1alpha1.Position - 96, // 98: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId - 96, // 99: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId - 99, // 100: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.reserves:type_name -> penumbra.core.component.dex.v1alpha1.Reserves - 95, // 101: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.trading_pair:type_name -> penumbra.core.component.dex.v1alpha1.TradingPair - 19, // 102: penumbra.view.v1alpha1.ViewProtocolService.Status:input_type -> penumbra.view.v1alpha1.StatusRequest - 21, // 103: penumbra.view.v1alpha1.ViewProtocolService.StatusStream:input_type -> penumbra.view.v1alpha1.StatusStreamRequest - 23, // 104: penumbra.view.v1alpha1.ViewProtocolService.Notes:input_type -> penumbra.view.v1alpha1.NotesRequest - 24, // 105: penumbra.view.v1alpha1.ViewProtocolService.NotesForVoting:input_type -> penumbra.view.v1alpha1.NotesForVotingRequest - 25, // 106: penumbra.view.v1alpha1.ViewProtocolService.Witness:input_type -> penumbra.view.v1alpha1.WitnessRequest - 27, // 107: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:input_type -> penumbra.view.v1alpha1.WitnessAndBuildRequest - 29, // 108: penumbra.view.v1alpha1.ViewProtocolService.Assets:input_type -> penumbra.view.v1alpha1.AssetsRequest - 31, // 109: penumbra.view.v1alpha1.ViewProtocolService.AppParameters:input_type -> penumbra.view.v1alpha1.AppParametersRequest - 33, // 110: penumbra.view.v1alpha1.ViewProtocolService.GasPrices:input_type -> penumbra.view.v1alpha1.GasPricesRequest - 35, // 111: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:input_type -> penumbra.view.v1alpha1.FMDParametersRequest - 6, // 112: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:input_type -> penumbra.view.v1alpha1.AddressByIndexRequest - 8, // 113: penumbra.view.v1alpha1.ViewProtocolService.WalletId:input_type -> penumbra.view.v1alpha1.WalletIdRequest - 10, // 114: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:input_type -> penumbra.view.v1alpha1.IndexByAddressRequest - 12, // 115: penumbra.view.v1alpha1.ViewProtocolService.EphemeralAddress:input_type -> penumbra.view.v1alpha1.EphemeralAddressRequest - 14, // 116: penumbra.view.v1alpha1.ViewProtocolService.Balances:input_type -> penumbra.view.v1alpha1.BalancesRequest - 37, // 117: penumbra.view.v1alpha1.ViewProtocolService.NoteByCommitment:input_type -> penumbra.view.v1alpha1.NoteByCommitmentRequest - 39, // 118: penumbra.view.v1alpha1.ViewProtocolService.SwapByCommitment:input_type -> penumbra.view.v1alpha1.SwapByCommitmentRequest - 41, // 119: penumbra.view.v1alpha1.ViewProtocolService.UnclaimedSwaps:input_type -> penumbra.view.v1alpha1.UnclaimedSwapsRequest - 43, // 120: penumbra.view.v1alpha1.ViewProtocolService.NullifierStatus:input_type -> penumbra.view.v1alpha1.NullifierStatusRequest - 45, // 121: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfoByHash:input_type -> penumbra.view.v1alpha1.TransactionInfoByHashRequest - 46, // 122: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfo:input_type -> penumbra.view.v1alpha1.TransactionInfoRequest - 4, // 123: penumbra.view.v1alpha1.ViewProtocolService.TransactionPlanner:input_type -> penumbra.view.v1alpha1.TransactionPlannerRequest - 2, // 124: penumbra.view.v1alpha1.ViewProtocolService.BroadcastTransaction:input_type -> penumbra.view.v1alpha1.BroadcastTransactionRequest - 54, // 125: penumbra.view.v1alpha1.ViewProtocolService.OwnedPositionIds:input_type -> penumbra.view.v1alpha1.OwnedPositionIdsRequest - 0, // 126: penumbra.view.v1alpha1.ViewProtocolService.AuthorizeAndBuild:input_type -> penumbra.view.v1alpha1.AuthorizeAndBuildRequest - 17, // 127: penumbra.view.v1alpha1.ViewAuthService.ViewAuth:input_type -> penumbra.view.v1alpha1.ViewAuthRequest - 20, // 128: penumbra.view.v1alpha1.ViewProtocolService.Status:output_type -> penumbra.view.v1alpha1.StatusResponse - 22, // 129: penumbra.view.v1alpha1.ViewProtocolService.StatusStream:output_type -> penumbra.view.v1alpha1.StatusStreamResponse - 50, // 130: penumbra.view.v1alpha1.ViewProtocolService.Notes:output_type -> penumbra.view.v1alpha1.NotesResponse - 51, // 131: penumbra.view.v1alpha1.ViewProtocolService.NotesForVoting:output_type -> penumbra.view.v1alpha1.NotesForVotingResponse - 26, // 132: penumbra.view.v1alpha1.ViewProtocolService.Witness:output_type -> penumbra.view.v1alpha1.WitnessResponse - 28, // 133: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:output_type -> penumbra.view.v1alpha1.WitnessAndBuildResponse - 30, // 134: penumbra.view.v1alpha1.ViewProtocolService.Assets:output_type -> penumbra.view.v1alpha1.AssetsResponse - 32, // 135: penumbra.view.v1alpha1.ViewProtocolService.AppParameters:output_type -> penumbra.view.v1alpha1.AppParametersResponse - 34, // 136: penumbra.view.v1alpha1.ViewProtocolService.GasPrices:output_type -> penumbra.view.v1alpha1.GasPricesResponse - 36, // 137: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:output_type -> penumbra.view.v1alpha1.FMDParametersResponse - 7, // 138: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:output_type -> penumbra.view.v1alpha1.AddressByIndexResponse - 9, // 139: penumbra.view.v1alpha1.ViewProtocolService.WalletId:output_type -> penumbra.view.v1alpha1.WalletIdResponse - 11, // 140: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:output_type -> penumbra.view.v1alpha1.IndexByAddressResponse - 13, // 141: penumbra.view.v1alpha1.ViewProtocolService.EphemeralAddress:output_type -> penumbra.view.v1alpha1.EphemeralAddressResponse - 15, // 142: penumbra.view.v1alpha1.ViewProtocolService.Balances:output_type -> penumbra.view.v1alpha1.BalancesResponse - 38, // 143: penumbra.view.v1alpha1.ViewProtocolService.NoteByCommitment:output_type -> penumbra.view.v1alpha1.NoteByCommitmentResponse - 40, // 144: penumbra.view.v1alpha1.ViewProtocolService.SwapByCommitment:output_type -> penumbra.view.v1alpha1.SwapByCommitmentResponse - 42, // 145: penumbra.view.v1alpha1.ViewProtocolService.UnclaimedSwaps:output_type -> penumbra.view.v1alpha1.UnclaimedSwapsResponse - 44, // 146: penumbra.view.v1alpha1.ViewProtocolService.NullifierStatus:output_type -> penumbra.view.v1alpha1.NullifierStatusResponse - 49, // 147: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfoByHash:output_type -> penumbra.view.v1alpha1.TransactionInfoByHashResponse - 48, // 148: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfo:output_type -> penumbra.view.v1alpha1.TransactionInfoResponse - 5, // 149: penumbra.view.v1alpha1.ViewProtocolService.TransactionPlanner:output_type -> penumbra.view.v1alpha1.TransactionPlannerResponse - 3, // 150: penumbra.view.v1alpha1.ViewProtocolService.BroadcastTransaction:output_type -> penumbra.view.v1alpha1.BroadcastTransactionResponse - 55, // 151: penumbra.view.v1alpha1.ViewProtocolService.OwnedPositionIds:output_type -> penumbra.view.v1alpha1.OwnedPositionIdsResponse - 1, // 152: penumbra.view.v1alpha1.ViewProtocolService.AuthorizeAndBuild:output_type -> penumbra.view.v1alpha1.AuthorizeAndBuildResponse - 18, // 153: penumbra.view.v1alpha1.ViewAuthService.ViewAuth:output_type -> penumbra.view.v1alpha1.ViewAuthResponse - 128, // [128:154] is the sub-list for method output_type - 102, // [102:128] is the sub-list for method input_type - 102, // [102:102] is the sub-list for extension type_name - 102, // [102:102] is the sub-list for extension extendee - 0, // [0:102] is the sub-list for field type_name + 61, // 0: penumbra.view.v1alpha1.AuthorizeAndBuildRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan + 62, // 1: penumbra.view.v1alpha1.AuthorizeAndBuildRequest.authorization_data:type_name -> penumbra.core.transaction.v1alpha1.AuthorizationData + 63, // 2: penumbra.view.v1alpha1.AuthorizeAndBuildResponse.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction + 63, // 3: penumbra.view.v1alpha1.BroadcastTransactionRequest.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction + 64, // 4: penumbra.view.v1alpha1.BroadcastTransactionResponse.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId + 65, // 5: penumbra.view.v1alpha1.TransactionPlannerRequest.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee + 66, // 6: penumbra.view.v1alpha1.TransactionPlannerRequest.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext + 67, // 7: penumbra.view.v1alpha1.TransactionPlannerRequest.source:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 68, // 8: penumbra.view.v1alpha1.TransactionPlannerRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId + 53, // 9: penumbra.view.v1alpha1.TransactionPlannerRequest.outputs:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Output + 54, // 10: penumbra.view.v1alpha1.TransactionPlannerRequest.swaps:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Swap + 55, // 11: penumbra.view.v1alpha1.TransactionPlannerRequest.swap_claims:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim + 56, // 12: penumbra.view.v1alpha1.TransactionPlannerRequest.delegations:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate + 57, // 13: penumbra.view.v1alpha1.TransactionPlannerRequest.undelegations:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate + 69, // 14: penumbra.view.v1alpha1.TransactionPlannerRequest.ibc_relay_actions:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 70, // 15: penumbra.view.v1alpha1.TransactionPlannerRequest.ics20_withdrawals:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 58, // 16: penumbra.view.v1alpha1.TransactionPlannerRequest.position_opens:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen + 59, // 17: penumbra.view.v1alpha1.TransactionPlannerRequest.position_closes:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose + 60, // 18: penumbra.view.v1alpha1.TransactionPlannerRequest.position_withdraws:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw + 61, // 19: penumbra.view.v1alpha1.TransactionPlannerResponse.plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan + 67, // 20: penumbra.view.v1alpha1.AddressByIndexRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 71, // 21: penumbra.view.v1alpha1.AddressByIndexResponse.address:type_name -> penumbra.core.keys.v1alpha1.Address + 68, // 22: penumbra.view.v1alpha1.WalletIdResponse.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId + 71, // 23: penumbra.view.v1alpha1.IndexByAddressRequest.address:type_name -> penumbra.core.keys.v1alpha1.Address + 67, // 24: penumbra.view.v1alpha1.IndexByAddressResponse.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 67, // 25: penumbra.view.v1alpha1.EphemeralAddressRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 71, // 26: penumbra.view.v1alpha1.EphemeralAddressResponse.address:type_name -> penumbra.core.keys.v1alpha1.Address + 67, // 27: penumbra.view.v1alpha1.BalancesRequest.account_filter:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 72, // 28: penumbra.view.v1alpha1.BalancesRequest.asset_id_filter:type_name -> penumbra.core.asset.v1alpha1.AssetId + 67, // 29: penumbra.view.v1alpha1.BalancesResponse.account:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 73, // 30: penumbra.view.v1alpha1.BalancesResponse.balance:type_name -> penumbra.core.asset.v1alpha1.Value + 68, // 31: penumbra.view.v1alpha1.StatusRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId + 68, // 32: penumbra.view.v1alpha1.StatusStreamRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId + 72, // 33: penumbra.view.v1alpha1.NotesRequest.asset_id:type_name -> penumbra.core.asset.v1alpha1.AssetId + 67, // 34: penumbra.view.v1alpha1.NotesRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 74, // 35: penumbra.view.v1alpha1.NotesRequest.amount_to_spend:type_name -> penumbra.core.num.v1alpha1.Amount + 68, // 36: penumbra.view.v1alpha1.NotesRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId + 67, // 37: penumbra.view.v1alpha1.NotesForVotingRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 68, // 38: penumbra.view.v1alpha1.NotesForVotingRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId + 75, // 39: penumbra.view.v1alpha1.WitnessRequest.note_commitments:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 61, // 40: penumbra.view.v1alpha1.WitnessRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan + 68, // 41: penumbra.view.v1alpha1.WitnessRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId + 76, // 42: penumbra.view.v1alpha1.WitnessResponse.witness_data:type_name -> penumbra.core.transaction.v1alpha1.WitnessData + 61, // 43: penumbra.view.v1alpha1.WitnessAndBuildRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan + 62, // 44: penumbra.view.v1alpha1.WitnessAndBuildRequest.authorization_data:type_name -> penumbra.core.transaction.v1alpha1.AuthorizationData + 63, // 45: penumbra.view.v1alpha1.WitnessAndBuildResponse.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction + 77, // 46: penumbra.view.v1alpha1.AssetsRequest.include_specific_denominations:type_name -> penumbra.core.asset.v1alpha1.Denom + 78, // 47: penumbra.view.v1alpha1.AssetsResponse.denom_metadata:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata + 79, // 48: penumbra.view.v1alpha1.AppParametersResponse.parameters:type_name -> penumbra.core.app.v1alpha1.AppParameters + 80, // 49: penumbra.view.v1alpha1.GasPricesResponse.gas_prices:type_name -> penumbra.core.component.fee.v1alpha1.GasPrices + 81, // 50: penumbra.view.v1alpha1.FMDParametersResponse.parameters:type_name -> penumbra.core.component.chain.v1alpha1.FmdParameters + 75, // 51: penumbra.view.v1alpha1.NoteByCommitmentRequest.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 68, // 52: penumbra.view.v1alpha1.NoteByCommitmentRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId + 49, // 53: penumbra.view.v1alpha1.NoteByCommitmentResponse.spendable_note:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord + 75, // 54: penumbra.view.v1alpha1.SwapByCommitmentRequest.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 68, // 55: penumbra.view.v1alpha1.SwapByCommitmentRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId + 50, // 56: penumbra.view.v1alpha1.SwapByCommitmentResponse.swap:type_name -> penumbra.view.v1alpha1.SwapRecord + 68, // 57: penumbra.view.v1alpha1.UnclaimedSwapsRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId + 50, // 58: penumbra.view.v1alpha1.UnclaimedSwapsResponse.swap:type_name -> penumbra.view.v1alpha1.SwapRecord + 82, // 59: penumbra.view.v1alpha1.NullifierStatusRequest.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 68, // 60: penumbra.view.v1alpha1.NullifierStatusRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId + 64, // 61: penumbra.view.v1alpha1.TransactionInfoByHashRequest.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId + 64, // 62: penumbra.view.v1alpha1.TransactionInfo.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId + 63, // 63: penumbra.view.v1alpha1.TransactionInfo.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction + 83, // 64: penumbra.view.v1alpha1.TransactionInfo.perspective:type_name -> penumbra.core.transaction.v1alpha1.TransactionPerspective + 84, // 65: penumbra.view.v1alpha1.TransactionInfo.view:type_name -> penumbra.core.transaction.v1alpha1.TransactionView + 44, // 66: penumbra.view.v1alpha1.TransactionInfoResponse.tx_info:type_name -> penumbra.view.v1alpha1.TransactionInfo + 44, // 67: penumbra.view.v1alpha1.TransactionInfoByHashResponse.tx_info:type_name -> penumbra.view.v1alpha1.TransactionInfo + 49, // 68: penumbra.view.v1alpha1.NotesResponse.note_record:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord + 49, // 69: penumbra.view.v1alpha1.NotesForVotingResponse.note_record:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord + 85, // 70: penumbra.view.v1alpha1.NotesForVotingResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 75, // 71: penumbra.view.v1alpha1.SpendableNoteRecord.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 86, // 72: penumbra.view.v1alpha1.SpendableNoteRecord.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 67, // 73: penumbra.view.v1alpha1.SpendableNoteRecord.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 82, // 74: penumbra.view.v1alpha1.SpendableNoteRecord.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 87, // 75: penumbra.view.v1alpha1.SpendableNoteRecord.source:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource + 75, // 76: penumbra.view.v1alpha1.SwapRecord.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 88, // 77: penumbra.view.v1alpha1.SwapRecord.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapPlaintext + 82, // 78: penumbra.view.v1alpha1.SwapRecord.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 89, // 79: penumbra.view.v1alpha1.SwapRecord.output_data:type_name -> penumbra.core.component.dex.v1alpha1.BatchSwapOutputData + 87, // 80: penumbra.view.v1alpha1.SwapRecord.source:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource + 90, // 81: penumbra.view.v1alpha1.OwnedPositionIdsRequest.position_state:type_name -> penumbra.core.component.dex.v1alpha1.PositionState + 91, // 82: penumbra.view.v1alpha1.OwnedPositionIdsRequest.trading_pair:type_name -> penumbra.core.component.dex.v1alpha1.TradingPair + 92, // 83: penumbra.view.v1alpha1.OwnedPositionIdsResponse.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId + 73, // 84: penumbra.view.v1alpha1.TransactionPlannerRequest.Output.value:type_name -> penumbra.core.asset.v1alpha1.Value + 71, // 85: penumbra.view.v1alpha1.TransactionPlannerRequest.Output.address:type_name -> penumbra.core.keys.v1alpha1.Address + 73, // 86: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.value:type_name -> penumbra.core.asset.v1alpha1.Value + 72, // 87: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.target_asset:type_name -> penumbra.core.asset.v1alpha1.AssetId + 65, // 88: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee + 71, // 89: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.claim_address:type_name -> penumbra.core.keys.v1alpha1.Address + 75, // 90: penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 74, // 91: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate.amount:type_name -> penumbra.core.num.v1alpha1.Amount + 93, // 92: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData + 73, // 93: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate.value:type_name -> penumbra.core.asset.v1alpha1.Value + 93, // 94: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData + 94, // 95: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen.position:type_name -> penumbra.core.component.dex.v1alpha1.Position + 92, // 96: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId + 92, // 97: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId + 95, // 98: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.reserves:type_name -> penumbra.core.component.dex.v1alpha1.Reserves + 91, // 99: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.trading_pair:type_name -> penumbra.core.component.dex.v1alpha1.TradingPair + 16, // 100: penumbra.view.v1alpha1.ViewProtocolService.Status:input_type -> penumbra.view.v1alpha1.StatusRequest + 18, // 101: penumbra.view.v1alpha1.ViewProtocolService.StatusStream:input_type -> penumbra.view.v1alpha1.StatusStreamRequest + 20, // 102: penumbra.view.v1alpha1.ViewProtocolService.Notes:input_type -> penumbra.view.v1alpha1.NotesRequest + 21, // 103: penumbra.view.v1alpha1.ViewProtocolService.NotesForVoting:input_type -> penumbra.view.v1alpha1.NotesForVotingRequest + 22, // 104: penumbra.view.v1alpha1.ViewProtocolService.Witness:input_type -> penumbra.view.v1alpha1.WitnessRequest + 24, // 105: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:input_type -> penumbra.view.v1alpha1.WitnessAndBuildRequest + 26, // 106: penumbra.view.v1alpha1.ViewProtocolService.Assets:input_type -> penumbra.view.v1alpha1.AssetsRequest + 28, // 107: penumbra.view.v1alpha1.ViewProtocolService.AppParameters:input_type -> penumbra.view.v1alpha1.AppParametersRequest + 30, // 108: penumbra.view.v1alpha1.ViewProtocolService.GasPrices:input_type -> penumbra.view.v1alpha1.GasPricesRequest + 32, // 109: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:input_type -> penumbra.view.v1alpha1.FMDParametersRequest + 6, // 110: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:input_type -> penumbra.view.v1alpha1.AddressByIndexRequest + 8, // 111: penumbra.view.v1alpha1.ViewProtocolService.WalletId:input_type -> penumbra.view.v1alpha1.WalletIdRequest + 10, // 112: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:input_type -> penumbra.view.v1alpha1.IndexByAddressRequest + 12, // 113: penumbra.view.v1alpha1.ViewProtocolService.EphemeralAddress:input_type -> penumbra.view.v1alpha1.EphemeralAddressRequest + 14, // 114: penumbra.view.v1alpha1.ViewProtocolService.Balances:input_type -> penumbra.view.v1alpha1.BalancesRequest + 34, // 115: penumbra.view.v1alpha1.ViewProtocolService.NoteByCommitment:input_type -> penumbra.view.v1alpha1.NoteByCommitmentRequest + 36, // 116: penumbra.view.v1alpha1.ViewProtocolService.SwapByCommitment:input_type -> penumbra.view.v1alpha1.SwapByCommitmentRequest + 38, // 117: penumbra.view.v1alpha1.ViewProtocolService.UnclaimedSwaps:input_type -> penumbra.view.v1alpha1.UnclaimedSwapsRequest + 40, // 118: penumbra.view.v1alpha1.ViewProtocolService.NullifierStatus:input_type -> penumbra.view.v1alpha1.NullifierStatusRequest + 42, // 119: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfoByHash:input_type -> penumbra.view.v1alpha1.TransactionInfoByHashRequest + 43, // 120: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfo:input_type -> penumbra.view.v1alpha1.TransactionInfoRequest + 4, // 121: penumbra.view.v1alpha1.ViewProtocolService.TransactionPlanner:input_type -> penumbra.view.v1alpha1.TransactionPlannerRequest + 2, // 122: penumbra.view.v1alpha1.ViewProtocolService.BroadcastTransaction:input_type -> penumbra.view.v1alpha1.BroadcastTransactionRequest + 51, // 123: penumbra.view.v1alpha1.ViewProtocolService.OwnedPositionIds:input_type -> penumbra.view.v1alpha1.OwnedPositionIdsRequest + 0, // 124: penumbra.view.v1alpha1.ViewProtocolService.AuthorizeAndBuild:input_type -> penumbra.view.v1alpha1.AuthorizeAndBuildRequest + 17, // 125: penumbra.view.v1alpha1.ViewProtocolService.Status:output_type -> penumbra.view.v1alpha1.StatusResponse + 19, // 126: penumbra.view.v1alpha1.ViewProtocolService.StatusStream:output_type -> penumbra.view.v1alpha1.StatusStreamResponse + 47, // 127: penumbra.view.v1alpha1.ViewProtocolService.Notes:output_type -> penumbra.view.v1alpha1.NotesResponse + 48, // 128: penumbra.view.v1alpha1.ViewProtocolService.NotesForVoting:output_type -> penumbra.view.v1alpha1.NotesForVotingResponse + 23, // 129: penumbra.view.v1alpha1.ViewProtocolService.Witness:output_type -> penumbra.view.v1alpha1.WitnessResponse + 25, // 130: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:output_type -> penumbra.view.v1alpha1.WitnessAndBuildResponse + 27, // 131: penumbra.view.v1alpha1.ViewProtocolService.Assets:output_type -> penumbra.view.v1alpha1.AssetsResponse + 29, // 132: penumbra.view.v1alpha1.ViewProtocolService.AppParameters:output_type -> penumbra.view.v1alpha1.AppParametersResponse + 31, // 133: penumbra.view.v1alpha1.ViewProtocolService.GasPrices:output_type -> penumbra.view.v1alpha1.GasPricesResponse + 33, // 134: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:output_type -> penumbra.view.v1alpha1.FMDParametersResponse + 7, // 135: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:output_type -> penumbra.view.v1alpha1.AddressByIndexResponse + 9, // 136: penumbra.view.v1alpha1.ViewProtocolService.WalletId:output_type -> penumbra.view.v1alpha1.WalletIdResponse + 11, // 137: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:output_type -> penumbra.view.v1alpha1.IndexByAddressResponse + 13, // 138: penumbra.view.v1alpha1.ViewProtocolService.EphemeralAddress:output_type -> penumbra.view.v1alpha1.EphemeralAddressResponse + 15, // 139: penumbra.view.v1alpha1.ViewProtocolService.Balances:output_type -> penumbra.view.v1alpha1.BalancesResponse + 35, // 140: penumbra.view.v1alpha1.ViewProtocolService.NoteByCommitment:output_type -> penumbra.view.v1alpha1.NoteByCommitmentResponse + 37, // 141: penumbra.view.v1alpha1.ViewProtocolService.SwapByCommitment:output_type -> penumbra.view.v1alpha1.SwapByCommitmentResponse + 39, // 142: penumbra.view.v1alpha1.ViewProtocolService.UnclaimedSwaps:output_type -> penumbra.view.v1alpha1.UnclaimedSwapsResponse + 41, // 143: penumbra.view.v1alpha1.ViewProtocolService.NullifierStatus:output_type -> penumbra.view.v1alpha1.NullifierStatusResponse + 46, // 144: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfoByHash:output_type -> penumbra.view.v1alpha1.TransactionInfoByHashResponse + 45, // 145: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfo:output_type -> penumbra.view.v1alpha1.TransactionInfoResponse + 5, // 146: penumbra.view.v1alpha1.ViewProtocolService.TransactionPlanner:output_type -> penumbra.view.v1alpha1.TransactionPlannerResponse + 3, // 147: penumbra.view.v1alpha1.ViewProtocolService.BroadcastTransaction:output_type -> penumbra.view.v1alpha1.BroadcastTransactionResponse + 52, // 148: penumbra.view.v1alpha1.ViewProtocolService.OwnedPositionIds:output_type -> penumbra.view.v1alpha1.OwnedPositionIdsResponse + 1, // 149: penumbra.view.v1alpha1.ViewProtocolService.AuthorizeAndBuild:output_type -> penumbra.view.v1alpha1.AuthorizeAndBuildResponse + 125, // [125:150] is the sub-list for method output_type + 100, // [100:125] is the sub-list for method input_type + 100, // [100:100] is the sub-list for extension type_name + 100, // [100:100] is the sub-list for extension extendee + 0, // [0:100] is the sub-list for field type_name } func init() { file_penumbra_view_v1alpha1_view_proto_init() } @@ -5088,42 +4918,6 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ViewAuthToken); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_penumbra_view_v1alpha1_view_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ViewAuthRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_penumbra_view_v1alpha1_view_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ViewAuthResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_penumbra_view_v1alpha1_view_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusRequest); i { case 0: return &v.state @@ -5135,7 +4929,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusResponse); i { case 0: return &v.state @@ -5147,7 +4941,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusStreamRequest); i { case 0: return &v.state @@ -5159,7 +4953,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusStreamResponse); i { case 0: return &v.state @@ -5171,7 +4965,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NotesRequest); i { case 0: return &v.state @@ -5183,7 +4977,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NotesForVotingRequest); i { case 0: return &v.state @@ -5195,7 +4989,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WitnessRequest); i { case 0: return &v.state @@ -5207,7 +5001,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WitnessResponse); i { case 0: return &v.state @@ -5219,7 +5013,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WitnessAndBuildRequest); i { case 0: return &v.state @@ -5231,7 +5025,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WitnessAndBuildResponse); i { case 0: return &v.state @@ -5243,7 +5037,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AssetsRequest); i { case 0: return &v.state @@ -5255,7 +5049,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AssetsResponse); i { case 0: return &v.state @@ -5267,7 +5061,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppParametersRequest); i { case 0: return &v.state @@ -5279,7 +5073,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AppParametersResponse); i { case 0: return &v.state @@ -5291,7 +5085,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GasPricesRequest); i { case 0: return &v.state @@ -5303,7 +5097,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GasPricesResponse); i { case 0: return &v.state @@ -5315,7 +5109,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FMDParametersRequest); i { case 0: return &v.state @@ -5327,7 +5121,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FMDParametersResponse); i { case 0: return &v.state @@ -5339,7 +5133,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NoteByCommitmentRequest); i { case 0: return &v.state @@ -5351,7 +5145,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NoteByCommitmentResponse); i { case 0: return &v.state @@ -5363,7 +5157,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SwapByCommitmentRequest); i { case 0: return &v.state @@ -5375,7 +5169,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SwapByCommitmentResponse); i { case 0: return &v.state @@ -5387,7 +5181,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnclaimedSwapsRequest); i { case 0: return &v.state @@ -5399,7 +5193,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnclaimedSwapsResponse); i { case 0: return &v.state @@ -5411,7 +5205,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NullifierStatusRequest); i { case 0: return &v.state @@ -5423,7 +5217,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NullifierStatusResponse); i { case 0: return &v.state @@ -5435,7 +5229,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionInfoByHashRequest); i { case 0: return &v.state @@ -5447,7 +5241,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionInfoRequest); i { case 0: return &v.state @@ -5459,7 +5253,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionInfo); i { case 0: return &v.state @@ -5471,7 +5265,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionInfoResponse); i { case 0: return &v.state @@ -5483,7 +5277,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionInfoByHashResponse); i { case 0: return &v.state @@ -5495,7 +5289,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NotesResponse); i { case 0: return &v.state @@ -5507,7 +5301,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NotesForVotingResponse); i { case 0: return &v.state @@ -5519,7 +5313,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SpendableNoteRecord); i { case 0: return &v.state @@ -5531,7 +5325,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SwapRecord); i { case 0: return &v.state @@ -5543,7 +5337,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OwnedPositionIdsRequest); i { case 0: return &v.state @@ -5555,7 +5349,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OwnedPositionIdsResponse); i { case 0: return &v.state @@ -5567,7 +5361,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionPlannerRequest_Output); i { case 0: return &v.state @@ -5579,7 +5373,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionPlannerRequest_Swap); i { case 0: return &v.state @@ -5591,7 +5385,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionPlannerRequest_SwapClaim); i { case 0: return &v.state @@ -5603,7 +5397,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionPlannerRequest_Delegate); i { case 0: return &v.state @@ -5615,7 +5409,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionPlannerRequest_Undelegate); i { case 0: return &v.state @@ -5627,7 +5421,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionPlannerRequest_PositionOpen); i { case 0: return &v.state @@ -5639,7 +5433,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionPlannerRequest_PositionClose); i { case 0: return &v.state @@ -5651,7 +5445,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { return nil } } - file_penumbra_view_v1alpha1_view_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_view_v1alpha1_view_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionPlannerRequest_PositionWithdraw); i { case 0: return &v.state @@ -5670,9 +5464,9 @@ func file_penumbra_view_v1alpha1_view_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_view_v1alpha1_view_proto_rawDesc, NumEnums: 0, - NumMessages: 64, + NumMessages: 61, NumExtensions: 0, - NumServices: 2, + NumServices: 1, }, GoTypes: file_penumbra_view_v1alpha1_view_proto_goTypes, DependencyIndexes: file_penumbra_view_v1alpha1_view_proto_depIdxs, diff --git a/proto/penumbra/penumbra/view/v1alpha1/view.proto b/proto/penumbra/penumbra/view/v1alpha1/view.proto index 9dc75986e6..c08beeecce 100644 --- a/proto/penumbra/penumbra/view/v1alpha1/view.proto +++ b/proto/penumbra/penumbra/view/v1alpha1/view.proto @@ -263,23 +263,6 @@ message BalancesResponse { core.asset.v1alpha1.Value balance = 2; } -// Scaffolding for bearer-token authentication for the ViewService. -message ViewAuthToken { - bytes inner = 1; -} - -message ViewAuthRequest { - core.keys.v1alpha1.FullViewingKey fvk = 1; -} - -message ViewAuthResponse { - ViewAuthToken token = 1; -} - -service ViewAuthService { - rpc ViewAuth(ViewAuthRequest) returns (ViewAuthResponse); -} - // Requests sync status of the view service. message StatusRequest { // Identifies the wallet id to query. diff --git a/tools/proto-compiler/Cargo.lock b/tools/proto-compiler/Cargo.lock index 6ab82b95b9..4f554bba17 100644 --- a/tools/proto-compiler/Cargo.lock +++ b/tools/proto-compiler/Cargo.lock @@ -474,9 +474,9 @@ dependencies = [ [[package]] name = "ibc-proto" -version = "0.39.1" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8a8b1356652b9f160f5a010dd6b084675b8a28e163bf2b41ca5abecf27d9701" +checksum = "4222cfac37f21da28292db0f2673fdb8455284895891ff09979680243efb9a20" dependencies = [ "base64 0.21.4", "bytes", From 3cc859d9045c91b20510d7f264c144b5199188e0 Mon Sep 17 00:00:00 2001 From: monem <119044801+pucedoteth@users.noreply.github.com> Date: Tue, 2 Jan 2024 21:58:30 +0200 Subject: [PATCH 21/84] Update protobuf.md (#3538) * Update protobuf.md Signed-off-by: monem <119044801+pucedoteth@users.noreply.github.com> * Update protobuf.md Signed-off-by: monem <119044801+pucedoteth@users.noreply.github.com> --------- Signed-off-by: monem <119044801+pucedoteth@users.noreply.github.com> --- docs/guide/src/dev/protobuf.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/src/dev/protobuf.md b/docs/guide/src/dev/protobuf.md index 578db3adca..57b87b4aa4 100644 --- a/docs/guide/src/dev/protobuf.md +++ b/docs/guide/src/dev/protobuf.md @@ -33,7 +33,7 @@ unzip protoc-24.4-linux-x86_64.zip -d ~/.local/ ## Installing buf The `buf` tool is required to update lockfiles used for version management in -the [Buf Schema Registry](https://buf.build.penumbra-zone/penumbra). Visit +the [Buf Schema Registry](https://buf.build/penumbra-zone/penumbra). Visit the [buf download page](https://buf.build/docs/installation/) to obtain a version. After installing, run `buf --version` and confirm you're running at least `1.27.0` (or newer). From 4585b2c8496bb844577e834d3a824b5d63916d57 Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Tue, 2 Jan 2024 12:06:48 -0800 Subject: [PATCH 22/84] ci: disable osiris handling We've disabled Osiris, likely indefinitely, so let's remove it from the CI workflows. Otherwise, preview deploys report as failed, even though the preview environment was created succesfully. In the medium term, we hope to have a Hummingbot service running, which will serve a similar role to Osiris. Also removes the unused relayer reboot, as we're using Hermes for IBC now. --- .github/workflows/deploy-preview.yml | 11 ----------- .github/workflows/deploy-testnet.yml | 12 ------------ 2 files changed, 23 deletions(-) diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index dd28f12c29..4222cf0531 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -71,14 +71,3 @@ jobs: - name: bounce grpcui run: kubectl rollout restart deployment grpcui-preview - - - name: bounce osiris - run: kubectl rollout restart deployment osiris-preview - - # We only run one (1) relayer instance, and re-deploy it as part of the preview update. - # The other end of the configured path is the long-running testnet. - # We ignore errors on the bounce, because we may have removed the deployment out of band: - # we're still working on reliable packet relaying between test chains. - - name: bounce relayer - run: |- - kubectl rollout restart deployment relayer-preview || true diff --git a/.github/workflows/deploy-testnet.yml b/.github/workflows/deploy-testnet.yml index 9bc91adab1..8019000003 100644 --- a/.github/workflows/deploy-testnet.yml +++ b/.github/workflows/deploy-testnet.yml @@ -64,18 +64,6 @@ jobs: - name: bounce grpcui run: kubectl rollout restart deployment grpcui-testnet - - name: bounce osiris - shell: bash - run: |- - export PENUMBRA_VERSION='${{ github.event.inputs.image_tag || github.ref_name }}' - # Set the exact version for the current testnet for Osiris, so deps match. - kubectl set image deployments \ - -l "app.kubernetes.io/instance=osiris-testnet" \ - "osiris=ghcr.io/penumbra-zone/osiris:penumbra-${PENUMBRA_VERSION}" - # Wait for rollout to complete. Will block until pods are marked Ready. - kubectl rollout status deployment \ - -l "app.kubernetes.io/instance=osiris-testnet" - - name: bounce galileo shell: bash run: |- From 303fc03f0f371a7b12bee56fe676f3d803a931c9 Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Tue, 2 Jan 2024 11:30:03 -0800 Subject: [PATCH 23/84] ci: add moons of mars to testnet names We've shipped testnets for the Jovian and Saturnine moons. Now, we add the Mars of moons, only two (2). If we need more than this, we can follow up with the moons of Neptune for more headroom. Also updates the names of fullnodes in the CI deployment, which were previously set to moons of Mars and Neptune. Now moon names are only used to refer to testnets, and the fullnode monikers are notable asteroids. --- deployments/helmfile.d/vars/penumbra-devnet-nodes-ips.yml | 6 +++--- .../helmfile.d/vars/penumbra-preview-nodes-ips.yml | 8 ++++---- .../helmfile.d/vars/penumbra-testnet-nodes-ips.yml | 8 ++++---- deployments/scripts/get-lb-ips | 5 +++-- testnets/names.txt | 2 ++ 5 files changed, 16 insertions(+), 13 deletions(-) diff --git a/deployments/helmfile.d/vars/penumbra-devnet-nodes-ips.yml b/deployments/helmfile.d/vars/penumbra-devnet-nodes-ips.yml index 596932b68d..828fa95cf5 100644 --- a/deployments/helmfile.d/vars/penumbra-devnet-nodes-ips.yml +++ b/deployments/helmfile.d/vars/penumbra-devnet-nodes-ips.yml @@ -1,8 +1,8 @@ nodes: - external_address: 35.202.100.199:26656 - moniker: phobos-seed + moniker: ceres-seed seed_mode: true - external_address: 34.16.34.194:26656 - moniker: deimos + moniker: vesta - external_address: 34.173.166.32:26656 - moniker: naiad + moniker: pallas diff --git a/deployments/helmfile.d/vars/penumbra-preview-nodes-ips.yml b/deployments/helmfile.d/vars/penumbra-preview-nodes-ips.yml index 23e5357c80..07441f78d0 100644 --- a/deployments/helmfile.d/vars/penumbra-preview-nodes-ips.yml +++ b/deployments/helmfile.d/vars/penumbra-preview-nodes-ips.yml @@ -1,10 +1,10 @@ nodes: - external_address: 34.135.6.235:26656 - moniker: phobos-seed + moniker: ceres-seed seed_mode: true - external_address: 34.28.180.178:26656 - moniker: deimos + moniker: vesta - external_address: 34.42.196.153:26656 - moniker: naiad + moniker: pallas - external_address: 35.239.76.154:26656 - moniker: thalassa + moniker: hygiea diff --git a/deployments/helmfile.d/vars/penumbra-testnet-nodes-ips.yml b/deployments/helmfile.d/vars/penumbra-testnet-nodes-ips.yml index 8b476dede5..d6b36ebf19 100644 --- a/deployments/helmfile.d/vars/penumbra-testnet-nodes-ips.yml +++ b/deployments/helmfile.d/vars/penumbra-testnet-nodes-ips.yml @@ -1,10 +1,10 @@ nodes: - external_address: 35.225.116.144:26656 - moniker: phobos-seed + moniker: ceres-seed seed_mode: true - external_address: 35.224.80.161:26656 - moniker: deimos + moniker: vesta - external_address: 34.68.200.112:26656 - moniker: naiad + moniker: pallas - external_address: 35.192.219.42:26656 - moniker: thalassa + moniker: hygiea diff --git a/deployments/scripts/get-lb-ips b/deployments/scripts/get-lb-ips index 0adf8ab29d..fce404867f 100755 --- a/deployments/scripts/get-lb-ips +++ b/deployments/scripts/get-lb-ips @@ -13,8 +13,9 @@ fi # Declare monikers for nodes on the network. # These monikers will be added to the generated vars file, -# alongside the IP info. -node_names=(phobos-seed deimos naiad thalassa) +# alongside the IP info. Here we use notable asteroids, +# reserving moons for testnet names. +node_names=(ceres-seed vesta pallas hygiea) HELM_RELEASE="${1:-}" shift 1 diff --git a/testnets/names.txt b/testnets/names.txt index a34012f92d..e18ddb8e29 100644 --- a/testnets/names.txt +++ b/testnets/names.txt @@ -62,3 +62,5 @@ Dione Iapetus Rhea Titan +Deimos +Phobos From ac766cf78d28272831365a82c733348ea89b9517 Mon Sep 17 00:00:00 2001 From: Gabe Rodriguez Date: Tue, 2 Jan 2024 20:17:54 -0500 Subject: [PATCH 24/84] Remove wallet id filter from view service --- crates/bin/pcli/src/command.rs | 21 +- crates/bin/pcli/src/command/ceremony.rs | 15 +- crates/bin/pcli/src/command/tx.rs | 33 +- crates/bin/pcli/src/command/tx/replicate.rs | 13 +- crates/bin/pcli/src/command/validator.rs | 5 - crates/bin/pcli/src/command/view/balance.rs | 6 +- crates/bin/pcli/src/command/view/staked.rs | 8 +- crates/bin/pcli/src/main.rs | 20 +- .../bin/pclientd/tests/network_integration.rs | 19 +- .../proto/src/gen/penumbra.view.v1alpha1.rs | 45 +- .../src/gen/penumbra.view.v1alpha1.serde.rs | 219 +- .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 339638 -> 337861 bytes crates/view/src/client.rs | 58 +- crates/view/src/planner.rs | 15 +- crates/view/src/service.rs | 51 +- crates/wallet/src/build.rs | 3 +- crates/wallet/src/plan.rs | 78 +- crates/wasm/src/planner.rs | 2 - .../go/gen/penumbra/view/v1alpha1/view.pb.go | 1829 ++++++++--------- .../penumbra/view/v1alpha1/view.proto | 36 +- 20 files changed, 964 insertions(+), 1512 deletions(-) diff --git a/crates/bin/pcli/src/command.rs b/crates/bin/pcli/src/command.rs index f6d5611268..7759cc3c79 100644 --- a/crates/bin/pcli/src/command.rs +++ b/crates/bin/pcli/src/command.rs @@ -1,24 +1,23 @@ -mod ceremony; -mod debug; -mod init; -mod query; -mod threshold; -mod tx; -mod utils; -mod validator; -mod view; - pub use debug::DebugCmd; pub use init::InitCmd; pub use query::QueryCmd; pub use threshold::ThresholdCmd; pub use tx::TxCmd; pub use validator::ValidatorCmd; -pub use view::transaction_hashes::TransactionHashesCmd; pub use view::ViewCmd; use self::ceremony::CeremonyCmd; +mod ceremony; +mod debug; +mod init; +mod query; +mod threshold; +mod tx; +mod utils; +mod validator; +mod view; + // Note on display_order: // // The value is between 0 and 999 (the default). Sorting of subcommands is done diff --git a/crates/bin/pcli/src/command/ceremony.rs b/crates/bin/pcli/src/command/ceremony.rs index 6e808653f2..ba0d072cc9 100644 --- a/crates/bin/pcli/src/command/ceremony.rs +++ b/crates/bin/pcli/src/command/ceremony.rs @@ -1,5 +1,9 @@ -use crate::App; use anyhow::{anyhow, Context, Result}; +use rand_core::OsRng; +use tokio::sync::mpsc; +use tokio_stream::wrappers::ReceiverStream; +use url::Url; + use penumbra_asset::Value; use penumbra_keys::{keys::AddressIndex, Address}; use penumbra_num::Amount; @@ -18,11 +22,9 @@ use penumbra_proto::{ view::v1alpha1::GasPricesRequest, }; use penumbra_transaction::memo::MemoPlaintext; -use penumbra_view::Planner; -use rand_core::OsRng; -use tokio::sync::mpsc; -use tokio_stream::wrappers::ReceiverStream; -use url::Url; +use penumbra_view::{Planner, ViewClient}; + +use crate::App; fn max_message_size(phase: u8) -> usize { match phase { @@ -66,7 +68,6 @@ async fn handle_bid(app: &mut App, to: Address, from: AddressIndex, bid: &str) - app.view .as_mut() .context("view service must be initialized")?, - app.config.full_viewing_key.wallet_id(), from, ) .await diff --git a/crates/bin/pcli/src/command/tx.rs b/crates/bin/pcli/src/command/tx.rs index 262ba775c3..c3d3750619 100644 --- a/crates/bin/pcli/src/command/tx.rs +++ b/crates/bin/pcli/src/command/tx.rs @@ -296,7 +296,6 @@ impl TxCmd { app.view .as_mut() .context("view service must be initialized")?, - app.config.full_viewing_key.wallet_id(), AddressIndex::new(*from), ) .await @@ -319,7 +318,6 @@ impl TxCmd { app.view .as_mut() .context("view service must be initialized")?, - app.config.full_viewing_key.wallet_id(), AddressIndex::new(*source), ) .await?; @@ -327,7 +325,6 @@ impl TxCmd { } TxCmd::Sweep => loop { let plans = plan::sweep( - app.config.full_viewing_key.wallet_id(), app.view .as_mut() .context("view service must be initialized")?, @@ -381,9 +378,8 @@ impl TxCmd { ); planner.swap(input, into.id(), estimated_claim_fee, claim_address)?; - let wallet_id = app.config.full_viewing_key.wallet_id(); let plan = planner - .plan(app.view(), wallet_id, AddressIndex::new(*source)) + .plan(app.view(), AddressIndex::new(*source)) .await .context("can't plan swap transaction")?; @@ -402,7 +398,7 @@ impl TxCmd { // Fetch the SwapRecord with the claimable swap. let swap_record = app .view() - .swap_by_commitment(wallet_id, swap_plaintext.swap_commitment()) + .swap_by_commitment(swap_plaintext.swap_commitment()) .await?; let asset_cache = app.view().assets().await?; @@ -425,8 +421,6 @@ impl TxCmd { .format(&asset_cache), ); - let wallet_id = app.config.full_viewing_key.wallet_id(); - let params = app .view .as_mut() @@ -445,7 +439,7 @@ impl TxCmd { proof_blinding_r: Fq::rand(&mut OsRng), proof_blinding_s: Fq::rand(&mut OsRng), }) - .plan(app.view(), wallet_id, AddressIndex::new(*source)) + .plan(app.view(), AddressIndex::new(*source)) .await .context("can't plan swap claim")?; @@ -474,10 +468,9 @@ impl TxCmd { let mut planner = Planner::new(OsRng); planner.set_gas_prices(gas_prices); - let wallet_id = app.config.full_viewing_key.wallet_id().clone(); let plan = planner .delegate(unbonded_amount.value(), rate_data) - .plan(app.view(), wallet_id, AddressIndex::new(*source)) + .plan(app.view(), AddressIndex::new(*source)) .await .context("can't plan delegation")?; @@ -518,7 +511,6 @@ impl TxCmd { app.view .as_mut() .context("view service must be initialized")?, - app.config.full_viewing_key.wallet_id(), AddressIndex::new(*source), ) .await @@ -527,15 +519,13 @@ impl TxCmd { app.build_and_submit_transaction(plan).await?; } TxCmd::UndelegateClaim {} => { - let wallet_id = app.config.full_viewing_key.wallet_id(); // this should be optional? or saved in the client statefully? - let channel = app.pd_channel().await?; let view: &mut dyn ViewClient = app .view .as_mut() .context("view service must be initialized")?; - let current_height = view.status(wallet_id).await?.full_sync_height; + let current_height = view.status().await?.full_sync_height; let mut client = ChainQueryServiceClient::new(channel.clone()); let current_epoch = client .epoch_by_height(EpochByHeightRequest { @@ -549,7 +539,7 @@ impl TxCmd { // Query the view client for the list of undelegations that are ready to be claimed. // We want to claim them into the same address index that currently holds the tokens. - let notes = view.unspent_notes_by_address_and_asset(wallet_id).await?; + let notes = view.unspent_notes_by_address_and_asset().await?; for (address_index, notes_by_asset) in notes.into_iter() { for (token, notes) in @@ -617,7 +607,6 @@ impl TxCmd { app.view .as_mut() .context("view service must be initialized")?, - app.config.full_viewing_key.wallet_id(), address_index, ) .await?; @@ -649,7 +638,6 @@ impl TxCmd { app.view .as_mut() .context("view service must be initialized")?, - app.config.full_viewing_key.wallet_id(), AddressIndex::new(*source), ) .await?; @@ -668,7 +656,6 @@ impl TxCmd { app.view .as_mut() .context("view service must be initialized")?, - app.config.full_viewing_key.wallet_id(), AddressIndex::new(*source), ) .await?; @@ -748,7 +735,6 @@ impl TxCmd { app.view .as_mut() .context("view service must be initialized")?, - app.config.full_viewing_key.wallet_id(), AddressIndex::new(*source), ) .await?; @@ -813,7 +799,6 @@ impl TxCmd { app.view .as_mut() .context("view service must be initialized")?, - app.config.full_viewing_key.wallet_id(), AddressIndex::new(*source), ) .await?; @@ -836,7 +821,6 @@ impl TxCmd { app.view .as_mut() .context("view service must be initialized")?, - app.config.full_viewing_key.wallet_id(), source, ) .await?; @@ -909,7 +893,6 @@ impl TxCmd { app.view .as_mut() .context("view service must be initialized")?, - app.config.full_viewing_key.wallet_id(), AddressIndex::new(*source), ) .await?; @@ -929,7 +912,6 @@ impl TxCmd { app.view .as_mut() .context("view service must be initialized")?, - app.config.full_viewing_key.wallet_id(), AddressIndex::new(*source), ) .await?; @@ -970,7 +952,6 @@ impl TxCmd { app.view .as_mut() .context("view service must be initialized")?, - app.config.full_viewing_key.wallet_id(), AddressIndex::new(*source), ) .await?; @@ -1047,7 +1028,6 @@ impl TxCmd { app.view .as_mut() .context("view service must be initialized")?, - app.config.full_viewing_key.wallet_id(), AddressIndex::new(*source), ) .await?; @@ -1100,7 +1080,6 @@ impl TxCmd { app.view .as_mut() .context("view service must be initialized")?, - app.config.full_viewing_key.wallet_id(), AddressIndex::new(*source), ) .await?; diff --git a/crates/bin/pcli/src/command/tx/replicate.rs b/crates/bin/pcli/src/command/tx/replicate.rs index cc4cd5e870..277243e67f 100644 --- a/crates/bin/pcli/src/command/tx/replicate.rs +++ b/crates/bin/pcli/src/command/tx/replicate.rs @@ -1,10 +1,10 @@ -use crate::{warning, App}; +use std::io::Write; use std::path::PathBuf; -use crate::dex_utils; -use crate::dex_utils::replicate::debug; use anyhow::{anyhow, bail, Context, Result}; use dialoguer::Confirm; +use rand_core::OsRng; + use penumbra_asset::Value; use penumbra_dex::{lp::position::Position, DirectedUnitPair}; use penumbra_keys::keys::AddressIndex; @@ -16,8 +16,10 @@ use penumbra_proto::{ view::v1alpha1::GasPricesRequest, }; use penumbra_view::{Planner, ViewClient}; -use rand_core::OsRng; -use std::io::Write; + +use crate::dex_utils; +use crate::dex_utils::replicate::debug; +use crate::{warning, App}; /// Queries the chain for a transaction by hash. #[derive(Debug, clap::Subcommand)] @@ -168,7 +170,6 @@ impl ConstantProduct { app.view .as_mut() .context("view service must be initialized")?, - app.config.full_viewing_key.wallet_id(), AddressIndex::new(self.source), ) .await?; diff --git a/crates/bin/pcli/src/command/validator.rs b/crates/bin/pcli/src/command/validator.rs index e5a6b0f59d..cc2b771043 100644 --- a/crates/bin/pcli/src/command/validator.rs +++ b/crates/bin/pcli/src/command/validator.rs @@ -156,9 +156,7 @@ impl ValidatorCmd { }; // Construct a new transaction and include the validator definition. - let wallet_id = app.config.full_viewing_key.wallet_id(); let plan = plan::validator_definition( - wallet_id, app.view .as_mut() .context("view service must be initialized")?, @@ -212,10 +210,7 @@ impl ValidatorCmd { // Construct a new transaction and include the validator definition. let fee = Fee::from_staking_token_amount((*fee).into()); - let wallet_id = app.config.full_viewing_key.wallet_id(); - let plan = plan::validator_vote( - wallet_id, app.view .as_mut() .context("view service must be initialized")?, diff --git a/crates/bin/pcli/src/command/view/balance.rs b/crates/bin/pcli/src/command/view/balance.rs index f6c2d09fa3..4900a2b245 100644 --- a/crates/bin/pcli/src/command/view/balance.rs +++ b/crates/bin/pcli/src/command/view/balance.rs @@ -1,8 +1,10 @@ use anyhow::Result; use comfy_table::{presets, Table}; + use penumbra_keys::FullViewingKey; use penumbra_sct::CommitmentSource; use penumbra_view::ViewClient; + #[derive(Debug, clap::Args)] pub struct BalanceCmd { #[clap(long)] @@ -22,9 +24,7 @@ impl BalanceCmd { let mut table = Table::new(); table.load_preset(presets::NOTHING); - let notes = view - .unspent_notes_by_account_and_asset(fvk.wallet_id()) - .await?; + let notes = view.unspent_notes_by_account_and_asset().await?; if self.by_note { table.set_header(vec!["Account", "Value", "Source"]); diff --git a/crates/bin/pcli/src/command/view/staked.rs b/crates/bin/pcli/src/command/view/staked.rs index b1d4cbc965..32dd0f80bf 100644 --- a/crates/bin/pcli/src/command/view/staked.rs +++ b/crates/bin/pcli/src/command/view/staked.rs @@ -3,6 +3,8 @@ use std::collections::BTreeMap; use anyhow::Result; use comfy_table::{presets, Table}; use futures::TryStreamExt; +use tonic::transport::Channel; + use penumbra_asset::{Value, STAKING_TOKEN_ASSET_ID}; use penumbra_keys::FullViewingKey; use penumbra_proto::core::component::stake::v1alpha1::{ @@ -10,7 +12,6 @@ use penumbra_proto::core::component::stake::v1alpha1::{ }; use penumbra_stake::{validator, DelegationToken}; use penumbra_view::ViewClient; -use tonic::transport::Channel; #[derive(Debug, clap::Parser)] pub struct StakedCmd {} @@ -43,10 +44,7 @@ impl StakedCmd { .map(TryInto::try_into) .collect::, _>>()?; - let wallet_id = full_viewing_key.wallet_id(); - let notes = view_client - .unspent_notes_by_asset_and_address(wallet_id) - .await?; + let notes = view_client.unspent_notes_by_asset_and_address().await?; let mut total = 0u128; let mut table = Table::new(); diff --git a/crates/bin/pcli/src/main.rs b/crates/bin/pcli/src/main.rs index 5433a4365c..562973997c 100644 --- a/crates/bin/pcli/src/main.rs +++ b/crates/bin/pcli/src/main.rs @@ -1,11 +1,16 @@ #![deny(clippy::unwrap_used)] #![allow(clippy::clone_on_copy)] + use std::fs; use anyhow::{Context, Result}; use clap::Parser; -use config::PcliConfig; use futures::StreamExt; + +use box_grpc_svc::BoxGrpcService; +use command::*; +use config::PcliConfig; +use opt::Opt; use penumbra_proto::{ custody::v1alpha1::custody_protocol_service_client::CustodyProtocolServiceClient, view::v1alpha1::view_protocol_service_client::ViewProtocolServiceClient, @@ -21,11 +26,6 @@ mod opt; mod terminal; mod warning; -use opt::Opt; - -use box_grpc_svc::BoxGrpcService; -use command::*; - const CONFIG_FILE_NAME: &str = "config.toml"; const VIEW_FILE_NAME: &str = "pcli-view.sqlite"; @@ -45,11 +45,9 @@ impl App { } async fn sync(&mut self) -> Result<()> { - let mut status_stream = ViewClient::status_stream( - self.view.as_mut().expect("view service initialized"), - self.config.full_viewing_key.wallet_id(), - ) - .await?; + let mut status_stream = + ViewClient::status_stream(self.view.as_mut().expect("view service initialized")) + .await?; // Pull out the first message from the stream, which has the current state, and use // it to set up a progress bar. diff --git a/crates/bin/pclientd/tests/network_integration.rs b/crates/bin/pclientd/tests/network_integration.rs index 940a25017e..ffdafd88bf 100644 --- a/crates/bin/pclientd/tests/network_integration.rs +++ b/crates/bin/pclientd/tests/network_integration.rs @@ -6,8 +6,13 @@ //! where no tokens have been delegated, and the address with index 0 //! was distributedp 1cube. +use std::process::Command as StdCommand; + use assert_cmd::cargo::CommandCargoExt; use futures::StreamExt; +use tempfile::tempdir; +use tokio::process::Command as TokioCommand; + use pclientd::PclientdConfig; use penumbra_asset::{asset, Value, STAKING_TOKEN_ASSET_ID}; use penumbra_custody::soft_kms; @@ -23,9 +28,6 @@ use penumbra_proto::{ }, }; use penumbra_view::ViewClient; -use std::process::Command as StdCommand; -use tempfile::tempdir; -use tokio::process::Command as TokioCommand; fn generate_config() -> anyhow::Result { Ok(PclientdConfig { @@ -83,7 +85,7 @@ async fn transaction_send_flow() -> anyhow::Result<()> { // 4. Use the view protocol to wait for it to sync. let mut status_stream = (&mut view_client as &mut dyn ViewClient) - .status_stream(test_keys::FULL_VIEWING_KEY.wallet_id()) + .status_stream() .await?; while let Some(item) = status_stream.as_mut().next().await.transpose()? { tracing::debug!(?item); @@ -220,7 +222,7 @@ async fn swap_claim_flow() -> anyhow::Result<()> { // 4. Use the view protocol to wait for it to sync. let mut status_stream = (&mut view_client as &mut dyn ViewClient) - .status_stream(test_keys::FULL_VIEWING_KEY.wallet_id()) + .status_stream() .await?; while let Some(item) = status_stream.as_mut().next().await.transpose()? { tracing::debug!(?item); @@ -317,7 +319,7 @@ async fn swap_claim_flow() -> anyhow::Result<()> { // 6. Use the view protocol to wait for it to sync. let mut status_stream = (&mut view_client as &mut dyn ViewClient) - .status_stream(test_keys::FULL_VIEWING_KEY.wallet_id()) + .status_stream() .await?; while let Some(item) = status_stream.as_mut().next().await.transpose()? { tracing::debug!(?item); @@ -325,10 +327,7 @@ async fn swap_claim_flow() -> anyhow::Result<()> { // Ensure we can fetch the SwapRecord with the claimable swap. let _swap_record = (&mut view_client as &mut dyn ViewClient) - .swap_by_commitment( - test_keys::FULL_VIEWING_KEY.wallet_id(), - swap_plaintext.swap_commitment(), - ) + .swap_by_commitment(swap_plaintext.swap_commitment()) .await?; // 7. Prepare the swap claim diff --git a/crates/proto/src/gen/penumbra.view.v1alpha1.rs b/crates/proto/src/gen/penumbra.view.v1alpha1.rs index ec5178a17b..8c8f9fe4fb 100644 --- a/crates/proto/src/gen/penumbra.view.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.view.v1alpha1.rs @@ -90,9 +90,6 @@ pub struct TransactionPlannerRequest { /// If present, only spends funds from the given account. #[prost(message, optional, tag = "4")] pub source: ::core::option::Option, - /// Optionally identifies the wallet id to query. - #[prost(message, optional, tag = "14")] - pub wallet_id: ::core::option::Option, /// Request contents #[prost(message, repeated, tag = "20")] pub outputs: ::prost::alloc::vec::Vec, @@ -487,11 +484,7 @@ impl ::prost::Name for BalancesResponse { /// Requests sync status of the view service. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct StatusRequest { - /// Identifies the wallet id to query. - #[prost(message, optional, tag = "14")] - pub wallet_id: ::core::option::Option, -} +pub struct StatusRequest {} impl ::prost::Name for StatusRequest { const NAME: &'static str = "StatusRequest"; const PACKAGE: &'static str = "penumbra.view.v1alpha1"; @@ -523,11 +516,7 @@ impl ::prost::Name for StatusResponse { /// Requests streaming updates on the sync height until the view service is synchronized. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct StatusStreamRequest { - /// Identifies the wallet id to query. - #[prost(message, optional, tag = "14")] - pub wallet_id: ::core::option::Option, -} +pub struct StatusStreamRequest {} impl ::prost::Name for StatusStreamRequest { const NAME: &'static str = "StatusStreamRequest"; const PACKAGE: &'static str = "penumbra.view.v1alpha1"; @@ -581,9 +570,6 @@ pub struct NotesRequest { pub amount_to_spend: ::core::option::Option< super::super::core::num::v1alpha1::Amount, >, - /// Identifies the wallet id to query. - #[prost(message, optional, tag = "14")] - pub wallet_id: ::core::option::Option, } impl ::prost::Name for NotesRequest { const NAME: &'static str = "NotesRequest"; @@ -604,9 +590,6 @@ pub struct NotesForVotingRequest { pub address_index: ::core::option::Option< super::super::core::keys::v1alpha1::AddressIndex, >, - /// Identifies the wallet id to query. - #[prost(message, optional, tag = "14")] - pub wallet_id: ::core::option::Option, } impl ::prost::Name for NotesForVotingRequest { const NAME: &'static str = "NotesForVotingRequest"; @@ -628,9 +611,6 @@ pub struct WitnessRequest { pub transaction_plan: ::core::option::Option< super::super::core::transaction::v1alpha1::TransactionPlan, >, - /// Identifies the wallet id to query. - #[prost(message, optional, tag = "14")] - pub wallet_id: ::core::option::Option, } impl ::prost::Name for WitnessRequest { const NAME: &'static str = "WitnessRequest"; @@ -828,9 +808,6 @@ pub struct NoteByCommitmentRequest { /// If set to true, waits to return until the requested note is detected. #[prost(bool, tag = "3")] pub await_detection: bool, - /// Identifies the wallet id to query. - #[prost(message, optional, tag = "14")] - pub wallet_id: ::core::option::Option, } impl ::prost::Name for NoteByCommitmentRequest { const NAME: &'static str = "NoteByCommitmentRequest"; @@ -862,9 +839,6 @@ pub struct SwapByCommitmentRequest { /// If set to true, waits to return until the requested swap is detected. #[prost(bool, tag = "3")] pub await_detection: bool, - /// Identifies the wallet id to query. - #[prost(message, optional, tag = "14")] - pub wallet_id: ::core::option::Option, } impl ::prost::Name for SwapByCommitmentRequest { const NAME: &'static str = "SwapByCommitmentRequest"; @@ -888,11 +862,7 @@ impl ::prost::Name for SwapByCommitmentResponse { } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct UnclaimedSwapsRequest { - /// Identifies the wallet id to query. - #[prost(message, optional, tag = "1")] - pub wallet_id: ::core::option::Option, -} +pub struct UnclaimedSwapsRequest {} impl ::prost::Name for UnclaimedSwapsRequest { const NAME: &'static str = "UnclaimedSwapsRequest"; const PACKAGE: &'static str = "penumbra.view.v1alpha1"; @@ -922,9 +892,6 @@ pub struct NullifierStatusRequest { >, #[prost(bool, tag = "3")] pub await_detection: bool, - /// Identifies the wallet id to query. - #[prost(message, optional, tag = "14")] - pub wallet_id: ::core::option::Option, } impl ::prost::Name for NullifierStatusRequest { const NAME: &'static str = "NullifierStatusRequest"; @@ -1192,9 +1159,6 @@ pub mod view_protocol_service_client { /// transaction-related actions, to request data from a view service, which is /// responsible for synchronizing and scanning the public chain state with one or /// more full viewing keys. - /// - /// View protocol requests optionally include the wallet id, used to - /// identify which set of data to query. #[derive(Debug, Clone)] pub struct ViewProtocolServiceClient { inner: tonic::client::Grpc, @@ -2316,9 +2280,6 @@ pub mod view_protocol_service_server { /// transaction-related actions, to request data from a view service, which is /// responsible for synchronizing and scanning the public chain state with one or /// more full viewing keys. - /// - /// View protocol requests optionally include the wallet id, used to - /// identify which set of data to query. #[derive(Debug)] pub struct ViewProtocolServiceServer { inner: _Inner, diff --git a/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs index d5e6021fca..2b179533b3 100644 --- a/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs @@ -1997,9 +1997,6 @@ impl serde::Serialize for NoteByCommitmentRequest { if self.await_detection { len += 1; } - if self.wallet_id.is_some() { - len += 1; - } let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.NoteByCommitmentRequest", len)?; if let Some(v) = self.note_commitment.as_ref() { struct_ser.serialize_field("noteCommitment", v)?; @@ -2007,9 +2004,6 @@ impl serde::Serialize for NoteByCommitmentRequest { if self.await_detection { struct_ser.serialize_field("awaitDetection", &self.await_detection)?; } - if let Some(v) = self.wallet_id.as_ref() { - struct_ser.serialize_field("walletId", v)?; - } struct_ser.end() } } @@ -2024,15 +2018,12 @@ impl<'de> serde::Deserialize<'de> for NoteByCommitmentRequest { "noteCommitment", "await_detection", "awaitDetection", - "wallet_id", - "walletId", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { NoteCommitment, AwaitDetection, - WalletId, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -2056,7 +2047,6 @@ impl<'de> serde::Deserialize<'de> for NoteByCommitmentRequest { match value { "noteCommitment" | "note_commitment" => Ok(GeneratedField::NoteCommitment), "awaitDetection" | "await_detection" => Ok(GeneratedField::AwaitDetection), - "walletId" | "wallet_id" => Ok(GeneratedField::WalletId), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -2078,7 +2068,6 @@ impl<'de> serde::Deserialize<'de> for NoteByCommitmentRequest { { let mut note_commitment__ = None; let mut await_detection__ = None; - let mut wallet_id__ = None; while let Some(k) = map_.next_key()? { match k { GeneratedField::NoteCommitment => { @@ -2093,18 +2082,11 @@ impl<'de> serde::Deserialize<'de> for NoteByCommitmentRequest { } await_detection__ = Some(map_.next_value()?); } - GeneratedField::WalletId => { - if wallet_id__.is_some() { - return Err(serde::de::Error::duplicate_field("walletId")); - } - wallet_id__ = map_.next_value()?; - } } } Ok(NoteByCommitmentRequest { note_commitment: note_commitment__, await_detection: await_detection__.unwrap_or_default(), - wallet_id: wallet_id__, }) } } @@ -2217,9 +2199,6 @@ impl serde::Serialize for NotesForVotingRequest { if self.address_index.is_some() { len += 1; } - if self.wallet_id.is_some() { - len += 1; - } let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.NotesForVotingRequest", len)?; if self.votable_at_height != 0 { #[allow(clippy::needless_borrow)] @@ -2228,9 +2207,6 @@ impl serde::Serialize for NotesForVotingRequest { if let Some(v) = self.address_index.as_ref() { struct_ser.serialize_field("addressIndex", v)?; } - if let Some(v) = self.wallet_id.as_ref() { - struct_ser.serialize_field("walletId", v)?; - } struct_ser.end() } } @@ -2245,15 +2221,12 @@ impl<'de> serde::Deserialize<'de> for NotesForVotingRequest { "votableAtHeight", "address_index", "addressIndex", - "wallet_id", - "walletId", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { VotableAtHeight, AddressIndex, - WalletId, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -2277,7 +2250,6 @@ impl<'de> serde::Deserialize<'de> for NotesForVotingRequest { match value { "votableAtHeight" | "votable_at_height" => Ok(GeneratedField::VotableAtHeight), "addressIndex" | "address_index" => Ok(GeneratedField::AddressIndex), - "walletId" | "wallet_id" => Ok(GeneratedField::WalletId), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -2299,7 +2271,6 @@ impl<'de> serde::Deserialize<'de> for NotesForVotingRequest { { let mut votable_at_height__ = None; let mut address_index__ = None; - let mut wallet_id__ = None; while let Some(k) = map_.next_key()? { match k { GeneratedField::VotableAtHeight => { @@ -2316,18 +2287,11 @@ impl<'de> serde::Deserialize<'de> for NotesForVotingRequest { } address_index__ = map_.next_value()?; } - GeneratedField::WalletId => { - if wallet_id__.is_some() { - return Err(serde::de::Error::duplicate_field("walletId")); - } - wallet_id__ = map_.next_value()?; - } } } Ok(NotesForVotingRequest { votable_at_height: votable_at_height__.unwrap_or_default(), address_index: address_index__, - wallet_id: wallet_id__, }) } } @@ -2464,9 +2428,6 @@ impl serde::Serialize for NotesRequest { if self.amount_to_spend.is_some() { len += 1; } - if self.wallet_id.is_some() { - len += 1; - } let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.NotesRequest", len)?; if self.include_spent { struct_ser.serialize_field("includeSpent", &self.include_spent)?; @@ -2480,9 +2441,6 @@ impl serde::Serialize for NotesRequest { if let Some(v) = self.amount_to_spend.as_ref() { struct_ser.serialize_field("amountToSpend", v)?; } - if let Some(v) = self.wallet_id.as_ref() { - struct_ser.serialize_field("walletId", v)?; - } struct_ser.end() } } @@ -2501,8 +2459,6 @@ impl<'de> serde::Deserialize<'de> for NotesRequest { "addressIndex", "amount_to_spend", "amountToSpend", - "wallet_id", - "walletId", ]; #[allow(clippy::enum_variant_names)] @@ -2511,7 +2467,6 @@ impl<'de> serde::Deserialize<'de> for NotesRequest { AssetId, AddressIndex, AmountToSpend, - WalletId, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -2537,7 +2492,6 @@ impl<'de> serde::Deserialize<'de> for NotesRequest { "assetId" | "asset_id" => Ok(GeneratedField::AssetId), "addressIndex" | "address_index" => Ok(GeneratedField::AddressIndex), "amountToSpend" | "amount_to_spend" => Ok(GeneratedField::AmountToSpend), - "walletId" | "wallet_id" => Ok(GeneratedField::WalletId), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -2561,7 +2515,6 @@ impl<'de> serde::Deserialize<'de> for NotesRequest { let mut asset_id__ = None; let mut address_index__ = None; let mut amount_to_spend__ = None; - let mut wallet_id__ = None; while let Some(k) = map_.next_key()? { match k { GeneratedField::IncludeSpent => { @@ -2588,12 +2541,6 @@ impl<'de> serde::Deserialize<'de> for NotesRequest { } amount_to_spend__ = map_.next_value()?; } - GeneratedField::WalletId => { - if wallet_id__.is_some() { - return Err(serde::de::Error::duplicate_field("walletId")); - } - wallet_id__ = map_.next_value()?; - } } } Ok(NotesRequest { @@ -2601,7 +2548,6 @@ impl<'de> serde::Deserialize<'de> for NotesRequest { asset_id: asset_id__, address_index: address_index__, amount_to_spend: amount_to_spend__, - wallet_id: wallet_id__, }) } } @@ -2714,9 +2660,6 @@ impl serde::Serialize for NullifierStatusRequest { if self.await_detection { len += 1; } - if self.wallet_id.is_some() { - len += 1; - } let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.NullifierStatusRequest", len)?; if let Some(v) = self.nullifier.as_ref() { struct_ser.serialize_field("nullifier", v)?; @@ -2724,9 +2667,6 @@ impl serde::Serialize for NullifierStatusRequest { if self.await_detection { struct_ser.serialize_field("awaitDetection", &self.await_detection)?; } - if let Some(v) = self.wallet_id.as_ref() { - struct_ser.serialize_field("walletId", v)?; - } struct_ser.end() } } @@ -2740,15 +2680,12 @@ impl<'de> serde::Deserialize<'de> for NullifierStatusRequest { "nullifier", "await_detection", "awaitDetection", - "wallet_id", - "walletId", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { Nullifier, AwaitDetection, - WalletId, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -2772,7 +2709,6 @@ impl<'de> serde::Deserialize<'de> for NullifierStatusRequest { match value { "nullifier" => Ok(GeneratedField::Nullifier), "awaitDetection" | "await_detection" => Ok(GeneratedField::AwaitDetection), - "walletId" | "wallet_id" => Ok(GeneratedField::WalletId), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -2794,7 +2730,6 @@ impl<'de> serde::Deserialize<'de> for NullifierStatusRequest { { let mut nullifier__ = None; let mut await_detection__ = None; - let mut wallet_id__ = None; while let Some(k) = map_.next_key()? { match k { GeneratedField::Nullifier => { @@ -2809,18 +2744,11 @@ impl<'de> serde::Deserialize<'de> for NullifierStatusRequest { } await_detection__ = Some(map_.next_value()?); } - GeneratedField::WalletId => { - if wallet_id__.is_some() { - return Err(serde::de::Error::duplicate_field("walletId")); - } - wallet_id__ = map_.next_value()?; - } } } Ok(NullifierStatusRequest { nullifier: nullifier__, await_detection: await_detection__.unwrap_or_default(), - wallet_id: wallet_id__, }) } } @@ -3350,14 +3278,8 @@ impl serde::Serialize for StatusRequest { S: serde::Serializer, { use serde::ser::SerializeStruct; - let mut len = 0; - if self.wallet_id.is_some() { - len += 1; - } - let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.StatusRequest", len)?; - if let Some(v) = self.wallet_id.as_ref() { - struct_ser.serialize_field("walletId", v)?; - } + let len = 0; + let struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.StatusRequest", len)?; struct_ser.end() } } @@ -3368,13 +3290,10 @@ impl<'de> serde::Deserialize<'de> for StatusRequest { D: serde::Deserializer<'de>, { const FIELDS: &[&str] = &[ - "wallet_id", - "walletId", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { - WalletId, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -3395,10 +3314,7 @@ impl<'de> serde::Deserialize<'de> for StatusRequest { where E: serde::de::Error, { - match value { - "walletId" | "wallet_id" => Ok(GeneratedField::WalletId), - _ => Err(serde::de::Error::unknown_field(value, FIELDS)), - } + Err(serde::de::Error::unknown_field(value, FIELDS)) } } deserializer.deserialize_identifier(GeneratedVisitor) @@ -3416,19 +3332,10 @@ impl<'de> serde::Deserialize<'de> for StatusRequest { where V: serde::de::MapAccess<'de>, { - let mut wallet_id__ = None; - while let Some(k) = map_.next_key()? { - match k { - GeneratedField::WalletId => { - if wallet_id__.is_some() { - return Err(serde::de::Error::duplicate_field("walletId")); - } - wallet_id__ = map_.next_value()?; - } - } + while map_.next_key::()?.is_some() { + let _ = map_.next_value::()?; } Ok(StatusRequest { - wallet_id: wallet_id__, }) } } @@ -3576,14 +3483,8 @@ impl serde::Serialize for StatusStreamRequest { S: serde::Serializer, { use serde::ser::SerializeStruct; - let mut len = 0; - if self.wallet_id.is_some() { - len += 1; - } - let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.StatusStreamRequest", len)?; - if let Some(v) = self.wallet_id.as_ref() { - struct_ser.serialize_field("walletId", v)?; - } + let len = 0; + let struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.StatusStreamRequest", len)?; struct_ser.end() } } @@ -3594,13 +3495,10 @@ impl<'de> serde::Deserialize<'de> for StatusStreamRequest { D: serde::Deserializer<'de>, { const FIELDS: &[&str] = &[ - "wallet_id", - "walletId", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { - WalletId, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -3621,10 +3519,7 @@ impl<'de> serde::Deserialize<'de> for StatusStreamRequest { where E: serde::de::Error, { - match value { - "walletId" | "wallet_id" => Ok(GeneratedField::WalletId), - _ => Err(serde::de::Error::unknown_field(value, FIELDS)), - } + Err(serde::de::Error::unknown_field(value, FIELDS)) } } deserializer.deserialize_identifier(GeneratedVisitor) @@ -3642,19 +3537,10 @@ impl<'de> serde::Deserialize<'de> for StatusStreamRequest { where V: serde::de::MapAccess<'de>, { - let mut wallet_id__ = None; - while let Some(k) = map_.next_key()? { - match k { - GeneratedField::WalletId => { - if wallet_id__.is_some() { - return Err(serde::de::Error::duplicate_field("walletId")); - } - wallet_id__ = map_.next_value()?; - } - } + while map_.next_key::()?.is_some() { + let _ = map_.next_value::()?; } Ok(StatusStreamRequest { - wallet_id: wallet_id__, }) } } @@ -3812,9 +3698,6 @@ impl serde::Serialize for SwapByCommitmentRequest { if self.await_detection { len += 1; } - if self.wallet_id.is_some() { - len += 1; - } let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.SwapByCommitmentRequest", len)?; if let Some(v) = self.swap_commitment.as_ref() { struct_ser.serialize_field("swapCommitment", v)?; @@ -3822,9 +3705,6 @@ impl serde::Serialize for SwapByCommitmentRequest { if self.await_detection { struct_ser.serialize_field("awaitDetection", &self.await_detection)?; } - if let Some(v) = self.wallet_id.as_ref() { - struct_ser.serialize_field("walletId", v)?; - } struct_ser.end() } } @@ -3839,15 +3719,12 @@ impl<'de> serde::Deserialize<'de> for SwapByCommitmentRequest { "swapCommitment", "await_detection", "awaitDetection", - "wallet_id", - "walletId", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { SwapCommitment, AwaitDetection, - WalletId, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -3871,7 +3748,6 @@ impl<'de> serde::Deserialize<'de> for SwapByCommitmentRequest { match value { "swapCommitment" | "swap_commitment" => Ok(GeneratedField::SwapCommitment), "awaitDetection" | "await_detection" => Ok(GeneratedField::AwaitDetection), - "walletId" | "wallet_id" => Ok(GeneratedField::WalletId), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -3893,7 +3769,6 @@ impl<'de> serde::Deserialize<'de> for SwapByCommitmentRequest { { let mut swap_commitment__ = None; let mut await_detection__ = None; - let mut wallet_id__ = None; while let Some(k) = map_.next_key()? { match k { GeneratedField::SwapCommitment => { @@ -3908,18 +3783,11 @@ impl<'de> serde::Deserialize<'de> for SwapByCommitmentRequest { } await_detection__ = Some(map_.next_value()?); } - GeneratedField::WalletId => { - if wallet_id__.is_some() { - return Err(serde::de::Error::duplicate_field("walletId")); - } - wallet_id__ = map_.next_value()?; - } } } Ok(SwapByCommitmentRequest { swap_commitment: swap_commitment__, await_detection: await_detection__.unwrap_or_default(), - wallet_id: wallet_id__, }) } } @@ -4792,9 +4660,6 @@ impl serde::Serialize for TransactionPlannerRequest { if self.source.is_some() { len += 1; } - if self.wallet_id.is_some() { - len += 1; - } if !self.outputs.is_empty() { len += 1; } @@ -4839,9 +4704,6 @@ impl serde::Serialize for TransactionPlannerRequest { if let Some(v) = self.source.as_ref() { struct_ser.serialize_field("source", v)?; } - if let Some(v) = self.wallet_id.as_ref() { - struct_ser.serialize_field("walletId", v)?; - } if !self.outputs.is_empty() { struct_ser.serialize_field("outputs", &self.outputs)?; } @@ -4887,8 +4749,6 @@ impl<'de> serde::Deserialize<'de> for TransactionPlannerRequest { "fee", "memo", "source", - "wallet_id", - "walletId", "outputs", "swaps", "swap_claims", @@ -4913,7 +4773,6 @@ impl<'de> serde::Deserialize<'de> for TransactionPlannerRequest { Fee, Memo, Source, - WalletId, Outputs, Swaps, SwapClaims, @@ -4949,7 +4808,6 @@ impl<'de> serde::Deserialize<'de> for TransactionPlannerRequest { "fee" => Ok(GeneratedField::Fee), "memo" => Ok(GeneratedField::Memo), "source" => Ok(GeneratedField::Source), - "walletId" | "wallet_id" => Ok(GeneratedField::WalletId), "outputs" => Ok(GeneratedField::Outputs), "swaps" => Ok(GeneratedField::Swaps), "swapClaims" | "swap_claims" => Ok(GeneratedField::SwapClaims), @@ -4983,7 +4841,6 @@ impl<'de> serde::Deserialize<'de> for TransactionPlannerRequest { let mut fee__ = None; let mut memo__ = None; let mut source__ = None; - let mut wallet_id__ = None; let mut outputs__ = None; let mut swaps__ = None; let mut swap_claims__ = None; @@ -5022,12 +4879,6 @@ impl<'de> serde::Deserialize<'de> for TransactionPlannerRequest { } source__ = map_.next_value()?; } - GeneratedField::WalletId => { - if wallet_id__.is_some() { - return Err(serde::de::Error::duplicate_field("walletId")); - } - wallet_id__ = map_.next_value()?; - } GeneratedField::Outputs => { if outputs__.is_some() { return Err(serde::de::Error::duplicate_field("outputs")); @@ -5095,7 +4946,6 @@ impl<'de> serde::Deserialize<'de> for TransactionPlannerRequest { fee: fee__, memo: memo__, source: source__, - wallet_id: wallet_id__, outputs: outputs__.unwrap_or_default(), swaps: swaps__.unwrap_or_default(), swap_claims: swap_claims__.unwrap_or_default(), @@ -6082,14 +5932,8 @@ impl serde::Serialize for UnclaimedSwapsRequest { S: serde::Serializer, { use serde::ser::SerializeStruct; - let mut len = 0; - if self.wallet_id.is_some() { - len += 1; - } - let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.UnclaimedSwapsRequest", len)?; - if let Some(v) = self.wallet_id.as_ref() { - struct_ser.serialize_field("walletId", v)?; - } + let len = 0; + let struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.UnclaimedSwapsRequest", len)?; struct_ser.end() } } @@ -6100,13 +5944,10 @@ impl<'de> serde::Deserialize<'de> for UnclaimedSwapsRequest { D: serde::Deserializer<'de>, { const FIELDS: &[&str] = &[ - "wallet_id", - "walletId", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { - WalletId, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -6127,10 +5968,7 @@ impl<'de> serde::Deserialize<'de> for UnclaimedSwapsRequest { where E: serde::de::Error, { - match value { - "walletId" | "wallet_id" => Ok(GeneratedField::WalletId), - _ => Err(serde::de::Error::unknown_field(value, FIELDS)), - } + Err(serde::de::Error::unknown_field(value, FIELDS)) } } deserializer.deserialize_identifier(GeneratedVisitor) @@ -6148,19 +5986,10 @@ impl<'de> serde::Deserialize<'de> for UnclaimedSwapsRequest { where V: serde::de::MapAccess<'de>, { - let mut wallet_id__ = None; - while let Some(k) = map_.next_key()? { - match k { - GeneratedField::WalletId => { - if wallet_id__.is_some() { - return Err(serde::de::Error::duplicate_field("walletId")); - } - wallet_id__ = map_.next_value()?; - } - } + while map_.next_key::()?.is_some() { + let _ = map_.next_value::()?; } Ok(UnclaimedSwapsRequest { - wallet_id: wallet_id__, }) } } @@ -6636,9 +6465,6 @@ impl serde::Serialize for WitnessRequest { if self.transaction_plan.is_some() { len += 1; } - if self.wallet_id.is_some() { - len += 1; - } let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.WitnessRequest", len)?; if !self.note_commitments.is_empty() { struct_ser.serialize_field("noteCommitments", &self.note_commitments)?; @@ -6646,9 +6472,6 @@ impl serde::Serialize for WitnessRequest { if let Some(v) = self.transaction_plan.as_ref() { struct_ser.serialize_field("transactionPlan", v)?; } - if let Some(v) = self.wallet_id.as_ref() { - struct_ser.serialize_field("walletId", v)?; - } struct_ser.end() } } @@ -6663,15 +6486,12 @@ impl<'de> serde::Deserialize<'de> for WitnessRequest { "noteCommitments", "transaction_plan", "transactionPlan", - "wallet_id", - "walletId", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { NoteCommitments, TransactionPlan, - WalletId, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -6695,7 +6515,6 @@ impl<'de> serde::Deserialize<'de> for WitnessRequest { match value { "noteCommitments" | "note_commitments" => Ok(GeneratedField::NoteCommitments), "transactionPlan" | "transaction_plan" => Ok(GeneratedField::TransactionPlan), - "walletId" | "wallet_id" => Ok(GeneratedField::WalletId), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -6717,7 +6536,6 @@ impl<'de> serde::Deserialize<'de> for WitnessRequest { { let mut note_commitments__ = None; let mut transaction_plan__ = None; - let mut wallet_id__ = None; while let Some(k) = map_.next_key()? { match k { GeneratedField::NoteCommitments => { @@ -6732,18 +6550,11 @@ impl<'de> serde::Deserialize<'de> for WitnessRequest { } transaction_plan__ = map_.next_value()?; } - GeneratedField::WalletId => { - if wallet_id__.is_some() { - return Err(serde::de::Error::duplicate_field("walletId")); - } - wallet_id__ = map_.next_value()?; - } } } Ok(WitnessRequest { note_commitments: note_commitments__.unwrap_or_default(), transaction_plan: transaction_plan__, - wallet_id: wallet_id__, }) } } diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index 96325d5d9360ffde93bb1672872a933085152f01..82edd3d7da33da4ecd767d6ba2f43b837639459c 100644 GIT binary patch delta 10223 zcmY*fd3aUTy*+z4CpRYv2`6(%LdXEgP43M^Adx{(CP6?1OY7HCu~1uDAEl-Ge17)& z9I7CcT9u7}tyB4M0IH%-=C6%bxUK`8|RM^Hpju+K=@ted(S-eiH`-1hBt&C0Y|)8+43SfcJdC`;6i*W`c7+SagC?K&vSdjGsr4lc@B zw3LNek?(n*3ibT?tVn%zSgtO+k%v6+B3bJFj8%NeYG(XoZp~FcoqM&~b-yT8n~%sn zC1EH6k42(1)-P-gW#Dly66LD=J=xw|9^{6(p-*KTg?SYY3803~a0$}_sH@bk-;=-V zt_mVcVGvXm4s<90Y9HzlY5yadO&<= zI6|ud>iLX{Hg)f(NX?n|WkXMWP-LkBHuc4EhhS6RHOwJW4!<}&#kG%&L`(0bAINLi z?3N(UawPOEeJUM-qGiyKFh>jgNF@11w#r8el0mUUkR?l69D*!4bV@i;%Me3{8vK#G zu)8Cj+yMNJbaDftG&Eav0Ch*pIpJWf&Wc2rdio%LIWz_h+xM;Aq6rkZzL&WX=V&&~+ynd#XXfj<+ovq$p_BXOzv>bM*hzclD)`&$V9 zrIp-XO&UgL+nUA;0^6AlZd)a&YeKDr{Q9+}F^ z)w!R`n)rOKzjLYtb$-imG9(1U`R9%br)nXp7N|v^%W3B=;0eoMRG1v)5cmtuAEN_c zkzD9qZ2}wHnG^bp%9$KEW1Rz0m5xDLx0ZG5>zfxQ%}h;i6x8=upA0t39D^z z5RxUVu_?S-OE3(})bpq0HHl@6H(3t#WEqPm9fV{VYwrlhY6;No>c?Nn@rm0rtx)=I zXSI!1B8bGATf!PGk&(PpjXN!?Qa6+0B9zpmWNClVUlAR+`09gp2w+3@gQI>#bERk}EQU5Q7z< zvx>oL1<-zJ6mgA;e9<1(Rm9E`9INihAJHt3R z2`>unW&F=-^cmUI_g)qjgcpVZmD8tuzqpzyQvl(^ zthLRifZ@a~A5}}fMG78e()Ad{5I)N42c?A^!bfRM9cNnvUa#`b$_dlgXHvj8tvBmg z|4fUt;;g3@O$vAv{Dtu+(U+%r&t)Fn#N4;9KB37T0Jo45DF?Y1yJ;|DwhP2(rNCcG&>J4 zo@TNqEn)CLK|E8S8O?(;1?c|MY-qQQ5&+p$zV2{zho7LCMKX&ovOj1z{;%3&=Zu^e{IB#ZyyKMi1DA>aIKhnkl_*+<58aC=t z3dnb>>JfhY;;os8Q4HQz);z@eq5!^IS^orKIm+F*@r=sZ+k!t+YU}1vIA=llZ+1&knR@ znY8a^9dvNy5=r03y#3adQofJH%%MOh{9k6%#NGx7Ti{CVWAgqlR%H%wChPxVgBtY- z6x;0q=2hs^A8n@xSd7l!TxLhXJIp(5+sj7PJ1j;w2r08^fDgG%3<%8uR#9^)ss;HF zt2QS@KxF3-t!88!M!~zxd*9mPMl0WS$qC8!J-7D*!4}Z;0ubEyTrU9O`X2RyTyvt} zL*^ZWYbhOLb3px&vNIFW=8)}C^L?eL!eG zrDH91FfR%|XWkb!BHDsKXSnpxXyj2uCtccr5D}nB8z8tRZQ9z24BL|~Z+)WR6!Xql z+diP4qVfL;Z2OSyX*DtC&+9ntI*3AWPP1Aw^8w*@nr8lVEkWhijCWLwRa0YryDH80 z`=?N#X9gUphhMYmgzh0A#9yXmSn+ z?paoA&h3D3J_J13^MXj;#Jw_g zD%&4Ya1)Oehd)DU-zd0+d%shE4E=dUxA0g=I0s$tOCc`eyt?8$YD11cR{gw>U($(E z3^9t$JqQrZE#meb1c>GqaomG&_l5;3Z&MHF_?IVc%Sb4~+jzDaPH-T(jrXs?nSvx( z_m--jTz^V(DYp{|g^(=eS&>dNAS6q9aY^_igdgEb!o6zMo9ka*a689?WD=!?QE(^s zR;k5#ej@))9;>965m`u`TCQHs^IJQXyNFN-`{g{lR@(!@emQR#sPj-rZLj$Md8kaF zz+?c`y54305aJas1BKL`m6U<+cj0fOZe>PD#w%SOPz&Ko$^*_bToy&aecaoi#^w7P z^6%rZqHql2FQWJ#P_n=u*YSW$4+`P*0M9Zv8$dWcz)Q>MB?1yuuHn47qFbFP@LSa* z1%6Qi1!fAPTGv;bBRL?%YdFrFKhk2v|ByOX;LlAy#O?en(!=o(x2rlJBoA?{>UeFY z1_9TrRA2uO$@QF9=%k_$&8+AB;tmptCz6Pf%i<__oO@5Jdn12r{^J~53mz_IF?DvM zIvM#xIySnrp%6wJdA9KdgwaM`RjoT)Or7oJe6Z{6ZH0c(1QeJr3)Q;bMh*yZFGWr( zQV9-M+=caE2w0p=y=P?2AlLV?+UQLXFomP2bLAjE&?c+8>5N~7RK?!9CqD+TjK zt~WI)ODVF=ocCxQ5JCbpI~5?fn|Y(T2LZx$Gskg~T+5EA zIiIL)fnW=0d;r1S%Dcw8TG(#o6E1+Qlx5V@e{ep6!7f_%meEA5Ajj8LpHlz!#Ov;3LLr=9=UL{(0T52F^Qch2l2lON-cZ|1{qe)! zaPt6#h~*8QV~!($MB)wS>qr6N@CF|@KAff-#TT_lO)c}MC-!6-CEq6MZYLG%)NJMD0(LM1Mx6@Vl-{~(P$jue5lSE5WE4+J_ZQx z5nkWnYGHbWcMSVlhGP0yJMJAh@6LM$<7swDg(lSWP6q)E&DZ^`-06fGGHid;e=& z8UXcIu1^D~rPG{`(0u|zOMvEZ0toJDo;2@6fN1G7w-<-nC^*Bt>xDV1)Pi}&eR#Fx zI^rA7&(XGkumv=4V}Kxk!v~ss1t4s{;oUvqCCG9u&Fiy#d4Io0t*!E_QfJ*XL5;4m zlMxWQvoslL;Oe5_2I1Xg!>I%F24N3}brjBx!aiyOAsRsQfCdQejiSU%K0vtMDD0WK zKDspct?(9G+j>xcE9~-8Pqw!R+eskU0-8<&f_sawodksKEy8xPo;tZmovrp~rWOf% zWfh-l=9GZa;2w<*GJ|MVDMV@(C1%&HT zQBqKXJm^jD(W6R%Dx(Yj7Z0D@x4$xFrf65#Cca zo)$145jbT`hFc58vrc_p=TA+nb8aXEXPwA4TO}ae)(LEtEn0%g4QhV9pG<6U32D)z zx4|U@5Rwg)5F^3f_?UW?B#*hd(xOkBj|u!rL?5;#kVt7rx-RQR@Uc zTBLrUC77$bRA-a_!^AGZO~%^wT-_z?{Q?k@T>|%u1}y>lr}}%7KPd4}H@(~ST>Yn8 z3IT~kt>CwH1cs@)TNTFrVTs-DyF(!Y+by!qk1BwW>=qUM^bf!7bdGydT^skOCEm

TO|vvT5h^i1)T=?Xn5Xg5+&VGR>ckDA+H&ckTS?0CT^H(Ler3*+E10Z@2jZAs#@p z`2vFbZ#Q&+aQ(M&B`G~Y9T4_ivqR4xKy$4E)V21j288y2`Kn2aF+AwDJ|JWc&@8Wj zkREjX2ZZ#X+4@Kd^p4)%QdpG$5i+pZ-vFU~#|^>Cy+=>yjRn@7L3BMtU0y6@g zdh|XN_-7} z!~^XRy+mti1u5wKA=4G8XW(PS>MfN(u7hIU^b{Nk7M7tUv${|E9q B@I3$k delta 11609 zcmb7KX_!^TnLf3g)3;A=aC)U_;L3`c_uN`Q2ixEPPI^y^C)zc}|Y?<(x#m4f)6qsBJ&?hMZWC z^`DQjFeCCkZ<$mtjbsJt%A<01-bo(vz>8$5cN;7HfU9qg%CC~~t7o>&i{CzHcKhrb zX5Sj0V^(u+eD>|_GiTq1ESMjk3D53mZHu?x+!i-^5ue#w7r$d}TWh?1b_mdRTl>r# z=f~&WJoAQ|<8#~ElAjI=~ITQdj4sZzcc=PyhmS)4S zLe+dEXE#>_S=NG6V|Ix{U|000b_nc>ngQWp%?7Ac2R@QRTPlMBYazg{EUa+|?8<%v z9U{V@$>CRA(`6(YwvYW-&Sx_kf*flj!EeYda|n!v%Kl-NCiszP9C!2*+s}eCVfod?Lp;_e;ezfPKGIOan6MS!>w=*!}7*3HxexMkJcmFF%p} zYnp?6YmotVb3v6uuy1Y}6ZY2ju}BP58OLRxnt?%{wTQufV28Lvupd}E$m(ZCVu-ro zIP{04^fO^UB&DAT`ytT3MC*r<7_R1hDx2#=L|}L-@F6(EQ-Ke`8Q$;muv~MpA~8x; ze<~|#Mg_Uni!9iW%IoS7>_=6%*fFvrF`C90R5LoIpAGxbDgA8NkA{9i>*qvboO=IL z*-$esD6)zVuI>_LSENAA>~gl>?frB$;FCHsBWC)u zv*{R#Y3j^pvY~leYW5vrKP@%;j___;Dy=($Jq>Anz4k7O#I@?0ld`qu+EjK%U|*Zc z&ItC`B0F2OeSRdSt4~hKfi=^E&UU`}u%BMm>=5jykGwAYnYJ&8#0)k5&obFOBc)#e z`xzlg|KfOJT1IV+ZRRR zCjR5nDJuRivXh#3N?uxXQ{c9uA`oxt+}{$5K)h-A^zbH4ERMu2>c39OnL}<#1-%&d zx1@qz3^#9S8EVH?@!@LO6wz5d{TEp|VpdRWjY}XjtE9I> zpw1dN6}u^y*vfDB?qIaDO4?a(kHy1*p_F=OoufLQmV;~NaQ#cCHdxH58$>#UpfhLa zuyCTbM_0T0=hJf1h<2W^7K|F}hdBiM_K~CXxGa+Myq}nH$!cD#dsq)0Mmzd^mG!yo zJ#s#;)J(L&Vt!SVL(rMue*iW)j@{4yskew3Ar7;j#(IQx5aJ}XK>h4M{2+ z907FbiLQRqfOVuC#TV9%2>eSE(o24w% z%m)x^OKCnMGzFaxsg|>HRN^7VyXz4pCkGy4Lk6s3yjy7$w}oc> zhS|5Zqg0t2T7nOMV3LB6U&XRIx?aeyVv$)f$$hA=Vr6uQ&{Sai7~`GEHc1dtz)lK> zEMQiil?ovB80%2zAfz5+C6s<7l@ZC+jQ6sg8BhXrN*PdE&9VwyFO*iZ!nlJ_TAgG) zdRnPiB-b$R);I zqE*U@z)Y>)6z*tyFd-pJ2Ssc4k8g&^eV2 zr6*WcvFnA>6RgCo5b6QIYT8(7dO68Ru4ml+N^&3t=%jKWwVq{_Sg9OHt!JIw?;{6N z>sc-Bxg?bv$tM}_Yi)C(1n87dCIDvXlp|XxJ;};2Y-j!BK-~b`*c8@~l<=Zp1LM!C z7thJ+jvH9mAsinD)J_}9)9U;=IidM!CcA`rVTNgj-qWmWk8}eBpJu%(ai$m|44z@K zwzO6~{EaM9kDiz1lhM#M#h@+b8P=^=x∾uOWPtDQyayl8z;rDXdOPq9(d?oEAFeK36yfjDQD=g(D8sOzCX)paKc$M+^>nS&J z|B|n=uqZrXR>`MT+O6h)FHcV1oenCRVYr)BH`@850m{2s-+p%fK@{v^d|yhK4u(B= zE(ojiDg~swS8cx_YbNhadyHn-?Paz7tu7j%yO*_GVs$g3U_ax3OzCF8em@IKQ3=!P zXOQlJN1Ob_B?r>7XocBtp~dAfa)~8)n|bfrl8EB} zHj9<(ZBhsS9mf0VT?7cr3s~zQY~NvZy&Z(=JFKZMs7Wdyg7=yCft97`zt3V+gh{Dm zf5h#+K#&DA<&#-~BdokZ%bNHfVST8qONRz$V@%f)J%GKKt$&_ZEGYOM!{#y`?HnBjaz=^f)kSLNmma5K^D-= z0uZ(*-7Em1dXi>As##I+7v`OTYBANMytnq7gP1Sh>l3K&V}y%%7qu z=v>6rb-q6}xrm#DfDlb=5$~GN`2YycBHp`EuUuXf+|9iu)`L7)-py^A<&g)Axh;Bt zFfl+AYCza7=H=!d0SMK_yv|fPd3*$V@8R6kKzVw51~hdIpzbX*wIm?8_i&s+Ey$$~ zQE)%^mU5=%27dqK{XA9}_QC8rkUI}@+$<{MWB*#H~WFDIh2-d0|o5hKWQ`u!?(Y5W)Y5`PU~`alFP-1S4{O^~FUH z97GT#6G1=>yxK(&5CgBK2-aiZ{3uw*ySxHrn)lI@0PcY$I9qAO6HRj z>(zoxzag>Sg#e9^UC%Si^?U#!yPo&#rGuVNlYNSUeq-XPG=-w}lnXa(KzYiAJD;Mq zfx>-#!-h14gf_T9!v>TM6zI(i-WNo{bKLvA`abkGq?8TR{G9QZHormnAm2 z_@fa@n|Ow~vH?PA6E7~I=N?edxkWW(`(qMYT;$M5t-PzbVE}@%g`;l1K~v!G^XjQ= zzpegx_ZutFtNc8-2NEDC&vP6|57Q$=0l^(=K#spWxr6gk9Xd2(m>s-xje}&w6ZJX+ z3g~ve^Wri99Ap4UCIbL5z)qI|fEb{|PD+8x5X8bLc$s^ztFLnWOY>glICt^tEDI@! zyVT{me*eTSw;X7M(k`B9JO_l*F5ac94q_n%@inzE*B_I7%|!%_)aoJv2+C^|5z6mE zTJ+r)H#=}JJCMxm05QOBH#x`aYgzE{=ep?BfmQ`U(j3eSE}7`d9)5bRJMU^8Ci+0d8v@G*T0z!b6e){o z#&2=nqCEqGETAbn0Ac$UuQC^1K*+wuaY>*!mPEn3+&f}bOJMmfx5ZQmsV3j!e4LgA zge;)Z0fg~;yx*m+7qaj1F=O>nTtZWMpYsW}lP(2-{Tic~B722atQSc}3 z9kU)y>;%(4aa(hABA1SGK3o%lAPZ>DU_jU&<&9>603myn7H9}2S{el(bMFgvbw_`2 zhmYwfdx(CzrKEUVJ=xKJByrqrDrkh#ah_pblmMZ0oJaZkEv}U2c0$dF{LzC>xcovR zd^y3hOl=8BM!e@p?I|D>PVmb{hm-W6NS2f8qsX6d&SrRP3MS z87><5@CAq(m6oD&6rAJU*R&KZ<2%Ff9Q|~ug6mAHah~%5I%+`B1~krQj1>P7&LA5K&G~snFZFbL|s8sOb_J%v=%xP1z ziv0T4yM?aexa<}M_XzJ^>p(Y%-Xmh2v;*D9fhEGu8wd^nnjbJAY?p{CGjBjRuteB- z$MJkE)P*8{Z1MqNr`kOVmJ077J5qPBmkK-8?ljUe!3XQ90%0UTQ;`C~cA2O*?}LCC zX_>H>#PTS3M0m=omc#N9VSkt9q&j%H;FoAwK*$1`r%^x{FBiSc9TE_-%SCfbcol+Q zPHDeFC|TlPom?SoU4>TNZ1WTloD~9jO1o{jF2&&XMO2{Rz^RqO?zVs!V5P7XC?Ez% zt`zos=@A7#7v5ubvOQq>b78L;J!rD4gnhRMf-InUo&|*MDp6!I9}u#uguR_rM8O*2 zJ!w@dV7bPHu!2+vt#u&;ge;&5As~#`x)1_FcC8Cx1x;n0YU<=qORjSfL?g8d8$m!& z*0~5)Pz2XsTm->^Pav7|3J?RVcM$}n2(EV#>=^~W5Z*8CTzkUw7cPQ5X|5XtHy>1h zAPbnSlLrvC8$^!zG5`qK4WfX)$8*^$3VtQLUt85)u>2LJHYG(bQcXT9c-=*01xOei zBr_*KNIvW41cR1vYa6gz+XfCqT$< za&xMRf-S<^Ze^=rxy8v=k?e1TJvf1&3TQS4K-m69RGEDXP((>!JO(D)4q+Z`gq1QrmgJ49XwogFn%w_vC6Ub3<^Fx@Heb&=Ae zhGbt<3p)FKuXs_|uZw7e&5Oc*T?B;Oi*CJZqu>?c{lTi$!txbbn9)$HCAC)tFD-3Z zS?PCD%gX#5)w9g+nn0uZ3JDW1UKN>UX8?rutD>Y6&MOi?=WFWrGJo8d*U}VPmDfb3 z`Dz3kP+k*7<{_#s3U&+cP3uk_EO!f3fLB1Rj@;R!co%tq|E;E3@4WK|nr zc|@QdrQd7=seT~r=g9`1Bw1jSLg43lmG*v2~?(J?02taT@5_r$%sb5AKAb$r0N+}-oqc5IOBeIXoO>DM5g(o2?)v=QQBGm z{YN9!*k{%KJ^V?DvuO&|*k|2d0UJ=x(q2)nM?uWLRIv)bBJpLKLN)f6BGaT?Bc~es zOFC0}X$rn`pHtUV_*Kbs!oD0fa(XR4CmQ2c@l?`%)S$mG+$i2r~pUPt$;~T`H^1 U`vM?Tm&yUn*9ZFVWm(hz0K5S{PXGV_ diff --git a/crates/view/src/client.rs b/crates/view/src/client.rs index 71576377c0..e08807a379 100644 --- a/crates/view/src/client.rs +++ b/crates/view/src/client.rs @@ -2,6 +2,9 @@ use std::{collections::BTreeMap, future::Future, pin::Pin}; use anyhow::Result; use futures::{FutureExt, Stream, StreamExt, TryStreamExt}; +use tonic::codegen::Bytes; +use tracing::instrument; + use penumbra_app::params::AppParameters; use penumbra_asset::asset::{self, DenomMetadata, Id}; use penumbra_chain::params::FmdParameters; @@ -10,10 +13,7 @@ use penumbra_dex::{ TradingPair, }; use penumbra_fee::GasPrices; -use penumbra_keys::{ - keys::{AddressIndex, WalletId}, - Address, -}; +use penumbra_keys::{keys::AddressIndex, Address}; use penumbra_num::Amount; use penumbra_proto::view::v1alpha1::{ self as pb, view_protocol_service_client::ViewProtocolServiceClient, WitnessRequest, @@ -26,9 +26,6 @@ use penumbra_transaction::{ plan::TransactionPlan, txhash::TransactionId, Transaction, WitnessData, }; -use tonic::codegen::Bytes; -use tracing::instrument; - use crate::{SpendableNoteRecord, StatusStreamResponse, SwapRecord, TransactionInfo}; /// The view protocol is used by a view client, who wants to do some @@ -48,13 +45,11 @@ pub trait ViewClient { /// Get the current status of chain sync. fn status( &mut self, - wallet_id: WalletId, ) -> Pin> + Send + 'static>>; /// Stream status updates on chain sync until it completes. fn status_stream( &mut self, - wallet_id: WalletId, ) -> Pin< Box< dyn Future< @@ -103,21 +98,18 @@ pub trait ViewClient { /// Queries for a specific note by commitment, returning immediately if it is not found. fn note_by_commitment( &mut self, - wallet_id: WalletId, note_commitment: note::StateCommitment, ) -> Pin> + Send + 'static>>; /// Queries for a specific swap by commitment, returning immediately if it is not found. fn swap_by_commitment( &mut self, - wallet_id: WalletId, swap_commitment: penumbra_tct::StateCommitment, ) -> Pin> + Send + 'static>>; /// Queries for a specific nullifier's status, returning immediately if it is not found. fn nullifier_status( &mut self, - wallet_id: WalletId, nullifier: Nullifier, ) -> Pin> + Send + 'static>>; @@ -125,7 +117,6 @@ pub trait ViewClient { /// present, but waiting otherwise. fn await_nullifier( &mut self, - wallet_id: WalletId, nullifier: Nullifier, ) -> Pin> + Send + 'static>>; @@ -134,7 +125,6 @@ pub trait ViewClient { /// This is useful for waiting for a note to be detected by the view service. fn await_note_by_commitment( &mut self, - wallet_id: WalletId, note_commitment: note::StateCommitment, ) -> Pin> + Send + 'static>>; @@ -146,7 +136,6 @@ pub trait ViewClient { /// service could have advanced the state commitment tree state between queries). fn witness( &mut self, - wallet_id: WalletId, plan: &TransactionPlan, ) -> Pin> + Send + 'static>>; @@ -187,10 +176,9 @@ pub trait ViewClient { ) -> Pin> + Send + 'static>>; /// Return unspent notes, grouped by address index and then by asset id. - #[instrument(skip(self, wallet_id))] + #[instrument(skip(self))] fn unspent_notes_by_address_and_asset( &mut self, - wallet_id: WalletId, ) -> Pin< Box< dyn Future< @@ -202,7 +190,6 @@ pub trait ViewClient { >, > { let notes = self.notes(pb::NotesRequest { - wallet_id: Some(wallet_id.into()), include_spent: false, ..Default::default() }); @@ -228,10 +215,9 @@ pub trait ViewClient { } /// Return unspent notes, grouped by account ID (combining ephemeral addresses for the account) and then by asset id. - #[instrument(skip(self, wallet_id))] + #[instrument(skip(self))] fn unspent_notes_by_account_and_asset( &mut self, - wallet_id: WalletId, ) -> Pin< Box< dyn Future< @@ -241,7 +227,6 @@ pub trait ViewClient { >, > { let notes = self.notes(pb::NotesRequest { - wallet_id: Some(wallet_id.into()), include_spent: false, ..Default::default() }); @@ -267,10 +252,9 @@ pub trait ViewClient { } /// Return unspent notes, grouped by denom and then by address index. - #[instrument(skip(self, wallet_id))] + #[instrument(skip(self))] fn unspent_notes_by_asset_and_address( &mut self, - wallet_id: WalletId, ) -> Pin< Box< dyn Future< @@ -282,7 +266,6 @@ pub trait ViewClient { >, > { let notes = self.notes(pb::NotesRequest { - wallet_id: Some(wallet_id.into()), include_spent: false, ..Default::default() }); @@ -335,13 +318,10 @@ where { fn status( &mut self, - wallet_id: WalletId, ) -> Pin> + Send + 'static>> { let mut self2 = self.clone(); async move { - let status = self2.status(tonic::Request::new(pb::StatusRequest { - wallet_id: Some(wallet_id.into()), - })); + let status = self2.status(tonic::Request::new(pb::StatusRequest {})); let status = status.await?.into_inner(); Ok(status) } @@ -350,7 +330,6 @@ where fn status_stream( &mut self, - wallet_id: WalletId, ) -> Pin< Box< dyn Future< @@ -363,9 +342,7 @@ where > { let mut self2 = self.clone(); async move { - let stream = self2.status_stream(tonic::Request::new(pb::StatusStreamRequest { - wallet_id: Some(wallet_id.into()), - })); + let stream = self2.status_stream(tonic::Request::new(pb::StatusStreamRequest {})); let stream = stream.await?.into_inner(); Ok(stream @@ -487,7 +464,6 @@ where fn note_by_commitment( &mut self, - wallet_id: WalletId, note_commitment: note::StateCommitment, ) -> Pin> + Send + 'static>> { let mut self2 = self.clone(); @@ -495,7 +471,6 @@ where let note_commitment_response = ViewProtocolServiceClient::note_by_commitment( &mut self2, tonic::Request::new(pb::NoteByCommitmentRequest { - wallet_id: Some(wallet_id.into()), note_commitment: Some(note_commitment.into()), await_detection: false, }), @@ -553,7 +528,6 @@ where fn swap_by_commitment( &mut self, - wallet_id: WalletId, swap_commitment: penumbra_tct::StateCommitment, ) -> Pin> + Send + 'static>> { let mut self2 = self.clone(); @@ -561,7 +535,6 @@ where let swap_commitment_response = ViewProtocolServiceClient::swap_by_commitment( &mut self2, tonic::Request::new(pb::SwapByCommitmentRequest { - wallet_id: Some(wallet_id.into()), swap_commitment: Some(swap_commitment.into()), await_detection: false, }), @@ -581,7 +554,6 @@ where /// This is useful for waiting for a note to be detected by the view service. fn await_note_by_commitment( &mut self, - wallet_id: WalletId, note_commitment: note::StateCommitment, ) -> Pin> + Send + 'static>> { let mut self2 = self.clone(); @@ -589,7 +561,6 @@ where let spendable_note = ViewProtocolServiceClient::note_by_commitment( &mut self2, tonic::Request::new(pb::NoteByCommitmentRequest { - wallet_id: Some(wallet_id.into()), note_commitment: Some(note_commitment.into()), await_detection: true, }), @@ -606,7 +577,6 @@ where /// Queries for a specific nullifier's status, returning immediately if it is not found. fn nullifier_status( &mut self, - wallet_id: WalletId, nullifier: Nullifier, ) -> Pin> + Send + 'static>> { let mut self2 = self.clone(); @@ -614,7 +584,6 @@ where let rsp = ViewProtocolServiceClient::nullifier_status( &mut self2, tonic::Request::new(pb::NullifierStatusRequest { - wallet_id: Some(wallet_id.into()), nullifier: Some(nullifier.into()), await_detection: false, }), @@ -628,7 +597,6 @@ where /// present, but waiting otherwise. fn await_nullifier( &mut self, - wallet_id: WalletId, nullifier: Nullifier, ) -> Pin> + Send + 'static>> { let mut self2 = self.clone(); @@ -636,7 +604,6 @@ where let rsp = ViewProtocolServiceClient::nullifier_status( &mut self2, tonic::Request::new(pb::NullifierStatusRequest { - wallet_id: Some(wallet_id.into()), nullifier: Some(nullifier.into()), await_detection: true, }), @@ -649,7 +616,6 @@ where fn witness( &mut self, - wallet_id: WalletId, plan: &TransactionPlan, ) -> Pin> + Send + 'static>> { // TODO: delete this code and move it into the view service. @@ -672,7 +638,6 @@ where .collect(); let request = WitnessRequest { - wallet_id: Some(wallet_id.into()), note_commitments, transaction_plan: Some(plan.clone().into()), }; @@ -893,7 +858,6 @@ where async move { let address = self2.address_by_index(tonic::Request::new(pb::AddressByIndexRequest { address_index: Some(address_index.into()), - ..Default::default() })); let address = address .await? @@ -938,9 +902,7 @@ where async move { let swaps_response = ViewProtocolServiceClient::unclaimed_swaps( &mut self2, - tonic::Request::new(pb::UnclaimedSwapsRequest { - ..Default::default() - }), + tonic::Request::new(pb::UnclaimedSwapsRequest {}), ); let pb_swaps: Vec<_> = swaps_response.await?.into_inner().try_collect().await?; diff --git a/crates/view/src/planner.rs b/crates/view/src/planner.rs index a9c40e2162..74c18ba4a9 100644 --- a/crates/view/src/planner.rs +++ b/crates/view/src/planner.rs @@ -5,6 +5,8 @@ use std::{ }; use anyhow::Result; +use rand::{CryptoRng, RngCore}; +use tracing::instrument; use penumbra_asset::{asset, Balance, Value, STAKING_TOKEN_ASSET_ID}; use penumbra_chain::params::{ChainParameters, FmdParameters}; @@ -25,10 +27,7 @@ use penumbra_governance::{ ProposalWithdraw, ValidatorVote, Vote, }; use penumbra_ibc::IbcRelay; -use penumbra_keys::{ - keys::{AddressIndex, WalletId}, - Address, -}; +use penumbra_keys::{keys::AddressIndex, Address}; use penumbra_num::Amount; use penumbra_proto::view::v1alpha1::{NotesForVotingRequest, NotesRequest}; use penumbra_shielded_pool::{Ics20Withdrawal, Note, OutputPlan, SpendPlan}; @@ -40,8 +39,6 @@ use penumbra_transaction::{ memo::MemoPlaintext, plan::{ActionPlan, MemoPlan, TransactionPlan}, }; -use rand::{CryptoRng, RngCore}; -use tracing::instrument; use crate::{SpendableNoteRecord, ViewClient}; @@ -102,14 +99,12 @@ impl Planner { /// Get all the note requests necessary to fulfill the current [`Balance`]. pub fn notes_requests( &self, - wallet_id: WalletId, source: AddressIndex, ) -> (Vec, Vec) { ( self.balance .required() .map(|Value { asset_id, amount }| NotesRequest { - wallet_id: Some(wallet_id.into()), asset_id: Some(asset_id.into()), address_index: Some(source.into()), amount_to_spend: Some(amount.into()), @@ -125,7 +120,6 @@ impl Planner { start_block_height, .. }, )| NotesForVotingRequest { - wallet_id: Some(wallet_id.into()), votable_at_height: *start_block_height, address_index: Some(source.into()), }, @@ -456,7 +450,6 @@ impl Planner { pub async fn plan( &mut self, view: &mut V, - wallet_id: WalletId, source: AddressIndex, ) -> anyhow::Result { // Gather all the information needed from the view service @@ -471,7 +464,7 @@ impl Planner { let mut spendable_notes = Vec::new(); let mut voting_notes = Vec::new(); - let (spendable_requests, voting_requests) = self.notes_requests(wallet_id, source); + let (spendable_requests, voting_requests) = self.notes_requests(source); for request in spendable_requests { let notes = view.notes(request).await?; spendable_notes.extend(notes); diff --git a/crates/view/src/service.rs b/crates/view/src/service.rs index 33d65dec5d..7d04f38c9d 100644 --- a/crates/view/src/service.rs +++ b/crates/view/src/service.rs @@ -29,13 +29,12 @@ use penumbra_dex::{ }; use penumbra_fee::Fee; use penumbra_keys::{ - keys::{AddressIndex, FullViewingKey, WalletId}, + keys::{AddressIndex, FullViewingKey}, Address, }; use penumbra_num::Amount; use penumbra_proto::view::v1alpha1::{WalletIdRequest, WalletIdResponse}; use penumbra_proto::{ - core::keys::v1alpha1 as pbc, util::tendermint_proxy::v1alpha1::{ tendermint_proxy_service_client::TendermintProxyServiceClient, BroadcastTxSyncRequest, GetStatusRequest, @@ -72,7 +71,6 @@ pub struct ViewService { // A shared error slot for errors bubbled up by the worker. This is a regular Mutex // rather than a Tokio Mutex because it should be uncontended. error_slot: Arc>>, - wallet_id: WalletId, // A copy of the SCT used by the worker task. state_commitment_tree: Arc>, // The Url for the pd gRPC endpoint on remote node. @@ -106,12 +104,8 @@ impl ViewService { tokio::spawn(worker.run()); - let fvk = storage.full_viewing_key().await?; - let wallet_id = fvk.wallet_id(); - Ok(Self { storage, - wallet_id, error_slot, sync_height_rx, state_commitment_tree: sct, @@ -119,19 +113,6 @@ impl ViewService { }) } - /// Checks that the wallet ID, if present, matches the one for this service. - async fn check_wallet_id(&self, fvk: Option<&pbc::WalletId>) -> Result<(), tonic::Status> { - if let Some(fvk) = fvk { - if fvk != &self.wallet_id.into() { - return Err(tonic::Status::new( - tonic::Code::InvalidArgument, - "Invalid account ID", - )); - } - } - Ok(()) - } - async fn check_worker(&self) -> Result<(), tonic::Status> { // If the shared error slot is set, then an error has occurred in the worker // that we should bubble up. @@ -602,9 +583,6 @@ impl ViewProtocolService for ViewService { ); } - let fvk = self.storage.full_viewing_key().await.map_err(|e| { - tonic::Status::failed_precondition(format!("Error retrieving full viewing key: {e:#}")) - })?; let mut client_of_self = ViewProtocolServiceClient::new(ViewProtocolServiceServer::new(self.clone())); @@ -616,7 +594,7 @@ impl ViewProtocolService for ViewService { .unwrap_or(0u32); let plan = planner - .plan(&mut client_of_self, fvk.wallet_id(), source.into()) + .plan(&mut client_of_self, source.into()) .await .context("could not plan requested transaction") .map_err(|e| tonic::Status::invalid_argument(format!("{e:#}")))?; @@ -878,8 +856,6 @@ impl ViewProtocolService for ViewService { request: tonic::Request, ) -> Result, tonic::Status> { self.check_worker().await?; - self.check_wallet_id(request.get_ref().wallet_id.as_ref()) - .await?; let request = request.into_inner(); @@ -963,8 +939,6 @@ impl ViewProtocolService for ViewService { request: tonic::Request, ) -> Result, tonic::Status> { self.check_worker().await?; - self.check_wallet_id(request.get_ref().wallet_id.as_ref()) - .await?; let request = request.into_inner(); @@ -995,8 +969,6 @@ impl ViewProtocolService for ViewService { request: tonic::Request, ) -> Result, tonic::Status> { self.check_worker().await?; - self.check_wallet_id(request.get_ref().wallet_id.as_ref()) - .await?; let request = request.into_inner(); @@ -1017,11 +989,9 @@ impl ViewProtocolService for ViewService { async fn status( &self, - request: tonic::Request, + _: tonic::Request, ) -> Result, tonic::Status> { self.check_worker().await?; - self.check_wallet_id(request.get_ref().wallet_id.as_ref()) - .await?; Ok(tonic::Response::new(self.status().await.map_err(|e| { tonic::Status::internal(format!("error: {e}")) @@ -1030,11 +1000,9 @@ impl ViewProtocolService for ViewService { async fn status_stream( &self, - request: tonic::Request, + _: tonic::Request, ) -> Result, tonic::Status> { self.check_worker().await?; - self.check_wallet_id(request.get_ref().wallet_id.as_ref()) - .await?; let (latest_known_block_height, _) = self.latest_known_block_height().await.map_err(|e| { @@ -1067,8 +1035,6 @@ impl ViewProtocolService for ViewService { request: tonic::Request, ) -> Result, tonic::Status> { self.check_worker().await?; - self.check_wallet_id(request.get_ref().wallet_id.as_ref()) - .await?; let request = request.into_inner(); @@ -1120,8 +1086,6 @@ impl ViewProtocolService for ViewService { request: tonic::Request, ) -> Result, tonic::Status> { self.check_worker().await?; - self.check_wallet_id(request.get_ref().wallet_id.as_ref()) - .await?; let address_index = request .get_ref() @@ -1277,8 +1241,6 @@ impl ViewProtocolService for ViewService { request: tonic::Request, ) -> Result, tonic::Status> { self.check_worker().await?; - self.check_wallet_id(request.get_ref().wallet_id.as_ref()) - .await?; // Acquire a read lock for the SCT that will live for the entire request, // so that all auth paths are relative to the same SCT root. @@ -1391,7 +1353,6 @@ impl ViewProtocolService for ViewService { .map_err(|e| tonic::Status::invalid_argument(format!("{:#}", e)))?; let witness_request = pb::WitnessRequest { - wallet_id: Some(self.wallet_id.into()), note_commitments, transaction_plan: Some(transaction_plan.clone().into()), }; @@ -1532,11 +1493,9 @@ impl ViewProtocolService for ViewService { async fn unclaimed_swaps( &self, - request: tonic::Request, + _: tonic::Request, ) -> Result, tonic::Status> { self.check_worker().await?; - self.check_wallet_id(request.get_ref().wallet_id.as_ref()) - .await?; let swaps = self.storage.unclaimed_swaps().await.map_err(|e| { tonic::Status::unavailable(format!("error fetching unclaimed swaps: {e}")) diff --git a/crates/wallet/src/build.rs b/crates/wallet/src/build.rs index af6520be0b..44f61a3105 100644 --- a/crates/wallet/src/build.rs +++ b/crates/wallet/src/build.rs @@ -1,4 +1,5 @@ use anyhow::Result; + use penumbra_custody::{AuthorizeRequest, CustodyClient}; use penumbra_keys::FullViewingKey; use penumbra_transaction::{plan::TransactionPlan, AuthorizationData, Transaction}; @@ -26,7 +27,7 @@ where .try_into()?; // Send a witness request to the view service to get witness data - let witness_data = view.witness(fvk.wallet_id(), &plan).await?; + let witness_data = view.witness(&plan).await?; // ... and then build the transaction: #[cfg(not(feature = "parallel"))] diff --git a/crates/wallet/src/plan.rs b/crates/wallet/src/plan.rs index 01a4f3b947..01344aad76 100644 --- a/crates/wallet/src/plan.rs +++ b/crates/wallet/src/plan.rs @@ -1,29 +1,25 @@ -use penumbra_dex::swap_claim::SwapClaimPlan; -use penumbra_proto::view::v1alpha1::NotesRequest; use std::collections::BTreeMap; use anyhow::{Context, Result}; use ark_std::UniformRand; use decaf377::Fq; +use rand_core::{CryptoRng, RngCore}; +use tracing::instrument; + use penumbra_asset::Value; +use penumbra_dex::swap_claim::SwapClaimPlan; use penumbra_fee::Fee; use penumbra_governance::{proposal_state, Proposal, ValidatorVote}; -use penumbra_keys::{ - keys::{AddressIndex, WalletId}, - Address, -}; +use penumbra_keys::{keys::AddressIndex, Address}; use penumbra_num::Amount; +use penumbra_proto::view::v1alpha1::NotesRequest; use penumbra_stake::rate::RateData; use penumbra_stake::validator; use penumbra_transaction::{memo::MemoPlaintext, plan::TransactionPlan, TransactionParameters}; -use penumbra_view::{SpendableNoteRecord, ViewClient}; -use rand_core::{CryptoRng, RngCore}; -use tracing::instrument; - pub use penumbra_view::Planner; +use penumbra_view::{SpendableNoteRecord, ViewClient}; pub async fn validator_definition( - wallet_id: WalletId, view: &mut V, rng: R, new_validator: validator::Definition, @@ -37,13 +33,12 @@ where Planner::new(rng) .fee(fee) .validator_definition(new_validator) - .plan(view, wallet_id, source_address) + .plan(view, source_address) .await .context("can't build validator definition plan") } pub async fn validator_vote( - wallet_id: WalletId, view: &mut V, rng: R, vote: ValidatorVote, @@ -57,15 +52,14 @@ where Planner::new(rng) .fee(fee) .validator_vote(vote) - .plan(view, wallet_id, source_address) + .plan(view, source_address) .await .context("can't build validator vote plan") } /// Generate a new transaction plan delegating stake -#[instrument(skip(wallet_id, view, rng, rate_data, unbonded_amount, fee, source_address))] +#[instrument(skip(view, rng, rate_data, unbonded_amount, fee, source_address))] pub async fn delegate( - wallet_id: WalletId, view: &mut V, rng: R, rate_data: RateData, @@ -80,24 +74,14 @@ where Planner::new(rng) .fee(fee) .delegate(unbonded_amount, rate_data) - .plan(view, wallet_id, source_address) + .plan(view, source_address) .await .context("can't build delegate plan") } #[allow(clippy::too_many_arguments)] -#[instrument(skip( - wallet_id, - view, - rng, - values, - fee, - dest_address, - source_address_index, - tx_memo -))] +#[instrument(skip(view, rng, values, fee, dest_address, source_address_index, tx_memo))] pub async fn send( - wallet_id: WalletId, view: &mut V, rng: R, values: &[Value], @@ -125,17 +109,13 @@ where let source_address = view.address_by_index(source_address_index).await?; planner .memo(tx_memo.unwrap_or_else(|| MemoPlaintext::blank_memo(source_address)))? - .plan(view, wallet_id, source_address_index) + .plan(view, source_address_index) .await .context("can't build send transaction") } -#[instrument(skip(wallet_id, view, rng))] -pub async fn sweep( - wallet_id: WalletId, - view: &mut V, - mut rng: R, -) -> anyhow::Result> +#[instrument(skip(view, rng))] +pub async fn sweep(view: &mut V, mut rng: R) -> anyhow::Result> where V: ViewClient, R: RngCore + CryptoRng, @@ -147,7 +127,7 @@ where // Finally, sweep dust notes by spending them to their owner's address. // This will consolidate small-value notes into larger ones. - plans.extend(sweep_notes(wallet_id, view, &mut rng).await?); + plans.extend(sweep_notes(view, &mut rng).await?); Ok(plans) } @@ -204,12 +184,8 @@ where Ok(plans) } -#[instrument(skip(wallet_id, view, rng))] -pub async fn sweep_notes( - wallet_id: WalletId, - view: &mut V, - mut rng: R, -) -> anyhow::Result> +#[instrument(skip(view, rng))] +pub async fn sweep_notes(view: &mut V, mut rng: R) -> anyhow::Result> where V: ViewClient, R: RngCore + CryptoRng, @@ -218,7 +194,6 @@ where let all_notes = view .notes(NotesRequest { - wallet_id: Some(wallet_id.into()), ..Default::default() }) .await?; @@ -257,7 +232,7 @@ where } let plan = planner - .plan(view, wallet_id, index) + .plan(view, index) .await .context("can't build sweep transaction")?; @@ -270,9 +245,8 @@ where Ok(plans) } -#[instrument(skip(wallet_id, view, rng))] +#[instrument(skip(view, rng))] pub async fn proposal_submit( - wallet_id: WalletId, view: &mut V, rng: R, proposal: Proposal, @@ -292,15 +266,14 @@ where .governance_params .proposal_deposit_amount, ) - .plan(view, wallet_id, source_address) + .plan(view, source_address) .await .context("can't build proposal submit transaction") } #[allow(clippy::too_many_arguments)] -#[instrument(skip(wallet_id, view, rng))] +#[instrument(skip(view, rng))] pub async fn proposal_withdraw( - wallet_id: WalletId, view: &mut V, rng: R, proposal_id: u64, @@ -315,15 +288,14 @@ where Planner::new(rng) .fee(fee) .proposal_withdraw(proposal_id, reason) - .plan(view, wallet_id, source_address) + .plan(view, source_address) .await .context("can't build proposal withdraw transaction") } #[allow(clippy::too_many_arguments)] -#[instrument(skip(wallet_id, view, rng))] +#[instrument(skip(view, rng))] pub async fn proposal_deposit_claim( - wallet_id: WalletId, view: &mut V, rng: R, proposal_id: u64, @@ -339,7 +311,7 @@ where Planner::new(rng) .fee(fee) .proposal_deposit_claim(proposal_id, deposit_amount, outcome) - .plan(view, wallet_id, source_address) + .plan(view, source_address) .await .context("can't build proposal withdraw transaction") } diff --git a/crates/wasm/src/planner.rs b/crates/wasm/src/planner.rs index af74b0c978..fdc5086f4e 100644 --- a/crates/wasm/src/planner.rs +++ b/crates/wasm/src/planner.rs @@ -103,7 +103,6 @@ impl Planner { self.balance .required() .map(|Value { asset_id, amount }| NotesRequest { - wallet_id: None, asset_id: Some(asset_id.into()), address_index: source.clone(), amount_to_spend: Some(amount.into()), @@ -119,7 +118,6 @@ impl Planner { start_block_height, .. }, )| NotesForVotingRequest { - wallet_id: None, votable_at_height: *start_block_height, address_index: source.clone(), }, diff --git a/proto/go/gen/penumbra/view/v1alpha1/view.pb.go b/proto/go/gen/penumbra/view/v1alpha1/view.pb.go index 32975e4f37..996bb97671 100644 --- a/proto/go/gen/penumbra/view/v1alpha1/view.pb.go +++ b/proto/go/gen/penumbra/view/v1alpha1/view.pb.go @@ -268,8 +268,6 @@ type TransactionPlannerRequest struct { Memo *v1alpha1.MemoPlaintext `protobuf:"bytes,3,opt,name=memo,proto3" json:"memo,omitempty"` // If present, only spends funds from the given account. Source *v1alpha13.AddressIndex `protobuf:"bytes,4,opt,name=source,proto3" json:"source,omitempty"` - // Optionally identifies the wallet id to query. - WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` // Request contents Outputs []*TransactionPlannerRequest_Output `protobuf:"bytes,20,rep,name=outputs,proto3" json:"outputs,omitempty"` Swaps []*TransactionPlannerRequest_Swap `protobuf:"bytes,30,rep,name=swaps,proto3" json:"swaps,omitempty"` @@ -343,13 +341,6 @@ func (x *TransactionPlannerRequest) GetSource() *v1alpha13.AddressIndex { return nil } -func (x *TransactionPlannerRequest) GetWalletId() *v1alpha13.WalletId { - if x != nil { - return x.WalletId - } - return nil -} - func (x *TransactionPlannerRequest) GetOutputs() []*TransactionPlannerRequest_Output { if x != nil { return x.Outputs @@ -960,9 +951,6 @@ type StatusRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - // Identifies the wallet id to query. - WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *StatusRequest) Reset() { @@ -997,13 +985,6 @@ func (*StatusRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{16} } -func (x *StatusRequest) GetWalletId() *v1alpha13.WalletId { - if x != nil { - return x.WalletId - } - return nil -} - // Returns the status of the view service and whether it is synchronized with the chain state. type StatusResponse struct { state protoimpl.MessageState @@ -1076,9 +1057,6 @@ type StatusStreamRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - // Identifies the wallet id to query. - WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *StatusStreamRequest) Reset() { @@ -1113,13 +1091,6 @@ func (*StatusStreamRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{18} } -func (x *StatusStreamRequest) GetWalletId() *v1alpha13.WalletId { - if x != nil { - return x.WalletId - } - return nil -} - // A streaming sync status update type StatusStreamResponse struct { state protoimpl.MessageState @@ -1206,8 +1177,6 @@ type NotesRequest struct { // // Ignored if `asset_id` is unset or if `include_spent` is set. AmountToSpend *v1alpha16.Amount `protobuf:"bytes,6,opt,name=amount_to_spend,json=amountToSpend,proto3" json:"amount_to_spend,omitempty"` - // Identifies the wallet id to query. - WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *NotesRequest) Reset() { @@ -1270,13 +1239,6 @@ func (x *NotesRequest) GetAmountToSpend() *v1alpha16.Amount { return nil } -func (x *NotesRequest) GetWalletId() *v1alpha13.WalletId { - if x != nil { - return x.WalletId - } - return nil -} - // A query for notes to be used for voting on a proposal. type NotesForVotingRequest struct { state protoimpl.MessageState @@ -1287,8 +1249,6 @@ type NotesForVotingRequest struct { VotableAtHeight uint64 `protobuf:"varint,1,opt,name=votable_at_height,json=votableAtHeight,proto3" json:"votable_at_height,omitempty"` // If set, only return notes with the specified asset id. AddressIndex *v1alpha13.AddressIndex `protobuf:"bytes,3,opt,name=address_index,json=addressIndex,proto3" json:"address_index,omitempty"` - // Identifies the wallet id to query. - WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *NotesForVotingRequest) Reset() { @@ -1337,13 +1297,6 @@ func (x *NotesForVotingRequest) GetAddressIndex() *v1alpha13.AddressIndex { return nil } -func (x *NotesForVotingRequest) GetWalletId() *v1alpha13.WalletId { - if x != nil { - return x.WalletId - } - return nil -} - type WitnessRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1353,8 +1306,6 @@ type WitnessRequest struct { NoteCommitments []*v1alpha17.StateCommitment `protobuf:"bytes,2,rep,name=note_commitments,json=noteCommitments,proto3" json:"note_commitments,omitempty"` // The transaction plan to witness TransactionPlan *v1alpha1.TransactionPlan `protobuf:"bytes,3,opt,name=transaction_plan,json=transactionPlan,proto3" json:"transaction_plan,omitempty"` - // Identifies the wallet id to query. - WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *WitnessRequest) Reset() { @@ -1403,13 +1354,6 @@ func (x *WitnessRequest) GetTransactionPlan() *v1alpha1.TransactionPlan { return nil } -func (x *WitnessRequest) GetWalletId() *v1alpha13.WalletId { - if x != nil { - return x.WalletId - } - return nil -} - type WitnessResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1977,8 +1921,6 @@ type NoteByCommitmentRequest struct { NoteCommitment *v1alpha17.StateCommitment `protobuf:"bytes,2,opt,name=note_commitment,json=noteCommitment,proto3" json:"note_commitment,omitempty"` // If set to true, waits to return until the requested note is detected. AwaitDetection bool `protobuf:"varint,3,opt,name=await_detection,json=awaitDetection,proto3" json:"await_detection,omitempty"` - // Identifies the wallet id to query. - WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *NoteByCommitmentRequest) Reset() { @@ -2027,13 +1969,6 @@ func (x *NoteByCommitmentRequest) GetAwaitDetection() bool { return false } -func (x *NoteByCommitmentRequest) GetWalletId() *v1alpha13.WalletId { - if x != nil { - return x.WalletId - } - return nil -} - type NoteByCommitmentResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2089,8 +2024,6 @@ type SwapByCommitmentRequest struct { SwapCommitment *v1alpha17.StateCommitment `protobuf:"bytes,2,opt,name=swap_commitment,json=swapCommitment,proto3" json:"swap_commitment,omitempty"` // If set to true, waits to return until the requested swap is detected. AwaitDetection bool `protobuf:"varint,3,opt,name=await_detection,json=awaitDetection,proto3" json:"await_detection,omitempty"` - // Identifies the wallet id to query. - WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *SwapByCommitmentRequest) Reset() { @@ -2139,13 +2072,6 @@ func (x *SwapByCommitmentRequest) GetAwaitDetection() bool { return false } -func (x *SwapByCommitmentRequest) GetWalletId() *v1alpha13.WalletId { - if x != nil { - return x.WalletId - } - return nil -} - type SwapByCommitmentResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2197,9 +2123,6 @@ type UnclaimedSwapsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - // Identifies the wallet id to query. - WalletId *v1alpha13.WalletId `protobuf:"bytes,1,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *UnclaimedSwapsRequest) Reset() { @@ -2234,13 +2157,6 @@ func (*UnclaimedSwapsRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{38} } -func (x *UnclaimedSwapsRequest) GetWalletId() *v1alpha13.WalletId { - if x != nil { - return x.WalletId - } - return nil -} - type UnclaimedSwapsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2295,8 +2211,6 @@ type NullifierStatusRequest struct { Nullifier *v1alpha110.Nullifier `protobuf:"bytes,2,opt,name=nullifier,proto3" json:"nullifier,omitempty"` AwaitDetection bool `protobuf:"varint,3,opt,name=await_detection,json=awaitDetection,proto3" json:"await_detection,omitempty"` - // Identifies the wallet id to query. - WalletId *v1alpha13.WalletId `protobuf:"bytes,14,opt,name=wallet_id,json=walletId,proto3" json:"wallet_id,omitempty"` } func (x *NullifierStatusRequest) Reset() { @@ -2345,13 +2259,6 @@ func (x *NullifierStatusRequest) GetAwaitDetection() bool { return false } -func (x *NullifierStatusRequest) GetWalletId() *v1alpha13.WalletId { - if x != nil { - return x.WalletId - } - return nil -} - type NullifierStatusResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3640,7 +3547,7 @@ var file_penumbra_view_v1alpha1_view_proto_rawDesc = []byte{ 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x8d, 0x14, 0x0a, 0x19, 0x54, 0x72, 0x61, + 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xc9, 0x13, 0x0a, 0x19, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, @@ -3657,277 +3564,260 @@ var file_penumbra_view_v1alpha1_view_proto_rawDesc = []byte{ 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x12, 0x52, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x4c, 0x0a, 0x05, 0x73, 0x77, - 0x61, 0x70, 0x73, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x63, 0x65, 0x12, 0x52, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x14, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x07, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x4c, 0x0a, 0x05, 0x73, 0x77, 0x61, 0x70, 0x73, 0x18, + 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x05, 0x73, + 0x77, 0x61, 0x70, 0x73, 0x12, 0x5c, 0x0a, 0x0b, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x73, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x77, 0x61, - 0x70, 0x52, 0x05, 0x73, 0x77, 0x61, 0x70, 0x73, 0x12, 0x5c, 0x0a, 0x0b, 0x73, 0x77, 0x61, 0x70, - 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x0a, 0x73, 0x77, 0x61, 0x70, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x5c, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x0d, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x32, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, - 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x75, 0x6e, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x11, 0x69, 0x62, 0x63, 0x5f, - 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x3c, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, - 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, - 0x6c, 0x61, 0x79, 0x52, 0x0f, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x11, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x73, 0x18, 0x3d, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x73, 0x12, 0x5c, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x62, 0x0a, 0x0d, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x32, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x11, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, + 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x3c, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x73, 0x12, 0x65, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x18, 0x46, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, - 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x73, 0x12, - 0x68, 0x0a, 0x0f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, - 0x65, 0x73, 0x18, 0x47, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, - 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x12, 0x71, 0x0a, 0x12, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x73, 0x18, - 0x48, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x52, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x73, 0x1a, 0x83, 0x01, 0x0a, - 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x52, + 0x0f, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x62, 0x0a, 0x11, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, + 0x61, 0x77, 0x61, 0x6c, 0x73, 0x18, 0x3d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x61, 0x6c, 0x52, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x61, 0x6c, 0x73, 0x12, 0x65, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x18, 0x46, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x52, 0x0d, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x73, 0x12, 0x68, 0x0a, 0x0f, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x18, 0x47, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x12, 0x71, 0x0a, 0x12, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x73, 0x18, 0x48, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x52, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x73, 0x1a, 0x83, 0x01, 0x0a, 0x06, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3e, + 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x93, + 0x02, 0x0a, 0x04, 0x53, 0x77, 0x61, 0x70, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x1a, 0x93, 0x02, 0x0a, 0x04, 0x53, 0x77, 0x61, 0x70, 0x12, 0x39, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x49, 0x64, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x49, 0x0a, - 0x0d, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x63, 0x0a, 0x09, 0x53, 0x77, 0x61, 0x70, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x56, 0x0a, 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, - 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, - 0x77, 0x61, 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x95, 0x01, - 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x75, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x52, + 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x3b, 0x0a, 0x03, + 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x96, 0x01, 0x0a, 0x0a, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x4d, 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x5a, - 0x0a, 0x0c, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x4a, - 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x62, 0x0a, 0x0d, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x1a, 0x87, - 0x02, 0x0a, 0x10, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x12, 0x51, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x73, 0x12, 0x54, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, - 0x69, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x54, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0b, 0x74, 0x72, 0x61, - 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x22, 0x65, 0x0a, 0x1a, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x22, - 0x67, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x49, 0x0a, 0x0d, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x1a, 0x63, 0x0a, 0x09, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x12, 0x56, 0x0a, 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x95, 0x01, 0x0a, 0x08, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, + 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x1a, 0x96, 0x01, 0x0a, 0x0a, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4d, 0x0a, 0x09, 0x72, + 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x5a, 0x0a, 0x0c, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x62, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0a, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x1a, 0x87, 0x02, 0x0a, 0x10, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, + 0x51, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, + 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, + 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x73, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x12, 0x54, + 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, + 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x64, + 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, + 0x50, 0x61, 0x69, 0x72, 0x22, 0x65, 0x0a, 0x1a, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x47, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x22, 0x67, 0x0a, 0x15, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x22, 0x58, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, + 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, + 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x58, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x11, + 0x0a, 0x0f, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0x56, 0x0a, 0x10, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, + 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x57, 0x0a, 0x15, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x22, 0x11, 0x0a, 0x0f, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x56, 0x0a, 0x10, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, - 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x57, 0x0a, - 0x15, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x68, 0x0a, 0x16, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, - 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x22, 0x92, 0x01, 0x0a, 0x17, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0d, + 0x73, 0x73, 0x22, 0x68, 0x0a, 0x16, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x27, 0x0a, 0x0f, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x22, 0x5a, 0x0a, 0x18, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, - 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x22, 0xb2, 0x01, 0x0a, 0x0f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, - 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x0f, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x52, 0x0d, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x96, 0x01, 0x0a, 0x10, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, - 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x3d, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x22, - 0x53, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x49, 0x64, 0x22, 0x8b, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x75, 0x6c, 0x6c, 0x5f, - 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0e, 0x66, 0x75, 0x6c, 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x79, 0x6e, - 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x70, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, - 0x55, 0x70, 0x22, 0x59, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, - 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0xab, 0x01, - 0x0a, 0x14, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, - 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x74, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x75, 0x6c, - 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, - 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xd5, 0x02, 0x0a, 0x0c, - 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x70, 0x65, 0x6e, - 0x74, 0x12, 0x40, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, - 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x12, 0x4a, 0x0a, 0x0f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x6f, - 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x0d, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, - 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x49, 0x64, 0x22, 0xd7, 0x01, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x92, 0x01, 0x0a, + 0x17, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x22, 0x5a, 0x0a, 0x18, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, + 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xb2, 0x01, + 0x0a, 0x0f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x50, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x0f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x5f, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x49, 0x64, 0x52, 0x0d, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x22, 0x96, 0x01, 0x0a, 0x10, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x07, + 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, + 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x8b, 0x01, 0x0a, + 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x28, 0x0a, 0x10, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x75, 0x6c, 0x6c, 0x53, + 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, + 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x61, 0x74, + 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x63, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0xab, 0x01, 0x0a, 0x14, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x74, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x79, + 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0e, 0x66, 0x75, 0x6c, 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, + 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, + 0x91, 0x02, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x52, 0x07, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, + 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4a, 0x0a, 0x0f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0d, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x6f, 0x53, 0x70, + 0x65, 0x6e, 0x64, 0x22, 0x93, 0x01, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x76, 0x6f, 0x74, 0x61, 0x62, 0x6c, @@ -3936,518 +3826,493 @@ var file_penumbra_view_v1alpha1_view_proto_rawDesc = []byte{ 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, - 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x8e, 0x02, - 0x0a, 0x0e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x58, 0x0a, 0x10, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xca, 0x01, 0x0a, 0x0e, 0x57, 0x69, + 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x10, + 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x22, 0x65, 0x0a, 0x0f, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0c, 0x77, 0x69, 0x74, + 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x0b, 0x77, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x22, 0xde, 0x01, + 0x0a, 0x16, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x64, 0x0a, 0x12, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, - 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x65, - 0x0a, 0x0f, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x52, 0x0a, 0x0c, 0x77, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, - 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x77, 0x69, 0x74, 0x6e, 0x65, 0x73, - 0x73, 0x44, 0x61, 0x74, 0x61, 0x22, 0xde, 0x01, 0x0a, 0x16, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, - 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, - 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, - 0x12, 0x64, 0x0a, 0x12, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x6c, 0x0a, 0x17, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, - 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xab, 0x03, 0x0a, 0x0d, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x65, 0x64, 0x12, 0x69, 0x0a, 0x1e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x52, - 0x1c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, - 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, - 0x19, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x17, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6c, - 0x70, 0x5f, 0x6e, 0x66, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, 0x70, 0x4e, 0x66, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, - 0x6e, 0x66, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4e, 0x66, 0x74, 0x73, 0x12, - 0x41, 0x0a, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x6f, 0x74, 0x69, 0x6e, - 0x67, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, - 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x73, 0x22, 0x64, 0x0a, 0x0e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, - 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x6e, 0x6f, 0x6d, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x16, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x62, 0x0a, 0x15, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, - 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x61, 0x73, 0x50, - 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, - 0x0a, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, - 0x65, 0x73, 0x52, 0x09, 0x67, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x22, 0x16, 0x0a, - 0x14, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6e, 0x0a, 0x15, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, - 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x6d, 0x64, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0xde, 0x01, 0x0a, 0x17, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, - 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x6e, 0x0a, 0x18, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, - 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, - 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0d, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, - 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x22, 0xde, 0x01, 0x0a, 0x17, 0x53, 0x77, 0x61, 0x70, 0x42, - 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, - 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, - 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x52, 0x0a, 0x18, 0x53, 0x77, 0x61, 0x70, 0x42, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x11, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x6c, + 0x0a, 0x17, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xab, 0x03, 0x0a, + 0x0d, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, + 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x12, 0x69, 0x0a, 0x1e, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x5f, 0x64, + 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x52, 0x1c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x73, 0x12, 0x38, 0x0a, 0x18, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x75, 0x6e, 0x62, + 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x16, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x55, 0x6e, 0x62, 0x6f, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6c, 0x70, 0x5f, 0x6e, 0x66, 0x74, 0x73, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, 0x70, 0x4e, + 0x66, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x6e, 0x66, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x4e, 0x66, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x5f, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, + 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x70, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x64, 0x0a, 0x0e, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, + 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x0d, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x22, 0x16, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x62, 0x0a, 0x15, 0x41, 0x70, 0x70, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0x12, 0x0a, 0x10, + 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x63, 0x0a, 0x11, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0a, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, + 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x09, 0x67, 0x61, 0x73, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6e, 0x0a, + 0x15, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x46, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0x9a, 0x01, + 0x0a, 0x17, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x6e, 0x6f, 0x74, + 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, + 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, + 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6e, 0x0a, 0x18, 0x4e, 0x6f, + 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, + 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0d, 0x73, 0x70, 0x65, + 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x17, 0x53, + 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, + 0x73, 0x77, 0x61, 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x27, + 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, + 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x52, 0x0a, 0x18, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x22, 0x5b, 0x0a, 0x15, 0x55, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x22, 0x17, 0x0a, 0x15, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x22, 0x50, 0x0a, 0x16, 0x55, 0x6e, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x22, 0xd4, 0x01, 0x0a, 0x16, 0x4e, - 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, - 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, - 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, - 0x09, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x08, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, - 0x64, 0x22, 0x2f, 0x0a, 0x17, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x70, 0x65, - 0x6e, 0x74, 0x22, 0x5c, 0x0a, 0x1c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, - 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, - 0x22, 0x5a, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xe1, 0x02, 0x0a, - 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x3c, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5c, 0x0a, 0x0b, 0x70, 0x65, 0x72, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x73, - 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x47, 0x0a, 0x04, 0x76, 0x69, 0x65, 0x77, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x76, 0x69, 0x65, 0x77, - 0x22, 0x5b, 0x0a, 0x17, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, - 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x50, 0x0a, 0x16, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, + 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, + 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x61, 0x0a, - 0x1d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, - 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, - 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x22, 0x90, 0x01, 0x0a, 0x16, 0x4e, 0x75, 0x6c, 0x6c, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, + 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2f, 0x0a, 0x17, 0x4e, 0x75, 0x6c, + 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x22, 0x5c, 0x0a, 0x1c, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, + 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x22, 0x5a, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x48, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x22, 0xe1, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x12, 0x3c, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x78, 0x68, + 0x61, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x51, + 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, - 0x22, 0x5d, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x6e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, - 0xb3, 0x01, 0x0a, 0x16, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6e, 0x6f, - 0x74, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, - 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x6e, 0x6f, - 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, - 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x8c, 0x04, 0x0a, 0x13, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, - 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x56, 0x0a, - 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, - 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, - 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x5c, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, + 0x47, 0x0a, 0x04, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, + 0x65, 0x77, 0x52, 0x04, 0x76, 0x69, 0x65, 0x77, 0x22, 0x5b, 0x0a, 0x17, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, + 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x61, 0x0a, 0x1d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x5d, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, + 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, + 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x6e, 0x6f, 0x74, + 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x16, 0x4e, 0x6f, 0x74, 0x65, + 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x6e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x25, - 0x0a, 0x0e, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, - 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, - 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x22, 0xeb, 0x03, 0x0a, 0x0a, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x12, 0x56, 0x0a, 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, - 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, - 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x04, 0x73, - 0x77, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, + 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, 0x8c, 0x04, + 0x0a, 0x13, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x56, 0x0a, 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, + 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, + 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, + 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, + 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, + 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, + 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x21, 0x0a, + 0x0c, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x53, 0x70, 0x65, 0x6e, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xeb, 0x03, 0x0a, + 0x0a, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x56, 0x0a, 0x0f, 0x73, + 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6c, 0x61, + 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, + 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x77, 0x61, 0x70, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xcb, 0x01, 0x0a, 0x17, 0x4f, + 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5a, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, + 0x69, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x54, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0b, 0x74, 0x72, 0x61, + 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x22, 0x6d, 0x0a, 0x18, 0x4f, 0x77, 0x6e, 0x65, + 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x04, - 0x73, 0x77, 0x61, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, - 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, - 0x5a, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, - 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x53, 0x77, 0x61, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x22, 0xcb, 0x01, 0x0a, 0x17, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5a, - 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0c, 0x74, 0x72, - 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, - 0x61, 0x69, 0x72, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, - 0x22, 0x6d, 0x0a, 0x18, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x32, - 0xee, 0x15, 0x0a, 0x13, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x57, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6b, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x12, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x32, 0xee, 0x15, 0x0a, 0x13, 0x56, 0x69, 0x65, 0x77, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x57, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x56, 0x0a, - 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x24, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, + 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x71, 0x0a, + 0x0e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x12, + 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, + 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, + 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, + 0x12, 0x5a, 0x0a, 0x07, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x26, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, + 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0f, + 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, + 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, + 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, + 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x59, 0x0a, 0x06, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x6c, 0x0a, 0x0d, 0x41, + 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x09, 0x47, 0x61, 0x73, + 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, + 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x0d, 0x46, + 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x71, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, - 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2d, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x08, 0x57, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x5a, 0x0a, 0x07, 0x57, 0x69, 0x74, 0x6e, - 0x65, 0x73, 0x73, 0x12, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, - 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x65, + 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0f, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, - 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x06, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x30, 0x01, 0x12, 0x6c, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, - 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x60, 0x0a, 0x09, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x12, 0x28, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x0d, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, - 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x08, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x12, 0x27, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x10, 0x45, 0x70, + 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x75, 0x0a, 0x10, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, + 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, + 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x5f, 0x0a, 0x08, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x27, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x30, 0x01, 0x12, 0x75, 0x0a, 0x10, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x08, 0x42, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x75, 0x0a, 0x10, 0x4e, 0x6f, - 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, + 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x10, 0x53, 0x77, 0x61, + 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x75, 0x0a, 0x10, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, - 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x71, 0x0a, 0x0e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, + 0x70, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x0f, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0e, 0x55, 0x6e, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, + 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, + 0x68, 0x12, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, + 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x30, 0x01, 0x12, 0x7b, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x81, 0x01, 0x0a, 0x14, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, - 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, + 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x10, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x0f, 0x4e, - 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, + 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x78, + 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, + 0x69, 0x6c, 0x64, 0x12, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xf5, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x84, 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x12, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7b, 0x0a, 0x12, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x12, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x14, 0x42, 0x72, - 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, - 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, - 0x10, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, - 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x78, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x30, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, - 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0xf5, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, - 0x09, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x52, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x76, 0x69, 0x65, 0x77, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x3b, 0x76, 0x69, 0x65, 0x77, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0xa2, 0x02, 0x03, 0x50, 0x56, 0x58, 0xaa, 0x02, 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, - 0x02, 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, 0x5c, - 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, - 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x56, 0x69, 0x65, 0x77, 0x3a, 0x3a, - 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x09, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x52, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, + 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x76, 0x69, + 0x65, 0x77, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x76, 0x69, 0x65, 0x77, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x56, 0x58, 0xaa, 0x02, + 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0xe2, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, + 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x3a, 0x3a, 0x56, 0x69, 0x65, 0x77, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4532,10 +4397,10 @@ var file_penumbra_view_v1alpha1_view_proto_goTypes = []interface{}{ (*v1alpha12.Fee)(nil), // 65: penumbra.core.component.fee.v1alpha1.Fee (*v1alpha1.MemoPlaintext)(nil), // 66: penumbra.core.transaction.v1alpha1.MemoPlaintext (*v1alpha13.AddressIndex)(nil), // 67: penumbra.core.keys.v1alpha1.AddressIndex - (*v1alpha13.WalletId)(nil), // 68: penumbra.core.keys.v1alpha1.WalletId - (*v1alpha14.IbcRelay)(nil), // 69: penumbra.core.component.ibc.v1alpha1.IbcRelay - (*v1alpha14.Ics20Withdrawal)(nil), // 70: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - (*v1alpha13.Address)(nil), // 71: penumbra.core.keys.v1alpha1.Address + (*v1alpha14.IbcRelay)(nil), // 68: penumbra.core.component.ibc.v1alpha1.IbcRelay + (*v1alpha14.Ics20Withdrawal)(nil), // 69: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + (*v1alpha13.Address)(nil), // 70: penumbra.core.keys.v1alpha1.Address + (*v1alpha13.WalletId)(nil), // 71: penumbra.core.keys.v1alpha1.WalletId (*v1alpha15.AssetId)(nil), // 72: penumbra.core.asset.v1alpha1.AssetId (*v1alpha15.Value)(nil), // 73: penumbra.core.asset.v1alpha1.Value (*v1alpha16.Amount)(nil), // 74: penumbra.core.num.v1alpha1.Amount @@ -4570,153 +4435,143 @@ var file_penumbra_view_v1alpha1_view_proto_depIdxs = []int32{ 65, // 5: penumbra.view.v1alpha1.TransactionPlannerRequest.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee 66, // 6: penumbra.view.v1alpha1.TransactionPlannerRequest.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext 67, // 7: penumbra.view.v1alpha1.TransactionPlannerRequest.source:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 68, // 8: penumbra.view.v1alpha1.TransactionPlannerRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 53, // 9: penumbra.view.v1alpha1.TransactionPlannerRequest.outputs:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Output - 54, // 10: penumbra.view.v1alpha1.TransactionPlannerRequest.swaps:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Swap - 55, // 11: penumbra.view.v1alpha1.TransactionPlannerRequest.swap_claims:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim - 56, // 12: penumbra.view.v1alpha1.TransactionPlannerRequest.delegations:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate - 57, // 13: penumbra.view.v1alpha1.TransactionPlannerRequest.undelegations:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate - 69, // 14: penumbra.view.v1alpha1.TransactionPlannerRequest.ibc_relay_actions:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 70, // 15: penumbra.view.v1alpha1.TransactionPlannerRequest.ics20_withdrawals:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 58, // 16: penumbra.view.v1alpha1.TransactionPlannerRequest.position_opens:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen - 59, // 17: penumbra.view.v1alpha1.TransactionPlannerRequest.position_closes:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose - 60, // 18: penumbra.view.v1alpha1.TransactionPlannerRequest.position_withdraws:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw - 61, // 19: penumbra.view.v1alpha1.TransactionPlannerResponse.plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan - 67, // 20: penumbra.view.v1alpha1.AddressByIndexRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 71, // 21: penumbra.view.v1alpha1.AddressByIndexResponse.address:type_name -> penumbra.core.keys.v1alpha1.Address - 68, // 22: penumbra.view.v1alpha1.WalletIdResponse.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 71, // 23: penumbra.view.v1alpha1.IndexByAddressRequest.address:type_name -> penumbra.core.keys.v1alpha1.Address - 67, // 24: penumbra.view.v1alpha1.IndexByAddressResponse.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 67, // 25: penumbra.view.v1alpha1.EphemeralAddressRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 71, // 26: penumbra.view.v1alpha1.EphemeralAddressResponse.address:type_name -> penumbra.core.keys.v1alpha1.Address - 67, // 27: penumbra.view.v1alpha1.BalancesRequest.account_filter:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 72, // 28: penumbra.view.v1alpha1.BalancesRequest.asset_id_filter:type_name -> penumbra.core.asset.v1alpha1.AssetId - 67, // 29: penumbra.view.v1alpha1.BalancesResponse.account:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 73, // 30: penumbra.view.v1alpha1.BalancesResponse.balance:type_name -> penumbra.core.asset.v1alpha1.Value - 68, // 31: penumbra.view.v1alpha1.StatusRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 68, // 32: penumbra.view.v1alpha1.StatusStreamRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 72, // 33: penumbra.view.v1alpha1.NotesRequest.asset_id:type_name -> penumbra.core.asset.v1alpha1.AssetId - 67, // 34: penumbra.view.v1alpha1.NotesRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 74, // 35: penumbra.view.v1alpha1.NotesRequest.amount_to_spend:type_name -> penumbra.core.num.v1alpha1.Amount - 68, // 36: penumbra.view.v1alpha1.NotesRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 67, // 37: penumbra.view.v1alpha1.NotesForVotingRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 68, // 38: penumbra.view.v1alpha1.NotesForVotingRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 75, // 39: penumbra.view.v1alpha1.WitnessRequest.note_commitments:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 61, // 40: penumbra.view.v1alpha1.WitnessRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan - 68, // 41: penumbra.view.v1alpha1.WitnessRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 76, // 42: penumbra.view.v1alpha1.WitnessResponse.witness_data:type_name -> penumbra.core.transaction.v1alpha1.WitnessData - 61, // 43: penumbra.view.v1alpha1.WitnessAndBuildRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan - 62, // 44: penumbra.view.v1alpha1.WitnessAndBuildRequest.authorization_data:type_name -> penumbra.core.transaction.v1alpha1.AuthorizationData - 63, // 45: penumbra.view.v1alpha1.WitnessAndBuildResponse.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction - 77, // 46: penumbra.view.v1alpha1.AssetsRequest.include_specific_denominations:type_name -> penumbra.core.asset.v1alpha1.Denom - 78, // 47: penumbra.view.v1alpha1.AssetsResponse.denom_metadata:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata - 79, // 48: penumbra.view.v1alpha1.AppParametersResponse.parameters:type_name -> penumbra.core.app.v1alpha1.AppParameters - 80, // 49: penumbra.view.v1alpha1.GasPricesResponse.gas_prices:type_name -> penumbra.core.component.fee.v1alpha1.GasPrices - 81, // 50: penumbra.view.v1alpha1.FMDParametersResponse.parameters:type_name -> penumbra.core.component.chain.v1alpha1.FmdParameters - 75, // 51: penumbra.view.v1alpha1.NoteByCommitmentRequest.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 68, // 52: penumbra.view.v1alpha1.NoteByCommitmentRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 49, // 53: penumbra.view.v1alpha1.NoteByCommitmentResponse.spendable_note:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord - 75, // 54: penumbra.view.v1alpha1.SwapByCommitmentRequest.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 68, // 55: penumbra.view.v1alpha1.SwapByCommitmentRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 50, // 56: penumbra.view.v1alpha1.SwapByCommitmentResponse.swap:type_name -> penumbra.view.v1alpha1.SwapRecord - 68, // 57: penumbra.view.v1alpha1.UnclaimedSwapsRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 50, // 58: penumbra.view.v1alpha1.UnclaimedSwapsResponse.swap:type_name -> penumbra.view.v1alpha1.SwapRecord - 82, // 59: penumbra.view.v1alpha1.NullifierStatusRequest.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 68, // 60: penumbra.view.v1alpha1.NullifierStatusRequest.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 64, // 61: penumbra.view.v1alpha1.TransactionInfoByHashRequest.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId - 64, // 62: penumbra.view.v1alpha1.TransactionInfo.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId - 63, // 63: penumbra.view.v1alpha1.TransactionInfo.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction - 83, // 64: penumbra.view.v1alpha1.TransactionInfo.perspective:type_name -> penumbra.core.transaction.v1alpha1.TransactionPerspective - 84, // 65: penumbra.view.v1alpha1.TransactionInfo.view:type_name -> penumbra.core.transaction.v1alpha1.TransactionView - 44, // 66: penumbra.view.v1alpha1.TransactionInfoResponse.tx_info:type_name -> penumbra.view.v1alpha1.TransactionInfo - 44, // 67: penumbra.view.v1alpha1.TransactionInfoByHashResponse.tx_info:type_name -> penumbra.view.v1alpha1.TransactionInfo - 49, // 68: penumbra.view.v1alpha1.NotesResponse.note_record:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord - 49, // 69: penumbra.view.v1alpha1.NotesForVotingResponse.note_record:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord - 85, // 70: penumbra.view.v1alpha1.NotesForVotingResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 75, // 71: penumbra.view.v1alpha1.SpendableNoteRecord.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 86, // 72: penumbra.view.v1alpha1.SpendableNoteRecord.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 67, // 73: penumbra.view.v1alpha1.SpendableNoteRecord.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 82, // 74: penumbra.view.v1alpha1.SpendableNoteRecord.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 87, // 75: penumbra.view.v1alpha1.SpendableNoteRecord.source:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource - 75, // 76: penumbra.view.v1alpha1.SwapRecord.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 88, // 77: penumbra.view.v1alpha1.SwapRecord.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapPlaintext - 82, // 78: penumbra.view.v1alpha1.SwapRecord.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 89, // 79: penumbra.view.v1alpha1.SwapRecord.output_data:type_name -> penumbra.core.component.dex.v1alpha1.BatchSwapOutputData - 87, // 80: penumbra.view.v1alpha1.SwapRecord.source:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource - 90, // 81: penumbra.view.v1alpha1.OwnedPositionIdsRequest.position_state:type_name -> penumbra.core.component.dex.v1alpha1.PositionState - 91, // 82: penumbra.view.v1alpha1.OwnedPositionIdsRequest.trading_pair:type_name -> penumbra.core.component.dex.v1alpha1.TradingPair - 92, // 83: penumbra.view.v1alpha1.OwnedPositionIdsResponse.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId - 73, // 84: penumbra.view.v1alpha1.TransactionPlannerRequest.Output.value:type_name -> penumbra.core.asset.v1alpha1.Value - 71, // 85: penumbra.view.v1alpha1.TransactionPlannerRequest.Output.address:type_name -> penumbra.core.keys.v1alpha1.Address - 73, // 86: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.value:type_name -> penumbra.core.asset.v1alpha1.Value - 72, // 87: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.target_asset:type_name -> penumbra.core.asset.v1alpha1.AssetId - 65, // 88: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee - 71, // 89: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.claim_address:type_name -> penumbra.core.keys.v1alpha1.Address - 75, // 90: penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 74, // 91: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate.amount:type_name -> penumbra.core.num.v1alpha1.Amount - 93, // 92: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData - 73, // 93: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate.value:type_name -> penumbra.core.asset.v1alpha1.Value - 93, // 94: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData - 94, // 95: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen.position:type_name -> penumbra.core.component.dex.v1alpha1.Position - 92, // 96: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId - 92, // 97: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId - 95, // 98: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.reserves:type_name -> penumbra.core.component.dex.v1alpha1.Reserves - 91, // 99: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.trading_pair:type_name -> penumbra.core.component.dex.v1alpha1.TradingPair - 16, // 100: penumbra.view.v1alpha1.ViewProtocolService.Status:input_type -> penumbra.view.v1alpha1.StatusRequest - 18, // 101: penumbra.view.v1alpha1.ViewProtocolService.StatusStream:input_type -> penumbra.view.v1alpha1.StatusStreamRequest - 20, // 102: penumbra.view.v1alpha1.ViewProtocolService.Notes:input_type -> penumbra.view.v1alpha1.NotesRequest - 21, // 103: penumbra.view.v1alpha1.ViewProtocolService.NotesForVoting:input_type -> penumbra.view.v1alpha1.NotesForVotingRequest - 22, // 104: penumbra.view.v1alpha1.ViewProtocolService.Witness:input_type -> penumbra.view.v1alpha1.WitnessRequest - 24, // 105: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:input_type -> penumbra.view.v1alpha1.WitnessAndBuildRequest - 26, // 106: penumbra.view.v1alpha1.ViewProtocolService.Assets:input_type -> penumbra.view.v1alpha1.AssetsRequest - 28, // 107: penumbra.view.v1alpha1.ViewProtocolService.AppParameters:input_type -> penumbra.view.v1alpha1.AppParametersRequest - 30, // 108: penumbra.view.v1alpha1.ViewProtocolService.GasPrices:input_type -> penumbra.view.v1alpha1.GasPricesRequest - 32, // 109: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:input_type -> penumbra.view.v1alpha1.FMDParametersRequest - 6, // 110: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:input_type -> penumbra.view.v1alpha1.AddressByIndexRequest - 8, // 111: penumbra.view.v1alpha1.ViewProtocolService.WalletId:input_type -> penumbra.view.v1alpha1.WalletIdRequest - 10, // 112: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:input_type -> penumbra.view.v1alpha1.IndexByAddressRequest - 12, // 113: penumbra.view.v1alpha1.ViewProtocolService.EphemeralAddress:input_type -> penumbra.view.v1alpha1.EphemeralAddressRequest - 14, // 114: penumbra.view.v1alpha1.ViewProtocolService.Balances:input_type -> penumbra.view.v1alpha1.BalancesRequest - 34, // 115: penumbra.view.v1alpha1.ViewProtocolService.NoteByCommitment:input_type -> penumbra.view.v1alpha1.NoteByCommitmentRequest - 36, // 116: penumbra.view.v1alpha1.ViewProtocolService.SwapByCommitment:input_type -> penumbra.view.v1alpha1.SwapByCommitmentRequest - 38, // 117: penumbra.view.v1alpha1.ViewProtocolService.UnclaimedSwaps:input_type -> penumbra.view.v1alpha1.UnclaimedSwapsRequest - 40, // 118: penumbra.view.v1alpha1.ViewProtocolService.NullifierStatus:input_type -> penumbra.view.v1alpha1.NullifierStatusRequest - 42, // 119: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfoByHash:input_type -> penumbra.view.v1alpha1.TransactionInfoByHashRequest - 43, // 120: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfo:input_type -> penumbra.view.v1alpha1.TransactionInfoRequest - 4, // 121: penumbra.view.v1alpha1.ViewProtocolService.TransactionPlanner:input_type -> penumbra.view.v1alpha1.TransactionPlannerRequest - 2, // 122: penumbra.view.v1alpha1.ViewProtocolService.BroadcastTransaction:input_type -> penumbra.view.v1alpha1.BroadcastTransactionRequest - 51, // 123: penumbra.view.v1alpha1.ViewProtocolService.OwnedPositionIds:input_type -> penumbra.view.v1alpha1.OwnedPositionIdsRequest - 0, // 124: penumbra.view.v1alpha1.ViewProtocolService.AuthorizeAndBuild:input_type -> penumbra.view.v1alpha1.AuthorizeAndBuildRequest - 17, // 125: penumbra.view.v1alpha1.ViewProtocolService.Status:output_type -> penumbra.view.v1alpha1.StatusResponse - 19, // 126: penumbra.view.v1alpha1.ViewProtocolService.StatusStream:output_type -> penumbra.view.v1alpha1.StatusStreamResponse - 47, // 127: penumbra.view.v1alpha1.ViewProtocolService.Notes:output_type -> penumbra.view.v1alpha1.NotesResponse - 48, // 128: penumbra.view.v1alpha1.ViewProtocolService.NotesForVoting:output_type -> penumbra.view.v1alpha1.NotesForVotingResponse - 23, // 129: penumbra.view.v1alpha1.ViewProtocolService.Witness:output_type -> penumbra.view.v1alpha1.WitnessResponse - 25, // 130: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:output_type -> penumbra.view.v1alpha1.WitnessAndBuildResponse - 27, // 131: penumbra.view.v1alpha1.ViewProtocolService.Assets:output_type -> penumbra.view.v1alpha1.AssetsResponse - 29, // 132: penumbra.view.v1alpha1.ViewProtocolService.AppParameters:output_type -> penumbra.view.v1alpha1.AppParametersResponse - 31, // 133: penumbra.view.v1alpha1.ViewProtocolService.GasPrices:output_type -> penumbra.view.v1alpha1.GasPricesResponse - 33, // 134: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:output_type -> penumbra.view.v1alpha1.FMDParametersResponse - 7, // 135: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:output_type -> penumbra.view.v1alpha1.AddressByIndexResponse - 9, // 136: penumbra.view.v1alpha1.ViewProtocolService.WalletId:output_type -> penumbra.view.v1alpha1.WalletIdResponse - 11, // 137: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:output_type -> penumbra.view.v1alpha1.IndexByAddressResponse - 13, // 138: penumbra.view.v1alpha1.ViewProtocolService.EphemeralAddress:output_type -> penumbra.view.v1alpha1.EphemeralAddressResponse - 15, // 139: penumbra.view.v1alpha1.ViewProtocolService.Balances:output_type -> penumbra.view.v1alpha1.BalancesResponse - 35, // 140: penumbra.view.v1alpha1.ViewProtocolService.NoteByCommitment:output_type -> penumbra.view.v1alpha1.NoteByCommitmentResponse - 37, // 141: penumbra.view.v1alpha1.ViewProtocolService.SwapByCommitment:output_type -> penumbra.view.v1alpha1.SwapByCommitmentResponse - 39, // 142: penumbra.view.v1alpha1.ViewProtocolService.UnclaimedSwaps:output_type -> penumbra.view.v1alpha1.UnclaimedSwapsResponse - 41, // 143: penumbra.view.v1alpha1.ViewProtocolService.NullifierStatus:output_type -> penumbra.view.v1alpha1.NullifierStatusResponse - 46, // 144: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfoByHash:output_type -> penumbra.view.v1alpha1.TransactionInfoByHashResponse - 45, // 145: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfo:output_type -> penumbra.view.v1alpha1.TransactionInfoResponse - 5, // 146: penumbra.view.v1alpha1.ViewProtocolService.TransactionPlanner:output_type -> penumbra.view.v1alpha1.TransactionPlannerResponse - 3, // 147: penumbra.view.v1alpha1.ViewProtocolService.BroadcastTransaction:output_type -> penumbra.view.v1alpha1.BroadcastTransactionResponse - 52, // 148: penumbra.view.v1alpha1.ViewProtocolService.OwnedPositionIds:output_type -> penumbra.view.v1alpha1.OwnedPositionIdsResponse - 1, // 149: penumbra.view.v1alpha1.ViewProtocolService.AuthorizeAndBuild:output_type -> penumbra.view.v1alpha1.AuthorizeAndBuildResponse - 125, // [125:150] is the sub-list for method output_type - 100, // [100:125] is the sub-list for method input_type - 100, // [100:100] is the sub-list for extension type_name - 100, // [100:100] is the sub-list for extension extendee - 0, // [0:100] is the sub-list for field type_name + 53, // 8: penumbra.view.v1alpha1.TransactionPlannerRequest.outputs:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Output + 54, // 9: penumbra.view.v1alpha1.TransactionPlannerRequest.swaps:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Swap + 55, // 10: penumbra.view.v1alpha1.TransactionPlannerRequest.swap_claims:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim + 56, // 11: penumbra.view.v1alpha1.TransactionPlannerRequest.delegations:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate + 57, // 12: penumbra.view.v1alpha1.TransactionPlannerRequest.undelegations:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate + 68, // 13: penumbra.view.v1alpha1.TransactionPlannerRequest.ibc_relay_actions:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 69, // 14: penumbra.view.v1alpha1.TransactionPlannerRequest.ics20_withdrawals:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 58, // 15: penumbra.view.v1alpha1.TransactionPlannerRequest.position_opens:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen + 59, // 16: penumbra.view.v1alpha1.TransactionPlannerRequest.position_closes:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose + 60, // 17: penumbra.view.v1alpha1.TransactionPlannerRequest.position_withdraws:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw + 61, // 18: penumbra.view.v1alpha1.TransactionPlannerResponse.plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan + 67, // 19: penumbra.view.v1alpha1.AddressByIndexRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 70, // 20: penumbra.view.v1alpha1.AddressByIndexResponse.address:type_name -> penumbra.core.keys.v1alpha1.Address + 71, // 21: penumbra.view.v1alpha1.WalletIdResponse.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId + 70, // 22: penumbra.view.v1alpha1.IndexByAddressRequest.address:type_name -> penumbra.core.keys.v1alpha1.Address + 67, // 23: penumbra.view.v1alpha1.IndexByAddressResponse.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 67, // 24: penumbra.view.v1alpha1.EphemeralAddressRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 70, // 25: penumbra.view.v1alpha1.EphemeralAddressResponse.address:type_name -> penumbra.core.keys.v1alpha1.Address + 67, // 26: penumbra.view.v1alpha1.BalancesRequest.account_filter:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 72, // 27: penumbra.view.v1alpha1.BalancesRequest.asset_id_filter:type_name -> penumbra.core.asset.v1alpha1.AssetId + 67, // 28: penumbra.view.v1alpha1.BalancesResponse.account:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 73, // 29: penumbra.view.v1alpha1.BalancesResponse.balance:type_name -> penumbra.core.asset.v1alpha1.Value + 72, // 30: penumbra.view.v1alpha1.NotesRequest.asset_id:type_name -> penumbra.core.asset.v1alpha1.AssetId + 67, // 31: penumbra.view.v1alpha1.NotesRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 74, // 32: penumbra.view.v1alpha1.NotesRequest.amount_to_spend:type_name -> penumbra.core.num.v1alpha1.Amount + 67, // 33: penumbra.view.v1alpha1.NotesForVotingRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 75, // 34: penumbra.view.v1alpha1.WitnessRequest.note_commitments:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 61, // 35: penumbra.view.v1alpha1.WitnessRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan + 76, // 36: penumbra.view.v1alpha1.WitnessResponse.witness_data:type_name -> penumbra.core.transaction.v1alpha1.WitnessData + 61, // 37: penumbra.view.v1alpha1.WitnessAndBuildRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan + 62, // 38: penumbra.view.v1alpha1.WitnessAndBuildRequest.authorization_data:type_name -> penumbra.core.transaction.v1alpha1.AuthorizationData + 63, // 39: penumbra.view.v1alpha1.WitnessAndBuildResponse.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction + 77, // 40: penumbra.view.v1alpha1.AssetsRequest.include_specific_denominations:type_name -> penumbra.core.asset.v1alpha1.Denom + 78, // 41: penumbra.view.v1alpha1.AssetsResponse.denom_metadata:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata + 79, // 42: penumbra.view.v1alpha1.AppParametersResponse.parameters:type_name -> penumbra.core.app.v1alpha1.AppParameters + 80, // 43: penumbra.view.v1alpha1.GasPricesResponse.gas_prices:type_name -> penumbra.core.component.fee.v1alpha1.GasPrices + 81, // 44: penumbra.view.v1alpha1.FMDParametersResponse.parameters:type_name -> penumbra.core.component.chain.v1alpha1.FmdParameters + 75, // 45: penumbra.view.v1alpha1.NoteByCommitmentRequest.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 49, // 46: penumbra.view.v1alpha1.NoteByCommitmentResponse.spendable_note:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord + 75, // 47: penumbra.view.v1alpha1.SwapByCommitmentRequest.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 50, // 48: penumbra.view.v1alpha1.SwapByCommitmentResponse.swap:type_name -> penumbra.view.v1alpha1.SwapRecord + 50, // 49: penumbra.view.v1alpha1.UnclaimedSwapsResponse.swap:type_name -> penumbra.view.v1alpha1.SwapRecord + 82, // 50: penumbra.view.v1alpha1.NullifierStatusRequest.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 64, // 51: penumbra.view.v1alpha1.TransactionInfoByHashRequest.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId + 64, // 52: penumbra.view.v1alpha1.TransactionInfo.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId + 63, // 53: penumbra.view.v1alpha1.TransactionInfo.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction + 83, // 54: penumbra.view.v1alpha1.TransactionInfo.perspective:type_name -> penumbra.core.transaction.v1alpha1.TransactionPerspective + 84, // 55: penumbra.view.v1alpha1.TransactionInfo.view:type_name -> penumbra.core.transaction.v1alpha1.TransactionView + 44, // 56: penumbra.view.v1alpha1.TransactionInfoResponse.tx_info:type_name -> penumbra.view.v1alpha1.TransactionInfo + 44, // 57: penumbra.view.v1alpha1.TransactionInfoByHashResponse.tx_info:type_name -> penumbra.view.v1alpha1.TransactionInfo + 49, // 58: penumbra.view.v1alpha1.NotesResponse.note_record:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord + 49, // 59: penumbra.view.v1alpha1.NotesForVotingResponse.note_record:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord + 85, // 60: penumbra.view.v1alpha1.NotesForVotingResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 75, // 61: penumbra.view.v1alpha1.SpendableNoteRecord.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 86, // 62: penumbra.view.v1alpha1.SpendableNoteRecord.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 67, // 63: penumbra.view.v1alpha1.SpendableNoteRecord.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 82, // 64: penumbra.view.v1alpha1.SpendableNoteRecord.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 87, // 65: penumbra.view.v1alpha1.SpendableNoteRecord.source:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource + 75, // 66: penumbra.view.v1alpha1.SwapRecord.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 88, // 67: penumbra.view.v1alpha1.SwapRecord.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapPlaintext + 82, // 68: penumbra.view.v1alpha1.SwapRecord.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 89, // 69: penumbra.view.v1alpha1.SwapRecord.output_data:type_name -> penumbra.core.component.dex.v1alpha1.BatchSwapOutputData + 87, // 70: penumbra.view.v1alpha1.SwapRecord.source:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource + 90, // 71: penumbra.view.v1alpha1.OwnedPositionIdsRequest.position_state:type_name -> penumbra.core.component.dex.v1alpha1.PositionState + 91, // 72: penumbra.view.v1alpha1.OwnedPositionIdsRequest.trading_pair:type_name -> penumbra.core.component.dex.v1alpha1.TradingPair + 92, // 73: penumbra.view.v1alpha1.OwnedPositionIdsResponse.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId + 73, // 74: penumbra.view.v1alpha1.TransactionPlannerRequest.Output.value:type_name -> penumbra.core.asset.v1alpha1.Value + 70, // 75: penumbra.view.v1alpha1.TransactionPlannerRequest.Output.address:type_name -> penumbra.core.keys.v1alpha1.Address + 73, // 76: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.value:type_name -> penumbra.core.asset.v1alpha1.Value + 72, // 77: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.target_asset:type_name -> penumbra.core.asset.v1alpha1.AssetId + 65, // 78: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee + 70, // 79: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.claim_address:type_name -> penumbra.core.keys.v1alpha1.Address + 75, // 80: penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 74, // 81: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate.amount:type_name -> penumbra.core.num.v1alpha1.Amount + 93, // 82: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData + 73, // 83: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate.value:type_name -> penumbra.core.asset.v1alpha1.Value + 93, // 84: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData + 94, // 85: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen.position:type_name -> penumbra.core.component.dex.v1alpha1.Position + 92, // 86: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId + 92, // 87: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId + 95, // 88: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.reserves:type_name -> penumbra.core.component.dex.v1alpha1.Reserves + 91, // 89: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.trading_pair:type_name -> penumbra.core.component.dex.v1alpha1.TradingPair + 16, // 90: penumbra.view.v1alpha1.ViewProtocolService.Status:input_type -> penumbra.view.v1alpha1.StatusRequest + 18, // 91: penumbra.view.v1alpha1.ViewProtocolService.StatusStream:input_type -> penumbra.view.v1alpha1.StatusStreamRequest + 20, // 92: penumbra.view.v1alpha1.ViewProtocolService.Notes:input_type -> penumbra.view.v1alpha1.NotesRequest + 21, // 93: penumbra.view.v1alpha1.ViewProtocolService.NotesForVoting:input_type -> penumbra.view.v1alpha1.NotesForVotingRequest + 22, // 94: penumbra.view.v1alpha1.ViewProtocolService.Witness:input_type -> penumbra.view.v1alpha1.WitnessRequest + 24, // 95: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:input_type -> penumbra.view.v1alpha1.WitnessAndBuildRequest + 26, // 96: penumbra.view.v1alpha1.ViewProtocolService.Assets:input_type -> penumbra.view.v1alpha1.AssetsRequest + 28, // 97: penumbra.view.v1alpha1.ViewProtocolService.AppParameters:input_type -> penumbra.view.v1alpha1.AppParametersRequest + 30, // 98: penumbra.view.v1alpha1.ViewProtocolService.GasPrices:input_type -> penumbra.view.v1alpha1.GasPricesRequest + 32, // 99: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:input_type -> penumbra.view.v1alpha1.FMDParametersRequest + 6, // 100: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:input_type -> penumbra.view.v1alpha1.AddressByIndexRequest + 8, // 101: penumbra.view.v1alpha1.ViewProtocolService.WalletId:input_type -> penumbra.view.v1alpha1.WalletIdRequest + 10, // 102: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:input_type -> penumbra.view.v1alpha1.IndexByAddressRequest + 12, // 103: penumbra.view.v1alpha1.ViewProtocolService.EphemeralAddress:input_type -> penumbra.view.v1alpha1.EphemeralAddressRequest + 14, // 104: penumbra.view.v1alpha1.ViewProtocolService.Balances:input_type -> penumbra.view.v1alpha1.BalancesRequest + 34, // 105: penumbra.view.v1alpha1.ViewProtocolService.NoteByCommitment:input_type -> penumbra.view.v1alpha1.NoteByCommitmentRequest + 36, // 106: penumbra.view.v1alpha1.ViewProtocolService.SwapByCommitment:input_type -> penumbra.view.v1alpha1.SwapByCommitmentRequest + 38, // 107: penumbra.view.v1alpha1.ViewProtocolService.UnclaimedSwaps:input_type -> penumbra.view.v1alpha1.UnclaimedSwapsRequest + 40, // 108: penumbra.view.v1alpha1.ViewProtocolService.NullifierStatus:input_type -> penumbra.view.v1alpha1.NullifierStatusRequest + 42, // 109: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfoByHash:input_type -> penumbra.view.v1alpha1.TransactionInfoByHashRequest + 43, // 110: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfo:input_type -> penumbra.view.v1alpha1.TransactionInfoRequest + 4, // 111: penumbra.view.v1alpha1.ViewProtocolService.TransactionPlanner:input_type -> penumbra.view.v1alpha1.TransactionPlannerRequest + 2, // 112: penumbra.view.v1alpha1.ViewProtocolService.BroadcastTransaction:input_type -> penumbra.view.v1alpha1.BroadcastTransactionRequest + 51, // 113: penumbra.view.v1alpha1.ViewProtocolService.OwnedPositionIds:input_type -> penumbra.view.v1alpha1.OwnedPositionIdsRequest + 0, // 114: penumbra.view.v1alpha1.ViewProtocolService.AuthorizeAndBuild:input_type -> penumbra.view.v1alpha1.AuthorizeAndBuildRequest + 17, // 115: penumbra.view.v1alpha1.ViewProtocolService.Status:output_type -> penumbra.view.v1alpha1.StatusResponse + 19, // 116: penumbra.view.v1alpha1.ViewProtocolService.StatusStream:output_type -> penumbra.view.v1alpha1.StatusStreamResponse + 47, // 117: penumbra.view.v1alpha1.ViewProtocolService.Notes:output_type -> penumbra.view.v1alpha1.NotesResponse + 48, // 118: penumbra.view.v1alpha1.ViewProtocolService.NotesForVoting:output_type -> penumbra.view.v1alpha1.NotesForVotingResponse + 23, // 119: penumbra.view.v1alpha1.ViewProtocolService.Witness:output_type -> penumbra.view.v1alpha1.WitnessResponse + 25, // 120: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:output_type -> penumbra.view.v1alpha1.WitnessAndBuildResponse + 27, // 121: penumbra.view.v1alpha1.ViewProtocolService.Assets:output_type -> penumbra.view.v1alpha1.AssetsResponse + 29, // 122: penumbra.view.v1alpha1.ViewProtocolService.AppParameters:output_type -> penumbra.view.v1alpha1.AppParametersResponse + 31, // 123: penumbra.view.v1alpha1.ViewProtocolService.GasPrices:output_type -> penumbra.view.v1alpha1.GasPricesResponse + 33, // 124: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:output_type -> penumbra.view.v1alpha1.FMDParametersResponse + 7, // 125: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:output_type -> penumbra.view.v1alpha1.AddressByIndexResponse + 9, // 126: penumbra.view.v1alpha1.ViewProtocolService.WalletId:output_type -> penumbra.view.v1alpha1.WalletIdResponse + 11, // 127: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:output_type -> penumbra.view.v1alpha1.IndexByAddressResponse + 13, // 128: penumbra.view.v1alpha1.ViewProtocolService.EphemeralAddress:output_type -> penumbra.view.v1alpha1.EphemeralAddressResponse + 15, // 129: penumbra.view.v1alpha1.ViewProtocolService.Balances:output_type -> penumbra.view.v1alpha1.BalancesResponse + 35, // 130: penumbra.view.v1alpha1.ViewProtocolService.NoteByCommitment:output_type -> penumbra.view.v1alpha1.NoteByCommitmentResponse + 37, // 131: penumbra.view.v1alpha1.ViewProtocolService.SwapByCommitment:output_type -> penumbra.view.v1alpha1.SwapByCommitmentResponse + 39, // 132: penumbra.view.v1alpha1.ViewProtocolService.UnclaimedSwaps:output_type -> penumbra.view.v1alpha1.UnclaimedSwapsResponse + 41, // 133: penumbra.view.v1alpha1.ViewProtocolService.NullifierStatus:output_type -> penumbra.view.v1alpha1.NullifierStatusResponse + 46, // 134: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfoByHash:output_type -> penumbra.view.v1alpha1.TransactionInfoByHashResponse + 45, // 135: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfo:output_type -> penumbra.view.v1alpha1.TransactionInfoResponse + 5, // 136: penumbra.view.v1alpha1.ViewProtocolService.TransactionPlanner:output_type -> penumbra.view.v1alpha1.TransactionPlannerResponse + 3, // 137: penumbra.view.v1alpha1.ViewProtocolService.BroadcastTransaction:output_type -> penumbra.view.v1alpha1.BroadcastTransactionResponse + 52, // 138: penumbra.view.v1alpha1.ViewProtocolService.OwnedPositionIds:output_type -> penumbra.view.v1alpha1.OwnedPositionIdsResponse + 1, // 139: penumbra.view.v1alpha1.ViewProtocolService.AuthorizeAndBuild:output_type -> penumbra.view.v1alpha1.AuthorizeAndBuildResponse + 115, // [115:140] is the sub-list for method output_type + 90, // [90:115] is the sub-list for method input_type + 90, // [90:90] is the sub-list for extension type_name + 90, // [90:90] is the sub-list for extension extendee + 0, // [0:90] is the sub-list for field type_name } func init() { file_penumbra_view_v1alpha1_view_proto_init() } diff --git a/proto/penumbra/penumbra/view/v1alpha1/view.proto b/proto/penumbra/penumbra/view/v1alpha1/view.proto index c08beeecce..1b510b7bdf 100644 --- a/proto/penumbra/penumbra/view/v1alpha1/view.proto +++ b/proto/penumbra/penumbra/view/v1alpha1/view.proto @@ -21,9 +21,6 @@ import "penumbra/crypto/tct/v1alpha1/tct.proto"; // transaction-related actions, to request data from a view service, which is // responsible for synchronizing and scanning the public chain state with one or // more full viewing keys. -// -// View protocol requests optionally include the wallet id, used to -// identify which set of data to query. service ViewProtocolService { // Get current status of chain sync rpc Status(StatusRequest) returns (StatusResponse); @@ -148,9 +145,6 @@ message TransactionPlannerRequest { // If present, only spends funds from the given account. core.keys.v1alpha1.AddressIndex source = 4; - // Optionally identifies the wallet id to query. - core.keys.v1alpha1.WalletId wallet_id = 14; - // Request contents repeated Output outputs = 20; repeated Swap swaps = 30; @@ -264,10 +258,7 @@ message BalancesResponse { } // Requests sync status of the view service. -message StatusRequest { - // Identifies the wallet id to query. - core.keys.v1alpha1.WalletId wallet_id = 14; -} +message StatusRequest {} // Returns the status of the view service and whether it is synchronized with the chain state. message StatusResponse { @@ -280,10 +271,7 @@ message StatusResponse { } // Requests streaming updates on the sync height until the view service is synchronized. -message StatusStreamRequest { - // Identifies the wallet id to query. - core.keys.v1alpha1.WalletId wallet_id = 14; -} +message StatusStreamRequest {} // A streaming sync status update message StatusStreamResponse { @@ -313,9 +301,6 @@ message NotesRequest { // // Ignored if `asset_id` is unset or if `include_spent` is set. core.num.v1alpha1.Amount amount_to_spend = 6; - - // Identifies the wallet id to query. - core.keys.v1alpha1.WalletId wallet_id = 14; } // A query for notes to be used for voting on a proposal. @@ -325,9 +310,6 @@ message NotesForVotingRequest { // If set, only return notes with the specified asset id. core.keys.v1alpha1.AddressIndex address_index = 3; - - // Identifies the wallet id to query. - core.keys.v1alpha1.WalletId wallet_id = 14; } message WitnessRequest { @@ -336,9 +318,6 @@ message WitnessRequest { // The transaction plan to witness core.transaction.v1alpha1.TransactionPlan transaction_plan = 3; - - // Identifies the wallet id to query. - core.keys.v1alpha1.WalletId wallet_id = 14; } message WitnessResponse { @@ -403,8 +382,6 @@ message NoteByCommitmentRequest { crypto.tct.v1alpha1.StateCommitment note_commitment = 2; // If set to true, waits to return until the requested note is detected. bool await_detection = 3; - // Identifies the wallet id to query. - core.keys.v1alpha1.WalletId wallet_id = 14; } message NoteByCommitmentResponse { @@ -415,18 +392,13 @@ message SwapByCommitmentRequest { crypto.tct.v1alpha1.StateCommitment swap_commitment = 2; // If set to true, waits to return until the requested swap is detected. bool await_detection = 3; - // Identifies the wallet id to query. - core.keys.v1alpha1.WalletId wallet_id = 14; } message SwapByCommitmentResponse { SwapRecord swap = 1; } -message UnclaimedSwapsRequest { - // Identifies the wallet id to query. - core.keys.v1alpha1.WalletId wallet_id = 1; -} +message UnclaimedSwapsRequest {} message UnclaimedSwapsResponse { SwapRecord swap = 1; @@ -435,8 +407,6 @@ message UnclaimedSwapsResponse { message NullifierStatusRequest { core.component.sct.v1alpha1.Nullifier nullifier = 2; bool await_detection = 3; - // Identifies the wallet id to query. - core.keys.v1alpha1.WalletId wallet_id = 14; } message NullifierStatusResponse { From e9066669e35d71710ecd8ade4c4358233809a47d Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Wed, 3 Jan 2024 09:14:24 -0800 Subject: [PATCH 25/84] docs: add more talk urls Consolidating talk URLs from a few different places, such as onboarding docs, Discord, and of course this guide. --- docs/guide/src/resources.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/guide/src/resources.md b/docs/guide/src/resources.md index be45391792..160f6ed50a 100644 --- a/docs/guide/src/resources.md +++ b/docs/guide/src/resources.md @@ -35,7 +35,10 @@ The protobuf documentation is rendered at [buf.build/penumbra-zone/penumbra][pro These talks were given at various conferences and events, describing different aspects of the Penumbra ecosystem. -* [DevCon 2022: Building a Private DEX with ZKPs and Threshold Cryptography](https://www.youtube.com/watch?v=JjmOelgfqNo) +* [DevCon 2022: Building a Private DEX with ZKPs and Threshold Cryptography](https://archive.devcon.org/archive/watch/6/penumbra-building-a-private-dex-with-zkps-and-threshold-cryptography/?tab=YouTube) * [ZK8: How to build a private DEX](https://www.youtube.com/watch?v=-ap9ja36EYU) * [ZK8: Tiered Merkle Topiary in Rust](https://www.youtube.com/watch?v=mHoe7lQMcxU) * [ZK Whiteboard Session: ZK Swaps](https://www.youtube.com/watch?v=ziUZyQmHh4c) +* [MEV Day: Minimizing MEV with sealed-input batch swaps](https://www.youtube.com/watch?v=oPIOIW2tvL4) +* [Nebular Summit: Creating Performant Interchain Privacy At Scale](https://www.youtube.com/watch?v=EEUKPrno3u4) +* [Interchain FM: Penumbra, Zero-Knowledge Decentralized Exchange](https://interchain.fm/episodes/penumbra-zero-knowledge-decentralized-exchange/transcript) From 1dbd060260a0436dcc46da233ab7a3631683711f Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Wed, 3 Jan 2024 09:43:16 -0800 Subject: [PATCH 26/84] docs: update testnet name for ibc 63 -> 64 Follow up to 41345e5958840fd2e8a0b7f16f2a8fd7181bcbd6, which updated the IBC info, but didn't update the testnet name from Rhea to Titan. --- docs/guide/src/pcli/transaction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/src/pcli/transaction.md b/docs/guide/src/pcli/transaction.md index 212b8a7dc4..147df936e0 100644 --- a/docs/guide/src/pcli/transaction.md +++ b/docs/guide/src/pcli/transaction.md @@ -181,7 +181,7 @@ has been configured between the Osmosis testnet and the *current* Penumbra testn Penumbra aims to implement full IBC support for cross-chain asset transfers. For now, however, we're only running a relayer between the Penumbra testnet and the [Osmosis testnet] chains. -For Testnet 63 Rhea, the channel information is: +For Testnet 64 Titan, the channel information is: _+nUk(g4xHi(%ywpr)g8s|lm^gX>1pSx8eFloqcP1(4_Anb6yAHXk(y(II@O2?go$w&}_cWfe ztMZG%xv-tc2%zumgz>_M3ovZ_Ss@rmp8En5nka>V<;E?bM_NNZ8opFT5_K!ScW`TA zVd?!Lm{4CYD19HSNxkqG#k{r$qo$bG_HeFRbQJU29!A(qOdG|#wug(wc?hHA!z>wY zZ|2j6OeXV)C8xr};_<|QU z9N)Zp{bvjre%#1oM~@geYV-glB%aOiM%WU$B$>!Efc1DYY#|gLor5xYQfXT1v|s|@J^P3*3NJjwf@M5-5KsTz_V9VNHr77)BGUJ4r1!=MzR(c zWtu|(lLL=|PXOsttFTlZ)R}M9{M%m4I9E;DSFnN7EWia5-?esV)#`u{Y3Moz6h}(p!*i1|n#I&wPRKmxoR}|9%Wzd~QY3A#)2%Fm}pW+@C&n z7@JShhf1aj2(>76h7W&%z!sp!js@~*`q(MX4n!~|5f4p1O&>er4F|$T7hj$fIsrm_ z1x9>Qs^9_gY{VKw{m;WpM7A^OBToX=8l-fV&%^SD8l|B1d05_11H{yLpNA3lG6r=!QAFg}vw!x2dihr>os!5hKo4G58qkVy#icQ~9SWk?8+I2L zX}bu4j=l^diX+5?%Y!3fCgNI|us9rqm^^-r!uPBwmbcg_2C*Yye9I>IYq-+2KxRcEMu=IM&I9rW$YCo`u-*?&)b=Fb?{yC<~?VW z;ZM-{&Zooh87e>-d_^h9d>59%SAZb%U05Es>8|02gzO&Rdb_lz<}WS+t>Ei#(!UzwGOSqoXEh5Ak1X%4q}$@n37oSp z0)+UlHE}~tQIjlE`NbwXA(l+;IdvRBkOC|;0w72&HswqLk$}F17C8nH8KxhU~OeH`FW{D}oC)tj9iy3-I3Wlz7ZZUBKe=(TLCc!KZ zO79s>Kw`Nmy=Q>1oXbt=Jp+X4U2ejArU+{`6!C5|dCqRvyIUz-HdnZG5aZ?G^Wc_iQHq&eX^s|Y5CAc=E6o!t`KCf3FCH_QFUxGIyy_RP%Be>$OSA`X zARyKfK&+)zYFPpVYpc|<1ju`n%QBmW^`J??%yIae13n%4+WbMaCQ%AH51MjK0tB50 z)taP>($#!TR%O$gT&>n5AT$Fg)+9hE3fe^#14>?m(~yQ22&nkQ5nPCV8Z1gZvr4DVuRUJgpmMZA~u+Vhw-f;hw5$=I*7j^)Qv$eq{|zX z4x$vjY*ac3khhfk0^PJf%XQGpAsu{H=^!9911NM5AcX&{(!pHE++v2_kvd4%>sw6R zkdlhzk_v7!|6{l345=b$kI{gDkQqRXW}8wGfaq+STA2Vbnr$ZBp0_9(nM)GgVYZ+D z;Xkw*Qneic9oklQDA}VTuPL_`fS|L(lzABdA^RPs%*y}>+3zrsmqFWdF6|L-knAU& zLZ;x2pbt7MyrCqIdg$W~C3%48;|;a?DMjIJvHEjK@^352141)^Lh=C7-P=m?d5*c$ z4E>LkJY^&7G$V!fKWOxMB>KH(`=*cI&}#N7u7E{Xd)3GRqS0Qp`~iZiy=vqDG4j1? z8&?B zdP1PWXJ&H1Cw+Q-X3DP=IU4moGdp#*kC*iTe{Lo(`(%{&xhX$|qIxt9pPT$!HyS(Q zs)tN=*c2IRfH5^d2sHwTsX1iI6AnOhe#q=9?n3}V2!~9WF$WMrIBc3CjRqiuaM;Z2 z?QspyqmGaK=Nc{*9L>QQ+AGdTX^tobM=3Zvq7)n;I6FcL4%Lfbm;k>K>mGlD&^G}g zo*b&Q52YaVjnY1Vyro?Cl-2Sb*S=%(Nc+B1+6M^D01E8`h{1kG+INEvPuYQ|Y=xFt z?PnagUMpB+A-n%Y@|zqw6W(C4o2>S|2P-u12Fn)Td!c|d<3`I6Z;NmkYy%+vE6DEg269`GuqZ%N(#KJh}Y{;wd zHb|855s=6d3)>5w{2XHQW{ZimTtFZQP)rg)Ow!F(Mn1RA072_!3$Fl>sRjs2H(R&> z;2-li{4O+UB}aa7kCzN+5JyQ%ULrVL1(TM{N&*NPNeiDu3vM9xrItLdJ6vS|DsE^W zSsG9xX)LuI5i&z%P+DpsM-i0p+8TkkTQWBt5C#TNk)m+>?UuYnL@7w!Zsm!5FMzx) za?=GjO|xqOkfM0aN7q++le#F$uLn>W)C#sGPExNDG6&KpCJSMFI3w zz!U{(QdXXt8oF9ekunITFf(^rGVR>qm&*VZC68j|cLrQh@a9g-5n*D~2B|wO7E@_bfFsltO z4z~=TFPm*1$(`pRi@`-c#a#I~9|DRioV9OSWa`4Az0k^-Scx<;f= zNAa*o%WR}W(4C;DkJ`;Vj{{egv*~i05-VEVd5L}$NuS+>usZGqufP|qS0+5rXlN)w zm>nD;6QM3H-Y68eZ}`j~P1;(-?I*u|Mog5)r(0@q@7P@5gpSJaC?HsE5&osB3fE<#m;ii@!! z8De-9lD;RZmuXvUo>xSfZYvSkhY>K0eA*jC2%+Ktu>k&L$!`Jx zg4~}h`8W?iboVCdT$)Bvjk3ecT$1QoeO$fkiEcxXxhtUEEk<7pm zyatjPgy21}z0P7!`;sT00th8}@+sD-O(CBv%R1V%Xj1?P$*&_bB_t1@0>p}+_9f3> zxmX`aUgMH~B9OD@MM&kJOv7-=Zy>qSCWbyDl!Ez`Wt2%l<6>)*#WwqbCMj*QEPAg1 zvn}q2p0SMnqCLT=0EE~{c?HPe84D&q+xA2g)Oa=!8#G)Xl-PhklV>e1Hqip`bHSnz z_d`IaMF9k_!50OVG9Yt{#a{B|Odb*to)R>BF5H#b0e%?0?IBAibw*_)$T+S~*|CEXYgDNiu8m&9#%NE=23z}B( z%a&Cr1K<03ibQ`SO_<<&r;0Ym=`V3bCSTb5S?jn+ww zuLV;B7%hNMQv(FA;cGOwe%)ek`GO{A00<>#@*rQgWOzHDc{HfkE%|U;KKBM*xA5_# z&}dw~gIeiZzMypy^o~H#_*w^s;_rc=fdIvS1cKJNpx+?<6$%XmYP>1r?2(zr(;M$t zY?m)+@+;o4CV6c14auVlm!L?Ep}R+ zJaK16G=O*)Zls(|z-R)5$j#stcn$sv1!*+6-fgjud_hx~2nZ!;3KQ+NXdpoHgFw*8dP9v5En^a- zKw`xQ#UESj6JM<4V|{E{c~VIDJQ#OAdjm0w&xe5!2Rabo7J08Fuj2>-68kK9LgTPN zi0^th0z%qn;kzC&6JZkT{$Nc2MhhUsC04!%nxYDBv4lwm+n-wOurF6~9Dz`BrJTf1 zEg4ELPl!C)4>4Ny(R-6-6}p*2)r@DfwJq04jEAroXickFo#E;ENYH z<^nGgN=CHUJq#|We9ElOf81I;U?uV?{FF<6@sG?t@dUbhDM~oYxEX@)&3_aGH~nxy z;m;#8$HasdQA)&p&~OwKH;MB&sq|cFYr^ZQ%^(E3~s9AYt_PO=k9dVj7uns zV@3kwfUgb~xw{NbB(>eEY7tNd6Uf%pmA+P z-ehwGtj@I&x&06V6|RdIWQ8o6CmyK+LU>0U0h-rEvO0^L1CHTsii9`85g>Y91YhdX z8MuJhTpVG;_`(MSqX%(BfZ5_p8!E=ab(C)dm%;m3W&R#BCKDm z)t%;Hn&eM*s6=SYtQ4BtA8+xC=V}M23@=E39xdJ9VcFm<&n(mwfr z7U~`c(b+DgtQ>)DX;(x(UBM9`u`7}<`~;3bm%AeH6G-7X0^!wNk*z;O#WsiWt*+BbuHKAT+sBQIN*Zfa;c~cWD;96 zj8wEhq(N~6xJX42nr9Cpz&bT z=p8#bji1#1Ol|aJs!!^Q;(!SX1wW|d&uef31tL9;Bf!LiQKZMwyL^N|j}JvtbF;L$ zl^g`ghtf%s?md(~F4Db+qVfqD-UK8ciXuw=j*=n}?a@?ewpMG9f0DXATbskBMq1dO zPMx%{J)JsfVS7}*9z)bARNNkgqkf5CnBsG5qQ+CvaO@lxKmA1sJd`R5Ie=3 zAvKaaM)csA$a8H%qHQpb{C#2q)i({cD}KHgyFA{t73W;^&VzqzqWEdyi7+V~K`OE? zYUad7(k=jZ4{H~{RIIw8G+bzl=oCdr(-hCGcx1{!IS(&4NkSMZD0M(#Hr7RPtRCZc zhe}UG&Ft7fzUc@xwHu^^7% zm^8hmbL-R5ED@FCH9+?1C~oY@Zg2$D;OS`3;x%PC+Bu(wcOB5|F{#UJy(pD)sos0d z+yB;nC}8{SHSgrII@Z~_%+8|}+A9+^^)qT~Y8&dI7)8iUci5QG6L~?!jN0)WU7aIp z`Uq#9o!{2@6exvF<)x<}wIXR!L(eh)ZcFs{O&@}y*E4qGnm<(_2Qlw@2Abz`nmmeoLu%{k?EGVIKukiC6v5mZSX9JU z932Rdyn!LYjh~|?HWB~3g|X$S>1VK{a|^SNv6qk^fC6H3>6-7(U^&{zrA$W6IUZ~- zWe9VV;&B9ME~Uqa9#TzFW7(RMC$pj2vCGn%(pp=V-jrN}Wz>{kayzhO<_gAErdC$6 z&x%$sWHqi7GuiH^^}E;;V;J+7nmsAI_TPR*V~u>m*uYFb(|X($gvKgUovIIe??{xX(jO=Js=# z_LYDM5eIsRWr*BeUIR=##E|Ls%7(YY}80Tbh?*&gx*OLvcQ{f z*i8a90MiB(umJ>GvwmW5dd2Q`E)VeU-8 zGl#mALjM%&IZl;cgtkwy$xVQ13QQ-AHwy848Db7-=AULJPfVv$G=7>5R7}#x!B4ZA z1oVO?4EMEYJQD_Y7^j8Aj7=$P8XGZv6EpcIeW*m)^_y5{{@Wx3g2W~^`efN3eJHev zopKIF!f$+^W1($Kd>>4)J^o_hsZeBGYvH7nx^)_>DBXf90%}f3)Y-z|Xh;y$w$K8^ z59*;5h0n9poJ-iTl>i{6=Yy7{G0(H8c)e3x4?R!nN_-&N^&$(sD*5174fMw2L=eRZ z-7)@_%07pU8-c$;^KXi#ILrTyMMZwCILrTyUh{0@4bkB%sV^>KmsR47jE1iS4T+go zSX8`UDNfL@h}Z1+(Q`Wsy&;*Qqvv*d#*u`A^CKesB$V+Z@i%DhP&CC!bB7X*IBD)s zqA4WN{6mTc09yVdXi41sLx~2Z5b8gaXmIp+3$Fl5Zs^4E7Kx@WxWTyrcLAw&(^>zL zchn0#4Qb`RrzQZURFx)xY-lI) z#6CzZJC}_t`G6r-Ou7anntZ@=#k=(Y(c}Y$3sL$BxK8B$f0X+6Ty|n9ULF+r8$hDT zN31tr#Z(7PK4N1}#@qJTu^j%?V5;^!c5)8h7VN=ixHHN0lhj|&gWBUIKp`L?LFf}T zw*W!t6E(M;NeBnT+>QhQPVn%bYDuC!pyn2(XnBC<_E@k`#9#V5oVxXVHu4NS?I)ho zDtU-Z_wjWw^MeDFKK! z-_lPd(=YSI9P#;=NwjsmL%9~bSYSXyil%vfM|J*E_F6Wo5&(Pb@fGTLg}KQ4G~US>Fc#YOVZbCb!jkA%Iivfjgh`yucwxu%SuK8zzDC`rP=~S z%jpm!+PHvjL^cbosJ%S3arB^sYkJ0iww=eb8XL6vFD} znD^+R2UCSJSV_)3I*cH_!qtr!T9G<)20NoST zX0S1(_vzAD07+O~8Vi7Ea-R-k!GG4N8)?+a)QDQPsAOf(4N+RDN5!*1sDm~u>4n8v zycP!C^G$Bp;qaGEZpKe@}{;2orZSx;L=|-ybKaIGVtF{V6v)ztbtXRd2NHxH);kON z0tBIlNxm0=P!A-j=%Hs*`xET^+(${i{XwV)5qextT`?bL%AvEEIgDl*Z#@p-HUPyS z`M5q*yf+6BBp=sLK7~9KG)Cdt)SqUu5yRK&>=fCAB)wKIJ6nNhvQ|I$JpL<#JxI{& zb-eP^BX#CgdVXr`m3kI+Y?lH%S~elN>-7`PP#`F**DI^|(0kAkkIN6xi@{>9~yb#011U#juUcFKd_XJwbPX)uJsdy?FE=|Q#G+YvT z588z`;*q~tkvlPwNX?zax(uT`S>VLwHfo^##-MZBk~UK3bb{#t=g@d2HG4K2e%doS z<1QN^(c~HZ6z&reh$heI(}f4;I_73Q^nxxtI2ScH>)6WZ_eEWrxvi=9XS1m#Ta^j` zi8@>L&SH@Q1huU?lE6;qO;ETkHKU$QI&E9fgyw5o(1cdTHflnyTTjP)Ne{g)8R&_c zFX@p1+^8ljeE+q+opt(y)q8AO|Jz>I|<}mZL_kwmLj`x%}P!a9kBXJNfy&dyI zJ+x2q(i=5D)FUJ8X&72>;$=^2!yI;Y30`cpI2S;o&K^A?o`wSmYIw0R&o1LlP`EdB zN+TP8+Fm8x-rQ8~Rl)^`CVQ1|`#9z&dg!2Jpby%AqV}^s#J~YAj8t|L#&kf92_>j_ zK*<6iNFE?r(3tu<=I1)XOG3%}qUPtcAN2u)eTn3u)CEnfUynnI8jz@SNNw~0LG94B zzi(n|e&3{zeO!As^3u>&lB-S})JOc@dH>Lf>i5#=&$qjQZ=Aw^qlIqPwAhPl-Y+pOw^HXGYwTMy z{y1Y>_?SzY>f$Bz=~yZMl`2XL#gF7QCR$U)V~mqn{{gAQ7-Mn~-EGroeuI2D5kbMp z9G9P|7snVYO0U!8Gy;iA*J%;qngPU+ucIG%;olna3#FS zQ!kF`H?8^ISYu*-_}(7c-uu?Wu9^w5BRyT>i}e0RZvn9{>OV delta 19339 zcmZ{M33wGn*7ohH?!HOikfoEbge8}d5E4k(5fp+Vh-@+{jvwNv5yIlI4Im8ueE$^@ z6c}Ve1I@5XKv`soTp;2CBRB#oGKh@AxPcA>41!S^6-55`)N(uD{Qp0X&ph|7s`J*V zQ>RXys;*G=N%mikW>u$m;wRfU{=TP;9IvF){^W0qov>>)3$2R(*lC2_{1zwKVMzrp z&kNn+BsoTs%UgtQ7lje=(?2}fY?e|aN>Eu4D)PUZY_?ASce=yOkZa8dtul<9bLsIj zw@hG$;~g)niO=tu&B9K!|Gk6na^f%DR?4$yBt@K$9LF?6EaaMhGFbhbLr(ls?+;C{ zuz#!s1xZdl$D(S3>XS1xA(;mIm5M}pQjE)v3C!GtYKZ*ab{$`SyZskpOQU;H& zm@sni#3^GYjQ5@&F^n`|e>S{JqkiqxJT@X34Xt!LZ?)m|8gnyBDl%3YPU^iClctUt zUZKREd+a&(1@oHyb~AMqe_-r2BYt8^vB8cRo-uW}G0qz~b(~lB`d50a(iB%Y}qEJKS1g%58wG+@!=^1T8ZA78ra{4I?OG53nbI?y& zSQ@%X6vDCSrz~t6YAy=%T~0q`VY^VSD9m+vyKMZHrJX`eoERK4+2x(Q%$ZN}uA!T~ zr86J9w`)=(C!+j_cVn%b6zMgl3*=~I14Wu?1a-URw$O+JwJdbn!hPX5Jwgw7J?6Ac z?UB^j=>}c{{>jU{C+6JJwM_A$$U<2pLofh=ugtBl5%|g)r5% zJq9F5Y^qbUh=w2;kSpgK2qXhqw^1Zvmk(s6F~t%F%fJLn7%T%L&2=4E2IduM1eSqq zN)!vC+aOk|s**r5C_$10l0lJNT?djuQB9Hrl0if=SXcudJD5plGgvZM1}9jO!7@0a z9VZzqgBwUEMN6;@Zl33SZwMC0<@b5B=KZ_-eF98|5Nj-21AzA-#R~-9hZHXmcpp;h1_-Y&Kgw*HmlEwae)!nO zCy$w0f%#2!!XznXVw9N@V9dp+df3i%J=jKNHViO&9@V&sU?+K0k2V{FywC6dZ*n7s z5sj|HPC;&T9d??g(V6uV>@-iKG28W^JF#P?9y8k}s%fqst3yY#^;o^UpdNIOwI~j7 z41ABl;idPW^RbC}x4<^~d}wP2rChn=Q=S{-&$by{NT(H`v65(^zcb~+>frUgVnc6!1-6lAAIWZXd= zXr?zRlzRvuSf*pwcuE+EAdfnlaOX;|E%6x<68Hxn$f z8N{A5%*;dsOcE8O1_h9K&d6|`X-WdP(rdT6pSNXIyCIczn_}^rmDE&|W8{krGb_PG z?u&vz9S(^_q>d&xU2_S@r^lAmC8qslNnK)Caj9WuCy23psUSTlfW%TGGb^DArpT`= zfwf8nfrJeSKOqr=1;ehn3_hLU#KNS4dO-n1mf=8==p@O-k)+Oe;i^;+j5i4qf1>f8 zF_blvU2`==a*i3%A?2e=MpTR)Gj7b33U9-jZpmZDN9FeHU0E};os;Mnj!Qzp93_Kx zwULqOlqgomHP?8*Jl{5NP2C|nXtu`4%ywF+W)at{@&>Ohh*i~Pi=bH*vFT|{am{sg zZI^=nQ4kC(1rqBFH?Vd+*IZxMtLi}l1%c`6L1Mj;u3Y7}uy(3zzF?RQ5`#>I2nsTS z0*Jg|WYN|kT{q1&U#u&U1_=}d5^0clkt7P0M7nEk@E)ov%G*#^dmQG>4Wzwpmf@Nk z(X60<1{gQiZJL3m8|6T05gM-jlEJDIi;x!2OGY>aIX|h00P31sp<+&sw{K;mn4Uoq zXsJT`779ST)yUR^qfl#Z3kC-)3jzrP65HxZ0B^4=K@=zmBx1Bax047Z5hf|O!$5*Y zQ40u54^YN5KrFEx24bbE1=$V*Ihul4**grxZpnnoxWSsJO7uxkGhrJ5#DO6uWoaaF zBcp+C4XU`2LwO=81r>J&N@4pasHw2~1ASh9WlIpn`W0C2`Iv#I1-qa zV%-rVLr*EP5I`I$uSyC8y5olT)aGlk;{inyD2@kOQ1Ck**aG`BU^6-?(&QlSoiJFw zQW4uUK|M1#4*^EBi%`5fVKmg^!HEbERb$_7w00t zbWMVT5g_*aJZ!R-Yky;ezB9ZZs-v-QXpfr)`2~acPAOom|TYzfOT8$SFRNvBg>7-@5_P>qLAHCOJZW;Txfx8LP z)Fw@T(3%2)A5iiGLen3#rhuUTL2C*K`X98WHfj2kft;Cq2MA1nnu#?1$%wQNwJ}tS z*7-%cHK=|vkT^@Fu$HeGIPyv=TFZc%iq`Tq1BYH!3#MxZPQ40(>6(FK?{@Ng8wVbH z7GrZ5&soi)_mqzxRS})wo!Oc1@%Z(OSq$lK6NFr}BTGE(W$bJgdzv8^rMyR!!URt< zB%_G}^!GGFuA3-8k54lsyP60MW;2oP);&e(=42RD2R%@jn_Z`emclr*84})v47!+& zfFzT7n*!8)@57y2y3c0`vrtf)&mwZ+p$W8@&ziPYX5l2lO4~YP#jHbzh2HDC#`jnl z5Ku%~$W%PB#Z}fqreXmg2o^H_gyaBW@}(tA?F&F)0@O@ouq8|d^BAf{Yqc)`f@%p<`$CxZ z1)t$okK6+YRDha_e931K8Fo<%CZ9Etjt2-PpW$XNA7f5(?G-HaJTr3YM|)RH9zJQz zqZN~*<=&E-%-9N+M7J)cnM5{Nscis+?f_+XfY5xUwgDizTd8dTi0)Qu8zhk~s~8S8 zq&N_m05ub>r&TNx6}2%`i`LBxb!$+qVmRDLrC@_K3};A5MK%D`RAhrS45vs{3#K&; z$4CXiw1(jv*$y^HcI|a6^fGLa_djg#;w!litYbLpPgZ0`5Ktk*UG zM0e}84FJ*Ida{8}`$aMtVWXG3=TEVX0Rzqd#(;r_zLDV$lN5#o7&bEOI8ql3eG_AO zs*;8dsCB_zD4=rrWHJ4lnA=o02Gb@Mr31BjH<$rmVyr;b;vR>frlRHd62n6(C+-!=vUNe^!XEa;*k zcIIuYU1voPrfRR~wZ4y32lSLJR0s5wEmQ~elr2;T^cLu=19}Ve)kMEN6;9x|_J=HV zlp7uH@@IB72F9Db{+XTeAxp}XSB(zM|0(804qPcar4>LS6gZ`A4G0BJF;|9dKqzpE zA#B%D*mh{%&#-veTa%2kGXV$9{F#7*X8sIwrC&n^9A_Br%USbf#06G#v#>KD3~_;V>gE)Q4$$^%=6!Rp_%~k% z{B%(NI^ZWq_?o4cC6<&IZax;6v3$`w{5Bfkh-fNgrH9ud0%Z|d$0q#@94z)y_*!o2S9^ml(^ z;Y_DDwnLQDBwl6SvUmElxQc}@wjxmst6pU(^_;${9XkJ+EqeFP7C$p}OrvIW$oQGz zgsYnYUuWKL-@P+-ovFh!wWIKSo#D7mtJR^oxxv^iN>|*w5tK^|l~`gon96nl(en+~ zP%a5T4EqKv)H6ped?T1Sa^V{^b7vfBS#ZsXcYkk$(PIuz^g!wG9IoPlLmvnLRb&A~ z4|8~KbLT@C2+D$TN&M3zzhe+8C5GFID}-pbRC=OL@ACPJrlWDQ{J*ESV&@T6fnF9WCWuZc!Z} zrS^Hk>XcFg>W*;r1(+BRrPO{fAWEtISTLewbmRvkN=8S1Fe2pJ%Q(|oIOqsacSLFT zvY;bMyO;5FJ-w86FXM$WVZ*Of?~Dz_OUAutPVQB zHwklf&;dS50H(_W6C}{VYTi_)`GDwPHIKGe7K?y?HE-PxpAd;27aLVx_VJm+ssj2H z&{qZYbk|YERRD(s=&Lxsa8UpU1br26DFZkl=&N}9&dwsKKCVGFc(unDci#~3*8~5C zz&Yt=WCM3~;Hn4y4Kxq^go3yf+3daf;eZ~S1A5a>B8aDfqMA2vAx^Ch!==eiZ`t3T?6or>NC&~r zfFK}*FF@@t8KBw|P|=mk90j z563a>9ZBW7=3dT9b6!(ajlD%5|Dg;;n$88?-hj>p-CpkMaN>e)FK=Dq?3Z+zI9+q^ z!IKAWI}lK0g5p3xkqL?efps!Lae%BdL(EW?YaZh4=A7|tR|v?{Tm4@6X2GVxoxU8q9CSc?)8(K8(&Dm?9ubi@T;{lLkt3kI;WE!{ry)AH%!}Jfi^1@< zoMj5bN67HCJdz??3d095mP}J7Fl`AD3cj^GRbD&+{Rb3nQ7hXDggbSik;tTLc>s0o z^R}=l?DMRNFT9m@^#0KmQ$|-zisJv`RbM{FysKwc_L0M)oEOccgGLyoI?tMFYXF2g z&zkA-AOR>i@f0B+-WI{2=XrOZZCNtUObnI;>O$xwV6GCFZ~CiKjKi9EHb^LD}FsB zVquCFnQBo1K@3nXDnN9<$i$+ewUOf5OU%$UwKixASYjq+IqN9rNTHN!xrrFGn0cRF z*jhM#!j$OriYd`C<0g)+7*{cVO2vpMZth|C=!A(Cxs_?De}_)6}W7U zcl-ARE$~Zz^$;~s?iCa1bdj)`xaEJ%^yYtG+~T#m?I`Vjt!_Kuy{7l^_r-;K>$ao8 z?xl8r6AnPb_|jypa}K7)i>~bD@v}c}W_E{m9on~vdX+zS@D5(fj13t*W^!~~`Sj@6 zit-WBDHEc@CzVegjXRJrBgKo5X`|t@<>TSPQ_IJW84-PS`jm?3V)>-W@bt$gPC)bF!z(6F#v6m^kioqNw|cZ~hxYBewd>NpeaE7kqtQO& z%O4$E5fyahF?!Gz#eZYVpO_A^im@X|P#T^B69$lgnD{S)iKjU8rKv9HQ$%3;(!>S5 zlEtKbX*Md>5R>+$iJQsov>BvOJUM5wn{vEaKW}{yzjPmT2s;<_LBZslscwlO1&f|D zk$%WN=)8W;ROfZnqK|VX4%FvlAE3HqdVjcne%Pg;13Ix^3Ob>F*00 z!%BYC@is-oTR<6a0pYqoQoL<~T_OeB%2m_vn`AWYcUA8YDPk9`3n3yPh3I;&eccSr zvSj)~S@d-Z(X@Hgqd0d%4g|k3kQ;g+fEdUPJrF<$-p~U9#6WK7fl#LYltr7zUG-@5 zc*;_n2N1*n{@8~4@Hc#4=fBgD05mEa8OiQXemE~3^*2A z%Fh7d2MaCbXMmXbg%mYw=xd9ox%P4^ z^rEsjoo1F>Ne!JJ$Xsb;@->!UmTvqwY>n0mrRZvnHWwg-)@XA9LaQ~}T!1jw8f`8> zm}?E0i^iTt1FDi^$8U_iD(HpocdPW+Q7f9Nu>+!)Dm`{Olf59uJ~)lM?FBt{Acz6V zu>)f4FX*wSyY@ya^r{*=9mFB5coeZ#B8UVl1%kH2TGQe(a0Mv@6$^d}qWw$l} zohkQ71EiAy_GkkDK@3nD01yV)qYaSZ+OJ!olga>ee0<$X%69%n2FM@-9JFeR8X6xN z4cC>B2-ZCM=Z06$e9F2KPZro97F*|a>T+%j(j8pRDcHWTYhC@qoBq6mU@;W%F*zB zt9}FLCe;x5sO6t*Y;=tswbWA(YDg>bs3qRu(D;$89JAO5mb_I2#`K^-?tXxno@18! zZ~}<#k6BG*dI<hz>s{FPP7vi2`VG-pXnkh(P`G7QQb~B1|pN;DTkgNHiduqd;-Ss0Bzb&`9XZpb!xi&vNJyn`ER`U;!V|u+)U6UANWQTO==mb41IyQ1OkUyvK^;J?4xO-T112&@ zt>wxT3XQ>3YvFzuOn56w@LNlL*8>6-pr)de>9>|T8=)3d-&z^+t_)Df;=7(y3Zmax z>T9zr&WwPXiPF690;MR;`_77~D=)ML)pvop(fE6d$tyKj49tLJGT7&9}g>QDJ3^;fu5*{n` zi|xCejSsWwQtCPd`lm85BbnqNo9vovosIuassKVin{3q&Ahg(ID+d9D>?S))o^}Ay z%_bXP+UN|CNvmbE&92+>5DARdn{6zaxncM>F!i5*#?W8+NssK*5-)>s$e85z{AUSNCZF1gZ z(c8vOE1y0&I=bewUPcc?XhEwC)qxh|(TD45LDB7ST`kC~57*U#BHZD+S{U?T?=Wfc zLWEeB%1;cPmcUgT zD}v$&wE(_mo5hI+v?x#zaMH54R+p0&#Q?EKuRm* z=ene{Mt-)lN&*pZ{%p5vPxoug%yR8nVfuTaoX?FYeM$E>4lq8?qU+6BVf-!5@8L~Z zZ)VqgeUH)eBC9-CQ`(c2WwRAYHRFe{5v*qK{jA2Q`DiE` zm+3rb&|jj3LjT0waA{V}qvP0Lni!jETFqm%EcFvgxv*g(78>kHf7Jr^clWyCWIDZI z60tku{AT#`o@2LnzG0~QEm02TZqO4by}^=u-Jm}o{DVvqkSIOF*t{Bsw=+h@GYp(V z1*dq#IoEIYM>eeUT)ZDq4Dt=Jn6)%IuVpGdg@9O+Ygxlq zN*xq{b1iG###tqYh}Y>aGPcpbe<@pe?~BaI7V*aA;&JH)X3Dou0>fQUAa5K+0rcHK zj{xM1Kmyzw7-pml-)J$zTUcnf|Ep!JM{Enj$sYTuEf)D!#`;poAOw!BNG>(Rg4oJ3 zMXpP=Al%B@_feu~yN$8CR9iCFwm?+8rVT_XFW$!5-y|Bxuv$U2jddNUsL;>$Knq${ z+XE_EmfHg=3g_DcEr9TxW02B<)=V|C#hX)TOwZw~S$46m6^%Q`2B>ba1Yc%sh^nRd z{Bj^mZ{%MNWa*OpW!71ISp_pCI4`sA_b4Vz#tz1Qr(*}-fPdC}Ga(+<|Wm#%#X zvOCzI3BWW3wrj;1^9)r@NlTpBA{nGw2*+8mRuX?81Nd+S{DLM7DGh{2RvJ!w!G$Bl zE`RiL*75#b%oaDgXcPv;F4jOiK_m!@U94MA)gRq8?P9n77e*qIqE}ex4g7gAeG8+c z=oN;Qn(mRP1huafKCECf;cI`iMJW}W@j zE0}%f>wzG-&Fd^#J`&Cpe(^fP9V97(9dREEy`_|)jc^~sQ_?$V{~~4H^e3!lz5LRZ z%r1FTQ_6ksO_nTgd*r_NCc|yd<3bKB2mJDtY}%a%0uj>U085tdW3z-72jo*ZW@fwg z+bs01(jprz-_|C{CM^z;N&1x@(rhS1n?u?dfH3eOZH#Pk?sudy?gD@r-w7m1k9V{+ zPz%X-v^DCx_7N63rSzzemPg1MEitP4q{mSoPdQta9Mum)P>421nMzXu!FH6wDH*Un z>2Zt^BFD&fw+j*Y(Q)RVUeC%p*2f=p5mFui2+89tSze3+Lh?An zS1z)8eL^S5>c4{^ZFDCBL0YmWwCzz#P098hgdmpaNB-3{tW(KHjL8pt^~D#ek65}) zbO0gp5o_4Up+76GPkNp7hds}3DLu*5@dbtG7**BjK1j)ds z^$epW1W(fpcZMDfUHcy_^iMn^EQ}7p*RDzBQ~WR1u`GZ42A1qMu40h^|In{W8Ql;7n6(al*_B)_--qMNgo#s0t6_}caetsB<)&_XuOyFqIK-4wwD;QMMyv)m9ns$GeF2(V)#oP`g8Cc z*Zz)$eqsKpb*v=qJMG6gq{9{Rv`^>I=JJ#9>E0!H@g?IKN+I);_GUoH{G`1(htM_Y&G?PZt_6bP zgP#*6cuz ztTmgffQ*Kao6VJjHgWB_JoFrggZiJYV-3hL8{I#boKje*scTpA&}x6`M)*@DM_i=$K21p>&)>0;4Jh&S5K#zvk0;B%0YT(Z-?UjZ zCDSbNi#M_ErFgz3uSQTvrCfy%K!_~i2p_X(0W>8iTIMg_#AcV^;g<9v6hdYhPnK^V z03oxC;|6M!5CK~5-?5pEDP10jkoPR-$@0k7RCv#Fjw9R4vKzS1D*w~XEMB@QkRiue z#gpYFM^oWAt2iz>ieQ#zuDzCr*86*3Vy)8F(sLBrE}D^9*7;XZSh|ig`QaCZAX>*8 zNc#dp!*yie2SJpJTX7z$@ds>S!_qgBeOrMjmxwlV|KvWNdlOAF3NX!hTh&&~Iv_YV z^LFxS8z4A0^Paa-wt~i}+~TKfWgSblaCWN_AyaSRxBXf}h-~3QAHbjDkq9ik%^$m! zwJqJoSvS>&h_>;Y2WSY9ZTzmmVz9Yn_iFBc@n_z&tJIO+B;)ax{Ah=INLTYVU6eE} z*=pYHW;H_Cd!W2CuZ%$tFw%_Gt*0G8J6d-KrpFi$FW7SmZak92>(=IxhReWM?qhROAfQnY%X zC(A4Z5Pa`*L~P<~;nHKUzbU>JXo<&Q9fT=b5Z!TQ3ILemxF!We)8pC{fFM1tP0@lz za6*Rdzv75+=ZQd$>~TWd0}UZ}g6u)c=V?7CRH5Z*Z45wgo+e|^pjx{2R~(lba>iPs**o7M2$ylgi=*xvCUUSmf65o67dlK;|H z{^L!H#6R8?`+xr9O^JU_r$ypl)5#C@6aU5z{$UXMDgTL`g5V$Xp`Ws_WvH!ai9ge) zpR%wplqU-DkCM<&S=cJnyoo5ycR7ALpEbqs>H5wHEy6ztb+qR8DdyC$|H}U|FVw7^ zVZLM4pEhk;>0=W{l$TDJG^#EAD48;5T!sJiQ)UmlphIu`=O1{=97O-V4;PP`o-vX# z?bB%M)*W9tpyqcPJ=Cj;zudx$`|F&Q6L!ae_{OEeKLCwew`1|Ys jtg6Y}WY!o-8`n28o?X{0 penumbra.core.component.governance.v1alpha1.Proposal - 55, // 1: penumbra.core.component.governance.v1alpha1.ProposalSubmit.deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 55, // 2: penumbra.core.component.governance.v1alpha1.ProposalDepositClaim.deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 57, // 1: penumbra.core.component.governance.v1alpha1.ProposalSubmit.deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 57, // 2: penumbra.core.component.governance.v1alpha1.ProposalDepositClaim.deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount 17, // 3: penumbra.core.component.governance.v1alpha1.ProposalDepositClaim.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome 7, // 4: penumbra.core.component.governance.v1alpha1.ValidatorVote.body:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVoteBody - 56, // 5: penumbra.core.component.governance.v1alpha1.ValidatorVote.auth_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + 58, // 5: penumbra.core.component.governance.v1alpha1.ValidatorVote.auth_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature 15, // 6: penumbra.core.component.governance.v1alpha1.ValidatorVoteBody.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote - 57, // 7: penumbra.core.component.governance.v1alpha1.ValidatorVoteBody.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 58, // 8: penumbra.core.component.governance.v1alpha1.ValidatorVoteBody.governance_key:type_name -> penumbra.core.keys.v1alpha1.GovernanceKey + 59, // 7: penumbra.core.component.governance.v1alpha1.ValidatorVoteBody.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 60, // 8: penumbra.core.component.governance.v1alpha1.ValidatorVoteBody.governance_key:type_name -> penumbra.core.keys.v1alpha1.GovernanceKey 6, // 9: penumbra.core.component.governance.v1alpha1.ValidatorVoteBody.reason:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVoteReason 9, // 10: penumbra.core.component.governance.v1alpha1.DelegatorVote.body:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteBody - 56, // 11: penumbra.core.component.governance.v1alpha1.DelegatorVote.auth_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + 58, // 11: penumbra.core.component.governance.v1alpha1.DelegatorVote.auth_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature 1, // 12: penumbra.core.component.governance.v1alpha1.DelegatorVote.proof:type_name -> penumbra.core.component.governance.v1alpha1.ZKDelegatorVoteProof 15, // 13: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote - 59, // 14: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.value:type_name -> penumbra.core.asset.v1alpha1.Value - 55, // 15: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 60, // 16: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 61, // 17: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.rk:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendVerificationKey + 61, // 14: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.value:type_name -> penumbra.core.asset.v1alpha1.Value + 57, // 15: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 62, // 16: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 63, // 17: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.rk:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendVerificationKey 40, // 18: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.visible:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible 41, // 19: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.opaque:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque 15, // 20: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote - 62, // 21: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.staked_note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 55, // 22: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 59, // 23: penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit.value:type_name -> penumbra.core.asset.v1alpha1.Value - 59, // 24: penumbra.core.component.governance.v1alpha1.CommunityPoolSpend.value:type_name -> penumbra.core.asset.v1alpha1.Value - 59, // 25: penumbra.core.component.governance.v1alpha1.CommunityPoolOutput.value:type_name -> penumbra.core.asset.v1alpha1.Value - 63, // 26: penumbra.core.component.governance.v1alpha1.CommunityPoolOutput.address:type_name -> penumbra.core.keys.v1alpha1.Address + 64, // 21: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.staked_note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 57, // 22: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 61, // 23: penumbra.core.component.governance.v1alpha1.CommunityPoolDeposit.value:type_name -> penumbra.core.asset.v1alpha1.Value + 61, // 24: penumbra.core.component.governance.v1alpha1.CommunityPoolSpend.value:type_name -> penumbra.core.asset.v1alpha1.Value + 61, // 25: penumbra.core.component.governance.v1alpha1.CommunityPoolOutput.value:type_name -> penumbra.core.asset.v1alpha1.Value + 65, // 26: penumbra.core.component.governance.v1alpha1.CommunityPoolOutput.address:type_name -> penumbra.core.keys.v1alpha1.Address 0, // 27: penumbra.core.component.governance.v1alpha1.Vote.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote.Vote 42, // 28: penumbra.core.component.governance.v1alpha1.ProposalState.voting:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Voting 43, // 29: penumbra.core.component.governance.v1alpha1.ProposalState.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Withdrawn @@ -4328,59 +4462,61 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_depIdxs = 52, // 37: penumbra.core.component.governance.v1alpha1.Proposal.parameter_change:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange 53, // 38: penumbra.core.component.governance.v1alpha1.Proposal.community_pool_spend:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.CommunityPoolSpend 54, // 39: penumbra.core.component.governance.v1alpha1.Proposal.upgrade_plan:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.UpgradePlan - 19, // 40: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.proposal:type_name -> penumbra.core.component.governance.v1alpha1.Proposal - 16, // 41: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.state:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState - 55, // 42: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.proposal_deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 64, // 43: penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData - 19, // 44: penumbra.core.component.governance.v1alpha1.ProposalListResponse.proposal:type_name -> penumbra.core.component.governance.v1alpha1.Proposal - 16, // 45: penumbra.core.component.governance.v1alpha1.ProposalListResponse.state:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState - 15, // 46: penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote - 57, // 47: penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 55, // 48: penumbra.core.component.governance.v1alpha1.GovernanceParameters.proposal_deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 30, // 49: penumbra.core.component.governance.v1alpha1.GenesisContent.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters - 65, // 50: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.chain_params:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters - 66, // 51: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.community_pool_params:type_name -> penumbra.core.component.community_pool.v1alpha1.CommunityPoolParameters - 30, // 52: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters - 67, // 53: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.ibc_params:type_name -> penumbra.core.component.ibc.v1alpha1.IbcParameters - 68, // 54: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.stake_params:type_name -> penumbra.core.component.stake.v1alpha1.StakeParameters - 69, // 55: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.fee_params:type_name -> penumbra.core.component.fee.v1alpha1.FeeParameters - 70, // 56: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.distributions_params:type_name -> penumbra.core.component.distributions.v1alpha1.DistributionsParameters - 32, // 57: penumbra.core.component.governance.v1alpha1.ChangedAppParametersSet.old:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters - 32, // 58: penumbra.core.component.governance.v1alpha1.ChangedAppParametersSet.new:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters - 57, // 59: penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartRequest.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 18, // 60: penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse.tally:type_name -> penumbra.core.component.governance.v1alpha1.Tally - 57, // 61: penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 8, // 62: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote - 71, // 63: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView - 8, // 64: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote - 17, // 65: penumbra.core.component.governance.v1alpha1.ProposalState.Finished.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome - 17, // 66: penumbra.core.component.governance.v1alpha1.ProposalState.Claimed.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome - 46, // 67: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Failed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn - 46, // 68: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn - 32, // 69: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.old_parameters:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters - 32, // 70: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.new_parameters:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters - 72, // 71: penumbra.core.component.governance.v1alpha1.Proposal.CommunityPoolSpend.transaction_plan:type_name -> google.protobuf.Any - 20, // 72: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:input_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoRequest - 26, // 73: penumbra.core.component.governance.v1alpha1.QueryService.ProposalList:input_type -> penumbra.core.component.governance.v1alpha1.ProposalListRequest - 22, // 74: penumbra.core.component.governance.v1alpha1.QueryService.ProposalData:input_type -> penumbra.core.component.governance.v1alpha1.ProposalDataRequest - 38, // 75: penumbra.core.component.governance.v1alpha1.QueryService.NextProposalId:input_type -> penumbra.core.component.governance.v1alpha1.NextProposalIdRequest - 28, // 76: penumbra.core.component.governance.v1alpha1.QueryService.ValidatorVotes:input_type -> penumbra.core.component.governance.v1alpha1.ValidatorVotesRequest - 34, // 77: penumbra.core.component.governance.v1alpha1.QueryService.VotingPowerAtProposalStart:input_type -> penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartRequest - 36, // 78: penumbra.core.component.governance.v1alpha1.QueryService.AllTalliedDelegatorVotesForProposal:input_type -> penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalRequest - 24, // 79: penumbra.core.component.governance.v1alpha1.QueryService.ProposalRateData:input_type -> penumbra.core.component.governance.v1alpha1.ProposalRateDataRequest - 21, // 80: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:output_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoResponse - 27, // 81: penumbra.core.component.governance.v1alpha1.QueryService.ProposalList:output_type -> penumbra.core.component.governance.v1alpha1.ProposalListResponse - 23, // 82: penumbra.core.component.governance.v1alpha1.QueryService.ProposalData:output_type -> penumbra.core.component.governance.v1alpha1.ProposalDataResponse - 39, // 83: penumbra.core.component.governance.v1alpha1.QueryService.NextProposalId:output_type -> penumbra.core.component.governance.v1alpha1.NextProposalIdResponse - 29, // 84: penumbra.core.component.governance.v1alpha1.QueryService.ValidatorVotes:output_type -> penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse - 35, // 85: penumbra.core.component.governance.v1alpha1.QueryService.VotingPowerAtProposalStart:output_type -> penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartResponse - 37, // 86: penumbra.core.component.governance.v1alpha1.QueryService.AllTalliedDelegatorVotesForProposal:output_type -> penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse - 25, // 87: penumbra.core.component.governance.v1alpha1.QueryService.ProposalRateData:output_type -> penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse - 80, // [80:88] is the sub-list for method output_type - 72, // [72:80] is the sub-list for method input_type - 72, // [72:72] is the sub-list for extension type_name - 72, // [72:72] is the sub-list for extension extendee - 0, // [0:72] is the sub-list for field type_name + 55, // 40: penumbra.core.component.governance.v1alpha1.Proposal.freeze_ibc_client:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.FreezeIbcClient + 56, // 41: penumbra.core.component.governance.v1alpha1.Proposal.unfreeze_ibc_client:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.UnfreezeIbcClient + 19, // 42: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.proposal:type_name -> penumbra.core.component.governance.v1alpha1.Proposal + 16, // 43: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.state:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState + 57, // 44: penumbra.core.component.governance.v1alpha1.ProposalDataResponse.proposal_deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 66, // 45: penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData + 19, // 46: penumbra.core.component.governance.v1alpha1.ProposalListResponse.proposal:type_name -> penumbra.core.component.governance.v1alpha1.Proposal + 16, // 47: penumbra.core.component.governance.v1alpha1.ProposalListResponse.state:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState + 15, // 48: penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote + 59, // 49: penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 57, // 50: penumbra.core.component.governance.v1alpha1.GovernanceParameters.proposal_deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 30, // 51: penumbra.core.component.governance.v1alpha1.GenesisContent.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters + 67, // 52: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.chain_params:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters + 68, // 53: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.community_pool_params:type_name -> penumbra.core.component.community_pool.v1alpha1.CommunityPoolParameters + 30, // 54: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters + 69, // 55: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.ibc_params:type_name -> penumbra.core.component.ibc.v1alpha1.IbcParameters + 70, // 56: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.stake_params:type_name -> penumbra.core.component.stake.v1alpha1.StakeParameters + 71, // 57: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.fee_params:type_name -> penumbra.core.component.fee.v1alpha1.FeeParameters + 72, // 58: penumbra.core.component.governance.v1alpha1.ChangedAppParameters.distributions_params:type_name -> penumbra.core.component.distributions.v1alpha1.DistributionsParameters + 32, // 59: penumbra.core.component.governance.v1alpha1.ChangedAppParametersSet.old:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters + 32, // 60: penumbra.core.component.governance.v1alpha1.ChangedAppParametersSet.new:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters + 59, // 61: penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartRequest.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 18, // 62: penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse.tally:type_name -> penumbra.core.component.governance.v1alpha1.Tally + 59, // 63: penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 8, // 64: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote + 73, // 65: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView + 8, // 66: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote + 17, // 67: penumbra.core.component.governance.v1alpha1.ProposalState.Finished.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome + 17, // 68: penumbra.core.component.governance.v1alpha1.ProposalState.Claimed.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome + 46, // 69: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Failed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn + 46, // 70: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn + 32, // 71: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.old_parameters:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters + 32, // 72: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.new_parameters:type_name -> penumbra.core.component.governance.v1alpha1.ChangedAppParameters + 74, // 73: penumbra.core.component.governance.v1alpha1.Proposal.CommunityPoolSpend.transaction_plan:type_name -> google.protobuf.Any + 20, // 74: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:input_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoRequest + 26, // 75: penumbra.core.component.governance.v1alpha1.QueryService.ProposalList:input_type -> penumbra.core.component.governance.v1alpha1.ProposalListRequest + 22, // 76: penumbra.core.component.governance.v1alpha1.QueryService.ProposalData:input_type -> penumbra.core.component.governance.v1alpha1.ProposalDataRequest + 38, // 77: penumbra.core.component.governance.v1alpha1.QueryService.NextProposalId:input_type -> penumbra.core.component.governance.v1alpha1.NextProposalIdRequest + 28, // 78: penumbra.core.component.governance.v1alpha1.QueryService.ValidatorVotes:input_type -> penumbra.core.component.governance.v1alpha1.ValidatorVotesRequest + 34, // 79: penumbra.core.component.governance.v1alpha1.QueryService.VotingPowerAtProposalStart:input_type -> penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartRequest + 36, // 80: penumbra.core.component.governance.v1alpha1.QueryService.AllTalliedDelegatorVotesForProposal:input_type -> penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalRequest + 24, // 81: penumbra.core.component.governance.v1alpha1.QueryService.ProposalRateData:input_type -> penumbra.core.component.governance.v1alpha1.ProposalRateDataRequest + 21, // 82: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:output_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoResponse + 27, // 83: penumbra.core.component.governance.v1alpha1.QueryService.ProposalList:output_type -> penumbra.core.component.governance.v1alpha1.ProposalListResponse + 23, // 84: penumbra.core.component.governance.v1alpha1.QueryService.ProposalData:output_type -> penumbra.core.component.governance.v1alpha1.ProposalDataResponse + 39, // 85: penumbra.core.component.governance.v1alpha1.QueryService.NextProposalId:output_type -> penumbra.core.component.governance.v1alpha1.NextProposalIdResponse + 29, // 86: penumbra.core.component.governance.v1alpha1.QueryService.ValidatorVotes:output_type -> penumbra.core.component.governance.v1alpha1.ValidatorVotesResponse + 35, // 87: penumbra.core.component.governance.v1alpha1.QueryService.VotingPowerAtProposalStart:output_type -> penumbra.core.component.governance.v1alpha1.VotingPowerAtProposalStartResponse + 37, // 88: penumbra.core.component.governance.v1alpha1.QueryService.AllTalliedDelegatorVotesForProposal:output_type -> penumbra.core.component.governance.v1alpha1.AllTalliedDelegatorVotesForProposalResponse + 25, // 89: penumbra.core.component.governance.v1alpha1.QueryService.ProposalRateData:output_type -> penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse + 82, // [82:90] is the sub-list for method output_type + 74, // [74:82] is the sub-list for method input_type + 74, // [74:74] is the sub-list for extension type_name + 74, // [74:74] is the sub-list for extension extendee + 0, // [0:74] is the sub-list for field type_name } func init() { file_penumbra_core_component_governance_v1alpha1_governance_proto_init() } @@ -5037,6 +5173,30 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { return nil } } + file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Proposal_FreezeIbcClient); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Proposal_UnfreezeIbcClient); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[9].OneofWrappers = []interface{}{ (*DelegatorVoteView_Visible_)(nil), @@ -5059,7 +5219,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDesc, NumEnums: 1, - NumMessages: 54, + NumMessages: 56, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto b/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto index 790c69e3d7..7980cc3b20 100644 --- a/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto +++ b/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto @@ -246,6 +246,8 @@ message Proposal { ParameterChange parameter_change = 7; CommunityPoolSpend community_pool_spend = 8; UpgradePlan upgrade_plan = 9; + FreezeIbcClient freeze_ibc_client = 10; + UnfreezeIbcClient unfreeze_ibc_client = 11; // A signaling proposal is meant to register a vote on-chain, but does not have an automatic // effect when passed. @@ -295,6 +297,16 @@ message Proposal { message UpgradePlan { uint64 height = 1; } + + // Freeze an existing IBC client. + message FreezeIbcClient { + string client_id = 1; + } + + // Unfreeze an existing IBC client. + message UnfreezeIbcClient { + string client_id = 1; + } } // Query operations for the governance component. From 05c47a205eb8d460be2018d3549bf92aa41c62d2 Mon Sep 17 00:00:00 2001 From: elizabeth Date: Fri, 5 Jan 2024 15:14:35 -0500 Subject: [PATCH 58/84] fix consensus_state ibc grpc impl --- .../core/component/ibc/src/component/rpc/client_query.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/core/component/ibc/src/component/rpc/client_query.rs b/crates/core/component/ibc/src/component/rpc/client_query.rs index 380cece0bc..15e31f72b1 100644 --- a/crates/core/component/ibc/src/component/rpc/client_query.rs +++ b/crates/core/component/ibc/src/component/rpc/client_query.rs @@ -125,7 +125,14 @@ impl ClientQuery for IbcQuery { let snapshot = self.0.latest_snapshot(); let client_id = ClientId::from_str(&request.get_ref().client_id) .map_err(|e| tonic::Status::invalid_argument(format!("invalid client id: {e}")))?; - let height = get_latest_verified_height(&snapshot, &client_id).await?; + let height = if request.get_ref().latest_height { + get_latest_verified_height(&snapshot, &client_id).await? + } else { + Height { + revision_number: request.get_ref().revision_number, + revision_height: request.get_ref().revision_height, + } + }; let (cs_opt, proof) = snapshot .get_with_proof( From 082042ba8803b02ad9c461a184b2ed3fc7a5f54e Mon Sep 17 00:00:00 2001 From: Ava Howell Date: Tue, 2 Jan 2024 19:17:39 -0800 Subject: [PATCH 59/84] pcli: use a default timeout height for ibc withdrawals --- .../bin/pcli/src/command/query/ibc_query.rs | 3 +- crates/bin/pcli/src/command/tx.rs | 74 ++++++++++++++++++- 2 files changed, 73 insertions(+), 4 deletions(-) diff --git a/crates/bin/pcli/src/command/query/ibc_query.rs b/crates/bin/pcli/src/command/query/ibc_query.rs index b825a9dbbc..aedf05f393 100644 --- a/crates/bin/pcli/src/command/query/ibc_query.rs +++ b/crates/bin/pcli/src/command/query/ibc_query.rs @@ -117,7 +117,8 @@ impl IbcCmd { IbcCmd::Channel { port, channel_id } => { // TODO channel lookup should be updated to use the ibc query logic. // https://docs.rs/ibc-proto/0.36.1/ibc_proto/ibc/core/channel/v1/query_client/struct.QueryClient.html#method.channel - let key = format!("channelEnds/ports/{port}/channels/channel-{channel_id}"); + let key = + format!("ibc-data/channelEnds/ports/{port}/channels/channel-{channel_id}"); let value = client .key_value(KeyValueRequest { key, diff --git a/crates/bin/pcli/src/command/tx.rs b/crates/bin/pcli/src/command/tx.rs index c3d3750619..24fdefdfe2 100644 --- a/crates/bin/pcli/src/command/tx.rs +++ b/crates/bin/pcli/src/command/tx.rs @@ -9,7 +9,16 @@ use std::{ use anyhow::{Context, Result}; use ark_ff::UniformRand; use decaf377::{Fq, Fr}; +use ibc_proto::ibc::core::client::v1::{ + query_client::QueryClient as IbcClientQueryClient, QueryClientStateRequest, +}; +use ibc_proto::ibc::core::connection::v1::query_client::QueryClient as IbcConnectionQueryClient; +use ibc_proto::ibc::core::{ + channel::v1::{query_client::QueryClient as IbcChannelQueryClient, QueryChannelRequest}, + connection::v1::QueryConnectionRequest, +}; use ibc_types::core::{channel::ChannelId, client::Height as IbcHeight}; +use ibc_types::lightclients::tendermint::client_state::ClientState as TendermintClientState; use rand_core::OsRng; use regex::Regex; @@ -179,8 +188,8 @@ pub enum TxCmd { /// height, e.g. `5-1000000` means "chain revision 5, block height of 1000000". /// You must know the chain id of the counterparty chain beforehand, e.g. `osmosis-testnet-5`, /// to know the revision number. - #[clap(long, default_value = "0-0", display_order = 100)] - timeout_height: IbcHeight, + #[clap(long, display_order = 100)] + timeout_height: Option, /// Timestamp, specified in epoch time, after which the withdrawal will be considered /// invalid if not already relayed. #[clap(long, default_value = "0", display_order = 150)] @@ -842,13 +851,72 @@ impl TxCmd { .full_viewing_key .ephemeral_address(OsRng, AddressIndex::from(*source)); + let timeout_height = match timeout_height { + Some(h) => h.clone(), + None => { + // look up the height for the counterparty and add 2 days of block time + // (assuming 10 seconds per block) to it + + // look up the client state from the channel by looking up channel id -> connection id -> client state + let mut ibc_channel_client = + IbcChannelQueryClient::new(app.pd_channel().await?); + + let req = QueryChannelRequest { + port_id: "transfer".to_string(), + channel_id: format!("channel-{}", channel), + }; + + let channel = ibc_channel_client + .channel(req) + .await? + .into_inner() + .channel + .ok_or_else(|| anyhow::anyhow!("channel not found"))?; + + let connection_id = channel.connection_hops[0].clone(); + + let mut ibc_connection_client = + IbcConnectionQueryClient::new(app.pd_channel().await?); + + let req = QueryConnectionRequest { + connection_id: connection_id.clone(), + }; + let connection = ibc_connection_client + .connection(req) + .await? + .into_inner() + .connection + .ok_or_else(|| anyhow::anyhow!("connection not found"))?; + + let mut ibc_client_client = + IbcClientQueryClient::new(app.pd_channel().await?); + let req = QueryClientStateRequest { + client_id: connection.client_id, + }; + let client_state = ibc_client_client + .client_state(req) + .await? + .into_inner() + .client_state + .ok_or_else(|| anyhow::anyhow!("client state not found"))?; + + let tm_client_state = TendermintClientState::try_from(client_state)?; + + let last_update_height = tm_client_state.latest_height; + + IbcHeight { + revision_number: last_update_height.revision_number, + revision_height: last_update_height.revision_height + 87400, + } + } + }; + // get the current time on the local machine let current_time_u64_ms = SystemTime::now() .duration_since(UNIX_EPOCH) .expect("Time went backwards") .as_nanos() as u64; - let timeout_height = *timeout_height; let mut timeout_timestamp = *timeout_timestamp; if timeout_timestamp == 0u64 { // add 2 days to current time From 6e9ad0a71a4f0738a05f1b060631c067b46ae9c5 Mon Sep 17 00:00:00 2001 From: Ava Howell Date: Fri, 5 Jan 2024 13:46:48 -0800 Subject: [PATCH 60/84] pcli: fix timeout_n_blocks in ics20 withdraw --- crates/bin/pcli/src/command/tx.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/bin/pcli/src/command/tx.rs b/crates/bin/pcli/src/command/tx.rs index 24fdefdfe2..581c942eb6 100644 --- a/crates/bin/pcli/src/command/tx.rs +++ b/crates/bin/pcli/src/command/tx.rs @@ -904,9 +904,12 @@ impl TxCmd { let last_update_height = tm_client_state.latest_height; + // 10 seconds per block, 2 days + let timeout_n_blocks = ((24 * 60 * 60) / 10) * 2; + IbcHeight { revision_number: last_update_height.revision_number, - revision_height: last_update_height.revision_height + 87400, + revision_height: last_update_height.revision_height + timeout_n_blocks, } } }; From 37b1eabf916edc7e95e03d36e2d3fcb9ccd7eeaf Mon Sep 17 00:00:00 2001 From: Ava Howell Date: Fri, 5 Jan 2024 13:47:26 -0800 Subject: [PATCH 61/84] pcli: use PortId::transfer() in ics20 withdraw --- crates/bin/pcli/src/command/tx.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/crates/bin/pcli/src/command/tx.rs b/crates/bin/pcli/src/command/tx.rs index 581c942eb6..ce955caa43 100644 --- a/crates/bin/pcli/src/command/tx.rs +++ b/crates/bin/pcli/src/command/tx.rs @@ -17,7 +17,10 @@ use ibc_proto::ibc::core::{ channel::v1::{query_client::QueryClient as IbcChannelQueryClient, QueryChannelRequest}, connection::v1::QueryConnectionRequest, }; -use ibc_types::core::{channel::ChannelId, client::Height as IbcHeight}; +use ibc_types::core::{ + channel::{ChannelId, PortId}, + client::Height as IbcHeight, +}; use ibc_types::lightclients::tendermint::client_state::ClientState as TendermintClientState; use rand_core::OsRng; use regex::Regex; @@ -862,7 +865,7 @@ impl TxCmd { IbcChannelQueryClient::new(app.pd_channel().await?); let req = QueryChannelRequest { - port_id: "transfer".to_string(), + port_id: PortId::transfer().to_string(), channel_id: format!("channel-{}", channel), }; From 4d4ae0197a1315fdb02bda6d40b044e35c838fe8 Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Fri, 5 Jan 2024 15:12:03 -0800 Subject: [PATCH 62/84] ci: cargo check all targets As of #3579 we can now enable `cargo check --all-targets` to ensure that even benchmarks are included in `cargo check`. Closes #3543. --- .github/workflows/rust.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 9d98b9de58..37062e81ff 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -16,9 +16,7 @@ jobs: - name: Load rust cache uses: astriaorg/buildjet-rust-cache@v2.5.1 - name: Run cargo check, failing on warnings - # The benchmarks don't pass lint; soon! - # run: cargo check --release --all-targets - run: cargo check --release + run: cargo check --release --all-targets env: # The `-D warnings` option causes an error on warnings; # we must duplicate the rustflags from `.cargo/config.toml`. From c8c7b41480524c64cd9ed521115b16ee6cf54590 Mon Sep 17 00:00:00 2001 From: Tal Derei Date: Sat, 6 Jan 2024 16:39:53 -0800 Subject: [PATCH 63/84] fix failing wasm building --- crates/wasm/tests/test_build.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/wasm/tests/test_build.rs b/crates/wasm/tests/test_build.rs index 2fb23bbbc7..4d2a2c7d73 100644 --- a/crates/wasm/tests/test_build.rs +++ b/crates/wasm/tests/test_build.rs @@ -61,7 +61,7 @@ mod tests { serde_wasm_bindgen::to_value(&nullifier_derivation_key).unwrap(); let swap_key_js: JsValue = serde_wasm_bindgen::to_value(&swap_key).unwrap(); let swap_claim_key_js: JsValue = serde_wasm_bindgen::to_value(&swap_claim_key).unwrap(); - let undelegate_claim_key_js: JsValue = serde_wasm_bindgen::to_value(&convert_key).unwrap(); + let convert_key_js: JsValue = serde_wasm_bindgen::to_value(&convert_key).unwrap(); // Dynamically load the proving keys at runtime for each key type. load_proving_key(spend_key_js, "spend").expect("can load spend key"); @@ -72,8 +72,7 @@ mod tests { .expect("can load nullifier derivation key"); load_proving_key(swap_key_js, "swap").expect("can load swap key"); load_proving_key(swap_claim_key_js, "swap_claim").expect("can load swap claim key"); - load_proving_key(undelegate_claim_key_js, "undelegate_claim") - .expect("can load undelegate claim key"); + load_proving_key(convert_key_js, "convert").expect("can load convert key"); // Define database parameters. #[derive(Clone, Debug, Serialize, Deserialize)] @@ -165,7 +164,9 @@ mod tests { "height_spent": "0", "position": "3204061134848", "source": { - "inner": "oJ9Bo9v22srtUmKdTAMVwPOuGumWE2cAuBbZHci8B1I=" + "transaction": { + "id": "oJ9Bo9v22srtUmKdTAMVwPOuGumWE2cAuBbZHci8B1I=" + } } } "#; From d82f2a9cf769247874ecdcd52907c2df81127475 Mon Sep 17 00:00:00 2001 From: hattizai <150505746+hattizai@users.noreply.github.com> Date: Tue, 9 Jan 2024 01:09:09 +0800 Subject: [PATCH 64/84] chore: fix docs typos (#3587) * Update extension.md Signed-off-by: hattizai <150505746+hattizai@users.noreply.github.com> * fix typos in governance.md Signed-off-by: hattizai <150505746+hattizai@users.noreply.github.com> * fix typos in ideal.md Signed-off-by: hattizai <150505746+hattizai@users.noreply.github.com> * fix typos in sender-receiver.md Signed-off-by: hattizai <150505746+hattizai@users.noreply.github.com> * fix typos in threshold-encryption.md Signed-off-by: hattizai <150505746+hattizai@users.noreply.github.com> --------- Signed-off-by: hattizai <150505746+hattizai@users.noreply.github.com> --- docs/guide/src/extension.md | 2 +- docs/guide/src/pcli/governance.md | 4 ++-- .../src/crypto/flow-encryption/threshold-encryption.md | 4 ++-- docs/protocol/src/crypto/flow/ideal.md | 2 +- docs/protocol/src/crypto/fmd/sender-receiver.md | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/guide/src/extension.md b/docs/guide/src/extension.md index 2cc267c4dc..f4acb5b945 100644 --- a/docs/guide/src/extension.md +++ b/docs/guide/src/extension.md @@ -30,7 +30,7 @@ recent testnet: diff --git a/docs/guide/src/pcli/governance.md b/docs/guide/src/pcli/governance.md index 0596cba343..e10bbc9a5c 100644 --- a/docs/guide/src/pcli/governance.md +++ b/docs/guide/src/pcli/governance.md @@ -98,9 +98,9 @@ slashed (but regardless of whether it passes or fails), the deposit will then be proposer at the end of voting. From the proposer's point of view, the lifecycle of a proposal begins when it is -_submitted_ and ends when it the deposit is _claimed_. During the voting period, the proposer may +_submitted_ and ends when the deposit is _claimed_. During the voting period, the proposer may also optionally _withdraw_ the proposal, which prevents it from passing, but does not prevent it -from being slashed. This is usually used when a proposal has been superceded by a revised +from being slashed. This is usually used when a proposal has been superseded by a revised alternative. diff --git a/docs/protocol/src/crypto/flow-encryption/threshold-encryption.md b/docs/protocol/src/crypto/flow-encryption/threshold-encryption.md index 2400580367..e39cbed3d9 100644 --- a/docs/protocol/src/crypto/flow-encryption/threshold-encryption.md +++ b/docs/protocol/src/crypto/flow-encryption/threshold-encryption.md @@ -160,7 +160,7 @@ ciphertext ($c_i$). To aggregate a given $v_e, v_e'$, simply add each limb: $$v_{agg} = v_e + v_e' = [c_0+c_0', c_1+c_1', c_2+c_2', c_3+c_3'] = \cdots = v_q + v_q' = v + v'$$ -This holds due to the homomorphic property of ElGamal cipertexts. +This holds due to the homomorphic property of ElGamal ciphertexts. The block producer aggregates every $v_{ei}$, producing a public transcript of the aggregation. The transcript can then be publicly validated by any validator @@ -250,7 +250,7 @@ where $\lambda_{i}$ is the lagrange coefficient (for x=0) at $i$, defined by $$\lambda_{0,i} = \prod_{n \in S, n \neq i} \frac{n}{n - i}$$ -where $S$ is the set of all participant indicies. +where $S$ is the set of all participant indices. Then, compute the resulting decryption by taking diff --git a/docs/protocol/src/crypto/flow/ideal.md b/docs/protocol/src/crypto/flow/ideal.md index fd7e0ee2d6..b1ff556e0c 100644 --- a/docs/protocol/src/crypto/flow/ideal.md +++ b/docs/protocol/src/crypto/flow/ideal.md @@ -149,7 +149,7 @@ participants (decryptors) must be able to verify that counterparty participants (other decryptors) are contributing to the DKG honestly, without the use of a trusted dealer. This can be achieved using something similar to [Feldman's Verifiable Secret Sharing][feldman] protocol, where each participant shares a -commitment to their share which is visable to all other participants. In +commitment to their share which is visible to all other participants. In addition, our DKG must be able to tolerate *rogue-key attacks*: that is, it must tolerate the instance where a validator maliciously chooses their share based on the value of the other validator's shares in order to cancel out other diff --git a/docs/protocol/src/crypto/fmd/sender-receiver.md b/docs/protocol/src/crypto/fmd/sender-receiver.md index 88dd05532f..3056c89367 100644 --- a/docs/protocol/src/crypto/fmd/sender-receiver.md +++ b/docs/protocol/src/crypto/fmd/sender-receiver.md @@ -72,7 +72,7 @@ R-FMD constructions in the original paper. Unlike R-FMD, the false positive rate is set by the sender, so `CreateClue` takes both the false positive rate $p$ and the receiver's clue key. Because the -false postive rate is set by the sender, there is no separation of capability +false positive rate is set by the sender, there is no separation of capability between the root key and a detection key, so `KeyGen` outputs a clue key and a detection key, and `Extract` disappears. @@ -94,4 +94,4 @@ Retrieval_][omr] paper of Zeyu Liu and Eran Tromer; we `CreateClue` and `Examine rather than `Flag` and `Test` flag ciphertexts. [macaroons]: https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/41892.pdf -[omr]: https://eprint.iacr.org/2021/1256 \ No newline at end of file +[omr]: https://eprint.iacr.org/2021/1256 From 7eb856ffd35146e178ac22c9cca0f502a1f6b92b Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Mon, 8 Jan 2024 13:41:32 -0800 Subject: [PATCH 65/84] docs: update guide to recommend v0.64.2 See https://github.com/penumbra-zone/penumbra/releases/tag/v0.64.2 Since the point release was made on a feature branch, we must manually update the version listed in the docs, so that the deploys from "main" stay accurate. --- docs/guide/src/penumbra_version.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/src/penumbra_version.md b/docs/guide/src/penumbra_version.md index 4f4dd1c80e..d3f7666d8a 100644 --- a/docs/guide/src/penumbra_version.md +++ b/docs/guide/src/penumbra_version.md @@ -1 +1 @@ -v0.64.1 +v0.64.2 From 315ffc1d69b2ee175c76c4529434ce0080941e0b Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Mon, 8 Jan 2024 14:37:04 -0800 Subject: [PATCH 66/84] chore: add testnet allocation for @cratelyn --- testnets/base_addresses.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/testnets/base_addresses.txt b/testnets/base_addresses.txt index 1953088899..fd548df35b 100644 --- a/testnets/base_addresses.txt +++ b/testnets/base_addresses.txt @@ -9,3 +9,4 @@ penumbra169w7gexlfa9m7gsa3vmwyfpu92j0yxawmlkt06g3qg5ta29czwzepzqp0d0nl324jgcjrc6 penumbra10as9rd2ny8w6v70sx4cetrph9twy5vu4ystjz6ae0uuutjamfztl2649vdufmya02a6r0907ywuxkhz3uve6thaf5et2jhnx97k0h0t07ad9pdhawls7wzklrktefzwwvrxtsn penumbra1ks9t4vrp9alvk9yfapyu75hjf7p3wva76t0dz9a902zlp8vuyn0q9j2a72pu9j0uxmg356xstqpmafkj28ktx37l4lzq25nmgdeay5ls00yky2pgladnr5z7u3ftav7lw9vnre penumbra147mfall0zr6am5r45qkwht7xqqrdsp50czde7empv7yq2nk3z8yyfh9k9520ddgswkmzar22vhz9dwtuem7uxw0qytfpv7lk3q9dp8ccaw2fn5c838rfackazmgf3ahh09cxmz +penumbra183uj3sh6d22j6mguu3vlpfcp87lh93jfzn3ucehfk2j4ek07jnwelznq2k8jk200gwrnyyvttexay2u638l7s6dhnh7vec3wscyefslswnhwd44ywqfxzxd4wdt8eqxy8st7k0 From 25cee51c05a4add65ee8e5fc90ca147cd757a342 Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Mon, 8 Jan 2024 14:39:01 -0800 Subject: [PATCH 67/84] chore: update chain id for testnet 65 Refs #3554. --- testnets/065-deimos/allocations.csv | 127 ++++++++++++++++++++++++++++ testnets/065-deimos/validators.json | 34 ++++++++ testnets/base_allocations.csv | 6 ++ 3 files changed, 167 insertions(+) create mode 100644 testnets/065-deimos/allocations.csv create mode 100644 testnets/065-deimos/validators.json diff --git a/testnets/065-deimos/allocations.csv b/testnets/065-deimos/allocations.csv new file mode 100644 index 0000000000..d53665a4af --- /dev/null +++ b/testnets/065-deimos/allocations.csv @@ -0,0 +1,127 @@ +amount,denom,address +1_000_000__000_000,upenumbra,penumbra1tj9s0dh8ymphnw2qgrva57wpcmpr38e9a8w05t5c8dyynr7dt58hgnare7tunqyuryc7yag084rqxrsrj9yx8uk9yhs8lmg64hl993wn3rphlvan3paxdd6suyhwnpkd6cwzes +20_000,gm,penumbra1tj9s0dh8ymphnw2qgrva57wpcmpr38e9a8w05t5c8dyynr7dt58hgnare7tunqyuryc7yag084rqxrsrj9yx8uk9yhs8lmg64hl993wn3rphlvan3paxdd6suyhwnpkd6cwzes +20_000,gn,penumbra1tj9s0dh8ymphnw2qgrva57wpcmpr38e9a8w05t5c8dyynr7dt58hgnare7tunqyuryc7yag084rqxrsrj9yx8uk9yhs8lmg64hl993wn3rphlvan3paxdd6suyhwnpkd6cwzes +10_000,pizza,penumbra1tj9s0dh8ymphnw2qgrva57wpcmpr38e9a8w05t5c8dyynr7dt58hgnare7tunqyuryc7yag084rqxrsrj9yx8uk9yhs8lmg64hl993wn3rphlvan3paxdd6suyhwnpkd6cwzes +100,cube,penumbra1tj9s0dh8ymphnw2qgrva57wpcmpr38e9a8w05t5c8dyynr7dt58hgnare7tunqyuryc7yag084rqxrsrj9yx8uk9yhs8lmg64hl993wn3rphlvan3paxdd6suyhwnpkd6cwzes +500_000,test_usd,penumbra1tj9s0dh8ymphnw2qgrva57wpcmpr38e9a8w05t5c8dyynr7dt58hgnare7tunqyuryc7yag084rqxrsrj9yx8uk9yhs8lmg64hl993wn3rphlvan3paxdd6suyhwnpkd6cwzes +1_000_000__000_000,upenumbra,penumbra12ts5g469dpjdcn2wmdkz25nng6snxkuxumfnmygtrp2fm6776zjw7r35y2j7s07h8368a4kr3c904w8cjgpm6v3ysaj6gh930z7fwlqq9kvjewsy9fgamzxyj874kgu5uvcshg +20_000,gm,penumbra12ts5g469dpjdcn2wmdkz25nng6snxkuxumfnmygtrp2fm6776zjw7r35y2j7s07h8368a4kr3c904w8cjgpm6v3ysaj6gh930z7fwlqq9kvjewsy9fgamzxyj874kgu5uvcshg +20_000,gn,penumbra12ts5g469dpjdcn2wmdkz25nng6snxkuxumfnmygtrp2fm6776zjw7r35y2j7s07h8368a4kr3c904w8cjgpm6v3ysaj6gh930z7fwlqq9kvjewsy9fgamzxyj874kgu5uvcshg +10_000,pizza,penumbra12ts5g469dpjdcn2wmdkz25nng6snxkuxumfnmygtrp2fm6776zjw7r35y2j7s07h8368a4kr3c904w8cjgpm6v3ysaj6gh930z7fwlqq9kvjewsy9fgamzxyj874kgu5uvcshg +100,cube,penumbra12ts5g469dpjdcn2wmdkz25nng6snxkuxumfnmygtrp2fm6776zjw7r35y2j7s07h8368a4kr3c904w8cjgpm6v3ysaj6gh930z7fwlqq9kvjewsy9fgamzxyj874kgu5uvcshg +500_000,test_usd,penumbra12ts5g469dpjdcn2wmdkz25nng6snxkuxumfnmygtrp2fm6776zjw7r35y2j7s07h8368a4kr3c904w8cjgpm6v3ysaj6gh930z7fwlqq9kvjewsy9fgamzxyj874kgu5uvcshg +1_000_000__000_000,upenumbra,penumbra19zz058ttl8vhsypztc0gyl9yfs7jcn3906kgd3pzeh944klh8vf2ttx7qvscxwtuecw92cy6n55ttjn482q7ufpzwj5yem9xcvecrd2zc6vgctxzc3k7mnpg0lk8vved00e3g0 +20_000,gm,penumbra19zz058ttl8vhsypztc0gyl9yfs7jcn3906kgd3pzeh944klh8vf2ttx7qvscxwtuecw92cy6n55ttjn482q7ufpzwj5yem9xcvecrd2zc6vgctxzc3k7mnpg0lk8vved00e3g0 +20_000,gn,penumbra19zz058ttl8vhsypztc0gyl9yfs7jcn3906kgd3pzeh944klh8vf2ttx7qvscxwtuecw92cy6n55ttjn482q7ufpzwj5yem9xcvecrd2zc6vgctxzc3k7mnpg0lk8vved00e3g0 +10_000,pizza,penumbra19zz058ttl8vhsypztc0gyl9yfs7jcn3906kgd3pzeh944klh8vf2ttx7qvscxwtuecw92cy6n55ttjn482q7ufpzwj5yem9xcvecrd2zc6vgctxzc3k7mnpg0lk8vved00e3g0 +100,cube,penumbra19zz058ttl8vhsypztc0gyl9yfs7jcn3906kgd3pzeh944klh8vf2ttx7qvscxwtuecw92cy6n55ttjn482q7ufpzwj5yem9xcvecrd2zc6vgctxzc3k7mnpg0lk8vved00e3g0 +500_000,test_usd,penumbra19zz058ttl8vhsypztc0gyl9yfs7jcn3906kgd3pzeh944klh8vf2ttx7qvscxwtuecw92cy6n55ttjn482q7ufpzwj5yem9xcvecrd2zc6vgctxzc3k7mnpg0lk8vved00e3g0 +1_000_000__000_000,upenumbra,penumbra1qvqr8cvqyf4pwrl6svw9kj8eypf3fuunrcs83m30zxh57y2ytk94gygmtq5k82cjdq9y3mlaa3fwctwpdjr6fxnwuzrsy4ezm0u2tqpzw0sed82shzcr42sju55en26mavjnw4 +20_000,gm,penumbra1qvqr8cvqyf4pwrl6svw9kj8eypf3fuunrcs83m30zxh57y2ytk94gygmtq5k82cjdq9y3mlaa3fwctwpdjr6fxnwuzrsy4ezm0u2tqpzw0sed82shzcr42sju55en26mavjnw4 +20_000,gn,penumbra1qvqr8cvqyf4pwrl6svw9kj8eypf3fuunrcs83m30zxh57y2ytk94gygmtq5k82cjdq9y3mlaa3fwctwpdjr6fxnwuzrsy4ezm0u2tqpzw0sed82shzcr42sju55en26mavjnw4 +10_000,pizza,penumbra1qvqr8cvqyf4pwrl6svw9kj8eypf3fuunrcs83m30zxh57y2ytk94gygmtq5k82cjdq9y3mlaa3fwctwpdjr6fxnwuzrsy4ezm0u2tqpzw0sed82shzcr42sju55en26mavjnw4 +100,cube,penumbra1qvqr8cvqyf4pwrl6svw9kj8eypf3fuunrcs83m30zxh57y2ytk94gygmtq5k82cjdq9y3mlaa3fwctwpdjr6fxnwuzrsy4ezm0u2tqpzw0sed82shzcr42sju55en26mavjnw4 +500_000,test_usd,penumbra1qvqr8cvqyf4pwrl6svw9kj8eypf3fuunrcs83m30zxh57y2ytk94gygmtq5k82cjdq9y3mlaa3fwctwpdjr6fxnwuzrsy4ezm0u2tqpzw0sed82shzcr42sju55en26mavjnw4 +1_000_000__000_000,upenumbra,penumbra1djxk3jzq5d3ga63vut39gdr9lh57yp34pu79jnjmjna3mmxuqaf476e7ar9je0hfn35cpuu4s7l9vae4gfd4773zepygwed5pfgdad26pvzd6qqaur4czes0cl5ku7jjvhx0e0 +20_000,gm,penumbra1djxk3jzq5d3ga63vut39gdr9lh57yp34pu79jnjmjna3mmxuqaf476e7ar9je0hfn35cpuu4s7l9vae4gfd4773zepygwed5pfgdad26pvzd6qqaur4czes0cl5ku7jjvhx0e0 +20_000,gn,penumbra1djxk3jzq5d3ga63vut39gdr9lh57yp34pu79jnjmjna3mmxuqaf476e7ar9je0hfn35cpuu4s7l9vae4gfd4773zepygwed5pfgdad26pvzd6qqaur4czes0cl5ku7jjvhx0e0 +10_000,pizza,penumbra1djxk3jzq5d3ga63vut39gdr9lh57yp34pu79jnjmjna3mmxuqaf476e7ar9je0hfn35cpuu4s7l9vae4gfd4773zepygwed5pfgdad26pvzd6qqaur4czes0cl5ku7jjvhx0e0 +100,cube,penumbra1djxk3jzq5d3ga63vut39gdr9lh57yp34pu79jnjmjna3mmxuqaf476e7ar9je0hfn35cpuu4s7l9vae4gfd4773zepygwed5pfgdad26pvzd6qqaur4czes0cl5ku7jjvhx0e0 +500_000,test_usd,penumbra1djxk3jzq5d3ga63vut39gdr9lh57yp34pu79jnjmjna3mmxuqaf476e7ar9je0hfn35cpuu4s7l9vae4gfd4773zepygwed5pfgdad26pvzd6qqaur4czes0cl5ku7jjvhx0e0 +1_000_000__000_000,upenumbra,penumbra1f5qra6dk8pmp0m2s42sq4qsxthjp6mmcpj3rjwrn74getpmwhrgzhe545fhz6eew2gdcpn2ee0j7fdm4whxl8ux6p5jz6g5fz72u4pzd4z26jnxeasvsvwapx2lvhxw8uy7dvw +20_000,gm,penumbra1f5qra6dk8pmp0m2s42sq4qsxthjp6mmcpj3rjwrn74getpmwhrgzhe545fhz6eew2gdcpn2ee0j7fdm4whxl8ux6p5jz6g5fz72u4pzd4z26jnxeasvsvwapx2lvhxw8uy7dvw +20_000,gn,penumbra1f5qra6dk8pmp0m2s42sq4qsxthjp6mmcpj3rjwrn74getpmwhrgzhe545fhz6eew2gdcpn2ee0j7fdm4whxl8ux6p5jz6g5fz72u4pzd4z26jnxeasvsvwapx2lvhxw8uy7dvw +10_000,pizza,penumbra1f5qra6dk8pmp0m2s42sq4qsxthjp6mmcpj3rjwrn74getpmwhrgzhe545fhz6eew2gdcpn2ee0j7fdm4whxl8ux6p5jz6g5fz72u4pzd4z26jnxeasvsvwapx2lvhxw8uy7dvw +100,cube,penumbra1f5qra6dk8pmp0m2s42sq4qsxthjp6mmcpj3rjwrn74getpmwhrgzhe545fhz6eew2gdcpn2ee0j7fdm4whxl8ux6p5jz6g5fz72u4pzd4z26jnxeasvsvwapx2lvhxw8uy7dvw +500_000,test_usd,penumbra1f5qra6dk8pmp0m2s42sq4qsxthjp6mmcpj3rjwrn74getpmwhrgzhe545fhz6eew2gdcpn2ee0j7fdm4whxl8ux6p5jz6g5fz72u4pzd4z26jnxeasvsvwapx2lvhxw8uy7dvw +1_000_000__000_000,upenumbra,penumbra18dms48wvudc7qljl6zjq48hyuvxxvhm2se2zltpjndpnn5c092mwych7uvs0xztpc7q0e2j7s89nyfxyj2pmu50zafvhwq5x4prm49ax6c7txmvjjdkgu9c8u0nhyqgrsmfn2c +20_000,gm,penumbra18dms48wvudc7qljl6zjq48hyuvxxvhm2se2zltpjndpnn5c092mwych7uvs0xztpc7q0e2j7s89nyfxyj2pmu50zafvhwq5x4prm49ax6c7txmvjjdkgu9c8u0nhyqgrsmfn2c +20_000,gn,penumbra18dms48wvudc7qljl6zjq48hyuvxxvhm2se2zltpjndpnn5c092mwych7uvs0xztpc7q0e2j7s89nyfxyj2pmu50zafvhwq5x4prm49ax6c7txmvjjdkgu9c8u0nhyqgrsmfn2c +10_000,pizza,penumbra18dms48wvudc7qljl6zjq48hyuvxxvhm2se2zltpjndpnn5c092mwych7uvs0xztpc7q0e2j7s89nyfxyj2pmu50zafvhwq5x4prm49ax6c7txmvjjdkgu9c8u0nhyqgrsmfn2c +100,cube,penumbra18dms48wvudc7qljl6zjq48hyuvxxvhm2se2zltpjndpnn5c092mwych7uvs0xztpc7q0e2j7s89nyfxyj2pmu50zafvhwq5x4prm49ax6c7txmvjjdkgu9c8u0nhyqgrsmfn2c +500_000,test_usd,penumbra18dms48wvudc7qljl6zjq48hyuvxxvhm2se2zltpjndpnn5c092mwych7uvs0xztpc7q0e2j7s89nyfxyj2pmu50zafvhwq5x4prm49ax6c7txmvjjdkgu9c8u0nhyqgrsmfn2c +1_000_000__000_000,upenumbra,penumbra169w7gexlfa9m7gsa3vmwyfpu92j0yxawmlkt06g3qg5ta29czwzepzqp0d0nl324jgcjrc6fy0kmqhjlureeyjulejug8e2h6zj0kqf0vapwszahqm8swg634extm3837kl59v +20_000,gm,penumbra169w7gexlfa9m7gsa3vmwyfpu92j0yxawmlkt06g3qg5ta29czwzepzqp0d0nl324jgcjrc6fy0kmqhjlureeyjulejug8e2h6zj0kqf0vapwszahqm8swg634extm3837kl59v +20_000,gn,penumbra169w7gexlfa9m7gsa3vmwyfpu92j0yxawmlkt06g3qg5ta29czwzepzqp0d0nl324jgcjrc6fy0kmqhjlureeyjulejug8e2h6zj0kqf0vapwszahqm8swg634extm3837kl59v +10_000,pizza,penumbra169w7gexlfa9m7gsa3vmwyfpu92j0yxawmlkt06g3qg5ta29czwzepzqp0d0nl324jgcjrc6fy0kmqhjlureeyjulejug8e2h6zj0kqf0vapwszahqm8swg634extm3837kl59v +100,cube,penumbra169w7gexlfa9m7gsa3vmwyfpu92j0yxawmlkt06g3qg5ta29czwzepzqp0d0nl324jgcjrc6fy0kmqhjlureeyjulejug8e2h6zj0kqf0vapwszahqm8swg634extm3837kl59v +500_000,test_usd,penumbra169w7gexlfa9m7gsa3vmwyfpu92j0yxawmlkt06g3qg5ta29czwzepzqp0d0nl324jgcjrc6fy0kmqhjlureeyjulejug8e2h6zj0kqf0vapwszahqm8swg634extm3837kl59v +1_000_000__000_000,upenumbra,penumbra10as9rd2ny8w6v70sx4cetrph9twy5vu4ystjz6ae0uuutjamfztl2649vdufmya02a6r0907ywuxkhz3uve6thaf5et2jhnx97k0h0t07ad9pdhawls7wzklrktefzwwvrxtsn +20_000,gm,penumbra10as9rd2ny8w6v70sx4cetrph9twy5vu4ystjz6ae0uuutjamfztl2649vdufmya02a6r0907ywuxkhz3uve6thaf5et2jhnx97k0h0t07ad9pdhawls7wzklrktefzwwvrxtsn +20_000,gn,penumbra10as9rd2ny8w6v70sx4cetrph9twy5vu4ystjz6ae0uuutjamfztl2649vdufmya02a6r0907ywuxkhz3uve6thaf5et2jhnx97k0h0t07ad9pdhawls7wzklrktefzwwvrxtsn +10_000,pizza,penumbra10as9rd2ny8w6v70sx4cetrph9twy5vu4ystjz6ae0uuutjamfztl2649vdufmya02a6r0907ywuxkhz3uve6thaf5et2jhnx97k0h0t07ad9pdhawls7wzklrktefzwwvrxtsn +100,cube,penumbra10as9rd2ny8w6v70sx4cetrph9twy5vu4ystjz6ae0uuutjamfztl2649vdufmya02a6r0907ywuxkhz3uve6thaf5et2jhnx97k0h0t07ad9pdhawls7wzklrktefzwwvrxtsn +500_000,test_usd,penumbra10as9rd2ny8w6v70sx4cetrph9twy5vu4ystjz6ae0uuutjamfztl2649vdufmya02a6r0907ywuxkhz3uve6thaf5et2jhnx97k0h0t07ad9pdhawls7wzklrktefzwwvrxtsn +1_000_000__000_000,upenumbra,penumbra1ks9t4vrp9alvk9yfapyu75hjf7p3wva76t0dz9a902zlp8vuyn0q9j2a72pu9j0uxmg356xstqpmafkj28ktx37l4lzq25nmgdeay5ls00yky2pgladnr5z7u3ftav7lw9vnre +20_000,gm,penumbra1ks9t4vrp9alvk9yfapyu75hjf7p3wva76t0dz9a902zlp8vuyn0q9j2a72pu9j0uxmg356xstqpmafkj28ktx37l4lzq25nmgdeay5ls00yky2pgladnr5z7u3ftav7lw9vnre +20_000,gn,penumbra1ks9t4vrp9alvk9yfapyu75hjf7p3wva76t0dz9a902zlp8vuyn0q9j2a72pu9j0uxmg356xstqpmafkj28ktx37l4lzq25nmgdeay5ls00yky2pgladnr5z7u3ftav7lw9vnre +10_000,pizza,penumbra1ks9t4vrp9alvk9yfapyu75hjf7p3wva76t0dz9a902zlp8vuyn0q9j2a72pu9j0uxmg356xstqpmafkj28ktx37l4lzq25nmgdeay5ls00yky2pgladnr5z7u3ftav7lw9vnre +100,cube,penumbra1ks9t4vrp9alvk9yfapyu75hjf7p3wva76t0dz9a902zlp8vuyn0q9j2a72pu9j0uxmg356xstqpmafkj28ktx37l4lzq25nmgdeay5ls00yky2pgladnr5z7u3ftav7lw9vnre +500_000,test_usd,penumbra1ks9t4vrp9alvk9yfapyu75hjf7p3wva76t0dz9a902zlp8vuyn0q9j2a72pu9j0uxmg356xstqpmafkj28ktx37l4lzq25nmgdeay5ls00yky2pgladnr5z7u3ftav7lw9vnre +1_000_000__000_000,upenumbra,penumbra147mfall0zr6am5r45qkwht7xqqrdsp50czde7empv7yq2nk3z8yyfh9k9520ddgswkmzar22vhz9dwtuem7uxw0qytfpv7lk3q9dp8ccaw2fn5c838rfackazmgf3ahh09cxmz +20_000,gm,penumbra147mfall0zr6am5r45qkwht7xqqrdsp50czde7empv7yq2nk3z8yyfh9k9520ddgswkmzar22vhz9dwtuem7uxw0qytfpv7lk3q9dp8ccaw2fn5c838rfackazmgf3ahh09cxmz +20_000,gn,penumbra147mfall0zr6am5r45qkwht7xqqrdsp50czde7empv7yq2nk3z8yyfh9k9520ddgswkmzar22vhz9dwtuem7uxw0qytfpv7lk3q9dp8ccaw2fn5c838rfackazmgf3ahh09cxmz +10_000,pizza,penumbra147mfall0zr6am5r45qkwht7xqqrdsp50czde7empv7yq2nk3z8yyfh9k9520ddgswkmzar22vhz9dwtuem7uxw0qytfpv7lk3q9dp8ccaw2fn5c838rfackazmgf3ahh09cxmz +100,cube,penumbra147mfall0zr6am5r45qkwht7xqqrdsp50czde7empv7yq2nk3z8yyfh9k9520ddgswkmzar22vhz9dwtuem7uxw0qytfpv7lk3q9dp8ccaw2fn5c838rfackazmgf3ahh09cxmz +500_000,test_usd,penumbra147mfall0zr6am5r45qkwht7xqqrdsp50czde7empv7yq2nk3z8yyfh9k9520ddgswkmzar22vhz9dwtuem7uxw0qytfpv7lk3q9dp8ccaw2fn5c838rfackazmgf3ahh09cxmz +1_000_000__000_000,upenumbra,penumbra183uj3sh6d22j6mguu3vlpfcp87lh93jfzn3ucehfk2j4ek07jnwelznq2k8jk200gwrnyyvttexay2u638l7s6dhnh7vec3wscyefslswnhwd44ywqfxzxd4wdt8eqxy8st7k0 +20_000,gm,penumbra183uj3sh6d22j6mguu3vlpfcp87lh93jfzn3ucehfk2j4ek07jnwelznq2k8jk200gwrnyyvttexay2u638l7s6dhnh7vec3wscyefslswnhwd44ywqfxzxd4wdt8eqxy8st7k0 +20_000,gn,penumbra183uj3sh6d22j6mguu3vlpfcp87lh93jfzn3ucehfk2j4ek07jnwelznq2k8jk200gwrnyyvttexay2u638l7s6dhnh7vec3wscyefslswnhwd44ywqfxzxd4wdt8eqxy8st7k0 +10_000,pizza,penumbra183uj3sh6d22j6mguu3vlpfcp87lh93jfzn3ucehfk2j4ek07jnwelznq2k8jk200gwrnyyvttexay2u638l7s6dhnh7vec3wscyefslswnhwd44ywqfxzxd4wdt8eqxy8st7k0 +100,cube,penumbra183uj3sh6d22j6mguu3vlpfcp87lh93jfzn3ucehfk2j4ek07jnwelznq2k8jk200gwrnyyvttexay2u638l7s6dhnh7vec3wscyefslswnhwd44ywqfxzxd4wdt8eqxy8st7k0 +500_000,test_usd,penumbra183uj3sh6d22j6mguu3vlpfcp87lh93jfzn3ucehfk2j4ek07jnwelznq2k8jk200gwrnyyvttexay2u638l7s6dhnh7vec3wscyefslswnhwd44ywqfxzxd4wdt8eqxy8st7k0 +5_000_000__000_000,upenumbra,penumbra1xq2e9x7uhfzezwunvazdamlxepf4jr5htsuqnzlsahuayyqxjjwg9lk0aytwm6wfj3jy29rv2kdpen57903s8wxv3jmqwj6m6v5jgn6y2cypfd03rke652k8wmavxra7e9wkrg +50_000,gm,penumbra1xq2e9x7uhfzezwunvazdamlxepf4jr5htsuqnzlsahuayyqxjjwg9lk0aytwm6wfj3jy29rv2kdpen57903s8wxv3jmqwj6m6v5jgn6y2cypfd03rke652k8wmavxra7e9wkrg +50_000,gn,penumbra1xq2e9x7uhfzezwunvazdamlxepf4jr5htsuqnzlsahuayyqxjjwg9lk0aytwm6wfj3jy29rv2kdpen57903s8wxv3jmqwj6m6v5jgn6y2cypfd03rke652k8wmavxra7e9wkrg +25_000,pizza,penumbra1xq2e9x7uhfzezwunvazdamlxepf4jr5htsuqnzlsahuayyqxjjwg9lk0aytwm6wfj3jy29rv2kdpen57903s8wxv3jmqwj6m6v5jgn6y2cypfd03rke652k8wmavxra7e9wkrg +250,cube,penumbra1xq2e9x7uhfzezwunvazdamlxepf4jr5htsuqnzlsahuayyqxjjwg9lk0aytwm6wfj3jy29rv2kdpen57903s8wxv3jmqwj6m6v5jgn6y2cypfd03rke652k8wmavxra7e9wkrg +1_000_000,test_usd,penumbra1xq2e9x7uhfzezwunvazdamlxepf4jr5htsuqnzlsahuayyqxjjwg9lk0aytwm6wfj3jy29rv2kdpen57903s8wxv3jmqwj6m6v5jgn6y2cypfd03rke652k8wmavxra7e9wkrg +10_000,nala,penumbra1xq2e9x7uhfzezwunvazdamlxepf4jr5htsuqnzlsahuayyqxjjwg9lk0aytwm6wfj3jy29rv2kdpen57903s8wxv3jmqwj6m6v5jgn6y2cypfd03rke652k8wmavxra7e9wkrg +5_000_000__000_000,upenumbra,penumbra1mflr95lhj0vjr86uyffkmxg6hjamjs7rrcykwgnyt8lcz0a6xqzh0xz78hpnq3x70s8cnu4cnyqq2wgkt9nthcc3k8scf4wlraccdmkr6wyzsap88t0du2dlv5xclgkmwmwnct +50_000,gm,penumbra1mflr95lhj0vjr86uyffkmxg6hjamjs7rrcykwgnyt8lcz0a6xqzh0xz78hpnq3x70s8cnu4cnyqq2wgkt9nthcc3k8scf4wlraccdmkr6wyzsap88t0du2dlv5xclgkmwmwnct +50_000,gn,penumbra1mflr95lhj0vjr86uyffkmxg6hjamjs7rrcykwgnyt8lcz0a6xqzh0xz78hpnq3x70s8cnu4cnyqq2wgkt9nthcc3k8scf4wlraccdmkr6wyzsap88t0du2dlv5xclgkmwmwnct +25_000,pizza,penumbra1mflr95lhj0vjr86uyffkmxg6hjamjs7rrcykwgnyt8lcz0a6xqzh0xz78hpnq3x70s8cnu4cnyqq2wgkt9nthcc3k8scf4wlraccdmkr6wyzsap88t0du2dlv5xclgkmwmwnct +250,cube,penumbra1mflr95lhj0vjr86uyffkmxg6hjamjs7rrcykwgnyt8lcz0a6xqzh0xz78hpnq3x70s8cnu4cnyqq2wgkt9nthcc3k8scf4wlraccdmkr6wyzsap88t0du2dlv5xclgkmwmwnct +1_000_000,test_usd,penumbra1mflr95lhj0vjr86uyffkmxg6hjamjs7rrcykwgnyt8lcz0a6xqzh0xz78hpnq3x70s8cnu4cnyqq2wgkt9nthcc3k8scf4wlraccdmkr6wyzsap88t0du2dlv5xclgkmwmwnct +10_000,nala,penumbra1mflr95lhj0vjr86uyffkmxg6hjamjs7rrcykwgnyt8lcz0a6xqzh0xz78hpnq3x70s8cnu4cnyqq2wgkt9nthcc3k8scf4wlraccdmkr6wyzsap88t0du2dlv5xclgkmwmwnct +5_000_000__000_000,upenumbra,penumbra1jdgsqxnqqhqwjc6j3lhm4qnqz4gu02j87p4v0uj95ur9xdtym9acnj6p6ykqx89crmj0gw8r6fl4xh4la2yxyks9czl4lvqsxm9e5u86gdus0fh9hqxvg8aq47cw9fv8l2vh34 +50_000,gm,penumbra1jdgsqxnqqhqwjc6j3lhm4qnqz4gu02j87p4v0uj95ur9xdtym9acnj6p6ykqx89crmj0gw8r6fl4xh4la2yxyks9czl4lvqsxm9e5u86gdus0fh9hqxvg8aq47cw9fv8l2vh34 +50_000,gn,penumbra1jdgsqxnqqhqwjc6j3lhm4qnqz4gu02j87p4v0uj95ur9xdtym9acnj6p6ykqx89crmj0gw8r6fl4xh4la2yxyks9czl4lvqsxm9e5u86gdus0fh9hqxvg8aq47cw9fv8l2vh34 +25_000,pizza,penumbra1jdgsqxnqqhqwjc6j3lhm4qnqz4gu02j87p4v0uj95ur9xdtym9acnj6p6ykqx89crmj0gw8r6fl4xh4la2yxyks9czl4lvqsxm9e5u86gdus0fh9hqxvg8aq47cw9fv8l2vh34 +250,cube,penumbra1jdgsqxnqqhqwjc6j3lhm4qnqz4gu02j87p4v0uj95ur9xdtym9acnj6p6ykqx89crmj0gw8r6fl4xh4la2yxyks9czl4lvqsxm9e5u86gdus0fh9hqxvg8aq47cw9fv8l2vh34 +1_000_000,test_usd,penumbra1jdgsqxnqqhqwjc6j3lhm4qnqz4gu02j87p4v0uj95ur9xdtym9acnj6p6ykqx89crmj0gw8r6fl4xh4la2yxyks9czl4lvqsxm9e5u86gdus0fh9hqxvg8aq47cw9fv8l2vh34 +10_000,nala,penumbra1jdgsqxnqqhqwjc6j3lhm4qnqz4gu02j87p4v0uj95ur9xdtym9acnj6p6ykqx89crmj0gw8r6fl4xh4la2yxyks9czl4lvqsxm9e5u86gdus0fh9hqxvg8aq47cw9fv8l2vh34 +5_000_000__000_000,upenumbra,penumbra1k20526f5je6c3mftpuu7p7mn3tr3p84x4qgm2nla9czwae9awse6mqsvn8qgr83y3cnhh7wkwv0s29ycs9r4p6lr5eeee0emquun8v7qlt7lt8w7ck3ukl5ctnufhzwmj00utn +50_000,gm,penumbra1k20526f5je6c3mftpuu7p7mn3tr3p84x4qgm2nla9czwae9awse6mqsvn8qgr83y3cnhh7wkwv0s29ycs9r4p6lr5eeee0emquun8v7qlt7lt8w7ck3ukl5ctnufhzwmj00utn +50_000,gn,penumbra1k20526f5je6c3mftpuu7p7mn3tr3p84x4qgm2nla9czwae9awse6mqsvn8qgr83y3cnhh7wkwv0s29ycs9r4p6lr5eeee0emquun8v7qlt7lt8w7ck3ukl5ctnufhzwmj00utn +25_000,pizza,penumbra1k20526f5je6c3mftpuu7p7mn3tr3p84x4qgm2nla9czwae9awse6mqsvn8qgr83y3cnhh7wkwv0s29ycs9r4p6lr5eeee0emquun8v7qlt7lt8w7ck3ukl5ctnufhzwmj00utn +250,cube,penumbra1k20526f5je6c3mftpuu7p7mn3tr3p84x4qgm2nla9czwae9awse6mqsvn8qgr83y3cnhh7wkwv0s29ycs9r4p6lr5eeee0emquun8v7qlt7lt8w7ck3ukl5ctnufhzwmj00utn +1_000_000,test_usd,penumbra1k20526f5je6c3mftpuu7p7mn3tr3p84x4qgm2nla9czwae9awse6mqsvn8qgr83y3cnhh7wkwv0s29ycs9r4p6lr5eeee0emquun8v7qlt7lt8w7ck3ukl5ctnufhzwmj00utn +10_000,nala,penumbra1k20526f5je6c3mftpuu7p7mn3tr3p84x4qgm2nla9czwae9awse6mqsvn8qgr83y3cnhh7wkwv0s29ycs9r4p6lr5eeee0emquun8v7qlt7lt8w7ck3ukl5ctnufhzwmj00utn +10_000_000__000_000,upenumbra,penumbra1rqcd3hfvkvc04c4c9vc0ac87lh4y0z8l28k4xp6d0cnd5jc6f6k0neuzp6zdwtpwyfpswtdzv9jzqtpjn5t6wh96pfx3flq2dhqgc42u7c06kj57dl39w2xm6tg0wh4zc8kjjk +10_000_000,gm,penumbra1rqcd3hfvkvc04c4c9vc0ac87lh4y0z8l28k4xp6d0cnd5jc6f6k0neuzp6zdwtpwyfpswtdzv9jzqtpjn5t6wh96pfx3flq2dhqgc42u7c06kj57dl39w2xm6tg0wh4zc8kjjk +10_000_000,gn,penumbra1rqcd3hfvkvc04c4c9vc0ac87lh4y0z8l28k4xp6d0cnd5jc6f6k0neuzp6zdwtpwyfpswtdzv9jzqtpjn5t6wh96pfx3flq2dhqgc42u7c06kj57dl39w2xm6tg0wh4zc8kjjk +10_000_000,pizza,penumbra1rqcd3hfvkvc04c4c9vc0ac87lh4y0z8l28k4xp6d0cnd5jc6f6k0neuzp6zdwtpwyfpswtdzv9jzqtpjn5t6wh96pfx3flq2dhqgc42u7c06kj57dl39w2xm6tg0wh4zc8kjjk +10_000_000,cube,penumbra1rqcd3hfvkvc04c4c9vc0ac87lh4y0z8l28k4xp6d0cnd5jc6f6k0neuzp6zdwtpwyfpswtdzv9jzqtpjn5t6wh96pfx3flq2dhqgc42u7c06kj57dl39w2xm6tg0wh4zc8kjjk +10_000_000,test_usd,penumbra1rqcd3hfvkvc04c4c9vc0ac87lh4y0z8l28k4xp6d0cnd5jc6f6k0neuzp6zdwtpwyfpswtdzv9jzqtpjn5t6wh96pfx3flq2dhqgc42u7c06kj57dl39w2xm6tg0wh4zc8kjjk +10_000_000,test_btc,penumbra1rqcd3hfvkvc04c4c9vc0ac87lh4y0z8l28k4xp6d0cnd5jc6f6k0neuzp6zdwtpwyfpswtdzv9jzqtpjn5t6wh96pfx3flq2dhqgc42u7c06kj57dl39w2xm6tg0wh4zc8kjjk +10_000_000,test_eth,penumbra1rqcd3hfvkvc04c4c9vc0ac87lh4y0z8l28k4xp6d0cnd5jc6f6k0neuzp6zdwtpwyfpswtdzv9jzqtpjn5t6wh96pfx3flq2dhqgc42u7c06kj57dl39w2xm6tg0wh4zc8kjjk +10_000_000,test_atom,penumbra1rqcd3hfvkvc04c4c9vc0ac87lh4y0z8l28k4xp6d0cnd5jc6f6k0neuzp6zdwtpwyfpswtdzv9jzqtpjn5t6wh96pfx3flq2dhqgc42u7c06kj57dl39w2xm6tg0wh4zc8kjjk +10_000_000,test_osmo,penumbra1rqcd3hfvkvc04c4c9vc0ac87lh4y0z8l28k4xp6d0cnd5jc6f6k0neuzp6zdwtpwyfpswtdzv9jzqtpjn5t6wh96pfx3flq2dhqgc42u7c06kj57dl39w2xm6tg0wh4zc8kjjk +10_000_000__000_000,upenumbra,penumbra105shuajmml02qgfwmxz7rqqcjwu8tzjdyd3u75za35cj0se3pv5ssmxlv9qc86hawtae35whfst78g30z9xhyxvh8vrz433rlvslzg5675rwr8rcz7g6pszmc5tkm63u6kqa3f +10_000_000,gm,penumbra105shuajmml02qgfwmxz7rqqcjwu8tzjdyd3u75za35cj0se3pv5ssmxlv9qc86hawtae35whfst78g30z9xhyxvh8vrz433rlvslzg5675rwr8rcz7g6pszmc5tkm63u6kqa3f +10_000_000,gn,penumbra105shuajmml02qgfwmxz7rqqcjwu8tzjdyd3u75za35cj0se3pv5ssmxlv9qc86hawtae35whfst78g30z9xhyxvh8vrz433rlvslzg5675rwr8rcz7g6pszmc5tkm63u6kqa3f +10_000_000,pizza,penumbra105shuajmml02qgfwmxz7rqqcjwu8tzjdyd3u75za35cj0se3pv5ssmxlv9qc86hawtae35whfst78g30z9xhyxvh8vrz433rlvslzg5675rwr8rcz7g6pszmc5tkm63u6kqa3f +10_000_000,cube,penumbra105shuajmml02qgfwmxz7rqqcjwu8tzjdyd3u75za35cj0se3pv5ssmxlv9qc86hawtae35whfst78g30z9xhyxvh8vrz433rlvslzg5675rwr8rcz7g6pszmc5tkm63u6kqa3f +10_000_000,test_usd,penumbra105shuajmml02qgfwmxz7rqqcjwu8tzjdyd3u75za35cj0se3pv5ssmxlv9qc86hawtae35whfst78g30z9xhyxvh8vrz433rlvslzg5675rwr8rcz7g6pszmc5tkm63u6kqa3f +10_000_000,test_btc,penumbra105shuajmml02qgfwmxz7rqqcjwu8tzjdyd3u75za35cj0se3pv5ssmxlv9qc86hawtae35whfst78g30z9xhyxvh8vrz433rlvslzg5675rwr8rcz7g6pszmc5tkm63u6kqa3f +10_000_000,test_eth,penumbra105shuajmml02qgfwmxz7rqqcjwu8tzjdyd3u75za35cj0se3pv5ssmxlv9qc86hawtae35whfst78g30z9xhyxvh8vrz433rlvslzg5675rwr8rcz7g6pszmc5tkm63u6kqa3f +10_000_000,test_atom,penumbra105shuajmml02qgfwmxz7rqqcjwu8tzjdyd3u75za35cj0se3pv5ssmxlv9qc86hawtae35whfst78g30z9xhyxvh8vrz433rlvslzg5675rwr8rcz7g6pszmc5tkm63u6kqa3f +10_000_000,test_osmo,penumbra105shuajmml02qgfwmxz7rqqcjwu8tzjdyd3u75za35cj0se3pv5ssmxlv9qc86hawtae35whfst78g30z9xhyxvh8vrz433rlvslzg5675rwr8rcz7g6pszmc5tkm63u6kqa3f +100,gm,penumbra147mfall0zr6am5r45qkwht7xqqrdsp50czde7empv7yq2nk3z8yyfh9k9520ddgswkmzar22vhz9dwtuem7uxw0qytfpv7lk3q9dp8ccaw2fn5c838rfackazmgf3ahh09cxmz +501_000,test_usd,penumbra147mfall0zr6am5r45qkwht7xqqrdsp50czde7empv7yq2nk3z8yyfh9k9520ddgswkmzar22vhz9dwtuem7uxw0qytfpv7lk3q9dp8ccaw2fn5c838rfackazmgf3ahh09cxmz +1,cube,penumbra147mfall0zr6am5r45qkwht7xqqrdsp50czde7empv7yq2nk3z8yyfh9k9520ddgswkmzar22vhz9dwtuem7uxw0qytfpv7lk3q9dp8ccaw2fn5c838rfackazmgf3ahh09cxmz +2_000__000_000,upenumbra,penumbra147mfall0zr6am5r45qkwht7xqqrdsp50czde7empv7yq2nk3z8yyfh9k9520ddgswkmzar22vhz9dwtuem7uxw0qytfpv7lk3q9dp8ccaw2fn5c838rfackazmgf3ahh09cxmz +1_000,test_usd,penumbra1vmmz304hjlkjq6xv4al5dqumvgk3ek82rneagj07vdqkudjvl6y7zxzr5k6qq24yc7yyyekpu9qm7ef3acg2u8p950hs6hu3e73guq5pfmmvm63qudfx4qmg8h7fdweyw3ektn +1_000__000_000,upenumbra,penumbra1vmmz304hjlkjq6xv4al5dqumvgk3ek82rneagj07vdqkudjvl6y7zxzr5k6qq24yc7yyyekpu9qm7ef3acg2u8p950hs6hu3e73guq5pfmmvm63qudfx4qmg8h7fdweyw3ektn diff --git a/testnets/065-deimos/validators.json b/testnets/065-deimos/validators.json new file mode 100644 index 0000000000..29bdf9f0ce --- /dev/null +++ b/testnets/065-deimos/validators.json @@ -0,0 +1,34 @@ +[ + { + "name": "Penumbra Labs CI 1", + "website": "https://penumbra.zone", + "description": "This is a validator run by Penumbra Labs, using testnets as a public CI", + "funding_streams": [ + [ + 50, + "penumbra1fcy6crf6u4r450k8y4nye43puxet2ytfh7s0dzxsxjk68czej9mp37xv49np0clv4dc8cwg4re0xfs79uwlfehnja4p0revmlek0drezxfse8spg3qc6gux6vyuzuulse7xuxv" + ], + [ + 50, + "penumbra13ahs2s8ms6q0utgetty3zflwteepg87gqm88sqqcdj2mjhhydkykwu6n7dk557x84aa9a6cqhdytw0zk33xjgmuedprrlunc86up6zps8juej9rpuuydjtk7jaxpmrw27gfu9x" + ], + [ + 50, + "penumbra1uw03wyt49u7wm5wgu4nvkdt0v48fdaw5y4az4xlgmnp6ucs6th4xd0zg8wqxwndwfv286ktjwgemyhrxqu0d5qjf8dapr57l3k8yqs09vw9m5ywxsx9hjj2dj4qwnrl2rzxdh9" + ], + [ + 50, + "penumbra1w6em8sdx0467ug9kk0s0sng254tqjfk9gglv6ff7dq2v8arwekevkjte9udzmsj9l83mz74747tj0a49w2vhecxj7ac4upr5c5pvjqhsy7dwn422m8dgdekt7y4lmad026njsv" + ], + [ + 50, + "penumbra1jp4pryqqmh65pq8e7zwk6k2674vwhn4qqphxjk0vukxln0crmp2tdld0mhavuyrspwuajnsk5t5t33u2auxvheunr7qde4l068ez0euvtu08z7rwj6shlh64ndz0wvz7cmu29z" + ], + [ + 50, + "penumbra1hum845ches70c8kp8zfx7nerjwfe653hxsrpgwepwtspcp4jy6ytnxhe5kwn56sku684x6zzqcwp5ycrkee5mmg9kdl3jkr5lqn2xq3kqxvp4d7gwqdue5jznk2ter2teg83gu" + ] + ], + "sequence_number": 0 + } +] \ No newline at end of file diff --git a/testnets/base_allocations.csv b/testnets/base_allocations.csv index d571fef3d2..d53665a4af 100644 --- a/testnets/base_allocations.csv +++ b/testnets/base_allocations.csv @@ -65,6 +65,12 @@ amount,denom,address 10_000,pizza,penumbra147mfall0zr6am5r45qkwht7xqqrdsp50czde7empv7yq2nk3z8yyfh9k9520ddgswkmzar22vhz9dwtuem7uxw0qytfpv7lk3q9dp8ccaw2fn5c838rfackazmgf3ahh09cxmz 100,cube,penumbra147mfall0zr6am5r45qkwht7xqqrdsp50czde7empv7yq2nk3z8yyfh9k9520ddgswkmzar22vhz9dwtuem7uxw0qytfpv7lk3q9dp8ccaw2fn5c838rfackazmgf3ahh09cxmz 500_000,test_usd,penumbra147mfall0zr6am5r45qkwht7xqqrdsp50czde7empv7yq2nk3z8yyfh9k9520ddgswkmzar22vhz9dwtuem7uxw0qytfpv7lk3q9dp8ccaw2fn5c838rfackazmgf3ahh09cxmz +1_000_000__000_000,upenumbra,penumbra183uj3sh6d22j6mguu3vlpfcp87lh93jfzn3ucehfk2j4ek07jnwelznq2k8jk200gwrnyyvttexay2u638l7s6dhnh7vec3wscyefslswnhwd44ywqfxzxd4wdt8eqxy8st7k0 +20_000,gm,penumbra183uj3sh6d22j6mguu3vlpfcp87lh93jfzn3ucehfk2j4ek07jnwelznq2k8jk200gwrnyyvttexay2u638l7s6dhnh7vec3wscyefslswnhwd44ywqfxzxd4wdt8eqxy8st7k0 +20_000,gn,penumbra183uj3sh6d22j6mguu3vlpfcp87lh93jfzn3ucehfk2j4ek07jnwelznq2k8jk200gwrnyyvttexay2u638l7s6dhnh7vec3wscyefslswnhwd44ywqfxzxd4wdt8eqxy8st7k0 +10_000,pizza,penumbra183uj3sh6d22j6mguu3vlpfcp87lh93jfzn3ucehfk2j4ek07jnwelznq2k8jk200gwrnyyvttexay2u638l7s6dhnh7vec3wscyefslswnhwd44ywqfxzxd4wdt8eqxy8st7k0 +100,cube,penumbra183uj3sh6d22j6mguu3vlpfcp87lh93jfzn3ucehfk2j4ek07jnwelznq2k8jk200gwrnyyvttexay2u638l7s6dhnh7vec3wscyefslswnhwd44ywqfxzxd4wdt8eqxy8st7k0 +500_000,test_usd,penumbra183uj3sh6d22j6mguu3vlpfcp87lh93jfzn3ucehfk2j4ek07jnwelznq2k8jk200gwrnyyvttexay2u638l7s6dhnh7vec3wscyefslswnhwd44ywqfxzxd4wdt8eqxy8st7k0 5_000_000__000_000,upenumbra,penumbra1xq2e9x7uhfzezwunvazdamlxepf4jr5htsuqnzlsahuayyqxjjwg9lk0aytwm6wfj3jy29rv2kdpen57903s8wxv3jmqwj6m6v5jgn6y2cypfd03rke652k8wmavxra7e9wkrg 50_000,gm,penumbra1xq2e9x7uhfzezwunvazdamlxepf4jr5htsuqnzlsahuayyqxjjwg9lk0aytwm6wfj3jy29rv2kdpen57903s8wxv3jmqwj6m6v5jgn6y2cypfd03rke652k8wmavxra7e9wkrg 50_000,gn,penumbra1xq2e9x7uhfzezwunvazdamlxepf4jr5htsuqnzlsahuayyqxjjwg9lk0aytwm6wfj3jy29rv2kdpen57903s8wxv3jmqwj6m6v5jgn6y2cypfd03rke652k8wmavxra7e9wkrg From 5ade449bbab907dc5d52004a4eb5d57ffc64c5a3 Mon Sep 17 00:00:00 2001 From: turbocrime Date: Fri, 5 Jan 2024 19:22:54 -0800 Subject: [PATCH 68/84] check string length when TryInto MemoPlaintext --- crates/core/transaction/src/memo.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/crates/core/transaction/src/memo.rs b/crates/core/transaction/src/memo.rs index 809a43f54b..a1490a3c81 100644 --- a/crates/core/transaction/src/memo.rs +++ b/crates/core/transaction/src/memo.rs @@ -8,6 +8,7 @@ use anyhow::anyhow; use decaf377_ka as ka; use penumbra_asset::balance; use penumbra_keys::{ + address::ADDRESS_LEN_BYTES, keys::OutgoingViewingKey, symmetric::{OvkWrappedKey, PayloadKey, PayloadKind, WrappedMemoKey}, Address, @@ -57,6 +58,12 @@ impl TryFrom> for MemoPlaintext { let text = String::from_utf8_lossy(&bytes[80..]) .trim_end_matches(0u8 as char) .to_string(); + if (text).len() > MEMO_LEN_BYTES - ADDRESS_LEN_BYTES { + anyhow::bail!( + "provided memo text exceeds {} bytes", + MEMO_LEN_BYTES - ADDRESS_LEN_BYTES + ); + } Ok(MemoPlaintext { return_address, @@ -222,6 +229,12 @@ impl TryFrom for MemoPlaintext { .return_address .ok_or_else(|| anyhow::anyhow!("message missing return address"))? .try_into()?; + if (msg.text).len() > MEMO_LEN_BYTES - ADDRESS_LEN_BYTES { + anyhow::bail!( + "provided memo text exceeds {} bytes", + MEMO_LEN_BYTES - ADDRESS_LEN_BYTES + ); + } Ok(Self { return_address: sender, text: msg.text, From d9ec252e6717e38425c029050cc58f01f701d488 Mon Sep 17 00:00:00 2001 From: turbocrime Date: Fri, 5 Jan 2024 19:24:38 -0800 Subject: [PATCH 69/84] remove expect from TransactionPlan.effect_hash --- crates/core/transaction/src/plan.rs | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/crates/core/transaction/src/plan.rs b/crates/core/transaction/src/plan.rs index 4e756dfa13..6f786f2461 100644 --- a/crates/core/transaction/src/plan.rs +++ b/crates/core/transaction/src/plan.rs @@ -56,7 +56,7 @@ impl TransactionPlan { /// /// This method is not an [`EffectingData`] impl because it needs an extra input, /// the FVK, to partially construct the transaction. - pub fn effect_hash(&self, fvk: &FullViewingKey) -> EffectHash { + pub fn effect_hash(&self, fvk: &FullViewingKey) -> Result { // This implementation is identical to the one for Transaction, except that we // don't need to actually construct the entire `TransactionBody` with // complete `Action`s, we just need to construct the bodies of the @@ -68,18 +68,10 @@ impl TransactionPlan { let parameters_hash = self.transaction_parameters.effect_hash(); - let memo_hash = self - .memo - .as_ref() - .map(|memo_plan| { - memo_plan - .memo() - .expect("can compute memo ciphertext") - .effect_hash() - }) - // If the memo is not present, use the all-zero hash to record its absence in - // the overall effect hash. - .unwrap_or_default(); + let memo_hash = match self.memo { + Some(ref memo) => memo.memo()?.effect_hash(), + None => EffectHash::default(), + }; let detection_data_hash = self .detection_data @@ -108,7 +100,7 @@ impl TransactionPlan { state.update(action_plan.effect_hash(fvk, &memo_key).as_bytes()); } - EffectHash(state.finalize().as_array().clone()) + Ok(EffectHash(state.finalize().as_array().clone())) } pub fn spend_plans(&self) -> impl Iterator { From c5a1def19610a215f66a781be058300503346ef3 Mon Sep 17 00:00:00 2001 From: turbocrime Date: Fri, 5 Jan 2024 19:25:03 -0800 Subject: [PATCH 70/84] error flow from TransactionPlan effect_hash --- crates/core/app/src/action_handler/actions/submit.rs | 2 +- crates/core/transaction/src/plan/auth.rs | 9 +++++---- crates/custody/src/soft_kms.rs | 2 +- crates/custody/src/threshold/sign.rs | 4 ++-- crates/wasm/src/tx.rs | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/crates/core/app/src/action_handler/actions/submit.rs b/crates/core/app/src/action_handler/actions/submit.rs index 4e020fb700..39f8beeac0 100644 --- a/crates/core/app/src/action_handler/actions/submit.rs +++ b/crates/core/app/src/action_handler/actions/submit.rs @@ -353,7 +353,7 @@ static COMMUNITY_POOL_FULL_VIEWING_KEY: Lazy = Lazy::new(|| { async fn build_community_pool_transaction( transaction_plan: TransactionPlan, ) -> Result { - let effect_hash = transaction_plan.effect_hash(&COMMUNITY_POOL_FULL_VIEWING_KEY); + let effect_hash = transaction_plan.effect_hash(&COMMUNITY_POOL_FULL_VIEWING_KEY)?; transaction_plan.build( &COMMUNITY_POOL_FULL_VIEWING_KEY, &WitnessData { diff --git a/crates/core/transaction/src/plan/auth.rs b/crates/core/transaction/src/plan/auth.rs index 66e64dffd6..9471fadcee 100644 --- a/crates/core/transaction/src/plan/auth.rs +++ b/crates/core/transaction/src/plan/auth.rs @@ -1,3 +1,4 @@ +use anyhow::Result; use penumbra_keys::keys::SpendKey; use rand::{CryptoRng, RngCore}; @@ -11,8 +12,8 @@ impl TransactionPlan { &self, mut rng: R, sk: &SpendKey, - ) -> AuthorizationData { - let effect_hash = self.effect_hash(sk.full_viewing_key()); + ) -> Result { + let effect_hash = self.effect_hash(sk.full_viewing_key())?; let mut spend_auths = Vec::new(); let mut delegator_vote_auths = Vec::new(); @@ -28,10 +29,10 @@ impl TransactionPlan { let auth_sig = rsk.sign(&mut rng, effect_hash.as_ref()); delegator_vote_auths.push(auth_sig); } - AuthorizationData { + Ok(AuthorizationData { effect_hash, spend_auths, delegator_vote_auths, - } + }) } } diff --git a/crates/custody/src/soft_kms.rs b/crates/custody/src/soft_kms.rs index 4faa20e483..bb46604bc0 100644 --- a/crates/custody/src/soft_kms.rs +++ b/crates/custody/src/soft_kms.rs @@ -33,7 +33,7 @@ impl SoftKms { policy.check(request)?; } - Ok(request.plan.authorize(OsRng, &self.config.spend_key)) + Ok(request.plan.authorize(OsRng, &self.config.spend_key)?) } } diff --git a/crates/custody/src/threshold/sign.rs b/crates/custody/src/threshold/sign.rs index 69aee5321c..4375b20a75 100644 --- a/crates/custody/src/threshold/sign.rs +++ b/crates/custody/src/threshold/sign.rs @@ -348,7 +348,7 @@ pub fn coordinator_round2( let reply = CoordinatorRound2 { all_commitments }; let my_round2_reply = follower_round2(config, state.my_round1_state, reply.clone())?; - let effect_hash = state.plan.effect_hash(config.fvk()); + let effect_hash = state.plan.effect_hash(config.fvk())?; let signing_packages = { reply .all_commitments @@ -432,7 +432,7 @@ pub fn follower_round2( state: FollowerState, coordinator: CoordinatorRound2, ) -> Result { - let effect_hash = state.plan.effect_hash(config.fvk()); + let effect_hash = state.plan.effect_hash(config.fvk())?; let signing_packages = coordinator .all_commitments .into_iter() diff --git a/crates/wasm/src/tx.rs b/crates/wasm/src/tx.rs index 6bfeac2301..e2cc3bf3a7 100644 --- a/crates/wasm/src/tx.rs +++ b/crates/wasm/src/tx.rs @@ -79,7 +79,7 @@ pub fn authorize(spend_key_str: &str, transaction_plan: JsValue) -> WasmResult Date: Fri, 5 Jan 2024 21:04:40 -0800 Subject: [PATCH 71/84] update tests --- crates/core/app/src/action_handler/transaction.rs | 4 ++-- crates/core/transaction/src/plan.rs | 4 ++-- crates/custody/src/threshold.rs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/core/app/src/action_handler/transaction.rs b/crates/core/app/src/action_handler/transaction.rs index 2bb6d115d9..a6ea573ec8 100644 --- a/crates/core/app/src/action_handler/transaction.rs +++ b/crates/core/app/src/action_handler/transaction.rs @@ -170,7 +170,7 @@ mod tests { // Build the transaction. let fvk = &test_keys::FULL_VIEWING_KEY; let sk = &test_keys::SPEND_KEY; - let auth_data = plan.authorize(OsRng, sk); + let auth_data = plan.authorize(OsRng, sk)?; let witness_data = WitnessData { anchor: sct.root(), state_commitment_proofs: plan @@ -233,7 +233,7 @@ mod tests { // Build the transaction. let fvk = &test_keys::FULL_VIEWING_KEY; let sk = &test_keys::SPEND_KEY; - let auth_data = plan.authorize(OsRng, sk); + let auth_data = plan.authorize(OsRng, sk)?; let witness_data = WitnessData { anchor: sct.root(), state_commitment_proofs: plan diff --git a/crates/core/transaction/src/plan.rs b/crates/core/transaction/src/plan.rs index 6f786f2461..40b8dcddb4 100644 --- a/crates/core/transaction/src/plan.rs +++ b/crates/core/transaction/src/plan.rs @@ -511,9 +511,9 @@ mod tests { println!("{}", serde_json::to_string_pretty(&plan).unwrap()); - let plan_effect_hash = plan.effect_hash(fvk); + let plan_effect_hash = plan.effect_hash(fvk).unwrap(); - let auth_data = plan.authorize(rng, &sk); + let auth_data = plan.authorize(rng, &sk).unwrap(); let witness_data = WitnessData { anchor: sct.root(), state_commitment_proofs: plan diff --git a/crates/custody/src/threshold.rs b/crates/custody/src/threshold.rs index c33f09b155..4323fe4854 100644 --- a/crates/custody/src/threshold.rs +++ b/crates/custody/src/threshold.rs @@ -579,7 +579,7 @@ mod test { pre_authorizations: Vec::new(), }) .await?; - assert_eq!(plan.effect_hash(&fvk), authorization_data.effect_hash); + assert_eq!(plan.effect_hash(&fvk)?, authorization_data.effect_hash); // The transaction plan only has spends for (randomizer, sig) in plan .spend_plans() From 9cef7890cf7bb31b525d92d1aea1ce625b8392c5 Mon Sep 17 00:00:00 2001 From: Lucas Meier Date: Fri, 5 Jan 2024 16:45:47 -0800 Subject: [PATCH 72/84] Refactor OutputProof to use Public and Private types --- crates/bench/benches/output.rs | 56 ++-- crates/bin/pcli/tests/proof.rs | 66 +++-- .../src/component/action_handler/output.rs | 8 +- .../component/shielded-pool/src/output.rs | 2 +- .../shielded-pool/src/output/plan.rs | 22 +- .../shielded-pool/src/output/proof.rs | 257 ++++++++++-------- 6 files changed, 218 insertions(+), 193 deletions(-) diff --git a/crates/bench/benches/output.rs b/crates/bench/benches/output.rs index ea1d905c34..32ec3220b3 100644 --- a/crates/bench/benches/output.rs +++ b/crates/bench/benches/output.rs @@ -7,32 +7,20 @@ use ark_relations::r1cs::{ use decaf377::{Fq, Fr}; use decaf377_fmd as fmd; use decaf377_ka as ka; -use penumbra_asset::{balance, Balance, Value}; +use penumbra_asset::{Balance, Value}; use penumbra_keys::{keys::Diversifier, Address}; -use penumbra_proof_params::OUTPUT_PROOF_PROVING_KEY; -use penumbra_shielded_pool::{note, Note, OutputCircuit, OutputProof, Rseed}; +use penumbra_proof_params::{DummyWitness, OUTPUT_PROOF_PROVING_KEY}; +use penumbra_shielded_pool::{ + output::{OutputProofPrivate, OutputProofPublic}, + Note, OutputCircuit, OutputProof, Rseed, +}; use criterion::{criterion_group, criterion_main, Criterion}; use rand_core::OsRng; -fn prove( - r: Fq, - s: Fq, - note: Note, - v_blinding: Fr, - balance_commitment: balance::Commitment, - note_commitment: note::StateCommitment, -) { - let _proof = OutputProof::prove( - r, - s, - &OUTPUT_PROOF_PROVING_KEY, - note, - v_blinding, - balance_commitment, - note_commitment, - ) - .expect("can generate proof"); +fn prove(r: Fq, s: Fq, public: OutputProofPublic, private: OutputProofPrivate) { + let _proof = OutputProof::prove(r, s, &OUTPUT_PROOF_PROVING_KEY, public, private) + .expect("can generate proof"); } fn output_proving_time(c: &mut Criterion) { @@ -49,28 +37,28 @@ fn output_proving_time(c: &mut Criterion) { let value_to_send = Value::from_str("1upenumbra").expect("valid value"); let note = Note::from_parts(address, value_to_send, Rseed([1u8; 32])).expect("can make a note"); - let v_blinding = Fr::from(1); - let balance_commitment = (-Balance::from(value_to_send)).commit(v_blinding); + let balance_blinding = Fr::from(1); + let balance_commitment = (-Balance::from(value_to_send)).commit(balance_blinding); let note_commitment = note.commit(); + let public = OutputProofPublic { + balance_commitment, + note_commitment, + }; + let private = OutputProofPrivate { + note, + balance_blinding, + }; + let r = Fq::rand(&mut OsRng); let s = Fq::rand(&mut OsRng); c.bench_function("output proving", |b| { - b.iter(|| { - prove( - r, - s, - note.clone(), - v_blinding, - balance_commitment, - note_commitment, - ) - }) + b.iter(|| prove(r, s, public.clone(), private.clone())) }); // Also print out the number of constraints. - let circuit = OutputCircuit::new(note, v_blinding, balance_commitment); + let circuit = OutputCircuit::with_dummy_witness(); let cs = ConstraintSystem::new_ref(); cs.set_optimization_goal(OptimizationGoal::Constraints); diff --git a/crates/bin/pcli/tests/proof.rs b/crates/bin/pcli/tests/proof.rs index bcc11b686f..ebf3ef8ebe 100644 --- a/crates/bin/pcli/tests/proof.rs +++ b/crates/bin/pcli/tests/proof.rs @@ -24,6 +24,7 @@ use penumbra_proof_params::{ SWAP_PROOF_VERIFICATION_KEY, }; use penumbra_sct::Nullifier; +use penumbra_shielded_pool::output::{OutputProofPrivate, OutputProofPublic}; use penumbra_shielded_pool::Note; use penumbra_shielded_pool::{ NullifierDerivationProof, NullifierDerivationProofPrivate, NullifierDerivationProofPublic, @@ -323,41 +324,46 @@ fn output_proof_parameters_vs_current_output_circuit() { let pk = &*OUTPUT_PROOF_PROVING_KEY; let vk = &*OUTPUT_PROOF_VERIFICATION_KEY; - let mut rng = OsRng; - - let seed_phrase = SeedPhrase::generate(OsRng); - let sk_recipient = SpendKey::from_seed_phrase_bip44(seed_phrase, &Bip44Path::new(0)); - let fvk_recipient = sk_recipient.full_viewing_key(); - let ivk_recipient = fvk_recipient.incoming(); - let (dest, _dtk_d) = ivk_recipient.payment_address(0u32.into()); - - let value_to_send = Value { - amount: 1u64.into(), - asset_id: asset::Cache::with_known_assets() - .get_unit("upenumbra") - .unwrap() - .id(), + let (public, private) = { + let mut rng = OsRng; + + let seed_phrase = SeedPhrase::generate(OsRng); + let sk_recipient = SpendKey::from_seed_phrase_bip44(seed_phrase, &Bip44Path::new(0)); + let fvk_recipient = sk_recipient.full_viewing_key(); + let ivk_recipient = fvk_recipient.incoming(); + let (dest, _dtk_d) = ivk_recipient.payment_address(0u32.into()); + + let value_to_send = Value { + amount: 1u64.into(), + asset_id: asset::Cache::with_known_assets() + .get_unit("upenumbra") + .unwrap() + .id(), + }; + let balance_blinding = Fr::rand(&mut OsRng); + + let note = Note::generate(&mut rng, &dest, value_to_send); + let note_commitment = note.commit(); + let balance_commitment = (-Balance::from(value_to_send)).commit(balance_blinding); + + let public = OutputProofPublic { + balance_commitment, + note_commitment, + }; + let private = OutputProofPrivate { + note, + balance_blinding, + }; + + (public, private) }; - let v_blinding = Fr::rand(&mut OsRng); - - let note = Note::generate(&mut rng, &dest, value_to_send); - let note_commitment = note.commit(); - let balance_commitment = (-Balance::from(value_to_send)).commit(v_blinding); let blinding_r = Fq::rand(&mut OsRng); let blinding_s = Fq::rand(&mut OsRng); - let proof = OutputProof::prove( - blinding_r, - blinding_s, - pk, - note, - v_blinding, - balance_commitment, - note_commitment, - ) - .expect("can create proof"); + let proof = OutputProof::prove(blinding_r, blinding_s, pk, public.clone(), private) + .expect("can create proof"); - let proof_result = proof.verify(vk, balance_commitment, note_commitment); + let proof_result = proof.verify(vk, public); assert!(proof_result.is_ok()); } diff --git a/crates/core/component/shielded-pool/src/component/action_handler/output.rs b/crates/core/component/shielded-pool/src/component/action_handler/output.rs index ec2d35956f..a0fc312da6 100644 --- a/crates/core/component/shielded-pool/src/component/action_handler/output.rs +++ b/crates/core/component/shielded-pool/src/component/action_handler/output.rs @@ -8,7 +8,7 @@ use penumbra_proof_params::OUTPUT_PROOF_VERIFICATION_KEY; use penumbra_proto::StateWriteProto as _; use penumbra_sct::component::SourceContext; -use crate::{component::NoteManager, event, Output}; +use crate::{component::NoteManager, event, output::OutputProofPublic, Output}; #[async_trait] impl ActionHandler for Output { @@ -18,8 +18,10 @@ impl ActionHandler for Output { output.proof.verify( &OUTPUT_PROOF_VERIFICATION_KEY, - output.body.balance_commitment, - output.body.note_payload.note_commitment, + OutputProofPublic { + balance_commitment: output.body.balance_commitment, + note_commitment: output.body.note_payload.note_commitment, + }, )?; Ok(()) diff --git a/crates/core/component/shielded-pool/src/output.rs b/crates/core/component/shielded-pool/src/output.rs index be6ed1c4f7..ae6969c1b1 100644 --- a/crates/core/component/shielded-pool/src/output.rs +++ b/crates/core/component/shielded-pool/src/output.rs @@ -5,5 +5,5 @@ mod view; pub use action::{Body, Output}; pub use plan::OutputPlan; -pub use proof::{OutputCircuit, OutputProof}; +pub use proof::{OutputCircuit, OutputProof, OutputProofPrivate, OutputProofPublic}; pub use view::OutputView; diff --git a/crates/core/component/shielded-pool/src/output/plan.rs b/crates/core/component/shielded-pool/src/output/plan.rs index bea8f7e515..8c0cb2da82 100644 --- a/crates/core/component/shielded-pool/src/output/plan.rs +++ b/crates/core/component/shielded-pool/src/output/plan.rs @@ -11,7 +11,7 @@ use penumbra_proto::{core::component::shielded_pool::v1alpha1 as pb, DomainType} use rand_core::{CryptoRng, RngCore}; use serde::{Deserialize, Serialize}; -use super::{Body, Output, OutputProof}; +use super::{Body, Output, OutputProof, OutputProofPrivate, OutputProofPublic}; use crate::{Note, Rseed}; /// A planned [`Output`](Output). @@ -82,10 +82,14 @@ impl OutputPlan { self.proof_blinding_r, self.proof_blinding_s, &penumbra_proof_params::OUTPUT_PROOF_PROVING_KEY, - note, - self.value_blinding, - balance_commitment, - note_commitment, + OutputProofPublic { + balance_commitment, + note_commitment, + }, + OutputProofPrivate { + note, + balance_blinding: self.value_blinding, + }, ) .expect("can generate ZKOutputProof") } @@ -165,6 +169,8 @@ impl TryFrom for OutputPlan { #[cfg(test)] mod test { + use crate::output::OutputProofPublic; + use super::OutputPlan; use penumbra_asset::Value; use penumbra_keys::{ @@ -200,8 +206,10 @@ mod test { output_proof .verify( &OUTPUT_PROOF_VERIFICATION_KEY, - balance_commitment, - note_commitment, + OutputProofPublic { + balance_commitment, + note_commitment, + }, ) .unwrap(); } diff --git a/crates/core/component/shielded-pool/src/output/proof.rs b/crates/core/component/shielded-pool/src/output/proof.rs index 19e27f72f0..22ae5f7f0c 100644 --- a/crates/core/component/shielded-pool/src/output/proof.rs +++ b/crates/core/component/shielded-pool/src/output/proof.rs @@ -26,6 +26,24 @@ use penumbra_asset::{ }; use penumbra_proof_params::{DummyWitness, VerifyingKeyExt, GROTH16_PROOF_LENGTH_BYTES}; +/// The public input for an [`OutputProof`]. +#[derive(Clone, Debug)] +pub struct OutputProofPublic { + /// A hiding commitment to the balance. + pub balance_commitment: balance::Commitment, + /// + pub note_commitment: note::StateCommitment, +} + +/// The private input for an [`OutputProof`]. +#[derive(Clone, Debug)] +pub struct OutputProofPrivate { + /// The note being created. + pub note: Note, + /// A blinding factor to hide the balance of the transaction. + pub balance_blinding: Fr, +} + /// Public: /// * vcm (value commitment) /// * ncm (note commitment) @@ -42,22 +60,22 @@ pub struct OutputCircuit { /// The note being created. note: Note, /// The blinding factor used for generating the balance commitment. - v_blinding: Fr, + balance_blinding: Fr, // Public inputs /// balance commitment of the new note, - pub balance_commitment: balance::Commitment, + balance_commitment: balance::Commitment, /// note commitment of the new note, - pub note_commitment: note::StateCommitment, + note_commitment: note::StateCommitment, } impl OutputCircuit { - pub fn new(note: Note, v_blinding: Fr, balance_commitment: balance::Commitment) -> Self { + fn new(public: OutputProofPublic, private: OutputProofPrivate) -> Self { Self { - note: note.clone(), - v_blinding, - balance_commitment, - note_commitment: note.commit(), + note: private.note, + balance_blinding: private.balance_blinding, + balance_commitment: public.balance_commitment, + note_commitment: public.note_commitment, } } } @@ -66,8 +84,8 @@ impl ConstraintSynthesizer for OutputCircuit { fn generate_constraints(self, cs: ConstraintSystemRef) -> ark_relations::r1cs::Result<()> { // Witnesses let note_var = note::NoteVar::new_witness(cs.clone(), || Ok(self.note.clone()))?; - let v_blinding_arr: [u8; 32] = self.v_blinding.to_bytes(); - let v_blinding_vars = UInt8::new_witness_vec(cs.clone(), &v_blinding_arr)?; + let balance_blinding_arr: [u8; 32] = self.balance_blinding.to_bytes(); + let balance_blinding_vars = UInt8::new_witness_vec(cs.clone(), &balance_blinding_arr)?; // Public inputs let claimed_note_commitment = @@ -82,7 +100,7 @@ impl ConstraintSynthesizer for OutputCircuit { // Check integrity of balance commitment. let balance_commitment = - BalanceVar::from_negative_value_var(note_var.value()).commit(v_blinding_vars)?; + BalanceVar::from_negative_value_var(note_var.value()).commit(balance_blinding_vars)?; balance_commitment.enforce_equal(&claimed_balance_commitment)?; // Note commitment integrity @@ -111,11 +129,11 @@ impl DummyWitness for OutputCircuit { Rseed([1u8; 32]), ) .expect("can make a note"); - let v_blinding = Fr::from(1); + let balance_blinding = Fr::from(1); OutputCircuit { note: note.clone(), note_commitment: note.commit(), - v_blinding, + balance_blinding, balance_commitment: balance::Commitment(decaf377::basepoint()), } } @@ -132,17 +150,10 @@ impl OutputProof { blinding_r: Fq, blinding_s: Fq, pk: &ProvingKey, - note: Note, - v_blinding: Fr, - balance_commitment: balance::Commitment, - note_commitment: note::StateCommitment, + public: OutputProofPublic, + private: OutputProofPrivate, ) -> anyhow::Result { - let circuit = OutputCircuit { - note, - note_commitment, - v_blinding, - balance_commitment, - }; + let circuit = OutputCircuit::new(public, private); let proof = Groth16::::create_proof_with_reduction( circuit, pk, blinding_r, blinding_s, ) @@ -163,23 +174,27 @@ impl OutputProof { pub fn verify( &self, vk: &PreparedVerifyingKey, - balance_commitment: balance::Commitment, - note_commitment: note::StateCommitment, + public: OutputProofPublic, ) -> anyhow::Result<()> { let proof = Proof::deserialize_compressed_unchecked(&self.0[..]).map_err(|e| anyhow::anyhow!(e))?; let mut public_inputs = Vec::new(); public_inputs.extend( - note_commitment + public + .note_commitment .0 .to_field_elements() .ok_or_else(|| anyhow::anyhow!("note commitment is not a valid field element"))?, ); public_inputs.extend( - balance_commitment.0.to_field_elements().ok_or_else(|| { - anyhow::anyhow!("balance commitment is not a valid field element") - })?, + public + .balance_commitment + .0 + .to_field_elements() + .ok_or_else(|| { + anyhow::anyhow!("balance commitment is not a valid field element") + })?, ); tracing::trace!(?public_inputs); @@ -247,13 +262,12 @@ mod tests { } proptest! { - #![proptest_config(ProptestConfig::with_cases(2))] - #[test] - fn output_proof_happy_path(seed_phrase_randomness in any::<[u8; 32]>(), v_blinding in fr_strategy(), value_amount in 2..200u64) { + #![proptest_config(ProptestConfig::with_cases(2))] + #[test] + fn output_proof_happy_path(seed_phrase_randomness in any::<[u8; 32]>(), balance_blinding in fr_strategy(), value_amount in 2..200u64) { let mut rng = OsRng; let (pk, vk) = generate_prepared_test_parameters::(&mut rng); - let seed_phrase = SeedPhrase::from_randomness(&seed_phrase_randomness); let sk_recipient = SpendKey::from_seed_phrase_bip44(seed_phrase, &Bip44Path::new(0)); let fvk_recipient = sk_recipient.full_viewing_key(); @@ -267,7 +281,10 @@ mod tests { let note = Note::generate(&mut rng, &dest, value_to_send); let note_commitment = note.commit(); - let balance_commitment = (-Balance::from(value_to_send)).commit(v_blinding); + let balance_commitment = (-Balance::from(value_to_send)).commit(balance_blinding); + + let public = OutputProofPublic { balance_commitment, note_commitment }; + let private = OutputProofPrivate { note, balance_blinding}; let blinding_r = Fq::rand(&mut OsRng); let blinding_s = Fq::rand(&mut OsRng); @@ -275,110 +292,114 @@ mod tests { blinding_r, blinding_s, &pk, - note, - v_blinding, - balance_commitment, - note_commitment, + public.clone(), + private ) .expect("can create proof"); let serialized_proof: pb::ZkOutputProof = proof.into(); let deserialized_proof = OutputProof::try_from(serialized_proof).expect("can deserialize proof"); - let proof_result = deserialized_proof.verify(&vk, balance_commitment, note_commitment); + let proof_result = deserialized_proof.verify(&vk, public); assert!(proof_result.is_ok()); } } proptest! { - #![proptest_config(ProptestConfig::with_cases(2))] - #[test] - fn output_proof_verification_note_commitment_integrity_failure(seed_phrase_randomness in any::<[u8; 32]>(), v_blinding in fr_strategy(), value_amount in 2..200u64, note_blinding in fq_strategy()) { - let mut rng = OsRng; - let (pk, vk) = generate_prepared_test_parameters::(&mut rng); - - let seed_phrase = SeedPhrase::from_randomness(&seed_phrase_randomness); - let sk_recipient = SpendKey::from_seed_phrase_bip44(seed_phrase, &Bip44Path::new(0)); - let fvk_recipient = sk_recipient.full_viewing_key(); - let ivk_recipient = fvk_recipient.incoming(); - let (dest, _dtk_d) = ivk_recipient.payment_address(0u32.into()); - - let value_to_send = Value { - amount: value_amount.into(), - asset_id: asset::Cache::with_known_assets().get_unit("upenumbra").unwrap().id(), - }; - - let note = Note::generate(&mut rng, &dest, value_to_send); - let note_commitment = note.commit(); - let balance_commitment = (-Balance::from(value_to_send)).commit(v_blinding); - - let blinding_r = Fq::rand(&mut OsRng); - let blinding_s = Fq::rand(&mut OsRng); - let proof = OutputProof::prove( - blinding_r, - blinding_s, - &pk, - note.clone(), - v_blinding, - balance_commitment, - note_commitment, - ) - .expect("can create proof"); - - let incorrect_note_commitment = note::commitment( - note_blinding, - value_to_send, - note.diversified_generator(), - note.transmission_key_s(), - note.clue_key(), - ); + #![proptest_config(ProptestConfig::with_cases(2))] + #[test] + fn output_proof_verification_note_commitment_integrity_failure(seed_phrase_randomness in any::<[u8; 32]>(), balance_blinding in fr_strategy(), value_amount in 2..200u64, note_blinding in fq_strategy()) { + let mut rng = OsRng; + let (pk, vk) = generate_prepared_test_parameters::(&mut rng); - let proof_result = proof.verify(&vk, balance_commitment, incorrect_note_commitment); + let seed_phrase = SeedPhrase::from_randomness(&seed_phrase_randomness); + let sk_recipient = SpendKey::from_seed_phrase_bip44(seed_phrase, &Bip44Path::new(0)); + let fvk_recipient = sk_recipient.full_viewing_key(); + let ivk_recipient = fvk_recipient.incoming(); + let (dest, _dtk_d) = ivk_recipient.payment_address(0u32.into()); - assert!(proof_result.is_err()); - } + let value_to_send = Value { + amount: value_amount.into(), + asset_id: asset::Cache::with_known_assets().get_unit("upenumbra").unwrap().id(), + }; + + let note = Note::generate(&mut rng, &dest, value_to_send); + let note_commitment = note.commit(); + let balance_commitment = (-Balance::from(value_to_send)).commit(balance_blinding); + + let blinding_r = Fq::rand(&mut OsRng); + let blinding_s = Fq::rand(&mut OsRng); + + let public = OutputProofPublic { balance_commitment, note_commitment }; + let private = OutputProofPrivate { note: note.clone(), balance_blinding}; + + let proof = OutputProof::prove( + blinding_r, + blinding_s, + &pk, + public.clone(), + private + ) + .expect("can create proof"); + + let incorrect_note_commitment = note::commitment( + note_blinding, + value_to_send, + note.diversified_generator(), + note.transmission_key_s(), + note.clue_key(), + ); + + let bad_public = OutputProofPublic { balance_commitment, note_commitment: incorrect_note_commitment }; + + let proof_result = proof.verify(&vk, bad_public); + + assert!(proof_result.is_err()); + } } proptest! { #![proptest_config(ProptestConfig::with_cases(2))] #[test] - fn output_proof_verification_balance_commitment_integrity_failure(seed_phrase_randomness in any::<[u8; 32]>(), v_blinding in fr_strategy(), value_amount in 2..200u64, incorrect_v_blinding in fr_strategy()) { - let mut rng = OsRng; - let (pk, vk) = generate_prepared_test_parameters::(&mut rng); - - let seed_phrase = SeedPhrase::from_randomness(&seed_phrase_randomness); - let sk_recipient = SpendKey::from_seed_phrase_bip44(seed_phrase, &Bip44Path::new(0)); - let fvk_recipient = sk_recipient.full_viewing_key(); - let ivk_recipient = fvk_recipient.incoming(); - let (dest, _dtk_d) = ivk_recipient.payment_address(0u32.into()); - - let value_to_send = Value { - amount: value_amount.into(), - asset_id: asset::Cache::with_known_assets().get_unit("upenumbra").unwrap().id(), - }; - - let note = Note::generate(&mut rng, &dest, value_to_send); - let note_commitment = note.commit(); - let balance_commitment = (-Balance::from(value_to_send)).commit(v_blinding); - - let blinding_r = Fq::rand(&mut OsRng); - let blinding_s = Fq::rand(&mut OsRng); - let proof = OutputProof::prove( - blinding_r, - blinding_s, - &pk, - note, - v_blinding, - balance_commitment, - note_commitment, - ) - .expect("can create proof"); + fn output_proof_verification_balance_commitment_integrity_failure(seed_phrase_randomness in any::<[u8; 32]>(), balance_blinding in fr_strategy(), value_amount in 2..200u64, incorrect_v_blinding in fr_strategy()) { + let mut rng = OsRng; + let (pk, vk) = generate_prepared_test_parameters::(&mut rng); + + let seed_phrase = SeedPhrase::from_randomness(&seed_phrase_randomness); + let sk_recipient = SpendKey::from_seed_phrase_bip44(seed_phrase, &Bip44Path::new(0)); + let fvk_recipient = sk_recipient.full_viewing_key(); + let ivk_recipient = fvk_recipient.incoming(); + let (dest, _dtk_d) = ivk_recipient.payment_address(0u32.into()); - let incorrect_balance_commitment = (-Balance::from(value_to_send)).commit(incorrect_v_blinding); + let value_to_send = Value { + amount: value_amount.into(), + asset_id: asset::Cache::with_known_assets().get_unit("upenumbra").unwrap().id(), + }; - let proof_result = proof.verify(&vk, incorrect_balance_commitment, note_commitment); + let note = Note::generate(&mut rng, &dest, value_to_send); + let note_commitment = note.commit(); + let balance_commitment = (-Balance::from(value_to_send)).commit(balance_blinding); - assert!(proof_result.is_err()); - } + let public = OutputProofPublic { balance_commitment, note_commitment }; + let private = OutputProofPrivate { note, balance_blinding}; + + let blinding_r = Fq::rand(&mut OsRng); + let blinding_s = Fq::rand(&mut OsRng); + let proof = OutputProof::prove( + blinding_r, + blinding_s, + &pk, + public.clone(), + private + ) + .expect("can create proof"); + + let incorrect_balance_commitment = (-Balance::from(value_to_send)).commit(incorrect_v_blinding); + let bad_public = OutputProofPublic { balance_commitment: incorrect_balance_commitment, note_commitment }; + + let proof_result = proof.verify(&vk, bad_public); + + assert!(proof_result.is_err()); } + } } From 7f75e14b329fd6b3d9c286acd0cb8cc1eb298f4e Mon Sep 17 00:00:00 2001 From: Lucas Meier Date: Fri, 5 Jan 2024 19:58:06 -0800 Subject: [PATCH 73/84] Refactor UndelegateClaimProof API to have Public and Private structs --- crates/bin/pcli/tests/proof.rs | 56 +++++++------ .../src/action_handler/undelegate_claim.rs | 9 ++- .../stake/src/undelegate_claim/mod.rs | 2 +- .../stake/src/undelegate_claim/plan.rs | 16 ++-- .../stake/src/undelegate_claim/proof.rs | 78 +++++++++++-------- 5 files changed, 95 insertions(+), 66 deletions(-) diff --git a/crates/bin/pcli/tests/proof.rs b/crates/bin/pcli/tests/proof.rs index ebf3ef8ebe..8c81cc0464 100644 --- a/crates/bin/pcli/tests/proof.rs +++ b/crates/bin/pcli/tests/proof.rs @@ -30,6 +30,7 @@ use penumbra_shielded_pool::{ NullifierDerivationProof, NullifierDerivationProofPrivate, NullifierDerivationProofPublic, OutputProof, SpendProof, SpendProofPrivate, SpendProofPublic, }; +use penumbra_stake::undelegate_claim::{UndelegateClaimProofPrivate, UndelegateClaimProofPublic}; use penumbra_stake::{IdentityKey, Penalty, UnbondingToken, UndelegateClaimProof}; use penumbra_tct as tct; use rand_core::OsRng; @@ -420,36 +421,41 @@ fn undelegate_claim_parameters_vs_current_undelegate_claim_circuit() { let mut rng = OsRng; - let sk = SigningKey::new_from_field(Fr::from(1u8)); - let balance_blinding = Fr::from(1u8); - let value1_amount = 1u64; - let penalty_amount = 1u64; - let validator_identity = IdentityKey((&sk).into()); - let unbonding_amount = Amount::from(value1_amount); - - let start_epoch_index = 1; - let unbonding_token = UnbondingToken::new(validator_identity, start_epoch_index); - let unbonding_id = unbonding_token.id(); - let penalty = Penalty::from_bps_squared(penalty_amount); - let balance = penalty.balance_for_claim(unbonding_id, unbonding_amount); - let balance_commitment = balance.commit(balance_blinding); + let (public, private) = { + let sk = SigningKey::new_from_field(Fr::from(1u8)); + let balance_blinding = Fr::from(1u8); + let value1_amount = 1u64; + let penalty_amount = 1u64; + let validator_identity = IdentityKey((&sk).into()); + let unbonding_amount = Amount::from(value1_amount); + + let start_epoch_index = 1; + let unbonding_token = UnbondingToken::new(validator_identity, start_epoch_index); + let unbonding_id = unbonding_token.id(); + let penalty = Penalty::from_bps_squared(penalty_amount); + let balance = penalty.balance_for_claim(unbonding_id, unbonding_amount); + let balance_commitment = balance.commit(balance_blinding); + + ( + UndelegateClaimProofPublic { + balance_commitment, + unbonding_id, + penalty, + }, + UndelegateClaimProofPrivate { + unbonding_amount, + balance_blinding, + }, + ) + }; let blinding_r = Fq::rand(&mut rng); let blinding_s = Fq::rand(&mut rng); - let proof = UndelegateClaimProof::prove( - blinding_r, - blinding_s, - pk, - unbonding_amount, - balance_blinding, - balance_commitment, - unbonding_id, - penalty, - ) - .expect("can create proof"); + let proof = UndelegateClaimProof::prove(blinding_r, blinding_s, pk, public.clone(), private) + .expect("can create proof"); - let proof_result = proof.verify(vk, balance_commitment, unbonding_id, penalty); + let proof_result = proof.verify(vk, public); assert!(proof_result.is_ok()); } diff --git a/crates/core/component/stake/src/action_handler/undelegate_claim.rs b/crates/core/component/stake/src/action_handler/undelegate_claim.rs index 77d9d88c66..de615231d1 100644 --- a/crates/core/component/stake/src/action_handler/undelegate_claim.rs +++ b/crates/core/component/stake/src/action_handler/undelegate_claim.rs @@ -6,6 +6,7 @@ use cnidarium::{StateRead, StateWrite}; use penumbra_chain::component::StateReadExt; use penumbra_proof_params::CONVERT_PROOF_VERIFICATION_KEY; +use crate::undelegate_claim::UndelegateClaimProofPublic; use crate::UndelegateClaim; use crate::{action_handler::ActionHandler, StateReadExt as _, UnbondingToken}; @@ -18,9 +19,11 @@ impl ActionHandler for UndelegateClaim { self.proof.verify( &CONVERT_PROOF_VERIFICATION_KEY, - self.body.balance_commitment, - unbonding_id, - self.body.penalty, + UndelegateClaimProofPublic { + balance_commitment: self.body.balance_commitment, + unbonding_id, + penalty: self.body.penalty, + }, )?; Ok(()) diff --git a/crates/core/component/stake/src/undelegate_claim/mod.rs b/crates/core/component/stake/src/undelegate_claim/mod.rs index 2f3602f923..7880b7e074 100644 --- a/crates/core/component/stake/src/undelegate_claim/mod.rs +++ b/crates/core/component/stake/src/undelegate_claim/mod.rs @@ -4,4 +4,4 @@ mod proof; pub use action::{UndelegateClaim, UndelegateClaimBody}; pub use plan::UndelegateClaimPlan; -pub use proof::UndelegateClaimProof; +pub use proof::{UndelegateClaimProof, UndelegateClaimProofPrivate, UndelegateClaimProofPublic}; diff --git a/crates/core/component/stake/src/undelegate_claim/plan.rs b/crates/core/component/stake/src/undelegate_claim/plan.rs index dad3a61f04..6eb60dfc93 100644 --- a/crates/core/component/stake/src/undelegate_claim/plan.rs +++ b/crates/core/component/stake/src/undelegate_claim/plan.rs @@ -11,6 +11,8 @@ use crate::{ UndelegateClaimProof, }; +use super::UndelegateClaimProofPublic; + #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(try_from = "pb::UndelegateClaimPlan", into = "pb::UndelegateClaimPlan")] pub struct UndelegateClaimPlan { @@ -56,11 +58,15 @@ impl UndelegateClaimPlan { self.proof_blinding_r, self.proof_blinding_s, &CONVERT_PROOF_PROVING_KEY, - self.unbonding_amount, - self.balance_blinding, - self.balance_commitment(), - self.unbonding_id(), - self.penalty, + UndelegateClaimProofPublic { + balance_commitment: self.balance_commitment(), + unbonding_id: self.unbonding_id(), + penalty: self.penalty, + }, + super::UndelegateClaimProofPrivate { + unbonding_amount: self.unbonding_amount, + balance_blinding: self.balance_blinding, + }, ) .expect("can generate undelegate claim proof") } diff --git a/crates/core/component/stake/src/undelegate_claim/proof.rs b/crates/core/component/stake/src/undelegate_claim/proof.rs index f106d1179d..dfe8b9bb6e 100644 --- a/crates/core/component/stake/src/undelegate_claim/proof.rs +++ b/crates/core/component/stake/src/undelegate_claim/proof.rs @@ -11,6 +11,41 @@ use penumbra_shielded_pool::{ConvertProof, ConvertProofPrivate, ConvertProofPubl use crate::Penalty; +/// The public inputs to an [`UndelegateClaimProof`]. +#[derive(Clone, Debug)] +pub struct UndelegateClaimProofPublic { + pub balance_commitment: balance::Commitment, + pub unbonding_id: asset::Id, + pub penalty: Penalty, +} + +impl From for ConvertProofPublic { + fn from(value: UndelegateClaimProofPublic) -> Self { + Self { + from: value.unbonding_id, + to: *STAKING_TOKEN_ASSET_ID, + rate: value.penalty.kept_rate(), + balance_commitment: value.balance_commitment, + } + } +} + +/// The private inputs to an [`UndelegateClaimProof`]. +#[derive(Clone, Debug)] +pub struct UndelegateClaimProofPrivate { + pub unbonding_amount: Amount, + pub balance_blinding: Fr, +} + +impl From for ConvertProofPrivate { + fn from(value: UndelegateClaimProofPrivate) -> Self { + Self { + amount: value.unbonding_amount, + balance_blinding: value.balance_blinding, + } + } +} + #[derive(Clone, Debug)] pub struct UndelegateClaimProof(ConvertProof); @@ -22,23 +57,10 @@ impl UndelegateClaimProof { blinding_r: Fq, blinding_s: Fq, pk: &ProvingKey, - unbonding_amount: Amount, - balance_blinding: Fr, - balance_commitment: balance::Commitment, - unbonding_id: asset::Id, - penalty: Penalty, + public: UndelegateClaimProofPublic, + private: UndelegateClaimProofPrivate, ) -> anyhow::Result { - let public = ConvertProofPublic { - from: unbonding_id, - to: *STAKING_TOKEN_ASSET_ID, - rate: penalty.kept_rate(), - balance_commitment, - }; - let private = ConvertProofPrivate { - amount: unbonding_amount, - balance_blinding, - }; - let proof = ConvertProof::prove(blinding_r, blinding_s, pk, public, private)?; + let proof = ConvertProof::prove(blinding_r, blinding_s, pk, public.into(), private.into())?; Ok(Self(proof)) } @@ -47,17 +69,9 @@ impl UndelegateClaimProof { pub fn verify( &self, vk: &PreparedVerifyingKey, - balance_commitment: balance::Commitment, - unbonding_id: asset::Id, - penalty: Penalty, + public: UndelegateClaimProofPublic, ) -> anyhow::Result<()> { - let public = ConvertProofPublic { - from: unbonding_id, - to: *STAKING_TOKEN_ASSET_ID, - rate: penalty.kept_rate(), - balance_commitment, - }; - self.0.verify(vk, public) + self.0.verify(vk, public.into()) } } @@ -119,21 +133,21 @@ mod tests { let balance = penalty.balance_for_claim(unbonding_id, unbonding_amount); let balance_commitment = balance.commit(balance_blinding); + let public = UndelegateClaimProofPublic { balance_commitment, unbonding_id, penalty }; + let private = UndelegateClaimProofPrivate { unbonding_amount, balance_blinding }; + let blinding_r = Fq::rand(&mut rng); let blinding_s = Fq::rand(&mut rng); let proof = UndelegateClaimProof::prove( blinding_r, blinding_s, &pk, - unbonding_amount, - balance_blinding, - balance_commitment, - unbonding_id, - penalty + public.clone(), + private ) .expect("can create proof"); - let proof_result = proof.verify(&vk, balance_commitment, unbonding_id, penalty); + let proof_result = proof.verify(&vk, public); assert!(proof_result.is_ok()); } From 40cf9c2535db991ea51deee1551f7b761c2fd12a Mon Sep 17 00:00:00 2001 From: Lucas Meier Date: Mon, 8 Jan 2024 09:32:53 -0800 Subject: [PATCH 74/84] Refactor SwapCircuit to have public and private inputs --- crates/bench/benches/swap.rs | 65 ++++------- crates/bin/pcli/tests/proof.rs | 24 ++-- .../dex/src/component/action_handler/swap.rs | 10 +- crates/core/component/dex/src/swap/plan.rs | 16 ++- crates/core/component/dex/src/swap/proof.rs | 107 ++++++++---------- 5 files changed, 100 insertions(+), 122 deletions(-) diff --git a/crates/bench/benches/swap.rs b/crates/bench/benches/swap.rs index 564f40232e..fcc290ec5a 100644 --- a/crates/bench/benches/swap.rs +++ b/crates/bench/benches/swap.rs @@ -3,41 +3,23 @@ use ark_relations::r1cs::{ ConstraintSynthesizer, ConstraintSystem, OptimizationGoal, SynthesisMode, }; use decaf377::{Fq, Fr}; -use penumbra_asset::{asset, balance, Balance, Value}; +use penumbra_asset::{asset, Balance, Value}; use penumbra_dex::{ - swap::proof::{SwapCircuit, SwapProof}, - swap::SwapPlaintext, + swap::proof::{SwapCircuit, SwapProof, SwapProofPublic}, + swap::{proof::SwapProofPrivate, SwapPlaintext}, TradingPair, }; use penumbra_fee::Fee; use penumbra_keys::keys::{Bip44Path, SeedPhrase, SpendKey}; use penumbra_num::Amount; -use penumbra_proof_params::SWAP_PROOF_PROVING_KEY; -use penumbra_tct as tct; +use penumbra_proof_params::{DummyWitness, SWAP_PROOF_PROVING_KEY}; use criterion::{criterion_group, criterion_main, Criterion}; use rand_core::OsRng; -fn prove( - r: Fq, - s: Fq, - swap_plaintext: SwapPlaintext, - fee_blinding: Fr, - balance_commitment: balance::Commitment, - swap_commitment: tct::StateCommitment, - fee_commitment: balance::Commitment, -) { - let _proof = SwapProof::prove( - r, - s, - &SWAP_PROOF_PROVING_KEY, - swap_plaintext, - fee_blinding, - balance_commitment, - swap_commitment, - fee_commitment, - ) - .expect("can generate proof"); +fn prove(r: Fq, s: Fq, public: SwapProofPublic, private: SwapProofPrivate) { + let _proof = SwapProof::prove(r, s, &SWAP_PROOF_PROVING_KEY, public, private) + .expect("can generate proof"); } fn swap_proving_time(c: &mut Criterion) { @@ -63,7 +45,8 @@ fn swap_proving_time(c: &mut Criterion) { fee, claim_address, ); - let fee_commitment = swap_plaintext.claim_fee.commit(Fr::from(0u64)); + let fee_blinding = Fr::from(0u64); + let fee_commitment = swap_plaintext.claim_fee.commit(fee_blinding); let swap_commitment = swap_plaintext.swap_commitment(); let value_1 = Value { @@ -84,31 +67,25 @@ fn swap_proving_time(c: &mut Criterion) { balance -= value_fee; let balance_commitment = balance.commit(Fr::from(0u64)); + let public = SwapProofPublic { + balance_commitment, + swap_commitment, + fee_commitment, + }; + let private = SwapProofPrivate { + fee_blinding, + swap_plaintext, + }; + let r = Fq::rand(&mut OsRng); let s = Fq::rand(&mut OsRng); c.bench_function("swap proving", |b| { - b.iter(|| { - prove( - r, - s, - swap_plaintext.clone(), - Fr::from(0u64), - balance_commitment, - swap_commitment, - fee_commitment, - ) - }) + b.iter(|| prove(r, s, public.clone(), private.clone())) }); // Also print out the number of constraints. - let circuit = SwapCircuit::new( - swap_plaintext, - Fr::from(0u64), - balance_commitment, - swap_commitment, - fee_commitment, - ); + let circuit = SwapCircuit::with_dummy_witness(); let cs = ConstraintSystem::new_ref(); cs.set_optimization_goal(OptimizationGoal::Constraints); diff --git a/crates/bin/pcli/tests/proof.rs b/crates/bin/pcli/tests/proof.rs index 8c81cc0464..95967b9814 100644 --- a/crates/bin/pcli/tests/proof.rs +++ b/crates/bin/pcli/tests/proof.rs @@ -5,6 +5,7 @@ use ark_ff::UniformRand; use decaf377::{Fq, Fr}; use decaf377_rdsa::{SigningKey, SpendAuth, VerificationKey}; use penumbra_asset::{asset, Balance, Value}; +use penumbra_dex::swap::proof::{SwapProofPrivate, SwapProofPublic}; use penumbra_dex::{ swap::proof::SwapProof, swap::SwapPlaintext, swap_claim::proof::SwapClaimProof, BatchSwapOutputData, TradingPair, @@ -205,21 +206,22 @@ fn swap_proof_parameters_vs_current_swap_circuit() { balance -= value_fee; let balance_commitment = balance.commit(fee_blinding); - let blinding_r = Fq::rand(&mut OsRng); - let blinding_s = Fq::rand(&mut OsRng); - let proof = SwapProof::prove( - blinding_r, - blinding_s, - pk, - swap_plaintext, - fee_blinding, + let public = SwapProofPublic { balance_commitment, swap_commitment, fee_commitment, - ) - .expect("can create proof"); + }; + let private = SwapProofPrivate { + fee_blinding, + swap_plaintext, + }; - let proof_result = proof.verify(vk, balance_commitment, swap_commitment, fee_commitment); + let blinding_r = Fq::rand(&mut OsRng); + let blinding_s = Fq::rand(&mut OsRng); + let proof = SwapProof::prove(blinding_r, blinding_s, pk, public.clone(), private) + .expect("can create proof"); + + let proof_result = proof.verify(vk, public); assert!(proof_result.is_ok()); } diff --git a/crates/core/component/dex/src/component/action_handler/swap.rs b/crates/core/component/dex/src/component/action_handler/swap.rs index a9bca1ca52..0bb3cdb053 100644 --- a/crates/core/component/dex/src/component/action_handler/swap.rs +++ b/crates/core/component/dex/src/component/action_handler/swap.rs @@ -11,7 +11,7 @@ use penumbra_sct::component::SourceContext as _; use crate::{ component::{metrics, StateReadExt, StateWriteExt, SwapManager}, event, - swap::Swap, + swap::{proof::SwapProofPublic, Swap}, }; #[async_trait] @@ -25,9 +25,11 @@ impl ActionHandler for Swap { self.proof.verify( &SWAP_PROOF_VERIFICATION_KEY, - self.balance_commitment_inner(), - self.body.payload.commitment, - self.body.fee_commitment, + SwapProofPublic { + balance_commitment: self.balance_commitment_inner(), + swap_commitment: self.body.payload.commitment, + fee_commitment: self.body.fee_commitment, + }, )?; Ok(()) diff --git a/crates/core/component/dex/src/swap/plan.rs b/crates/core/component/dex/src/swap/plan.rs index 0593bf87d4..00083023e8 100644 --- a/crates/core/component/dex/src/swap/plan.rs +++ b/crates/core/component/dex/src/swap/plan.rs @@ -8,6 +8,8 @@ use penumbra_proto::{penumbra::core::component::dex::v1alpha1 as pb, DomainType} use rand_core::{CryptoRng, RngCore}; use serde::{Deserialize, Serialize}; +use crate::swap::proof::{SwapProofPrivate, SwapProofPublic}; + // TODO: rename action::Body to SwapBody use super::{action as swap, proof::SwapProof, Swap, SwapPlaintext}; @@ -63,11 +65,15 @@ impl SwapPlan { self.proof_blinding_r, self.proof_blinding_s, &SWAP_PROOF_PROVING_KEY, - self.swap_plaintext.clone(), - self.fee_blinding, - balance_commitment, - self.swap_plaintext.swap_commitment(), - self.fee_commitment(), + SwapProofPublic { + balance_commitment, + swap_commitment: self.swap_plaintext.swap_commitment(), + fee_commitment: self.fee_commitment(), + }, + SwapProofPrivate { + fee_blinding: self.fee_blinding, + swap_plaintext: self.swap_plaintext.clone(), + }, ) .expect("can generate ZKSwapProof") } diff --git a/crates/core/component/dex/src/swap/proof.rs b/crates/core/component/dex/src/swap/proof.rs index 08af33bab0..86c207420f 100644 --- a/crates/core/component/dex/src/swap/proof.rs +++ b/crates/core/component/dex/src/swap/proof.rs @@ -31,51 +31,46 @@ use crate::{ use penumbra_proof_params::{DummyWitness, GROTH16_PROOF_LENGTH_BYTES}; -pub struct SwapCircuit { - /// The swap plaintext. - swap_plaintext: SwapPlaintext, - /// The blinding factor for the fee commitment. - fee_blinding: Fr, - /// Balance commitment of the swap. +/// The public inputs to a [`SwapProof`]. +#[derive(Clone, Debug)] +pub struct SwapProofPublic { + /// A commitment to the balance of this transaction. pub balance_commitment: balance::Commitment, - /// Swap commitment. + /// A commitment to the swap. pub swap_commitment: tct::StateCommitment, - /// Balance commitment of the fee. + /// A commitment to the fee that was paid. pub fee_commitment: balance::Commitment, } -impl SwapCircuit { - pub fn new( - swap_plaintext: SwapPlaintext, - fee_blinding: Fr, - balance_commitment: balance::Commitment, - swap_commitment: tct::StateCommitment, - fee_commitment: balance::Commitment, - ) -> Self { - Self { - swap_plaintext, - fee_blinding, - balance_commitment, - swap_commitment, - fee_commitment, - } - } +/// The private inputs to a [`SwapProof`]. +#[derive(Clone, Debug)] +pub struct SwapProofPrivate { + /// A randomizer to make the commitment to the fee hiding. + pub fee_blinding: Fr, + /// All information about the swap. + pub swap_plaintext: SwapPlaintext, +} + +pub struct SwapCircuit { + public: SwapProofPublic, + private: SwapProofPrivate, } impl ConstraintSynthesizer for SwapCircuit { fn generate_constraints(self, cs: ConstraintSystemRef) -> ark_relations::r1cs::Result<()> { // Witnesses let swap_plaintext_var = - SwapPlaintextVar::new_witness(cs.clone(), || Ok(self.swap_plaintext.clone()))?; - let fee_blinding_var = UInt8::new_witness_vec(cs.clone(), &self.fee_blinding.to_bytes())?; + SwapPlaintextVar::new_witness(cs.clone(), || Ok(self.private.swap_plaintext.clone()))?; + let fee_blinding_var = + UInt8::new_witness_vec(cs.clone(), &self.private.fee_blinding.to_bytes())?; // Inputs let claimed_balance_commitment = - BalanceCommitmentVar::new_input(cs.clone(), || Ok(self.balance_commitment))?; + BalanceCommitmentVar::new_input(cs.clone(), || Ok(self.public.balance_commitment))?; let claimed_swap_commitment = - StateCommitmentVar::new_input(cs.clone(), || Ok(self.swap_commitment))?; + StateCommitmentVar::new_input(cs.clone(), || Ok(self.public.swap_commitment))?; let claimed_fee_commitment = - BalanceCommitmentVar::new_input(cs, || Ok(self.fee_commitment))?; + BalanceCommitmentVar::new_input(cs, || Ok(self.public.fee_commitment))?; // Swap commitment integrity check let swap_commitment = swap_plaintext_var.commit()?; @@ -137,11 +132,15 @@ impl DummyWitness for SwapCircuit { }; Self { - swap_plaintext: swap_plaintext.clone(), - fee_blinding: Fr::from(1), - swap_commitment: swap_plaintext.swap_commitment(), - fee_commitment: balance::Commitment(decaf377::basepoint()), - balance_commitment: balance::Commitment(decaf377::basepoint()), + private: SwapProofPrivate { + swap_plaintext: swap_plaintext.clone(), + fee_blinding: Fr::from(1), + }, + public: SwapProofPublic { + swap_commitment: swap_plaintext.swap_commitment(), + fee_commitment: balance::Commitment(decaf377::basepoint()), + balance_commitment: balance::Commitment(decaf377::basepoint()), + }, } } } @@ -155,19 +154,10 @@ impl SwapProof { blinding_r: Fq, blinding_s: Fq, pk: &ProvingKey, - swap_plaintext: SwapPlaintext, - fee_blinding: Fr, - balance_commitment: balance::Commitment, - swap_commitment: tct::StateCommitment, - fee_commitment: balance::Commitment, + public: SwapProofPublic, + private: SwapProofPrivate, ) -> anyhow::Result { - let circuit = SwapCircuit { - swap_plaintext, - fee_blinding, - balance_commitment, - swap_commitment, - fee_commitment, - }; + let circuit = SwapCircuit { public, private }; let proof = Groth16::::create_proof_with_reduction( circuit, pk, blinding_r, blinding_s, ) @@ -191,28 +181,29 @@ impl SwapProof { pub fn verify( &self, vk: &PreparedVerifyingKey, - balance_commitment: balance::Commitment, - swap_commitment: tct::StateCommitment, - fee_commitment: balance::Commitment, + public: SwapProofPublic, ) -> anyhow::Result<()> { let proof = Proof::deserialize_compressed_unchecked(&self.0[..]).map_err(|e| anyhow::anyhow!(e))?; let mut public_inputs = Vec::new(); public_inputs.extend( - balance_commitment + public + .balance_commitment .0 .to_field_elements() .context("balance_commitment should be a Bls12-377 field member")?, ); public_inputs.extend( - swap_commitment + public + .swap_commitment .0 .to_field_elements() .context("swap_commitment should be a Bls12-377 field member")?, ); public_inputs.extend( - fee_commitment + public + .fee_commitment .0 .to_field_elements() .context("fee_commitment should be a Bls12-377 field member")?, @@ -315,6 +306,9 @@ mod tests { balance -= value_fee; let balance_commitment = balance.commit(fee_blinding); + let public = SwapProofPublic { balance_commitment, swap_commitment, fee_commitment }; + let private = SwapProofPrivate { fee_blinding, swap_plaintext }; + let blinding_r = Fq::rand(&mut rng); let blinding_s = Fq::rand(&mut rng); @@ -322,15 +316,12 @@ mod tests { blinding_r, blinding_s, &pk, - swap_plaintext, - fee_blinding, - balance_commitment, - swap_commitment, - fee_commitment + public.clone(), + private ) .expect("can create proof"); - let proof_result = proof.verify(&vk, balance_commitment, swap_commitment, fee_commitment); + let proof_result = proof.verify(&vk, public); assert!(proof_result.is_ok()); } From 0df1bba58a177dfe9b47f9c52ec20ef734981d9d Mon Sep 17 00:00:00 2001 From: Lucas Meier Date: Mon, 8 Jan 2024 14:45:00 -0800 Subject: [PATCH 75/84] Add Private x Public API for SwapClaimProof --- crates/bench/benches/swap_claim.rs | 98 ++------ crates/bin/pcli/tests/proof.rs | 43 ++-- .../component/action_handler/swap_claim.rs | 20 +- crates/core/component/dex/src/swap_claim.rs | 2 +- .../core/component/dex/src/swap_claim/plan.rs | 35 ++- .../component/dex/src/swap_claim/proof.rs | 234 +++++++----------- 6 files changed, 166 insertions(+), 266 deletions(-) diff --git a/crates/bench/benches/swap_claim.rs b/crates/bench/benches/swap_claim.rs index fc382736da..e6b5c6fcfb 100644 --- a/crates/bench/benches/swap_claim.rs +++ b/crates/bench/benches/swap_claim.rs @@ -6,13 +6,13 @@ use decaf377::Fq; use penumbra_asset::asset; use penumbra_dex::{ swap::SwapPlaintext, - swap_claim::{SwapClaimCircuit, SwapClaimProof}, + swap_claim::{SwapClaimCircuit, SwapClaimProof, SwapClaimProofPrivate, SwapClaimProofPublic}, BatchSwapOutputData, TradingPair, }; use penumbra_fee::Fee; -use penumbra_keys::keys::{Bip44Path, NullifierKey, SeedPhrase, SpendKey}; +use penumbra_keys::keys::{Bip44Path, SeedPhrase, SpendKey}; use penumbra_num::Amount; -use penumbra_proof_params::SWAPCLAIM_PROOF_PROVING_KEY; +use penumbra_proof_params::{DummyWitness, SWAPCLAIM_PROOF_PROVING_KEY}; use penumbra_sct::Nullifier; use penumbra_tct as tct; @@ -20,40 +20,9 @@ use criterion::{criterion_group, criterion_main, Criterion}; use rand_core::OsRng; #[allow(clippy::too_many_arguments)] -fn prove( - r: Fq, - s: Fq, - swap_plaintext: SwapPlaintext, - state_commitment_proof: tct::Proof, - nk: NullifierKey, - anchor: tct::Root, - nullifier: Nullifier, - lambda_1: Amount, - lambda_2: Amount, - note_blinding_1: Fq, - note_blinding_2: Fq, - note_commitment_1: tct::StateCommitment, - note_commitment_2: tct::StateCommitment, - output_data: BatchSwapOutputData, -) { - let _proof = SwapClaimProof::prove( - r, - s, - &SWAPCLAIM_PROOF_PROVING_KEY, - swap_plaintext, - state_commitment_proof, - nk, - anchor, - nullifier, - lambda_1, - lambda_2, - note_blinding_1, - note_blinding_2, - note_commitment_1, - note_commitment_2, - output_data, - ) - .expect("can create proof"); +fn prove(r: Fq, s: Fq, public: SwapClaimProofPublic, private: SwapClaimProofPrivate) { + let _proof = SwapClaimProof::prove(r, s, &SWAPCLAIM_PROOF_PROVING_KEY, public, private) + .expect("can create proof"); } fn swap_claim_proving_time(c: &mut Criterion) { @@ -80,7 +49,7 @@ fn swap_claim_proving_time(c: &mut Criterion) { fee, claim_address, ); - let fee = swap_plaintext.clone().claim_fee; + let claim_fee = swap_plaintext.clone().claim_fee; let mut sct = tct::Tree::new(); let swap_commitment = swap_plaintext.swap_commitment(); sct.insert(tct::Witness::Keep, swap_commitment).unwrap(); @@ -111,32 +80,15 @@ fn swap_claim_proving_time(c: &mut Criterion) { let note_commitment_1 = output_1_note.commit(); let note_commitment_2 = output_2_note.commit(); - let r = Fq::rand(&mut OsRng); - let s = Fq::rand(&mut OsRng); - - c.bench_function("swap claim proving", |b| { - b.iter(|| { - prove( - r, - s, - swap_plaintext.clone(), - state_commitment_proof.clone(), - nk, - anchor, - nullifier, - lambda_1, - lambda_2, - note_blinding_1, - note_blinding_2, - note_commitment_1, - note_commitment_2, - output_data, - ) - }) - }); - - // Also print out the number of constraints. - let circuit = SwapClaimCircuit::new( + let public = SwapClaimProofPublic { + anchor, + nullifier, + claim_fee, + output_data, + note_commitment_1, + note_commitment_2, + }; + let private = SwapClaimProofPrivate { swap_plaintext, state_commitment_proof, nk, @@ -144,13 +96,17 @@ fn swap_claim_proving_time(c: &mut Criterion) { lambda_2, note_blinding_1, note_blinding_2, - anchor, - nullifier, - fee, - output_data, - note_commitment_1, - note_commitment_2, - ); + }; + + let r = Fq::rand(&mut OsRng); + let s = Fq::rand(&mut OsRng); + + c.bench_function("swap claim proving", |b| { + b.iter(|| prove(r, s, public.clone(), private.clone())) + }); + + // Also print out the number of constraints. + let circuit = SwapClaimCircuit::with_dummy_witness(); let cs = ConstraintSystem::new_ref(); cs.set_optimization_goal(OptimizationGoal::Constraints); diff --git a/crates/bin/pcli/tests/proof.rs b/crates/bin/pcli/tests/proof.rs index 95967b9814..1e7e029f65 100644 --- a/crates/bin/pcli/tests/proof.rs +++ b/crates/bin/pcli/tests/proof.rs @@ -6,6 +6,7 @@ use decaf377::{Fq, Fr}; use decaf377_rdsa::{SigningKey, SpendAuth, VerificationKey}; use penumbra_asset::{asset, Balance, Value}; use penumbra_dex::swap::proof::{SwapProofPrivate, SwapProofPublic}; +use penumbra_dex::swap_claim::{SwapClaimProofPrivate, SwapClaimProofPublic}; use penumbra_dex::{ swap::proof::SwapProof, swap::SwapPlaintext, swap_claim::proof::SwapClaimProof, BatchSwapOutputData, TradingPair, @@ -256,7 +257,7 @@ fn swap_claim_parameters_vs_current_swap_claim_circuit() { fee, claim_address, ); - let fee = swap_plaintext.clone().claim_fee; + let claim_fee = swap_plaintext.clone().claim_fee; let mut sct = tct::Tree::new(); let swap_commitment = swap_plaintext.swap_commitment(); sct.insert(tct::Witness::Keep, swap_commitment).unwrap(); @@ -287,37 +288,31 @@ fn swap_claim_parameters_vs_current_swap_claim_circuit() { let note_commitment_1 = output_1_note.commit(); let note_commitment_2 = output_2_note.commit(); - let blinding_r = Fq::rand(&mut rng); - let blinding_s = Fq::rand(&mut rng); - - let proof = SwapClaimProof::prove( - blinding_r, - blinding_s, - pk, + let public = SwapClaimProofPublic { + anchor, + nullifier, + claim_fee, + output_data, + note_commitment_1, + note_commitment_2, + }; + let private = SwapClaimProofPrivate { swap_plaintext, state_commitment_proof, nk, - anchor, - nullifier, lambda_1, lambda_2, note_blinding_1, note_blinding_2, - note_commitment_1, - note_commitment_2, - output_data, - ) - .expect("can create proof"); + }; - let proof_result = proof.verify( - vk, - anchor, - nullifier, - fee, - output_data, - note_commitment_1, - note_commitment_2, - ); + let blinding_r = Fq::rand(&mut rng); + let blinding_s = Fq::rand(&mut rng); + + let proof = SwapClaimProof::prove(blinding_r, blinding_s, pk, public.clone(), private) + .expect("can create proof"); + + let proof_result = proof.verify(vk, public); assert!(proof_result.is_ok()); } diff --git a/crates/core/component/dex/src/component/action_handler/swap_claim.rs b/crates/core/component/dex/src/component/action_handler/swap_claim.rs index 6b24558645..cde6ec0751 100644 --- a/crates/core/component/dex/src/component/action_handler/swap_claim.rs +++ b/crates/core/component/dex/src/component/action_handler/swap_claim.rs @@ -12,7 +12,11 @@ use penumbra_proto::StateWriteProto; use penumbra_sct::component::{SctManager as _, SourceContext, StateReadExt as _}; use penumbra_shielded_pool::component::NoteManager; -use crate::{component::StateReadExt, event, swap_claim::SwapClaim}; +use crate::{ + component::StateReadExt, + event, + swap_claim::{SwapClaim, SwapClaimProofPublic}, +}; #[async_trait] impl ActionHandler for SwapClaim { @@ -21,12 +25,14 @@ impl ActionHandler for SwapClaim { self.proof .verify( &SWAPCLAIM_PROOF_VERIFICATION_KEY, - context.anchor, - self.body.nullifier, - self.body.fee.clone(), - self.body.output_data, - self.body.output_1_commitment, - self.body.output_2_commitment, + SwapClaimProofPublic { + anchor: context.anchor, + nullifier: self.body.nullifier, + claim_fee: self.body.fee.clone(), + output_data: self.body.output_data, + note_commitment_1: self.body.output_1_commitment, + note_commitment_2: self.body.output_2_commitment, + }, ) .context("a swap claim proof did not verify")?; diff --git a/crates/core/component/dex/src/swap_claim.rs b/crates/core/component/dex/src/swap_claim.rs index bd2e57260a..a68d0e5319 100644 --- a/crates/core/component/dex/src/swap_claim.rs +++ b/crates/core/component/dex/src/swap_claim.rs @@ -6,5 +6,5 @@ pub mod proof; pub use action::{Body, SwapClaim}; pub use plan::SwapClaimPlan; -pub use proof::{SwapClaimCircuit, SwapClaimProof}; +pub use proof::{SwapClaimCircuit, SwapClaimProof, SwapClaimProofPrivate, SwapClaimProofPublic}; pub use view::SwapClaimView; diff --git a/crates/core/component/dex/src/swap_claim/plan.rs b/crates/core/component/dex/src/swap_claim/plan.rs index c87f69cced..8f95ecb352 100644 --- a/crates/core/component/dex/src/swap_claim/plan.rs +++ b/crates/core/component/dex/src/swap_claim/plan.rs @@ -14,7 +14,11 @@ use tct::Position; use crate::{swap::SwapPlaintext, BatchSwapOutputData}; -use super::{action as swap_claim, proof::SwapClaimProof, SwapClaim}; +use super::{ + action as swap_claim, + proof::{SwapClaimProof, SwapClaimProofPrivate, SwapClaimProofPublic}, + SwapClaim, +}; /// A planned [`SwapClaim`](SwapClaim). #[derive(Clone, Debug, Deserialize, Serialize)] @@ -68,18 +72,23 @@ impl SwapClaimPlan { self.proof_blinding_r, self.proof_blinding_s, &SWAPCLAIM_PROOF_PROVING_KEY, - self.swap_plaintext.clone(), - state_commitment_proof.clone(), - *nk, - state_commitment_proof.root(), - nullifier, - lambda_1, - lambda_2, - note_blinding_1, - note_blinding_2, - note_commitment_1, - note_commitment_2, - self.output_data, + SwapClaimProofPublic { + anchor: state_commitment_proof.root(), + nullifier, + claim_fee: self.swap_plaintext.claim_fee.clone(), + output_data: self.output_data, + note_commitment_1, + note_commitment_2, + }, + SwapClaimProofPrivate { + swap_plaintext: self.swap_plaintext.clone(), + state_commitment_proof: state_commitment_proof.clone(), + nk: *nk, + lambda_1, + lambda_2, + note_blinding_1, + note_blinding_2, + }, ) .expect("can generate ZKSwapClaimProof") } diff --git a/crates/core/component/dex/src/swap_claim/proof.rs b/crates/core/component/dex/src/swap_claim/proof.rs index 92781e3b0a..9aed58a36c 100644 --- a/crates/core/component/dex/src/swap_claim/proof.rs +++ b/crates/core/component/dex/src/swap_claim/proof.rs @@ -32,25 +32,9 @@ use crate::{ use penumbra_proof_params::{DummyWitness, GROTH16_PROOF_LENGTH_BYTES}; -/// SwapClaim consumes an existing Swap NFT so they are most similar to Spend operations, -/// however the note commitment proof needs to be for a specific block due to clearing prices -/// only being valid for particular blocks (i.e. the exchange rates of assets change over time). +/// The public inputs to a [`SwapProofPublic`]. #[derive(Clone, Debug)] -pub struct SwapClaimCircuit { - /// The swap being claimed - swap_plaintext: SwapPlaintext, - /// Inclusion proof for the swap commitment - state_commitment_proof: tct::Proof, - // The nullifier deriving key for the Swap NFT note. - nk: NullifierKey, - /// Output amount 1 - lambda_1: Amount, - /// Output amount 2 - lambda_2: Amount, - /// Note commitment blinding factor for the first output note - note_blinding_1: Fq, - /// Note commitment blinding factor for the second output note - note_blinding_2: Fq, +pub struct SwapClaimProofPublic { /// Anchor pub anchor: tct::Root, /// Nullifier @@ -65,74 +49,68 @@ pub struct SwapClaimCircuit { pub note_commitment_2: note::StateCommitment, } -impl SwapClaimCircuit { - #[allow(clippy::too_many_arguments)] - pub fn new( - swap_plaintext: SwapPlaintext, - state_commitment_proof: tct::Proof, - nk: NullifierKey, - lambda_1: Amount, - lambda_2: Amount, - note_blinding_1: Fq, - note_blinding_2: Fq, - anchor: tct::Root, - nullifier: Nullifier, - claim_fee: Fee, - output_data: BatchSwapOutputData, - note_commitment_1: note::StateCommitment, - note_commitment_2: note::StateCommitment, - ) -> Self { - Self { - swap_plaintext, - state_commitment_proof, - nk, - lambda_1, - lambda_2, - note_blinding_1, - note_blinding_2, - anchor, - nullifier, - claim_fee, - output_data, - note_commitment_1, - note_commitment_2, - } - } +/// The public inputs to a [`SwapProofPrivate`]. +#[derive(Clone, Debug)] +pub struct SwapClaimProofPrivate { + /// The swap being claimed + pub swap_plaintext: SwapPlaintext, + /// Inclusion proof for the swap commitment + pub state_commitment_proof: tct::Proof, + // The nullifier deriving key for the Swap NFT note. + pub nk: NullifierKey, + /// Output amount 1 + pub lambda_1: Amount, + /// Output amount 2 + pub lambda_2: Amount, + /// Note commitment blinding factor for the first output note + pub note_blinding_1: Fq, + /// Note commitment blinding factor for the second output note + pub note_blinding_2: Fq, +} + +/// SwapClaim consumes an existing Swap NFT so they are most similar to Spend operations, +/// however the note commitment proof needs to be for a specific block due to clearing prices +/// only being valid for particular blocks (i.e. the exchange rates of assets change over time). +#[derive(Clone, Debug)] +pub struct SwapClaimCircuit { + public: SwapClaimProofPublic, + private: SwapClaimProofPrivate, } impl ConstraintSynthesizer for SwapClaimCircuit { fn generate_constraints(self, cs: ConstraintSystemRef) -> ark_relations::r1cs::Result<()> { // Witnesses let swap_plaintext_var = - SwapPlaintextVar::new_witness(cs.clone(), || Ok(self.swap_plaintext.clone()))?; + SwapPlaintextVar::new_witness(cs.clone(), || Ok(self.private.swap_plaintext.clone()))?; let claimed_swap_commitment = StateCommitmentVar::new_witness(cs.clone(), || { - Ok(self.state_commitment_proof.commitment()) + Ok(self.private.state_commitment_proof.commitment()) })?; let position_var = tct::r1cs::PositionVar::new_witness(cs.clone(), || { - Ok(self.state_commitment_proof.position()) + Ok(self.private.state_commitment_proof.position()) })?; let position_bits = position_var.to_bits_le()?; let merkle_path_var = tct::r1cs::MerkleAuthPathVar::new_witness(cs.clone(), || { - Ok(self.state_commitment_proof) + Ok(self.private.state_commitment_proof) })?; - let nk_var = NullifierKeyVar::new_witness(cs.clone(), || Ok(self.nk))?; - let lambda_1_i_var = AmountVar::new_witness(cs.clone(), || Ok(self.lambda_1))?; - let lambda_2_i_var = AmountVar::new_witness(cs.clone(), || Ok(self.lambda_2))?; - let note_blinding_1 = FqVar::new_witness(cs.clone(), || Ok(self.note_blinding_1))?; - let note_blinding_2 = FqVar::new_witness(cs.clone(), || Ok(self.note_blinding_2))?; + let nk_var = NullifierKeyVar::new_witness(cs.clone(), || Ok(self.private.nk))?; + let lambda_1_i_var = AmountVar::new_witness(cs.clone(), || Ok(self.private.lambda_1))?; + let lambda_2_i_var = AmountVar::new_witness(cs.clone(), || Ok(self.private.lambda_2))?; + let note_blinding_1 = FqVar::new_witness(cs.clone(), || Ok(self.private.note_blinding_1))?; + let note_blinding_2 = FqVar::new_witness(cs.clone(), || Ok(self.private.note_blinding_2))?; // Inputs - let anchor_var = FqVar::new_input(cs.clone(), || Ok(Fq::from(self.anchor)))?; - let claimed_nullifier_var = NullifierVar::new_input(cs.clone(), || Ok(self.nullifier))?; - let claimed_fee_var = ValueVar::new_input(cs.clone(), || Ok(self.claim_fee.0))?; + let anchor_var = FqVar::new_input(cs.clone(), || Ok(Fq::from(self.public.anchor)))?; + let claimed_nullifier_var = + NullifierVar::new_input(cs.clone(), || Ok(self.public.nullifier))?; + let claimed_fee_var = ValueVar::new_input(cs.clone(), || Ok(self.public.claim_fee.0))?; let output_data_var = - BatchSwapOutputDataVar::new_input(cs.clone(), || Ok(self.output_data))?; + BatchSwapOutputDataVar::new_input(cs.clone(), || Ok(self.public.output_data))?; let claimed_note_commitment_1 = - StateCommitmentVar::new_input(cs.clone(), || Ok(self.note_commitment_1))?; + StateCommitmentVar::new_input(cs.clone(), || Ok(self.public.note_commitment_1))?; let claimed_note_commitment_2 = - StateCommitmentVar::new_input(cs.clone(), || Ok(self.note_commitment_2))?; + StateCommitmentVar::new_input(cs.clone(), || Ok(self.public.note_commitment_2))?; // Swap commitment integrity check. let swap_commitment = swap_plaintext_var.commit()?; @@ -266,21 +244,25 @@ impl DummyWitness for SwapClaimCircuit { let note_commitment_2 = tct::StateCommitment(Fq::from(2)); let (lambda_1, lambda_2) = output_data.pro_rata_outputs((delta_1_i, delta_2_i)); - Self { - swap_plaintext, - state_commitment_proof, + let public = SwapClaimProofPublic { anchor, nullifier, - nk, claim_fee, output_data, + note_commitment_1, + note_commitment_2, + }; + let private = SwapClaimProofPrivate { + swap_plaintext, + state_commitment_proof, + nk, lambda_1, lambda_2, note_blinding_1, note_blinding_2, - note_commitment_1, - note_commitment_2, - } + }; + + Self { public, private } } } @@ -295,34 +277,10 @@ impl SwapClaimProof { blinding_r: Fq, blinding_s: Fq, pk: &ProvingKey, - swap_plaintext: SwapPlaintext, - state_commitment_proof: tct::Proof, - nk: NullifierKey, - anchor: tct::Root, - nullifier: Nullifier, - lambda_1: Amount, - lambda_2: Amount, - note_blinding_1: Fq, - note_blinding_2: Fq, - note_commitment_1: tct::StateCommitment, - note_commitment_2: tct::StateCommitment, - output_data: BatchSwapOutputData, + public: SwapClaimProofPublic, + private: SwapClaimProofPrivate, ) -> anyhow::Result { - let circuit = SwapClaimCircuit { - swap_plaintext: swap_plaintext.clone(), - state_commitment_proof, - nk, - anchor, - nullifier, - claim_fee: swap_plaintext.claim_fee, - output_data, - lambda_1, - lambda_2, - note_blinding_1, - note_blinding_2, - note_commitment_1, - note_commitment_2, - }; + let circuit = SwapClaimCircuit { public, private }; let proof = Groth16::::create_proof_with_reduction( circuit, pk, blinding_r, blinding_s, @@ -340,53 +298,54 @@ impl SwapClaimProof { pub fn verify( &self, vk: &PreparedVerifyingKey, - anchor: tct::Root, - nullifier: Nullifier, - fee: Fee, - output_data: BatchSwapOutputData, - note_commitment_1: tct::StateCommitment, - note_commitment_2: tct::StateCommitment, + public: SwapClaimProofPublic, ) -> anyhow::Result<()> { let proof = Proof::deserialize_compressed_unchecked(&self.0[..]).map_err(|e| anyhow::anyhow!(e))?; let mut public_inputs = Vec::new(); public_inputs.extend( - Fq::from(anchor.0) + Fq::from(public.anchor.0) .to_field_elements() .expect("Fq types are Bls12-377 field members"), ); public_inputs.extend( - nullifier + public + .nullifier .0 .to_field_elements() .expect("nullifier is a Bls12-377 field member"), ); public_inputs.extend( - Fq::from(fee.0.amount) + Fq::from(public.claim_fee.0.amount) .to_field_elements() .expect("Fq types are Bls12-377 field members"), ); public_inputs.extend( - fee.0 + public + .claim_fee + .0 .asset_id .0 .to_field_elements() .expect("asset_id is a Bls12-377 field member"), ); public_inputs.extend( - output_data + public + .output_data .to_field_elements() .expect("output_data is a Bls12-377 field member"), ); public_inputs.extend( - note_commitment_1 + public + .note_commitment_1 .0 .to_field_elements() .expect("note_commitment_1 is a Bls12-377 field member"), ); public_inputs.extend( - note_commitment_2 + public + .note_commitment_2 .0 .to_field_elements() .expect("note_commitment_2 is a Bls12-377 field member"), @@ -540,6 +499,9 @@ mod tests { let note_commitment_1 = output_1_note.commit(); let note_commitment_2 = output_2_note.commit(); + let public = SwapClaimProofPublic { anchor, nullifier, claim_fee: fee, output_data, note_commitment_1, note_commitment_2 }; + let private = SwapClaimProofPrivate { swap_plaintext, state_commitment_proof, nk, lambda_1, lambda_2, note_blinding_1, note_blinding_2 }; + let blinding_r = Fq::rand(&mut rng); let blinding_s = Fq::rand(&mut rng); @@ -547,28 +509,12 @@ mod tests { blinding_r, blinding_s, &pk, - swap_plaintext, - state_commitment_proof, - nk, - anchor, - nullifier, - lambda_1, - lambda_2, - note_blinding_1, - note_blinding_2, - note_commitment_1, - note_commitment_2, - output_data, + public.clone(), + private ) .expect("can create proof"); - let proof_result = proof.verify(&vk, - anchor, - nullifier, - fee, - output_data, - note_commitment_1, - note_commitment_2); + let proof_result = proof.verify(&vk, public); assert!(proof_result.is_ok()); } @@ -659,6 +605,9 @@ mod tests { let note_commitment_1 = output_1_note.commit(); let note_commitment_2 = output_2_note.commit(); + let public = SwapClaimProofPublic { anchor, nullifier, claim_fee: fee, output_data, note_commitment_1, note_commitment_2 }; + let private = SwapClaimProofPrivate { swap_plaintext, state_commitment_proof, nk, lambda_1, lambda_2, note_blinding_1, note_blinding_2 }; + let blinding_r = Fq::rand(&mut rng); let blinding_s = Fq::rand(&mut rng); @@ -666,29 +615,14 @@ mod tests { blinding_r, blinding_s, &pk, - swap_plaintext, - state_commitment_proof, - nk, - anchor, - nullifier, - lambda_1, - lambda_2, - note_blinding_1, - note_blinding_2, - note_commitment_1, - note_commitment_2, - output_data, + public.clone(), + private ) .expect("can create proof"); let proof_result = proof.verify( &vk, - anchor, - nullifier, - fee, - output_data, - note_commitment_1, - note_commitment_2, + public ); assert!(proof_result.is_ok()); From 95f0bdc0d3ac0f104a04389c1e76e3b1360dbd79 Mon Sep 17 00:00:00 2001 From: Lucas Meier Date: Mon, 8 Jan 2024 16:29:22 -0800 Subject: [PATCH 76/84] Make MemoPlaintext have an opaque constructor This also has the side effect of making PCLI more robust to users placing a plaintext that's too large. --- crates/bin/pcli/src/command/ceremony.rs | 8 +- crates/bin/pcli/src/command/tx.rs | 6 +- crates/core/transaction/src/memo.rs | 90 +++++++++++++--------- crates/core/transaction/src/plan.rs | 9 +-- crates/core/transaction/src/plan/memo.rs | 9 +-- crates/core/transaction/src/transaction.rs | 4 +- crates/view/src/service.rs | 2 +- crates/view/src/storage.rs | 2 +- crates/wasm/src/tx.rs | 2 +- 9 files changed, 69 insertions(+), 63 deletions(-) diff --git a/crates/bin/pcli/src/command/ceremony.rs b/crates/bin/pcli/src/command/ceremony.rs index 0fec850311..b6fff90bdf 100644 --- a/crates/bin/pcli/src/command/ceremony.rs +++ b/crates/bin/pcli/src/command/ceremony.rs @@ -54,10 +54,10 @@ async fn handle_bid(app: &mut App, to: Address, from: AddressIndex, bid: &str) - return Ok(()); } - let memo_plaintext = MemoPlaintext { - return_address: app.config.full_viewing_key.payment_address(from).0, - text: "E PLURIBUS UNUM".to_owned(), - }; + let memo_plaintext = MemoPlaintext::new( + app.config.full_viewing_key.payment_address(from).0, + "E PLURIBUS UNUM".into(), + )?; let mut planner = Planner::new(OsRng); planner.set_gas_prices(gas_prices); diff --git a/crates/bin/pcli/src/command/tx.rs b/crates/bin/pcli/src/command/tx.rs index ce955caa43..88f6433f95 100644 --- a/crates/bin/pcli/src/command/tx.rs +++ b/crates/bin/pcli/src/command/tx.rs @@ -292,10 +292,8 @@ impl TxCmd { .payment_address((*from).into()) .0; - let memo_plaintext = MemoPlaintext { - return_address, - text: memo.clone().unwrap_or_default(), - }; + let memo_plaintext = + MemoPlaintext::new(return_address, memo.clone().unwrap_or_default())?; let mut planner = Planner::new(OsRng); planner.set_gas_prices(gas_prices); diff --git a/crates/core/transaction/src/memo.rs b/crates/core/transaction/src/memo.rs index a1490a3c81..336b8e0a0d 100644 --- a/crates/core/transaction/src/memo.rs +++ b/crates/core/transaction/src/memo.rs @@ -22,6 +22,16 @@ pub const MEMO_CIPHERTEXT_LEN_BYTES: usize = 528; // This is the `MEMO_CIPHERTEXT_LEN_BYTES` - MAC size (16 bytes). pub const MEMO_LEN_BYTES: usize = 512; +// This is the largest text length we can support +const MAX_TEXT_LEN: usize = MEMO_LEN_BYTES - ADDRESS_LEN_BYTES; + +/// A method which reads out bytes in a lossy way, and trims out null bytes +fn raw_bytes_to_text(data: &[u8]) -> String { + String::from_utf8_lossy(data) + .trim_end_matches(0u8 as char) + .to_string() +} + #[derive(Clone, Debug)] pub struct MemoCiphertext(pub [u8; MEMO_CIPHERTEXT_LEN_BYTES]); @@ -33,8 +43,35 @@ impl EffectingData for MemoCiphertext { #[derive(Clone, Debug, PartialEq)] pub struct MemoPlaintext { - pub return_address: Address, - pub text: String, + return_address: Address, + text: String, +} + +impl MemoPlaintext { + /// Create a new MemoPlaintext, checking that the text isn't long enough. + /// + /// The text being too long is the only reason this function will fail. + pub fn new(return_address: Address, text: String) -> anyhow::Result { + if text.len() > MAX_TEXT_LEN { + anyhow::bail!( + "memo text length must be <= {}, found {}", + MAX_TEXT_LEN, + text.len() + ); + } + Ok(Self { + return_address, + text, + }) + } + + pub fn return_address(&self) -> Address { + self.return_address + } + + pub fn text(&self) -> &str { + self.text.as_str() + } } impl From<&MemoPlaintext> for Vec { @@ -55,20 +92,9 @@ impl TryFrom> for MemoPlaintext { } let return_address_bytes = &bytes[..80]; let return_address: Address = return_address_bytes.try_into()?; - let text = String::from_utf8_lossy(&bytes[80..]) - .trim_end_matches(0u8 as char) - .to_string(); - if (text).len() > MEMO_LEN_BYTES - ADDRESS_LEN_BYTES { - anyhow::bail!( - "provided memo text exceeds {} bytes", - MEMO_LEN_BYTES - ADDRESS_LEN_BYTES - ); - } + let text = raw_bytes_to_text(&bytes[80..]); - Ok(MemoPlaintext { - return_address, - text, - }) + MemoPlaintext::new(return_address, text) } } @@ -115,14 +141,9 @@ impl MemoCiphertext { let return_address_bytes = &plaintext_bytes[..80]; let return_address: Address = return_address_bytes.try_into()?; - let text = String::from_utf8_lossy(&plaintext_bytes[80..]) - .trim_end_matches(0u8 as char) - .to_string(); + let text = raw_bytes_to_text(&plaintext_bytes[80..]); - Ok(MemoPlaintext { - return_address: return_address, - text, - }) + MemoPlaintext::new(return_address, text) } /// Decrypt a [`MemoCiphertext`] to generate a fixed-length slice of bytes. @@ -167,14 +188,9 @@ impl MemoCiphertext { let return_address_bytes = &plaintext_bytes[..80]; let return_address: Address = return_address_bytes.try_into()?; - let text = String::from_utf8_lossy(&plaintext_bytes[80..]) - .trim_end_matches(0u8 as char) - .to_string(); + let text = raw_bytes_to_text(&plaintext_bytes[80..]); - Ok(MemoPlaintext { - return_address: return_address, - text, - }) + MemoPlaintext::new(return_address, text) } } @@ -294,7 +310,7 @@ mod tests { } #[test] - fn test_memo_encryption_and_sender_decryption() { + fn test_memo_encryption_and_sender_decryption() -> anyhow::Result<()> { let mut rng = OsRng; let seed_phrase = SeedPhrase::generate(rng); @@ -315,10 +331,7 @@ mod tests { // On the sender side, we have to encrypt the memo to put into the transaction-level, // and also the memo key to put on the action-level (output). - let memo = MemoPlaintext { - return_address: dest, - text: String::from("Hello, friend"), - }; + let memo = MemoPlaintext::new(dest, "Hello, friend".into())?; let memo_key = PayloadKey::random_key(&mut OsRng); let ciphertext = MemoCiphertext::encrypt(memo_key.clone(), &memo).expect("can encrypt memo"); @@ -348,6 +361,8 @@ mod tests { .expect("can decrypt memo"); assert_eq!(plaintext, memo); + + Ok(()) } proptest! { @@ -364,9 +379,10 @@ mod tests { let memo_key = PayloadKey::random_key(&mut rng); let memo_address = Address::dummy(&mut rng); let memo_text = s; - let memo = MemoPlaintext { - return_address: memo_address, - text: memo_text, + let memo = { + let memo = MemoPlaintext::new(memo_address, memo_text); + assert!(memo.is_ok()); + memo.unwrap() }; let ciphertext_result = MemoCiphertext::encrypt(memo_key.clone(), &memo); if memo.to_vec().len() > MEMO_LEN_BYTES { diff --git a/crates/core/transaction/src/plan.rs b/crates/core/transaction/src/plan.rs index 40b8dcddb4..7ee9e1f92d 100644 --- a/crates/core/transaction/src/plan.rs +++ b/crates/core/transaction/src/plan.rs @@ -345,9 +345,7 @@ impl TransactionPlan { } if !clue_plans.is_empty() { - self.detection_data = Some(DetectionDataPlan { - clue_plans: clue_plans, - }); + self.detection_data = Some(DetectionDataPlan { clue_plans }); } else { self.detection_data = None; } @@ -477,10 +475,7 @@ mod tests { let mut rng = OsRng; - let memo_plaintext = MemoPlaintext { - return_address: Address::dummy(&mut rng), - text: "".to_string(), - }; + let memo_plaintext = MemoPlaintext::new(Address::dummy(&mut rng), "".to_string()).unwrap(); let plan = TransactionPlan { // Put outputs first to check that the auth hash // computation is not affected by plan ordering. diff --git a/crates/core/transaction/src/plan/memo.rs b/crates/core/transaction/src/plan/memo.rs index 5b254e0d74..2872b0006b 100644 --- a/crates/core/transaction/src/plan/memo.rs +++ b/crates/core/transaction/src/plan/memo.rs @@ -34,8 +34,8 @@ impl DomainType for MemoPlan { impl From for pb::MemoPlan { fn from(msg: MemoPlan) -> Self { - let return_address = Some(msg.plaintext.return_address.into()); - let text = msg.plaintext.text; + let return_address = Some(msg.plaintext.return_address().into()); + let text = msg.plaintext.text().to_owned(); Self { plaintext: Some(pb::MemoPlaintext { return_address, @@ -67,10 +67,7 @@ impl TryFrom for MemoPlan { let key = PayloadKey::try_from(msg.key.to_vec())?; Ok(Self { - plaintext: MemoPlaintext { - return_address: sender, - text, - }, + plaintext: MemoPlaintext::new(sender, text)?, key, }) } diff --git a/crates/core/transaction/src/transaction.rs b/crates/core/transaction/src/transaction.rs index 0b2ddf013c..d42b058f88 100644 --- a/crates/core/transaction/src/transaction.rs +++ b/crates/core/transaction/src/transaction.rs @@ -301,8 +301,8 @@ impl Transaction { Some(ciphertext) => match memo_plaintext { Some(plaintext) => { let plaintext_view: MemoPlaintextView = MemoPlaintextView { - return_address: txp.view_address(plaintext.return_address), - text: plaintext.text, + return_address: txp.view_address(plaintext.return_address()), + text: plaintext.text().to_owned(), }; Some(MemoView::Visible { plaintext: plaintext_view, diff --git a/crates/view/src/service.rs b/crates/view/src/service.rs index 7d04f38c9d..09ea426795 100644 --- a/crates/view/src/service.rs +++ b/crates/view/src/service.rs @@ -793,7 +793,7 @@ impl ViewProtocolService for ViewService { let memo = tx.decrypt_memo(&fvk).map_err(|_| { tonic::Status::internal("Error decrypting memo for OutputView") })?; - address_views.insert(memo.return_address, fvk.view_address(address)); + address_views.insert(memo.return_address(), fvk.view_address(address)); } ActionView::Swap(SwapView::Visible { swap_plaintext, .. }) => { let address = swap_plaintext.claim_address; diff --git a/crates/view/src/storage.rs b/crates/view/src/storage.rs index 9645914910..3908ad4ea1 100644 --- a/crates/view/src/storage.rs +++ b/crates/view/src/storage.rs @@ -1539,7 +1539,7 @@ impl Storage { let tx_hash_owned = sha2::Sha256::digest(&tx_bytes); let tx_hash = tx_hash_owned.as_slice(); let tx_block_height = filtered_block.height as i64; - let return_address = transaction.decrypt_memo(&fvk).map_or(None, |x| Some(x.return_address.to_vec())); + let return_address = transaction.decrypt_memo(&fvk).map_or(None, |x| Some(x.return_address().to_vec())); tracing::debug!(tx_hash = ?hex::encode(tx_hash), "recording extended transaction"); diff --git a/crates/wasm/src/tx.rs b/crates/wasm/src/tx.rs index e2cc3bf3a7..3a0d2f5767 100644 --- a/crates/wasm/src/tx.rs +++ b/crates/wasm/src/tx.rs @@ -323,7 +323,7 @@ pub async fn transaction_info_inner( // Also add an AddressView for the return address in the memo. let memo = tx.decrypt_memo(&fvk)?; - address_views.insert(memo.return_address, fvk.view_address(address)); + address_views.insert(memo.return_address(), fvk.view_address(address)); } ActionView::Swap(SwapView::Visible { swap_plaintext, .. }) => { let address = swap_plaintext.claim_address; From 29b7cb2afde3a664bcbcbbe33e544b43a802ee83 Mon Sep 17 00:00:00 2001 From: Lucas Meier Date: Mon, 8 Jan 2024 16:55:09 -0800 Subject: [PATCH 77/84] Tweak memo text size property test to pass Previously, there was a case where we were trying to exercise text sizes that were too large, and this caused the newly added constructor to fail. This addess extra logic to deal with this. --- crates/core/transaction/src/memo.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/crates/core/transaction/src/memo.rs b/crates/core/transaction/src/memo.rs index 336b8e0a0d..59022e96db 100644 --- a/crates/core/transaction/src/memo.rs +++ b/crates/core/transaction/src/memo.rs @@ -380,7 +380,12 @@ mod tests { let memo_address = Address::dummy(&mut rng); let memo_text = s; let memo = { + let text_len = memo_text.len(); let memo = MemoPlaintext::new(memo_address, memo_text); + if text_len > MAX_TEXT_LEN { + assert!(memo.is_err()); + return Ok(()); + } assert!(memo.is_ok()); memo.unwrap() }; From 6ded2f569d8b9c8801142c6c0b62b7bfd2804fa0 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Thu, 4 Jan 2024 19:51:23 -0500 Subject: [PATCH 78/84] test: Rust proof satisfaction method for `NullifierDerivationProof` --- .../shielded-pool/src/nullifier_derivation.rs | 95 +++++++++++-------- 1 file changed, 56 insertions(+), 39 deletions(-) diff --git a/crates/core/component/shielded-pool/src/nullifier_derivation.rs b/crates/core/component/shielded-pool/src/nullifier_derivation.rs index 63b81d1cd3..b818b125fe 100644 --- a/crates/core/component/shielded-pool/src/nullifier_derivation.rs +++ b/crates/core/component/shielded-pool/src/nullifier_derivation.rs @@ -1,5 +1,6 @@ use std::str::FromStr; +use anyhow::Result; use ark_r1cs_std::prelude::*; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize}; use decaf377::{Bls12_377, Fq}; @@ -39,6 +40,38 @@ pub struct NullifierDerivationProofPrivate { pub nk: NullifierKey, } +#[cfg(test)] +fn check_satisfaction( + public: &NullifierDerivationProofPublic, + private: &NullifierDerivationProofPrivate, +) -> Result<()> { + let nullifier = Nullifier::derive(&private.nk, public.position, &public.note_commitment); + if nullifier != public.nullifier { + anyhow::bail!("nullifier did not match public input"); + } + Ok(()) +} + +#[cfg(test)] +fn check_circuit_satisfaction( + public: NullifierDerivationProofPublic, + private: NullifierDerivationProofPrivate, +) -> Result<()> { + use ark_relations::r1cs::{self, ConstraintSystem}; + + let cs = ConstraintSystem::new_ref(); + let circuit = NullifierDerivationCircuit::new(public, private); + cs.set_optimization_goal(r1cs::OptimizationGoal::Constraints); + circuit + .generate_constraints(cs.clone()) + .expect("can generate constraints from circuit"); + cs.finalize(); + if !cs.is_satisfied()? { + anyhow::bail!("constraints are not satisfied"); + } + Ok(()) +} + /// Groth16 proof for correct nullifier derivation. #[derive(Clone, Debug)] pub struct NullifierDerivationCircuit { @@ -215,61 +248,45 @@ mod tests { use super::*; use penumbra_asset::{asset, Value}; use penumbra_keys::keys::{SeedPhrase, SpendKey}; - use penumbra_proof_params::generate_prepared_test_parameters; + use penumbra_num::Amount; use penumbra_sct::Nullifier; - use penumbra_tct as tct; use proptest::prelude::*; - use rand_core::OsRng; use crate::Note; - proptest! { - #![proptest_config(ProptestConfig::with_cases(2))] - #[test] - fn nullifier_derivation_proof_happy_path(seed_phrase_randomness in any::<[u8; 32]>(), value_amount in 2..200u64) { - let mut rng = OsRng; - let (pk, vk) = generate_prepared_test_parameters::(&mut rng); - + prop_compose! { + fn arb_valid_nullifier_derivation_statement()(amount in any::(), address_index in any::(), position in any::<(u16, u16, u16)>(), asset_id64 in any::(), seed_phrase_randomness in any::<[u8; 32]>(), rseed_randomness in any::<[u8; 32]>()) -> (NullifierDerivationProofPublic, NullifierDerivationProofPrivate) { let seed_phrase = SeedPhrase::from_randomness(&seed_phrase_randomness); let sk_sender = SpendKey::from_seed_phrase_bip44(seed_phrase, &Bip44Path::new(0)); let fvk_sender = sk_sender.full_viewing_key(); let ivk_sender = fvk_sender.incoming(); - let (sender, _dtk_d) = ivk_sender.payment_address(0u32.into()); - - let value_to_send = Value { - amount: value_amount.into(), - asset_id: asset::Cache::with_known_assets().get_unit("upenumbra").unwrap().id(), - }; - - let note = Note::generate(&mut rng, &sender, value_to_send); - let note_commitment = note.commit(); + let (sender, _dtk_d) = ivk_sender.payment_address(address_index.into()); let nk = *sk_sender.nullifier_key(); - let mut sct = tct::Tree::new(); - - sct.insert(tct::Witness::Keep, note_commitment).unwrap(); - let state_commitment_proof = sct.witness(note_commitment).unwrap(); - let position = state_commitment_proof.position(); - let nullifier = Nullifier::derive(&nk, state_commitment_proof.position(), ¬e_commitment); + let note = Note::from_parts( + sender, + Value { + amount: Amount::from(amount), + asset_id: asset::Id(Fq::from(asset_id64)), + }, + Rseed(rseed_randomness), + ).expect("should be able to create note"); let public = NullifierDerivationProofPublic { - position, - note_commitment, - nullifier, + position: position.into(), + note_commitment: note.commit(), + nullifier: Nullifier::derive(&nk, position.into(), ¬e.commit()) }; - let private = NullifierDerivationProofPrivate { nk, }; + (public, private) + } + } - let proof = NullifierDerivationProof::prove( - &mut rng, - &pk, - public.clone(), private - ) - .expect("can create proof"); - - let proof_result = proof.verify(&vk, public); - - assert!(proof_result.is_ok()); + proptest! { + #[test] + fn nullifier_derivation_proof_happy_path((public, private) in arb_valid_nullifier_derivation_statement()) { + assert!(check_satisfaction(&public, &private).is_ok()); + assert!(check_circuit_satisfaction(public, private).is_ok()); } } } From 79a69df8d0574afb558d78e2cabd23b3f189c79d Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 5 Jan 2024 13:29:58 -0500 Subject: [PATCH 79/84] test: Rust proof satisfaction method for `SpendProof` --- .../shielded-pool/src/spend/proof.rs | 189 ++++++++++++------ 1 file changed, 128 insertions(+), 61 deletions(-) diff --git a/crates/core/component/shielded-pool/src/spend/proof.rs b/crates/core/component/shielded-pool/src/spend/proof.rs index 945883589a..bd98882ce4 100644 --- a/crates/core/component/shielded-pool/src/spend/proof.rs +++ b/crates/core/component/shielded-pool/src/spend/proof.rs @@ -1,5 +1,6 @@ use std::str::FromStr; +use anyhow::Result; use ark_r1cs_std::{ prelude::{EqGadget, FieldVar}, uint8::UInt8, @@ -60,6 +61,75 @@ pub struct SpendProofPrivate { pub nk: NullifierKey, } +#[cfg(test)] +fn check_satisfaction(public: &SpendProofPublic, private: &SpendProofPrivate) -> Result<()> { + use penumbra_keys::keys::FullViewingKey; + + let amount_u128: u128 = private.note.value().amount.into(); + if amount_u128 == 0u128 { + return Ok(()); + } + + let note_commitment = private.note.commit(); + if note_commitment != private.state_commitment_proof.commitment() { + anyhow::bail!("note commitment did not match state commitment proof"); + } + + let nullifier = Nullifier::derive( + &private.nk, + private.state_commitment_proof.position(), + ¬e_commitment, + ); + if nullifier != public.nullifier { + anyhow::bail!("nullifier did not match public input"); + } + + private.state_commitment_proof.verify(public.anchor)?; + + let rk = private.ak.randomize(&private.spend_auth_randomizer); + if rk != public.rk { + anyhow::bail!("randomized spend auth key did not match public input"); + } + + let fvk = FullViewingKey::from_components(private.ak, private.nk); + let ivk = fvk.incoming(); + let transmission_key = ivk.diversified_public(&private.note.diversified_generator()); + if transmission_key != *private.note.transmission_key() { + anyhow::bail!("transmission key did not match note"); + } + + let balance_commitment = private.note.value().commit(private.v_blinding); + if balance_commitment != public.balance_commitment { + anyhow::bail!("balance commitment did not match public input"); + } + + if private.note.diversified_generator() == decaf377::Element::default() { + anyhow::bail!("diversified generator is identity"); + } + if private.ak.is_identity() { + anyhow::bail!("ak is identity"); + } + + Ok(()) +} + +#[cfg(test)] +fn check_circuit_satisfaction(public: SpendProofPublic, private: SpendProofPrivate) -> Result<()> { + use ark_relations::r1cs::{self, ConstraintSystem}; + + let cs = ConstraintSystem::new_ref(); + let circuit = SpendCircuit::new(public, private); + cs.set_optimization_goal(r1cs::OptimizationGoal::Constraints); + circuit + .generate_constraints(cs.clone()) + .expect("can generate constraints from circuit"); + cs.finalize(); + if !cs.is_satisfied()? { + anyhow::bail!("constraints are not satisfied"); + } + Ok(()) +} + /// Groth16 proof for spending existing notes. #[derive(Clone, Debug)] pub struct SpendCircuit { @@ -350,6 +420,7 @@ mod tests { keys::{Bip44Path, SeedPhrase, SpendKey}, Address, }; + use penumbra_num::Amount; use penumbra_proof_params::generate_prepared_test_parameters; use penumbra_sct::Nullifier; use penumbra_tct::StateCommitment; @@ -369,73 +440,69 @@ mod tests { .boxed() } - proptest! { - #![proptest_config(ProptestConfig::with_cases(2))] - #[test] - /// Check that the `SpendProof` verification succeeds. - fn spend_proof_verification_success(seed_phrase_randomness in any::<[u8; 32]>(), spend_auth_randomizer in fr_strategy(), value_amount in 2..2000000000u64, num_commitments in 1..2000u64, v_blinding in fr_strategy()) { - let mut rng = OsRng; - let (pk, vk) = generate_prepared_test_parameters::(&mut rng); + prop_compose! { + fn arb_valid_spend_statement()(v_blinding in fr_strategy(), spend_auth_randomizer in fr_strategy(), asset_id64 in any::(), address_index in any::(), amount in any::(), seed_phrase_randomness in any::<[u8; 32]>(), rseed_randomness in any::<[u8; 32]>(), num_commitments in 0..100) -> (SpendProofPublic, SpendProofPrivate) { + let seed_phrase = SeedPhrase::from_randomness(&seed_phrase_randomness); + let sk_sender = SpendKey::from_seed_phrase_bip44(seed_phrase, &Bip44Path::new(0)); + let fvk_sender = sk_sender.full_viewing_key(); + let ivk_sender = fvk_sender.incoming(); + let (sender, _dtk_d) = ivk_sender.payment_address(address_index.into()); + let value_to_send = Value { + amount: Amount::from(amount), + asset_id: asset::Id(Fq::from(asset_id64)), + }; + let note = Note::from_parts( + sender, + value_to_send, + Rseed(rseed_randomness), + ).expect("should be able to create note"); + let note_commitment = note.commit(); + let rsk = sk_sender.spend_auth_key().randomize(&spend_auth_randomizer); + let nk = *sk_sender.nullifier_key(); + let ak: VerificationKey = sk_sender.spend_auth_key().into(); - let seed_phrase = SeedPhrase::from_randomness(&seed_phrase_randomness); - let sk_sender = SpendKey::from_seed_phrase_bip44(seed_phrase, &Bip44Path::new(0)); - let fvk_sender = sk_sender.full_viewing_key(); - let ivk_sender = fvk_sender.incoming(); - let (sender, _dtk_d) = ivk_sender.payment_address(0u32.into()); + let mut sct = tct::Tree::new(); - let value_to_send = Value { - amount: value_amount.into(), - asset_id: asset::Cache::with_known_assets().get_unit("upenumbra").unwrap().id(), - }; + // Next, we simulate the case where the SCT is not empty by adding `num_commitments` + // unrelated items in the SCT. + for i in 0..num_commitments { + // To avoid duplicate note commitments, we use the `i` counter as the Rseed randomness + let rseed = Rseed([i as u8; 32]); + let dummy_note_commitment = Note::from_parts(sender, value_to_send, rseed).expect("can create note").commit(); + sct.insert(tct::Witness::Keep, dummy_note_commitment).expect("should be able to insert note commitments into the SCT"); + } - let note = Note::generate(&mut rng, &sender, value_to_send); - let note_commitment = note.commit(); - let rsk = sk_sender.spend_auth_key().randomize(&spend_auth_randomizer); - let nk = *sk_sender.nullifier_key(); - let ak: VerificationKey = sk_sender.spend_auth_key().into(); - let mut sct = tct::Tree::new(); + sct.insert(tct::Witness::Keep, note_commitment).expect("should be able to insert note commitments into the SCT"); + let anchor = sct.root(); + let state_commitment_proof = sct.witness(note_commitment).expect("can witness note commitment"); + let balance_commitment = value_to_send.commit(v_blinding); + let rk: VerificationKey = rsk.into(); + let nullifier = Nullifier::derive(&nk, state_commitment_proof.position(), ¬e_commitment); - // Next, we simulate the case where the SCT is not empty by adding `num_commitments` - // unrelated items in the SCT. - for _ in 0..num_commitments { - let random_note_commitment = Note::generate(&mut rng, &sender, value_to_send).commit(); - sct.insert(tct::Witness::Keep, random_note_commitment).unwrap(); + let public = SpendProofPublic { + anchor, + balance_commitment, + nullifier, + rk, + }; + let private = SpendProofPrivate { + state_commitment_proof, + note, + v_blinding, + spend_auth_randomizer, + ak, + nk, + }; + (public, private) } - - sct.insert(tct::Witness::Keep, note_commitment).unwrap(); - let anchor = sct.root(); - let state_commitment_proof = sct.witness(note_commitment).unwrap(); - let balance_commitment = value_to_send.commit(v_blinding); - let rk: VerificationKey = rsk.into(); - let nf = Nullifier::derive(&nk, state_commitment_proof.position(), ¬e_commitment); - - let blinding_r = Fq::rand(&mut OsRng); - let blinding_s = Fq::rand(&mut OsRng); - let public = SpendProofPublic { - anchor, - balance_commitment, - nullifier: nf, - rk, - }; - let private = SpendProofPrivate { - state_commitment_proof, - note, - v_blinding, - spend_auth_randomizer, - ak, - nk, - }; - let proof = SpendProof::prove( - blinding_r, - blinding_s, - &pk, - public.clone(), private - ) - .expect("can create proof"); - - let proof_result = proof.verify(&vk, public); - assert!(proof_result.is_ok()); } + + proptest! { + #[test] + fn spend_proof_happy_path((public, private) in arb_valid_spend_statement()) { + assert!(check_satisfaction(&public, &private).is_ok()); + assert!(check_circuit_satisfaction(public, private).is_ok()); + } } proptest! { From 0a5bfd3a4fb165a13350f2045173806d1622b198 Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Fri, 5 Jan 2024 17:14:23 -0500 Subject: [PATCH 80/84] test: Rust proof satisfaction method for `DelegatorVoteProof` --- .../governance/src/delegator_vote/proof.rs | 220 ++++++++++++------ 1 file changed, 149 insertions(+), 71 deletions(-) diff --git a/crates/core/component/governance/src/delegator_vote/proof.rs b/crates/core/component/governance/src/delegator_vote/proof.rs index 8a51a4d277..9a5319b2e0 100644 --- a/crates/core/component/governance/src/delegator_vote/proof.rs +++ b/crates/core/component/governance/src/delegator_vote/proof.rs @@ -1,6 +1,7 @@ use base64::{engine::general_purpose, Engine as _}; use std::str::FromStr; +use anyhow::Result; use ark_groth16::r1cs_to_qap::LibsnarkReduction; use ark_r1cs_std::{prelude::*, uint8::UInt8}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize}; @@ -60,6 +61,84 @@ pub struct DelegatorVoteProofPrivate { pub nk: NullifierKey, } +#[cfg(test)] +fn check_satisfaction( + public: &DelegatorVoteProofPublic, + private: &DelegatorVoteProofPrivate, +) -> Result<()> { + use penumbra_keys::keys::FullViewingKey; + + let note_commitment = private.note.commit(); + if note_commitment != private.state_commitment_proof.commitment() { + anyhow::bail!("note commitment did not match state commitment proof"); + } + + let nullifier = Nullifier::derive( + &private.nk, + private.state_commitment_proof.position(), + ¬e_commitment, + ); + if nullifier != public.nullifier { + anyhow::bail!("nullifier did not match public input"); + } + + private.state_commitment_proof.verify(public.anchor)?; + + let rk = private.ak.randomize(&private.spend_auth_randomizer); + if rk != public.rk { + anyhow::bail!("randomized spend auth key did not match public input"); + } + + let fvk = FullViewingKey::from_components(private.ak, private.nk); + let ivk = fvk.incoming(); + let transmission_key = ivk.diversified_public(&private.note.diversified_generator()); + if transmission_key != *private.note.transmission_key() { + anyhow::bail!("transmission key did not match note"); + } + + let balance_commitment = private.note.value().commit(private.v_blinding); + if balance_commitment != public.balance_commitment { + anyhow::bail!("balance commitment did not match public input"); + } + + if private.note.diversified_generator() == decaf377::Element::default() { + anyhow::bail!("diversified generator is identity"); + } + if private.ak.is_identity() { + anyhow::bail!("ak is identity"); + } + + if public.start_position.commitment() != 0 { + anyhow::bail!("start position commitment index is not zero"); + } + + if private.state_commitment_proof.position() >= public.start_position { + anyhow::bail!("note did not exist prior to the start of voting"); + } + + Ok(()) +} + +#[cfg(test)] +fn check_circuit_satisfaction( + public: DelegatorVoteProofPublic, + private: DelegatorVoteProofPrivate, +) -> Result<()> { + use ark_relations::r1cs::{self, ConstraintSystem}; + + let cs = ConstraintSystem::new_ref(); + let circuit = DelegatorVoteCircuit::new(public, private); + cs.set_optimization_goal(r1cs::OptimizationGoal::Constraints); + circuit + .generate_constraints(cs.clone()) + .expect("can generate constraints from circuit"); + cs.finalize(); + if !cs.is_satisfied()? { + anyhow::bail!("constraints are not satisfied"); + } + Ok(()) +} + /// Groth16 proof for delegator voting. #[derive(Clone, Debug)] pub struct DelegatorVoteCircuit { @@ -372,6 +451,7 @@ mod tests { use decaf377::{Fq, Fr}; use penumbra_asset::{asset, Value}; use penumbra_keys::keys::{SeedPhrase, SpendKey}; + use penumbra_num::Amount; use penumbra_proof_params::generate_prepared_test_parameters; use penumbra_sct::Nullifier; use proptest::prelude::*; @@ -383,79 +463,77 @@ mod tests { .boxed() } - proptest! { - #![proptest_config(ProptestConfig::with_cases(1))] - #[test] - fn delegator_vote_happy_path(seed_phrase_randomness in any::<[u8; 32]>(), spend_auth_randomizer in fr_strategy(), value_amount in 1..2000000000u64, num_commitments in 0..2000u64) { - let mut rng = OsRng; - let (pk, vk) = generate_prepared_test_parameters::(&mut rng); - - let seed_phrase = SeedPhrase::from_randomness(&seed_phrase_randomness); - let sk_sender = SpendKey::from_seed_phrase_bip44(seed_phrase, &Bip44Path::new(0)); - let fvk_sender = sk_sender.full_viewing_key(); - let ivk_sender = fvk_sender.incoming(); - let (sender, _dtk_d) = ivk_sender.payment_address(0u32.into()); - - let value_to_send = Value { - amount: value_amount.into(), - asset_id: asset::Cache::with_known_assets().get_unit("upenumbra").unwrap().id(), - }; - - let note = Note::generate(&mut rng, &sender, value_to_send); - let note_commitment = note.commit(); - let rsk = sk_sender.spend_auth_key().randomize(&spend_auth_randomizer); - let nk = *sk_sender.nullifier_key(); - let ak: VerificationKey = sk_sender.spend_auth_key().into(); - let mut sct = tct::Tree::new(); - - // Next, we simulate the case where the SCT is not empty by adding `num_commitments` - // unrelated items in the SCT. - for _ in 0..num_commitments { - let random_note_commitment = Note::generate(&mut rng, &sender, value_to_send).commit(); - sct.insert(tct::Witness::Keep, random_note_commitment).unwrap(); + prop_compose! { + fn arb_valid_delegator_vote_statement()(v_blinding in fr_strategy(), spend_auth_randomizer in fr_strategy(), asset_id64 in any::(), address_index in any::(), amount in any::(), seed_phrase_randomness in any::<[u8; 32]>(), rseed_randomness in any::<[u8; 32]>(), num_commitments in 0..100) -> (DelegatorVoteProofPublic, DelegatorVoteProofPrivate) { + let seed_phrase = SeedPhrase::from_randomness(&seed_phrase_randomness); + let sk_sender = SpendKey::from_seed_phrase_bip44(seed_phrase, &Bip44Path::new(0)); + let fvk_sender = sk_sender.full_viewing_key(); + let ivk_sender = fvk_sender.incoming(); + let (sender, _dtk_d) = ivk_sender.payment_address(address_index.into()); + let value_to_send = Value { + amount: Amount::from(amount), + asset_id: asset::Id(Fq::from(asset_id64)), + }; + let note = Note::from_parts( + sender, + value_to_send, + Rseed(rseed_randomness), + ).expect("should be able to create note"); + let note_commitment = note.commit(); + let rsk = sk_sender.spend_auth_key().randomize(&spend_auth_randomizer); + let nk = *sk_sender.nullifier_key(); + let ak: VerificationKey = sk_sender.spend_auth_key().into(); + + let mut sct = tct::Tree::new(); + + // Next, we simulate the case where the SCT is not empty by adding `num_commitments` + // unrelated items in the SCT. + for i in 0..num_commitments { + // To avoid duplicate note commitments, we use the `i` counter as the Rseed randomness + let rseed = Rseed([i as u8; 32]); + let dummy_note_commitment = Note::from_parts(sender, value_to_send, rseed).expect("can create note").commit(); + sct.insert(tct::Witness::Keep, dummy_note_commitment).expect("can insert note commitment into SCT"); + } + + sct.insert(tct::Witness::Keep, note_commitment).expect("can insert note commitment into SCT"); + let anchor = sct.root(); + let state_commitment_proof = sct.witness(note_commitment).expect("can witness note commitment"); + + // All proposals should have a position commitment index of zero, so we need to end the epoch + // and get the position that corresponds to the first commitment in the new epoch. + sct.end_epoch().expect("should be able to end an epoch"); + let first_note_commitment = Note::from_parts(sender, value_to_send, Rseed([u8::MAX; 32])).expect("can create note").commit(); + sct.insert(tct::Witness::Keep, first_note_commitment).expect("can insert note commitment into SCT"); + let start_position = sct.witness(first_note_commitment).expect("can witness note commitment").position(); + + let balance_commitment = value_to_send.commit(v_blinding); + let rk: VerificationKey = rsk.into(); + let nullifier = Nullifier::derive(&nk, state_commitment_proof.position(), ¬e_commitment); + + let public = DelegatorVoteProofPublic { + anchor, + balance_commitment, + nullifier, + rk, + start_position, + }; + let private = DelegatorVoteProofPrivate { + state_commitment_proof, + note, + v_blinding, + spend_auth_randomizer, + ak, + nk, + }; + (public, private) } + } - sct.insert(tct::Witness::Keep, note_commitment).unwrap(); - let anchor = sct.root(); - let state_commitment_proof = sct.witness(note_commitment).unwrap(); - sct.end_epoch().unwrap(); - - let first_note_commitment = Note::generate(&mut rng, &sender, value_to_send).commit(); - sct.insert(tct::Witness::Keep, first_note_commitment).unwrap(); - let start_position = sct.witness(first_note_commitment).unwrap().position(); - - let balance_commitment = value_to_send.commit(Fr::from(0u64)); - let rk: VerificationKey = rsk.into(); - let nf = Nullifier::derive(&nk, state_commitment_proof.position(), ¬e_commitment); - - let blinding_r = Fq::rand(&mut OsRng); - let blinding_s = Fq::rand(&mut OsRng); - let public = DelegatorVoteProofPublic { - anchor, - balance_commitment, - nullifier: nf, - rk, - start_position, - }; - let private = DelegatorVoteProofPrivate { - state_commitment_proof, - note, - v_blinding: Fr::from(0u64), - spend_auth_randomizer, - ak, - nk, - }; - - let proof = DelegatorVoteProof::prove( - blinding_r, - blinding_s, - &pk, - public.clone(), private - ) - .expect("can create proof"); - - let proof_result = proof.verify(&vk, public); - assert!(proof_result.is_ok()); + proptest! { + #[test] + fn delegator_vote_happy_path((public, private) in arb_valid_delegator_vote_statement()) { + assert!(check_satisfaction(&public, &private).is_ok()); + assert!(check_circuit_satisfaction(public, private).is_ok()); } } From 28ee5f71ba620e77b9ddf6ebcd740ed6a5be359c Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Tue, 9 Jan 2024 13:14:01 -0500 Subject: [PATCH 81/84] refactor: remove new impls for remaining circuits Followup from #3571 --- .../governance/src/delegator_vote/proof.rs | 111 +++++------------- .../shielded-pool/src/nullifier_derivation.rs | 54 +++------ .../shielded-pool/src/spend/proof.rs | 103 +++++----------- 3 files changed, 77 insertions(+), 191 deletions(-) diff --git a/crates/core/component/governance/src/delegator_vote/proof.rs b/crates/core/component/governance/src/delegator_vote/proof.rs index 9a5319b2e0..6cfad88762 100644 --- a/crates/core/component/governance/src/delegator_vote/proof.rs +++ b/crates/core/component/governance/src/delegator_vote/proof.rs @@ -127,7 +127,7 @@ fn check_circuit_satisfaction( use ark_relations::r1cs::{self, ConstraintSystem}; let cs = ConstraintSystem::new_ref(); - let circuit = DelegatorVoteCircuit::new(public, private); + let circuit = DelegatorVoteCircuit { public, private }; cs.set_optimization_goal(r1cs::OptimizationGoal::Constraints); circuit .generate_constraints(cs.clone()) @@ -142,97 +142,44 @@ fn check_circuit_satisfaction( /// Groth16 proof for delegator voting. #[derive(Clone, Debug)] pub struct DelegatorVoteCircuit { - /// Inclusion proof for the note commitment. - state_commitment_proof: tct::Proof, - /// The note being spent. - note: Note, - /// The blinding factor used for generating the value commitment. - v_blinding: Fr, - /// The randomizer used for generating the randomized spend auth key. - spend_auth_randomizer: Fr, - /// The spend authorization key. - ak: VerificationKey, - /// The nullifier deriving key. - nk: NullifierKey, - - /// the merkle root of the state commitment tree. - anchor: tct::Root, - /// value commitment of the note to be spent. - balance_commitment: balance::Commitment, - /// nullifier of the note to be spent. - nullifier: Nullifier, - /// the randomized verification spend key. - rk: VerificationKey, - /// the start position of the proposal being voted on. - start_position: tct::Position, -} - -impl DelegatorVoteCircuit { - fn new( - DelegatorVoteProofPublic { - anchor, - balance_commitment, - nullifier, - rk, - start_position, - }: DelegatorVoteProofPublic, - DelegatorVoteProofPrivate { - state_commitment_proof, - note, - v_blinding, - spend_auth_randomizer, - ak, - nk, - }: DelegatorVoteProofPrivate, - ) -> Self { - Self { - state_commitment_proof, - note, - v_blinding, - spend_auth_randomizer, - ak, - nk, - anchor, - balance_commitment, - nullifier, - rk, - start_position, - } - } + public: DelegatorVoteProofPublic, + private: DelegatorVoteProofPrivate, } impl ConstraintSynthesizer for DelegatorVoteCircuit { fn generate_constraints(self, cs: ConstraintSystemRef) -> ark_relations::r1cs::Result<()> { // Witnesses - let note_var = note::NoteVar::new_witness(cs.clone(), || Ok(self.note.clone()))?; + let note_var = note::NoteVar::new_witness(cs.clone(), || Ok(self.private.note.clone()))?; let claimed_note_commitment = StateCommitmentVar::new_witness(cs.clone(), || { - Ok(self.state_commitment_proof.commitment()) + Ok(self.private.state_commitment_proof.commitment()) })?; let delegator_position_var = tct::r1cs::PositionVar::new_witness(cs.clone(), || { - Ok(self.state_commitment_proof.position()) + Ok(self.private.state_commitment_proof.position()) })?; let delegator_position_bits = delegator_position_var.to_bits_le()?; let merkle_path_var = tct::r1cs::MerkleAuthPathVar::new_witness(cs.clone(), || { - Ok(self.state_commitment_proof) + Ok(self.private.state_commitment_proof) })?; - let v_blinding_arr: [u8; 32] = self.v_blinding.to_bytes(); + let v_blinding_arr: [u8; 32] = self.private.v_blinding.to_bytes(); let v_blinding_vars = UInt8::new_witness_vec(cs.clone(), &v_blinding_arr)?; - let spend_auth_randomizer_var = - SpendAuthRandomizerVar::new_witness(cs.clone(), || Ok(self.spend_auth_randomizer))?; + let spend_auth_randomizer_var = SpendAuthRandomizerVar::new_witness(cs.clone(), || { + Ok(self.private.spend_auth_randomizer) + })?; let ak_element_var: AuthorizationKeyVar = - AuthorizationKeyVar::new_witness(cs.clone(), || Ok(self.ak))?; - let nk_var = NullifierKeyVar::new_witness(cs.clone(), || Ok(self.nk))?; + AuthorizationKeyVar::new_witness(cs.clone(), || Ok(self.private.ak))?; + let nk_var = NullifierKeyVar::new_witness(cs.clone(), || Ok(self.private.nk))?; // Public inputs - let anchor_var = FqVar::new_input(cs.clone(), || Ok(Fq::from(self.anchor)))?; + let anchor_var = FqVar::new_input(cs.clone(), || Ok(Fq::from(self.public.anchor)))?; let claimed_balance_commitment_var = - BalanceCommitmentVar::new_input(cs.clone(), || Ok(self.balance_commitment))?; - let claimed_nullifier_var = NullifierVar::new_input(cs.clone(), || Ok(self.nullifier))?; - let rk_var = RandomizedVerificationKey::new_input(cs.clone(), || Ok(self.rk))?; - let start_position = PositionVar::new_input(cs.clone(), || Ok(self.start_position))?; + BalanceCommitmentVar::new_input(cs.clone(), || Ok(self.public.balance_commitment))?; + let claimed_nullifier_var = + NullifierVar::new_input(cs.clone(), || Ok(self.public.nullifier))?; + let rk_var = RandomizedVerificationKey::new_input(cs.clone(), || Ok(self.public.rk))?; + let start_position = PositionVar::new_input(cs.clone(), || Ok(self.public.start_position))?; // Note commitment integrity. let note_commitment_var = note_var.commit()?; @@ -327,19 +274,23 @@ impl DummyWitness for DelegatorVoteCircuit { .expect("able to witness just-inserted note commitment"); let start_position = state_commitment_proof.position(); - Self { + let public = DelegatorVoteProofPublic { + anchor, + balance_commitment: balance::Commitment(decaf377::basepoint()), + nullifier, + rk, + start_position, + }; + let private = DelegatorVoteProofPrivate { state_commitment_proof, note, v_blinding, spend_auth_randomizer, ak, nk, - anchor, - balance_commitment: balance::Commitment(decaf377::basepoint()), - nullifier, - rk, - start_position, - } + }; + + Self { public, private } } } @@ -354,7 +305,7 @@ impl DelegatorVoteProof { public: DelegatorVoteProofPublic, private: DelegatorVoteProofPrivate, ) -> anyhow::Result { - let circuit = DelegatorVoteCircuit::new(public, private); + let circuit = DelegatorVoteCircuit { public, private }; let proof = Groth16::::create_proof_with_reduction( circuit, pk, blinding_r, blinding_s, ) diff --git a/crates/core/component/shielded-pool/src/nullifier_derivation.rs b/crates/core/component/shielded-pool/src/nullifier_derivation.rs index b818b125fe..86b4d4bfd8 100644 --- a/crates/core/component/shielded-pool/src/nullifier_derivation.rs +++ b/crates/core/component/shielded-pool/src/nullifier_derivation.rs @@ -60,7 +60,7 @@ fn check_circuit_satisfaction( use ark_relations::r1cs::{self, ConstraintSystem}; let cs = ConstraintSystem::new_ref(); - let circuit = NullifierDerivationCircuit::new(public, private); + let circuit = NullifierDerivationCircuit { public, private }; cs.set_optimization_goal(r1cs::OptimizationGoal::Constraints); circuit .generate_constraints(cs.clone()) @@ -75,44 +75,22 @@ fn check_circuit_satisfaction( /// Groth16 proof for correct nullifier derivation. #[derive(Clone, Debug)] pub struct NullifierDerivationCircuit { - /// The nullifier deriving key. - nk: NullifierKey, - /// the position of the spent note. - position: tct::Position, - /// A commitment to the spent note. - note_commitment: StateCommitment, - /// nullifier of the spent note. - nullifier: Nullifier, -} - -impl NullifierDerivationCircuit { - fn new( - NullifierDerivationProofPublic { - position, - note_commitment, - nullifier, - }: NullifierDerivationProofPublic, - NullifierDerivationProofPrivate { nk }: NullifierDerivationProofPrivate, - ) -> Self { - Self { - nk, - note_commitment, - nullifier, - position, - } - } + public: NullifierDerivationProofPublic, + private: NullifierDerivationProofPrivate, } impl ConstraintSynthesizer for NullifierDerivationCircuit { fn generate_constraints(self, cs: ConstraintSystemRef) -> ark_relations::r1cs::Result<()> { // Witnesses - let nk_var = NullifierKeyVar::new_witness(cs.clone(), || Ok(self.nk))?; + let nk_var = NullifierKeyVar::new_witness(cs.clone(), || Ok(self.private.nk))?; // Public inputs - let claimed_nullifier_var = NullifierVar::new_input(cs.clone(), || Ok(self.nullifier))?; - let note_commitment_var = - tct::r1cs::StateCommitmentVar::new_input(cs.clone(), || Ok(self.note_commitment))?; - let position_var = tct::r1cs::PositionVar::new_input(cs, || Ok(self.position))?; + let claimed_nullifier_var = + NullifierVar::new_input(cs.clone(), || Ok(self.public.nullifier))?; + let note_commitment_var = tct::r1cs::StateCommitmentVar::new_input(cs.clone(), || { + Ok(self.public.note_commitment) + })?; + let position_var = tct::r1cs::PositionVar::new_input(cs, || Ok(self.public.position))?; // Nullifier integrity. let nullifier_var = NullifierVar::derive(&nk_var, &position_var, ¬e_commitment_var)?; @@ -147,12 +125,14 @@ impl DummyWitness for NullifierDerivationCircuit { .expect("able to witness just-inserted note commitment"); let position = state_commitment_proof.position(); - Self { + let public = NullifierDerivationProofPublic { + position, note_commitment, - nk, nullifier, - position, - } + }; + let private = NullifierDerivationProofPrivate { nk }; + + Self { public, private } } } @@ -166,7 +146,7 @@ impl NullifierDerivationProof { public: NullifierDerivationProofPublic, private: NullifierDerivationProofPrivate, ) -> anyhow::Result { - let circuit = NullifierDerivationCircuit::new(public, private); + let circuit = NullifierDerivationCircuit { public, private }; let proof = Groth16::::prove(pk, circuit, rng) .map_err(|err| anyhow::anyhow!(err))?; let mut proof_bytes = [0u8; GROTH16_PROOF_LENGTH_BYTES]; diff --git a/crates/core/component/shielded-pool/src/spend/proof.rs b/crates/core/component/shielded-pool/src/spend/proof.rs index bd98882ce4..0a05b307c8 100644 --- a/crates/core/component/shielded-pool/src/spend/proof.rs +++ b/crates/core/component/shielded-pool/src/spend/proof.rs @@ -118,7 +118,7 @@ fn check_circuit_satisfaction(public: SpendProofPublic, private: SpendProofPriva use ark_relations::r1cs::{self, ConstraintSystem}; let cs = ConstraintSystem::new_ref(); - let circuit = SpendCircuit::new(public, private); + let circuit = SpendCircuit { public, private }; cs.set_optimization_goal(r1cs::OptimizationGoal::Constraints); circuit .generate_constraints(cs.clone()) @@ -133,92 +133,43 @@ fn check_circuit_satisfaction(public: SpendProofPublic, private: SpendProofPriva /// Groth16 proof for spending existing notes. #[derive(Clone, Debug)] pub struct SpendCircuit { - /// Inclusion proof for the note commitment. - state_commitment_proof: tct::Proof, - /// The note being spent. - note: Note, - /// The blinding factor used for generating the value commitment. - v_blinding: Fr, - /// The randomizer used for generating the randomized spend auth key. - spend_auth_randomizer: Fr, - /// The spend authorization key. - ak: VerificationKey, - /// The nullifier deriving key. - nk: NullifierKey, - - /// the merkle root of the state commitment tree. - anchor: tct::Root, - /// value commitment of the note to be spent. - balance_commitment: balance::Commitment, - /// nullifier of the note to be spent. - nullifier: Nullifier, - /// the randomized verification spend key. - rk: VerificationKey, -} - -impl SpendCircuit { - fn new( - SpendProofPublic { - anchor, - balance_commitment, - nullifier, - rk, - }: SpendProofPublic, - SpendProofPrivate { - state_commitment_proof, - note, - v_blinding, - spend_auth_randomizer, - ak, - nk, - }: SpendProofPrivate, - ) -> Self { - Self { - state_commitment_proof, - note, - v_blinding, - spend_auth_randomizer, - ak, - nk, - anchor, - balance_commitment, - nullifier, - rk, - } - } + public: SpendProofPublic, + private: SpendProofPrivate, } impl ConstraintSynthesizer for SpendCircuit { fn generate_constraints(self, cs: ConstraintSystemRef) -> ark_relations::r1cs::Result<()> { // Witnesses - let note_var = note::NoteVar::new_witness(cs.clone(), || Ok(self.note.clone()))?; + let note_var = note::NoteVar::new_witness(cs.clone(), || Ok(self.private.note.clone()))?; let claimed_note_commitment = StateCommitmentVar::new_witness(cs.clone(), || { - Ok(self.state_commitment_proof.commitment()) + Ok(self.private.state_commitment_proof.commitment()) })?; let position_var = tct::r1cs::PositionVar::new_witness(cs.clone(), || { - Ok(self.state_commitment_proof.position()) + Ok(self.private.state_commitment_proof.position()) })?; let position_bits = position_var.to_bits_le()?; let merkle_path_var = tct::r1cs::MerkleAuthPathVar::new_witness(cs.clone(), || { - Ok(self.state_commitment_proof) + Ok(self.private.state_commitment_proof) })?; - let v_blinding_arr: [u8; 32] = self.v_blinding.to_bytes(); + let v_blinding_arr: [u8; 32] = self.private.v_blinding.to_bytes(); let v_blinding_vars = UInt8::new_witness_vec(cs.clone(), &v_blinding_arr)?; - let spend_auth_randomizer_var = - SpendAuthRandomizerVar::new_witness(cs.clone(), || Ok(self.spend_auth_randomizer))?; + let spend_auth_randomizer_var = SpendAuthRandomizerVar::new_witness(cs.clone(), || { + Ok(self.private.spend_auth_randomizer) + })?; let ak_element_var: AuthorizationKeyVar = - AuthorizationKeyVar::new_witness(cs.clone(), || Ok(self.ak))?; - let nk_var = NullifierKeyVar::new_witness(cs.clone(), || Ok(self.nk))?; + AuthorizationKeyVar::new_witness(cs.clone(), || Ok(self.private.ak))?; + let nk_var = NullifierKeyVar::new_witness(cs.clone(), || Ok(self.private.nk))?; // Public inputs - let anchor_var = FqVar::new_input(cs.clone(), || Ok(Fq::from(self.anchor)))?; + let anchor_var = FqVar::new_input(cs.clone(), || Ok(Fq::from(self.public.anchor)))?; let claimed_balance_commitment_var = - BalanceCommitmentVar::new_input(cs.clone(), || Ok(self.balance_commitment))?; - let claimed_nullifier_var = NullifierVar::new_input(cs.clone(), || Ok(self.nullifier))?; - let rk_var = RandomizedVerificationKey::new_input(cs.clone(), || Ok(self.rk))?; + BalanceCommitmentVar::new_input(cs.clone(), || Ok(self.public.balance_commitment))?; + let claimed_nullifier_var = + NullifierVar::new_input(cs.clone(), || Ok(self.public.nullifier))?; + let rk_var = RandomizedVerificationKey::new_input(cs.clone(), || Ok(self.public.rk))?; // We short circuit to true if value released is 0. That means this is a _dummy_ spend. let is_dummy = note_var.amount().is_eq(&FqVar::zero())?; @@ -299,18 +250,22 @@ impl DummyWitness for SpendCircuit { .witness(note_commitment) .expect("able to witness just-inserted note commitment"); - Self { + let public = SpendProofPublic { + anchor, + balance_commitment: balance::Commitment(decaf377::basepoint()), + nullifier, + rk, + }; + let private = SpendProofPrivate { state_commitment_proof, note, v_blinding, spend_auth_randomizer, ak, nk, - anchor, - balance_commitment: balance::Commitment(decaf377::basepoint()), - nullifier, - rk, - } + }; + + Self { public, private } } } @@ -327,7 +282,7 @@ impl SpendProof { public: SpendProofPublic, private: SpendProofPrivate, ) -> anyhow::Result { - let circuit = SpendCircuit::new(public, private); + let circuit = SpendCircuit { public, private }; let proof = Groth16::::create_proof_with_reduction( circuit, pk, blinding_r, blinding_s, ) From c104b316bb32a5cae9554311b77980151bd696b7 Mon Sep 17 00:00:00 2001 From: katelyn martin Date: Wed, 10 Jan 2024 08:54:16 -0500 Subject: [PATCH 82/84] =?UTF-8?q?ibc:=20=E2=9B=85=20hoist=20ics02=20valida?= =?UTF-8?q?tion=20out=20of=20client=5Fcounter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit nb: this commit strictly contains plain code motion. it does not make any changes to the code being moved. `ics02_validation` contains some important code for interfacing with tendermint/cometbft. while this submodule lives beneath the client counter logic, its contents are used in our message handling code related to e.g. misbehavior. this hoists this submodule up one level, to be a child of `penumbra_ibc::component`. --- crates/core/component/ibc/src/component.rs | 1 + .../ibc/src/component/client_counter.rs | 87 +------------------ .../ibc/src/component/ics02_validation.rs | 80 +++++++++++++++++ .../component/msg_handler/create_client.rs | 4 +- .../src/component/msg_handler/misbehavior.rs | 5 +- .../component/msg_handler/update_client.rs | 3 +- 6 files changed, 86 insertions(+), 94 deletions(-) create mode 100644 crates/core/component/ibc/src/component/ics02_validation.rs diff --git a/crates/core/component/ibc/src/component.rs b/crates/core/component/ibc/src/component.rs index 4cd8ecd42c..10490adf97 100644 --- a/crates/core/component/ibc/src/component.rs +++ b/crates/core/component/ibc/src/component.rs @@ -4,6 +4,7 @@ mod client; mod client_counter; mod connection; mod connection_counter; +mod ics02_validation; #[cfg(feature = "rpc")] pub mod rpc; diff --git a/crates/core/component/ibc/src/component/client_counter.rs b/crates/core/component/ibc/src/component/client_counter.rs index 01cc64f5d7..5b0a7b08b3 100644 --- a/crates/core/component/ibc/src/component/client_counter.rs +++ b/crates/core/component/ibc/src/component/client_counter.rs @@ -1,4 +1,4 @@ -use crate::IBC_PROOF_SPECS; +use crate::{component::ics02_validation, IBC_PROOF_SPECS}; use ibc_proto::google::protobuf::Any; use ibc_types::core::client::Height; use ibc_types::core::connection::{ChainId, ConnectionId}; @@ -90,91 +90,6 @@ impl From for pb::ClientConnections { } } -pub(crate) mod ics02_validation { - use anyhow::{anyhow, Result}; - use ibc_proto::google::protobuf::Any; - use ibc_types::lightclients::tendermint::client_state::{ - ClientState as TendermintClientState, TENDERMINT_CLIENT_STATE_TYPE_URL, - }; - use ibc_types::lightclients::tendermint::consensus_state::{ - ConsensusState as TendermintConsensusState, TENDERMINT_CONSENSUS_STATE_TYPE_URL, - }; - use ibc_types::lightclients::tendermint::header::{ - Header as TendermintHeader, TENDERMINT_HEADER_TYPE_URL, - }; - use ibc_types::lightclients::tendermint::misbehaviour::{ - Misbehaviour as TendermintMisbehavior, TENDERMINT_MISBEHAVIOUR_TYPE_URL, - }; - - pub fn is_tendermint_header_state(header: &Any) -> bool { - header.type_url.as_str() == TENDERMINT_HEADER_TYPE_URL - } - pub fn is_tendermint_consensus_state(consensus_state: &Any) -> bool { - consensus_state.type_url.as_str() == TENDERMINT_CONSENSUS_STATE_TYPE_URL - } - pub fn is_tendermint_client_state(client_state: &Any) -> bool { - client_state.type_url.as_str() == TENDERMINT_CLIENT_STATE_TYPE_URL - } - pub fn is_tendermint_misbehavior(misbehavior: &Any) -> bool { - misbehavior.type_url.as_str() == TENDERMINT_MISBEHAVIOUR_TYPE_URL - } - - pub fn get_tendermint_misbehavior(misbehavior: Any) -> Result { - if is_tendermint_misbehavior(&misbehavior) { - TendermintMisbehavior::try_from(misbehavior) - .map_err(|e| anyhow!(format!("failed to deserialize tendermint misbehavior: {e}"))) - } else { - anyhow::bail!(format!( - "expected a tendermint light client misbehavior, got: {}", - misbehavior.type_url.as_str() - )) - } - } - - pub fn get_tendermint_header(header: Any) -> Result { - if is_tendermint_header_state(&header) { - TendermintHeader::try_from(header) - .map_err(|e| anyhow!(format!("failed to deserialize tendermint header: {e}"))) - } else { - anyhow::bail!(format!( - "expected a tendermint light client header, got: {}", - header.type_url.as_str() - )) - } - } - - pub fn get_tendermint_consensus_state( - consensus_state: Any, - ) -> Result { - if is_tendermint_consensus_state(&consensus_state) { - TendermintConsensusState::try_from(consensus_state).map_err(|e| { - anyhow!(format!( - "failed to deserialize tendermint consensus state: {e}" - )) - }) - } else { - anyhow::bail!(format!( - "expected tendermint consensus state, got: {}", - consensus_state.type_url.as_str() - )) - } - } - pub fn get_tendermint_client_state(client_state: Any) -> Result { - if is_tendermint_client_state(&client_state) { - TendermintClientState::try_from(client_state).map_err(|e| { - anyhow!(format!( - "failed to deserialize tendermint client state: {e}" - )) - }) - } else { - anyhow::bail!(format!( - "expected tendermint client state, got: {}", - client_state.type_url.as_str() - )) - } - } -} - // Check that the trust threshold is: // // a) non-zero diff --git a/crates/core/component/ibc/src/component/ics02_validation.rs b/crates/core/component/ibc/src/component/ics02_validation.rs new file mode 100644 index 0000000000..82f22bf470 --- /dev/null +++ b/crates/core/component/ibc/src/component/ics02_validation.rs @@ -0,0 +1,80 @@ +use anyhow::{anyhow, Result}; +use ibc_proto::google::protobuf::Any; +use ibc_types::lightclients::tendermint::client_state::{ + ClientState as TendermintClientState, TENDERMINT_CLIENT_STATE_TYPE_URL, +}; +use ibc_types::lightclients::tendermint::consensus_state::{ + ConsensusState as TendermintConsensusState, TENDERMINT_CONSENSUS_STATE_TYPE_URL, +}; +use ibc_types::lightclients::tendermint::header::{ + Header as TendermintHeader, TENDERMINT_HEADER_TYPE_URL, +}; +use ibc_types::lightclients::tendermint::misbehaviour::{ + Misbehaviour as TendermintMisbehavior, TENDERMINT_MISBEHAVIOUR_TYPE_URL, +}; + +pub fn is_tendermint_header_state(header: &Any) -> bool { + header.type_url.as_str() == TENDERMINT_HEADER_TYPE_URL +} +pub fn is_tendermint_consensus_state(consensus_state: &Any) -> bool { + consensus_state.type_url.as_str() == TENDERMINT_CONSENSUS_STATE_TYPE_URL +} +pub fn is_tendermint_client_state(client_state: &Any) -> bool { + client_state.type_url.as_str() == TENDERMINT_CLIENT_STATE_TYPE_URL +} +pub fn is_tendermint_misbehavior(misbehavior: &Any) -> bool { + misbehavior.type_url.as_str() == TENDERMINT_MISBEHAVIOUR_TYPE_URL +} + +pub fn get_tendermint_misbehavior(misbehavior: Any) -> Result { + if is_tendermint_misbehavior(&misbehavior) { + TendermintMisbehavior::try_from(misbehavior) + .map_err(|e| anyhow!(format!("failed to deserialize tendermint misbehavior: {e}"))) + } else { + anyhow::bail!(format!( + "expected a tendermint light client misbehavior, got: {}", + misbehavior.type_url.as_str() + )) + } +} + +pub fn get_tendermint_header(header: Any) -> Result { + if is_tendermint_header_state(&header) { + TendermintHeader::try_from(header) + .map_err(|e| anyhow!(format!("failed to deserialize tendermint header: {e}"))) + } else { + anyhow::bail!(format!( + "expected a tendermint light client header, got: {}", + header.type_url.as_str() + )) + } +} + +pub fn get_tendermint_consensus_state(consensus_state: Any) -> Result { + if is_tendermint_consensus_state(&consensus_state) { + TendermintConsensusState::try_from(consensus_state).map_err(|e| { + anyhow!(format!( + "failed to deserialize tendermint consensus state: {e}" + )) + }) + } else { + anyhow::bail!(format!( + "expected tendermint consensus state, got: {}", + consensus_state.type_url.as_str() + )) + } +} +pub fn get_tendermint_client_state(client_state: Any) -> Result { + if is_tendermint_client_state(&client_state) { + TendermintClientState::try_from(client_state).map_err(|e| { + anyhow!(format!( + "failed to deserialize tendermint client state: {e}" + )) + }) + } else { + anyhow::bail!(format!( + "expected tendermint client state, got: {}", + client_state.type_url.as_str() + )) + } +} diff --git a/crates/core/component/ibc/src/component/msg_handler/create_client.rs b/crates/core/component/ibc/src/component/msg_handler/create_client.rs index ccc1f9cc84..93350861f8 100644 --- a/crates/core/component/ibc/src/component/msg_handler/create_client.rs +++ b/crates/core/component/ibc/src/component/msg_handler/create_client.rs @@ -8,8 +8,8 @@ use ibc_types::{ use crate::component::{ client::{StateReadExt as _, StateWriteExt as _}, - client_counter::{ics02_validation, ClientCounter}, - MsgHandler, + client_counter::ClientCounter, + ics02_validation, MsgHandler, }; #[async_trait] diff --git a/crates/core/component/ibc/src/component/msg_handler/misbehavior.rs b/crates/core/component/ibc/src/component/msg_handler/misbehavior.rs index 4e4fc5d581..8bcde276cf 100644 --- a/crates/core/component/ibc/src/component/msg_handler/misbehavior.rs +++ b/crates/core/component/ibc/src/component/msg_handler/misbehavior.rs @@ -13,12 +13,9 @@ use tendermint_light_client_verifier::{ ProdVerifier, Verdict, Verifier, }; -use crate::component::client::StateWriteExt as _; -use crate::component::client_counter::ics02_validation; -use crate::component::ClientStateReadExt as _; - use super::update_client::verify_header_validator_set; use super::MsgHandler; +use crate::component::{client::StateWriteExt as _, ics02_validation, ClientStateReadExt as _}; #[async_trait] impl MsgHandler for MsgSubmitMisbehaviour { diff --git a/crates/core/component/ibc/src/component/msg_handler/update_client.rs b/crates/core/component/ibc/src/component/msg_handler/update_client.rs index 8acddf9c3c..635e622c03 100644 --- a/crates/core/component/ibc/src/component/msg_handler/update_client.rs +++ b/crates/core/component/ibc/src/component/msg_handler/update_client.rs @@ -18,8 +18,7 @@ use tendermint_light_client_verifier::{ use crate::component::{ client::{Ics2ClientExt as _, StateReadExt as _, StateWriteExt as _}, - client_counter::ics02_validation, - MsgHandler, + ics02_validation, MsgHandler, }; #[async_trait] From 5adb302246b2f1ad61189fcedc483ecc2bc4fa0d Mon Sep 17 00:00:00 2001 From: katelyn martin Date: Wed, 10 Jan 2024 09:14:41 -0500 Subject: [PATCH 83/84] =?UTF-8?q?ibc:=20=E2=9B=85=20place=20validate=5Fpen?= =?UTF-8?q?umbra=5Fclient=5Fstate=20in=20ics02=5Fvalidation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit nb: this commit strictly contains plain code motion. it does not make any changes to the code being moved. while this was not originally placed in the ics02_validation submodule, it feels like it is more connected to that validation logic than the surrounding client counter types. this bears out to be true; it is `pub`, the client counter code isn't changed, and affected imports are in the message handler area. --- .../ibc/src/component/client_counter.rs | 84 +-------------- .../ibc/src/component/ics02_validation.rs | 102 ++++++++++++++++-- .../msg_handler/connection_open_ack.rs | 2 +- .../msg_handler/connection_open_try.rs | 2 +- 4 files changed, 94 insertions(+), 96 deletions(-) diff --git a/crates/core/component/ibc/src/component/client_counter.rs b/crates/core/component/ibc/src/component/client_counter.rs index 5b0a7b08b3..70d0673498 100644 --- a/crates/core/component/ibc/src/component/client_counter.rs +++ b/crates/core/component/ibc/src/component/client_counter.rs @@ -1,8 +1,5 @@ -use crate::{component::ics02_validation, IBC_PROOF_SPECS}; -use ibc_proto::google::protobuf::Any; use ibc_types::core::client::Height; -use ibc_types::core::connection::{ChainId, ConnectionId}; -use ibc_types::lightclients::tendermint::TrustThreshold; +use ibc_types::core::connection::ConnectionId; use penumbra_proto::{penumbra::core::component::ibc::v1alpha1 as pb, DomainType}; #[derive(Clone, Debug)] @@ -89,82 +86,3 @@ impl From for pb::ClientConnections { } } } - -// Check that the trust threshold is: -// -// a) non-zero -// b) greater or equal to 1/3 -// c) strictly less than 1 -fn validate_trust_threshold(trust_threshold: TrustThreshold) -> anyhow::Result<()> { - if trust_threshold.denominator() == 0 { - anyhow::bail!("trust threshold denominator cannot be zero"); - } - - if trust_threshold.numerator() * 3 < trust_threshold.denominator() { - anyhow::bail!("trust threshold must be greater than 1/3"); - } - - if trust_threshold.numerator() >= trust_threshold.denominator() { - anyhow::bail!("trust threshold must be strictly less than 1"); - } - - Ok(()) -} - -// validate the parameters of an AnyClientState, verifying that it is a valid Penumbra client -// state. -pub fn validate_penumbra_client_state( - client_state: Any, - chain_id: &str, - current_height: u64, -) -> anyhow::Result<()> { - let tm_client_state = ics02_validation::get_tendermint_client_state(client_state)?; - - if tm_client_state.frozen_height.is_some() { - anyhow::bail!("invalid client state: frozen"); - } - - // NOTE: Chain ID validation is actually not standardized yet. see - // https://github.com/informalsystems/ibc-rs/pull/304#discussion_r503917283 - let chain_id = ChainId::from_string(chain_id); - if chain_id != tm_client_state.chain_id { - anyhow::bail!("invalid client state: chain id does not match"); - } - - // check that the revision number is the same as our chain ID's version - if tm_client_state.latest_height().revision_number() != chain_id.version() { - anyhow::bail!("invalid client state: revision number does not match"); - } - - // check that the latest height isn't gte the current block height - if tm_client_state.latest_height().revision_height() >= current_height { - anyhow::bail!( - "invalid client state: latest height is greater than or equal to the current block height" - ); - } - - // check client proof specs match penumbra proof specs - if IBC_PROOF_SPECS.clone() != tm_client_state.proof_specs { - // allow legacy proof specs without prehash_key_before_comparison - let mut spec_with_prehash_key = tm_client_state.proof_specs.clone(); - spec_with_prehash_key[0].prehash_key_before_comparison = true; - spec_with_prehash_key[1].prehash_key_before_comparison = true; - if IBC_PROOF_SPECS.clone() != spec_with_prehash_key { - anyhow::bail!("invalid client state: proof specs do not match"); - } - } - - // check that the trust level is correct - validate_trust_threshold(tm_client_state.trust_level)?; - - // TODO: check that the unbonding period is correct - // - // - check unbonding period is greater than trusting period - if tm_client_state.unbonding_period < tm_client_state.trusting_period { - anyhow::bail!("invalid client state: unbonding period is less than trusting period"); - } - - // TODO: check upgrade path - - Ok(()) -} diff --git a/crates/core/component/ibc/src/component/ics02_validation.rs b/crates/core/component/ibc/src/component/ics02_validation.rs index 82f22bf470..144f4a7abe 100644 --- a/crates/core/component/ibc/src/component/ics02_validation.rs +++ b/crates/core/component/ibc/src/component/ics02_validation.rs @@ -1,16 +1,17 @@ +use crate::IBC_PROOF_SPECS; use anyhow::{anyhow, Result}; use ibc_proto::google::protobuf::Any; -use ibc_types::lightclients::tendermint::client_state::{ - ClientState as TendermintClientState, TENDERMINT_CLIENT_STATE_TYPE_URL, -}; -use ibc_types::lightclients::tendermint::consensus_state::{ - ConsensusState as TendermintConsensusState, TENDERMINT_CONSENSUS_STATE_TYPE_URL, -}; -use ibc_types::lightclients::tendermint::header::{ - Header as TendermintHeader, TENDERMINT_HEADER_TYPE_URL, -}; -use ibc_types::lightclients::tendermint::misbehaviour::{ - Misbehaviour as TendermintMisbehavior, TENDERMINT_MISBEHAVIOUR_TYPE_URL, +use ibc_types::{ + core::connection::ChainId, + lightclients::tendermint::{ + client_state::{ClientState as TendermintClientState, TENDERMINT_CLIENT_STATE_TYPE_URL}, + consensus_state::{ + ConsensusState as TendermintConsensusState, TENDERMINT_CONSENSUS_STATE_TYPE_URL, + }, + header::{Header as TendermintHeader, TENDERMINT_HEADER_TYPE_URL}, + misbehaviour::{Misbehaviour as TendermintMisbehavior, TENDERMINT_MISBEHAVIOUR_TYPE_URL}, + TrustThreshold, + }, }; pub fn is_tendermint_header_state(header: &Any) -> bool { @@ -78,3 +79,82 @@ pub fn get_tendermint_client_state(client_state: Any) -> Result anyhow::Result<()> { + let tm_client_state = get_tendermint_client_state(client_state)?; + + if tm_client_state.frozen_height.is_some() { + anyhow::bail!("invalid client state: frozen"); + } + + // NOTE: Chain ID validation is actually not standardized yet. see + // https://github.com/informalsystems/ibc-rs/pull/304#discussion_r503917283 + let chain_id = ChainId::from_string(chain_id); + if chain_id != tm_client_state.chain_id { + anyhow::bail!("invalid client state: chain id does not match"); + } + + // check that the revision number is the same as our chain ID's version + if tm_client_state.latest_height().revision_number() != chain_id.version() { + anyhow::bail!("invalid client state: revision number does not match"); + } + + // check that the latest height isn't gte the current block height + if tm_client_state.latest_height().revision_height() >= current_height { + anyhow::bail!( + "invalid client state: latest height is greater than or equal to the current block height" + ); + } + + // check client proof specs match penumbra proof specs + if IBC_PROOF_SPECS.clone() != tm_client_state.proof_specs { + // allow legacy proof specs without prehash_key_before_comparison + let mut spec_with_prehash_key = tm_client_state.proof_specs.clone(); + spec_with_prehash_key[0].prehash_key_before_comparison = true; + spec_with_prehash_key[1].prehash_key_before_comparison = true; + if IBC_PROOF_SPECS.clone() != spec_with_prehash_key { + anyhow::bail!("invalid client state: proof specs do not match"); + } + } + + // check that the trust level is correct + validate_trust_threshold(tm_client_state.trust_level)?; + + // TODO: check that the unbonding period is correct + // + // - check unbonding period is greater than trusting period + if tm_client_state.unbonding_period < tm_client_state.trusting_period { + anyhow::bail!("invalid client state: unbonding period is less than trusting period"); + } + + // TODO: check upgrade path + + Ok(()) +} + +// Check that the trust threshold is: +// +// a) non-zero +// b) greater or equal to 1/3 +// c) strictly less than 1 +fn validate_trust_threshold(trust_threshold: TrustThreshold) -> anyhow::Result<()> { + if trust_threshold.denominator() == 0 { + anyhow::bail!("trust threshold denominator cannot be zero"); + } + + if trust_threshold.numerator() * 3 < trust_threshold.denominator() { + anyhow::bail!("trust threshold must be greater than 1/3"); + } + + if trust_threshold.numerator() >= trust_threshold.denominator() { + anyhow::bail!("trust threshold must be strictly less than 1"); + } + + Ok(()) +} diff --git a/crates/core/component/ibc/src/component/msg_handler/connection_open_ack.rs b/crates/core/component/ibc/src/component/msg_handler/connection_open_ack.rs index 7dbddbff96..1b3757ec6d 100644 --- a/crates/core/component/ibc/src/component/msg_handler/connection_open_ack.rs +++ b/crates/core/component/ibc/src/component/msg_handler/connection_open_ack.rs @@ -12,8 +12,8 @@ use penumbra_chain::component::StateReadExt as _; use crate::{ component::{ client::StateReadExt as _, - client_counter::validate_penumbra_client_state, connection::{StateReadExt as _, StateWriteExt as _}, + ics02_validation::validate_penumbra_client_state, proof_verification, MsgHandler, }, IBC_COMMITMENT_PREFIX, diff --git a/crates/core/component/ibc/src/component/msg_handler/connection_open_try.rs b/crates/core/component/ibc/src/component/msg_handler/connection_open_try.rs index 6f83273c1d..e7c5b12d09 100644 --- a/crates/core/component/ibc/src/component/msg_handler/connection_open_try.rs +++ b/crates/core/component/ibc/src/component/msg_handler/connection_open_try.rs @@ -17,9 +17,9 @@ use penumbra_chain::component::StateReadExt as _; use crate::component::{ client::StateReadExt as _, - client_counter::validate_penumbra_client_state, connection::{StateReadExt as _, StateWriteExt as _}, connection_counter::SUPPORTED_VERSIONS, + ics02_validation::validate_penumbra_client_state, MsgHandler, }; From 08c66e5b2e175dbd7b11dd9d86a1214e66b32bd1 Mon Sep 17 00:00:00 2001 From: "Riad S. Wahby" <716593+kwantam@users.noreply.github.com> Date: Fri, 12 Jan 2024 13:58:49 -0500 Subject: [PATCH 84/84] typo: PRF takes input 1 (not 0) when deriving `nk` --- docs/protocol/src/protocol/addresses_keys/spend_key.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/protocol/src/protocol/addresses_keys/spend_key.md b/docs/protocol/src/protocol/addresses_keys/spend_key.md index b3e735aea6..fdbb7030fc 100644 --- a/docs/protocol/src/protocol/addresses_keys/spend_key.md +++ b/docs/protocol/src/protocol/addresses_keys/spend_key.md @@ -55,7 +55,7 @@ personalization `label`, key `key`, and input `input`. Define integer in little-endian order. Then ``` ask = from_le_bytes(prf_expand("Penumbra_ExpndSd", spend_key_bytes, 0)) mod r -nk = from_le_bytes(prf_expand("Penumbra_ExpndSd", spend_key_bytes, 0)) mod q +nk = from_le_bytes(prf_expand("Penumbra_ExpndSd", spend_key_bytes, 1)) mod q ``` The *spending key* consists of `spend_key_bytes` and `ask`. (Since `ask` is