From 4a3237ddc3296104eb843a13830373e13d6a0079 Mon Sep 17 00:00:00 2001 From: mindcarver <32150062+mindcarver@users.noreply.github.com> Date: Thu, 13 Jul 2023 05:06:43 +0800 Subject: [PATCH 01/16] fix: flag accessed but not defined: flush-interval (#1238) --- cmd/tx.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/tx.go b/cmd/tx.go index e1b5e124a..de83c177e 100644 --- a/cmd/tx.go +++ b/cmd/tx.go @@ -723,6 +723,7 @@ $ %s tx link-then-start demo-path --timeout 5s`, appName, appName)), cmd = initBlockFlag(a.viper, cmd) cmd = processorFlag(a.viper, cmd) cmd = updateTimeFlags(a.viper, cmd) + cmd = flushIntervalFlag(a.viper, cmd) return cmd } From af734164d32953a81f9e259566839f7c360aedce Mon Sep 17 00:00:00 2001 From: Ava Howell Date: Fri, 21 Jul 2023 20:14:04 -0700 Subject: [PATCH 02/16] penumbra provider: update protos (#1245) --- proto/cosmos/crypto/sr25519/keys.proto | 9 +- .../core/crypto/v1alpha1/crypto.pb.go | 253 ++- .../penumbra/core/dex/v1alpha1/dex.pb.go | 707 +++---- .../core/governance/v1alpha1/governance.pb.go | 302 ++- .../penumbra/core/stake/v1alpha1/stake.pb.go | 299 ++- .../transaction/v1alpha1/transaction.pb.go | 1636 ++++++++++++----- relayer/chains/penumbra/tx.go | 6 +- .../chains/penumbra/view/v1alpha1/view.pb.go | 1374 ++++++++++---- 8 files changed, 3176 insertions(+), 1410 deletions(-) diff --git a/proto/cosmos/crypto/sr25519/keys.proto b/proto/cosmos/crypto/sr25519/keys.proto index eed481375..384cafe3a 100644 --- a/proto/cosmos/crypto/sr25519/keys.proto +++ b/proto/cosmos/crypto/sr25519/keys.proto @@ -8,13 +8,14 @@ import "gogoproto/gogo.proto"; // Originally github.com/cosmos/cosmos-sdk/crypto/keys/sr25519 option go_package = "github.com/cosmos/relayer/v2/relayer/chains/cosmos/keys/sr25519"; -option (gogoproto.messagename_all) = true; +option (gogoproto.messagename_all) = true; option (gogoproto.goproto_stringer_all) = false; -option (gogoproto.goproto_getters_all) = false; +option (gogoproto.goproto_getters_all) = false; // PubKey defines a sr25519 ECDSA public key. message PubKey { - option (gogoproto.goproto_stringer) = false; + option (gogoproto.goproto_stringer) = false; - bytes key = 1 [(gogoproto.casttype) = "github.com/cometbft/cometbft/crypto/sr25519.PubKey"]; + bytes key = 1 [ (gogoproto.casttype) = + "github.com/cometbft/cometbft/crypto/sr25519.PubKey" ]; } diff --git a/relayer/chains/penumbra/core/crypto/v1alpha1/crypto.pb.go b/relayer/chains/penumbra/core/crypto/v1alpha1/crypto.pb.go index f15473c9f..088785c8e 100644 --- a/relayer/chains/penumbra/core/crypto/v1alpha1/crypto.pb.go +++ b/relayer/chains/penumbra/core/crypto/v1alpha1/crypto.pb.go @@ -78,9 +78,11 @@ func (m *Fee) GetAssetId() *AssetId { return nil } -// A Penumbra address. +// A Penumbra address. An address in Penumbra is a Bech32m-encoded +// string, with the human-readable prefix (HRP) `penumbrav2t`. type Address struct { - // The bytes of the address. + // The bytes of the address. Must be represented as a series of + // `uint8` (i.e. values 0 through 255), with a length of 80 elements. Inner []byte `protobuf:"bytes,1,opt,name=inner,proto3" json:"inner,omitempty"` // Alternatively, a Bech32m-encoded string representation of the `inner` // bytes. @@ -697,10 +699,17 @@ type AssetId struct { // bytes. // // NOTE: implementations are not required to support parsing this field. - // Implementations should prefer to encode the bytes in all messages they + // Implementations should prefer to encode the `inner` bytes in all messages they // produce. Implementations must not accept messages with both `inner` and - // `alt_bech32m` set. + // `alt_bech32m` set. This field exists for convenience of RPC users. AltBech32M string `protobuf:"bytes,2,opt,name=alt_bech32m,json=altBech32m,proto3" json:"alt_bech32m,omitempty"` + // Alternatively, a base denomination string which should be hashed to obtain the asset ID. + // + // NOTE: implementations are not required to support parsing this field. + // Implementations should prefer to encode the bytes in all messages they + // produce. Implementations must not accept messages with both `inner` and + // `alt_base_denom` set. This field exists for convenience of RPC users. + AltBaseDenom string `protobuf:"bytes,3,opt,name=alt_base_denom,json=altBaseDenom,proto3" json:"alt_base_denom,omitempty"` } func (m *AssetId) Reset() { *m = AssetId{} } @@ -750,6 +759,18 @@ func (m *AssetId) GetAltBech32M() string { return "" } +func (m *AssetId) GetAltBaseDenom() string { + if m != nil { + return m.AltBaseDenom + } + return "" +} + +// The quantity of a particular Asset. Represented as a 128-bit unsigned integer, +// split over two fields, `lo` and `hi`, representing the low- and high-order bytes +// of the 128-bit value, respectively. Clients must assemble these bits in their +// implementation into a `uint128` or comparable data structure, in order to model +// the Amount accurately. type Amount struct { Lo uint64 `protobuf:"varint,1,opt,name=lo,proto3" json:"lo,omitempty"` Hi uint64 `protobuf:"varint,2,opt,name=hi,proto3" json:"hi,omitempty"` @@ -2407,96 +2428,97 @@ func init() { } var fileDescriptor_5c23a0b4440af102 = []byte{ - // 1420 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcf, 0x6f, 0x1b, 0xc5, - 0x17, 0xcf, 0xda, 0xf9, 0x61, 0x3f, 0x3b, 0x4e, 0xba, 0x8a, 0x2a, 0x7f, 0xf3, 0x25, 0x69, 0xba, - 0x6d, 0x43, 0x5a, 0x8a, 0xa3, 0x38, 0xe2, 0x12, 0x04, 0x6a, 0xec, 0xd0, 0x26, 0x58, 0x6d, 0xad, - 0x0d, 0x4d, 0x51, 0x14, 0xc9, 0x1a, 0xef, 0x4e, 0xbc, 0x23, 0xef, 0xce, 0x2c, 0xbb, 0xb3, 0x4e, - 0xcd, 0x3f, 0x80, 0x38, 0xd1, 0x33, 0x47, 0x0e, 0x1c, 0xf8, 0x0f, 0xb8, 0x71, 0x44, 0x9c, 0x7a, - 0xec, 0x11, 0xd2, 0x03, 0x12, 0x27, 0x0e, 0xfc, 0x01, 0x68, 0x66, 0x67, 0x1d, 0x27, 0x8a, 0x7f, - 0xb4, 0x15, 0x82, 0xdb, 0xbc, 0xf7, 0x3e, 0xef, 0xcd, 0x67, 0xde, 0x7b, 0xb3, 0x6f, 0x6c, 0xb8, - 0xe3, 0x63, 0x1a, 0x79, 0xcd, 0x00, 0xad, 0x5b, 0x2c, 0xc0, 0xeb, 0x56, 0xd0, 0xf5, 0x39, 0x5b, - 0xef, 0x6c, 0x20, 0xd7, 0x77, 0xd0, 0x86, 0x92, 0x4b, 0x7e, 0xc0, 0x38, 0xd3, 0x97, 0x12, 0x6c, - 0x49, 0x60, 0x4b, 0xca, 0x96, 0x60, 0x8d, 0xaf, 0x34, 0x48, 0xdf, 0xc7, 0x58, 0xff, 0x08, 0xa6, - 0x91, 0xc7, 0x22, 0xca, 0x8b, 0xda, 0x8a, 0xb6, 0x96, 0x2b, 0xdf, 0x2a, 0x0d, 0xf5, 0x2b, 0x6d, - 0x4b, 0xb0, 0xa9, 0x9c, 0xf4, 0x6d, 0xc8, 0xa0, 0x30, 0xc4, 0xbc, 0x41, 0xec, 0x62, 0x4a, 0x06, - 0x58, 0x1d, 0x15, 0x40, 0xc0, 0xf7, 0x6c, 0x73, 0x06, 0xc5, 0x0b, 0xe3, 0x1e, 0xcc, 0x6c, 0xdb, - 0x76, 0x80, 0xc3, 0x50, 0x5f, 0x80, 0x29, 0x42, 0x29, 0x0e, 0x24, 0x97, 0xbc, 0x19, 0x0b, 0xfa, - 0x35, 0xc8, 0x21, 0x97, 0x37, 0x9a, 0xd8, 0x72, 0x36, 0xcb, 0x9e, 0xdc, 0x26, 0x6b, 0x02, 0x72, - 0x79, 0x25, 0xd6, 0x18, 0x7f, 0xa6, 0x21, 0xa7, 0x42, 0x1c, 0x10, 0x7c, 0xa2, 0x3f, 0x82, 0x99, - 0x0e, 0x09, 0x49, 0xd3, 0xc5, 0xea, 0x50, 0xe5, 0x51, 0x9c, 0xce, 0x9c, 0x4b, 0x07, 0xb1, 0xe7, - 0xee, 0x84, 0x99, 0x04, 0xd1, 0x6b, 0x30, 0xcd, 0x7c, 0xf4, 0x45, 0x84, 0xd5, 0x11, 0x37, 0x5e, - 0x23, 0xdc, 0x63, 0xe9, 0xb8, 0x3b, 0x61, 0xaa, 0x10, 0x8b, 0xbf, 0x6b, 0x30, 0xa3, 0xf6, 0xd0, - 0xef, 0xc1, 0x0c, 0x8a, 0xb1, 0x8a, 0xe8, 0xea, 0x78, 0x91, 0xcd, 0xc4, 0x4d, 0xdf, 0x16, 0x19, - 0xb3, 0xf1, 0x33, 0xc5, 0xec, 0xbd, 0xf1, 0xfc, 0xf7, 0x84, 0x8b, 0x19, 0x7b, 0xea, 0x4f, 0x61, - 0x1e, 0x59, 0x96, 0xa8, 0x66, 0xa3, 0x15, 0xb0, 0xc8, 0x17, 0xa5, 0x4c, 0xcb, 0x68, 0xef, 0x8f, - 0x8a, 0x16, 0xbb, 0x3d, 0x10, 0x5e, 0x7b, 0xb6, 0x59, 0x40, 0xe7, 0xe4, 0xc5, 0x4f, 0x61, 0x3a, - 0x3e, 0xfd, 0xdb, 0x9f, 0xb3, 0x52, 0x80, 0xbc, 0x5a, 0x36, 0x3a, 0x04, 0x9f, 0x18, 0x2b, 0x90, - 0xd9, 0xf7, 0x31, 0xb5, 0x6b, 0xb8, 0x7b, 0x79, 0xd7, 0x18, 0x77, 0x61, 0x41, 0x22, 0x0e, 0x70, - 0x40, 0x8e, 0x89, 0x85, 0x38, 0x61, 0x74, 0x30, 0x7a, 0x15, 0x0a, 0xf7, 0x23, 0xd7, 0x15, 0x25, - 0x23, 0xb4, 0x35, 0x14, 0x77, 0xfe, 0xd4, 0x03, 0x70, 0x37, 0x20, 0xb7, 0x43, 0x3a, 0x38, 0x08, - 0xc9, 0x31, 0xc1, 0xc1, 0x00, 0xd0, 0x2e, 0xe4, 0xfb, 0x0b, 0xa2, 0x17, 0x61, 0x46, 0xa5, 0x50, - 0x96, 0x73, 0xd6, 0x4c, 0x44, 0x7d, 0x19, 0x20, 0x40, 0xd4, 0x66, 0x1e, 0xf9, 0x12, 0x07, 0xb2, - 0x3a, 0x79, 0xb3, 0x4f, 0x63, 0xbc, 0x0b, 0x73, 0xfb, 0x1c, 0x71, 0x5c, 0x65, 0x9e, 0x47, 0xb8, - 0x87, 0x29, 0x1f, 0xb0, 0xe5, 0x6d, 0xb8, 0x52, 0x41, 0x2e, 0xa2, 0xd6, 0x68, 0xa8, 0xb8, 0x97, - 0xf1, 0x15, 0x7d, 0xd3, 0x7b, 0xb9, 0x06, 0xd3, 0xf1, 0xe7, 0x42, 0x2f, 0x40, 0xca, 0x65, 0xd2, - 0x7b, 0xd2, 0x4c, 0xb9, 0x4c, 0xc8, 0x0e, 0x91, 0x1e, 0x93, 0x66, 0xca, 0x21, 0xc6, 0x12, 0x4c, - 0xed, 0x60, 0xca, 0x3c, 0xb1, 0x93, 0x2d, 0x16, 0x12, 0x9b, 0x35, 0x63, 0xc1, 0x78, 0x99, 0x82, - 0x59, 0x69, 0x7f, 0x88, 0x39, 0xb2, 0x11, 0x47, 0xfa, 0x0a, 0xe4, 0x6c, 0x1c, 0x5a, 0x01, 0xf1, - 0x45, 0x5d, 0x15, 0xba, 0x5f, 0xa5, 0xef, 0x09, 0x04, 0x65, 0x5e, 0x23, 0xa2, 0x84, 0x87, 0xc5, - 0xd4, 0x4a, 0x7a, 0x2d, 0x57, 0x5e, 0x1b, 0xd1, 0x77, 0x72, 0x93, 0x27, 0x94, 0x70, 0x13, 0xec, - 0x64, 0x19, 0xea, 0x3a, 0x4c, 0x36, 0x51, 0x88, 0x65, 0xde, 0xb3, 0xa6, 0x5c, 0x8b, 0x5a, 0xd9, - 0x24, 0xf4, 0x5d, 0xd4, 0x2d, 0x4e, 0x4a, 0x75, 0x22, 0x0a, 0x34, 0x45, 0x1e, 0x2e, 0x4e, 0xc5, - 0x68, 0xb1, 0xd6, 0xaf, 0xc2, 0x74, 0xd8, 0xf5, 0x9a, 0xcc, 0x2d, 0x4e, 0x4b, 0xad, 0x92, 0xf4, - 0x79, 0x48, 0x47, 0x01, 0x29, 0xce, 0x48, 0xa5, 0x58, 0xea, 0xff, 0x83, 0x4c, 0x14, 0x90, 0x86, - 0x83, 0x42, 0xa7, 0x98, 0x89, 0x03, 0x47, 0x01, 0xd9, 0x45, 0xa1, 0xa3, 0xef, 0xc3, 0x95, 0x84, - 0x7d, 0xa3, 0xf7, 0xd1, 0xfd, 0x69, 0xee, 0xb5, 0xbe, 0xba, 0x73, 0x09, 0x4c, 0x29, 0x8c, 0xa7, - 0x90, 0xed, 0x1d, 0xfa, 0xf2, 0xec, 0xeb, 0x8b, 0x90, 0xc1, 0xcf, 0x7c, 0x46, 0x71, 0xaf, 0x2f, - 0x7b, 0xb2, 0x6c, 0x59, 0x97, 0xa0, 0x10, 0x87, 0xc5, 0xf4, 0x4a, 0x5a, 0xb0, 0x55, 0xa2, 0xf1, - 0xb5, 0x06, 0x53, 0x07, 0xc8, 0x8d, 0xfe, 0x0b, 0x23, 0xe6, 0xaf, 0x34, 0x64, 0x25, 0x17, 0x39, - 0x1e, 0x0e, 0x20, 0xd7, 0xa6, 0xec, 0x84, 0x36, 0xce, 0xce, 0x9a, 0x2b, 0x6f, 0x8e, 0x88, 0xd9, - 0x73, 0x2f, 0xd5, 0x84, 0xaf, 0xcc, 0xd9, 0xee, 0x84, 0x09, 0xed, 0x9e, 0xa4, 0x1f, 0xc1, 0x6c, - 0x44, 0xfb, 0x23, 0xc7, 0x6c, 0x3f, 0x18, 0x3b, 0xf2, 0x13, 0xda, 0xee, 0x8f, 0x9d, 0x8f, 0xfa, - 0xe4, 0xc5, 0x6f, 0x34, 0x80, 0xb3, 0xad, 0xdf, 0x36, 0xa9, 0x95, 0xa4, 0xd2, 0x31, 0xc7, 0xbb, - 0xe3, 0xdc, 0x8b, 0xe4, 0xf2, 0xa9, 0xbe, 0x58, 0x7c, 0xae, 0x41, 0xbe, 0x9f, 0xf2, 0xbf, 0x5f, - 0xe8, 0x4a, 0x1e, 0xa0, 0x23, 0xd2, 0x19, 0x0f, 0x09, 0x03, 0xe0, 0x21, 0x0e, 0xda, 0x2e, 0x36, - 0x19, 0x1b, 0xf4, 0x95, 0x5b, 0x82, 0xdc, 0x9e, 0x8d, 0x29, 0x27, 0xbc, 0x2b, 0xbe, 0xfa, 0x05, - 0x48, 0x91, 0xb6, 0x42, 0xa4, 0x48, 0xdb, 0xb8, 0x06, 0xb3, 0x0f, 0x58, 0x07, 0x07, 0x54, 0x7c, - 0x32, 0x15, 0xa0, 0xd5, 0x03, 0xb4, 0xda, 0xc6, 0x4d, 0xc8, 0x57, 0x19, 0x0d, 0x31, 0x0d, 0xa3, - 0x70, 0xf0, 0xd8, 0xf8, 0x56, 0x83, 0xc9, 0x47, 0x8c, 0x63, 0x7d, 0x0b, 0xa6, 0x24, 0x41, 0x95, - 0xa1, 0x9b, 0xe3, 0xf4, 0x86, 0x19, 0xbb, 0x88, 0xd0, 0x41, 0x88, 0x71, 0x9c, 0x9c, 0xbc, 0x19, - 0x0b, 0xfd, 0xb3, 0x35, 0xfd, 0x46, 0xb3, 0xd5, 0xf8, 0x5e, 0x83, 0x8c, 0x20, 0x27, 0x2f, 0xc7, - 0xc7, 0xe7, 0x09, 0xae, 0x8d, 0xdb, 0xbc, 0xc3, 0x49, 0xee, 0x5c, 0x24, 0x79, 0x67, 0xfc, 0x27, - 0xd4, 0x19, 0xd1, 0x55, 0x28, 0x08, 0x9e, 0x55, 0xe2, 0x3b, 0x38, 0xe0, 0xf8, 0xd9, 0xa0, 0x9a, - 0x5e, 0x87, 0xec, 0xa3, 0xc8, 0x75, 0x87, 0x8d, 0xde, 0x3b, 0xa0, 0xcb, 0xd7, 0xc1, 0x76, 0xc4, - 0x9d, 0x7d, 0xd2, 0xa2, 0x88, 0x47, 0x01, 0x1e, 0x80, 0x5d, 0x83, 0xf9, 0x0a, 0xa1, 0x36, 0xa1, - 0xad, 0x51, 0xc8, 0xdf, 0x34, 0xc8, 0x09, 0x86, 0x75, 0xd4, 0x75, 0x19, 0xb2, 0xf5, 0xa7, 0x30, - 0x47, 0x19, 0xc7, 0x0d, 0xab, 0x37, 0x6b, 0x55, 0x5a, 0x4b, 0x23, 0x8e, 0x7f, 0x61, 0x98, 0x9b, - 0x05, 0x11, 0xa6, 0x6f, 0x62, 0xdf, 0x80, 0x59, 0xec, 0x3b, 0xd8, 0xc3, 0x01, 0x72, 0x1b, 0x6d, - 0xdc, 0x55, 0xd9, 0xce, 0xf7, 0x94, 0xa2, 0x15, 0x3f, 0x83, 0x02, 0xa6, 0x32, 0x32, 0xb6, 0x1b, - 0x22, 0xc0, 0x98, 0xcf, 0xba, 0xf3, 0x39, 0x36, 0x67, 0x7b, 0x41, 0x84, 0xc1, 0x78, 0xa9, 0xc1, - 0xc2, 0x05, 0x7a, 0xf5, 0x80, 0xb1, 0xe3, 0x7f, 0xee, 0xb0, 0x8b, 0x90, 0xf1, 0x59, 0x48, 0xe4, - 0xa0, 0x8f, 0x9f, 0x0c, 0x3d, 0x59, 0xaf, 0x41, 0x16, 0x45, 0xdc, 0x69, 0xf8, 0x88, 0x3b, 0x72, - 0x02, 0x8d, 0xde, 0x2e, 0xfe, 0x24, 0xd4, 0x11, 0x77, 0xaa, 0x4e, 0x44, 0xdb, 0x66, 0x46, 0x04, - 0x10, 0xa2, 0xe1, 0xc0, 0xdc, 0x05, 0xa3, 0xfe, 0x7f, 0xc8, 0x8a, 0xa7, 0x3a, 0xa1, 0xad, 0xc6, - 0x86, 0xaa, 0x75, 0x46, 0x29, 0x36, 0xfa, 0x8d, 0x65, 0x55, 0x81, 0xc4, 0x58, 0xee, 0x37, 0x6e, - 0xaa, 0x17, 0x5b, 0x62, 0xdc, 0x34, 0xde, 0x81, 0xc9, 0xaa, 0xba, 0x2d, 0x97, 0xb4, 0x91, 0x01, - 0xf0, 0xc9, 0xf1, 0x31, 0xb6, 0xb8, 0x1c, 0xfb, 0x97, 0x63, 0x6e, 0xc1, 0xec, 0x61, 0xed, 0x71, - 0xc4, 0xfd, 0x48, 0xa5, 0xff, 0x72, 0xd8, 0x4d, 0xc8, 0x1f, 0xd6, 0x64, 0xa7, 0x0f, 0x43, 0xdd, - 0x80, 0xdc, 0x61, 0x6d, 0xff, 0x04, 0xf9, 0xc3, 0x40, 0x6b, 0x30, 0x1f, 0x83, 0xaa, 0x2e, 0x22, - 0xde, 0x30, 0x64, 0x09, 0xae, 0x1e, 0xd6, 0x9e, 0x50, 0x1b, 0xbb, 0xb8, 0x25, 0x4a, 0x3b, 0x0a, - 0x7f, 0x17, 0x16, 0x0e, 0x6b, 0x3b, 0x31, 0x9a, 0x05, 0x07, 0xe2, 0x02, 0x0d, 0x41, 0x97, 0x61, - 0xf1, 0xb0, 0xd6, 0xbb, 0xdf, 0x3b, 0x38, 0x20, 0x1d, 0xf9, 0xb8, 0x1f, 0xe2, 0x53, 0xf9, 0x31, - 0xf5, 0xf3, 0xe9, 0xb2, 0xf6, 0xe2, 0x74, 0x59, 0xfb, 0xf5, 0x74, 0x59, 0x7b, 0xfe, 0x6a, 0x79, - 0xe2, 0xc5, 0xab, 0xe5, 0x89, 0x97, 0xaf, 0x96, 0x27, 0xe0, 0xba, 0xc5, 0xbc, 0xe1, 0x1d, 0x53, - 0xc9, 0x55, 0xa5, 0xa2, 0x2e, 0x7e, 0x57, 0xd7, 0xb5, 0xc3, 0xcf, 0x5b, 0x84, 0x3b, 0x51, 0xb3, - 0x64, 0x31, 0x6f, 0xdd, 0x62, 0xa1, 0xc7, 0xc2, 0xf5, 0x00, 0xbb, 0xa8, 0x8b, 0x83, 0xf5, 0x4e, - 0xb9, 0xb7, 0xb4, 0x1c, 0x44, 0x68, 0xb8, 0x3e, 0xf4, 0x17, 0xfb, 0x87, 0xb1, 0x9c, 0x88, 0xdf, - 0xa5, 0xd2, 0xf5, 0x6a, 0xf5, 0x87, 0xd4, 0x52, 0x3d, 0xa1, 0x53, 0x15, 0x74, 0xe2, 0xdd, 0x4b, - 0x07, 0x0a, 0xf5, 0xcb, 0x99, 0xfd, 0x48, 0xd8, 0x8f, 0x62, 0xfb, 0x51, 0x62, 0x3f, 0x4d, 0xdd, - 0x1e, 0x6a, 0x3f, 0x7a, 0x50, 0xaf, 0x24, 0xa3, 0xfc, 0x8f, 0xd4, 0x4a, 0x82, 0xdd, 0xda, 0x12, - 0xe0, 0xad, 0xad, 0x18, 0xbd, 0xb5, 0x95, 0xc0, 0x9b, 0xd3, 0xf2, 0xff, 0x84, 0xcd, 0xbf, 0x03, - 0x00, 0x00, 0xff, 0xff, 0xd9, 0xd1, 0xde, 0xc4, 0x7d, 0x10, 0x00, 0x00, + // 1437 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcd, 0x6e, 0x1b, 0xb7, + 0x16, 0xf6, 0x48, 0xb6, 0x25, 0x1f, 0xc9, 0xb2, 0x43, 0x18, 0x81, 0xae, 0xef, 0xb5, 0xe3, 0x4c, + 0x1c, 0x5f, 0x27, 0x37, 0x57, 0x86, 0x65, 0x74, 0xe3, 0xa2, 0x45, 0x2c, 0xb9, 0x89, 0x5d, 0x21, + 0x89, 0x30, 0x6e, 0x9c, 0x42, 0x30, 0x20, 0xd0, 0x33, 0xb4, 0x86, 0xd0, 0x0c, 0x39, 0x9d, 0x1f, + 0x39, 0xea, 0x0b, 0x14, 0x5d, 0x35, 0xeb, 0x2e, 0xbb, 0xe8, 0xa2, 0x6f, 0xd0, 0x5d, 0x97, 0x45, + 0x57, 0x59, 0x66, 0xd9, 0x3a, 0x8b, 0x02, 0x5d, 0x75, 0xd1, 0x07, 0x28, 0xc8, 0xe1, 0xc8, 0xb2, + 0x61, 0xfd, 0x24, 0x41, 0xd1, 0xee, 0x78, 0x78, 0xbe, 0xf3, 0xf1, 0xe3, 0x39, 0xe4, 0x1c, 0x4a, + 0x70, 0xd7, 0x23, 0x2c, 0x72, 0x8f, 0x7d, 0xbc, 0x61, 0x72, 0x9f, 0x6c, 0x98, 0x7e, 0xd7, 0x0b, + 0xf9, 0x46, 0x67, 0x13, 0x3b, 0x9e, 0x8d, 0x37, 0x95, 0x5d, 0xf2, 0x7c, 0x1e, 0x72, 0xb4, 0x94, + 0x60, 0x4b, 0x02, 0x5b, 0x52, 0xbe, 0x04, 0xab, 0x7f, 0xa1, 0x41, 0xfa, 0x01, 0x21, 0xe8, 0x03, + 0x98, 0xc6, 0x2e, 0x8f, 0x58, 0x58, 0xd4, 0x56, 0xb4, 0xf5, 0x5c, 0xf9, 0x76, 0x69, 0x68, 0x5c, + 0x69, 0x47, 0x82, 0x0d, 0x15, 0x84, 0x76, 0x20, 0x8b, 0x83, 0x80, 0x84, 0x4d, 0x6a, 0x15, 0x53, + 0x92, 0x60, 0x6d, 0x14, 0x81, 0x80, 0xef, 0x5b, 0x46, 0x06, 0xc7, 0x03, 0xfd, 0x3e, 0x64, 0x76, + 0x2c, 0xcb, 0x27, 0x41, 0x80, 0x16, 0x60, 0x8a, 0x32, 0x46, 0x7c, 0xa9, 0x25, 0x6f, 0xc4, 0x06, + 0xba, 0x01, 0x39, 0xec, 0x84, 0xcd, 0x63, 0x62, 0xda, 0x5b, 0x65, 0x57, 0x2e, 0x33, 0x63, 0x00, + 0x76, 0xc2, 0x4a, 0x3c, 0xa3, 0xff, 0x9e, 0x86, 0x9c, 0xa2, 0x38, 0xa4, 0xe4, 0x14, 0x3d, 0x86, + 0x4c, 0x87, 0x06, 0xf4, 0xd8, 0x21, 0x6a, 0x53, 0xe5, 0x51, 0x9a, 0xce, 0x83, 0x4b, 0x87, 0x71, + 0xe4, 0xde, 0x84, 0x91, 0x90, 0xa0, 0x1a, 0x4c, 0x73, 0x0f, 0x7f, 0x16, 0x11, 0xb5, 0xc5, 0xcd, + 0x37, 0xa0, 0x7b, 0x22, 0x03, 0xf7, 0x26, 0x0c, 0x45, 0xb1, 0xf8, 0xab, 0x06, 0x19, 0xb5, 0x06, + 0xba, 0x0f, 0x19, 0x1c, 0x63, 0x95, 0xd0, 0xb5, 0xf1, 0x98, 0x8d, 0x24, 0x0c, 0xed, 0x88, 0x8c, + 0x59, 0xe4, 0xb9, 0x52, 0xf6, 0xbf, 0xf1, 0xe2, 0xf7, 0x45, 0x88, 0x11, 0x47, 0xa2, 0x67, 0x30, + 0x8f, 0x4d, 0x53, 0x54, 0xb3, 0xd9, 0xf2, 0x79, 0xe4, 0x89, 0x52, 0xa6, 0x25, 0xdb, 0xff, 0x47, + 0xb1, 0xc5, 0x61, 0x0f, 0x45, 0xd4, 0xbe, 0x65, 0x14, 0xf0, 0x05, 0x7b, 0xf1, 0x63, 0x98, 0x8e, + 0x77, 0xff, 0xee, 0xfb, 0xac, 0x14, 0x20, 0xaf, 0x86, 0xcd, 0x0e, 0x25, 0xa7, 0xfa, 0x0a, 0x64, + 0x0f, 0x3c, 0xc2, 0xac, 0x1a, 0xe9, 0x5e, 0x7d, 0x6a, 0xf4, 0x7b, 0xb0, 0x20, 0x11, 0x87, 0xc4, + 0xa7, 0x27, 0xd4, 0xc4, 0x21, 0xe5, 0x6c, 0x30, 0x7a, 0x0d, 0x0a, 0x0f, 0x22, 0xc7, 0x11, 0x25, + 0xa3, 0xac, 0x35, 0x14, 0x77, 0x71, 0xd7, 0x03, 0x70, 0xb7, 0x20, 0xb7, 0x4b, 0x3b, 0xc4, 0x0f, + 0xe8, 0x09, 0x25, 0xfe, 0x00, 0xd0, 0x1e, 0xe4, 0xfb, 0x0b, 0x82, 0x8a, 0x90, 0x51, 0x29, 0x94, + 0xe5, 0x9c, 0x35, 0x12, 0x13, 0x2d, 0x03, 0xf8, 0x98, 0x59, 0xdc, 0xa5, 0x9f, 0x13, 0x5f, 0x56, + 0x27, 0x6f, 0xf4, 0xcd, 0xe8, 0xff, 0x85, 0xb9, 0x83, 0x10, 0x87, 0xa4, 0xca, 0x5d, 0x97, 0x86, + 0x2e, 0x61, 0xe1, 0x80, 0x25, 0xef, 0xc0, 0xb5, 0x0a, 0x76, 0x30, 0x33, 0x47, 0x43, 0x4f, 0x20, + 0xa3, 0xee, 0xea, 0x5b, 0xde, 0x4b, 0xb4, 0x0a, 0x05, 0x09, 0xc0, 0x01, 0x69, 0x5a, 0x84, 0x71, + 0x57, 0x2a, 0x9f, 0x31, 0xf2, 0x02, 0x83, 0x03, 0xb2, 0x2b, 0xe6, 0xf4, 0x75, 0x98, 0x8e, 0x3f, + 0x2a, 0xa8, 0x00, 0x29, 0x87, 0xcb, 0x35, 0x26, 0x8d, 0x94, 0xc3, 0x85, 0x6d, 0x53, 0xc9, 0x3b, + 0x69, 0xa4, 0x6c, 0xaa, 0x2f, 0xc1, 0x94, 0x0c, 0x11, 0x7a, 0x62, 0x3e, 0x4d, 0xf2, 0xc5, 0x86, + 0xfe, 0x2a, 0x05, 0xb3, 0xd2, 0xff, 0x88, 0x84, 0xd8, 0xc2, 0x21, 0x46, 0x2b, 0x90, 0xb3, 0x48, + 0x60, 0xfa, 0xd4, 0x13, 0xd5, 0x57, 0xe8, 0xfe, 0x29, 0xb4, 0x2f, 0x10, 0x8c, 0xbb, 0xcd, 0x88, + 0xd1, 0x30, 0x28, 0xa6, 0x56, 0xd2, 0xeb, 0xb9, 0xf2, 0xfa, 0x88, 0xd3, 0x29, 0x17, 0x79, 0xca, + 0x68, 0x68, 0x80, 0x95, 0x0c, 0x03, 0x84, 0x60, 0x52, 0xec, 0x54, 0xed, 0x51, 0x8e, 0x45, 0x45, + 0x2d, 0x1a, 0x78, 0x0e, 0xee, 0x16, 0x27, 0xe5, 0x74, 0x62, 0x0a, 0x34, 0xc3, 0x2e, 0x29, 0x4e, + 0xc5, 0x68, 0x31, 0x46, 0xd7, 0x61, 0x3a, 0xe8, 0xba, 0xc7, 0xdc, 0x29, 0x4e, 0xcb, 0x59, 0x65, + 0xa1, 0x79, 0x48, 0x47, 0x3e, 0x2d, 0x66, 0xe4, 0xa4, 0x18, 0xa2, 0x7f, 0x41, 0x36, 0xf2, 0x69, + 0xd3, 0xc6, 0x81, 0x5d, 0xcc, 0xc6, 0xc4, 0x91, 0x4f, 0xf7, 0x70, 0x60, 0xa3, 0x03, 0xb8, 0x96, + 0xa8, 0x6f, 0xf6, 0x3e, 0xcd, 0x3f, 0xcc, 0xbd, 0xd1, 0xb7, 0x79, 0x2e, 0x81, 0xa9, 0x09, 0xfd, + 0x19, 0xcc, 0xf4, 0x36, 0x7d, 0x75, 0xf6, 0xd1, 0x22, 0x64, 0xc9, 0x73, 0x8f, 0x33, 0xd2, 0x3b, + 0xbd, 0x3d, 0x5b, 0x1e, 0x6c, 0x87, 0xe2, 0x80, 0x04, 0xc5, 0xf4, 0x4a, 0x5a, 0xa8, 0x55, 0xa6, + 0xfe, 0xa5, 0x06, 0x53, 0x87, 0xd8, 0x89, 0xfe, 0x09, 0x8d, 0xe8, 0x8f, 0x34, 0xcc, 0x48, 0x2d, + 0xb2, 0x89, 0x1c, 0x42, 0xae, 0xcd, 0xf8, 0x29, 0x6b, 0x9e, 0xef, 0x35, 0x57, 0xde, 0x1a, 0xc1, + 0xd9, 0x0b, 0x2f, 0xd5, 0x44, 0xac, 0xcc, 0xd9, 0xde, 0x84, 0x01, 0xed, 0x9e, 0x85, 0x8e, 0x60, + 0x36, 0x62, 0xfd, 0xcc, 0xb1, 0xda, 0xf7, 0xc6, 0x66, 0x7e, 0xca, 0xda, 0xfd, 0xdc, 0xf9, 0xa8, + 0xcf, 0x5e, 0xfc, 0x4a, 0x03, 0x38, 0x5f, 0xfa, 0x5d, 0x93, 0x5a, 0x49, 0x2a, 0x1d, 0x6b, 0xbc, + 0x37, 0xce, 0xbd, 0x48, 0x2e, 0x9f, 0x3a, 0x17, 0x8b, 0x2f, 0x34, 0xc8, 0xf7, 0x4b, 0xfe, 0xfb, + 0x0b, 0x5d, 0xc9, 0x03, 0x74, 0x44, 0x3a, 0xe3, 0x56, 0xa2, 0x03, 0x3c, 0x22, 0x7e, 0xdb, 0x21, + 0x06, 0xe7, 0x83, 0xbe, 0x85, 0x4b, 0x90, 0xdb, 0xb7, 0x08, 0x0b, 0x69, 0xd8, 0x15, 0xbd, 0xa1, + 0x00, 0x29, 0xda, 0x56, 0x88, 0x14, 0x6d, 0xeb, 0x37, 0x60, 0xf6, 0x21, 0xef, 0x10, 0x9f, 0x89, + 0x0f, 0xab, 0x02, 0xb4, 0x7a, 0x80, 0x56, 0x5b, 0x5f, 0x85, 0x7c, 0x95, 0xb3, 0x80, 0xb0, 0x20, + 0x0a, 0x06, 0x37, 0x97, 0xaf, 0x35, 0x98, 0x7c, 0xcc, 0x43, 0x82, 0xb6, 0x61, 0x4a, 0x0a, 0x54, + 0x19, 0x5a, 0x1d, 0xe7, 0x6c, 0x18, 0x71, 0x88, 0xa0, 0xf6, 0x03, 0x42, 0xe2, 0xe4, 0xe4, 0x8d, + 0xd8, 0xe8, 0xef, 0xc0, 0xe9, 0xb7, 0xea, 0xc0, 0xfa, 0xb7, 0x1a, 0x64, 0x85, 0x38, 0x79, 0x39, + 0x3e, 0xbc, 0x28, 0x70, 0x7d, 0xdc, 0xc3, 0x3b, 0x5c, 0xe4, 0xee, 0x65, 0x91, 0x77, 0xc7, 0x7f, + 0x68, 0x9d, 0x0b, 0x5d, 0x83, 0x82, 0xd0, 0x59, 0xa5, 0x9e, 0x4d, 0xfc, 0x90, 0x3c, 0x1f, 0x54, + 0xd3, 0x9b, 0x30, 0xf3, 0x38, 0x72, 0x9c, 0x61, 0x0d, 0xfa, 0x2e, 0x20, 0xf9, 0x86, 0xd8, 0x89, + 0x42, 0xfb, 0x80, 0xb6, 0x18, 0x0e, 0x23, 0x9f, 0x0c, 0xc0, 0xae, 0xc3, 0x7c, 0x85, 0x32, 0x8b, + 0xb2, 0xd6, 0x28, 0xe4, 0x2f, 0x1a, 0xe4, 0x84, 0xc2, 0x3a, 0xee, 0x3a, 0x1c, 0x5b, 0xe8, 0x19, + 0xcc, 0x31, 0x1e, 0x92, 0xa6, 0xd9, 0xeb, 0xc8, 0x2a, 0xad, 0xa5, 0x11, 0xdb, 0xbf, 0xd4, 0xf2, + 0x8d, 0x82, 0xa0, 0xe9, 0xeb, 0xeb, 0xb7, 0x60, 0x96, 0x78, 0x36, 0x71, 0x89, 0x8f, 0x9d, 0x66, + 0x9b, 0x74, 0x55, 0xb6, 0xf3, 0xbd, 0x49, 0x71, 0x14, 0x3f, 0x81, 0x02, 0x61, 0x92, 0x99, 0x58, + 0x4d, 0x41, 0x30, 0xe6, 0xe3, 0xef, 0x62, 0x8e, 0x8d, 0xd9, 0x1e, 0x89, 0x70, 0xe8, 0xaf, 0x34, + 0x58, 0xb8, 0x24, 0xaf, 0xee, 0x73, 0x7e, 0xf2, 0xd7, 0x6d, 0x76, 0x11, 0xb2, 0x1e, 0x0f, 0xa8, + 0x6c, 0xf4, 0xf1, 0x93, 0xa1, 0x67, 0xa3, 0x1a, 0xcc, 0xe0, 0x28, 0xb4, 0x9b, 0x1e, 0x0e, 0x6d, + 0xd9, 0x81, 0x46, 0x2f, 0x17, 0x7f, 0x12, 0xea, 0x38, 0xb4, 0xab, 0x76, 0xc4, 0xda, 0x46, 0x56, + 0x10, 0x08, 0x53, 0xb7, 0x61, 0xee, 0x92, 0x13, 0xfd, 0x1b, 0x66, 0xc4, 0x83, 0x9e, 0xb2, 0x56, + 0x73, 0x53, 0xd5, 0x3a, 0xab, 0x26, 0x36, 0xfb, 0x9d, 0x65, 0x55, 0x81, 0xc4, 0x59, 0xee, 0x77, + 0x6e, 0xa9, 0x77, 0x5d, 0xe2, 0xdc, 0xd2, 0xff, 0x03, 0x93, 0x55, 0x75, 0x5b, 0xae, 0x38, 0x46, + 0x3a, 0xc0, 0x47, 0x27, 0x27, 0xc4, 0x0c, 0x65, 0xdb, 0xbf, 0x1a, 0x73, 0x1b, 0x66, 0x1b, 0xb5, + 0x27, 0x51, 0xe8, 0x45, 0x2a, 0xfd, 0x57, 0xc3, 0x56, 0x21, 0xdf, 0xa8, 0xc9, 0x93, 0x3e, 0x0c, + 0x75, 0x0b, 0x72, 0x8d, 0xda, 0xc1, 0x29, 0xf6, 0x86, 0x81, 0xd6, 0x61, 0x3e, 0x06, 0x55, 0x1d, + 0x4c, 0xdd, 0x61, 0xc8, 0x12, 0x5c, 0x6f, 0xd4, 0x9e, 0x32, 0x8b, 0x38, 0xa4, 0x25, 0x4a, 0x3b, + 0x0a, 0x7f, 0x0f, 0x16, 0x1a, 0xb5, 0xdd, 0x18, 0xcd, 0xfd, 0x43, 0x71, 0x81, 0x86, 0xa0, 0xcb, + 0xb0, 0xd8, 0xa8, 0xf5, 0xee, 0xf7, 0x2e, 0xf1, 0x69, 0x47, 0xfe, 0x04, 0x18, 0x12, 0x53, 0xf9, + 0x3e, 0xf5, 0xe3, 0xd9, 0xb2, 0xf6, 0xf2, 0x6c, 0x59, 0xfb, 0xf9, 0x6c, 0x59, 0x7b, 0xf1, 0x7a, + 0x79, 0xe2, 0xe5, 0xeb, 0xe5, 0x89, 0x57, 0xaf, 0x97, 0x27, 0xe0, 0xa6, 0xc9, 0xdd, 0xe1, 0x27, + 0xa6, 0x92, 0xab, 0xca, 0x89, 0xba, 0xf8, 0xf5, 0x5d, 0xd7, 0x1a, 0x9f, 0xb6, 0x68, 0x68, 0x47, + 0xc7, 0x25, 0x93, 0xbb, 0x1b, 0x26, 0x0f, 0x5c, 0x1e, 0x6c, 0xf8, 0xc4, 0xc1, 0x5d, 0xe2, 0x6f, + 0x74, 0xca, 0xbd, 0xa1, 0x69, 0x63, 0xca, 0x82, 0x8d, 0xa1, 0xbf, 0xeb, 0xdf, 0x8f, 0xed, 0xc4, + 0xfc, 0x26, 0x95, 0xae, 0x57, 0xab, 0xdf, 0xa5, 0x96, 0xea, 0x89, 0x9c, 0xaa, 0x90, 0x13, 0xaf, + 0x5e, 0x3a, 0x54, 0xa8, 0x9f, 0xce, 0xfd, 0x47, 0xc2, 0x7f, 0x14, 0xfb, 0x8f, 0x12, 0xff, 0x59, + 0xea, 0xce, 0x50, 0xff, 0xd1, 0xc3, 0x7a, 0x25, 0x69, 0xe5, 0xbf, 0xa5, 0x56, 0x12, 0xec, 0xf6, + 0xb6, 0x00, 0x6f, 0x6f, 0xc7, 0xe8, 0xed, 0xed, 0x04, 0x7e, 0x3c, 0x2d, 0xff, 0x75, 0xd8, 0xfa, + 0x33, 0x00, 0x00, 0xff, 0xff, 0x88, 0xb9, 0x8c, 0xd5, 0xa3, 0x10, 0x00, 0x00, } func (m *Fee) Marshal() (dAtA []byte, err error) { @@ -3016,6 +3038,13 @@ func (m *AssetId) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.AltBaseDenom) > 0 { + i -= len(m.AltBaseDenom) + copy(dAtA[i:], m.AltBaseDenom) + i = encodeVarintCrypto(dAtA, i, uint64(len(m.AltBaseDenom))) + i-- + dAtA[i] = 0x1a + } if len(m.AltBech32M) > 0 { i -= len(m.AltBech32M) copy(dAtA[i:], m.AltBech32M) @@ -4461,6 +4490,10 @@ func (m *AssetId) Size() (n int) { if l > 0 { n += 1 + l + sovCrypto(uint64(l)) } + l = len(m.AltBaseDenom) + if l > 0 { + n += 1 + l + sovCrypto(uint64(l)) + } return n } @@ -6369,6 +6402,38 @@ func (m *AssetId) Unmarshal(dAtA []byte) error { } m.AltBech32M = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AltBaseDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCrypto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCrypto + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCrypto + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AltBaseDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipCrypto(dAtA[iNdEx:]) diff --git a/relayer/chains/penumbra/core/dex/v1alpha1/dex.pb.go b/relayer/chains/penumbra/core/dex/v1alpha1/dex.pb.go index 45a51020b..9456bbbb2 100644 --- a/relayer/chains/penumbra/core/dex/v1alpha1/dex.pb.go +++ b/relayer/chains/penumbra/core/dex/v1alpha1/dex.pb.go @@ -62,18 +62,13 @@ func (x PositionState_PositionStateEnum) String() string { } func (PositionState_PositionStateEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{19, 0} + return fileDescriptor_d1eba752ca2f0d70, []int{18, 0} } // A transaction action that submits a swap to the dex. type Swap struct { // Contains the Swap proof. Proof *v1alpha1.ZKSwapProof `protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"` - // MockFlowCiphertext dropped until flow encryption/ABCI++ available - // // Encrypted amount of asset 1 of the trading pair. - // MockFlowCiphertext enc_amount_1 = 2; - // // Encrypted amount of asset 2 of the trading pair. - // MockFlowCiphertext enc_amount_2 = 3; // Encapsulates the authorized fields of the Swap action, used in signing. Body *SwapBody `protobuf:"bytes,4,opt,name=body,proto3" json:"body,omitempty"` } @@ -501,63 +496,22 @@ func (m *SwapPlaintext) GetRseed() []byte { return nil } -type MockFlowCiphertext struct { - // Represents this transaction's contribution to flow's value. - Value *v1alpha1.Amount `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` -} - -func (m *MockFlowCiphertext) Reset() { *m = MockFlowCiphertext{} } -func (m *MockFlowCiphertext) String() string { return proto.CompactTextString(m) } -func (*MockFlowCiphertext) ProtoMessage() {} -func (*MockFlowCiphertext) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{6} -} -func (m *MockFlowCiphertext) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MockFlowCiphertext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MockFlowCiphertext.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MockFlowCiphertext) XXX_Merge(src proto.Message) { - xxx_messageInfo_MockFlowCiphertext.Merge(m, src) -} -func (m *MockFlowCiphertext) XXX_Size() int { - return m.Size() -} -func (m *MockFlowCiphertext) XXX_DiscardUnknown() { - xxx_messageInfo_MockFlowCiphertext.DiscardUnknown(m) -} - -var xxx_messageInfo_MockFlowCiphertext proto.InternalMessageInfo - -func (m *MockFlowCiphertext) GetValue() *v1alpha1.Amount { - if m != nil { - return m.Value - } - return nil -} - type SwapPlan struct { // The plaintext version of the swap to be performed. SwapPlaintext *SwapPlaintext `protobuf:"bytes,1,opt,name=swap_plaintext,json=swapPlaintext,proto3" json:"swap_plaintext,omitempty"` // The blinding factor for the fee commitment. The fee in the SwapPlan is private to prevent linkability with the SwapClaim. FeeBlinding []byte `protobuf:"bytes,2,opt,name=fee_blinding,json=feeBlinding,proto3" json:"fee_blinding,omitempty"` + // The first blinding factor to use for the ZK swap proof. + ProofBlindingR []byte `protobuf:"bytes,3,opt,name=proof_blinding_r,json=proofBlindingR,proto3" json:"proof_blinding_r,omitempty"` + // The second blinding factor to use for the ZK swap proof. + ProofBlindingS []byte `protobuf:"bytes,4,opt,name=proof_blinding_s,json=proofBlindingS,proto3" json:"proof_blinding_s,omitempty"` } func (m *SwapPlan) Reset() { *m = SwapPlan{} } func (m *SwapPlan) String() string { return proto.CompactTextString(m) } func (*SwapPlan) ProtoMessage() {} func (*SwapPlan) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{7} + return fileDescriptor_d1eba752ca2f0d70, []int{6} } func (m *SwapPlan) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -600,6 +554,20 @@ func (m *SwapPlan) GetFeeBlinding() []byte { return nil } +func (m *SwapPlan) GetProofBlindingR() []byte { + if m != nil { + return m.ProofBlindingR + } + return nil +} + +func (m *SwapPlan) GetProofBlindingS() []byte { + if m != nil { + return m.ProofBlindingS + } + return nil +} + type SwapClaimPlan struct { // The plaintext version of the swap to be performed. SwapPlaintext *SwapPlaintext `protobuf:"bytes,1,opt,name=swap_plaintext,json=swapPlaintext,proto3" json:"swap_plaintext,omitempty"` @@ -609,13 +577,17 @@ type SwapClaimPlan struct { OutputData *BatchSwapOutputData `protobuf:"bytes,3,opt,name=output_data,json=outputData,proto3" json:"output_data,omitempty"` // The epoch duration, used in proving. EpochDuration uint64 `protobuf:"varint,4,opt,name=epoch_duration,json=epochDuration,proto3" json:"epoch_duration,omitempty"` + // The first blinding factor to use for the ZK swap claim proof. + ProofBlindingR []byte `protobuf:"bytes,5,opt,name=proof_blinding_r,json=proofBlindingR,proto3" json:"proof_blinding_r,omitempty"` + // The second blinding factor to use for the ZK swap claim proof. + ProofBlindingS []byte `protobuf:"bytes,6,opt,name=proof_blinding_s,json=proofBlindingS,proto3" json:"proof_blinding_s,omitempty"` } func (m *SwapClaimPlan) Reset() { *m = SwapClaimPlan{} } func (m *SwapClaimPlan) String() string { return proto.CompactTextString(m) } func (*SwapClaimPlan) ProtoMessage() {} func (*SwapClaimPlan) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{8} + return fileDescriptor_d1eba752ca2f0d70, []int{7} } func (m *SwapClaimPlan) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -672,8 +644,23 @@ func (m *SwapClaimPlan) GetEpochDuration() uint64 { return 0 } +func (m *SwapClaimPlan) GetProofBlindingR() []byte { + if m != nil { + return m.ProofBlindingR + } + return nil +} + +func (m *SwapClaimPlan) GetProofBlindingS() []byte { + if m != nil { + return m.ProofBlindingS + } + return nil +} + type SwapView struct { // Types that are valid to be assigned to SwapView: + // // *SwapView_Visible_ // *SwapView_Opaque_ SwapView isSwapView_SwapView `protobuf_oneof:"swap_view"` @@ -683,7 +670,7 @@ func (m *SwapView) Reset() { *m = SwapView{} } func (m *SwapView) String() string { return proto.CompactTextString(m) } func (*SwapView) ProtoMessage() {} func (*SwapView) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{9} + return fileDescriptor_d1eba752ca2f0d70, []int{8} } func (m *SwapView) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -766,7 +753,7 @@ func (m *SwapView_Visible) Reset() { *m = SwapView_Visible{} } func (m *SwapView_Visible) String() string { return proto.CompactTextString(m) } func (*SwapView_Visible) ProtoMessage() {} func (*SwapView_Visible) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{9, 0} + return fileDescriptor_d1eba752ca2f0d70, []int{8, 0} } func (m *SwapView_Visible) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -817,7 +804,7 @@ func (m *SwapView_Opaque) Reset() { *m = SwapView_Opaque{} } func (m *SwapView_Opaque) String() string { return proto.CompactTextString(m) } func (*SwapView_Opaque) ProtoMessage() {} func (*SwapView_Opaque) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{9, 1} + return fileDescriptor_d1eba752ca2f0d70, []int{8, 1} } func (m *SwapView_Opaque) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -865,7 +852,7 @@ func (m *SwapClaimView) Reset() { *m = SwapClaimView{} } func (m *SwapClaimView) String() string { return proto.CompactTextString(m) } func (*SwapClaimView) ProtoMessage() {} func (*SwapClaimView) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{10} + return fileDescriptor_d1eba752ca2f0d70, []int{9} } func (m *SwapClaimView) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -949,7 +936,7 @@ func (m *SwapClaimView_Visible) Reset() { *m = SwapClaimView_Visible{} } func (m *SwapClaimView_Visible) String() string { return proto.CompactTextString(m) } func (*SwapClaimView_Visible) ProtoMessage() {} func (*SwapClaimView_Visible) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{10, 0} + return fileDescriptor_d1eba752ca2f0d70, []int{9, 0} } func (m *SwapClaimView_Visible) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1007,7 +994,7 @@ func (m *SwapClaimView_Opaque) Reset() { *m = SwapClaimView_Opaque{} } func (m *SwapClaimView_Opaque) String() string { return proto.CompactTextString(m) } func (*SwapClaimView_Opaque) ProtoMessage() {} func (*SwapClaimView_Opaque) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{10, 1} + return fileDescriptor_d1eba752ca2f0d70, []int{9, 1} } func (m *SwapClaimView_Opaque) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1057,7 +1044,7 @@ func (m *TradingPair) Reset() { *m = TradingPair{} } func (m *TradingPair) String() string { return proto.CompactTextString(m) } func (*TradingPair) ProtoMessage() {} func (*TradingPair) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{11} + return fileDescriptor_d1eba752ca2f0d70, []int{10} } func (m *TradingPair) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1113,7 +1100,7 @@ func (m *DirectedTradingPair) Reset() { *m = DirectedTradingPair{} } func (m *DirectedTradingPair) String() string { return proto.CompactTextString(m) } func (*DirectedTradingPair) ProtoMessage() {} func (*DirectedTradingPair) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{12} + return fileDescriptor_d1eba752ca2f0d70, []int{11} } func (m *DirectedTradingPair) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1178,14 +1165,14 @@ type BatchSwapOutputData struct { // The trading pair associated with the batch swap. TradingPair *TradingPair `protobuf:"bytes,8,opt,name=trading_pair,json=tradingPair,proto3" json:"trading_pair,omitempty"` // The starting block height of the epoch for which the batch swap data is valid. - EpochHeight uint64 `protobuf:"varint,9,opt,name=epoch_height,json=epochHeight,proto3" json:"epoch_height,omitempty"` + EpochStartingHeight uint64 `protobuf:"varint,9,opt,name=epoch_starting_height,json=epochStartingHeight,proto3" json:"epoch_starting_height,omitempty"` } func (m *BatchSwapOutputData) Reset() { *m = BatchSwapOutputData{} } func (m *BatchSwapOutputData) String() string { return proto.CompactTextString(m) } func (*BatchSwapOutputData) ProtoMessage() {} func (*BatchSwapOutputData) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{13} + return fileDescriptor_d1eba752ca2f0d70, []int{12} } func (m *BatchSwapOutputData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1270,9 +1257,9 @@ func (m *BatchSwapOutputData) GetTradingPair() *TradingPair { return nil } -func (m *BatchSwapOutputData) GetEpochHeight() uint64 { +func (m *BatchSwapOutputData) GetEpochStartingHeight() uint64 { if m != nil { - return m.EpochHeight + return m.EpochStartingHeight } return 0 } @@ -1290,7 +1277,7 @@ func (m *TradingFunction) Reset() { *m = TradingFunction{} } func (m *TradingFunction) String() string { return proto.CompactTextString(m) } func (*TradingFunction) ProtoMessage() {} func (*TradingFunction) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{14} + return fileDescriptor_d1eba752ca2f0d70, []int{13} } func (m *TradingFunction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1350,7 +1337,7 @@ func (m *BareTradingFunction) Reset() { *m = BareTradingFunction{} } func (m *BareTradingFunction) String() string { return proto.CompactTextString(m) } func (*BareTradingFunction) ProtoMessage() {} func (*BareTradingFunction) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{15} + return fileDescriptor_d1eba752ca2f0d70, []int{14} } func (m *BareTradingFunction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1415,7 +1402,7 @@ func (m *Reserves) Reset() { *m = Reserves{} } func (m *Reserves) String() string { return proto.CompactTextString(m) } func (*Reserves) ProtoMessage() {} func (*Reserves) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{16} + return fileDescriptor_d1eba752ca2f0d70, []int{15} } func (m *Reserves) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1469,13 +1456,16 @@ type Position struct { Nonce []byte `protobuf:"bytes,2,opt,name=nonce,proto3" json:"nonce,omitempty"` State *PositionState `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` Reserves *Reserves `protobuf:"bytes,4,opt,name=reserves,proto3" json:"reserves,omitempty"` + // / If set to true, the position is a limit-order and will be closed + // / immediately after being filled. + CloseOnFill bool `protobuf:"varint,5,opt,name=close_on_fill,json=closeOnFill,proto3" json:"close_on_fill,omitempty"` } func (m *Position) Reset() { *m = Position{} } func (m *Position) String() string { return proto.CompactTextString(m) } func (*Position) ProtoMessage() {} func (*Position) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{17} + return fileDescriptor_d1eba752ca2f0d70, []int{16} } func (m *Position) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1532,6 +1522,13 @@ func (m *Position) GetReserves() *Reserves { return nil } +func (m *Position) GetCloseOnFill() bool { + if m != nil { + return m.CloseOnFill + } + return false +} + // A hash of a `Position`. type PositionId struct { // The bytes of the position ID. @@ -1550,7 +1547,7 @@ func (m *PositionId) Reset() { *m = PositionId{} } func (m *PositionId) String() string { return proto.CompactTextString(m) } func (*PositionId) ProtoMessage() {} func (*PositionId) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{18} + return fileDescriptor_d1eba752ca2f0d70, []int{17} } func (m *PositionId) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1602,7 +1599,7 @@ func (m *PositionState) Reset() { *m = PositionState{} } func (m *PositionState) String() string { return proto.CompactTextString(m) } func (*PositionState) ProtoMessage() {} func (*PositionState) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{19} + return fileDescriptor_d1eba752ca2f0d70, []int{18} } func (m *PositionState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1662,7 +1659,7 @@ func (m *LpNft) Reset() { *m = LpNft{} } func (m *LpNft) String() string { return proto.CompactTextString(m) } func (*LpNft) ProtoMessage() {} func (*LpNft) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{20} + return fileDescriptor_d1eba752ca2f0d70, []int{19} } func (m *LpNft) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1721,7 +1718,7 @@ func (m *PositionOpen) Reset() { *m = PositionOpen{} } func (m *PositionOpen) String() string { return proto.CompactTextString(m) } func (*PositionOpen) ProtoMessage() {} func (*PositionOpen) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{21} + return fileDescriptor_d1eba752ca2f0d70, []int{20} } func (m *PositionOpen) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1774,7 +1771,7 @@ func (m *PositionClose) Reset() { *m = PositionClose{} } func (m *PositionClose) String() string { return proto.CompactTextString(m) } func (*PositionClose) ProtoMessage() {} func (*PositionClose) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{22} + return fileDescriptor_d1eba752ca2f0d70, []int{21} } func (m *PositionClose) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1827,7 +1824,7 @@ func (m *PositionWithdraw) Reset() { *m = PositionWithdraw{} } func (m *PositionWithdraw) String() string { return proto.CompactTextString(m) } func (*PositionWithdraw) ProtoMessage() {} func (*PositionWithdraw) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{23} + return fileDescriptor_d1eba752ca2f0d70, []int{22} } func (m *PositionWithdraw) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1887,7 +1884,7 @@ func (m *PositionRewardClaim) Reset() { *m = PositionRewardClaim{} } func (m *PositionRewardClaim) String() string { return proto.CompactTextString(m) } func (*PositionRewardClaim) ProtoMessage() {} func (*PositionRewardClaim) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{24} + return fileDescriptor_d1eba752ca2f0d70, []int{23} } func (m *PositionRewardClaim) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1943,7 +1940,7 @@ func (m *SwapExecution) Reset() { *m = SwapExecution{} } func (m *SwapExecution) String() string { return proto.CompactTextString(m) } func (*SwapExecution) ProtoMessage() {} func (*SwapExecution) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{25} + return fileDescriptor_d1eba752ca2f0d70, []int{24} } func (m *SwapExecution) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2003,7 +2000,7 @@ func (m *SwapExecution_Trace) Reset() { *m = SwapExecution_Trace{} } func (m *SwapExecution_Trace) String() string { return proto.CompactTextString(m) } func (*SwapExecution_Trace) ProtoMessage() {} func (*SwapExecution_Trace) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{25, 0} + return fileDescriptor_d1eba752ca2f0d70, []int{24, 0} } func (m *SwapExecution_Trace) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2050,7 +2047,7 @@ func (m *PositionWithdrawPlan) Reset() { *m = PositionWithdrawPlan{} } func (m *PositionWithdrawPlan) String() string { return proto.CompactTextString(m) } func (*PositionWithdrawPlan) ProtoMessage() {} func (*PositionWithdrawPlan) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{26} + return fileDescriptor_d1eba752ca2f0d70, []int{25} } func (m *PositionWithdrawPlan) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2109,7 +2106,7 @@ func (m *PositionRewardClaimPlan) Reset() { *m = PositionRewardClaimPlan func (m *PositionRewardClaimPlan) String() string { return proto.CompactTextString(m) } func (*PositionRewardClaimPlan) ProtoMessage() {} func (*PositionRewardClaimPlan) Descriptor() ([]byte, []int) { - return fileDescriptor_d1eba752ca2f0d70, []int{27} + return fileDescriptor_d1eba752ca2f0d70, []int{26} } func (m *PositionRewardClaimPlan) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2153,7 +2150,6 @@ func init() { proto.RegisterType((*SwapBody)(nil), "penumbra.core.dex.v1alpha1.SwapBody") proto.RegisterType((*SwapPayload)(nil), "penumbra.core.dex.v1alpha1.SwapPayload") proto.RegisterType((*SwapPlaintext)(nil), "penumbra.core.dex.v1alpha1.SwapPlaintext") - proto.RegisterType((*MockFlowCiphertext)(nil), "penumbra.core.dex.v1alpha1.MockFlowCiphertext") proto.RegisterType((*SwapPlan)(nil), "penumbra.core.dex.v1alpha1.SwapPlan") proto.RegisterType((*SwapClaimPlan)(nil), "penumbra.core.dex.v1alpha1.SwapClaimPlan") proto.RegisterType((*SwapView)(nil), "penumbra.core.dex.v1alpha1.SwapView") @@ -2187,119 +2183,121 @@ func init() { } var fileDescriptor_d1eba752ca2f0d70 = []byte{ - // 1786 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x59, 0x4f, 0x6f, 0x1b, 0xc7, - 0x15, 0xd7, 0x2e, 0x29, 0x8a, 0x7c, 0xa4, 0x1c, 0x79, 0x14, 0xb4, 0x02, 0x8b, 0xc8, 0xf6, 0xd6, - 0x49, 0xdc, 0xa4, 0xa0, 0xc2, 0x75, 0x0a, 0x04, 0x72, 0x12, 0x47, 0xfc, 0x23, 0x8b, 0x49, 0x44, - 0x31, 0x2b, 0xc5, 0x2e, 0x52, 0xa3, 0x8b, 0xd1, 0xee, 0xc8, 0x5c, 0x74, 0xb9, 0xbb, 0xde, 0x1d, - 0x4a, 0xd4, 0xa9, 0x40, 0xd1, 0xa2, 0xa7, 0xa2, 0xcd, 0xa9, 0xa7, 0xa2, 0x48, 0x8f, 0x45, 0x3f, - 0x42, 0xd1, 0x5e, 0x8b, 0x9e, 0x7c, 0x6b, 0x4f, 0x45, 0x21, 0x1f, 0x0a, 0xf4, 0x03, 0x14, 0x3d, - 0xf4, 0x50, 0xcc, 0x3f, 0x72, 0x25, 0x51, 0x26, 0x29, 0xab, 0x97, 0xde, 0x38, 0x33, 0xef, 0xf7, - 0xdb, 0xf7, 0xe6, 0xbd, 0x79, 0xef, 0xcd, 0x10, 0x6e, 0x47, 0x24, 0xe8, 0xf7, 0xf6, 0x63, 0xbc, - 0xe6, 0x84, 0x31, 0x59, 0x73, 0xc9, 0x60, 0xed, 0xb0, 0x8a, 0xfd, 0xa8, 0x8b, 0xab, 0x6c, 0x50, - 0x89, 0xe2, 0x90, 0x86, 0xa8, 0xac, 0xa4, 0x2a, 0x4c, 0xaa, 0xc2, 0x16, 0x94, 0x54, 0xf9, 0xad, - 0xd3, 0x0c, 0x4e, 0x7c, 0x1c, 0xd1, 0x70, 0x44, 0x22, 0xc6, 0x82, 0xc7, 0xf8, 0x91, 0x06, 0xd9, - 0xdd, 0x23, 0x1c, 0xa1, 0x8f, 0x60, 0x3e, 0x8a, 0xc3, 0xf0, 0x60, 0x45, 0xbb, 0xa9, 0xdd, 0x29, - 0x9a, 0x6f, 0x55, 0x4e, 0x7f, 0x40, 0x82, 0x14, 0x49, 0xe5, 0x8b, 0x4f, 0x18, 0xaa, 0xc3, 0x10, - 0x96, 0x00, 0xa2, 0xf7, 0x20, 0xbb, 0x1f, 0xba, 0xc7, 0x2b, 0x59, 0x4e, 0x70, 0xbb, 0x72, 0xb1, - 0x86, 0x15, 0x86, 0xad, 0x85, 0xee, 0xb1, 0xc5, 0x11, 0xc6, 0x4f, 0x35, 0x28, 0xb0, 0xa9, 0xba, - 0x8f, 0xbd, 0x1e, 0x7a, 0x35, 0xad, 0x49, 0x49, 0xb1, 0x7f, 0x20, 0xd9, 0x75, 0xce, 0xfe, 0xad, - 0x49, 0xec, 0x9c, 0x6a, 0xf4, 0x09, 0xf4, 0x3a, 0x5c, 0x23, 0x51, 0xe8, 0x74, 0x6d, 0xb7, 0x1f, - 0x63, 0xea, 0x85, 0xc1, 0xca, 0xc2, 0x4d, 0xed, 0x4e, 0xd6, 0x5a, 0xe4, 0xb3, 0x0d, 0x39, 0x69, - 0xfc, 0x3a, 0x03, 0x8b, 0xa7, 0xe0, 0x68, 0x13, 0x0a, 0x41, 0xdf, 0xf7, 0xbd, 0x03, 0x8f, 0xc4, - 0x72, 0x6f, 0xee, 0x4c, 0xd8, 0x9b, 0xb6, 0x92, 0xb7, 0x46, 0x50, 0xf4, 0x2e, 0x64, 0x0e, 0x08, - 0x91, 0xea, 0x1b, 0x13, 0x18, 0x36, 0x09, 0xb1, 0x98, 0x38, 0xfa, 0x3e, 0x2c, 0x87, 0x7d, 0x1a, - 0xf5, 0xa9, 0x5d, 0xb5, 0x9d, 0xb0, 0xd7, 0xf3, 0x68, 0x8f, 0x04, 0x74, 0x25, 0xc3, 0x59, 0x2a, - 0x13, 0x58, 0x76, 0x29, 0xa6, 0xa4, 0x3e, 0x44, 0x59, 0xd7, 0x05, 0x55, 0x75, 0x34, 0x95, 0xe2, - 0x37, 0xd3, 0xfc, 0xd9, 0x97, 0xe1, 0x37, 0x53, 0xfc, 0x1d, 0x28, 0x4a, 0x7e, 0x17, 0x53, 0xbc, - 0x92, 0xe3, 0xbc, 0x6b, 0x2f, 0x72, 0x5e, 0x0d, 0x53, 0xa7, 0xcb, 0x5c, 0xb0, 0xc3, 0x71, 0x0d, - 0x4c, 0xb1, 0x05, 0xe1, 0xf0, 0xb7, 0xf1, 0x6f, 0x1d, 0xf2, 0x2a, 0x7c, 0xd0, 0xc7, 0x50, 0xa2, - 0x31, 0x76, 0xbd, 0xe0, 0x89, 0x1d, 0x61, 0x4f, 0xf9, 0xe7, 0xcd, 0x17, 0xf1, 0xef, 0x09, 0xf9, - 0x0e, 0xf6, 0x62, 0xab, 0x48, 0x47, 0x03, 0xb4, 0x01, 0x05, 0x97, 0xf8, 0x14, 0xdb, 0x55, 0xdb, - 0x93, 0x6e, 0x7a, 0x7d, 0xc2, 0x06, 0x6c, 0xf4, 0xc2, 0x7e, 0x40, 0xad, 0x05, 0x8e, 0xab, 0xb6, - 0x46, 0x14, 0xa6, 0xed, 0x49, 0x1f, 0xcd, 0x44, 0x61, 0xb6, 0xd0, 0x23, 0xb8, 0x76, 0x40, 0xc8, - 0x79, 0x5f, 0xbc, 0x33, 0x81, 0xa7, 0x86, 0x7d, 0x1c, 0x38, 0x69, 0x6f, 0x2c, 0x1e, 0x90, 0xd4, - 0x10, 0x6d, 0xc0, 0x42, 0x84, 0x8f, 0xfd, 0x10, 0xbb, 0x2b, 0xf3, 0x93, 0x77, 0x89, 0x1f, 0x6e, - 0x21, 0x6e, 0x29, 0x9c, 0xf1, 0x63, 0x0d, 0x8a, 0xa9, 0x05, 0xd4, 0x06, 0x48, 0xe9, 0xa9, 0x5d, - 0x2a, 0x66, 0x52, 0x0c, 0xfc, 0x8c, 0x06, 0x1c, 0x40, 0x5c, 0x3b, 0x39, 0xc2, 0x11, 0x77, 0x43, - 0xc9, 0x5a, 0x1c, 0xce, 0xb2, 0xaf, 0x1b, 0x3f, 0x91, 0x67, 0xb4, 0xe3, 0x63, 0x2f, 0xa0, 0x64, - 0x40, 0xff, 0x0f, 0xc3, 0xe0, 0x3e, 0x14, 0x1c, 0x96, 0x82, 0x6c, 0x96, 0x33, 0xb2, 0x53, 0xe7, - 0x8c, 0x3c, 0x07, 0x6d, 0x12, 0x82, 0x3e, 0x81, 0x45, 0x41, 0x80, 0x5d, 0x37, 0x26, 0x49, 0x22, - 0x9d, 0xfe, 0xc6, 0x24, 0x3d, 0x84, 0xb4, 0x55, 0xe2, 0x60, 0x39, 0x62, 0x19, 0x39, 0x4e, 0x08, - 0x71, 0xf9, 0xf9, 0x2d, 0x59, 0x62, 0x60, 0x7c, 0x06, 0x68, 0x3b, 0x74, 0x7e, 0xb0, 0xe9, 0x87, - 0x47, 0x75, 0x2f, 0xea, 0x92, 0x98, 0xfb, 0xe2, 0x1e, 0xcc, 0x1f, 0x62, 0xbf, 0x4f, 0xa4, 0x13, - 0xa6, 0x34, 0x5c, 0x60, 0x8c, 0x1f, 0x8a, 0xb3, 0xdd, 0xf1, 0x71, 0x80, 0x3a, 0x70, 0x8d, 0xc5, - 0x80, 0x1d, 0x29, 0x37, 0x4b, 0xc6, 0x89, 0xa9, 0x7f, 0x18, 0x17, 0xd6, 0x62, 0x72, 0x2a, 0x4c, - 0x6e, 0x41, 0x89, 0x9d, 0xad, 0x7d, 0xdf, 0x0b, 0x98, 0xbb, 0x65, 0x74, 0x15, 0x0f, 0x08, 0xa9, - 0xc9, 0x29, 0xe3, 0x5f, 0x5a, 0x2a, 0xff, 0xff, 0x8f, 0xd4, 0x28, 0x43, 0x3e, 0x0a, 0x13, 0x8f, - 0x17, 0x21, 0x9d, 0x17, 0xa1, 0xe1, 0xf8, 0x6c, 0xbe, 0xcc, 0xbc, 0x74, 0xbe, 0x1c, 0x53, 0xf8, - 0xb2, 0xe3, 0x0a, 0xdf, 0x7f, 0x64, 0x5a, 0x7d, 0xe8, 0x91, 0x23, 0xb4, 0x05, 0x0b, 0x87, 0x5e, - 0xe2, 0xed, 0xfb, 0xca, 0x8b, 0xdf, 0x9e, 0x64, 0x2c, 0x83, 0x55, 0x1e, 0x0a, 0xcc, 0xd6, 0x9c, - 0xa5, 0xe0, 0xa8, 0x09, 0xb9, 0x30, 0xc2, 0x4f, 0xfb, 0xaa, 0xf0, 0xbd, 0x3d, 0x15, 0xd1, 0x0e, - 0x87, 0x6c, 0xcd, 0x59, 0x12, 0x5c, 0xfe, 0x52, 0x83, 0x05, 0xc9, 0x8e, 0xde, 0x85, 0x2c, 0xcf, - 0x0d, 0x42, 0xb3, 0x9b, 0x93, 0x08, 0x2d, 0x2e, 0x3d, 0xc6, 0x8d, 0x99, 0x97, 0x73, 0x63, 0xf9, - 0x43, 0xc8, 0x09, 0x3d, 0x2f, 0xa7, 0x51, 0xad, 0x08, 0x05, 0xae, 0xd1, 0xa1, 0x47, 0x8e, 0x8c, - 0x7f, 0xa4, 0xfb, 0x0e, 0xee, 0x83, 0xed, 0xb3, 0x3e, 0xa8, 0x4e, 0xd5, 0xf2, 0x5c, 0xe4, 0x88, - 0x8f, 0xcf, 0x38, 0xe2, 0x9d, 0xe9, 0xd9, 0xce, 0x79, 0xe3, 0x2f, 0x29, 0x6f, 0x34, 0x00, 0xb8, - 0x15, 0x3c, 0x5f, 0x5c, 0x70, 0xe6, 0xc7, 0x73, 0x5b, 0xdc, 0x7c, 0xd1, 0xf2, 0xd5, 0x20, 0xaf, - 0xda, 0x1c, 0xa9, 0xdf, 0x9b, 0x93, 0x7a, 0xac, 0x90, 0x12, 0xa6, 0x9d, 0xb5, 0x20, 0x9b, 0x9a, - 0x14, 0x87, 0x29, 0x7d, 0x3b, 0x2b, 0x87, 0x59, 0x6e, 0x0f, 0x7d, 0x7a, 0x25, 0x76, 0xd5, 0xae, - 0xc3, 0x2b, 0x23, 0x16, 0xe1, 0xe9, 0x9f, 0x6b, 0x50, 0x4c, 0x15, 0x1f, 0x74, 0x1f, 0x16, 0x70, - 0x92, 0x10, 0x66, 0xb9, 0x36, 0x5d, 0x8a, 0x66, 0xd2, 0x2d, 0xd7, 0xca, 0x71, 0x58, 0x75, 0x44, - 0x60, 0xca, 0xad, 0x9b, 0x8d, 0xc0, 0x34, 0x7e, 0xa6, 0xc1, 0x72, 0xc3, 0x8b, 0x89, 0x43, 0x89, - 0x9b, 0xd6, 0xec, 0x7d, 0x98, 0x4f, 0x28, 0x8e, 0xe9, 0x8c, 0x7a, 0x09, 0x10, 0x7a, 0x0f, 0x32, - 0x24, 0x70, 0x67, 0x54, 0x89, 0x41, 0x8c, 0xdf, 0x65, 0x61, 0x79, 0x4c, 0x56, 0x43, 0x1f, 0xc2, - 0x82, 0xac, 0xcc, 0xb3, 0xd5, 0x96, 0x9c, 0xa8, 0xcb, 0x23, 0xbc, 0x39, 0x5b, 0x5d, 0x17, 0x78, - 0x13, 0x7d, 0x04, 0x79, 0x1f, 0xf7, 0xf6, 0x5d, 0xa6, 0xc0, 0x6c, 0x55, 0x5d, 0xc0, 0xaa, 0x29, - 0x06, 0x53, 0x16, 0xf5, 0xd9, 0x18, 0x4c, 0x16, 0x96, 0xfd, 0xe0, 0xc0, 0xf3, 0x7d, 0xe2, 0xda, - 0x55, 0x59, 0xd3, 0xa7, 0xe4, 0x28, 0x28, 0x60, 0xf5, 0x14, 0x8b, 0x29, 0x9b, 0xf2, 0x59, 0x59, - 0x4c, 0xf4, 0x35, 0xc8, 0x75, 0x89, 0xf7, 0xa4, 0x4b, 0xe5, 0x55, 0x4a, 0x8e, 0xce, 0x75, 0x63, - 0xf9, 0x97, 0xe8, 0xc6, 0x6e, 0x41, 0x49, 0x54, 0x2f, 0xf9, 0xa5, 0x02, 0xff, 0x52, 0x91, 0xcf, - 0x6d, 0xf1, 0x29, 0xe3, 0x57, 0x1a, 0xbc, 0x22, 0xf1, 0x9b, 0xfd, 0xc0, 0xe1, 0x65, 0x74, 0x1b, - 0x0a, 0x4e, 0xd8, 0x8b, 0xc2, 0x60, 0xd4, 0x98, 0x4e, 0x28, 0xa2, 0x31, 0x39, 0xc3, 0x61, 0x8d, - 0x18, 0xd0, 0x3d, 0xc8, 0x72, 0x4b, 0xf4, 0xd9, 0x2c, 0xe1, 0x20, 0xe3, 0x4b, 0x8d, 0x85, 0xf3, - 0x39, 0x7e, 0xb4, 0x24, 0x2e, 0x84, 0x4c, 0xbb, 0x45, 0x71, 0xd9, 0xbb, 0x0b, 0x5a, 0x34, 0x5b, - 0x68, 0x6a, 0x11, 0x03, 0x3d, 0x9d, 0x2d, 0x1c, 0xb5, 0xa7, 0xc6, 0x00, 0xf2, 0x16, 0x49, 0x48, - 0x7c, 0x48, 0x12, 0xf4, 0x1d, 0xd0, 0xe3, 0x19, 0x4f, 0x94, 0x1e, 0x57, 0x39, 0x6c, 0xc6, 0x83, - 0xa4, 0xc7, 0xa6, 0x71, 0xa2, 0x41, 0xbe, 0xa3, 0xba, 0x9d, 0x0f, 0x20, 0x13, 0x75, 0x3d, 0xf9, - 0xed, 0xb7, 0xa7, 0xd8, 0xd6, 0xa1, 0x73, 0x18, 0x8e, 0xb5, 0xa5, 0x41, 0x18, 0x38, 0x44, 0x36, - 0x72, 0x62, 0x80, 0xee, 0xf3, 0xb4, 0x45, 0xc9, 0x34, 0x05, 0x5e, 0x69, 0xc2, 0x6f, 0x25, 0x96, - 0xc0, 0xb1, 0x53, 0x1a, 0xcb, 0xcd, 0x99, 0xe6, 0x2d, 0x43, 0x6d, 0xa4, 0x35, 0x44, 0x19, 0x75, - 0x00, 0xc5, 0xdc, 0x72, 0x99, 0x9a, 0x5e, 0x10, 0xc8, 0xd7, 0x83, 0x92, 0x25, 0x06, 0xe8, 0x06, - 0x14, 0xb1, 0x4f, 0xed, 0x7d, 0xe2, 0x74, 0xef, 0x9a, 0x3d, 0x6e, 0x42, 0xc1, 0x02, 0xec, 0xd3, - 0x9a, 0x98, 0x31, 0xbe, 0xd2, 0x61, 0xf1, 0x94, 0x7e, 0xe8, 0x33, 0x65, 0x19, 0x23, 0xba, 0x66, - 0xde, 0x9b, 0xda, 0xb2, 0xd3, 0xa3, 0x66, 0xd0, 0xef, 0x49, 0x5b, 0x8d, 0xdf, 0x6b, 0x70, 0xfd, - 0xdc, 0x22, 0xfa, 0x26, 0xdc, 0xe8, 0xec, 0xec, 0xb6, 0xf6, 0x5a, 0x3b, 0x6d, 0x7b, 0x77, 0x6f, - 0x63, 0xaf, 0x69, 0x37, 0xdb, 0x9f, 0x6f, 0xdb, 0x9f, 0xb7, 0x77, 0x3b, 0xcd, 0x7a, 0x6b, 0xb3, - 0xd5, 0x6c, 0x2c, 0xcd, 0xa1, 0x55, 0x28, 0x8f, 0x13, 0xda, 0xe9, 0x34, 0xdb, 0xcd, 0xc6, 0x92, - 0x76, 0xd1, 0x7a, 0xfd, 0xd3, 0x9d, 0xdd, 0x66, 0x63, 0x49, 0x47, 0xb7, 0xe0, 0xb5, 0x71, 0xeb, - 0x8f, 0x5a, 0x7b, 0x5b, 0x0d, 0x6b, 0xe3, 0x51, 0x7b, 0x29, 0x83, 0x6e, 0xc0, 0x37, 0xc6, 0x53, - 0x6c, 0xb4, 0xb6, 0x9b, 0x8d, 0xa5, 0x2c, 0x3b, 0x5b, 0xf3, 0x9f, 0x46, 0xed, 0x03, 0x8a, 0x1e, - 0x40, 0x51, 0x35, 0xd1, 0xb6, 0xe7, 0x5e, 0x50, 0xb2, 0xc6, 0xee, 0x50, 0xcb, 0xb5, 0x20, 0x1a, - 0x79, 0x6b, 0x18, 0x3e, 0xfa, 0xe5, 0xc2, 0xc7, 0xe8, 0x40, 0x49, 0xcd, 0xef, 0x44, 0x24, 0x60, - 0xe1, 0x34, 0x6c, 0xf7, 0xb5, 0xc9, 0xe1, 0xa4, 0xb0, 0xa3, 0x4b, 0x81, 0xf1, 0xdd, 0x51, 0x20, - 0xd4, 0xfd, 0x30, 0x21, 0x57, 0x66, 0xac, 0xf1, 0x07, 0x0d, 0x96, 0xd4, 0xd2, 0x23, 0x8f, 0x76, - 0xdd, 0x18, 0x1f, 0x5d, 0xdd, 0x56, 0x62, 0x58, 0x56, 0x47, 0x22, 0xfd, 0xa0, 0xa1, 0x5f, 0xf2, - 0x41, 0x03, 0x29, 0xb2, 0xd1, 0x9c, 0xf1, 0x47, 0x0d, 0x96, 0x87, 0x3b, 0x46, 0x8e, 0x70, 0xec, - 0x8a, 0x86, 0xf2, 0xca, 0x6c, 0xb0, 0x01, 0xc5, 0x9c, 0xf7, 0x4a, 0x4c, 0xb8, 0x2e, 0xb9, 0x52, - 0x16, 0xfc, 0x52, 0x17, 0x9d, 0x7f, 0x73, 0x40, 0x9c, 0x3e, 0xcf, 0x8a, 0x0f, 0x20, 0x47, 0x63, - 0xec, 0x90, 0x64, 0x45, 0xbb, 0x99, 0x99, 0x54, 0xb9, 0x4e, 0x41, 0x59, 0x9a, 0x74, 0x88, 0x25, - 0xe1, 0x68, 0x9d, 0x25, 0x9e, 0xa8, 0xaf, 0xd4, 0xbd, 0x3d, 0x41, 0xdd, 0x87, 0xec, 0x0a, 0x6e, - 0x09, 0x08, 0x7a, 0x1f, 0x72, 0xa2, 0x29, 0x96, 0x69, 0x74, 0x3a, 0xb0, 0xc4, 0x94, 0xeb, 0x30, - 0xcf, 0x55, 0x61, 0x2a, 0xa8, 0xd7, 0x80, 0xcc, 0xf4, 0x2a, 0x88, 0xc7, 0x80, 0xbf, 0x69, 0xf0, - 0xea, 0xd9, 0xe0, 0xe4, 0x57, 0xf2, 0x74, 0x82, 0xd6, 0x2e, 0x93, 0xa0, 0xcf, 0x86, 0x87, 0x7e, - 0xe9, 0xf0, 0x50, 0x9d, 0x41, 0xe6, 0x32, 0x9d, 0xc1, 0xf7, 0xe0, 0xeb, 0x63, 0x62, 0xf7, 0x6a, - 0x4c, 0xac, 0x7d, 0xa5, 0xff, 0xe9, 0x64, 0x55, 0x7b, 0x76, 0xb2, 0xaa, 0xfd, 0xfd, 0x64, 0x55, - 0xfb, 0xc5, 0xf3, 0xd5, 0xb9, 0x67, 0xcf, 0x57, 0xe7, 0xfe, 0xfa, 0x7c, 0x75, 0x0e, 0x56, 0x9d, - 0xb0, 0xf7, 0x02, 0xb6, 0x5a, 0xbe, 0x41, 0x06, 0x9d, 0x38, 0xa4, 0x61, 0x47, 0xfb, 0xc2, 0x7a, - 0xe2, 0xd1, 0x6e, 0x7f, 0xbf, 0xe2, 0x84, 0xbd, 0x35, 0x27, 0x4c, 0x7a, 0x61, 0xb2, 0x16, 0x13, - 0x1f, 0x1f, 0x93, 0x78, 0xed, 0xd0, 0x1c, 0xfe, 0x74, 0xba, 0xd8, 0x0b, 0x92, 0xb5, 0x8b, 0xff, - 0xb9, 0xb8, 0xe7, 0x92, 0x81, 0xfa, 0xfd, 0x1b, 0x3d, 0xd3, 0xa9, 0x37, 0x7e, 0xab, 0x97, 0x3b, - 0x4a, 0x85, 0x3a, 0x53, 0xa1, 0x41, 0x06, 0x95, 0x87, 0x52, 0xe4, 0xcf, 0xa3, 0xc5, 0xc7, 0x6c, - 0xf1, 0x71, 0x83, 0x0c, 0x1e, 0xab, 0xc5, 0x13, 0xfd, 0x8d, 0x8b, 0x17, 0x1f, 0x3f, 0xe8, 0xd4, - 0xb6, 0x09, 0xc5, 0x2e, 0xa6, 0xf8, 0x9f, 0xfa, 0x6b, 0x4a, 0x70, 0x7d, 0x9d, 0x49, 0xae, 0xaf, - 0x37, 0xc8, 0x60, 0x7d, 0x5d, 0xc9, 0xee, 0xe7, 0xf8, 0x7f, 0x20, 0x77, 0xff, 0x1b, 0x00, 0x00, - 0xff, 0xff, 0xd6, 0xd7, 0x3e, 0x19, 0x73, 0x19, 0x00, 0x00, + // 1824 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x59, 0xcd, 0x6f, 0x1b, 0xc7, + 0x15, 0xd7, 0x2e, 0x29, 0x8a, 0x7c, 0xa4, 0x14, 0x79, 0x94, 0xb6, 0x02, 0x8b, 0xc8, 0xce, 0xd6, + 0x4e, 0xdc, 0xa4, 0xa0, 0xc2, 0x75, 0x0a, 0x04, 0x72, 0x12, 0x47, 0xfc, 0x90, 0xc5, 0x24, 0xa2, + 0xd8, 0x91, 0x62, 0x17, 0xa9, 0xd1, 0xc5, 0x68, 0x77, 0x64, 0x2e, 0xb0, 0xdc, 0x5d, 0xef, 0x0e, + 0x25, 0xea, 0x5a, 0xf4, 0xe3, 0x54, 0xb4, 0x39, 0xf5, 0x54, 0x14, 0xe9, 0xb1, 0x7f, 0x43, 0x3f, + 0xae, 0x45, 0x4e, 0x06, 0x7a, 0x68, 0x4f, 0x45, 0x61, 0x1f, 0x0a, 0xf4, 0x2f, 0xe8, 0xa1, 0x87, + 0x62, 0x66, 0x67, 0xc8, 0x95, 0x44, 0x99, 0xa4, 0xac, 0x5e, 0x7a, 0xe3, 0xcc, 0xbc, 0xdf, 0x6f, + 0xdf, 0xd7, 0xbc, 0xf7, 0x76, 0x09, 0x37, 0x43, 0xea, 0xf7, 0x7b, 0x07, 0x11, 0x59, 0xb7, 0x83, + 0x88, 0xae, 0x3b, 0x74, 0xb0, 0x7e, 0x54, 0x25, 0x5e, 0xd8, 0x25, 0x55, 0xbe, 0xa8, 0x84, 0x51, + 0xc0, 0x02, 0x54, 0x56, 0x52, 0x15, 0x2e, 0x55, 0xe1, 0x07, 0x4a, 0xaa, 0xfc, 0xd6, 0x69, 0x06, + 0x3b, 0x3a, 0x09, 0x59, 0x30, 0x22, 0x49, 0xd6, 0x09, 0x8f, 0xf1, 0x23, 0x0d, 0xb2, 0x7b, 0xc7, + 0x24, 0x44, 0x1f, 0xc1, 0x7c, 0x18, 0x05, 0xc1, 0xe1, 0xaa, 0x76, 0x43, 0xbb, 0x5d, 0x34, 0xdf, + 0xaa, 0x9c, 0x7e, 0x80, 0x04, 0x29, 0x92, 0xca, 0xe7, 0x9f, 0x70, 0x54, 0x87, 0x23, 0x70, 0x02, + 0x44, 0xef, 0x41, 0xf6, 0x20, 0x70, 0x4e, 0x56, 0xb3, 0x82, 0xe0, 0x66, 0xe5, 0x62, 0x0d, 0x2b, + 0x1c, 0x5b, 0x0b, 0x9c, 0x13, 0x2c, 0x10, 0xc6, 0xcf, 0x34, 0x28, 0xf0, 0xad, 0xba, 0x47, 0xdc, + 0x1e, 0x7a, 0x35, 0xad, 0x49, 0x49, 0xb1, 0x7f, 0x20, 0xd9, 0x75, 0xc1, 0xfe, 0xed, 0x49, 0xec, + 0x82, 0x6a, 0xf4, 0x08, 0x74, 0x0b, 0x96, 0x68, 0x18, 0xd8, 0x5d, 0xcb, 0xe9, 0x47, 0x84, 0xb9, + 0x81, 0xbf, 0xba, 0x70, 0x43, 0xbb, 0x9d, 0xc5, 0x8b, 0x62, 0xb7, 0x21, 0x37, 0x8d, 0xdf, 0x64, + 0x60, 0xf1, 0x14, 0x1c, 0x6d, 0x41, 0xc1, 0xef, 0x7b, 0x9e, 0x7b, 0xe8, 0xd2, 0x48, 0xfa, 0xe6, + 0xf6, 0x04, 0xdf, 0xb4, 0x95, 0x3c, 0x1e, 0x41, 0xd1, 0xbb, 0x90, 0x39, 0xa4, 0x54, 0xaa, 0x6f, + 0x4c, 0x60, 0xd8, 0xa2, 0x14, 0x73, 0x71, 0xf4, 0x43, 0x58, 0x09, 0xfa, 0x2c, 0xec, 0x33, 0xab, + 0x6a, 0xd9, 0x41, 0xaf, 0xe7, 0xb2, 0x1e, 0xf5, 0xd9, 0x6a, 0x46, 0xb0, 0x54, 0x26, 0xb0, 0xec, + 0x31, 0xc2, 0x68, 0x7d, 0x88, 0xc2, 0xd7, 0x12, 0xaa, 0xea, 0x68, 0x2b, 0xc5, 0x6f, 0xa6, 0xf9, + 0xb3, 0x2f, 0xc3, 0x6f, 0xa6, 0xf8, 0x3b, 0x50, 0x94, 0xfc, 0x0e, 0x61, 0x64, 0x35, 0x27, 0x78, + 0xd7, 0x5f, 0x14, 0xbc, 0x1a, 0x61, 0x76, 0x97, 0x87, 0x60, 0x57, 0xe0, 0x1a, 0x84, 0x11, 0x0c, + 0xc1, 0xf0, 0xb7, 0xf1, 0x6f, 0x1d, 0xf2, 0x2a, 0x7d, 0xd0, 0xc7, 0x50, 0x62, 0x11, 0x71, 0x5c, + 0xff, 0xb1, 0x15, 0x12, 0x57, 0xc5, 0xe7, 0xcd, 0x17, 0xf1, 0xef, 0x27, 0xf2, 0x1d, 0xe2, 0x46, + 0xb8, 0xc8, 0x46, 0x0b, 0xb4, 0x09, 0x05, 0x87, 0x7a, 0x8c, 0x58, 0x55, 0xcb, 0x95, 0x61, 0xba, + 0x35, 0xc1, 0x01, 0x9b, 0xbd, 0xa0, 0xef, 0x33, 0xbc, 0x20, 0x70, 0xd5, 0xd6, 0x88, 0xc2, 0xb4, + 0x5c, 0x19, 0xa3, 0x99, 0x28, 0xcc, 0x16, 0x7a, 0x08, 0x4b, 0x87, 0x94, 0x9e, 0x8f, 0xc5, 0x3b, + 0x13, 0x78, 0x6a, 0xc4, 0x23, 0xbe, 0x9d, 0x8e, 0xc6, 0xe2, 0x21, 0x4d, 0x2d, 0xd1, 0x26, 0x2c, + 0x84, 0xe4, 0xc4, 0x0b, 0x88, 0xb3, 0x3a, 0x3f, 0xd9, 0x4b, 0xe2, 0x72, 0x27, 0xe2, 0x58, 0xe1, + 0x8c, 0x1f, 0x6b, 0x50, 0x4c, 0x1d, 0xa0, 0x36, 0x40, 0x4a, 0x4f, 0xed, 0x52, 0x39, 0x93, 0x62, + 0x10, 0x77, 0xd4, 0x17, 0x00, 0xea, 0x58, 0xf1, 0x31, 0x09, 0x45, 0x18, 0x4a, 0x78, 0x71, 0xb8, + 0xcb, 0x9f, 0x6e, 0xfc, 0x44, 0xde, 0xd1, 0x8e, 0x47, 0x5c, 0x9f, 0xd1, 0x01, 0xfb, 0x3f, 0x4c, + 0x83, 0x7b, 0x50, 0xb0, 0x79, 0x09, 0xb2, 0x78, 0xcd, 0xc8, 0x4e, 0x5d, 0x33, 0xf2, 0x02, 0xb4, + 0x45, 0x29, 0xfa, 0x04, 0x16, 0x13, 0x02, 0xe2, 0x38, 0x11, 0x8d, 0x63, 0x19, 0xf4, 0x37, 0x26, + 0xe9, 0x91, 0x48, 0xe3, 0x92, 0x00, 0xcb, 0x15, 0xaf, 0xc8, 0x51, 0x4c, 0xa9, 0x23, 0xee, 0x6f, + 0x09, 0x27, 0x0b, 0xe3, 0x2f, 0x5a, 0x72, 0x13, 0x3b, 0x1e, 0xf1, 0x51, 0x07, 0x96, 0x78, 0xc4, + 0xac, 0x50, 0x05, 0x45, 0x06, 0x61, 0x62, 0xa1, 0x1e, 0x46, 0x11, 0x2f, 0xc6, 0xa7, 0x82, 0xfa, + 0x3a, 0x94, 0xf8, 0x4d, 0x38, 0xf0, 0x5c, 0x9f, 0x07, 0x47, 0xe6, 0x42, 0xf1, 0x90, 0xd2, 0x9a, + 0xdc, 0x42, 0xb7, 0x61, 0x59, 0x34, 0x87, 0xa1, 0x90, 0x15, 0x09, 0x7f, 0x97, 0xf0, 0x92, 0xd8, + 0x57, 0x82, 0x78, 0x8c, 0x64, 0x2c, 0xdc, 0x7a, 0x56, 0x72, 0xcf, 0xf8, 0x4a, 0x4f, 0x75, 0x80, + 0xff, 0x91, 0x69, 0x65, 0xc8, 0x87, 0x41, 0xec, 0x8a, 0x36, 0xa4, 0x8b, 0x36, 0x34, 0x5c, 0x9f, + 0xad, 0x98, 0x99, 0x97, 0xae, 0x98, 0x63, 0x5a, 0x5f, 0x76, 0x4c, 0xeb, 0x1b, 0xeb, 0xcc, 0xf9, + 0xa9, 0x9d, 0x99, 0x1b, 0xeb, 0xcc, 0xff, 0xc8, 0x62, 0xfd, 0xc0, 0xa5, 0xc7, 0x68, 0x1b, 0x16, + 0x8e, 0xdc, 0xd8, 0x3d, 0xf0, 0xa8, 0x74, 0xe0, 0x77, 0x26, 0x39, 0x90, 0xc3, 0x2a, 0x0f, 0x12, + 0xcc, 0xf6, 0x1c, 0x56, 0x70, 0xd4, 0x84, 0x5c, 0x10, 0x92, 0x27, 0x7d, 0xd5, 0x4e, 0xdf, 0x9e, + 0x8a, 0x68, 0x57, 0x40, 0xb6, 0xe7, 0xb0, 0x04, 0x97, 0xbf, 0xd0, 0x60, 0x41, 0xb2, 0xa3, 0x77, + 0x21, 0x2b, 0x2a, 0x4e, 0xa2, 0xd9, 0x8d, 0x49, 0x84, 0x58, 0x48, 0x8f, 0x49, 0x8d, 0xcc, 0xcb, + 0xa5, 0x46, 0xf9, 0x43, 0xc8, 0x25, 0x7a, 0x5e, 0x4e, 0xa3, 0x5a, 0x11, 0x0a, 0x42, 0xa3, 0x23, + 0x97, 0x1e, 0x1b, 0xff, 0x4c, 0x4f, 0x33, 0x22, 0x06, 0x3b, 0x67, 0x63, 0x50, 0x9d, 0x6a, 0x90, + 0xba, 0x28, 0x10, 0x1f, 0x9f, 0x09, 0xc4, 0x3b, 0xd3, 0xb3, 0x9d, 0x8b, 0xc6, 0x5f, 0x53, 0xd1, + 0x68, 0x00, 0x08, 0x2b, 0x44, 0x15, 0x92, 0x9a, 0xde, 0x9a, 0x8a, 0x1b, 0x0b, 0xf3, 0x93, 0x41, + 0xb2, 0x06, 0x79, 0x35, 0x3c, 0x49, 0xfd, 0xde, 0x9c, 0x34, 0xb9, 0x05, 0x8c, 0x72, 0xed, 0xf0, + 0x82, 0x1c, 0x95, 0x52, 0x1c, 0xa6, 0x8c, 0xed, 0xac, 0x1c, 0x66, 0xb9, 0x3d, 0x8c, 0xe9, 0x95, + 0xd8, 0x55, 0xbb, 0x06, 0xaf, 0x8c, 0x58, 0x92, 0x48, 0xff, 0x42, 0x83, 0x62, 0xaa, 0xa5, 0xa1, + 0x7b, 0xb0, 0x40, 0xe2, 0x98, 0x72, 0xcb, 0xb5, 0xe9, 0x0a, 0x3f, 0x97, 0x6e, 0x39, 0x38, 0x27, + 0x60, 0xd5, 0x11, 0x81, 0x29, 0x5d, 0x37, 0x1b, 0x81, 0x69, 0xfc, 0x5c, 0x83, 0x95, 0x86, 0x1b, + 0x51, 0x9b, 0x51, 0x27, 0xad, 0xd9, 0xfb, 0x30, 0x1f, 0x33, 0x12, 0xb1, 0x19, 0xf5, 0x4a, 0x40, + 0xe8, 0x3d, 0xc8, 0x50, 0xdf, 0x99, 0x51, 0x25, 0x0e, 0x31, 0xfe, 0x90, 0x85, 0x95, 0x31, 0x95, + 0x12, 0x7d, 0x08, 0x0b, 0xb2, 0xdf, 0x5f, 0x10, 0x8f, 0x0b, 0x5a, 0x75, 0x2e, 0xe9, 0xf6, 0x23, + 0xbc, 0x39, 0xdb, 0xb4, 0x90, 0xe0, 0x4d, 0xf4, 0x11, 0xe4, 0x3d, 0xd2, 0x3b, 0x70, 0xb8, 0x02, + 0xb3, 0xcd, 0x0a, 0x09, 0xac, 0x9a, 0x62, 0x30, 0xe5, 0xa8, 0x30, 0x1b, 0x83, 0xc9, 0xd3, 0xb2, + 0xef, 0x1f, 0xba, 0x9e, 0x47, 0x1d, 0xab, 0x2a, 0x27, 0x85, 0x29, 0x39, 0x0a, 0x0a, 0x58, 0x3d, + 0xc5, 0x62, 0xca, 0x51, 0x7f, 0x56, 0x16, 0x13, 0x7d, 0x1d, 0x72, 0x5d, 0xea, 0x3e, 0xee, 0x32, + 0xf9, 0x82, 0x26, 0x57, 0xe7, 0x66, 0xbc, 0xfc, 0x4b, 0xcc, 0x78, 0x26, 0x7c, 0x2d, 0xe9, 0x88, + 0x22, 0xa9, 0x38, 0xa5, 0x7c, 0x64, 0x41, 0x3c, 0x72, 0x45, 0x1c, 0xee, 0xc9, 0xb3, 0x6d, 0x71, + 0x64, 0xfc, 0x5a, 0x83, 0x57, 0x24, 0xe1, 0x56, 0xdf, 0xb7, 0x45, 0xcb, 0xdc, 0x81, 0x82, 0x1d, + 0xf4, 0xc2, 0xc0, 0x1f, 0xcd, 0xbf, 0x13, 0x3a, 0x75, 0x44, 0xcf, 0x70, 0xe0, 0x11, 0x03, 0xba, + 0x0b, 0x59, 0x61, 0x9a, 0x3e, 0x9b, 0x69, 0x02, 0x64, 0x7c, 0xa1, 0xf1, 0xfc, 0x3e, 0xc7, 0x8f, + 0x96, 0x93, 0xf7, 0x4e, 0xae, 0xdd, 0x62, 0xf2, 0x4e, 0x79, 0x07, 0xb4, 0x70, 0xb6, 0x5c, 0xd5, + 0x42, 0x0e, 0x7a, 0x32, 0x5b, 0x7e, 0x6a, 0x4f, 0x8c, 0x01, 0xe4, 0x31, 0x8d, 0x69, 0x74, 0x44, + 0x63, 0xf4, 0x5d, 0xd0, 0xa3, 0x19, 0xaf, 0x98, 0x1e, 0x55, 0x05, 0x6c, 0xc6, 0x9b, 0xa5, 0x47, + 0xa6, 0xf1, 0x53, 0x1d, 0xf2, 0x1d, 0x35, 0x52, 0x7d, 0x00, 0x99, 0xb0, 0xeb, 0xca, 0x67, 0xbf, + 0x3d, 0x85, 0x5b, 0x87, 0xc1, 0xe1, 0x38, 0x3e, 0xfd, 0xfa, 0x81, 0x6f, 0x53, 0x39, 0x81, 0x26, + 0x0b, 0x74, 0x4f, 0xd4, 0x31, 0x46, 0xa7, 0xe9, 0xf8, 0x4a, 0x13, 0xf1, 0xf2, 0x83, 0x13, 0x1c, + 0xbf, 0xb6, 0x91, 0x74, 0xce, 0x34, 0x9f, 0x4c, 0x94, 0x23, 0xf1, 0x10, 0x85, 0x0c, 0x3e, 0xe3, + 0x07, 0x31, 0xb5, 0x02, 0xdf, 0xe2, 0xd7, 0x47, 0xdc, 0xdc, 0x3c, 0x2e, 0x8a, 0xcd, 0x5d, 0x7f, + 0xcb, 0xf5, 0x3c, 0xa3, 0x0e, 0xa0, 0x9e, 0xde, 0x72, 0xb8, 0x29, 0xae, 0xef, 0xcb, 0x0f, 0x19, + 0x25, 0x9c, 0x2c, 0xd0, 0x75, 0x28, 0x12, 0x8f, 0x59, 0x07, 0xd4, 0xee, 0xde, 0x31, 0x7b, 0xc2, + 0xcc, 0x02, 0x06, 0xe2, 0xb1, 0x5a, 0xb2, 0x63, 0x7c, 0xa9, 0xc3, 0xe2, 0x29, 0x1b, 0xd0, 0xf7, + 0x94, 0xf5, 0x9c, 0x68, 0xc9, 0xbc, 0x3b, 0xb5, 0xf5, 0xa7, 0x57, 0x4d, 0xbf, 0xdf, 0x93, 0xfe, + 0x30, 0x7e, 0xaf, 0xc1, 0xb5, 0x73, 0x87, 0xe8, 0x5b, 0x70, 0xbd, 0xb3, 0xbb, 0xd7, 0xda, 0x6f, + 0xed, 0xb6, 0xad, 0xbd, 0xfd, 0xcd, 0xfd, 0xa6, 0xd5, 0x6c, 0x7f, 0xb6, 0x63, 0x7d, 0xd6, 0xde, + 0xeb, 0x34, 0xeb, 0xad, 0xad, 0x56, 0xb3, 0xb1, 0x3c, 0x87, 0xd6, 0xa0, 0x3c, 0x4e, 0x68, 0xb7, + 0xd3, 0x6c, 0x37, 0x1b, 0xcb, 0xda, 0x45, 0xe7, 0xf5, 0x4f, 0x77, 0xf7, 0x9a, 0x8d, 0x65, 0x1d, + 0xbd, 0x0e, 0xaf, 0x8d, 0x3b, 0x7f, 0xd8, 0xda, 0xdf, 0x6e, 0xe0, 0xcd, 0x87, 0xed, 0xe5, 0x0c, + 0xba, 0x0e, 0xdf, 0x1c, 0x4f, 0xb1, 0xd9, 0xda, 0x69, 0x36, 0x96, 0xb3, 0xfc, 0xfe, 0xcd, 0x7f, + 0x1a, 0xb6, 0x0f, 0x19, 0xba, 0x0f, 0x45, 0x35, 0xcd, 0x5b, 0xae, 0x73, 0x41, 0x9f, 0x1b, 0xeb, + 0xa1, 0x96, 0x83, 0x21, 0x1c, 0x45, 0x6b, 0x98, 0x62, 0xfa, 0xe5, 0x52, 0xcc, 0xe8, 0x40, 0x49, + 0xed, 0xef, 0x86, 0xd4, 0xe7, 0x29, 0x37, 0x7c, 0xef, 0xd0, 0x26, 0xa7, 0x9c, 0xc2, 0x8e, 0xde, + 0x4e, 0x8c, 0xef, 0x8f, 0x12, 0xa1, 0xce, 0xb3, 0xec, 0xca, 0x8c, 0x35, 0xfe, 0xa8, 0xc1, 0xb2, + 0x3a, 0x7a, 0xe8, 0xb2, 0xae, 0x13, 0x91, 0xe3, 0xab, 0x73, 0x25, 0x81, 0x15, 0x75, 0x6d, 0xd2, + 0xdf, 0x56, 0xf4, 0x4b, 0x7e, 0x5b, 0x41, 0x8a, 0x6c, 0xb4, 0x67, 0xfc, 0x49, 0x83, 0x95, 0xa1, + 0xc7, 0xe8, 0x31, 0x89, 0x9c, 0x64, 0x0a, 0xbd, 0x32, 0x1b, 0x2c, 0x40, 0x91, 0xe0, 0xbd, 0x12, + 0x13, 0xae, 0x49, 0xae, 0x94, 0x05, 0xbf, 0x92, 0xaf, 0xbe, 0xcd, 0x01, 0xb5, 0xfb, 0xa2, 0x72, + 0xde, 0x87, 0x1c, 0x8b, 0x88, 0x4d, 0xe3, 0x55, 0xed, 0x46, 0x66, 0x52, 0x77, 0x3b, 0x05, 0xe5, + 0xa5, 0xd4, 0xa6, 0x58, 0xc2, 0xd1, 0x06, 0x2f, 0x3c, 0x61, 0x5f, 0xa9, 0x7b, 0x73, 0x82, 0xba, + 0x0f, 0x88, 0xd7, 0xa7, 0x38, 0x81, 0xa0, 0xf7, 0x21, 0x97, 0x4c, 0xd2, 0xb2, 0xd4, 0x4e, 0x07, + 0x96, 0x98, 0x72, 0x1d, 0xe6, 0x85, 0x2a, 0x5c, 0x85, 0x23, 0x7e, 0x22, 0x4d, 0x99, 0x52, 0x05, + 0x01, 0x31, 0xfe, 0xae, 0xc1, 0xab, 0x67, 0x93, 0x53, 0x7c, 0x1b, 0x48, 0x17, 0x71, 0xed, 0x52, + 0x45, 0xfc, 0x4c, 0x7a, 0xe8, 0x97, 0x4e, 0x0f, 0x35, 0x3d, 0x64, 0x2e, 0x33, 0x3d, 0xfc, 0x00, + 0xbe, 0x31, 0x26, 0x77, 0xaf, 0xc6, 0xc4, 0xda, 0x97, 0xfa, 0x9f, 0x9f, 0xad, 0x69, 0x4f, 0x9f, + 0xad, 0x69, 0xff, 0x78, 0xb6, 0xa6, 0xfd, 0xf2, 0xf9, 0xda, 0xdc, 0xd3, 0xe7, 0x6b, 0x73, 0x7f, + 0x7b, 0xbe, 0x36, 0x07, 0x6b, 0x76, 0xd0, 0x7b, 0x01, 0x5b, 0x2d, 0xdf, 0xa0, 0x83, 0x4e, 0x14, + 0xb0, 0xa0, 0xa3, 0x7d, 0x8e, 0x1f, 0xbb, 0xac, 0xdb, 0x3f, 0xa8, 0xd8, 0x41, 0x6f, 0xdd, 0x0e, + 0xe2, 0x5e, 0x10, 0xaf, 0x47, 0xd4, 0x23, 0x27, 0x34, 0x5a, 0x3f, 0x32, 0x87, 0x3f, 0xed, 0x2e, + 0x71, 0xfd, 0x78, 0xfd, 0xe2, 0x3f, 0x51, 0xee, 0x3a, 0x74, 0xa0, 0x7e, 0xff, 0x56, 0xcf, 0x74, + 0xea, 0x8d, 0xdf, 0xe9, 0xe5, 0x8e, 0x52, 0xa1, 0xce, 0x55, 0x68, 0xd0, 0x41, 0xe5, 0x81, 0x14, + 0xf9, 0x6a, 0x74, 0xf8, 0x88, 0x1f, 0x3e, 0x6a, 0xd0, 0xc1, 0x23, 0x75, 0xf8, 0x4c, 0x7f, 0xe3, + 0xe2, 0xc3, 0x47, 0xf7, 0x3b, 0xb5, 0x1d, 0xca, 0x88, 0x43, 0x18, 0xf9, 0x97, 0xfe, 0x9a, 0x12, + 0xdc, 0xd8, 0xe0, 0x92, 0x1b, 0x1b, 0x0d, 0x3a, 0xd8, 0xd8, 0x50, 0xb2, 0x07, 0x39, 0xf1, 0x77, + 0xcc, 0x9d, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x37, 0xdb, 0x43, 0xeb, 0xfe, 0x19, 0x00, 0x00, } func (m *Swap) Marshal() (dAtA []byte, err error) { @@ -2694,41 +2692,6 @@ func (m *SwapPlaintext) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MockFlowCiphertext) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MockFlowCiphertext) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MockFlowCiphertext) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Value != nil { - { - size, err := m.Value.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintDex(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - func (m *SwapPlan) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2749,6 +2712,20 @@ func (m *SwapPlan) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.ProofBlindingS) > 0 { + i -= len(m.ProofBlindingS) + copy(dAtA[i:], m.ProofBlindingS) + i = encodeVarintDex(dAtA, i, uint64(len(m.ProofBlindingS))) + i-- + dAtA[i] = 0x22 + } + if len(m.ProofBlindingR) > 0 { + i -= len(m.ProofBlindingR) + copy(dAtA[i:], m.ProofBlindingR) + i = encodeVarintDex(dAtA, i, uint64(len(m.ProofBlindingR))) + i-- + dAtA[i] = 0x1a + } if len(m.FeeBlinding) > 0 { i -= len(m.FeeBlinding) copy(dAtA[i:], m.FeeBlinding) @@ -2791,6 +2768,20 @@ func (m *SwapClaimPlan) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.ProofBlindingS) > 0 { + i -= len(m.ProofBlindingS) + copy(dAtA[i:], m.ProofBlindingS) + i = encodeVarintDex(dAtA, i, uint64(len(m.ProofBlindingS))) + i-- + dAtA[i] = 0x32 + } + if len(m.ProofBlindingR) > 0 { + i -= len(m.ProofBlindingR) + copy(dAtA[i:], m.ProofBlindingR) + i = encodeVarintDex(dAtA, i, uint64(len(m.ProofBlindingR))) + i-- + dAtA[i] = 0x2a + } if m.EpochDuration != 0 { i = encodeVarintDex(dAtA, i, uint64(m.EpochDuration)) i-- @@ -3266,8 +3257,8 @@ func (m *BatchSwapOutputData) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.EpochHeight != 0 { - i = encodeVarintDex(dAtA, i, uint64(m.EpochHeight)) + if m.EpochStartingHeight != 0 { + i = encodeVarintDex(dAtA, i, uint64(m.EpochStartingHeight)) i-- dAtA[i] = 0x48 } @@ -3529,6 +3520,16 @@ func (m *Position) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.CloseOnFill { + i-- + if m.CloseOnFill { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x28 + } if m.Reserves != nil { { size, err := m.Reserves.MarshalToSizedBuffer(dAtA[:i]) @@ -4199,19 +4200,6 @@ func (m *SwapPlaintext) Size() (n int) { return n } -func (m *MockFlowCiphertext) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Value != nil { - l = m.Value.Size() - n += 1 + l + sovDex(uint64(l)) - } - return n -} - func (m *SwapPlan) Size() (n int) { if m == nil { return 0 @@ -4226,6 +4214,14 @@ func (m *SwapPlan) Size() (n int) { if l > 0 { n += 1 + l + sovDex(uint64(l)) } + l = len(m.ProofBlindingR) + if l > 0 { + n += 1 + l + sovDex(uint64(l)) + } + l = len(m.ProofBlindingS) + if l > 0 { + n += 1 + l + sovDex(uint64(l)) + } return n } @@ -4249,6 +4245,14 @@ func (m *SwapClaimPlan) Size() (n int) { if m.EpochDuration != 0 { n += 1 + sovDex(uint64(m.EpochDuration)) } + l = len(m.ProofBlindingR) + if l > 0 { + n += 1 + l + sovDex(uint64(l)) + } + l = len(m.ProofBlindingS) + if l > 0 { + n += 1 + l + sovDex(uint64(l)) + } return n } @@ -4459,8 +4463,8 @@ func (m *BatchSwapOutputData) Size() (n int) { l = m.TradingPair.Size() n += 1 + l + sovDex(uint64(l)) } - if m.EpochHeight != 0 { - n += 1 + sovDex(uint64(m.EpochHeight)) + if m.EpochStartingHeight != 0 { + n += 1 + sovDex(uint64(m.EpochStartingHeight)) } return n } @@ -4541,6 +4545,9 @@ func (m *Position) Size() (n int) { l = m.Reserves.Size() n += 1 + l + sovDex(uint64(l)) } + if m.CloseOnFill { + n += 2 + } return n } @@ -5833,7 +5840,7 @@ func (m *SwapPlaintext) Unmarshal(dAtA []byte) error { } return nil } -func (m *MockFlowCiphertext) Unmarshal(dAtA []byte) error { +func (m *SwapPlan) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5856,15 +5863,15 @@ func (m *MockFlowCiphertext) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MockFlowCiphertext: wiretype end group for non-group") + return fmt.Errorf("proto: SwapPlan: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MockFlowCiphertext: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SwapPlan: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SwapPlaintext", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5891,68 +5898,52 @@ func (m *MockFlowCiphertext) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Value == nil { - m.Value = &v1alpha1.Amount{} + if m.SwapPlaintext == nil { + m.SwapPlaintext = &SwapPlaintext{} } - if err := m.Value.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SwapPlaintext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDex(dAtA[iNdEx:]) - if err != nil { - return err + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FeeBlinding", wireType) } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthDex + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowDex + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF + if byteLen < 0 { + return ErrInvalidLengthDex } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SwapPlan) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDex + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthDex } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break + m.FeeBlinding = append(m.FeeBlinding[:0], dAtA[iNdEx:postIndex]...) + if m.FeeBlinding == nil { + m.FeeBlinding = []byte{} } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SwapPlan: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SwapPlan: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + iNdEx = postIndex + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SwapPlaintext", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ProofBlindingR", wireType) } - var msglen int + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowDex @@ -5962,31 +5953,29 @@ func (m *SwapPlan) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + if byteLen < 0 { return ErrInvalidLengthDex } - postIndex := iNdEx + msglen + postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthDex } if postIndex > l { return io.ErrUnexpectedEOF } - if m.SwapPlaintext == nil { - m.SwapPlaintext = &SwapPlaintext{} - } - if err := m.SwapPlaintext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + m.ProofBlindingR = append(m.ProofBlindingR[:0], dAtA[iNdEx:postIndex]...) + if m.ProofBlindingR == nil { + m.ProofBlindingR = []byte{} } iNdEx = postIndex - case 2: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FeeBlinding", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ProofBlindingS", wireType) } var byteLen int for shift := uint(0); ; shift += 7 { @@ -6013,9 +6002,9 @@ func (m *SwapPlan) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.FeeBlinding = append(m.FeeBlinding[:0], dAtA[iNdEx:postIndex]...) - if m.FeeBlinding == nil { - m.FeeBlinding = []byte{} + m.ProofBlindingS = append(m.ProofBlindingS[:0], dAtA[iNdEx:postIndex]...) + if m.ProofBlindingS == nil { + m.ProofBlindingS = []byte{} } iNdEx = postIndex default: @@ -6178,6 +6167,74 @@ func (m *SwapClaimPlan) Unmarshal(dAtA []byte) error { break } } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofBlindingR", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowDex + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthDex + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthDex + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofBlindingR = append(m.ProofBlindingR[:0], dAtA[iNdEx:postIndex]...) + if m.ProofBlindingR == nil { + m.ProofBlindingR = []byte{} + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofBlindingS", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowDex + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthDex + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthDex + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofBlindingS = append(m.ProofBlindingS[:0], dAtA[iNdEx:postIndex]...) + if m.ProofBlindingS == nil { + m.ProofBlindingS = []byte{} + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipDex(dAtA[iNdEx:]) @@ -7437,9 +7494,9 @@ func (m *BatchSwapOutputData) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 9: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field EpochHeight", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EpochStartingHeight", wireType) } - m.EpochHeight = 0 + m.EpochStartingHeight = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowDex @@ -7449,7 +7506,7 @@ func (m *BatchSwapOutputData) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.EpochHeight |= uint64(b&0x7F) << shift + m.EpochStartingHeight |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -8031,6 +8088,26 @@ func (m *Position) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CloseOnFill", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowDex + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.CloseOnFill = bool(v != 0) default: iNdEx = preIndex skippy, err := skipDex(dAtA[iNdEx:]) diff --git a/relayer/chains/penumbra/core/governance/v1alpha1/governance.pb.go b/relayer/chains/penumbra/core/governance/v1alpha1/governance.pb.go index 51a916c78..80977b8d4 100644 --- a/relayer/chains/penumbra/core/governance/v1alpha1/governance.pb.go +++ b/relayer/chains/penumbra/core/governance/v1alpha1/governance.pb.go @@ -531,6 +531,10 @@ type DelegatorVotePlan struct { UnbondedAmount *v1alpha1.Amount `protobuf:"bytes,6,opt,name=unbonded_amount,json=unbondedAmount,proto3" json:"unbonded_amount,omitempty"` // The randomizer to use for the proof of spend capability. Randomizer []byte `protobuf:"bytes,7,opt,name=randomizer,proto3" json:"randomizer,omitempty"` + // The first blinding factor to use for the ZK delegator vote proof. + ProofBlindingR []byte `protobuf:"bytes,8,opt,name=proof_blinding_r,json=proofBlindingR,proto3" json:"proof_blinding_r,omitempty"` + // The second blinding factor to use for the ZK delegator vote proof. + ProofBlindingS []byte `protobuf:"bytes,9,opt,name=proof_blinding_s,json=proofBlindingS,proto3" json:"proof_blinding_s,omitempty"` } func (m *DelegatorVotePlan) Reset() { *m = DelegatorVotePlan{} } @@ -615,6 +619,20 @@ func (m *DelegatorVotePlan) GetRandomizer() []byte { return nil } +func (m *DelegatorVotePlan) GetProofBlindingR() []byte { + if m != nil { + return m.ProofBlindingR + } + return nil +} + +func (m *DelegatorVotePlan) GetProofBlindingS() []byte { + if m != nil { + return m.ProofBlindingS + } + return nil +} + type DaoDeposit struct { // The value to deposit into the DAO. Value *v1alpha1.Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` @@ -1811,102 +1829,104 @@ func init() { } var fileDescriptor_1bc89f5bf0aed114 = []byte{ - // 1512 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0xcd, 0x6f, 0x1b, 0x45, - 0x14, 0xf7, 0x3a, 0x8e, 0x3f, 0x5e, 0x12, 0xc7, 0x1d, 0x42, 0x65, 0x0c, 0x44, 0xe9, 0xb6, 0x85, - 0xa8, 0x50, 0x9b, 0xa6, 0xa0, 0x52, 0xf7, 0x40, 0x63, 0xe7, 0x53, 0x6d, 0x13, 0x77, 0x1d, 0x52, - 0x28, 0x91, 0x96, 0xb1, 0x77, 0x62, 0xaf, 0xb2, 0x9e, 0x59, 0xed, 0x8e, 0x13, 0x99, 0xbf, 0x00, - 0x6e, 0x95, 0xf8, 0x0f, 0x90, 0x10, 0x12, 0xff, 0x03, 0x77, 0x84, 0x04, 0xea, 0xb1, 0xdc, 0x50, - 0x72, 0xe3, 0xc8, 0x95, 0x0b, 0x9a, 0xdd, 0xd9, 0x8f, 0x24, 0xa5, 0xae, 0x13, 0x2a, 0x6e, 0xfb, - 0xde, 0xbe, 0xdf, 0xef, 0x7d, 0xcc, 0x9b, 0x99, 0xb7, 0x0b, 0x0b, 0x36, 0xa1, 0xfd, 0x5e, 0xcb, - 0xc1, 0x95, 0x36, 0x73, 0x48, 0xa5, 0xc3, 0xf6, 0x89, 0x43, 0x31, 0x6d, 0x93, 0xca, 0xfe, 0x0d, - 0x6c, 0xd9, 0x5d, 0x7c, 0x23, 0xa6, 0x2b, 0xdb, 0x0e, 0xe3, 0x0c, 0x5d, 0x0a, 0x30, 0x65, 0x81, - 0x29, 0xc7, 0xde, 0x07, 0x98, 0xd2, 0x1b, 0x1d, 0xc6, 0x3a, 0x16, 0xa9, 0x78, 0x80, 0x56, 0x7f, - 0xb7, 0x82, 0xe9, 0xc0, 0x47, 0x97, 0xae, 0x1d, 0xf7, 0xd8, 0x76, 0x06, 0x36, 0x67, 0x91, 0x37, - 0x5f, 0x96, 0xb6, 0xf3, 0x27, 0x6c, 0xbb, 0xd8, 0xa4, 0x31, 0x53, 0x21, 0xfa, 0x96, 0xea, 0x0f, - 0x0a, 0xe4, 0x1b, 0x0e, 0xb3, 0x99, 0x8b, 0xad, 0x66, 0xbf, 0xd5, 0x33, 0x39, 0x5a, 0x85, 0xac, - 0x2d, 0x35, 0x45, 0x65, 0x4e, 0x99, 0x9f, 0x58, 0x78, 0xaf, 0x3c, 0x34, 0xf2, 0x72, 0x40, 0xa2, - 0x85, 0x60, 0x74, 0x1f, 0xf2, 0x06, 0xb1, 0x99, 0x6b, 0x72, 0x1d, 0xf7, 0x58, 0x9f, 0xf2, 0xe2, - 0x98, 0x47, 0x77, 0xf5, 0x04, 0x9d, 0x0c, 0x3d, 0xa4, 0x5a, 0xf4, 0x8c, 0xb5, 0x29, 0x09, 0xf6, - 0x45, 0x75, 0x05, 0x0a, 0x81, 0x8f, 0x47, 0x26, 0xef, 0x1a, 0x0e, 0x3e, 0x40, 0xa5, 0x13, 0xa1, - 0xa6, 0x62, 0xde, 0x2f, 0x42, 0xda, 0x21, 0xd8, 0x65, 0xb4, 0x98, 0x9c, 0x53, 0xe6, 0x73, 0x9a, - 0x94, 0xd4, 0xdf, 0x14, 0x98, 0x09, 0x88, 0x96, 0x7c, 0x0f, 0x75, 0x0b, 0x9b, 0xbd, 0x17, 0x92, - 0x9d, 0x4e, 0x25, 0x79, 0xf6, 0x54, 0xd0, 0x7d, 0xc8, 0xb0, 0x3e, 0x6f, 0xb3, 0x1e, 0x91, 0x15, - 0x59, 0x18, 0xa1, 0xc0, 0x9b, 0x3e, 0x52, 0x0b, 0x28, 0xc4, 0x12, 0x4e, 0x6d, 0x63, 0xcb, 0x34, - 0x30, 0x67, 0xce, 0x36, 0xe3, 0x04, 0xad, 0x41, 0xaa, 0xc5, 0x8c, 0x81, 0x5c, 0xbd, 0x0f, 0x5f, - 0x82, 0xfc, 0x18, 0xbe, 0xc6, 0x8c, 0x81, 0xe6, 0x31, 0xa0, 0xfb, 0x90, 0xc5, 0x7d, 0xde, 0xd5, - 0x5d, 0xb3, 0x23, 0x33, 0xbe, 0x31, 0x24, 0xe3, 0xa6, 0x4d, 0xa8, 0xb1, 0xd8, 0xe7, 0xdd, 0xa6, - 0xd9, 0xa1, 0x98, 0xf7, 0x1d, 0xa2, 0x65, 0xb0, 0x2f, 0xaa, 0x4f, 0x92, 0x70, 0xe1, 0x94, 0xa7, - 0x17, 0xd6, 0xfd, 0x0e, 0xa4, 0xf6, 0x19, 0x27, 0xd2, 0xf7, 0xbb, 0x2f, 0x93, 0x09, 0xe3, 0x44, - 0xf3, 0x40, 0xe8, 0x01, 0x4c, 0x9a, 0x06, 0xa1, 0xdc, 0xe4, 0x03, 0x7d, 0x8f, 0x0c, 0x64, 0xad, - 0xaf, 0x0d, 0x49, 0x60, 0x5d, 0x42, 0xee, 0x91, 0x81, 0x36, 0x61, 0x46, 0x02, 0x6a, 0x42, 0x3e, - 0x72, 0xe8, 0x11, 0xa6, 0x3c, 0xc2, 0xf7, 0x87, 0x10, 0xae, 0x86, 0x20, 0x41, 0x39, 0xd5, 0x89, - 0x8b, 0xea, 0x5f, 0x0a, 0x4c, 0x2d, 0x11, 0x8b, 0x74, 0xce, 0xb1, 0x78, 0xc7, 0xf0, 0xaf, 0x6a, - 0xf1, 0xd0, 0x3a, 0x8c, 0xdb, 0x0e, 0x63, 0xbb, 0xb2, 0x8c, 0x37, 0x87, 0x50, 0x3d, 0xbe, 0x77, - 0x2c, 0xac, 0x86, 0x80, 0x6a, 0x3e, 0x83, 0xfa, 0x6b, 0x12, 0x2e, 0x9c, 0x0a, 0xfa, 0x85, 0x7d, - 0x70, 0x15, 0xf2, 0x2e, 0xc7, 0x0e, 0xd7, 0xbd, 0x6d, 0x64, 0xca, 0x4d, 0x9d, 0xd2, 0xa6, 0x3c, - 0x6d, 0x43, 0x2a, 0xc3, 0x76, 0x19, 0x3b, 0x4b, 0xbb, 0x54, 0x61, 0x7c, 0x1f, 0x5b, 0x7d, 0x22, - 0x97, 0xf5, 0xca, 0x90, 0x04, 0xb7, 0x85, 0xad, 0xe6, 0x43, 0xd0, 0x06, 0x4c, 0xf7, 0x69, 0x8b, - 0x51, 0x83, 0x18, 0xc1, 0x01, 0x31, 0x3e, 0xca, 0x01, 0x91, 0x0f, 0xd0, 0xf2, 0x84, 0x78, 0x0b, - 0x72, 0xb4, 0x6f, 0x59, 0xe6, 0xae, 0x49, 0x9c, 0x62, 0x7a, 0x4e, 0x99, 0x9f, 0xd4, 0x22, 0x05, - 0xca, 0x43, 0xd2, 0xd9, 0x2b, 0x66, 0x3c, 0x75, 0xd2, 0xd9, 0x53, 0xff, 0x3e, 0x59, 0xcf, 0x86, - 0x85, 0xe9, 0xff, 0x5e, 0xcf, 0x25, 0x98, 0x70, 0x39, 0xde, 0x23, 0x86, 0x4e, 0x05, 0x87, 0x5f, - 0xd5, 0xcb, 0x43, 0xea, 0xb1, 0x21, 0xf0, 0xe0, 0xe3, 0xc4, 0x33, 0xfa, 0x00, 0x66, 0x62, 0x2c, - 0x51, 0xbc, 0xe3, 0x5e, 0xbc, 0x28, 0xb2, 0x0c, 0x83, 0x7e, 0xce, 0x5a, 0xa4, 0xcf, 0xb3, 0x16, - 0xb3, 0x00, 0x0e, 0xa6, 0x06, 0xeb, 0x99, 0x5f, 0x11, 0x47, 0x56, 0x3d, 0xa6, 0x51, 0xd7, 0x00, - 0x96, 0x30, 0x93, 0x57, 0x49, 0xd4, 0x45, 0xca, 0xc8, 0x5d, 0xa4, 0xae, 0x40, 0x76, 0x09, 0x33, - 0x6f, 0x13, 0x9e, 0x8b, 0xe7, 0x1b, 0x05, 0x72, 0x4b, 0x98, 0x6d, 0xf6, 0xb9, 0xdd, 0x3f, 0x57, - 0x44, 0xe8, 0x2e, 0x64, 0xb0, 0x61, 0x38, 0xc4, 0x75, 0xe5, 0x09, 0xf2, 0xce, 0xb0, 0x1a, 0xfa, - 0xd6, 0x5a, 0x00, 0x53, 0xbf, 0x55, 0x20, 0xe5, 0x9d, 0x6b, 0x77, 0x65, 0x2f, 0x89, 0x28, 0xf2, - 0xa7, 0x0e, 0xcd, 0x7f, 0xeb, 0xa5, 0x58, 0x43, 0xa9, 0xeb, 0x92, 0x69, 0x06, 0x0a, 0xdb, 0x9b, - 0x5b, 0xcb, 0xfa, 0xa7, 0x1b, 0xcd, 0xc6, 0x72, 0x7d, 0x7d, 0x65, 0x7d, 0x79, 0xa9, 0x90, 0x40, - 0x05, 0x98, 0xf4, 0xb4, 0x8b, 0xb5, 0xe6, 0xd6, 0xe2, 0xfa, 0x46, 0x41, 0x41, 0x93, 0x90, 0xf5, - 0x34, 0x9f, 0x2f, 0x37, 0x0b, 0x49, 0x34, 0x01, 0x19, 0x4f, 0xda, 0xd8, 0x2c, 0x8c, 0xa9, 0xcf, - 0x52, 0x30, 0x15, 0x8e, 0x3d, 0x1c, 0x73, 0x82, 0x1e, 0x42, 0x7a, 0x9f, 0x71, 0x93, 0x06, 0x47, - 0xe5, 0xad, 0x11, 0xae, 0x64, 0x8f, 0x41, 0x44, 0x6a, 0xd2, 0xce, 0x5a, 0x42, 0x93, 0x44, 0xe8, - 0x31, 0xe4, 0x0e, 0xe4, 0xa4, 0x42, 0xe5, 0x16, 0xaa, 0x8e, 0xcc, 0x1a, 0xcc, 0x3a, 0x74, 0x2d, - 0xa1, 0x45, 0x74, 0xe8, 0x11, 0x64, 0x77, 0x4d, 0x6a, 0xba, 0x5d, 0x62, 0xc8, 0x9d, 0x75, 0x7b, - 0x64, 0xea, 0x15, 0x49, 0xb0, 0x96, 0xd0, 0x42, 0x32, 0xb4, 0x05, 0x99, 0xb6, 0x18, 0x87, 0x88, - 0x21, 0x4f, 0xb0, 0x8f, 0x47, 0xe6, 0xad, 0xfb, 0xf8, 0xb5, 0x84, 0x16, 0x50, 0x95, 0xb2, 0x90, - 0xf6, 0xcb, 0x53, 0xba, 0x0c, 0xb9, 0x30, 0xa5, 0xd8, 0x8c, 0xa6, 0xc4, 0x67, 0xb4, 0xd2, 0x67, - 0x90, 0x0d, 0x82, 0x8b, 0x0f, 0x4b, 0xca, 0xb9, 0x87, 0xa5, 0xd2, 0x23, 0xc8, 0xc8, 0xf0, 0xfe, - 0x5b, 0xe2, 0x5a, 0x06, 0xc6, 0x5d, 0x91, 0xbd, 0x7a, 0x34, 0x06, 0xd3, 0x27, 0xac, 0x50, 0x13, - 0xd2, 0x36, 0x76, 0x5d, 0x62, 0x48, 0x4f, 0xb7, 0x47, 0xf7, 0x54, 0x6e, 0x78, 0x04, 0xa2, 0xbd, - 0x7c, 0x2a, 0x41, 0xba, 0x8b, 0x4d, 0x8b, 0x18, 0xb2, 0x63, 0xcf, 0x42, 0xba, 0xe2, 0x11, 0x08, - 0x52, 0x9f, 0x0a, 0x6d, 0x43, 0xc6, 0xb5, 0xb0, 0xd7, 0x56, 0xa3, 0x77, 0x6c, 0xc0, 0xda, 0xf4, - 0x19, 0x44, 0x03, 0x48, 0x32, 0xd1, 0x00, 0x7e, 0x02, 0xa5, 0x2f, 0x20, 0xed, 0x7b, 0x45, 0xb7, - 0xe0, 0xf5, 0xb0, 0xa1, 0x75, 0xf1, 0xa4, 0xc7, 0x9b, 0x61, 0x2d, 0xa1, 0xbd, 0x16, 0xbe, 0x16, - 0x2d, 0xa3, 0x79, 0x2f, 0xbf, 0x56, 0x94, 0x5a, 0x11, 0x2e, 0xea, 0xcf, 0x45, 0x96, 0x76, 0x20, - 0x23, 0x9d, 0xbf, 0x02, 0xf6, 0x5a, 0x2e, 0xec, 0x18, 0xb5, 0x0e, 0xe3, 0x5b, 0xd8, 0xb2, 0x06, - 0xa8, 0x00, 0x63, 0x03, 0xe2, 0xca, 0x0b, 0x56, 0x3c, 0x8a, 0xdb, 0x99, 0x32, 0x79, 0x9f, 0x26, - 0x29, 0x43, 0x45, 0xc8, 0xe0, 0x96, 0xcb, 0xb1, 0xe9, 0x1f, 0x02, 0x29, 0x2d, 0x10, 0xd5, 0xef, - 0xd3, 0x90, 0x0d, 0x6a, 0x27, 0x60, 0xa6, 0xbf, 0x97, 0x53, 0x5a, 0xd2, 0x34, 0xd0, 0x0c, 0x8c, - 0x73, 0x93, 0x5b, 0x44, 0x6e, 0x0d, 0x5f, 0x40, 0x73, 0x30, 0x61, 0x10, 0xb7, 0xed, 0x98, 0x76, - 0x78, 0x6b, 0xe7, 0xb4, 0xb8, 0x0a, 0x35, 0x21, 0xe7, 0x8a, 0xe9, 0xcd, 0x12, 0x67, 0x99, 0xbf, - 0x85, 0x3f, 0x1a, 0x61, 0x0d, 0xcb, 0xcd, 0x00, 0xac, 0x45, 0x3c, 0x82, 0x94, 0xf4, 0x88, 0xd3, - 0x21, 0xb4, 0x3d, 0x90, 0xb7, 0xe9, 0x48, 0xa4, 0xcb, 0x01, 0x58, 0x8b, 0x78, 0xd0, 0x2e, 0x14, - 0x6c, 0xec, 0xe0, 0x1e, 0xe1, 0xc4, 0xd1, 0xdb, 0x5d, 0x4c, 0x3b, 0xc4, 0xbb, 0x5e, 0x27, 0x16, - 0xee, 0x8c, 0xc2, 0xdd, 0x08, 0x38, 0xea, 0x1e, 0x85, 0x36, 0x6d, 0x1f, 0x57, 0xa0, 0x87, 0x90, - 0x33, 0x30, 0xd3, 0x5d, 0x71, 0xaf, 0x16, 0xb3, 0x2f, 0x3d, 0x56, 0x87, 0x0e, 0x82, 0x3b, 0x59, - 0xcb, 0x1a, 0xf2, 0xa9, 0x74, 0x13, 0x72, 0x61, 0x9d, 0xd0, 0x9b, 0x90, 0x6e, 0xb3, 0x5e, 0xcf, - 0xe4, 0x61, 0x6b, 0x49, 0x59, 0x74, 0x53, 0x0e, 0x32, 0xba, 0x2f, 0x95, 0xae, 0x41, 0x2e, 0xac, - 0x03, 0x7a, 0x1b, 0xa0, 0x8b, 0x2d, 0xae, 0x7b, 0x1f, 0xe3, 0x1e, 0x30, 0xab, 0xe5, 0x84, 0xa6, - 0x2e, 0x14, 0xa5, 0x9f, 0x14, 0x98, 0x3e, 0x91, 0x18, 0xda, 0x82, 0x3c, 0xb3, 0x0c, 0x3d, 0x4c, - 0xcf, 0x95, 0xa7, 0xc9, 0xf5, 0x93, 0x77, 0xb2, 0xf7, 0x7d, 0x1f, 0xe6, 0xe1, 0x11, 0x86, 0x5c, - 0xae, 0x36, 0xc5, 0x2c, 0x23, 0x12, 0x05, 0x2b, 0x25, 0x07, 0x71, 0xd6, 0xe4, 0x99, 0x58, 0x29, - 0x39, 0x88, 0xc4, 0xd2, 0xbd, 0xd8, 0x28, 0xf3, 0x09, 0x14, 0xb8, 0x83, 0xa9, 0x8b, 0xdb, 0xa2, - 0x41, 0x75, 0xdb, 0xc2, 0x54, 0xfa, 0x98, 0x29, 0xfb, 0xff, 0x3b, 0xca, 0xc1, 0xff, 0x8e, 0xf2, - 0x22, 0x1d, 0x68, 0xd3, 0x31, 0x6b, 0x31, 0xc9, 0xd6, 0x7e, 0x4f, 0xfe, 0x7c, 0x38, 0xab, 0x3c, - 0x3d, 0x9c, 0x55, 0xfe, 0x38, 0x9c, 0x55, 0x9e, 0x1c, 0xcd, 0x26, 0x9e, 0x1e, 0xcd, 0x26, 0x9e, - 0x1d, 0xcd, 0x26, 0xe0, 0x6a, 0x9b, 0xf5, 0x86, 0xaf, 0x65, 0x6d, 0x3a, 0xfa, 0x08, 0x6b, 0x08, - 0x57, 0x0d, 0xe5, 0xf1, 0x97, 0x1d, 0x93, 0x77, 0xfb, 0xad, 0x72, 0x9b, 0xf5, 0x2a, 0x6d, 0xe6, - 0xf6, 0x98, 0x5b, 0x71, 0x88, 0x85, 0x07, 0xc4, 0xa9, 0xec, 0x2f, 0x84, 0x8f, 0x5e, 0xd6, 0x6e, - 0x65, 0xe8, 0xdf, 0x9e, 0x3b, 0x91, 0x2e, 0x50, 0x7d, 0x97, 0x1c, 0x6b, 0xd4, 0x57, 0x7f, 0x4c, - 0x5e, 0x6a, 0x04, 0xe1, 0xd5, 0x45, 0x78, 0x51, 0x24, 0xe5, 0x6d, 0x69, 0xf9, 0x4b, 0x64, 0xb3, - 0x23, 0x6c, 0x76, 0x22, 0x9b, 0x9d, 0xc0, 0xe6, 0x30, 0x79, 0x7d, 0xa8, 0xcd, 0xce, 0x6a, 0xa3, - 0xf6, 0x80, 0x70, 0x6c, 0x60, 0x8e, 0xff, 0x4c, 0x5e, 0x09, 0xec, 0xab, 0x55, 0x01, 0xa8, 0x56, - 0x23, 0x44, 0xb5, 0x1a, 0x40, 0x5a, 0x69, 0xaf, 0xf4, 0x37, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, - 0x57, 0x45, 0x3e, 0x65, 0xd1, 0x12, 0x00, 0x00, + // 1546 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x5d, 0x6f, 0x1b, 0x45, + 0x17, 0xf6, 0x3a, 0x8e, 0x3f, 0x4e, 0x12, 0xc7, 0x9d, 0x37, 0x6f, 0xe5, 0xd7, 0x2f, 0x44, 0xa9, + 0xdb, 0x42, 0x54, 0xa8, 0x4d, 0x53, 0x50, 0xa9, 0x7b, 0x41, 0x63, 0xe7, 0x53, 0x6d, 0x13, 0x77, + 0x1d, 0x52, 0x28, 0x91, 0x96, 0xb1, 0x77, 0x62, 0xaf, 0xb2, 0x9e, 0xb1, 0x76, 0xc7, 0x89, 0xcc, + 0x2f, 0x80, 0xbb, 0x4a, 0xfc, 0x03, 0x24, 0x84, 0xc4, 0x7f, 0xe0, 0x1e, 0x21, 0x01, 0xbd, 0x2c, + 0x77, 0x28, 0xb9, 0xe3, 0x92, 0x5f, 0x80, 0x66, 0x76, 0xf6, 0x23, 0x1f, 0xd4, 0x75, 0x42, 0xc5, + 0xdd, 0x9c, 0xe3, 0xf3, 0x3c, 0xe7, 0x63, 0xce, 0xcc, 0x1c, 0x2f, 0x2c, 0xf4, 0x08, 0xed, 0x77, + 0x9b, 0x0e, 0x2e, 0xb7, 0x98, 0x43, 0xca, 0x6d, 0xb6, 0x4f, 0x1c, 0x8a, 0x69, 0x8b, 0x94, 0xf7, + 0x6f, 0x61, 0xbb, 0xd7, 0xc1, 0xb7, 0x22, 0xba, 0x52, 0xcf, 0x61, 0x9c, 0xa1, 0x2b, 0x3e, 0xa6, + 0x24, 0x30, 0xa5, 0xc8, 0xef, 0x3e, 0xa6, 0xf0, 0xbf, 0x36, 0x63, 0x6d, 0x9b, 0x94, 0x25, 0xa0, + 0xd9, 0xdf, 0x2d, 0x63, 0x3a, 0xf0, 0xd0, 0x85, 0x1b, 0xc7, 0x3d, 0xb6, 0x9c, 0x41, 0x8f, 0xb3, + 0xd0, 0x9b, 0x27, 0x2b, 0xdb, 0xf9, 0x13, 0xb6, 0x1d, 0x6c, 0xd1, 0x88, 0xa9, 0x10, 0x3d, 0xcb, + 0xe2, 0x77, 0x1a, 0x64, 0xeb, 0x0e, 0xeb, 0x31, 0x17, 0xdb, 0x8d, 0x7e, 0xb3, 0x6b, 0x71, 0xb4, + 0x0a, 0xe9, 0x9e, 0xd2, 0xe4, 0xb5, 0x39, 0x6d, 0x7e, 0x62, 0xe1, 0x9d, 0xd2, 0xd0, 0xc8, 0x4b, + 0x3e, 0x89, 0x1e, 0x80, 0xd1, 0x43, 0xc8, 0x9a, 0xa4, 0xc7, 0x5c, 0x8b, 0x1b, 0xb8, 0xcb, 0xfa, + 0x94, 0xe7, 0xc7, 0x24, 0xdd, 0xf5, 0x13, 0x74, 0x2a, 0xf4, 0x80, 0x6a, 0x51, 0x1a, 0xeb, 0x53, + 0x0a, 0xec, 0x89, 0xc5, 0x15, 0xc8, 0xf9, 0x3e, 0x9e, 0x58, 0xbc, 0x63, 0x3a, 0xf8, 0x00, 0x15, + 0x4e, 0x84, 0x9a, 0x88, 0x78, 0xbf, 0x0c, 0x49, 0x87, 0x60, 0x97, 0xd1, 0x7c, 0x7c, 0x4e, 0x9b, + 0xcf, 0xe8, 0x4a, 0x2a, 0xfe, 0xa2, 0xc1, 0x8c, 0x4f, 0xb4, 0xe4, 0x79, 0xa8, 0xd9, 0xd8, 0xea, + 0xbe, 0x94, 0xec, 0x74, 0x2a, 0xf1, 0xf3, 0xa7, 0x82, 0x1e, 0x42, 0x8a, 0xf5, 0x79, 0x8b, 0x75, + 0x89, 0xaa, 0xc8, 0xc2, 0x08, 0x05, 0xde, 0xf4, 0x90, 0xba, 0x4f, 0x21, 0xb6, 0x70, 0x6a, 0x1b, + 0xdb, 0x96, 0x89, 0x39, 0x73, 0xb6, 0x19, 0x27, 0x68, 0x0d, 0x12, 0x4d, 0x66, 0x0e, 0xd4, 0xee, + 0xbd, 0xff, 0x0a, 0xe4, 0xc7, 0xf0, 0x55, 0x66, 0x0e, 0x74, 0xc9, 0x80, 0x1e, 0x42, 0x1a, 0xf7, + 0x79, 0xc7, 0x70, 0xad, 0xb6, 0xca, 0xf8, 0xd6, 0x90, 0x8c, 0x1b, 0x3d, 0x42, 0xcd, 0xc5, 0x3e, + 0xef, 0x34, 0xac, 0x36, 0xc5, 0xbc, 0xef, 0x10, 0x3d, 0x85, 0x3d, 0xb1, 0xf8, 0x2c, 0x0e, 0x97, + 0x4e, 0x79, 0x7a, 0x69, 0xdd, 0xef, 0x41, 0x62, 0x9f, 0x71, 0xa2, 0x7c, 0xbf, 0xfd, 0x2a, 0x99, + 0x30, 0x4e, 0x74, 0x09, 0x42, 0x8f, 0x60, 0xd2, 0x32, 0x09, 0xe5, 0x16, 0x1f, 0x18, 0x7b, 0x64, + 0xa0, 0x6a, 0x7d, 0x63, 0x48, 0x02, 0xeb, 0x0a, 0xf2, 0x80, 0x0c, 0xf4, 0x09, 0x2b, 0x14, 0x50, + 0x03, 0xb2, 0xa1, 0x43, 0x49, 0x98, 0x90, 0x84, 0xef, 0x0e, 0x21, 0x5c, 0x0d, 0x40, 0x82, 0x72, + 0xaa, 0x1d, 0x15, 0x8b, 0x7f, 0x6a, 0x30, 0xb5, 0x44, 0x6c, 0xd2, 0xbe, 0xc0, 0xe6, 0x1d, 0xc3, + 0xbf, 0xae, 0xcd, 0x43, 0xeb, 0x30, 0xde, 0x73, 0x18, 0xdb, 0x55, 0x65, 0xbc, 0x3d, 0x84, 0xea, + 0xe9, 0x83, 0x63, 0x61, 0xd5, 0x05, 0x54, 0xf7, 0x18, 0x8a, 0x3f, 0xc7, 0xe1, 0xd2, 0xa9, 0xa0, + 0x5f, 0xda, 0x07, 0xd7, 0x21, 0xeb, 0x72, 0xec, 0x70, 0x43, 0x1e, 0x23, 0x4b, 0x1d, 0xea, 0x84, + 0x3e, 0x25, 0xb5, 0x75, 0xa5, 0x0c, 0xda, 0x65, 0xec, 0x3c, 0xed, 0x52, 0x81, 0xf1, 0x7d, 0x6c, + 0xf7, 0x89, 0xda, 0xd6, 0x6b, 0x43, 0x12, 0xdc, 0x16, 0xb6, 0xba, 0x07, 0x41, 0x1b, 0x30, 0xdd, + 0xa7, 0x4d, 0x46, 0x4d, 0x62, 0xfa, 0x17, 0xc4, 0xf8, 0x28, 0x17, 0x44, 0xd6, 0x47, 0xab, 0x1b, + 0xe2, 0x0d, 0xc8, 0xd0, 0xbe, 0x6d, 0x5b, 0xbb, 0x16, 0x71, 0xf2, 0xc9, 0x39, 0x6d, 0x7e, 0x52, + 0x0f, 0x15, 0x28, 0x0b, 0x71, 0x67, 0x2f, 0x9f, 0x92, 0xea, 0xb8, 0xb3, 0x57, 0xfc, 0x75, 0xec, + 0x44, 0x3d, 0xeb, 0x36, 0xa6, 0xff, 0x7a, 0x3d, 0x97, 0x60, 0xc2, 0xe5, 0x78, 0x8f, 0x98, 0x06, + 0x15, 0x1c, 0x5e, 0x55, 0xaf, 0x0e, 0xa9, 0xc7, 0x86, 0xc0, 0x83, 0x87, 0x13, 0x6b, 0xf4, 0x1e, + 0xcc, 0x44, 0x58, 0xc2, 0x78, 0xc7, 0x65, 0xbc, 0x28, 0xb4, 0x0c, 0x82, 0x3e, 0x63, 0x2f, 0x92, + 0x17, 0xd9, 0x8b, 0x59, 0x00, 0x07, 0x53, 0x93, 0x75, 0xad, 0x2f, 0x88, 0xa3, 0xaa, 0x1e, 0xd1, + 0xa0, 0x79, 0xc8, 0xc9, 0xb6, 0x36, 0x9a, 0xb6, 0x45, 0x4d, 0x8b, 0xb6, 0x0d, 0x27, 0x9f, 0x96, + 0x56, 0x59, 0xa9, 0xaf, 0x2a, 0xb5, 0x7e, 0x86, 0xa5, 0x9b, 0xcf, 0x9c, 0x61, 0xd9, 0x28, 0xae, + 0x01, 0x2c, 0x61, 0xa6, 0x9e, 0xa7, 0xb0, 0x33, 0xb5, 0x91, 0x3b, 0xb3, 0xb8, 0x02, 0xe9, 0x25, + 0xcc, 0xe4, 0xc1, 0xbe, 0x10, 0xcf, 0x57, 0x1a, 0x64, 0x96, 0x30, 0xdb, 0xec, 0xf3, 0x5e, 0xff, + 0x42, 0x11, 0xa1, 0xfb, 0x90, 0xc2, 0xa6, 0xe9, 0x10, 0xd7, 0x55, 0xb7, 0xd2, 0x5b, 0xc3, 0xf6, + 0xc5, 0xb3, 0xd6, 0x7d, 0x58, 0xf1, 0x6b, 0x0d, 0x12, 0xf2, 0xae, 0xbc, 0xaf, 0xfa, 0x53, 0x44, + 0x91, 0x3d, 0x75, 0x11, 0xff, 0x5d, 0x7f, 0x46, 0x9a, 0xb4, 0xb8, 0xae, 0x98, 0x66, 0x20, 0xb7, + 0xbd, 0xb9, 0xb5, 0x6c, 0x7c, 0xbc, 0xd1, 0xa8, 0x2f, 0xd7, 0xd6, 0x57, 0xd6, 0x97, 0x97, 0x72, + 0x31, 0x94, 0x83, 0x49, 0xa9, 0x5d, 0xac, 0x36, 0xb6, 0x16, 0xd7, 0x37, 0x72, 0x1a, 0x9a, 0x84, + 0xb4, 0xd4, 0x7c, 0xba, 0xdc, 0xc8, 0xc5, 0xd1, 0x04, 0xa4, 0xa4, 0xb4, 0xb1, 0x99, 0x1b, 0x2b, + 0xbe, 0x48, 0xc0, 0x54, 0x30, 0x4a, 0x71, 0xcc, 0x09, 0x7a, 0x0c, 0xc9, 0x7d, 0xc6, 0x2d, 0xea, + 0x5f, 0xbf, 0x77, 0x46, 0x78, 0xe6, 0x25, 0x83, 0x88, 0xd4, 0xa2, 0xed, 0xb5, 0x98, 0xae, 0x88, + 0xd0, 0x53, 0xc8, 0x1c, 0xa8, 0xe9, 0x87, 0xaa, 0x63, 0x59, 0x19, 0x99, 0xd5, 0x9f, 0x9f, 0xe8, + 0x5a, 0x4c, 0x0f, 0xe9, 0xd0, 0x13, 0x48, 0xef, 0x5a, 0xd4, 0x72, 0x3b, 0xc4, 0x54, 0xa7, 0xf5, + 0xee, 0xc8, 0xd4, 0x2b, 0x8a, 0x60, 0x2d, 0xa6, 0x07, 0x64, 0x68, 0x0b, 0x52, 0x2d, 0x31, 0x62, + 0x11, 0x53, 0xdd, 0x8a, 0x1f, 0x8e, 0xcc, 0x5b, 0xf3, 0xf0, 0x6b, 0x31, 0xdd, 0xa7, 0x2a, 0xa4, + 0x21, 0xe9, 0x95, 0xa7, 0x70, 0x15, 0x32, 0x41, 0x4a, 0x91, 0xb9, 0x4f, 0x8b, 0xce, 0x7d, 0x85, + 0x4f, 0x20, 0xed, 0x07, 0x17, 0x1d, 0xc0, 0xb4, 0x0b, 0x0f, 0x60, 0x85, 0x27, 0x90, 0x52, 0xe1, + 0xfd, 0xb3, 0xc4, 0xd5, 0x14, 0x8c, 0xbb, 0x22, 0xfb, 0xe2, 0xd1, 0x18, 0x4c, 0x9f, 0xb0, 0x42, + 0x0d, 0x48, 0xf6, 0xb0, 0xeb, 0x12, 0x53, 0x79, 0xba, 0x3b, 0xba, 0xa7, 0x52, 0x5d, 0x12, 0x88, + 0xf6, 0xf2, 0xa8, 0x04, 0xe9, 0x2e, 0xb6, 0x6c, 0x62, 0xaa, 0x8e, 0x3d, 0x0f, 0xe9, 0x8a, 0x24, + 0x10, 0xa4, 0x1e, 0x15, 0xda, 0x86, 0x94, 0x6b, 0x63, 0xd9, 0x56, 0xa3, 0x77, 0xac, 0xcf, 0xda, + 0xf0, 0x18, 0x44, 0x03, 0x28, 0x32, 0xd1, 0x00, 0x5e, 0x02, 0x85, 0xcf, 0x20, 0xe9, 0x79, 0x45, + 0x77, 0xe0, 0xbf, 0x41, 0x43, 0x1b, 0x62, 0x65, 0x44, 0x9b, 0x61, 0x2d, 0xa6, 0xff, 0x27, 0xf8, + 0x59, 0xb4, 0x8c, 0x2e, 0x7f, 0xfc, 0x52, 0xd3, 0xaa, 0x79, 0xb8, 0x6c, 0x9c, 0x89, 0x2c, 0xec, + 0x40, 0x4a, 0x39, 0x7f, 0x0d, 0xec, 0xd5, 0x4c, 0xd0, 0x31, 0xc5, 0x1a, 0x8c, 0x6f, 0x61, 0xdb, + 0x1e, 0xa0, 0x1c, 0x8c, 0x0d, 0x88, 0xab, 0x1e, 0x6d, 0xb1, 0x14, 0x2f, 0x3e, 0x65, 0xea, 0x8d, + 0x8e, 0x53, 0x86, 0xf2, 0x90, 0xc2, 0x4d, 0x97, 0x63, 0xcb, 0xbb, 0x04, 0x12, 0xba, 0x2f, 0x16, + 0xbf, 0x4d, 0x42, 0xda, 0xaf, 0x9d, 0x80, 0x59, 0xde, 0x59, 0x4e, 0xe8, 0x71, 0xcb, 0x44, 0x33, + 0x30, 0xce, 0x2d, 0x6e, 0x13, 0x75, 0x34, 0x3c, 0x01, 0xcd, 0xc1, 0x84, 0x49, 0xdc, 0x96, 0x63, + 0xf5, 0x82, 0x49, 0x20, 0xa3, 0x47, 0x55, 0xa8, 0x01, 0x19, 0x57, 0x4c, 0x84, 0xb6, 0xb8, 0xcb, + 0xbc, 0x23, 0xfc, 0xc1, 0x08, 0x7b, 0x58, 0x6a, 0xf8, 0x60, 0x3d, 0xe4, 0x11, 0xa4, 0xa4, 0x4b, + 0x9c, 0x36, 0xa1, 0xad, 0x81, 0x7a, 0xa1, 0x47, 0x22, 0x5d, 0xf6, 0xc1, 0x7a, 0xc8, 0x83, 0x76, + 0x21, 0xd7, 0xc3, 0x0e, 0xee, 0x12, 0x4e, 0x1c, 0xa3, 0xd5, 0xc1, 0xb4, 0x4d, 0xe4, 0x93, 0x3d, + 0xb1, 0x70, 0x6f, 0x14, 0xee, 0xba, 0xcf, 0x51, 0x93, 0x14, 0xfa, 0x74, 0xef, 0xb8, 0x02, 0x3d, + 0x86, 0x8c, 0x89, 0x99, 0xe1, 0x8a, 0x77, 0x55, 0xbe, 0xf6, 0xaf, 0x36, 0xaa, 0x07, 0x0e, 0xfc, + 0x37, 0x59, 0x4f, 0x9b, 0x6a, 0x55, 0xb8, 0x0d, 0x99, 0xa0, 0x4e, 0xe8, 0xff, 0x90, 0x6c, 0xb1, + 0x6e, 0xd7, 0xe2, 0x41, 0x6b, 0x29, 0x59, 0x74, 0x53, 0x06, 0x52, 0x86, 0x27, 0x15, 0x6e, 0x40, + 0x26, 0xa8, 0x03, 0x7a, 0x13, 0xa0, 0x83, 0x6d, 0x6e, 0xc8, 0x3f, 0xf8, 0x12, 0x98, 0xd6, 0x33, + 0x42, 0x53, 0x13, 0x8a, 0xc2, 0x0f, 0x1a, 0x4c, 0x9f, 0x48, 0x0c, 0x6d, 0x41, 0x96, 0xd9, 0xa6, + 0x11, 0xa4, 0xe7, 0xaa, 0xdb, 0xe4, 0xe6, 0xc9, 0x37, 0x59, 0x7e, 0x33, 0x08, 0xf2, 0x90, 0x84, + 0x01, 0x97, 0xab, 0x4f, 0x31, 0xdb, 0x0c, 0x45, 0xc1, 0x4a, 0xc9, 0x41, 0x94, 0x35, 0x7e, 0x2e, + 0x56, 0x4a, 0x0e, 0x42, 0xb1, 0xf0, 0x20, 0x32, 0xca, 0x7c, 0x04, 0x39, 0xee, 0x60, 0xea, 0xe2, + 0x96, 0x68, 0x50, 0xa3, 0x67, 0x63, 0xaa, 0x7c, 0xcc, 0x94, 0xbc, 0x6f, 0x28, 0x25, 0xff, 0x1b, + 0x4a, 0x69, 0x91, 0x0e, 0xf4, 0xe9, 0x88, 0xb5, 0x98, 0x8e, 0xab, 0xbf, 0xc5, 0x7f, 0x3c, 0x9c, + 0xd5, 0x9e, 0x1f, 0xce, 0x6a, 0xbf, 0x1f, 0xce, 0x6a, 0xcf, 0x8e, 0x66, 0x63, 0xcf, 0x8f, 0x66, + 0x63, 0x2f, 0x8e, 0x66, 0x63, 0x70, 0xbd, 0xc5, 0xba, 0xc3, 0xf7, 0xb2, 0x3a, 0x1d, 0xfe, 0xb1, + 0xab, 0x0b, 0x57, 0x75, 0xed, 0xe9, 0xe7, 0x6d, 0x8b, 0x77, 0xfa, 0xcd, 0x52, 0x8b, 0x75, 0xcb, + 0x2d, 0xe6, 0x76, 0x99, 0x5b, 0x76, 0x88, 0x8d, 0x07, 0xc4, 0x29, 0xef, 0x2f, 0x04, 0x4b, 0x99, + 0xb5, 0x5b, 0x1e, 0xfa, 0x05, 0xe9, 0x5e, 0xa8, 0xf3, 0x55, 0xdf, 0xc4, 0xc7, 0xea, 0xb5, 0xd5, + 0xef, 0xe3, 0x57, 0xea, 0x7e, 0x78, 0x35, 0x11, 0x5e, 0x18, 0x49, 0x69, 0x5b, 0x59, 0xfe, 0x14, + 0xda, 0xec, 0x08, 0x9b, 0x9d, 0xd0, 0x66, 0xc7, 0xb7, 0x39, 0x8c, 0xdf, 0x1c, 0x6a, 0xb3, 0xb3, + 0x5a, 0xaf, 0x3e, 0x22, 0x1c, 0x9b, 0x98, 0xe3, 0x3f, 0xe2, 0xd7, 0x7c, 0xfb, 0x4a, 0x45, 0x00, + 0x2a, 0x95, 0x10, 0x51, 0xa9, 0xf8, 0x90, 0x66, 0x52, 0x96, 0xfe, 0xf6, 0x5f, 0x01, 0x00, 0x00, + 0xff, 0xff, 0x07, 0xf0, 0xab, 0xae, 0x25, 0x13, 0x00, 0x00, } func (m *ProposalSubmit) Marshal() (dAtA []byte, err error) { @@ -2316,6 +2336,20 @@ func (m *DelegatorVotePlan) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.ProofBlindingS) > 0 { + i -= len(m.ProofBlindingS) + copy(dAtA[i:], m.ProofBlindingS) + i = encodeVarintGovernance(dAtA, i, uint64(len(m.ProofBlindingS))) + i-- + dAtA[i] = 0x4a + } + if len(m.ProofBlindingR) > 0 { + i -= len(m.ProofBlindingR) + copy(dAtA[i:], m.ProofBlindingR) + i = encodeVarintGovernance(dAtA, i, uint64(len(m.ProofBlindingR))) + i-- + dAtA[i] = 0x42 + } if len(m.Randomizer) > 0 { i -= len(m.Randomizer) copy(dAtA[i:], m.Randomizer) @@ -3452,6 +3486,14 @@ func (m *DelegatorVotePlan) Size() (n int) { if l > 0 { n += 1 + l + sovGovernance(uint64(l)) } + l = len(m.ProofBlindingR) + if l > 0 { + n += 1 + l + sovGovernance(uint64(l)) + } + l = len(m.ProofBlindingS) + if l > 0 { + n += 1 + l + sovGovernance(uint64(l)) + } return n } @@ -5156,6 +5198,74 @@ func (m *DelegatorVotePlan) Unmarshal(dAtA []byte) error { m.Randomizer = []byte{} } iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofBlindingR", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGovernance + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGovernance + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGovernance + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofBlindingR = append(m.ProofBlindingR[:0], dAtA[iNdEx:postIndex]...) + if m.ProofBlindingR == nil { + m.ProofBlindingR = []byte{} + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofBlindingS", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGovernance + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGovernance + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGovernance + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofBlindingS = append(m.ProofBlindingS[:0], dAtA[iNdEx:postIndex]...) + if m.ProofBlindingS == nil { + m.ProofBlindingS = []byte{} + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGovernance(dAtA[iNdEx:]) diff --git a/relayer/chains/penumbra/core/stake/v1alpha1/stake.pb.go b/relayer/chains/penumbra/core/stake/v1alpha1/stake.pb.go index 2228a0a81..690e79f23 100644 --- a/relayer/chains/penumbra/core/stake/v1alpha1/stake.pb.go +++ b/relayer/chains/penumbra/core/stake/v1alpha1/stake.pb.go @@ -1184,6 +1184,10 @@ type UndelegateClaimPlan struct { UnbondingAmount *v1alpha1.Amount `protobuf:"bytes,5,opt,name=unbonding_amount,json=unbondingAmount,proto3" json:"unbonding_amount,omitempty"` // The blinding factor to use for the balance commitment. BalanceBlinding []byte `protobuf:"bytes,6,opt,name=balance_blinding,json=balanceBlinding,proto3" json:"balance_blinding,omitempty"` + // The first blinding factor to use for the ZK undelegate claim proof. + ProofBlindingR []byte `protobuf:"bytes,7,opt,name=proof_blinding_r,json=proofBlindingR,proto3" json:"proof_blinding_r,omitempty"` + // The second blinding factor to use for the ZK undelegate claim proof. + ProofBlindingS []byte `protobuf:"bytes,8,opt,name=proof_blinding_s,json=proofBlindingS,proto3" json:"proof_blinding_s,omitempty"` } func (m *UndelegateClaimPlan) Reset() { *m = UndelegateClaimPlan{} } @@ -1254,6 +1258,20 @@ func (m *UndelegateClaimPlan) GetBalanceBlinding() []byte { return nil } +func (m *UndelegateClaimPlan) GetProofBlindingR() []byte { + if m != nil { + return m.ProofBlindingR + } + return nil +} + +func (m *UndelegateClaimPlan) GetProofBlindingS() []byte { + if m != nil { + return m.ProofBlindingS + } + return nil +} + // A list of pending delegations and undelegations. type DelegationChanges struct { Delegations []*Delegate `protobuf:"bytes,1,rep,name=delegations,proto3" json:"delegations,omitempty"` @@ -1490,105 +1508,106 @@ func init() { } var fileDescriptor_022d012c8e7b3ca5 = []byte{ - // 1554 bytes of a gzipped FileDescriptorProto + // 1578 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0xcd, 0x6f, 0x23, 0x49, 0x15, 0x4f, 0x3b, 0x76, 0x12, 0x3f, 0x7f, 0xa6, 0x66, 0x01, 0xcf, 0x30, 0x93, 0x78, 0x7b, 0x81, 0x35, 0x33, 0x83, 0xc3, 0x04, 0xc1, 0x21, 0x7b, 0x58, 0xdc, 0xb6, 0x77, 0xe2, 0xdd, 0xc4, 0xf1, 0xb6, 0x9d, 0x48, 0xa0, 0x48, 0xad, 0xb2, 0xbb, 0x62, 0x37, 0x63, 0x57, 0x99, 0xae, 0x72, 0xb2, - 0xfe, 0x0b, 0xe0, 0xc8, 0x71, 0xcf, 0x1c, 0x38, 0xac, 0xc4, 0x81, 0x13, 0x27, 0x38, 0x23, 0x4e, - 0xcb, 0x0d, 0x71, 0x42, 0x19, 0x09, 0x24, 0xfe, 0x0a, 0x54, 0xd5, 0x5d, 0xed, 0x8f, 0x7c, 0x4d, - 0x56, 0x23, 0xb4, 0xdc, 0xfa, 0x7d, 0xfd, 0xea, 0xbd, 0xdf, 0xab, 0x57, 0x5d, 0xdd, 0x50, 0x1a, - 0x13, 0x3a, 0x19, 0x75, 0x7d, 0xbc, 0xd3, 0x63, 0x3e, 0xd9, 0xe1, 0x02, 0xbf, 0x22, 0x3b, 0xe7, - 0x2f, 0xf0, 0x70, 0x3c, 0xc0, 0x2f, 0x02, 0xb1, 0x3c, 0xf6, 0x99, 0x60, 0xe8, 0xb1, 0xf6, 0x2c, - 0x4b, 0xcf, 0x72, 0x60, 0xd2, 0x9e, 0x8f, 0x9e, 0x2e, 0xe2, 0xf4, 0xfc, 0xe9, 0x58, 0xb0, 0x19, - 0x50, 0x20, 0x07, 0x48, 0xe6, 0x9f, 0x56, 0x21, 0x79, 0x82, 0x87, 0x9e, 0x8b, 0x05, 0xf3, 0xd1, - 0x21, 0xa4, 0x3d, 0x97, 0x50, 0xe1, 0x89, 0xa9, 0xf3, 0x8a, 0x4c, 0x0b, 0x46, 0xd1, 0x28, 0xa5, - 0x76, 0x9f, 0x96, 0x17, 0x97, 0x0b, 0x01, 0x34, 0x60, 0xb9, 0x11, 0x86, 0x7c, 0x42, 0xa6, 0x76, - 0xca, 0x9b, 0x09, 0xe8, 0x3d, 0xc8, 0xf4, 0x18, 0xe5, 0x84, 0xf2, 0x09, 0x57, 0x78, 0xb1, 0xa2, - 0x51, 0x4a, 0xdb, 0xe9, 0x48, 0x29, 0x9d, 0x10, 0xc4, 0x29, 0x1e, 0x91, 0xc2, 0x6a, 0xd1, 0x28, - 0x25, 0x6d, 0xf5, 0x8c, 0x0a, 0xb0, 0x7e, 0x41, 0xba, 0xdc, 0x13, 0xa4, 0x10, 0x57, 0x6a, 0x2d, - 0xa2, 0x22, 0xa4, 0x5c, 0xc2, 0x7b, 0xbe, 0x37, 0x16, 0x1e, 0xa3, 0x85, 0x84, 0xb2, 0xce, 0xab, - 0x64, 0x2c, 0xa1, 0xb8, 0x3b, 0x24, 0x6e, 0x61, 0xa3, 0x68, 0x94, 0x36, 0x6c, 0x2d, 0xa2, 0x0e, - 0xe4, 0xce, 0x26, 0xd4, 0xf5, 0x68, 0xdf, 0xe1, 0xc2, 0x27, 0x78, 0xc4, 0x0b, 0x6b, 0xc5, 0xd5, - 0x52, 0x6a, 0xf7, 0x59, 0xf9, 0x36, 0x3e, 0xcb, 0x1f, 0x05, 0x41, 0x6d, 0x15, 0x63, 0x67, 0xcf, - 0xe6, 0x45, 0x8e, 0xde, 0x87, 0x1c, 0x27, 0xbf, 0x9c, 0x10, 0xda, 0x23, 0x8e, 0x04, 0x21, 0x7e, - 0x61, 0xbd, 0x68, 0x94, 0x32, 0x76, 0x56, 0xab, 0x9b, 0x4a, 0x8b, 0xda, 0x90, 0xed, 0xb3, 0x73, - 0xe2, 0x53, 0x2c, 0x5d, 0x25, 0x1d, 0x49, 0x45, 0xef, 0xf3, 0x3b, 0xe8, 0x7d, 0x19, 0x05, 0x49, - 0x82, 0x33, 0xfd, 0x79, 0xd1, 0xec, 0x42, 0x26, 0x6a, 0xdf, 0x81, 0xc7, 0x05, 0xfa, 0x14, 0xb2, - 0xe7, 0x5a, 0x21, 0x17, 0xe1, 0x05, 0x43, 0xd5, 0x78, 0x9f, 0x26, 0x66, 0x22, 0x84, 0x4f, 0xc8, - 0x94, 0x9b, 0xbf, 0x8b, 0x41, 0x66, 0x81, 0x03, 0x74, 0x02, 0x20, 0x98, 0x83, 0x5d, 0xd7, 0x27, - 0x9c, 0x87, 0xbb, 0xe4, 0xc7, 0xf7, 0x20, 0xb1, 0xdc, 0x61, 0x95, 0x20, 0x78, 0x7f, 0xc5, 0x4e, - 0x0a, 0x2d, 0xa0, 0x8f, 0x61, 0x4d, 0x30, 0xc7, 0xc5, 0x4c, 0xed, 0x94, 0xd4, 0xee, 0x8b, 0xfb, - 0x61, 0xd6, 0x30, 0xdb, 0x5f, 0xb1, 0x13, 0x42, 0x3e, 0x3c, 0xfa, 0x29, 0x24, 0xa3, 0x55, 0xe4, - 0xa6, 0x98, 0xcf, 0x36, 0x69, 0x6b, 0x11, 0x3d, 0x84, 0x0d, 0x1f, 0x0b, 0xe2, 0x74, 0xc7, 0x5c, - 0x2d, 0x9a, 0xb1, 0xd7, 0xa5, 0x6c, 0x8d, 0xf9, 0x23, 0x13, 0x12, 0x0a, 0xf3, 0x16, 0x1f, 0x2b, - 0x05, 0x49, 0x9f, 0xf4, 0xbc, 0xb1, 0x47, 0xa8, 0x30, 0xff, 0x65, 0xc0, 0x86, 0x8d, 0x05, 0xa9, - 0x61, 0x81, 0xdf, 0xf6, 0x2c, 0x6d, 0x43, 0x8a, 0x8c, 0x59, 0x6f, 0xe0, 0x78, 0xd4, 0x25, 0x9f, - 0xa9, 0x34, 0xe2, 0x36, 0x28, 0x55, 0x43, 0x6a, 0xd0, 0x2e, 0x7c, 0x63, 0xd6, 0x78, 0x9f, 0x5c, - 0x60, 0xdf, 0x75, 0x64, 0x96, 0x6a, 0x82, 0xe2, 0xf6, 0x83, 0xc8, 0x68, 0x2b, 0x9b, 0xcc, 0x13, - 0xfd, 0x04, 0xbe, 0x35, 0x8b, 0x21, 0x9f, 0xf5, 0x06, 0x98, 0xf6, 0x49, 0x10, 0x95, 0x50, 0x51, - 0x33, 0xc8, 0x7a, 0x68, 0x95, 0x71, 0xe6, 0xaf, 0x0c, 0x48, 0x5b, 0x98, 0x93, 0xa8, 0xd8, 0xa5, - 0xec, 0x8c, 0x2b, 0xd9, 0x95, 0x20, 0xdf, 0xc5, 0x9c, 0x2c, 0x24, 0x16, 0xd4, 0x90, 0x95, 0xfa, - 0xb9, 0x9c, 0x9e, 0x03, 0x52, 0x9e, 0x8b, 0xe9, 0xac, 0x2a, 0x5f, 0x85, 0xb1, 0x90, 0xc9, 0xe7, - 0x31, 0xc8, 0x45, 0x03, 0xd0, 0x16, 0x58, 0x4c, 0xf8, 0xdb, 0x66, 0xde, 0x82, 0x04, 0x17, 0x3a, - 0xdf, 0xab, 0xe3, 0xba, 0xb4, 0x27, 0x17, 0x92, 0x21, 0x76, 0x10, 0x8a, 0xde, 0x85, 0xf4, 0x39, - 0x13, 0xf2, 0xe4, 0x19, 0xb3, 0x0b, 0xe2, 0x87, 0xe5, 0xa4, 0x02, 0x5d, 0x4b, 0xaa, 0xd0, 0x11, - 0x64, 0xba, 0x4c, 0x9f, 0x4e, 0xba, 0x6f, 0x57, 0xd3, 0x5e, 0x5a, 0xce, 0x62, 0xe1, 0x08, 0xc8, - 0xc5, 0xd2, 0xdd, 0x39, 0xc9, 0xfc, 0x73, 0x0c, 0xd2, 0xf3, 0x66, 0xf4, 0xa9, 0x2e, 0x44, 0x12, - 0x92, 0xdd, 0xfd, 0xe0, 0xcd, 0x91, 0x17, 0x84, 0x3a, 0x9d, 0x8c, 0x74, 0x5d, 0xcf, 0x21, 0x37, - 0xa1, 0x3a, 0x6d, 0xd5, 0xee, 0xa0, 0xab, 0xfb, 0x2b, 0x76, 0x36, 0x32, 0xd4, 0xa5, 0xfe, 0xd7, - 0x86, 0x61, 0x7e, 0x6e, 0x40, 0x7e, 0x19, 0x09, 0x99, 0xb0, 0x65, 0x1d, 0x35, 0x6b, 0x8d, 0xe6, - 0x4b, 0xa7, 0xdd, 0xa9, 0x74, 0xea, 0x4e, 0xbd, 0x79, 0x7c, 0xe8, 0x1c, 0x37, 0xdb, 0xad, 0x7a, - 0xb5, 0xf1, 0x51, 0xa3, 0x5e, 0xcb, 0xaf, 0xa0, 0x27, 0xf0, 0xf0, 0x1a, 0x1f, 0xa9, 0xaa, 0xd7, - 0xf2, 0x06, 0x2a, 0xc2, 0xe3, 0x6b, 0x21, 0x42, 0x65, 0x3e, 0x86, 0xb6, 0xe1, 0xdb, 0x37, 0x7a, - 0xd4, 0x6b, 0xf9, 0x55, 0x0b, 0x41, 0xde, 0x59, 0xaa, 0xc4, 0xfc, 0x5b, 0x0c, 0xb2, 0x8b, 0xed, - 0x44, 0xc7, 0x8b, 0x14, 0x7e, 0x78, 0x9f, 0xbd, 0xb0, 0x24, 0xce, 0xd1, 0x68, 0xfe, 0xdb, 0x00, - 0x74, 0xd5, 0x8a, 0xbe, 0x03, 0xc5, 0x93, 0xca, 0x41, 0xa3, 0x56, 0xe9, 0x1c, 0xd9, 0x37, 0x93, - 0xf3, 0x2e, 0x3c, 0xb9, 0xd6, 0xab, 0xd1, 0xac, 0x54, 0x3b, 0x8d, 0x93, 0x7a, 0xde, 0x90, 0xe5, - 0x5f, 0xeb, 0x12, 0x3a, 0xc4, 0x6e, 0x74, 0xf8, 0xb8, 0xd2, 0x38, 0x90, 0xfc, 0xa0, 0xf7, 0x60, - 0xfb, 0x5a, 0x87, 0xce, 0xd1, 0xa1, 0xd5, 0xee, 0x1c, 0x35, 0xeb, 0xb5, 0x7c, 0xfc, 0xc6, 0x4c, - 0x6a, 0x8d, 0x76, 0xc5, 0x92, 0x38, 0x09, 0xf3, 0xd2, 0x98, 0x7b, 0x61, 0x35, 0xe8, 0x19, 0x43, - 0x75, 0x48, 0x46, 0x87, 0x4c, 0x38, 0xaa, 0xef, 0xbf, 0x21, 0xad, 0xf6, 0x2c, 0x12, 0xd5, 0x61, - 0x8d, 0xab, 0xf1, 0x0f, 0xc7, 0xf4, 0x07, 0xf7, 0x68, 0xcd, 0x84, 0xdb, 0x61, 0x30, 0xaa, 0x42, - 0x52, 0x1d, 0xf5, 0x2e, 0x16, 0x58, 0x4d, 0x69, 0x6a, 0xf7, 0x7b, 0xb7, 0x23, 0xe9, 0x33, 0xd0, - 0x56, 0xef, 0x08, 0xf9, 0x64, 0x5e, 0xc0, 0x83, 0x08, 0xbf, 0x46, 0xce, 0x3c, 0xea, 0xa9, 0x9b, - 0xc9, 0x5b, 0xaa, 0xf4, 0x21, 0x6c, 0xe0, 0x89, 0x18, 0x38, 0xdc, 0xeb, 0x87, 0x17, 0xaa, 0x75, - 0x29, 0xb7, 0xbd, 0xbe, 0xf9, 0x45, 0x0c, 0x36, 0x6a, 0x64, 0x48, 0xfa, 0x72, 0xaf, 0xfe, 0x0c, - 0xd0, 0xec, 0x70, 0xd7, 0x07, 0xda, 0x57, 0x38, 0x0c, 0x37, 0x23, 0x14, 0xad, 0xbd, 0xfb, 0x65, - 0xd4, 0xd4, 0xe7, 0x02, 0x71, 0x1d, 0x3c, 0x62, 0x13, 0x2a, 0x42, 0x32, 0xbf, 0x7b, 0xc7, 0xc2, - 0x15, 0xe5, 0xac, 0x0f, 0x0f, 0xe2, 0x06, 0x32, 0xb2, 0x61, 0xd3, 0x0d, 0xea, 0xf2, 0x18, 0xd5, - 0x88, 0xf1, 0xfb, 0x20, 0xe6, 0x67, 0xf1, 0x81, 0xc6, 0xfc, 0x63, 0x0c, 0xe0, 0x98, 0xba, 0xff, - 0x03, 0xba, 0x9e, 0xc2, 0x26, 0x17, 0xd8, 0x17, 0xce, 0x55, 0xd2, 0x72, 0xca, 0x50, 0xff, 0xff, - 0x62, 0x8e, 0x42, 0x6e, 0x46, 0x5c, 0x75, 0x88, 0xbd, 0x11, 0xaa, 0x43, 0xbc, 0xcb, 0x5c, 0xcd, - 0xd7, 0x1d, 0xf7, 0xb6, 0xa5, 0x60, 0x8b, 0xb9, 0x53, 0x5b, 0x85, 0xa3, 0x77, 0x20, 0x31, 0xf6, - 0x19, 0x3b, 0x0b, 0x37, 0x76, 0x20, 0xc8, 0x37, 0xd9, 0x83, 0x6b, 0x62, 0xbe, 0x2e, 0x2d, 0xfb, - 0x10, 0xd6, 0xc7, 0x84, 0xe2, 0xa1, 0x98, 0xde, 0xd0, 0xaa, 0xa5, 0xf2, 0x5b, 0x81, 0xb3, 0xad, - 0xa3, 0x90, 0x23, 0xaf, 0x3c, 0x43, 0xf5, 0x59, 0xd0, 0x63, 0xa3, 0x91, 0x27, 0x46, 0x24, 0x6a, - 0xd2, 0x0f, 0xef, 0xa8, 0xc3, 0x0a, 0x02, 0xab, 0x51, 0x9c, 0xbd, 0xd9, 0x5d, 0x56, 0x99, 0xff, - 0xb8, 0x4a, 0x60, 0x6b, 0x88, 0xe9, 0xd7, 0x90, 0xc0, 0xf8, 0x57, 0x22, 0xb0, 0x05, 0xf9, 0xd9, - 0xcb, 0x3b, 0xdc, 0xe3, 0x89, 0xfb, 0xec, 0xf1, 0xd9, 0x2d, 0x26, 0x1c, 0x9b, 0xef, 0xcb, 0xfb, - 0x6a, 0xd0, 0x92, 0xee, 0xd0, 0x53, 0x96, 0xc2, 0x9a, 0xda, 0x93, 0xb9, 0x50, 0x6f, 0x85, 0x6a, - 0xf3, 0xf7, 0x06, 0x6c, 0xd6, 0xa2, 0x11, 0xa9, 0xaa, 0xbb, 0x29, 0x47, 0xfb, 0xf2, 0x43, 0x55, - 0x2b, 0xf5, 0x47, 0xd8, 0x1d, 0xaf, 0x12, 0x7d, 0x74, 0xdb, 0xf3, 0xa1, 0xa8, 0x09, 0x99, 0x09, - 0x9d, 0xc7, 0x8a, 0x29, 0xac, 0xd2, 0x9b, 0xce, 0x98, 0xbd, 0x18, 0x6e, 0x0e, 0x61, 0xed, 0x78, - 0x2c, 0xbc, 0x11, 0x41, 0xcf, 0x00, 0x61, 0xee, 0xb0, 0x33, 0xa7, 0x3b, 0x64, 0xbd, 0x57, 0xce, - 0x80, 0x78, 0xfd, 0x81, 0x08, 0x2f, 0xef, 0x39, 0xcc, 0x8f, 0xce, 0x2c, 0xa9, 0xdf, 0x57, 0x6a, - 0xf4, 0x04, 0xe0, 0xc2, 0xa3, 0x2e, 0xbb, 0x70, 0x86, 0x84, 0x86, 0x9f, 0x41, 0xc9, 0x40, 0x73, - 0x40, 0x28, 0xfa, 0x26, 0xac, 0x75, 0x3d, 0x71, 0x4e, 0x7a, 0x6a, 0x06, 0xd2, 0x76, 0x28, 0x99, - 0xbf, 0x80, 0x77, 0xaa, 0x13, 0xdf, 0x27, 0x54, 0x54, 0xe7, 0xbe, 0xfa, 0x39, 0xb2, 0x21, 0xbb, - 0xf0, 0x6f, 0x40, 0x53, 0xf4, 0xec, 0x8e, 0x86, 0xcd, 0xa3, 0xd8, 0x99, 0xf9, 0x3f, 0x09, 0xdc, - 0xdc, 0x86, 0xf5, 0x70, 0x6b, 0xc8, 0x83, 0xc4, 0xa3, 0x94, 0xf8, 0x61, 0x35, 0x81, 0x60, 0xfd, - 0x21, 0xf6, 0x97, 0xcb, 0x2d, 0xe3, 0xcb, 0xcb, 0x2d, 0xe3, 0x9f, 0x97, 0x5b, 0xc6, 0x6f, 0x5e, - 0x6f, 0xad, 0x7c, 0xf9, 0x7a, 0x6b, 0xe5, 0xef, 0xaf, 0xb7, 0x56, 0xa0, 0xd8, 0x63, 0xa3, 0x5b, - 0x19, 0xb5, 0xa0, 0x2d, 0xe5, 0x96, 0xcf, 0x04, 0x6b, 0x19, 0x3f, 0x3f, 0xe9, 0x7b, 0x62, 0x30, - 0xe9, 0x96, 0x7b, 0x6c, 0xb4, 0xd3, 0x63, 0x7c, 0xc4, 0xf8, 0x8e, 0x4f, 0x86, 0x78, 0x4a, 0xfc, - 0x9d, 0xf3, 0xdd, 0xe8, 0xb1, 0x37, 0xc0, 0x1e, 0xe5, 0x3b, 0xb7, 0xfd, 0xd8, 0xf9, 0x40, 0x89, - 0x5a, 0xfa, 0x6d, 0x6c, 0xb5, 0x55, 0x6d, 0x7f, 0x11, 0x7b, 0xdc, 0xd2, 0xa9, 0x54, 0x65, 0x2a, - 0x6a, 0xe9, 0xf2, 0x49, 0xe8, 0xf4, 0xd7, 0x99, 0xf9, 0x54, 0x9a, 0x4f, 0x95, 0xf9, 0x54, 0x9b, - 0x2f, 0x63, 0xa5, 0xdb, 0xcc, 0xa7, 0x2f, 0x5b, 0xd6, 0x21, 0x11, 0x58, 0x5e, 0x71, 0xfe, 0x13, - 0xdb, 0xd6, 0xae, 0x7b, 0x7b, 0xd2, 0x77, 0x6f, 0x4f, 0x39, 0xef, 0xed, 0x69, 0xef, 0xee, 0x9a, - 0xfa, 0x51, 0xf4, 0xa3, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xba, 0x77, 0x8b, 0xfc, 0x9e, 0x12, - 0x00, 0x00, + 0xfe, 0x0b, 0xe0, 0xc8, 0x71, 0xcf, 0x1c, 0x38, 0xac, 0x04, 0x12, 0x27, 0x4e, 0x70, 0x46, 0x9c, + 0x96, 0x1b, 0x47, 0x94, 0x91, 0x40, 0xe2, 0xaf, 0x40, 0x55, 0xdd, 0xd5, 0xfe, 0xc8, 0xd7, 0x64, + 0x35, 0x42, 0xcb, 0xad, 0xdf, 0x7b, 0xbf, 0xf7, 0xea, 0xbd, 0x5f, 0xd5, 0xab, 0x8f, 0x86, 0xd2, + 0x98, 0xd0, 0xc9, 0xa8, 0xeb, 0xe3, 0x9d, 0x1e, 0xf3, 0xc9, 0x0e, 0x17, 0xf8, 0x15, 0xd9, 0x39, + 0x7f, 0x81, 0x87, 0xe3, 0x01, 0x7e, 0x11, 0x88, 0xe5, 0xb1, 0xcf, 0x04, 0x43, 0x8f, 0x35, 0xb2, + 0x2c, 0x91, 0xe5, 0xc0, 0xa4, 0x91, 0x8f, 0x9e, 0x2e, 0xc6, 0xe9, 0xf9, 0xd3, 0xb1, 0x60, 0xb3, + 0x40, 0x81, 0x1c, 0x44, 0x32, 0xff, 0xbc, 0x0a, 0xc9, 0x13, 0x3c, 0xf4, 0x5c, 0x2c, 0x98, 0x8f, + 0x0e, 0x21, 0xed, 0xb9, 0x84, 0x0a, 0x4f, 0x4c, 0x9d, 0x57, 0x64, 0x5a, 0x30, 0x8a, 0x46, 0x29, + 0xb5, 0xfb, 0xb4, 0xbc, 0x38, 0x5c, 0x18, 0x40, 0x07, 0x2c, 0x37, 0x42, 0x97, 0x4f, 0xc8, 0xd4, + 0x4e, 0x79, 0x33, 0x01, 0xbd, 0x07, 0x99, 0x1e, 0xa3, 0x9c, 0x50, 0x3e, 0xe1, 0x2a, 0x5e, 0xac, + 0x68, 0x94, 0xd2, 0x76, 0x3a, 0x52, 0x4a, 0x10, 0x82, 0x38, 0xc5, 0x23, 0x52, 0x58, 0x2d, 0x1a, + 0xa5, 0xa4, 0xad, 0xbe, 0x51, 0x01, 0xd6, 0x2f, 0x48, 0x97, 0x7b, 0x82, 0x14, 0xe2, 0x4a, 0xad, + 0x45, 0x54, 0x84, 0x94, 0x4b, 0x78, 0xcf, 0xf7, 0xc6, 0xc2, 0x63, 0xb4, 0x90, 0x50, 0xd6, 0x79, + 0x95, 0xf4, 0x25, 0x14, 0x77, 0x87, 0xc4, 0x2d, 0x6c, 0x14, 0x8d, 0xd2, 0x86, 0xad, 0x45, 0xd4, + 0x81, 0xdc, 0xd9, 0x84, 0xba, 0x1e, 0xed, 0x3b, 0x5c, 0xf8, 0x04, 0x8f, 0x78, 0x61, 0xad, 0xb8, + 0x5a, 0x4a, 0xed, 0x3e, 0x2b, 0xdf, 0xc6, 0x67, 0xf9, 0xa3, 0xc0, 0xa9, 0xad, 0x7c, 0xec, 0xec, + 0xd9, 0xbc, 0xc8, 0xd1, 0xfb, 0x90, 0xe3, 0xe4, 0x97, 0x13, 0x42, 0x7b, 0xc4, 0x91, 0x41, 0x88, + 0x5f, 0x58, 0x2f, 0x1a, 0xa5, 0x8c, 0x9d, 0xd5, 0xea, 0xa6, 0xd2, 0xa2, 0x36, 0x64, 0xfb, 0xec, + 0x9c, 0xf8, 0x14, 0x4b, 0xa8, 0xa4, 0x23, 0xa9, 0xe8, 0x7d, 0x7e, 0x07, 0xbd, 0x2f, 0x23, 0x27, + 0x49, 0x70, 0xa6, 0x3f, 0x2f, 0x9a, 0x5d, 0xc8, 0x44, 0xd3, 0x77, 0xe0, 0x71, 0x81, 0x3e, 0x85, + 0xec, 0xb9, 0x56, 0xc8, 0x41, 0x78, 0xc1, 0x50, 0x35, 0xde, 0x67, 0x12, 0x33, 0x51, 0x84, 0x4f, + 0xc8, 0x94, 0x9b, 0xbf, 0x8b, 0x41, 0x66, 0x81, 0x03, 0x74, 0x02, 0x20, 0x98, 0x83, 0x5d, 0xd7, + 0x27, 0x9c, 0x87, 0xab, 0xe4, 0xc7, 0xf7, 0x20, 0xb1, 0xdc, 0x61, 0x95, 0xc0, 0x79, 0x7f, 0xc5, + 0x4e, 0x0a, 0x2d, 0xa0, 0x8f, 0x61, 0x4d, 0x30, 0xc7, 0xc5, 0x4c, 0xad, 0x94, 0xd4, 0xee, 0x8b, + 0xfb, 0xc5, 0xac, 0x61, 0xb6, 0xbf, 0x62, 0x27, 0x84, 0xfc, 0x78, 0xf4, 0x53, 0x48, 0x46, 0xa3, + 0xc8, 0x45, 0x31, 0x9f, 0x6d, 0xd2, 0xd6, 0x22, 0x7a, 0x08, 0x1b, 0x3e, 0x16, 0xc4, 0xe9, 0x8e, + 0xb9, 0x1a, 0x34, 0x63, 0xaf, 0x4b, 0xd9, 0x1a, 0xf3, 0x47, 0x26, 0x24, 0x54, 0xcc, 0x5b, 0x30, + 0x56, 0x0a, 0x92, 0x3e, 0xe9, 0x79, 0x63, 0x8f, 0x50, 0x61, 0xfe, 0xcb, 0x80, 0x0d, 0x1b, 0x0b, + 0x52, 0xc3, 0x02, 0xbf, 0xed, 0x5e, 0xda, 0x86, 0x14, 0x19, 0xb3, 0xde, 0xc0, 0xf1, 0xa8, 0x4b, + 0x3e, 0x53, 0x69, 0xc4, 0x6d, 0x50, 0xaa, 0x86, 0xd4, 0xa0, 0x5d, 0xf8, 0xc6, 0x6c, 0xe2, 0x7d, + 0x72, 0x81, 0x7d, 0xd7, 0x91, 0x59, 0xaa, 0x0e, 0x8a, 0xdb, 0x0f, 0x22, 0xa3, 0xad, 0x6c, 0x32, + 0x4f, 0xf4, 0x13, 0xf8, 0xd6, 0xcc, 0x87, 0x7c, 0xd6, 0x1b, 0x60, 0xda, 0x27, 0x81, 0x57, 0x42, + 0x79, 0xcd, 0x42, 0xd6, 0x43, 0xab, 0xf4, 0x33, 0x7f, 0x65, 0x40, 0xda, 0xc2, 0x9c, 0x44, 0xc5, + 0x2e, 0x65, 0x67, 0x5c, 0xc9, 0xae, 0x04, 0xf9, 0x2e, 0xe6, 0x64, 0x21, 0xb1, 0xa0, 0x86, 0xac, + 0xd4, 0xcf, 0xe5, 0xf4, 0x1c, 0x90, 0x42, 0x2e, 0xa6, 0xb3, 0xaa, 0xb0, 0x2a, 0xc6, 0x42, 0x26, + 0x9f, 0xc7, 0x20, 0x17, 0x35, 0x40, 0x5b, 0x60, 0x31, 0xe1, 0x6f, 0x9b, 0x79, 0x0b, 0x12, 0x5c, + 0xe8, 0x7c, 0xaf, 0xb6, 0xeb, 0xd2, 0x9a, 0x5c, 0x48, 0x86, 0xd8, 0x81, 0x2b, 0x7a, 0x17, 0xd2, + 0xe7, 0x4c, 0xc8, 0x9d, 0x67, 0xcc, 0x2e, 0x88, 0x1f, 0x96, 0x93, 0x0a, 0x74, 0x2d, 0xa9, 0x42, + 0x47, 0x90, 0xe9, 0x32, 0xbd, 0x3b, 0xe9, 0x79, 0xbb, 0x9a, 0xf6, 0xd2, 0x70, 0x16, 0x0b, 0x5b, + 0x40, 0x0e, 0x96, 0xee, 0xce, 0x49, 0xe6, 0x5f, 0x62, 0x90, 0x9e, 0x37, 0xa3, 0x4f, 0x75, 0x21, + 0x92, 0x90, 0xec, 0xee, 0x07, 0x6f, 0x1e, 0x79, 0x41, 0xa8, 0xd3, 0xc9, 0x48, 0xd7, 0xf5, 0x1c, + 0x72, 0x13, 0xaa, 0xd3, 0x56, 0xd3, 0x1d, 0xcc, 0xea, 0xfe, 0x8a, 0x9d, 0x8d, 0x0c, 0x75, 0xa9, + 0xff, 0xb5, 0x61, 0x98, 0x9f, 0x1b, 0x90, 0x5f, 0x8e, 0x84, 0x4c, 0xd8, 0xb2, 0x8e, 0x9a, 0xb5, + 0x46, 0xf3, 0xa5, 0xd3, 0xee, 0x54, 0x3a, 0x75, 0xa7, 0xde, 0x3c, 0x3e, 0x74, 0x8e, 0x9b, 0xed, + 0x56, 0xbd, 0xda, 0xf8, 0xa8, 0x51, 0xaf, 0xe5, 0x57, 0xd0, 0x13, 0x78, 0x78, 0x0d, 0x46, 0xaa, + 0xea, 0xb5, 0xbc, 0x81, 0x8a, 0xf0, 0xf8, 0xda, 0x10, 0xa1, 0x32, 0x1f, 0x43, 0xdb, 0xf0, 0xed, + 0x1b, 0x11, 0xf5, 0x5a, 0x7e, 0xd5, 0x42, 0x90, 0x77, 0x96, 0x2a, 0x31, 0xff, 0x1e, 0x83, 0xec, + 0xe2, 0x74, 0xa2, 0xe3, 0x45, 0x0a, 0x3f, 0xbc, 0xcf, 0x5a, 0x58, 0x12, 0xe7, 0x68, 0x34, 0xff, + 0x6d, 0x00, 0xba, 0x6a, 0x45, 0xdf, 0x81, 0xe2, 0x49, 0xe5, 0xa0, 0x51, 0xab, 0x74, 0x8e, 0xec, + 0x9b, 0xc9, 0x79, 0x17, 0x9e, 0x5c, 0x8b, 0x6a, 0x34, 0x2b, 0xd5, 0x4e, 0xe3, 0xa4, 0x9e, 0x37, + 0x64, 0xf9, 0xd7, 0x42, 0x42, 0x40, 0xec, 0x46, 0xc0, 0xc7, 0x95, 0xc6, 0x81, 0xe4, 0x07, 0xbd, + 0x07, 0xdb, 0xd7, 0x02, 0x3a, 0x47, 0x87, 0x56, 0xbb, 0x73, 0xd4, 0xac, 0xd7, 0xf2, 0xf1, 0x1b, + 0x33, 0xa9, 0x35, 0xda, 0x15, 0x4b, 0xc6, 0x49, 0x98, 0x97, 0xc6, 0xdc, 0x81, 0xd5, 0xa0, 0x67, + 0x0c, 0xd5, 0x21, 0x19, 0x6d, 0x32, 0x61, 0xab, 0xbe, 0xff, 0x86, 0xb4, 0xda, 0x33, 0x4f, 0x54, + 0x87, 0x35, 0xae, 0xda, 0x3f, 0x6c, 0xd3, 0x1f, 0xdc, 0x63, 0x6a, 0x26, 0xdc, 0x0e, 0x9d, 0x51, + 0x15, 0x92, 0x6a, 0xab, 0x77, 0xb1, 0xc0, 0xaa, 0x4b, 0x53, 0xbb, 0xdf, 0xbb, 0x3d, 0x92, 0xde, + 0x03, 0x6d, 0x75, 0x46, 0xc8, 0x2f, 0xf3, 0x02, 0x1e, 0x44, 0xf1, 0x6b, 0xe4, 0xcc, 0xa3, 0x9e, + 0xba, 0x99, 0xbc, 0xa5, 0x4a, 0x1f, 0xc2, 0x06, 0x9e, 0x88, 0x81, 0xc3, 0xbd, 0x7e, 0x78, 0xa1, + 0x5a, 0x97, 0x72, 0xdb, 0xeb, 0x9b, 0x5f, 0xc4, 0x60, 0xa3, 0x46, 0x86, 0xa4, 0x2f, 0xd7, 0xea, + 0xcf, 0x00, 0xcd, 0x36, 0x77, 0xbd, 0xa1, 0x7d, 0x85, 0xcd, 0x70, 0x33, 0x8a, 0xa2, 0xb5, 0x77, + 0x1f, 0x46, 0x4d, 0xbd, 0x2f, 0x10, 0xd7, 0xc1, 0x23, 0x36, 0xa1, 0x22, 0x24, 0xf3, 0xbb, 0x77, + 0x0c, 0x5c, 0x51, 0x60, 0xbd, 0x79, 0x10, 0x37, 0x90, 0x91, 0x0d, 0x9b, 0x6e, 0x50, 0x97, 0xc7, + 0xa8, 0x8e, 0x18, 0xbf, 0x4f, 0xc4, 0xfc, 0xcc, 0x3f, 0xd0, 0x98, 0x7f, 0x8a, 0x01, 0x1c, 0x53, + 0xf7, 0x7f, 0x40, 0xd7, 0x53, 0xd8, 0xe4, 0x02, 0xfb, 0xc2, 0xb9, 0x4a, 0x5a, 0x4e, 0x19, 0xea, + 0xff, 0x5f, 0xcc, 0x51, 0xc8, 0xcd, 0x88, 0xab, 0x0e, 0xb1, 0x37, 0x42, 0x75, 0x88, 0x77, 0x99, + 0xab, 0xf9, 0xba, 0xe3, 0xde, 0xb6, 0xe4, 0x6c, 0x31, 0x77, 0x6a, 0x2b, 0x77, 0xf4, 0x0e, 0x24, + 0xc6, 0x3e, 0x63, 0x67, 0xe1, 0xc2, 0x0e, 0x04, 0x79, 0x92, 0x3d, 0xb8, 0xc6, 0xe7, 0xeb, 0x32, + 0x65, 0x1f, 0xc2, 0xfa, 0x98, 0x50, 0x3c, 0x14, 0xd3, 0x1b, 0xa6, 0x6a, 0xa9, 0xfc, 0x56, 0x00, + 0xb6, 0xb5, 0x17, 0x72, 0xe4, 0x95, 0x67, 0xa8, 0x9e, 0x05, 0x3d, 0x36, 0x1a, 0x79, 0x62, 0x44, + 0xa2, 0x49, 0xfa, 0xe1, 0x1d, 0x75, 0x58, 0x81, 0x63, 0x35, 0xf2, 0xb3, 0x37, 0xbb, 0xcb, 0x2a, + 0xf3, 0x0f, 0xab, 0x57, 0x08, 0x6c, 0x0d, 0x31, 0xfd, 0x1a, 0x12, 0x18, 0xff, 0x4a, 0x04, 0xb6, + 0x20, 0x3f, 0x3b, 0xbc, 0xc3, 0x35, 0x9e, 0xb8, 0xcf, 0x1a, 0x9f, 0xdd, 0x62, 0xc2, 0xb6, 0xf9, + 0xbe, 0xbc, 0xaf, 0x06, 0x53, 0xd2, 0x1d, 0x7a, 0xca, 0x52, 0x58, 0x53, 0x6b, 0x32, 0x17, 0xea, + 0xad, 0x50, 0x2d, 0xaf, 0xb6, 0x6a, 0x99, 0x46, 0x40, 0x27, 0x78, 0x01, 0xa6, 0xed, 0xac, 0xd2, + 0x6b, 0xa0, 0x7d, 0x0d, 0x92, 0xab, 0x37, 0xea, 0x32, 0xb2, 0x6d, 0xfe, 0xde, 0x80, 0xcd, 0x5a, + 0xd4, 0x76, 0x55, 0x75, 0xdf, 0xe5, 0x68, 0x5f, 0x3e, 0x7e, 0xb5, 0x52, 0x3f, 0xec, 0xee, 0x38, + 0x9e, 0xf4, 0x71, 0x60, 0xcf, 0xbb, 0xa2, 0x26, 0x64, 0x26, 0x74, 0x3e, 0x56, 0x4c, 0xc5, 0x2a, + 0xbd, 0x69, 0xdf, 0xda, 0x8b, 0xee, 0xe6, 0x10, 0xd6, 0x8e, 0xc7, 0xc2, 0x1b, 0x11, 0xf4, 0x0c, + 0x10, 0xe6, 0x8e, 0xaa, 0x91, 0xf5, 0x5e, 0x39, 0x03, 0xe2, 0xf5, 0x07, 0x22, 0x7c, 0x10, 0xe4, + 0x30, 0x3f, 0x3a, 0xb3, 0xa4, 0x7e, 0x5f, 0xa9, 0xd1, 0x13, 0x80, 0x0b, 0x8f, 0xba, 0xec, 0xc2, + 0x19, 0x12, 0x1a, 0x3e, 0xad, 0x92, 0x81, 0xe6, 0x80, 0x50, 0xf4, 0x4d, 0x58, 0xeb, 0x7a, 0xe2, + 0x9c, 0xf4, 0x54, 0x5f, 0xa5, 0xed, 0x50, 0x32, 0x7f, 0x01, 0xef, 0x54, 0x27, 0xbe, 0x4f, 0xa8, + 0xa8, 0xce, 0xfd, 0x49, 0xe0, 0xc8, 0x86, 0xec, 0xc2, 0xff, 0x06, 0x4d, 0xd1, 0xb3, 0x3b, 0x16, + 0xc1, 0x7c, 0x14, 0x3b, 0x33, 0xff, 0x77, 0x82, 0x9b, 0xdb, 0xb0, 0x1e, 0x2e, 0x37, 0xb9, 0x39, + 0x79, 0x94, 0x12, 0x3f, 0xac, 0x26, 0x10, 0xac, 0x3f, 0xc6, 0xfe, 0x7a, 0xb9, 0x65, 0x7c, 0x79, + 0xb9, 0x65, 0xfc, 0xf3, 0x72, 0xcb, 0xf8, 0xcd, 0xeb, 0xad, 0x95, 0x2f, 0x5f, 0x6f, 0xad, 0xfc, + 0xe3, 0xf5, 0xd6, 0x0a, 0x14, 0x7b, 0x6c, 0x74, 0x2b, 0xa3, 0x16, 0xb4, 0xa5, 0xdc, 0xf2, 0x99, + 0x60, 0x2d, 0xe3, 0xe7, 0x27, 0x7d, 0x4f, 0x0c, 0x26, 0xdd, 0x72, 0x8f, 0x8d, 0x76, 0x7a, 0x8c, + 0x8f, 0x18, 0xdf, 0xf1, 0xc9, 0x10, 0x4f, 0x89, 0xbf, 0x73, 0xbe, 0x1b, 0x7d, 0xf6, 0x06, 0xd8, + 0xa3, 0x7c, 0xe7, 0xb6, 0x9f, 0x45, 0x1f, 0x28, 0x51, 0x4b, 0xbf, 0x8d, 0xad, 0xb6, 0xaa, 0xed, + 0x2f, 0x62, 0x8f, 0x5b, 0x3a, 0x95, 0xaa, 0x4c, 0x45, 0x0d, 0x5d, 0x3e, 0x09, 0x41, 0x7f, 0x9b, + 0x99, 0x4f, 0xa5, 0xf9, 0x54, 0x99, 0x4f, 0xb5, 0xf9, 0x32, 0x56, 0xba, 0xcd, 0x7c, 0xfa, 0xb2, + 0x65, 0x1d, 0x12, 0x81, 0xe5, 0xb5, 0xe9, 0x3f, 0xb1, 0x6d, 0x0d, 0xdd, 0xdb, 0x93, 0xd8, 0xbd, + 0x3d, 0x05, 0xde, 0xdb, 0xd3, 0xe8, 0xee, 0x9a, 0xfa, 0xf9, 0xf4, 0xa3, 0xff, 0x06, 0x00, 0x00, + 0xff, 0xff, 0x34, 0xe3, 0xd1, 0x50, 0xf2, 0x12, 0x00, 0x00, } func (m *Validator) Marshal() (dAtA []byte, err error) { @@ -2453,6 +2472,20 @@ func (m *UndelegateClaimPlan) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.ProofBlindingS) > 0 { + i -= len(m.ProofBlindingS) + copy(dAtA[i:], m.ProofBlindingS) + i = encodeVarintStake(dAtA, i, uint64(len(m.ProofBlindingS))) + i-- + dAtA[i] = 0x42 + } + if len(m.ProofBlindingR) > 0 { + i -= len(m.ProofBlindingR) + copy(dAtA[i:], m.ProofBlindingR) + i = encodeVarintStake(dAtA, i, uint64(len(m.ProofBlindingR))) + i-- + dAtA[i] = 0x3a + } if len(m.BalanceBlinding) > 0 { i -= len(m.BalanceBlinding) copy(dAtA[i:], m.BalanceBlinding) @@ -3047,6 +3080,14 @@ func (m *UndelegateClaimPlan) Size() (n int) { if l > 0 { n += 1 + l + sovStake(uint64(l)) } + l = len(m.ProofBlindingR) + if l > 0 { + n += 1 + l + sovStake(uint64(l)) + } + l = len(m.ProofBlindingS) + if l > 0 { + n += 1 + l + sovStake(uint64(l)) + } return n } @@ -5526,6 +5567,74 @@ func (m *UndelegateClaimPlan) Unmarshal(dAtA []byte) error { m.BalanceBlinding = []byte{} } iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofBlindingR", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStake + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthStake + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthStake + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofBlindingR = append(m.ProofBlindingR[:0], dAtA[iNdEx:postIndex]...) + if m.ProofBlindingR == nil { + m.ProofBlindingR = []byte{} + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofBlindingS", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStake + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthStake + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthStake + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofBlindingS = append(m.ProofBlindingS[:0], dAtA[iNdEx:postIndex]...) + if m.ProofBlindingS == nil { + m.ProofBlindingS = []byte{} + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipStake(dAtA[iNdEx:]) diff --git a/relayer/chains/penumbra/core/transaction/v1alpha1/transaction.pb.go b/relayer/chains/penumbra/core/transaction/v1alpha1/transaction.pb.go index 027751ff9..bb0efd7c7 100644 --- a/relayer/chains/penumbra/core/transaction/v1alpha1/transaction.pb.go +++ b/relayer/chains/penumbra/core/transaction/v1alpha1/transaction.pb.go @@ -184,20 +184,14 @@ func (m *EffectHash) GetInner() []byte { type TransactionBody struct { // A list of actions (state changes) performed by this transaction. Actions []*Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` - // The maximum height that this transaction can be included in the chain. - // - // If zero, there is no maximum. - ExpiryHeight uint64 `protobuf:"varint,2,opt,name=expiry_height,json=expiryHeight,proto3" json:"expiry_height,omitempty"` - // The chain this transaction is intended for. Including this prevents - // replaying a transaction on one chain onto a different chain. - ChainId string `protobuf:"bytes,3,opt,name=chain_id,json=chainId,proto3" json:"chain_id,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 *v1alpha1.Fee `protobuf:"bytes,4,opt,name=fee,proto3" json:"fee,omitempty"` - // A list of clues for use with Fuzzy Message Detection. - FmdClues []*v1alpha1.Clue `protobuf:"bytes,5,rep,name=fmd_clues,json=fmdClues,proto3" json:"fmd_clues,omitempty"` - // Types that are valid to be assigned to XEncryptedMemo: - // *TransactionBody_EncryptedMemo - XEncryptedMemo isTransactionBody_XEncryptedMemo `protobuf_oneof:"_encrypted_memo"` + Fee *v1alpha1.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. + MemoData *MemoData `protobuf:"bytes,5,opt,name=memo_data,json=memoData,proto3" json:"memo_data,omitempty"` } func (m *TransactionBody) Reset() { *m = TransactionBody{} } @@ -233,72 +227,216 @@ func (m *TransactionBody) XXX_DiscardUnknown() { var xxx_messageInfo_TransactionBody proto.InternalMessageInfo -type isTransactionBody_XEncryptedMemo interface { - isTransactionBody_XEncryptedMemo() - MarshalTo([]byte) (int, error) - Size() int -} - -type TransactionBody_EncryptedMemo struct { - EncryptedMemo []byte `protobuf:"bytes,6,opt,name=encrypted_memo,json=encryptedMemo,proto3,oneof" json:"encrypted_memo,omitempty"` -} - -func (*TransactionBody_EncryptedMemo) isTransactionBody_XEncryptedMemo() {} - -func (m *TransactionBody) GetXEncryptedMemo() isTransactionBody_XEncryptedMemo { +func (m *TransactionBody) GetActions() []*Action { if m != nil { - return m.XEncryptedMemo + return m.Actions } return nil } -func (m *TransactionBody) GetActions() []*Action { +func (m *TransactionBody) GetTransactionParameters() *TransactionParameters { if m != nil { - return m.Actions + return m.TransactionParameters } return nil } -func (m *TransactionBody) GetExpiryHeight() uint64 { +func (m *TransactionBody) GetFee() *v1alpha1.Fee { if m != nil { - return m.ExpiryHeight + return m.Fee } - return 0 + return nil } -func (m *TransactionBody) GetChainId() string { +func (m *TransactionBody) GetDetectionData() *DetectionData { if m != nil { - return m.ChainId + return m.DetectionData } - return "" + return nil } -func (m *TransactionBody) GetFee() *v1alpha1.Fee { +func (m *TransactionBody) GetMemoData() *MemoData { if m != nil { - return m.Fee + return m.MemoData } return nil } -func (m *TransactionBody) GetFmdClues() []*v1alpha1.Clue { +// Represents the encrypted memo data. +type MemoData struct { + // Types that are valid to be assigned to XEncryptedMemo: + // *MemoData_EncryptedMemo + XEncryptedMemo isMemoData_XEncryptedMemo `protobuf_oneof:"_encrypted_memo"` +} + +func (m *MemoData) Reset() { *m = MemoData{} } +func (m *MemoData) String() string { return proto.CompactTextString(m) } +func (*MemoData) ProtoMessage() {} +func (*MemoData) Descriptor() ([]byte, []int) { + return fileDescriptor_cd20ea79758052c4, []int{4} +} +func (m *MemoData) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MemoData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MemoData.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MemoData) XXX_Merge(src proto.Message) { + xxx_messageInfo_MemoData.Merge(m, src) +} +func (m *MemoData) XXX_Size() int { + return m.Size() +} +func (m *MemoData) XXX_DiscardUnknown() { + xxx_messageInfo_MemoData.DiscardUnknown(m) +} + +var xxx_messageInfo_MemoData proto.InternalMessageInfo + +type isMemoData_XEncryptedMemo interface { + isMemoData_XEncryptedMemo() + MarshalTo([]byte) (int, error) + Size() int +} + +type MemoData_EncryptedMemo struct { + EncryptedMemo []byte `protobuf:"bytes,1,opt,name=encrypted_memo,json=encryptedMemo,proto3,oneof" json:"encrypted_memo,omitempty"` +} + +func (*MemoData_EncryptedMemo) isMemoData_XEncryptedMemo() {} + +func (m *MemoData) GetXEncryptedMemo() isMemoData_XEncryptedMemo { if m != nil { - return m.FmdClues + return m.XEncryptedMemo } return nil } -func (m *TransactionBody) GetEncryptedMemo() []byte { - if x, ok := m.GetXEncryptedMemo().(*TransactionBody_EncryptedMemo); ok { +func (m *MemoData) GetEncryptedMemo() []byte { + if x, ok := m.GetXEncryptedMemo().(*MemoData_EncryptedMemo); ok { return x.EncryptedMemo } return nil } // XXX_OneofWrappers is for the internal use of the proto package. -func (*TransactionBody) XXX_OneofWrappers() []interface{} { +func (*MemoData) XXX_OneofWrappers() []interface{} { return []interface{}{ - (*TransactionBody_EncryptedMemo)(nil), + (*MemoData_EncryptedMemo)(nil), + } +} + +// The parameters determining if a transaction should be accepted by the chain. +type TransactionParameters struct { + // The maximum height that this transaction can be included in the chain. + // + // If zero, there is no maximum. + ExpiryHeight uint64 `protobuf:"varint,1,opt,name=expiry_height,json=expiryHeight,proto3" json:"expiry_height,omitempty"` + // 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"` +} + +func (m *TransactionParameters) Reset() { *m = TransactionParameters{} } +func (m *TransactionParameters) String() string { return proto.CompactTextString(m) } +func (*TransactionParameters) ProtoMessage() {} +func (*TransactionParameters) Descriptor() ([]byte, []int) { + return fileDescriptor_cd20ea79758052c4, []int{5} +} +func (m *TransactionParameters) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TransactionParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TransactionParameters.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TransactionParameters) XXX_Merge(src proto.Message) { + xxx_messageInfo_TransactionParameters.Merge(m, src) +} +func (m *TransactionParameters) XXX_Size() int { + return m.Size() +} +func (m *TransactionParameters) XXX_DiscardUnknown() { + xxx_messageInfo_TransactionParameters.DiscardUnknown(m) +} + +var xxx_messageInfo_TransactionParameters proto.InternalMessageInfo + +func (m *TransactionParameters) GetExpiryHeight() uint64 { + if m != nil { + return m.ExpiryHeight + } + return 0 +} + +func (m *TransactionParameters) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +// Detection data used by a detection server performing Fuzzy Message Detection. +type DetectionData struct { + // A list of clues for use with Fuzzy Message Detection. + FmdClues []*v1alpha1.Clue `protobuf:"bytes,4,rep,name=fmd_clues,json=fmdClues,proto3" json:"fmd_clues,omitempty"` +} + +func (m *DetectionData) Reset() { *m = DetectionData{} } +func (m *DetectionData) String() string { return proto.CompactTextString(m) } +func (*DetectionData) ProtoMessage() {} +func (*DetectionData) Descriptor() ([]byte, []int) { + return fileDescriptor_cd20ea79758052c4, []int{6} +} +func (m *DetectionData) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DetectionData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DetectionData.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *DetectionData) XXX_Merge(src proto.Message) { + xxx_messageInfo_DetectionData.Merge(m, src) +} +func (m *DetectionData) XXX_Size() int { + return m.Size() +} +func (m *DetectionData) XXX_DiscardUnknown() { + xxx_messageInfo_DetectionData.DiscardUnknown(m) +} + +var xxx_messageInfo_DetectionData proto.InternalMessageInfo + +func (m *DetectionData) GetFmdClues() []*v1alpha1.Clue { + if m != nil { + return m.FmdClues } + return nil } // A state change performed by a transaction. @@ -333,7 +471,7 @@ func (m *Action) Reset() { *m = Action{} } func (m *Action) String() string { return proto.CompactTextString(m) } func (*Action) ProtoMessage() {} func (*Action) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{4} + return fileDescriptor_cd20ea79758052c4, []int{7} } func (m *Action) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -667,7 +805,7 @@ func (m *TransactionPerspective) Reset() { *m = TransactionPerspective{} func (m *TransactionPerspective) String() string { return proto.CompactTextString(m) } func (*TransactionPerspective) ProtoMessage() {} func (*TransactionPerspective) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{5} + return fileDescriptor_cd20ea79758052c4, []int{8} } func (m *TransactionPerspective) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -746,7 +884,7 @@ func (m *PayloadKey) Reset() { *m = PayloadKey{} } func (m *PayloadKey) String() string { return proto.CompactTextString(m) } func (*PayloadKey) ProtoMessage() {} func (*PayloadKey) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{6} + return fileDescriptor_cd20ea79758052c4, []int{9} } func (m *PayloadKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -791,7 +929,7 @@ func (m *PayloadKeyWithCommitment) Reset() { *m = PayloadKeyWithCommitme func (m *PayloadKeyWithCommitment) String() string { return proto.CompactTextString(m) } func (*PayloadKeyWithCommitment) ProtoMessage() {} func (*PayloadKeyWithCommitment) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{7} + return fileDescriptor_cd20ea79758052c4, []int{10} } func (m *PayloadKeyWithCommitment) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -843,7 +981,7 @@ func (m *NullifierWithNote) Reset() { *m = NullifierWithNote{} } func (m *NullifierWithNote) String() string { return proto.CompactTextString(m) } func (*NullifierWithNote) ProtoMessage() {} func (*NullifierWithNote) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{8} + return fileDescriptor_cd20ea79758052c4, []int{11} } func (m *NullifierWithNote) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -901,7 +1039,7 @@ func (m *TransactionView) Reset() { *m = TransactionView{} } func (m *TransactionView) String() string { return proto.CompactTextString(m) } func (*TransactionView) ProtoMessage() {} func (*TransactionView) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{9} + return fileDescriptor_cd20ea79758052c4, []int{12} } func (m *TransactionView) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -954,17 +1092,14 @@ func (m *TransactionView) GetAnchor() *v1alpha1.MerkleRoot { type TransactionBodyView struct { // A list views into of actions (state changes) performed by this transaction. ActionViews []*ActionView `protobuf:"bytes,1,rep,name=action_views,json=actionViews,proto3" json:"action_views,omitempty"` - // The maximum height that this transaction can be included in the chain. - // - // If zero, there is no maximum. - ExpiryHeight uint64 `protobuf:"varint,2,opt,name=expiry_height,json=expiryHeight,proto3" json:"expiry_height,omitempty"` - // The chain this transaction is intended for. Including this prevents - // replaying a transaction on one chain onto a different chain. - ChainId string `protobuf:"bytes,3,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + // Transaction parameters. + TransactionParameters *TransactionParameters `protobuf:"bytes,2,opt,name=transaction_parameters,json=transactionParameters,proto3" json:"transaction_parameters,omitempty"` // The transaction fee. - Fee *v1alpha1.Fee `protobuf:"bytes,4,opt,name=fee,proto3" json:"fee,omitempty"` - // A list of clues for use with Fuzzy Message Detection. - FmdClues []*v1alpha1.Clue `protobuf:"bytes,5,rep,name=fmd_clues,json=fmdClues,proto3" json:"fmd_clues,omitempty"` + Fee *v1alpha1.Fee `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"` + // Types that are valid to be assigned to XDetectionData: + // + // *TransactionBodyView_DetectionData + XDetectionData isTransactionBodyView_XDetectionData `protobuf_oneof:"_detection_data"` // Types that are valid to be assigned to XMemoView: // // *TransactionBodyView_MemoView @@ -975,7 +1110,7 @@ func (m *TransactionBodyView) Reset() { *m = TransactionBodyView{} } func (m *TransactionBodyView) String() string { return proto.CompactTextString(m) } func (*TransactionBodyView) ProtoMessage() {} func (*TransactionBodyView) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{10} + return fileDescriptor_cd20ea79758052c4, []int{13} } func (m *TransactionBodyView) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1004,18 +1139,33 @@ func (m *TransactionBodyView) XXX_DiscardUnknown() { var xxx_messageInfo_TransactionBodyView proto.InternalMessageInfo +type isTransactionBodyView_XDetectionData interface { + isTransactionBodyView_XDetectionData() + MarshalTo([]byte) (int, error) + Size() int +} type isTransactionBodyView_XMemoView interface { isTransactionBodyView_XMemoView() MarshalTo([]byte) (int, error) Size() int } +type TransactionBodyView_DetectionData struct { + DetectionData *DetectionData `protobuf:"bytes,4,opt,name=detection_data,json=detectionData,proto3,oneof" json:"detection_data,omitempty"` +} type TransactionBodyView_MemoView struct { - MemoView *MemoView `protobuf:"bytes,6,opt,name=memo_view,json=memoView,proto3,oneof" json:"memo_view,omitempty"` + MemoView *MemoView `protobuf:"bytes,5,opt,name=memo_view,json=memoView,proto3,oneof" json:"memo_view,omitempty"` } -func (*TransactionBodyView_MemoView) isTransactionBodyView_XMemoView() {} +func (*TransactionBodyView_DetectionData) isTransactionBodyView_XDetectionData() {} +func (*TransactionBodyView_MemoView) isTransactionBodyView_XMemoView() {} +func (m *TransactionBodyView) GetXDetectionData() isTransactionBodyView_XDetectionData { + if m != nil { + return m.XDetectionData + } + return nil +} func (m *TransactionBodyView) GetXMemoView() isTransactionBodyView_XMemoView { if m != nil { return m.XMemoView @@ -1030,18 +1180,11 @@ func (m *TransactionBodyView) GetActionViews() []*ActionView { return nil } -func (m *TransactionBodyView) GetExpiryHeight() uint64 { - if m != nil { - return m.ExpiryHeight - } - return 0 -} - -func (m *TransactionBodyView) GetChainId() string { +func (m *TransactionBodyView) GetTransactionParameters() *TransactionParameters { if m != nil { - return m.ChainId + return m.TransactionParameters } - return "" + return nil } func (m *TransactionBodyView) GetFee() *v1alpha1.Fee { @@ -1051,9 +1194,9 @@ func (m *TransactionBodyView) GetFee() *v1alpha1.Fee { return nil } -func (m *TransactionBodyView) GetFmdClues() []*v1alpha1.Clue { - if m != nil { - return m.FmdClues +func (m *TransactionBodyView) GetDetectionData() *DetectionData { + if x, ok := m.GetXDetectionData().(*TransactionBodyView_DetectionData); ok { + return x.DetectionData } return nil } @@ -1068,6 +1211,7 @@ func (m *TransactionBodyView) GetMemoView() *MemoView { // XXX_OneofWrappers is for the internal use of the proto package. func (*TransactionBodyView) XXX_OneofWrappers() []interface{} { return []interface{}{ + (*TransactionBodyView_DetectionData)(nil), (*TransactionBodyView_MemoView)(nil), } } @@ -1105,7 +1249,7 @@ func (m *ActionView) Reset() { *m = ActionView{} } func (m *ActionView) String() string { return proto.CompactTextString(m) } func (*ActionView) ProtoMessage() {} func (*ActionView) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{11} + return fileDescriptor_cd20ea79758052c4, []int{14} } func (m *ActionView) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1431,7 +1575,7 @@ func (m *SpendView) Reset() { *m = SpendView{} } func (m *SpendView) String() string { return proto.CompactTextString(m) } func (*SpendView) ProtoMessage() {} func (*SpendView) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{12} + return fileDescriptor_cd20ea79758052c4, []int{15} } func (m *SpendView) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1514,7 +1658,7 @@ func (m *SpendView_Visible) Reset() { *m = SpendView_Visible{} } func (m *SpendView_Visible) String() string { return proto.CompactTextString(m) } func (*SpendView_Visible) ProtoMessage() {} func (*SpendView_Visible) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{12, 0} + return fileDescriptor_cd20ea79758052c4, []int{15, 0} } func (m *SpendView_Visible) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1565,7 +1709,7 @@ func (m *SpendView_Opaque) Reset() { *m = SpendView_Opaque{} } func (m *SpendView_Opaque) String() string { return proto.CompactTextString(m) } func (*SpendView_Opaque) ProtoMessage() {} func (*SpendView_Opaque) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{12, 1} + return fileDescriptor_cd20ea79758052c4, []int{15, 1} } func (m *SpendView_Opaque) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1613,7 +1757,7 @@ func (m *DelegatorVoteView) Reset() { *m = DelegatorVoteView{} } func (m *DelegatorVoteView) String() string { return proto.CompactTextString(m) } func (*DelegatorVoteView) ProtoMessage() {} func (*DelegatorVoteView) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{13} + return fileDescriptor_cd20ea79758052c4, []int{16} } func (m *DelegatorVoteView) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1696,7 +1840,7 @@ func (m *DelegatorVoteView_Visible) Reset() { *m = DelegatorVoteView_Vis func (m *DelegatorVoteView_Visible) String() string { return proto.CompactTextString(m) } func (*DelegatorVoteView_Visible) ProtoMessage() {} func (*DelegatorVoteView_Visible) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{13, 0} + return fileDescriptor_cd20ea79758052c4, []int{16, 0} } func (m *DelegatorVoteView_Visible) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1747,7 +1891,7 @@ func (m *DelegatorVoteView_Opaque) Reset() { *m = DelegatorVoteView_Opaq func (m *DelegatorVoteView_Opaque) String() string { return proto.CompactTextString(m) } func (*DelegatorVoteView_Opaque) ProtoMessage() {} func (*DelegatorVoteView_Opaque) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{13, 1} + return fileDescriptor_cd20ea79758052c4, []int{16, 1} } func (m *DelegatorVoteView_Opaque) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1795,7 +1939,7 @@ func (m *OutputView) Reset() { *m = OutputView{} } func (m *OutputView) String() string { return proto.CompactTextString(m) } func (*OutputView) ProtoMessage() {} func (*OutputView) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{14} + return fileDescriptor_cd20ea79758052c4, []int{17} } func (m *OutputView) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1879,7 +2023,7 @@ func (m *OutputView_Visible) Reset() { *m = OutputView_Visible{} } func (m *OutputView_Visible) String() string { return proto.CompactTextString(m) } func (*OutputView_Visible) ProtoMessage() {} func (*OutputView_Visible) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{14, 0} + return fileDescriptor_cd20ea79758052c4, []int{17, 0} } func (m *OutputView_Visible) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1937,7 +2081,7 @@ func (m *OutputView_Opaque) Reset() { *m = OutputView_Opaque{} } func (m *OutputView_Opaque) String() string { return proto.CompactTextString(m) } func (*OutputView_Opaque) ProtoMessage() {} func (*OutputView_Opaque) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{14, 1} + return fileDescriptor_cd20ea79758052c4, []int{17, 1} } func (m *OutputView_Opaque) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1987,7 +2131,7 @@ func (m *Spend) Reset() { *m = Spend{} } func (m *Spend) String() string { return proto.CompactTextString(m) } func (*Spend) ProtoMessage() {} func (*Spend) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{15} + return fileDescriptor_cd20ea79758052c4, []int{18} } func (m *Spend) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2053,7 +2197,7 @@ func (m *SpendBody) Reset() { *m = SpendBody{} } func (m *SpendBody) String() string { return proto.CompactTextString(m) } func (*SpendBody) ProtoMessage() {} func (*SpendBody) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{16} + return fileDescriptor_cd20ea79758052c4, []int{19} } func (m *SpendBody) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2115,7 +2259,7 @@ func (m *Output) Reset() { *m = Output{} } func (m *Output) String() string { return proto.CompactTextString(m) } func (*Output) ProtoMessage() {} func (*Output) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{17} + return fileDescriptor_cd20ea79758052c4, []int{20} } func (m *Output) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2177,7 +2321,7 @@ func (m *OutputBody) Reset() { *m = OutputBody{} } func (m *OutputBody) String() string { return proto.CompactTextString(m) } func (*OutputBody) ProtoMessage() {} func (*OutputBody) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{18} + return fileDescriptor_cd20ea79758052c4, []int{21} } func (m *OutputBody) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2250,7 +2394,7 @@ func (m *AuthorizationData) Reset() { *m = AuthorizationData{} } func (m *AuthorizationData) String() string { return proto.CompactTextString(m) } func (*AuthorizationData) ProtoMessage() {} func (*AuthorizationData) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{19} + return fileDescriptor_cd20ea79758052c4, []int{22} } func (m *AuthorizationData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2313,7 +2457,7 @@ func (m *WitnessData) Reset() { *m = WitnessData{} } func (m *WitnessData) String() string { return proto.CompactTextString(m) } func (*WitnessData) ProtoMessage() {} func (*WitnessData) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{20} + return fileDescriptor_cd20ea79758052c4, []int{23} } func (m *WitnessData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2370,7 +2514,7 @@ func (m *TransactionPlan) Reset() { *m = TransactionPlan{} } func (m *TransactionPlan) String() string { return proto.CompactTextString(m) } func (*TransactionPlan) ProtoMessage() {} func (*TransactionPlan) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{21} + return fileDescriptor_cd20ea79758052c4, []int{24} } func (m *TransactionPlan) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2477,7 +2621,7 @@ func (m *ActionPlan) Reset() { *m = ActionPlan{} } func (m *ActionPlan) String() string { return proto.CompactTextString(m) } func (*ActionPlan) ProtoMessage() {} func (*ActionPlan) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{22} + return fileDescriptor_cd20ea79758052c4, []int{25} } func (m *ActionPlan) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2805,7 +2949,7 @@ func (m *CluePlan) Reset() { *m = CluePlan{} } func (m *CluePlan) String() string { return proto.CompactTextString(m) } func (*CluePlan) ProtoMessage() {} func (*CluePlan) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{23} + return fileDescriptor_cd20ea79758052c4, []int{26} } func (m *CluePlan) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2867,7 +3011,7 @@ func (m *MemoPlan) Reset() { *m = MemoPlan{} } func (m *MemoPlan) String() string { return proto.CompactTextString(m) } func (*MemoPlan) ProtoMessage() {} func (*MemoPlan) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{24} + return fileDescriptor_cd20ea79758052c4, []int{27} } func (m *MemoPlan) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2918,7 +3062,7 @@ func (m *MemoCiphertext) Reset() { *m = MemoCiphertext{} } func (m *MemoCiphertext) String() string { return proto.CompactTextString(m) } func (*MemoCiphertext) ProtoMessage() {} func (*MemoCiphertext) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{25} + return fileDescriptor_cd20ea79758052c4, []int{28} } func (m *MemoCiphertext) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2963,7 +3107,7 @@ func (m *MemoPlaintext) Reset() { *m = MemoPlaintext{} } func (m *MemoPlaintext) String() string { return proto.CompactTextString(m) } func (*MemoPlaintext) ProtoMessage() {} func (*MemoPlaintext) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{26} + return fileDescriptor_cd20ea79758052c4, []int{29} } func (m *MemoPlaintext) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3018,7 +3162,7 @@ func (m *MemoView) Reset() { *m = MemoView{} } func (m *MemoView) String() string { return proto.CompactTextString(m) } func (*MemoView) ProtoMessage() {} func (*MemoView) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{27} + return fileDescriptor_cd20ea79758052c4, []int{30} } func (m *MemoView) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3101,7 +3245,7 @@ func (m *MemoView_Visible) Reset() { *m = MemoView_Visible{} } func (m *MemoView_Visible) String() string { return proto.CompactTextString(m) } func (*MemoView_Visible) ProtoMessage() {} func (*MemoView_Visible) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{27, 0} + return fileDescriptor_cd20ea79758052c4, []int{30, 0} } func (m *MemoView_Visible) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3152,7 +3296,7 @@ func (m *MemoView_Opaque) Reset() { *m = MemoView_Opaque{} } func (m *MemoView_Opaque) String() string { return proto.CompactTextString(m) } func (*MemoView_Opaque) ProtoMessage() {} func (*MemoView_Opaque) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{27, 1} + return fileDescriptor_cd20ea79758052c4, []int{30, 1} } func (m *MemoView_Opaque) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3197,13 +3341,17 @@ type SpendPlan struct { Randomizer []byte `protobuf:"bytes,3,opt,name=randomizer,proto3" json:"randomizer,omitempty"` // The blinding factor to use for the value commitment. ValueBlinding []byte `protobuf:"bytes,4,opt,name=value_blinding,json=valueBlinding,proto3" json:"value_blinding,omitempty"` + // The first blinding factor to use for the ZK spend proof. + ProofBlindingR []byte `protobuf:"bytes,5,opt,name=proof_blinding_r,json=proofBlindingR,proto3" json:"proof_blinding_r,omitempty"` + // The second blinding factor to use for the ZK spend proof. + ProofBlindingS []byte `protobuf:"bytes,6,opt,name=proof_blinding_s,json=proofBlindingS,proto3" json:"proof_blinding_s,omitempty"` } func (m *SpendPlan) Reset() { *m = SpendPlan{} } func (m *SpendPlan) String() string { return proto.CompactTextString(m) } func (*SpendPlan) ProtoMessage() {} func (*SpendPlan) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{28} + return fileDescriptor_cd20ea79758052c4, []int{31} } func (m *SpendPlan) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3260,6 +3408,20 @@ func (m *SpendPlan) GetValueBlinding() []byte { return nil } +func (m *SpendPlan) GetProofBlindingR() []byte { + if m != nil { + return m.ProofBlindingR + } + return nil +} + +func (m *SpendPlan) GetProofBlindingS() []byte { + if m != nil { + return m.ProofBlindingS + } + return nil +} + type OutputPlan struct { // The value to send to this output. Value *v1alpha1.Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` @@ -3269,13 +3431,17 @@ type OutputPlan struct { Rseed []byte `protobuf:"bytes,3,opt,name=rseed,proto3" json:"rseed,omitempty"` // The blinding factor to use for the value commitment. ValueBlinding []byte `protobuf:"bytes,4,opt,name=value_blinding,json=valueBlinding,proto3" json:"value_blinding,omitempty"` + // The first blinding factor to use for the ZK output proof. + ProofBlindingR []byte `protobuf:"bytes,5,opt,name=proof_blinding_r,json=proofBlindingR,proto3" json:"proof_blinding_r,omitempty"` + // The second blinding factor to use for the ZK output proof. + ProofBlindingS []byte `protobuf:"bytes,6,opt,name=proof_blinding_s,json=proofBlindingS,proto3" json:"proof_blinding_s,omitempty"` } func (m *OutputPlan) Reset() { *m = OutputPlan{} } func (m *OutputPlan) String() string { return proto.CompactTextString(m) } func (*OutputPlan) ProtoMessage() {} func (*OutputPlan) Descriptor() ([]byte, []int) { - return fileDescriptor_cd20ea79758052c4, []int{29} + return fileDescriptor_cd20ea79758052c4, []int{32} } func (m *OutputPlan) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3332,11 +3498,28 @@ func (m *OutputPlan) GetValueBlinding() []byte { return nil } +func (m *OutputPlan) GetProofBlindingR() []byte { + if m != nil { + return m.ProofBlindingR + } + return nil +} + +func (m *OutputPlan) GetProofBlindingS() []byte { + if m != nil { + return m.ProofBlindingS + } + return nil +} + func init() { proto.RegisterType((*Transaction)(nil), "penumbra.core.transaction.v1alpha1.Transaction") proto.RegisterType((*Id)(nil), "penumbra.core.transaction.v1alpha1.Id") proto.RegisterType((*EffectHash)(nil), "penumbra.core.transaction.v1alpha1.EffectHash") proto.RegisterType((*TransactionBody)(nil), "penumbra.core.transaction.v1alpha1.TransactionBody") + proto.RegisterType((*MemoData)(nil), "penumbra.core.transaction.v1alpha1.MemoData") + proto.RegisterType((*TransactionParameters)(nil), "penumbra.core.transaction.v1alpha1.TransactionParameters") + proto.RegisterType((*DetectionData)(nil), "penumbra.core.transaction.v1alpha1.DetectionData") proto.RegisterType((*Action)(nil), "penumbra.core.transaction.v1alpha1.Action") proto.RegisterType((*TransactionPerspective)(nil), "penumbra.core.transaction.v1alpha1.TransactionPerspective") proto.RegisterType((*PayloadKey)(nil), "penumbra.core.transaction.v1alpha1.PayloadKey") @@ -3378,173 +3561,182 @@ func init() { } var fileDescriptor_cd20ea79758052c4 = []byte{ - // 2656 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4f, 0x6f, 0x1c, 0x49, - 0x15, 0x9f, 0x9e, 0xb1, 0xc7, 0xf6, 0x9b, 0xf1, 0xbf, 0x8a, 0x93, 0x1d, 0x2c, 0xe4, 0x8d, 0x7a, - 0x93, 0xe0, 0x24, 0xbb, 0xe3, 0xc4, 0x76, 0x36, 0x92, 0x77, 0x81, 0xf5, 0xd8, 0x9b, 0x1d, 0x27, - 0xeb, 0x78, 0xb6, 0x13, 0x1c, 0x25, 0x98, 0x6d, 0x6a, 0xba, 0xcb, 0x9e, 0x96, 0x7b, 0xba, 0x9b, - 0xee, 0x9e, 0x71, 0xbc, 0x5f, 0x00, 0xb8, 0xa0, 0x45, 0xe2, 0x80, 0xb8, 0x20, 0x71, 0x41, 0xe2, - 0xc0, 0x07, 0x00, 0x71, 0x66, 0x05, 0x12, 0x8a, 0xc4, 0x05, 0x69, 0x85, 0x04, 0xc9, 0x89, 0x3f, - 0x17, 0xbe, 0x00, 0x42, 0x55, 0x5d, 0xfd, 0x77, 0xda, 0x99, 0x1e, 0x3b, 0x61, 0x95, 0x4d, 0x4e, - 0xae, 0x7a, 0xf3, 0xde, 0xaf, 0xaa, 0xde, 0x7b, 0x55, 0xf5, 0xde, 0xab, 0x36, 0x2c, 0x5b, 0xc4, - 0xe8, 0xb4, 0x9b, 0x36, 0x5e, 0x50, 0x4c, 0x9b, 0x2c, 0xb8, 0x36, 0x36, 0x1c, 0xac, 0xb8, 0x9a, - 0x69, 0x2c, 0x74, 0xaf, 0x62, 0xdd, 0x6a, 0xe1, 0xab, 0x51, 0x62, 0xd5, 0xb2, 0x4d, 0xd7, 0x44, - 0xa2, 0x2f, 0x55, 0xa5, 0x52, 0xd5, 0x28, 0x83, 0x2f, 0x35, 0x7b, 0x29, 0x8e, 0xac, 0xd8, 0x87, - 0x96, 0x6b, 0x86, 0xa0, 0x5e, 0xdf, 0xc3, 0x9b, 0x9d, 0x8f, 0xf3, 0x3a, 0x2e, 0xde, 0x27, 0x21, - 0x2b, 0xeb, 0x72, 0xce, 0x73, 0x71, 0x4e, 0xad, 0xa9, 0x84, 0x7c, 0x5a, 0x53, 0x49, 0xe7, 0x52, - 0xc9, 0xc3, 0x90, 0x4b, 0x25, 0x0f, 0x39, 0xd7, 0x62, 0x9c, 0x6b, 0xcf, 0xec, 0x12, 0xdb, 0xc0, - 0x86, 0x12, 0x19, 0x3a, 0xa4, 0x79, 0x32, 0xe2, 0x6f, 0x04, 0x28, 0xdd, 0x0d, 0x97, 0x8b, 0x3e, - 0x80, 0xa1, 0xa6, 0xa9, 0x1e, 0x56, 0x84, 0xb3, 0xc2, 0x7c, 0x69, 0x71, 0xa9, 0xda, 0x5f, 0x31, - 0xd5, 0x88, 0x78, 0xcd, 0x54, 0x0f, 0x25, 0x06, 0x80, 0x5e, 0x87, 0x52, 0x53, 0x33, 0x54, 0xcd, - 0xd8, 0x93, 0x1d, 0x6d, 0xaf, 0x92, 0x3f, 0x2b, 0xcc, 0x97, 0x25, 0xe0, 0xa4, 0x3b, 0xda, 0x1e, - 0x5a, 0x85, 0x22, 0x36, 0x94, 0x96, 0x69, 0x57, 0x0a, 0x6c, 0xac, 0x8b, 0x89, 0xb1, 0xb8, 0x42, - 0x83, 0x61, 0x36, 0x89, 0xbd, 0xaf, 0x13, 0xc9, 0x34, 0x5d, 0x89, 0x0b, 0x8a, 0x15, 0xc8, 0x6f, - 0xa8, 0x08, 0xc1, 0x50, 0x0b, 0x3b, 0x2d, 0x36, 0xe5, 0xb2, 0xc4, 0xda, 0xa2, 0x08, 0xf0, 0xfe, - 0xee, 0x2e, 0x51, 0xdc, 0x3a, 0x76, 0x5a, 0x68, 0x06, 0x86, 0x35, 0xc3, 0x20, 0x36, 0x67, 0xf1, - 0x3a, 0xe2, 0x9f, 0xf2, 0x30, 0x99, 0x98, 0x3b, 0x5a, 0x87, 0x11, 0xaf, 0xe7, 0x54, 0x84, 0xb3, - 0x85, 0xf9, 0xd2, 0xe2, 0xa5, 0x2c, 0x1a, 0x58, 0x65, 0x7d, 0xc9, 0x17, 0x45, 0x6f, 0xc0, 0x38, - 0x79, 0x68, 0x69, 0xf6, 0xa1, 0xdc, 0x22, 0xda, 0x5e, 0xcb, 0x65, 0xab, 0x1f, 0x92, 0xca, 0x1e, - 0xb1, 0xce, 0x68, 0xe8, 0x2b, 0x30, 0xaa, 0xb4, 0xb0, 0x66, 0xc8, 0x9a, 0xca, 0x34, 0x30, 0x26, - 0x8d, 0xb0, 0xfe, 0x86, 0x8a, 0x96, 0xa1, 0xb0, 0x4b, 0x48, 0x65, 0x88, 0xe9, 0x45, 0xec, 0xa3, - 0x97, 0x1b, 0x84, 0x48, 0x94, 0x1d, 0xbd, 0x07, 0x63, 0xbb, 0x6d, 0x55, 0x56, 0xf4, 0x0e, 0x71, - 0x2a, 0xc3, 0x6c, 0xf6, 0x6f, 0xf4, 0x91, 0x5d, 0xd3, 0x3b, 0x44, 0x1a, 0xdd, 0x6d, 0xab, 0xb4, - 0xe1, 0xa0, 0x4b, 0x30, 0x41, 0x0c, 0xc6, 0x43, 0x54, 0xb9, 0x4d, 0xda, 0x66, 0xa5, 0x48, 0x15, - 0x56, 0xcf, 0x49, 0xe3, 0x01, 0x7d, 0x93, 0xb4, 0xcd, 0x1f, 0x08, 0x42, 0x6d, 0x1a, 0x26, 0xe5, - 0x38, 0xb3, 0xf8, 0xe7, 0x09, 0x28, 0x7a, 0xaa, 0x40, 0xab, 0x30, 0xec, 0x58, 0xc4, 0x50, 0xb9, - 0x1f, 0x5d, 0xcc, 0xa2, 0xc5, 0x3b, 0x54, 0xa0, 0x9e, 0x93, 0x3c, 0x49, 0xb4, 0x0e, 0x45, 0xb3, - 0xe3, 0x5a, 0x1d, 0x4f, 0x7b, 0x19, 0x2d, 0xb1, 0xc5, 0x24, 0xea, 0x39, 0x89, 0xcb, 0xa2, 0xb7, - 0x61, 0xc8, 0x39, 0xc0, 0x16, 0xf7, 0xb1, 0xb3, 0x09, 0x0c, 0xba, 0x77, 0xc2, 0xf1, 0x0f, 0xb0, - 0x55, 0xcf, 0x49, 0x8c, 0x1f, 0xdd, 0x00, 0xa0, 0x7f, 0x65, 0x45, 0xc7, 0x5a, 0x9b, 0x5b, 0xe2, - 0x7c, 0x3f, 0xe9, 0x35, 0xca, 0x5c, 0xcf, 0x49, 0x63, 0x8e, 0xdf, 0x41, 0xbb, 0x30, 0xd3, 0xc5, - 0xba, 0xa6, 0x62, 0xd7, 0xb4, 0x65, 0x95, 0xec, 0x6a, 0x86, 0x46, 0x67, 0x5c, 0x99, 0x62, 0x88, - 0x57, 0x13, 0x88, 0xde, 0xc9, 0x10, 0x60, 0x6e, 0xfb, 0x92, 0xeb, 0x81, 0x60, 0x3d, 0x27, 0x9d, - 0xea, 0xf6, 0x92, 0xe9, 0x7c, 0xb5, 0xa6, 0x22, 0x7b, 0xfa, 0xa8, 0x4c, 0xa7, 0xce, 0x97, 0x9e, - 0x27, 0x01, 0xf6, 0x46, 0x53, 0xf1, 0x6c, 0x45, 0xe7, 0xab, 0xf9, 0x1d, 0xb4, 0x03, 0x93, 0x96, - 0x6d, 0x5a, 0xa6, 0x83, 0x75, 0xd9, 0xe9, 0x34, 0xdb, 0x9a, 0x5b, 0x41, 0xa9, 0x53, 0x8d, 0x9c, - 0x24, 0x01, 0x66, 0x83, 0x4b, 0xde, 0x61, 0x82, 0xf5, 0x9c, 0x34, 0x61, 0xc5, 0x28, 0xa8, 0x09, - 0xd3, 0x01, 0xfa, 0x81, 0xe6, 0xb6, 0x54, 0x1b, 0x1f, 0x54, 0x4e, 0xa5, 0x1e, 0x35, 0x4f, 0xc3, - 0xbf, 0xc7, 0x45, 0xeb, 0x39, 0x69, 0xca, 0x4a, 0xd0, 0xd0, 0x7d, 0x98, 0x08, 0x35, 0xde, 0x35, - 0x5d, 0x52, 0x99, 0x61, 0x03, 0x5c, 0xc9, 0x30, 0x40, 0xa0, 0xf0, 0x6d, 0xd3, 0x25, 0xd4, 0xed, - 0xbb, 0x51, 0x02, 0x85, 0x56, 0x89, 0x4e, 0xf6, 0x42, 0xe8, 0xd3, 0x99, 0xa1, 0xd7, 0x7d, 0x41, - 0x1f, 0x5a, 0x8d, 0x12, 0x90, 0x09, 0x67, 0x02, 0xcd, 0xa8, 0xc4, 0x32, 0x1d, 0xcd, 0xe5, 0xbe, - 0x77, 0x86, 0x0d, 0x71, 0x7d, 0x00, 0xf5, 0xac, 0x7b, 0xf2, 0xbe, 0x37, 0xce, 0x58, 0x29, 0x74, - 0xb4, 0x05, 0xe3, 0xac, 0xa7, 0x99, 0x86, 0x6c, 0x5a, 0xc4, 0xa8, 0xcc, 0xb1, 0x71, 0xe6, 0x9f, - 0xe6, 0xe3, 0x0d, 0x2e, 0xb0, 0x65, 0x11, 0xea, 0x36, 0x65, 0x2b, 0xd2, 0x47, 0x12, 0x4c, 0x04, - 0x80, 0x8a, 0x6e, 0x3a, 0xa4, 0xf2, 0x7a, 0xea, 0xde, 0x4f, 0x45, 0x5c, 0xa3, 0x02, 0x54, 0x2b, - 0x56, 0x94, 0x80, 0xbe, 0x0d, 0xd3, 0x01, 0x66, 0xe0, 0x2f, 0x67, 0x19, 0xec, 0x9b, 0x59, 0x60, - 0x63, 0x8e, 0x92, 0xa0, 0x21, 0x02, 0xa7, 0x03, 0x70, 0x9b, 0x1c, 0x60, 0x5b, 0xe5, 0x1a, 0x17, - 0xd9, 0x00, 0x0b, 0x59, 0x06, 0x90, 0x98, 0x9c, 0xaf, 0xe9, 0x53, 0x56, 0x2f, 0x19, 0xad, 0xc3, - 0x28, 0x37, 0x35, 0xa9, 0xcc, 0x33, 0xe4, 0x0b, 0x4f, 0xdf, 0xf5, 0xdc, 0x53, 0xa8, 0x3a, 0x02, - 0x49, 0x74, 0x13, 0xa0, 0x63, 0x04, 0x38, 0x17, 0x53, 0x6d, 0x95, 0xc0, 0xf9, 0x56, 0xc0, 0x5f, - 0xcf, 0x49, 0x11, 0x69, 0xf4, 0x00, 0xa6, 0xc2, 0x1e, 0x5f, 0xf3, 0x25, 0x86, 0xf8, 0x56, 0x56, - 0x44, 0x7f, 0xc5, 0x93, 0x9d, 0x38, 0x09, 0xdd, 0x84, 0x31, 0x15, 0x9b, 0xb2, 0x77, 0xf8, 0x2f, - 0x32, 0xd0, 0xcb, 0x59, 0x76, 0x07, 0x36, 0xfd, 0xe3, 0x7f, 0x54, 0xe5, 0x6d, 0xb4, 0x09, 0x40, - 0xb1, 0xf8, 0x2d, 0xb0, 0x94, 0x6a, 0xf6, 0x23, 0xc0, 0x82, 0x7b, 0x80, 0xce, 0xc6, 0xeb, 0xa0, - 0x06, 0x94, 0x28, 0x1c, 0xdf, 0x5d, 0x95, 0xe5, 0xd4, 0x15, 0x1f, 0x81, 0xc7, 0xb7, 0x0e, 0x55, - 0xa4, 0x1a, 0xf4, 0xd0, 0x7d, 0x98, 0xd2, 0x14, 0x67, 0xf1, 0x4a, 0xe0, 0x9b, 0x58, 0xaf, 0x7c, - 0x26, 0xa4, 0x2e, 0x3a, 0x7e, 0xf6, 0x52, 0xa1, 0x7b, 0x81, 0x0c, 0xd5, 0xa3, 0x16, 0x27, 0xd5, - 0x46, 0xa1, 0xe8, 0x9d, 0xe5, 0xe2, 0x0f, 0x87, 0xe0, 0x4c, 0x24, 0x4c, 0x69, 0x10, 0xdb, 0xb1, - 0x88, 0xe2, 0x6a, 0x5d, 0x82, 0x64, 0x28, 0x5b, 0xf8, 0x50, 0x37, 0xb1, 0x2a, 0xef, 0x93, 0x43, - 0x3f, 0x64, 0x79, 0x37, 0xcb, 0x45, 0xd9, 0xf0, 0xe4, 0x6e, 0x91, 0x43, 0x3a, 0xe8, 0x9a, 0xd9, - 0x6e, 0x6b, 0x6e, 0x9b, 0x18, 0xae, 0x54, 0xb2, 0x82, 0x5f, 0x1c, 0xf4, 0x5d, 0x98, 0x62, 0x96, - 0x94, 0x8d, 0x8e, 0xae, 0x6b, 0xbb, 0x1a, 0xb1, 0x9d, 0x4a, 0x9e, 0x0d, 0x72, 0x2d, 0xcb, 0x20, - 0xb7, 0x7d, 0x29, 0x3a, 0xc6, 0x6d, 0xd3, 0x25, 0xd2, 0x24, 0x83, 0x0b, 0xe8, 0x0e, 0xba, 0x01, - 0x65, 0xac, 0x76, 0x35, 0x85, 0xc8, 0x86, 0xe9, 0x12, 0xa7, 0x52, 0xc8, 0x14, 0xb7, 0x30, 0xac, - 0x92, 0x27, 0x48, 0xdb, 0x0e, 0x3d, 0xce, 0xb0, 0xaa, 0xda, 0xc4, 0x71, 0xe4, 0xae, 0x46, 0x0e, - 0x9c, 0xca, 0x50, 0x6a, 0xf8, 0x96, 0x04, 0x5a, 0xf5, 0x64, 0xb6, 0x35, 0x72, 0x20, 0x95, 0x71, - 0xd8, 0x71, 0x68, 0xf8, 0xa1, 0x12, 0xc3, 0x6c, 0xfb, 0xa1, 0xd4, 0x9b, 0x7d, 0x90, 0xd6, 0x29, - 0xf3, 0x26, 0x71, 0xb1, 0x8a, 0x5d, 0x2c, 0x71, 0x59, 0xb4, 0x09, 0x13, 0x11, 0xcd, 0xd0, 0x50, - 0xaf, 0x98, 0x7a, 0x04, 0xa4, 0xaa, 0x6f, 0x43, 0x95, 0xc6, 0x23, 0x3f, 0x6c, 0xa8, 0x34, 0xac, - 0x0d, 0x0d, 0x77, 0x44, 0x58, 0xfb, 0x5b, 0x01, 0x2a, 0x47, 0x59, 0x17, 0x6d, 0x41, 0x29, 0xe2, - 0x31, 0x3c, 0x3a, 0xab, 0x0e, 0xe6, 0x30, 0x12, 0x84, 0x2e, 0x82, 0x6e, 0x03, 0x28, 0x01, 0x3c, - 0x8f, 0xd4, 0xaa, 0x7d, 0x54, 0x75, 0xc7, 0xa5, 0xc7, 0x45, 0xe8, 0x72, 0x11, 0x04, 0xf1, 0x27, - 0x02, 0x4c, 0xf7, 0xb8, 0x0d, 0xba, 0x01, 0x63, 0x81, 0x07, 0xf2, 0x49, 0xcf, 0xf7, 0x73, 0x11, - 0x9f, 0x5f, 0x0a, 0x45, 0xd1, 0x75, 0x18, 0xa2, 0x6e, 0xc6, 0xe7, 0x99, 0xc9, 0xcb, 0x98, 0x80, - 0xf8, 0x47, 0x21, 0x96, 0x2b, 0x50, 0x17, 0x41, 0x77, 0x61, 0x8c, 0x66, 0x3a, 0xcc, 0xdf, 0xf8, - 0xa4, 0xae, 0x1f, 0x23, 0x5f, 0x62, 0xbe, 0x37, 0xda, 0xe4, 0xad, 0xff, 0x4b, 0xde, 0xf4, 0xdf, - 0x3c, 0x9c, 0x4a, 0x99, 0x05, 0xfa, 0x08, 0xca, 0xdc, 0x51, 0xbd, 0x3d, 0xe4, 0x9d, 0x27, 0xd5, - 0xec, 0x29, 0x10, 0x5b, 0x4b, 0x29, 0xd4, 0xd1, 0x8b, 0x9b, 0x0a, 0xdd, 0x86, 0x31, 0x9a, 0xd3, - 0x78, 0xc6, 0x2d, 0xa6, 0x5e, 0x3d, 0xa9, 0x7a, 0xa0, 0xe9, 0x11, 0x5d, 0x39, 0xbd, 0xc8, 0xda, - 0xbc, 0x4d, 0xd3, 0xa5, 0x32, 0x80, 0x1c, 0x00, 0x8a, 0xff, 0x99, 0x00, 0x08, 0x35, 0x86, 0xde, - 0x8f, 0x67, 0x4b, 0x6f, 0x65, 0xce, 0x96, 0xf8, 0x48, 0x3c, 0x63, 0xaa, 0x27, 0x32, 0xa6, 0x6a, - 0xf6, 0x8c, 0x89, 0x03, 0xf9, 0x59, 0xd3, 0x4a, 0x2c, 0x6b, 0x3a, 0xd7, 0x2f, 0xef, 0xe1, 0xd2, - 0x5e, 0xe6, 0x74, 0x33, 0x25, 0x73, 0xba, 0x98, 0x29, 0x73, 0xe2, 0x30, 0xaf, 0xb2, 0xa7, 0x2f, - 0x67, 0xf6, 0xf4, 0xf1, 0x11, 0xd9, 0x53, 0xa6, 0x50, 0x22, 0x96, 0x3e, 0x71, 0x47, 0x79, 0x95, - 0x42, 0xbd, 0x84, 0x29, 0xd4, 0xc5, 0x67, 0x94, 0x42, 0x5d, 0x3a, 0x51, 0x0a, 0xf5, 0x52, 0xa5, - 0x39, 0x69, 0xf9, 0xe2, 0xe5, 0x67, 0x94, 0x2f, 0x3e, 0xc7, 0x14, 0x6a, 0x1c, 0x4a, 0x91, 0x68, - 0x46, 0xfc, 0x71, 0x01, 0xc6, 0x82, 0x4b, 0x13, 0x7d, 0x04, 0x23, 0x5d, 0xcd, 0xd1, 0x9a, 0x3a, - 0xe1, 0x97, 0xee, 0xb5, 0x81, 0x2e, 0xdd, 0xea, 0xb6, 0x27, 0x5c, 0xcf, 0x49, 0x3e, 0x0e, 0xba, - 0x0d, 0x45, 0xd3, 0xc2, 0xdf, 0xeb, 0xf8, 0xe1, 0xe5, 0xf2, 0x60, 0x88, 0x5b, 0x4c, 0x96, 0x5d, - 0xc2, 0xac, 0x35, 0xfb, 0x7d, 0x01, 0x46, 0xf8, 0x30, 0xe8, 0x9b, 0xc7, 0xad, 0xa7, 0xfa, 0xb1, - 0xc1, 0x3b, 0xb1, 0xc8, 0xf7, 0x6b, 0x19, 0x22, 0x5f, 0x16, 0xcb, 0x31, 0xa1, 0xd9, 0x0d, 0x28, - 0x7a, 0xb3, 0x3b, 0xf1, 0x3c, 0x68, 0x1c, 0xe4, 0x65, 0x94, 0xcc, 0x26, 0x7f, 0x2d, 0xc0, 0x74, - 0xcf, 0xc9, 0x8e, 0xee, 0x27, 0x6d, 0xf3, 0xf5, 0x63, 0xdd, 0x10, 0x69, 0x36, 0xda, 0x4e, 0xd8, - 0xe8, 0xdd, 0xe3, 0x21, 0xf7, 0xd8, 0xea, 0xe7, 0x11, 0x5b, 0xdd, 0xeb, 0xb9, 0xe7, 0x84, 0xe3, - 0x55, 0x09, 0x93, 0x17, 0xdc, 0x89, 0x6c, 0x88, 0x03, 0x1b, 0x3e, 0xaf, 0xf9, 0xd5, 0xa6, 0x92, - 0xc0, 0xe2, 0xbf, 0x0b, 0x00, 0x61, 0x80, 0x89, 0xa4, 0xa4, 0x61, 0xdf, 0x1e, 0x2c, 0x42, 0x4d, - 0xb3, 0xe8, 0x56, 0xc2, 0xa2, 0xd7, 0x06, 0x84, 0xec, 0x31, 0xe5, 0xe7, 0x11, 0x53, 0xd6, 0x82, - 0x88, 0x5a, 0x18, 0xf4, 0x0d, 0x22, 0x88, 0xa5, 0x4f, 0x62, 0xb5, 0x64, 0xbe, 0x5e, 0x38, 0x69, - 0xbe, 0x3e, 0xfb, 0x61, 0xe0, 0x06, 0xcf, 0x60, 0x6d, 0xf4, 0x88, 0xf5, 0x5a, 0xde, 0x76, 0xfe, - 0x5c, 0x80, 0x61, 0xef, 0x4e, 0x5b, 0x8d, 0x3d, 0x23, 0x66, 0x4f, 0x68, 0x22, 0x0f, 0x88, 0x1f, - 0xc2, 0x28, 0xee, 0xb8, 0xad, 0x20, 0x0b, 0xee, 0x0d, 0xa2, 0x7b, 0xea, 0x0a, 0x14, 0x61, 0xb5, - 0xe3, 0xb6, 0xee, 0x68, 0x7b, 0x06, 0x76, 0x3b, 0x36, 0x91, 0x46, 0xb0, 0xd7, 0x45, 0xab, 0x30, - 0x6c, 0xd9, 0xa6, 0xb9, 0xcb, 0x55, 0x78, 0xb9, 0x0f, 0xd4, 0x83, 0x5b, 0x0c, 0xac, 0x41, 0x45, - 0x24, 0x4f, 0x52, 0xfc, 0x99, 0xc0, 0x2f, 0x10, 0xf6, 0x52, 0x28, 0x03, 0x6a, 0x62, 0x9d, 0xee, - 0x0e, 0x39, 0x52, 0x00, 0x49, 0xdf, 0x49, 0x49, 0xf4, 0x9a, 0x27, 0x18, 0x29, 0x81, 0x4c, 0x37, - 0x93, 0x24, 0xf4, 0xd5, 0x68, 0xcd, 0xa3, 0xc0, 0xca, 0x00, 0x91, 0x4a, 0xc6, 0x04, 0xe4, 0xed, - 0x7d, 0x96, 0x5d, 0x95, 0xa5, 0xbc, 0xbd, 0x2f, 0x7e, 0x2a, 0x40, 0x91, 0x07, 0x00, 0xb5, 0x98, - 0xee, 0x07, 0x48, 0x02, 0x23, 0xca, 0xaf, 0xf9, 0xea, 0xca, 0xa7, 0x86, 0x23, 0xbd, 0xea, 0xf2, - 0x10, 0x62, 0xfa, 0xfa, 0x51, 0xde, 0xdf, 0xfc, 0x4c, 0x61, 0x9b, 0x50, 0xa6, 0x2e, 0x2d, 0x73, - 0x67, 0x3c, 0xc2, 0xeb, 0xd2, 0xf6, 0x03, 0x77, 0x65, 0xa9, 0x64, 0x84, 0x9d, 0x23, 0xf4, 0x9f, - 0x7f, 0x76, 0xfa, 0x9f, 0x87, 0xa9, 0x03, 0x1b, 0x5b, 0x16, 0x7f, 0xdd, 0x0c, 0xf6, 0x5f, 0x59, - 0x9a, 0xe0, 0x74, 0x9a, 0xeb, 0xdf, 0x22, 0x87, 0xe8, 0x02, 0x4c, 0x9a, 0xdd, 0x7d, 0xd9, 0xe7, - 0xa6, 0x8c, 0x9e, 0x61, 0xc6, 0xcd, 0xee, 0xfe, 0x3d, 0x8f, 0x7a, 0x8b, 0x1c, 0x8a, 0x3f, 0xcd, - 0xc3, 0x34, 0x75, 0x4f, 0xd3, 0xd6, 0x3e, 0xc1, 0xd4, 0x00, 0xeb, 0xd8, 0xc5, 0xe8, 0x26, 0x94, - 0x08, 0x7b, 0xaa, 0x96, 0x83, 0x57, 0xec, 0xfe, 0x45, 0x9d, 0xf0, 0x71, 0x5b, 0x02, 0x12, 0x3e, - 0x74, 0x4b, 0x50, 0xf2, 0x6e, 0x57, 0xea, 0xf6, 0x7e, 0xa9, 0xf6, 0x18, 0xdb, 0xc6, 0xbb, 0xa3, - 0x29, 0xcd, 0x41, 0x0a, 0xcc, 0xc4, 0x4f, 0x75, 0x0e, 0x5e, 0x38, 0x2e, 0x38, 0x8a, 0xdd, 0x1a, - 0x6c, 0x10, 0xf1, 0x77, 0x02, 0x94, 0xee, 0x69, 0xae, 0x41, 0x1c, 0x87, 0x29, 0x25, 0x2c, 0x72, - 0x09, 0xc7, 0x2c, 0x72, 0xa1, 0x7d, 0x78, 0xcd, 0x71, 0x59, 0xc0, 0x1a, 0xd8, 0x54, 0x66, 0x8e, - 0xe9, 0xeb, 0x65, 0x69, 0xb0, 0x32, 0xa5, 0xe7, 0xdb, 0xa7, 0x9d, 0x14, 0xaa, 0x23, 0xfe, 0x23, - 0xfe, 0x2d, 0x41, 0x43, 0xc7, 0x06, 0xaa, 0x27, 0xbf, 0x25, 0x18, 0xa0, 0x90, 0x46, 0x01, 0xbe, - 0xe8, 0xef, 0x09, 0x6e, 0x01, 0x28, 0x7a, 0x87, 0xc8, 0x96, 0x8e, 0x8d, 0xa3, 0xaa, 0xe0, 0xa9, - 0x4b, 0x58, 0xd3, 0x3b, 0x84, 0x2d, 0x60, 0x4c, 0xe1, 0x2d, 0x07, 0x6d, 0xf0, 0x7a, 0x1a, 0x05, - 0x1b, 0xb4, 0x9e, 0xc6, 0xb0, 0x58, 0x35, 0x8d, 0xb6, 0xc4, 0x7f, 0x05, 0xc5, 0x33, 0xa6, 0xe6, - 0x63, 0x17, 0xcf, 0xa8, 0xf4, 0x33, 0x29, 0x9e, 0x71, 0xa0, 0x63, 0x16, 0xcf, 0xb8, 0xf4, 0x49, - 0x8b, 0x67, 0x1c, 0xe6, 0x55, 0xf1, 0xec, 0xcb, 0x59, 0x3c, 0xfb, 0xce, 0x11, 0xc5, 0xb3, 0xe5, - 0x41, 0x83, 0x76, 0xee, 0x27, 0x5f, 0x74, 0xed, 0x6c, 0x13, 0x20, 0x92, 0xf1, 0xbf, 0x76, 0x9c, - 0x84, 0x3f, 0x02, 0xf0, 0x62, 0x94, 0xe2, 0xe4, 0xa3, 0x4b, 0x71, 0x57, 0x06, 0x29, 0xc5, 0x71, - 0x13, 0xf6, 0x96, 0xe3, 0xb4, 0xa7, 0x97, 0xe3, 0x96, 0x06, 0x2c, 0xc7, 0xf1, 0x71, 0x5e, 0x90, - 0xaf, 0x1a, 0x3e, 0x3e, 0xf2, 0xab, 0x86, 0xab, 0x03, 0x55, 0xa9, 0xf8, 0xaa, 0x5f, 0xea, 0x2f, - 0x1b, 0xa2, 0x9f, 0x1f, 0x08, 0x30, 0xea, 0x5f, 0xe8, 0xe8, 0x3d, 0x18, 0xe1, 0x8f, 0xe4, 0xfc, - 0xb6, 0xbd, 0x90, 0xed, 0x7d, 0x5d, 0xf2, 0xc5, 0xd0, 0x0c, 0x0c, 0xdb, 0x0e, 0x21, 0x2a, 0x7f, - 0xd8, 0xf4, 0x3a, 0xe8, 0x3c, 0x4c, 0x58, 0x36, 0x51, 0x34, 0x87, 0x7a, 0x6e, 0x53, 0x73, 0x1d, - 0x76, 0x79, 0x0e, 0x49, 0xe3, 0x01, 0xb5, 0xa6, 0xb9, 0x8e, 0xd8, 0x86, 0x51, 0x3f, 0x1e, 0x40, - 0x5b, 0x30, 0x66, 0xe9, 0x58, 0x33, 0x5c, 0xf2, 0xd0, 0x4f, 0xbb, 0xae, 0x0e, 0x10, 0x50, 0x78, - 0x82, 0x52, 0x88, 0x81, 0xa6, 0xa0, 0x40, 0x23, 0x77, 0x6f, 0x5e, 0xb4, 0x29, 0x5e, 0x80, 0x09, - 0xca, 0xbd, 0xa6, 0x59, 0x2d, 0x62, 0x33, 0x9e, 0xf4, 0x17, 0x77, 0x05, 0xc6, 0x63, 0xa8, 0xe8, - 0x1b, 0x50, 0x74, 0x88, 0xa1, 0x06, 0x6f, 0xd5, 0x59, 0xb5, 0xc4, 0xa5, 0x10, 0x82, 0x21, 0xb6, - 0xac, 0x3c, 0x0b, 0xe3, 0x58, 0x5b, 0xfc, 0x7d, 0xc1, 0x5b, 0x3c, 0x2b, 0xa4, 0x34, 0x92, 0x85, - 0x94, 0xe5, 0x41, 0xde, 0x26, 0xd3, 0xca, 0x28, 0x9b, 0x89, 0x32, 0xca, 0xd2, 0x40, 0x80, 0x3d, - 0x45, 0x94, 0x5f, 0x47, 0x8a, 0x28, 0x12, 0x80, 0x12, 0xa8, 0x90, 0xcf, 0x77, 0x31, 0x2b, 0x7c, - 0xa8, 0x7c, 0x29, 0x82, 0x12, 0xb7, 0x7e, 0xfe, 0xe4, 0xd6, 0x9f, 0xdd, 0x09, 0xea, 0x22, 0xcf, - 0x61, 0xba, 0xb5, 0x52, 0xe4, 0x35, 0x59, 0xfc, 0xa5, 0x5f, 0x47, 0x60, 0x7e, 0xec, 0x7f, 0x92, - 0x20, 0x0c, 0xf8, 0x49, 0x02, 0x9a, 0x85, 0x51, 0xff, 0x60, 0xe6, 0xf9, 0x40, 0xd0, 0x47, 0x73, - 0x00, 0x36, 0x36, 0x54, 0xb3, 0xad, 0x7d, 0x12, 0x14, 0x0f, 0x22, 0x14, 0xba, 0xdf, 0xba, 0x98, - 0xc6, 0xf6, 0x4d, 0xdd, 0xfb, 0xb0, 0xc0, 0x4f, 0x58, 0x19, 0xb5, 0xc6, 0x89, 0xe2, 0x23, 0xc1, - 0xcf, 0xe0, 0xd9, 0x54, 0x57, 0x60, 0x98, 0xfd, 0xce, 0xe7, 0x7a, 0xae, 0xcf, 0x5c, 0xb7, 0x29, - 0xaf, 0xe4, 0x89, 0xa0, 0x0d, 0x28, 0xab, 0xc4, 0x71, 0x65, 0xff, 0xf8, 0xc8, 0x0f, 0xb4, 0x31, - 0x4a, 0x54, 0x76, 0x35, 0x79, 0x84, 0x14, 0x12, 0x47, 0x48, 0x86, 0x25, 0xd5, 0xfe, 0x9e, 0xff, - 0xec, 0xf1, 0x9c, 0xf0, 0xe8, 0xf1, 0x9c, 0xf0, 0xb7, 0xc7, 0x73, 0xc2, 0xa7, 0x4f, 0xe6, 0x72, - 0x8f, 0x9e, 0xcc, 0xe5, 0xfe, 0xf2, 0x64, 0x2e, 0x07, 0x17, 0x14, 0xb3, 0x9d, 0xc1, 0xce, 0xb5, - 0xa9, 0x68, 0xa2, 0x67, 0x9b, 0xae, 0xd9, 0x10, 0x1e, 0x34, 0xf7, 0x34, 0xb7, 0xd5, 0x69, 0x56, - 0x15, 0xb3, 0xbd, 0xa0, 0x98, 0x4e, 0xdb, 0x74, 0x16, 0x6c, 0xa2, 0xe3, 0x43, 0x62, 0x2f, 0x74, - 0x17, 0x83, 0x26, 0xcb, 0xc7, 0x9c, 0x85, 0xfe, 0xff, 0xa2, 0xf0, 0x4e, 0x84, 0xe8, 0xd3, 0x7e, - 0x91, 0x2f, 0x34, 0xd6, 0xee, 0xfe, 0x2a, 0x2f, 0x36, 0xfc, 0x29, 0xae, 0xd1, 0x29, 0x46, 0x26, - 0x53, 0xdd, 0xe6, 0xac, 0x7f, 0x08, 0x99, 0x76, 0x28, 0xd3, 0x4e, 0x84, 0x69, 0xc7, 0x67, 0x7a, - 0x9c, 0xaf, 0xf6, 0x67, 0xda, 0xf9, 0xa0, 0x51, 0xf3, 0x3f, 0x6a, 0xfa, 0x67, 0xfe, 0xbc, 0x2f, - 0xb0, 0xb2, 0x42, 0x25, 0x56, 0x56, 0x22, 0x22, 0x2b, 0x2b, 0xbe, 0x4c, 0xb3, 0xc8, 0xfe, 0xb5, - 0x60, 0xe9, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x83, 0x14, 0xde, 0x8c, 0x31, 0x00, 0x00, + // 2795 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcf, 0x6f, 0xe3, 0xc6, + 0xf5, 0x17, 0x25, 0xdb, 0x6b, 0x3f, 0xc9, 0x5a, 0x7b, 0xf6, 0x47, 0xf4, 0x35, 0xbe, 0x70, 0x16, + 0x4c, 0xb2, 0xf5, 0x6e, 0x12, 0x39, 0xeb, 0xdd, 0x4d, 0x50, 0x27, 0x6d, 0x63, 0xd9, 0xd9, 0xc8, + 0xbb, 0xf1, 0x5a, 0xa1, 0x53, 0xbb, 0x49, 0x9d, 0xb0, 0x23, 0x72, 0x6c, 0x11, 0x96, 0x48, 0x96, + 0xa4, 0xe4, 0x75, 0xfe, 0x81, 0xa6, 0x97, 0x22, 0x05, 0x7a, 0x28, 0x7a, 0x29, 0x50, 0xe4, 0xd4, + 0x43, 0xff, 0x80, 0x16, 0x3d, 0x37, 0x68, 0x2f, 0x01, 0x7a, 0x29, 0x10, 0x14, 0x48, 0x37, 0xa7, + 0xfe, 0xb8, 0xf4, 0xdc, 0x4b, 0x31, 0x3f, 0x38, 0x24, 0x25, 0x7a, 0x45, 0xd9, 0x4e, 0x83, 0xfc, + 0x38, 0x99, 0xf3, 0xfc, 0xde, 0x67, 0x66, 0xde, 0x7b, 0x33, 0xf3, 0xde, 0x9b, 0x11, 0xdc, 0x72, + 0x89, 0xdd, 0xed, 0x34, 0x3d, 0xbc, 0x68, 0x38, 0x1e, 0x59, 0x0c, 0x3c, 0x6c, 0xfb, 0xd8, 0x08, + 0x2c, 0xc7, 0x5e, 0xec, 0xdd, 0xc0, 0x6d, 0xb7, 0x85, 0x6f, 0xc4, 0x89, 0x55, 0xd7, 0x73, 0x02, + 0x07, 0xa9, 0xa1, 0x54, 0x95, 0x4a, 0x55, 0xe3, 0x0c, 0xa1, 0xd4, 0xdc, 0xf5, 0x24, 0xb2, 0xe1, + 0x1d, 0xb9, 0x81, 0x13, 0x81, 0xf2, 0x36, 0xc7, 0x9b, 0x5b, 0x48, 0xf2, 0xfa, 0x01, 0x3e, 0x20, + 0x11, 0x2b, 0x6b, 0x0a, 0xce, 0x27, 0x93, 0x9c, 0x56, 0xd3, 0x88, 0xf8, 0xac, 0xa6, 0x91, 0xce, + 0x65, 0x92, 0x07, 0x11, 0x97, 0x49, 0x1e, 0x08, 0xae, 0xa5, 0x24, 0xd7, 0xbe, 0xd3, 0x23, 0x9e, + 0x8d, 0x6d, 0x23, 0xd6, 0x75, 0x44, 0xe3, 0x32, 0xea, 0x6f, 0x15, 0x28, 0xbe, 0x11, 0x4d, 0x17, + 0xbd, 0x0a, 0x63, 0x4d, 0xc7, 0x3c, 0xaa, 0x28, 0x57, 0x94, 0x85, 0xe2, 0xd2, 0xcd, 0xea, 0x70, + 0xc5, 0x54, 0x63, 0xe2, 0x35, 0xc7, 0x3c, 0xd2, 0x18, 0x00, 0x7a, 0x1c, 0x8a, 0x4d, 0xcb, 0x36, + 0x2d, 0x7b, 0x5f, 0xf7, 0xad, 0xfd, 0x4a, 0xfe, 0x8a, 0xb2, 0x50, 0xd2, 0x40, 0x90, 0xb6, 0xac, + 0x7d, 0xb4, 0x02, 0x13, 0xd8, 0x36, 0x5a, 0x8e, 0x57, 0x29, 0xb0, 0xbe, 0xae, 0xf5, 0xf5, 0x25, + 0x14, 0x2a, 0xbb, 0xd9, 0x20, 0xde, 0x41, 0x9b, 0x68, 0x8e, 0x13, 0x68, 0x42, 0x50, 0xad, 0x40, + 0x7e, 0xdd, 0x44, 0x08, 0xc6, 0x5a, 0xd8, 0x6f, 0xb1, 0x21, 0x97, 0x34, 0xf6, 0xad, 0xaa, 0x00, + 0xaf, 0xec, 0xed, 0x11, 0x23, 0xa8, 0x63, 0xbf, 0x85, 0x2e, 0xc2, 0xb8, 0x65, 0xdb, 0xc4, 0x13, + 0x2c, 0xbc, 0xa1, 0x7e, 0x50, 0x80, 0xf3, 0x7d, 0x63, 0x47, 0x6b, 0x70, 0x8e, 0xb7, 0xfc, 0x8a, + 0x72, 0xa5, 0xb0, 0x50, 0x5c, 0xba, 0x9e, 0x45, 0x03, 0x2b, 0xac, 0xad, 0x85, 0xa2, 0xc8, 0x85, + 0xcb, 0x31, 0x3e, 0xdd, 0xc5, 0x1e, 0xee, 0x90, 0x80, 0x78, 0x3e, 0x53, 0x43, 0x71, 0xe9, 0x9b, + 0x23, 0xaa, 0xb5, 0x21, 0x01, 0xb4, 0x4b, 0x41, 0x1a, 0x19, 0xdd, 0x82, 0xc2, 0x1e, 0x21, 0x42, + 0x93, 0xea, 0x10, 0x4d, 0xde, 0x21, 0x44, 0xa3, 0xec, 0xe8, 0x7b, 0x50, 0x36, 0x49, 0x40, 0xf8, + 0x28, 0x4d, 0x1c, 0xe0, 0xca, 0x18, 0x03, 0xb8, 0x91, 0x65, 0x7c, 0x6b, 0xa1, 0xe4, 0x1a, 0x0e, + 0xb0, 0x36, 0x6d, 0xc6, 0x9b, 0x68, 0x1d, 0xa6, 0x3a, 0xa4, 0xe3, 0x70, 0xd0, 0x71, 0x06, 0xfa, + 0x4c, 0x16, 0xd0, 0x0d, 0xd2, 0x71, 0x18, 0xde, 0x64, 0x47, 0x7c, 0xa9, 0xeb, 0x30, 0x19, 0x52, + 0xd1, 0x75, 0x28, 0x13, 0x9b, 0x4d, 0x87, 0x98, 0x3a, 0xe5, 0xe0, 0x16, 0xad, 0xe7, 0xb4, 0x69, + 0x49, 0xa7, 0xcc, 0xef, 0x29, 0x4a, 0x6d, 0x16, 0xce, 0xeb, 0x49, 0x66, 0x75, 0x07, 0x2e, 0xa5, + 0x6a, 0x15, 0x3d, 0x01, 0xd3, 0xe4, 0x81, 0x6b, 0x79, 0x47, 0x7a, 0x8b, 0x58, 0xfb, 0xad, 0x80, + 0xc1, 0x8e, 0x69, 0x25, 0x4e, 0xac, 0x33, 0x1a, 0xfa, 0x3f, 0x98, 0x34, 0x5a, 0xd8, 0xb2, 0x75, + 0xcb, 0x64, 0x76, 0x9c, 0xd2, 0xce, 0xb1, 0xf6, 0xba, 0xa9, 0xbe, 0x0e, 0xd3, 0x09, 0x75, 0xa0, + 0x97, 0x61, 0x6a, 0xaf, 0x63, 0xea, 0x46, 0xbb, 0x4b, 0xfc, 0xca, 0x18, 0xf3, 0xa4, 0x27, 0x86, + 0x58, 0x65, 0xb5, 0xdd, 0x25, 0xda, 0xe4, 0x5e, 0xc7, 0xa4, 0x1f, 0xbe, 0xfa, 0xe7, 0x32, 0x4c, + 0x70, 0xbf, 0x42, 0x2b, 0x30, 0xee, 0xbb, 0xc4, 0x36, 0xc5, 0xa2, 0xbc, 0x96, 0x45, 0x91, 0x5b, + 0x54, 0xa0, 0x9e, 0xd3, 0xb8, 0x24, 0x5a, 0x83, 0x09, 0xa7, 0x1b, 0xb8, 0xdd, 0x40, 0x78, 0x60, + 0x26, 0xb7, 0xde, 0x64, 0x12, 0xf5, 0x9c, 0x26, 0x64, 0xd1, 0xf3, 0x30, 0xe6, 0x1f, 0x62, 0x57, + 0xb8, 0xd9, 0x95, 0x3e, 0x0c, 0xba, 0x11, 0x45, 0xfd, 0x1f, 0x62, 0xb7, 0x9e, 0xd3, 0x18, 0x3f, + 0xba, 0x03, 0x40, 0xff, 0xea, 0x46, 0x1b, 0x5b, 0x1d, 0xe1, 0x63, 0x4f, 0x0d, 0x93, 0x5e, 0xa5, + 0xcc, 0xf5, 0x9c, 0x36, 0xe5, 0x87, 0x0d, 0xb4, 0x07, 0x17, 0x7b, 0xb8, 0x6d, 0x99, 0x38, 0x70, + 0x3c, 0xdd, 0x24, 0x7b, 0x96, 0x6d, 0xd1, 0x11, 0x57, 0x66, 0x52, 0xbd, 0x96, 0x6f, 0xb3, 0x12, + 0x73, 0x3b, 0x94, 0x5c, 0x93, 0x82, 0xf5, 0x9c, 0x76, 0xa1, 0x37, 0x48, 0xa6, 0xe3, 0xb5, 0x9a, + 0x86, 0xce, 0xf5, 0x51, 0x99, 0x4d, 0x1d, 0x2f, 0xdd, 0x9c, 0x25, 0xf6, 0x7a, 0xd3, 0xe0, 0xb6, + 0xa2, 0xe3, 0xb5, 0xc2, 0x06, 0xda, 0x85, 0xf3, 0xae, 0xe7, 0xb8, 0x8e, 0x8f, 0xdb, 0xba, 0xdf, + 0x6d, 0x76, 0xac, 0xa0, 0x82, 0x52, 0x87, 0x1a, 0xdb, 0x96, 0x25, 0x66, 0x43, 0x48, 0x6e, 0x31, + 0xc1, 0x7a, 0x4e, 0x2b, 0xbb, 0x09, 0x0a, 0x6a, 0xc2, 0xac, 0x44, 0x3f, 0xb4, 0x82, 0x96, 0xe9, + 0xe1, 0xc3, 0xca, 0x85, 0xd4, 0x7d, 0xfb, 0x51, 0xf8, 0x3b, 0x42, 0xb4, 0x9e, 0xd3, 0x66, 0xdc, + 0x3e, 0x1a, 0x7a, 0x13, 0xca, 0x91, 0xc6, 0x7b, 0x4e, 0x40, 0x2a, 0x17, 0x59, 0x07, 0xcf, 0x65, + 0xe8, 0x40, 0x2a, 0x7c, 0xdb, 0x09, 0x08, 0x5d, 0xa2, 0xbd, 0x38, 0x81, 0x42, 0x9b, 0xa4, 0x4d, + 0xf6, 0x23, 0xe8, 0x4b, 0x99, 0xa1, 0xd7, 0x42, 0xc1, 0x10, 0xda, 0x8c, 0x13, 0x90, 0x03, 0x97, + 0xa5, 0x66, 0x4c, 0xe2, 0x3a, 0xbe, 0x15, 0x08, 0xdf, 0xbb, 0xcc, 0xba, 0x78, 0x61, 0x04, 0xf5, + 0xac, 0x71, 0xf9, 0xd0, 0x1b, 0x2f, 0xba, 0x29, 0x74, 0xb4, 0x09, 0xd3, 0xac, 0x45, 0xf7, 0x51, + 0xc7, 0x25, 0x76, 0x65, 0x9e, 0xf5, 0xb3, 0xf0, 0x28, 0x1f, 0x6f, 0x08, 0x81, 0x4d, 0x97, 0x50, + 0xb7, 0x29, 0xb9, 0xb1, 0x36, 0xd2, 0xa0, 0x2c, 0x01, 0x8d, 0xb6, 0xe3, 0x93, 0xca, 0xe3, 0xa9, + 0x6b, 0x3f, 0x15, 0x71, 0x95, 0x0a, 0x50, 0xad, 0xb8, 0x71, 0x02, 0xfa, 0x3e, 0xcc, 0x4a, 0x4c, + 0xe9, 0x2f, 0x57, 0x52, 0xf7, 0xe6, 0x54, 0xd8, 0x84, 0xa3, 0xf4, 0xd1, 0x10, 0x81, 0x4b, 0x12, + 0xdc, 0x23, 0x87, 0xd8, 0x33, 0x85, 0xc6, 0x55, 0xd6, 0xc1, 0x62, 0x96, 0x0e, 0x34, 0x26, 0x17, + 0x6a, 0xfa, 0x82, 0x3b, 0x48, 0x46, 0x6b, 0x30, 0x29, 0x4c, 0x4d, 0x2a, 0x0b, 0x0c, 0xf9, 0xea, + 0xa3, 0x57, 0xbd, 0xf0, 0x14, 0xaa, 0x0e, 0x29, 0x89, 0xee, 0x02, 0x74, 0x6d, 0x89, 0x73, 0x2d, + 0xd5, 0x56, 0x7d, 0x38, 0xdf, 0x95, 0xfc, 0xf5, 0x9c, 0x16, 0x93, 0x46, 0x6f, 0xc1, 0x4c, 0xd4, + 0x12, 0x73, 0xbe, 0xce, 0x10, 0x9f, 0xcd, 0x8a, 0x18, 0xce, 0xf8, 0x7c, 0x37, 0x49, 0x42, 0x77, + 0x61, 0xca, 0xc4, 0x8e, 0xce, 0x37, 0xff, 0x25, 0x06, 0xfa, 0x74, 0x96, 0xd5, 0x81, 0x9d, 0x70, + 0xfb, 0x9f, 0x34, 0xc5, 0x37, 0xda, 0x00, 0xa0, 0x58, 0xe2, 0x14, 0xb8, 0x99, 0x6a, 0xf6, 0x63, + 0xc0, 0xe4, 0x39, 0x40, 0x47, 0xc3, 0x1b, 0xa8, 0x01, 0x45, 0x0a, 0x27, 0x56, 0x57, 0xe5, 0x56, + 0xea, 0x8c, 0x8f, 0xc1, 0x13, 0x4b, 0x87, 0x2a, 0xd2, 0x94, 0x2d, 0xf4, 0x26, 0xcc, 0x58, 0x86, + 0xbf, 0xf4, 0x9c, 0xf4, 0x4d, 0xdc, 0xae, 0x7c, 0xa8, 0xa4, 0x4e, 0x3a, 0xb9, 0xf7, 0x52, 0xa1, + 0x1d, 0x29, 0x43, 0xf5, 0x68, 0x25, 0x49, 0xb5, 0x49, 0x98, 0xe0, 0x7b, 0xb9, 0xfa, 0xe3, 0x31, + 0xb8, 0x1c, 0x0f, 0x01, 0x88, 0xe7, 0xbb, 0xf4, 0xd8, 0xee, 0x11, 0xa4, 0x43, 0xc9, 0xc5, 0x47, + 0x6d, 0x07, 0x9b, 0xfa, 0x01, 0x39, 0x0a, 0xe3, 0xbf, 0x97, 0xb2, 0x1c, 0x94, 0x0d, 0x2e, 0x77, + 0x8f, 0x1c, 0xd1, 0x4e, 0x57, 0x9d, 0x4e, 0xc7, 0x0a, 0x3a, 0xc4, 0x0e, 0xb4, 0xa2, 0x2b, 0xff, + 0xe3, 0xa3, 0x1f, 0xc0, 0x0c, 0xb3, 0xa4, 0x6e, 0x77, 0xdb, 0x6d, 0x6b, 0xcf, 0xe2, 0xf1, 0x20, + 0xed, 0xe4, 0x76, 0x96, 0x4e, 0xee, 0x87, 0x52, 0xb4, 0x8f, 0xfb, 0x4e, 0x40, 0xb4, 0xf3, 0x0c, + 0x4e, 0xd2, 0x7d, 0x74, 0x07, 0x4a, 0xd8, 0xec, 0x59, 0x06, 0xd1, 0x6d, 0x27, 0x20, 0x7e, 0xa5, + 0x90, 0x29, 0xf0, 0x60, 0x58, 0x45, 0x2e, 0x48, 0xbf, 0x7d, 0xba, 0x9d, 0x61, 0xd3, 0xf4, 0x88, + 0xef, 0xeb, 0x3d, 0x8b, 0x1c, 0x86, 0x11, 0xcc, 0xf5, 0x21, 0x40, 0x2b, 0x5c, 0x66, 0xdb, 0x22, + 0x87, 0x5a, 0x09, 0x47, 0x0d, 0x9f, 0x86, 0x1f, 0x26, 0xb1, 0x9d, 0x8e, 0x5f, 0x19, 0x67, 0x48, + 0xcf, 0x0c, 0x41, 0x5a, 0xa3, 0xcc, 0x1b, 0x24, 0xc0, 0x34, 0x7e, 0xd4, 0x84, 0x2c, 0xda, 0x80, + 0x72, 0x3c, 0xac, 0xb6, 0xcc, 0xca, 0x44, 0xea, 0x16, 0x90, 0xaa, 0xbe, 0x75, 0x53, 0x9b, 0x8e, + 0xfd, 0x63, 0xdd, 0xa4, 0x39, 0x42, 0x64, 0xb8, 0x63, 0x72, 0x84, 0xdf, 0x29, 0x50, 0x39, 0xce, + 0xba, 0x68, 0x13, 0x8a, 0x31, 0x8f, 0x11, 0xd1, 0x59, 0x75, 0x34, 0x87, 0xd1, 0x20, 0x72, 0x11, + 0x74, 0x1f, 0xc0, 0x90, 0xf0, 0x22, 0x52, 0xab, 0x0e, 0x51, 0xd5, 0x56, 0x40, 0xb7, 0x8b, 0xc8, + 0xe5, 0x62, 0x08, 0xea, 0xcf, 0x14, 0x98, 0x1d, 0x70, 0x1b, 0x74, 0x07, 0xa6, 0xa4, 0x07, 0x8a, + 0x41, 0x2f, 0x0c, 0x73, 0x91, 0x90, 0x5f, 0x8b, 0x44, 0xd1, 0x0b, 0x30, 0x46, 0xdd, 0x4c, 0x8c, + 0x33, 0x93, 0x97, 0x31, 0x01, 0xf5, 0x4f, 0x4a, 0x22, 0xf1, 0xa2, 0x2e, 0x82, 0xde, 0x80, 0x29, + 0x9a, 0x36, 0x32, 0x7f, 0x13, 0x83, 0x7a, 0xe1, 0x04, 0xc9, 0x27, 0xf3, 0xbd, 0xc9, 0xa6, 0xf8, + 0xfa, 0x9f, 0x24, 0xa1, 0x9f, 0x14, 0xe0, 0x42, 0xca, 0x28, 0xd0, 0xeb, 0x50, 0x12, 0x8e, 0xca, + 0xd7, 0x10, 0xdf, 0x4f, 0xaa, 0xd9, 0xf3, 0x49, 0x36, 0x97, 0x62, 0xa4, 0xa3, 0x2f, 0x4e, 0x5e, + 0xf9, 0xf6, 0x99, 0xe5, 0x95, 0x3c, 0xb6, 0x8b, 0x11, 0xde, 0x53, 0x14, 0x74, 0x5f, 0x24, 0x97, + 0xcc, 0x57, 0x46, 0x4c, 0x2e, 0xa9, 0x22, 0xeb, 0x0a, 0x4f, 0x2f, 0xe9, 0x77, 0x98, 0x29, 0x26, + 0xc7, 0x5b, 0x2b, 0x01, 0xe8, 0xb2, 0x0f, 0xf5, 0xdf, 0x65, 0x80, 0xc8, 0x26, 0xe8, 0x95, 0x64, + 0x3e, 0xf6, 0x6c, 0xe6, 0x7c, 0x8c, 0x75, 0x2e, 0x73, 0xb2, 0x7a, 0x5f, 0x4e, 0x56, 0xcd, 0x9e, + 0x93, 0x09, 0xa0, 0x30, 0x2f, 0x5b, 0x4e, 0xe4, 0x65, 0x4f, 0x0e, 0xcb, 0xac, 0x84, 0x34, 0xcf, + 0xcd, 0xee, 0xa6, 0xe4, 0x66, 0xd7, 0x32, 0xe5, 0x66, 0x02, 0xe6, 0xeb, 0xfc, 0xec, 0xcb, 0x99, + 0x9f, 0xbd, 0x73, 0x4c, 0x7e, 0x76, 0x3b, 0xdb, 0x22, 0x8e, 0xe5, 0x63, 0xc2, 0x51, 0xbe, 0x4e, + 0xd2, 0xbe, 0x82, 0x49, 0xda, 0xb5, 0x33, 0x4a, 0xd2, 0xae, 0x9f, 0x2a, 0x49, 0xfb, 0x4a, 0x25, + 0x52, 0x69, 0x19, 0xe9, 0xd3, 0x67, 0x94, 0x91, 0x7e, 0x86, 0x49, 0xda, 0x34, 0x14, 0x63, 0xf1, + 0x92, 0xfa, 0xd3, 0x02, 0x4c, 0xc9, 0x43, 0x13, 0xbd, 0x0e, 0xe7, 0x7a, 0x96, 0x6f, 0x35, 0xdb, + 0x44, 0x1c, 0xba, 0xb7, 0x47, 0x3a, 0x74, 0xab, 0xdb, 0x5c, 0xb8, 0x9e, 0xd3, 0x42, 0x1c, 0x74, + 0x1f, 0x26, 0x1c, 0x17, 0xff, 0xb0, 0x1b, 0x06, 0xb0, 0xb7, 0x46, 0x43, 0xdc, 0x64, 0xb2, 0xec, + 0x10, 0x66, 0x5f, 0x73, 0x3f, 0x52, 0xe0, 0x9c, 0xe8, 0x06, 0x7d, 0xe7, 0xa4, 0x15, 0xdb, 0x30, + 0x36, 0x78, 0x31, 0x11, 0x5b, 0x7f, 0x23, 0x43, 0x6c, 0xcd, 0xa2, 0x45, 0x26, 0x34, 0xb7, 0x0e, + 0x13, 0x7c, 0x74, 0xa7, 0x1e, 0x07, 0x8d, 0x83, 0x78, 0xce, 0xca, 0x6c, 0xf2, 0xd7, 0x02, 0xcc, + 0x0e, 0xec, 0xec, 0xe8, 0xcd, 0x7e, 0xdb, 0x7c, 0xeb, 0x44, 0x27, 0x44, 0x9a, 0x8d, 0xb6, 0xfb, + 0x6c, 0xf4, 0xd2, 0xc9, 0x90, 0x07, 0x6c, 0xf5, 0xcb, 0x98, 0xad, 0x76, 0x06, 0xce, 0x39, 0xe5, + 0x64, 0x75, 0xc8, 0xfe, 0x03, 0xee, 0x54, 0x36, 0xc4, 0xd2, 0x86, 0x9f, 0xd5, 0xf8, 0x6a, 0x33, + 0xfd, 0xc0, 0xea, 0xbf, 0x0a, 0x00, 0x51, 0x80, 0x89, 0xb4, 0x7e, 0xc3, 0x3e, 0x3f, 0x5a, 0x84, + 0x9a, 0x66, 0xd1, 0xcd, 0x3e, 0x8b, 0xde, 0x1e, 0x11, 0x72, 0xc0, 0x94, 0x1f, 0xc7, 0x4c, 0x59, + 0x93, 0x11, 0xb5, 0x32, 0xea, 0x2d, 0x87, 0x8c, 0xa5, 0x4f, 0x63, 0xb5, 0xfe, 0x8a, 0x40, 0xe1, + 0xb4, 0x15, 0x81, 0xb9, 0xd7, 0xa4, 0x1b, 0x9c, 0xc1, 0xdc, 0xe8, 0x16, 0xcb, 0xbf, 0xf8, 0x72, + 0xfe, 0x58, 0x81, 0x71, 0x7e, 0xa6, 0xad, 0x24, 0x6e, 0x7d, 0xb3, 0x27, 0x34, 0xb1, 0xfb, 0xde, + 0xd7, 0x60, 0x12, 0x77, 0x83, 0x96, 0xcc, 0xb3, 0x07, 0x83, 0xe8, 0x81, 0xca, 0x05, 0x45, 0x58, + 0xe9, 0x06, 0xad, 0x2d, 0x6b, 0xdf, 0xc6, 0x41, 0xd7, 0x23, 0xda, 0x39, 0xcc, 0x9b, 0x68, 0x05, + 0xc6, 0x5d, 0xcf, 0x71, 0xf6, 0x84, 0x0a, 0x9f, 0x1e, 0x02, 0xf5, 0xd6, 0x3d, 0x06, 0xd6, 0xa0, + 0x22, 0x1a, 0x97, 0x54, 0x7f, 0xa1, 0x88, 0x03, 0x84, 0x5d, 0xec, 0xea, 0x80, 0x9a, 0xb8, 0x4d, + 0x57, 0x87, 0x1e, 0x2b, 0xb1, 0xa4, 0xaf, 0xa4, 0x7e, 0xf4, 0x1a, 0x17, 0x8c, 0x15, 0x59, 0x66, + 0x9b, 0xfd, 0x24, 0xf4, 0xff, 0xf1, 0xaa, 0x4a, 0x81, 0x15, 0x1a, 0x62, 0xb5, 0x92, 0x32, 0xe4, + 0xbd, 0x03, 0x96, 0x5d, 0x95, 0xb4, 0xbc, 0x77, 0xa0, 0xbe, 0xaf, 0xc0, 0x84, 0x08, 0x00, 0x6a, + 0x09, 0xdd, 0x8f, 0x90, 0x04, 0xc6, 0x94, 0x5f, 0x0b, 0xd5, 0x95, 0x4f, 0x0d, 0x47, 0x06, 0xd5, + 0xc5, 0x11, 0x12, 0xfa, 0xfa, 0x49, 0x3e, 0x5c, 0xfc, 0x4c, 0x61, 0x1b, 0x50, 0xa2, 0x2e, 0xad, + 0x0b, 0x67, 0x3c, 0xc6, 0xeb, 0xd2, 0xd6, 0x83, 0x70, 0x65, 0xad, 0x68, 0x47, 0x8d, 0x63, 0xf4, + 0x9f, 0x3f, 0x3b, 0xfd, 0x2f, 0xc0, 0xcc, 0xa1, 0x87, 0x5d, 0x57, 0xdc, 0xf5, 0xca, 0xf5, 0x57, + 0xd2, 0xca, 0x82, 0x4e, 0xd3, 0xff, 0x7b, 0xe4, 0x08, 0x5d, 0x85, 0xf3, 0x4e, 0xef, 0x40, 0x0f, + 0xb9, 0x29, 0x23, 0x37, 0xcc, 0xb4, 0xd3, 0x3b, 0xd8, 0xe1, 0xd4, 0x7b, 0xe4, 0x48, 0xfd, 0x79, + 0x1e, 0x66, 0xa9, 0x7b, 0x3a, 0x9e, 0xf5, 0x2e, 0x96, 0x37, 0xbb, 0x77, 0xa1, 0x48, 0xd8, 0xcb, + 0x02, 0x5d, 0x3e, 0x3a, 0x18, 0x5e, 0x36, 0x8a, 0xde, 0x22, 0x68, 0x40, 0xa2, 0x77, 0x09, 0x1a, + 0x14, 0xf9, 0xe9, 0x4a, 0xdd, 0x3e, 0x2c, 0x06, 0x9f, 0x60, 0xd9, 0xf0, 0x33, 0x9a, 0xd2, 0x7c, + 0x64, 0xc0, 0xc5, 0xe4, 0xae, 0x2e, 0xc0, 0x0b, 0x27, 0x05, 0x47, 0x89, 0x53, 0x83, 0x75, 0xa2, + 0xfe, 0x5e, 0x81, 0xe2, 0x8e, 0x15, 0xd8, 0xc4, 0xf7, 0x99, 0x52, 0xa2, 0x32, 0x9a, 0x72, 0xc2, + 0x32, 0x1a, 0x3a, 0x80, 0xc7, 0xfc, 0x80, 0x05, 0xac, 0xd2, 0xa6, 0x3a, 0x73, 0xcc, 0x50, 0x2f, + 0x37, 0x47, 0x2b, 0x84, 0x72, 0xdf, 0xbe, 0xe4, 0xa7, 0x50, 0x7d, 0xf5, 0xef, 0xf9, 0x44, 0x05, + 0xb2, 0xd1, 0xc6, 0x36, 0xaa, 0xf7, 0x3f, 0xfd, 0x18, 0xa1, 0x54, 0x47, 0x01, 0xa2, 0xe7, 0x1f, + 0x03, 0xaf, 0x09, 0xf2, 0x43, 0x5e, 0x13, 0x14, 0x12, 0xaf, 0x09, 0xc2, 0xa2, 0xdb, 0xd8, 0x68, + 0x45, 0xb7, 0x7b, 0x00, 0x46, 0xbb, 0x4b, 0x74, 0xb7, 0x8d, 0xed, 0xe3, 0xea, 0xec, 0xa9, 0x53, + 0x58, 0x6d, 0x77, 0x09, 0x9b, 0xc0, 0x94, 0x21, 0xbe, 0x7c, 0xf9, 0x7e, 0x83, 0x82, 0x89, 0x2a, + 0x7b, 0xe6, 0x12, 0x1b, 0xc3, 0x62, 0x05, 0x36, 0xfa, 0xa5, 0xfe, 0x53, 0x16, 0xcf, 0x98, 0x9a, + 0x4f, 0x5c, 0x3c, 0xa3, 0xd2, 0x67, 0x52, 0x3c, 0x13, 0x40, 0x27, 0x2c, 0x9e, 0x09, 0xe9, 0xd3, + 0x16, 0xcf, 0x04, 0xcc, 0xd7, 0xc5, 0xb3, 0x2f, 0x67, 0xf1, 0xec, 0xed, 0x63, 0x8a, 0x67, 0xb7, + 0x46, 0x0d, 0xda, 0x85, 0x9f, 0x7c, 0xde, 0xb5, 0xb3, 0x0d, 0x80, 0x58, 0xc6, 0xff, 0xd8, 0x49, + 0x12, 0xfe, 0x18, 0xc0, 0x17, 0xa3, 0x14, 0xa7, 0x1f, 0x5f, 0x8a, 0x7b, 0x6e, 0x94, 0x52, 0x9c, + 0x30, 0xe1, 0x60, 0x39, 0xce, 0x7a, 0x74, 0x39, 0xee, 0xe6, 0x88, 0xe5, 0x38, 0xd1, 0xcf, 0x17, + 0xe4, 0xdd, 0xc4, 0x3b, 0xc7, 0xbe, 0x9b, 0xb8, 0x31, 0x52, 0x95, 0x4a, 0xcc, 0xfa, 0x2b, 0xfd, + 0x76, 0x22, 0xfe, 0xc0, 0x41, 0x81, 0xc9, 0xf0, 0x40, 0x47, 0x2f, 0xc3, 0x39, 0x71, 0x0d, 0x2f, + 0x4e, 0xdb, 0xab, 0xd9, 0x6e, 0xf0, 0xb5, 0x50, 0x0c, 0x5d, 0x84, 0x71, 0xcf, 0x27, 0xc4, 0x14, + 0x57, 0xa7, 0xbc, 0x81, 0x9e, 0x82, 0xb2, 0xeb, 0x11, 0xc3, 0xf2, 0xa9, 0xe7, 0x36, 0xad, 0xc0, + 0x67, 0x87, 0xe7, 0x98, 0x36, 0x2d, 0xa9, 0x35, 0x2b, 0xf0, 0xd5, 0x0e, 0x7f, 0xb9, 0xc9, 0x86, + 0xb2, 0x09, 0x53, 0x6e, 0x1b, 0x5b, 0x76, 0x40, 0x1e, 0x84, 0x69, 0xd7, 0x8d, 0x11, 0x02, 0x0a, + 0x2e, 0xa8, 0x45, 0x18, 0x68, 0x06, 0x0a, 0x34, 0x72, 0xe7, 0xe3, 0xa2, 0x9f, 0xea, 0x55, 0x28, + 0x53, 0xee, 0x55, 0xcb, 0x6d, 0x11, 0x8f, 0xf1, 0xa4, 0xdf, 0xe9, 0x1b, 0x30, 0x9d, 0x40, 0x45, + 0xdf, 0x86, 0x09, 0x9f, 0xd8, 0xa6, 0xbc, 0x0d, 0xcf, 0xaa, 0x25, 0x21, 0x85, 0x10, 0x8c, 0xb1, + 0x69, 0xf1, 0x47, 0xa1, 0xec, 0x5b, 0xfd, 0x43, 0x81, 0x4f, 0x9e, 0x15, 0x52, 0x1a, 0xfd, 0x85, + 0x94, 0x5b, 0xa3, 0x5c, 0x57, 0xa6, 0x95, 0x51, 0x36, 0xfa, 0xca, 0x28, 0x37, 0x47, 0x02, 0x1c, + 0x28, 0xa2, 0xfc, 0x26, 0x56, 0x44, 0xd1, 0x00, 0x0c, 0xa9, 0x42, 0x31, 0xde, 0xa5, 0xac, 0xf0, + 0x91, 0xf2, 0xb5, 0x18, 0x4a, 0xd2, 0xfa, 0xf9, 0xd3, 0x5b, 0x7f, 0x6e, 0x57, 0xd6, 0x45, 0x3e, + 0x83, 0xe1, 0xd6, 0x8a, 0xb1, 0x0b, 0x66, 0xf5, 0x3f, 0x61, 0x1d, 0x81, 0xf9, 0x71, 0xf8, 0xe8, + 0x41, 0x19, 0xf1, 0xd1, 0x03, 0x9a, 0x83, 0xc9, 0x70, 0x63, 0x16, 0xf9, 0x80, 0x6c, 0xa3, 0x79, + 0x00, 0x0f, 0xdb, 0xa6, 0xd3, 0xb1, 0xde, 0x95, 0xc5, 0x83, 0x18, 0x85, 0xae, 0xb7, 0x1e, 0xa6, + 0xb1, 0x7d, 0xb3, 0xcd, 0x9f, 0x2e, 0x84, 0x09, 0x2b, 0xa3, 0xd6, 0x04, 0x91, 0xa6, 0xc0, 0x2c, + 0x63, 0x92, 0x6c, 0xba, 0xc7, 0xae, 0xc7, 0x4b, 0x2c, 0xba, 0x72, 0xf6, 0x42, 0x46, 0x2d, 0x85, + 0xd3, 0x67, 0x51, 0x7e, 0x3f, 0xe7, 0x96, 0xfa, 0x81, 0xac, 0x0a, 0xb0, 0xe9, 0x2f, 0xc3, 0x38, + 0xeb, 0x53, 0xcc, 0xff, 0xc9, 0x21, 0xf3, 0xdf, 0xa6, 0xbc, 0x1a, 0x17, 0x41, 0xeb, 0x50, 0x32, + 0x89, 0x1f, 0xe8, 0xe1, 0x96, 0x94, 0x1f, 0x69, 0xb1, 0x15, 0xa9, 0xec, 0x4a, 0xff, 0xb6, 0x54, + 0xe8, 0xdb, 0x96, 0x3e, 0x27, 0x35, 0xd5, 0xfe, 0x96, 0xff, 0xf0, 0xe1, 0xbc, 0xf2, 0xd1, 0xc3, + 0x79, 0xe5, 0x93, 0x87, 0xf3, 0xca, 0xfb, 0x9f, 0xce, 0xe7, 0x3e, 0xfa, 0x74, 0x3e, 0xf7, 0x97, + 0x4f, 0xe7, 0x73, 0x70, 0xd5, 0x70, 0x3a, 0x19, 0xfc, 0xb1, 0x36, 0x13, 0x4f, 0x48, 0x3d, 0x27, + 0x70, 0x1a, 0xca, 0x5b, 0xcd, 0x7d, 0x2b, 0x68, 0x75, 0x9b, 0x55, 0xc3, 0xe9, 0x2c, 0x1a, 0x8e, + 0xdf, 0x71, 0xfc, 0x45, 0x8f, 0xb4, 0xf1, 0x11, 0xf1, 0x16, 0x7b, 0x4b, 0xf2, 0x93, 0xe5, 0x8d, + 0xfe, 0xe2, 0xf0, 0x5f, 0xbe, 0xbc, 0x18, 0x23, 0x86, 0xb4, 0x5f, 0xe5, 0x0b, 0x8d, 0xd5, 0x37, + 0x7e, 0x9d, 0x57, 0x1b, 0xe1, 0x10, 0x57, 0xe9, 0x10, 0x63, 0x83, 0xa9, 0x6e, 0x0b, 0xd6, 0x3f, + 0x46, 0x4c, 0xbb, 0x94, 0x69, 0x37, 0xc6, 0xb4, 0x1b, 0x32, 0x3d, 0xcc, 0x57, 0x87, 0x33, 0xed, + 0xbe, 0xda, 0xa8, 0x85, 0xcf, 0xbb, 0xfe, 0x91, 0x7f, 0x2a, 0x14, 0x58, 0x5e, 0xa6, 0x12, 0xcb, + 0xcb, 0x31, 0x91, 0xe5, 0xe5, 0x50, 0xa6, 0x39, 0xc1, 0x7e, 0xb1, 0x72, 0xf3, 0xbf, 0x01, 0x00, + 0x00, 0xff, 0xff, 0x96, 0xcf, 0xfa, 0xae, 0xe3, 0x33, 0x00, 0x00, } func (m *Transaction) Marshal() (dAtA []byte, err error) { @@ -3681,28 +3873,29 @@ func (m *TransactionBody) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.XEncryptedMemo != nil { + if m.MemoData != nil { { - size := m.XEncryptedMemo.Size() - i -= size - if _, err := m.XEncryptedMemo.MarshalTo(dAtA[i:]); err != nil { + size, err := m.MemoData.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { return 0, err } + i -= size + i = encodeVarintTransaction(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x2a } - if len(m.FmdClues) > 0 { - for iNdEx := len(m.FmdClues) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.FmdClues[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTransaction(dAtA, i, uint64(size)) + if m.DetectionData != nil { + { + size, err := m.DetectionData.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i-- - dAtA[i] = 0x2a + i -= size + i = encodeVarintTransaction(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x22 } if m.Fee != nil { { @@ -3714,19 +3907,19 @@ func (m *TransactionBody) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintTransaction(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 + dAtA[i] = 0x1a } - if len(m.ChainId) > 0 { - i -= len(m.ChainId) - copy(dAtA[i:], m.ChainId) - i = encodeVarintTransaction(dAtA, i, uint64(len(m.ChainId))) - i-- - dAtA[i] = 0x1a - } - if m.ExpiryHeight != 0 { - i = encodeVarintTransaction(dAtA, i, uint64(m.ExpiryHeight)) + if m.TransactionParameters != nil { + { + size, err := m.TransactionParameters.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTransaction(dAtA, i, uint64(size)) + } i-- - dAtA[i] = 0x10 + dAtA[i] = 0x12 } if len(m.Actions) > 0 { for iNdEx := len(m.Actions) - 1; iNdEx >= 0; iNdEx-- { @@ -3745,22 +3938,126 @@ func (m *TransactionBody) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *TransactionBody_EncryptedMemo) MarshalTo(dAtA []byte) (int, error) { +func (m *MemoData) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MemoData) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *TransactionBody_EncryptedMemo) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MemoData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XEncryptedMemo != nil { + { + size := m.XEncryptedMemo.Size() + i -= size + if _, err := m.XEncryptedMemo.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + } + } + return len(dAtA) - i, nil +} + +func (m *MemoData_EncryptedMemo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MemoData_EncryptedMemo) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) if m.EncryptedMemo != nil { i -= len(m.EncryptedMemo) copy(dAtA[i:], m.EncryptedMemo) i = encodeVarintTransaction(dAtA, i, uint64(len(m.EncryptedMemo))) i-- - dAtA[i] = 0x32 + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} +func (m *TransactionParameters) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TransactionParameters) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TransactionParameters) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintTransaction(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x12 + } + if m.ExpiryHeight != 0 { + i = encodeVarintTransaction(dAtA, i, uint64(m.ExpiryHeight)) + i-- + dAtA[i] = 0x8 } return len(dAtA) - i, nil } + +func (m *DetectionData) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DetectionData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DetectionData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.FmdClues) > 0 { + for iNdEx := len(m.FmdClues) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.FmdClues[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTransaction(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + return len(dAtA) - i, nil +} + func (m *Action) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -4603,18 +4900,13 @@ func (m *TransactionBodyView) MarshalToSizedBuffer(dAtA []byte) (int, error) { } } } - if len(m.FmdClues) > 0 { - for iNdEx := len(m.FmdClues) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.FmdClues[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTransaction(dAtA, i, uint64(size)) + if m.XDetectionData != nil { + { + size := m.XDetectionData.Size() + i -= size + if _, err := m.XDetectionData.MarshalTo(dAtA[i:]); err != nil { + return 0, err } - i-- - dAtA[i] = 0x2a } } if m.Fee != nil { @@ -4627,19 +4919,19 @@ func (m *TransactionBodyView) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintTransaction(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 - } - if len(m.ChainId) > 0 { - i -= len(m.ChainId) - copy(dAtA[i:], m.ChainId) - i = encodeVarintTransaction(dAtA, i, uint64(len(m.ChainId))) - i-- dAtA[i] = 0x1a } - if m.ExpiryHeight != 0 { - i = encodeVarintTransaction(dAtA, i, uint64(m.ExpiryHeight)) + if m.TransactionParameters != nil { + { + size, err := m.TransactionParameters.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTransaction(dAtA, i, uint64(size)) + } i-- - dAtA[i] = 0x10 + dAtA[i] = 0x12 } if len(m.ActionViews) > 0 { for iNdEx := len(m.ActionViews) - 1; iNdEx >= 0; iNdEx-- { @@ -4658,6 +4950,27 @@ func (m *TransactionBodyView) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *TransactionBodyView_DetectionData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TransactionBodyView_DetectionData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.DetectionData != nil { + { + size, err := m.DetectionData.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTransaction(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + return len(dAtA) - i, nil +} func (m *TransactionBodyView_MemoView) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) @@ -4675,7 +4988,7 @@ func (m *TransactionBodyView_MemoView) MarshalToSizedBuffer(dAtA []byte) (int, e i = encodeVarintTransaction(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x32 + dAtA[i] = 0x2a } return len(dAtA) - i, nil } @@ -6971,6 +7284,20 @@ func (m *SpendPlan) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.ProofBlindingS) > 0 { + i -= len(m.ProofBlindingS) + copy(dAtA[i:], m.ProofBlindingS) + i = encodeVarintTransaction(dAtA, i, uint64(len(m.ProofBlindingS))) + i-- + dAtA[i] = 0x32 + } + if len(m.ProofBlindingR) > 0 { + i -= len(m.ProofBlindingR) + copy(dAtA[i:], m.ProofBlindingR) + i = encodeVarintTransaction(dAtA, i, uint64(len(m.ProofBlindingR))) + i-- + dAtA[i] = 0x2a + } if len(m.ValueBlinding) > 0 { i -= len(m.ValueBlinding) copy(dAtA[i:], m.ValueBlinding) @@ -7025,6 +7352,20 @@ func (m *OutputPlan) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.ProofBlindingS) > 0 { + i -= len(m.ProofBlindingS) + copy(dAtA[i:], m.ProofBlindingS) + i = encodeVarintTransaction(dAtA, i, uint64(len(m.ProofBlindingS))) + i-- + dAtA[i] = 0x32 + } + if len(m.ProofBlindingR) > 0 { + i -= len(m.ProofBlindingR) + copy(dAtA[i:], m.ProofBlindingR) + i = encodeVarintTransaction(dAtA, i, uint64(len(m.ProofBlindingR))) + i-- + dAtA[i] = 0x2a + } if len(m.ValueBlinding) > 0 { i -= len(m.ValueBlinding) copy(dAtA[i:], m.ValueBlinding) @@ -7136,30 +7477,38 @@ func (m *TransactionBody) Size() (n int) { n += 1 + l + sovTransaction(uint64(l)) } } - if m.ExpiryHeight != 0 { - n += 1 + sovTransaction(uint64(m.ExpiryHeight)) - } - l = len(m.ChainId) - if l > 0 { + if m.TransactionParameters != nil { + l = m.TransactionParameters.Size() n += 1 + l + sovTransaction(uint64(l)) } if m.Fee != nil { l = m.Fee.Size() n += 1 + l + sovTransaction(uint64(l)) } - if len(m.FmdClues) > 0 { - for _, e := range m.FmdClues { - l = e.Size() - n += 1 + l + sovTransaction(uint64(l)) - } + if m.DetectionData != nil { + l = m.DetectionData.Size() + n += 1 + l + sovTransaction(uint64(l)) + } + if m.MemoData != nil { + l = m.MemoData.Size() + n += 1 + l + sovTransaction(uint64(l)) + } + return n +} + +func (m *MemoData) Size() (n int) { + if m == nil { + return 0 } + var l int + _ = l if m.XEncryptedMemo != nil { n += m.XEncryptedMemo.Size() } return n } -func (m *TransactionBody_EncryptedMemo) Size() (n int) { +func (m *MemoData_EncryptedMemo) Size() (n int) { if m == nil { return 0 } @@ -7171,6 +7520,37 @@ func (m *TransactionBody_EncryptedMemo) Size() (n int) { } return n } +func (m *TransactionParameters) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ExpiryHeight != 0 { + n += 1 + sovTransaction(uint64(m.ExpiryHeight)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovTransaction(uint64(l)) + } + return n +} + +func (m *DetectionData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.FmdClues) > 0 { + for _, e := range m.FmdClues { + l = e.Size() + n += 1 + l + sovTransaction(uint64(l)) + } + } + return n +} + func (m *Action) Size() (n int) { if m == nil { return 0 @@ -7570,22 +7950,16 @@ func (m *TransactionBodyView) Size() (n int) { n += 1 + l + sovTransaction(uint64(l)) } } - if m.ExpiryHeight != 0 { - n += 1 + sovTransaction(uint64(m.ExpiryHeight)) - } - l = len(m.ChainId) - if l > 0 { + if m.TransactionParameters != nil { + l = m.TransactionParameters.Size() n += 1 + l + sovTransaction(uint64(l)) } if m.Fee != nil { l = m.Fee.Size() n += 1 + l + sovTransaction(uint64(l)) } - if len(m.FmdClues) > 0 { - for _, e := range m.FmdClues { - l = e.Size() - n += 1 + l + sovTransaction(uint64(l)) - } + if m.XDetectionData != nil { + n += m.XDetectionData.Size() } if m.XMemoView != nil { n += m.XMemoView.Size() @@ -7593,6 +7967,18 @@ func (m *TransactionBodyView) Size() (n int) { return n } +func (m *TransactionBodyView_DetectionData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.DetectionData != nil { + l = m.DetectionData.Size() + n += 1 + l + sovTransaction(uint64(l)) + } + return n +} func (m *TransactionBodyView_MemoView) Size() (n int) { if m == nil { return 0 @@ -8677,6 +9063,14 @@ func (m *SpendPlan) Size() (n int) { if l > 0 { n += 1 + l + sovTransaction(uint64(l)) } + l = len(m.ProofBlindingR) + if l > 0 { + n += 1 + l + sovTransaction(uint64(l)) + } + l = len(m.ProofBlindingS) + if l > 0 { + n += 1 + l + sovTransaction(uint64(l)) + } return n } @@ -8702,6 +9096,14 @@ func (m *OutputPlan) Size() (n int) { if l > 0 { n += 1 + l + sovTransaction(uint64(l)) } + l = len(m.ProofBlindingR) + if l > 0 { + n += 1 + l + sovTransaction(uint64(l)) + } + l = len(m.ProofBlindingS) + if l > 0 { + n += 1 + l + sovTransaction(uint64(l)) + } return n } @@ -9099,10 +9501,10 @@ func (m *TransactionBody) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ExpiryHeight", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TransactionParameters", wireType) } - m.ExpiryHeight = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTransaction @@ -9112,16 +9514,33 @@ func (m *TransactionBody) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.ExpiryHeight |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } + if msglen < 0 { + return ErrInvalidLengthTransaction + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTransaction + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TransactionParameters == nil { + m.TransactionParameters = &TransactionParameters{} + } + if err := m.TransactionParameters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Fee", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTransaction @@ -9131,27 +9550,31 @@ func (m *TransactionBody) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthTransaction } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthTransaction } if postIndex > l { return io.ErrUnexpectedEOF } - m.ChainId = string(dAtA[iNdEx:postIndex]) + if m.Fee == nil { + m.Fee = &v1alpha1.Fee{} + } + if err := m.Fee.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fee", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DetectionData", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -9163,29 +9586,299 @@ func (m *TransactionBody) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTransaction + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTransaction + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DetectionData == nil { + m.DetectionData = &DetectionData{} + } + if err := m.DetectionData.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MemoData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTransaction + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTransaction + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTransaction + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MemoData == nil { + m.MemoData = &MemoData{} + } + if err := m.MemoData.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTransaction(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTransaction + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MemoData) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTransaction + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MemoData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MemoData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EncryptedMemo", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTransaction + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTransaction + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTransaction + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := make([]byte, postIndex-iNdEx) + copy(v, dAtA[iNdEx:postIndex]) + m.XEncryptedMemo = &MemoData_EncryptedMemo{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTransaction(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTransaction + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TransactionParameters) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTransaction + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TransactionParameters: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TransactionParameters: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpiryHeight", wireType) + } + m.ExpiryHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTransaction + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ExpiryHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTransaction + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthTransaction } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthTransaction } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Fee == nil { - m.Fee = &v1alpha1.Fee{} - } - if err := m.Fee.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTransaction(dAtA[iNdEx:]) + if err != nil { return err } - iNdEx = postIndex - case 5: + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTransaction + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DetectionData) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTransaction + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DetectionData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DetectionData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field FmdClues", wireType) } @@ -9219,39 +9912,6 @@ func (m *TransactionBody) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EncryptedMemo", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTransaction - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthTransaction - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthTransaction - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := make([]byte, postIndex-iNdEx) - copy(v, dAtA[iNdEx:postIndex]) - m.XEncryptedMemo = &TransactionBody_EncryptedMemo{v} - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTransaction(dAtA[iNdEx:]) @@ -10897,29 +11557,10 @@ func (m *TransactionBodyView) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ExpiryHeight", wireType) - } - m.ExpiryHeight = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTransaction - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ExpiryHeight |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TransactionParameters", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTransaction @@ -10929,25 +11570,29 @@ func (m *TransactionBodyView) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthTransaction } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthTransaction } if postIndex > l { return io.ErrUnexpectedEOF } - m.ChainId = string(dAtA[iNdEx:postIndex]) + if m.TransactionParameters == nil { + m.TransactionParameters = &TransactionParameters{} + } + if err := m.TransactionParameters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 4: + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Fee", wireType) } @@ -10983,9 +11628,9 @@ func (m *TransactionBodyView) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 5: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FmdClues", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DetectionData", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -11012,12 +11657,13 @@ func (m *TransactionBodyView) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.FmdClues = append(m.FmdClues, &v1alpha1.Clue{}) - if err := m.FmdClues[len(m.FmdClues)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + v := &DetectionData{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } + m.XDetectionData = &TransactionBodyView_DetectionData{v} iNdEx = postIndex - case 6: + case 5: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field MemoView", wireType) } @@ -15813,6 +16459,74 @@ func (m *SpendPlan) Unmarshal(dAtA []byte) error { m.ValueBlinding = []byte{} } iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofBlindingR", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTransaction + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTransaction + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTransaction + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofBlindingR = append(m.ProofBlindingR[:0], dAtA[iNdEx:postIndex]...) + if m.ProofBlindingR == nil { + m.ProofBlindingR = []byte{} + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofBlindingS", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTransaction + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTransaction + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTransaction + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofBlindingS = append(m.ProofBlindingS[:0], dAtA[iNdEx:postIndex]...) + if m.ProofBlindingS == nil { + m.ProofBlindingS = []byte{} + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTransaction(dAtA[iNdEx:]) @@ -16003,6 +16717,74 @@ func (m *OutputPlan) Unmarshal(dAtA []byte) error { m.ValueBlinding = []byte{} } iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofBlindingR", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTransaction + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTransaction + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTransaction + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofBlindingR = append(m.ProofBlindingR[:0], dAtA[iNdEx:postIndex]...) + if m.ProofBlindingR == nil { + m.ProofBlindingR = []byte{} + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofBlindingS", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTransaction + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTransaction + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTransaction + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofBlindingS = append(m.ProofBlindingS[:0], dAtA[iNdEx:postIndex]...) + if m.ProofBlindingS == nil { + m.ProofBlindingS = []byte{} + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTransaction(dAtA[iNdEx:]) diff --git a/relayer/chains/penumbra/tx.go b/relayer/chains/penumbra/tx.go index 5f0827957..4ef4c8d30 100644 --- a/relayer/chains/penumbra/tx.go +++ b/relayer/chains/penumbra/tx.go @@ -313,8 +313,10 @@ func (cc *PenumbraProvider) sendMessagesInner(ctx context.Context, msgs []provid // will have a signing protocol for this. txBody := penumbratypes.TransactionBody{ - Actions: make([]*penumbratypes.Action, 0), - Fee: &penumbracrypto.Fee{Amount: &penumbracrypto.Amount{Lo: 0, Hi: 0}}, + Actions: make([]*penumbratypes.Action, 0), + Fee: &penumbracrypto.Fee{Amount: &penumbracrypto.Amount{Lo: 0, Hi: 0}}, + MemoData: &penumbratypes.MemoData{}, + TransactionParameters: &penumbratypes.TransactionParameters{}, } for _, msg := range PenumbraMsgs(msgs...) { diff --git a/relayer/chains/penumbra/view/v1alpha1/view.pb.go b/relayer/chains/penumbra/view/v1alpha1/view.pb.go index d8dcd6e9e..aacce5f7e 100644 --- a/relayer/chains/penumbra/view/v1alpha1/view.pb.go +++ b/relayer/chains/penumbra/view/v1alpha1/view.pb.go @@ -33,6 +33,105 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +type AuthorizeAndBuildRequest struct { + // The transaction plan to authorize and build. + TransactionPlan *v1alpha1.TransactionPlan `protobuf:"bytes,1,opt,name=transaction_plan,json=transactionPlan,proto3" json:"transaction_plan,omitempty"` + // The authorization data to use to authorize the transaction plan. + AuthorizationData *v1alpha1.AuthorizationData `protobuf:"bytes,2,opt,name=authorization_data,json=authorizationData,proto3" json:"authorization_data,omitempty"` +} + +func (m *AuthorizeAndBuildRequest) Reset() { *m = AuthorizeAndBuildRequest{} } +func (m *AuthorizeAndBuildRequest) String() string { return proto.CompactTextString(m) } +func (*AuthorizeAndBuildRequest) ProtoMessage() {} +func (*AuthorizeAndBuildRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0aa947b204e6a7c2, []int{0} +} +func (m *AuthorizeAndBuildRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AuthorizeAndBuildRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AuthorizeAndBuildRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *AuthorizeAndBuildRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuthorizeAndBuildRequest.Merge(m, src) +} +func (m *AuthorizeAndBuildRequest) XXX_Size() int { + return m.Size() +} +func (m *AuthorizeAndBuildRequest) XXX_DiscardUnknown() { + xxx_messageInfo_AuthorizeAndBuildRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_AuthorizeAndBuildRequest proto.InternalMessageInfo + +func (m *AuthorizeAndBuildRequest) GetTransactionPlan() *v1alpha1.TransactionPlan { + if m != nil { + return m.TransactionPlan + } + return nil +} + +func (m *AuthorizeAndBuildRequest) GetAuthorizationData() *v1alpha1.AuthorizationData { + if m != nil { + return m.AuthorizationData + } + return nil +} + +type AuthorizeAndBuildResponse struct { + // The transaction that was built. + Transaction *v1alpha1.Transaction `protobuf:"bytes,1,opt,name=transaction,proto3" json:"transaction,omitempty"` +} + +func (m *AuthorizeAndBuildResponse) Reset() { *m = AuthorizeAndBuildResponse{} } +func (m *AuthorizeAndBuildResponse) String() string { return proto.CompactTextString(m) } +func (*AuthorizeAndBuildResponse) ProtoMessage() {} +func (*AuthorizeAndBuildResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0aa947b204e6a7c2, []int{1} +} +func (m *AuthorizeAndBuildResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AuthorizeAndBuildResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AuthorizeAndBuildResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *AuthorizeAndBuildResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuthorizeAndBuildResponse.Merge(m, src) +} +func (m *AuthorizeAndBuildResponse) XXX_Size() int { + return m.Size() +} +func (m *AuthorizeAndBuildResponse) XXX_DiscardUnknown() { + xxx_messageInfo_AuthorizeAndBuildResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_AuthorizeAndBuildResponse proto.InternalMessageInfo + +func (m *AuthorizeAndBuildResponse) GetTransaction() *v1alpha1.Transaction { + if m != nil { + return m.Transaction + } + return nil +} + type BroadcastTransactionRequest struct { // The transaction to broadcast. Transaction *v1alpha1.Transaction `protobuf:"bytes,1,opt,name=transaction,proto3" json:"transaction,omitempty"` @@ -44,7 +143,7 @@ func (m *BroadcastTransactionRequest) Reset() { *m = BroadcastTransactio func (m *BroadcastTransactionRequest) String() string { return proto.CompactTextString(m) } func (*BroadcastTransactionRequest) ProtoMessage() {} func (*BroadcastTransactionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{0} + return fileDescriptor_0aa947b204e6a7c2, []int{2} } func (m *BroadcastTransactionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -99,7 +198,7 @@ func (m *BroadcastTransactionResponse) Reset() { *m = BroadcastTransacti func (m *BroadcastTransactionResponse) String() string { return proto.CompactTextString(m) } func (*BroadcastTransactionResponse) ProtoMessage() {} func (*BroadcastTransactionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{1} + return fileDescriptor_0aa947b204e6a7c2, []int{3} } func (m *BroadcastTransactionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -164,7 +263,7 @@ func (m *TransactionPlannerRequest) Reset() { *m = TransactionPlannerReq func (m *TransactionPlannerRequest) String() string { return proto.CompactTextString(m) } func (*TransactionPlannerRequest) ProtoMessage() {} func (*TransactionPlannerRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{2} + return fileDescriptor_0aa947b204e6a7c2, []int{4} } func (m *TransactionPlannerRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -292,7 +391,7 @@ func (m *TransactionPlannerRequest_Output) Reset() { *m = TransactionPla func (m *TransactionPlannerRequest_Output) String() string { return proto.CompactTextString(m) } func (*TransactionPlannerRequest_Output) ProtoMessage() {} func (*TransactionPlannerRequest_Output) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{2, 0} + return fileDescriptor_0aa947b204e6a7c2, []int{4, 0} } func (m *TransactionPlannerRequest_Output) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -345,7 +444,7 @@ func (m *TransactionPlannerRequest_Swap) Reset() { *m = TransactionPlann func (m *TransactionPlannerRequest_Swap) String() string { return proto.CompactTextString(m) } func (*TransactionPlannerRequest_Swap) ProtoMessage() {} func (*TransactionPlannerRequest_Swap) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{2, 1} + return fileDescriptor_0aa947b204e6a7c2, []int{4, 1} } func (m *TransactionPlannerRequest_Swap) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -404,7 +503,7 @@ func (m *TransactionPlannerRequest_Delegate) Reset() { *m = TransactionP func (m *TransactionPlannerRequest_Delegate) String() string { return proto.CompactTextString(m) } func (*TransactionPlannerRequest_Delegate) ProtoMessage() {} func (*TransactionPlannerRequest_Delegate) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{2, 2} + return fileDescriptor_0aa947b204e6a7c2, []int{4, 2} } func (m *TransactionPlannerRequest_Delegate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -456,7 +555,7 @@ func (m *TransactionPlannerRequest_Undelegate) Reset() { *m = Transactio func (m *TransactionPlannerRequest_Undelegate) String() string { return proto.CompactTextString(m) } func (*TransactionPlannerRequest_Undelegate) ProtoMessage() {} func (*TransactionPlannerRequest_Undelegate) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{2, 3} + return fileDescriptor_0aa947b204e6a7c2, []int{4, 3} } func (m *TransactionPlannerRequest_Undelegate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -507,7 +606,7 @@ func (m *TransactionPlannerResponse) Reset() { *m = TransactionPlannerRe func (m *TransactionPlannerResponse) String() string { return proto.CompactTextString(m) } func (*TransactionPlannerResponse) ProtoMessage() {} func (*TransactionPlannerResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{3} + return fileDescriptor_0aa947b204e6a7c2, []int{5} } func (m *TransactionPlannerResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -544,14 +643,15 @@ func (m *TransactionPlannerResponse) GetPlan() *v1alpha1.TransactionPlan { } type AddressByIndexRequest struct { - AddressIndex *v1alpha11.AddressIndex `protobuf:"bytes,1,opt,name=address_index,json=addressIndex,proto3" json:"address_index,omitempty"` + AddressIndex *v1alpha11.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"` } func (m *AddressByIndexRequest) Reset() { *m = AddressByIndexRequest{} } func (m *AddressByIndexRequest) String() string { return proto.CompactTextString(m) } func (*AddressByIndexRequest) ProtoMessage() {} func (*AddressByIndexRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{4} + return fileDescriptor_0aa947b204e6a7c2, []int{6} } func (m *AddressByIndexRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -587,6 +687,13 @@ func (m *AddressByIndexRequest) GetAddressIndex() *v1alpha11.AddressIndex { return nil } +func (m *AddressByIndexRequest) GetDisplayConfirm() bool { + if m != nil { + return m.DisplayConfirm + } + return false +} + type AddressByIndexResponse struct { Address *v1alpha11.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } @@ -595,7 +702,7 @@ func (m *AddressByIndexResponse) Reset() { *m = AddressByIndexResponse{} func (m *AddressByIndexResponse) String() string { return proto.CompactTextString(m) } func (*AddressByIndexResponse) ProtoMessage() {} func (*AddressByIndexResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{5} + return fileDescriptor_0aa947b204e6a7c2, []int{7} } func (m *AddressByIndexResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -639,7 +746,7 @@ func (m *IndexByAddressRequest) Reset() { *m = IndexByAddressRequest{} } func (m *IndexByAddressRequest) String() string { return proto.CompactTextString(m) } func (*IndexByAddressRequest) ProtoMessage() {} func (*IndexByAddressRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{6} + return fileDescriptor_0aa947b204e6a7c2, []int{8} } func (m *IndexByAddressRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -685,7 +792,7 @@ func (m *IndexByAddressResponse) Reset() { *m = IndexByAddressResponse{} func (m *IndexByAddressResponse) String() string { return proto.CompactTextString(m) } func (*IndexByAddressResponse) ProtoMessage() {} func (*IndexByAddressResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{7} + return fileDescriptor_0aa947b204e6a7c2, []int{9} } func (m *IndexByAddressResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -748,14 +855,15 @@ func (*IndexByAddressResponse) XXX_OneofWrappers() []interface{} { } type EphemeralAddressRequest struct { - AddressIndex *v1alpha11.AddressIndex `protobuf:"bytes,1,opt,name=address_index,json=addressIndex,proto3" json:"address_index,omitempty"` + AddressIndex *v1alpha11.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"` } func (m *EphemeralAddressRequest) Reset() { *m = EphemeralAddressRequest{} } func (m *EphemeralAddressRequest) String() string { return proto.CompactTextString(m) } func (*EphemeralAddressRequest) ProtoMessage() {} func (*EphemeralAddressRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{8} + return fileDescriptor_0aa947b204e6a7c2, []int{10} } func (m *EphemeralAddressRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -791,6 +899,13 @@ func (m *EphemeralAddressRequest) GetAddressIndex() *v1alpha11.AddressIndex { return nil } +func (m *EphemeralAddressRequest) GetDisplayConfirm() bool { + if m != nil { + return m.DisplayConfirm + } + return false +} + type EphemeralAddressResponse struct { Address *v1alpha11.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } @@ -799,7 +914,7 @@ func (m *EphemeralAddressResponse) Reset() { *m = EphemeralAddressRespon func (m *EphemeralAddressResponse) String() string { return proto.CompactTextString(m) } func (*EphemeralAddressResponse) ProtoMessage() {} func (*EphemeralAddressResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{9} + return fileDescriptor_0aa947b204e6a7c2, []int{11} } func (m *EphemeralAddressResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -835,22 +950,25 @@ func (m *EphemeralAddressResponse) GetAddress() *v1alpha11.Address { return nil } -type BalanceByAddressRequest struct { - Address *v1alpha11.Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +type BalancesRequest struct { + // If present, filter balances to only include the account specified by the `AddressIndex`. + AccountFilter *v1alpha11.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 *v1alpha11.AssetId `protobuf:"bytes,2,opt,name=asset_id_filter,json=assetIdFilter,proto3" json:"asset_id_filter,omitempty"` } -func (m *BalanceByAddressRequest) Reset() { *m = BalanceByAddressRequest{} } -func (m *BalanceByAddressRequest) String() string { return proto.CompactTextString(m) } -func (*BalanceByAddressRequest) ProtoMessage() {} -func (*BalanceByAddressRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{10} +func (m *BalancesRequest) Reset() { *m = BalancesRequest{} } +func (m *BalancesRequest) String() string { return proto.CompactTextString(m) } +func (*BalancesRequest) ProtoMessage() {} +func (*BalancesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0aa947b204e6a7c2, []int{12} } -func (m *BalanceByAddressRequest) XXX_Unmarshal(b []byte) error { +func (m *BalancesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *BalanceByAddressRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *BalancesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_BalanceByAddressRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_BalancesRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -860,42 +978,49 @@ func (m *BalanceByAddressRequest) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } -func (m *BalanceByAddressRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_BalanceByAddressRequest.Merge(m, src) +func (m *BalancesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_BalancesRequest.Merge(m, src) } -func (m *BalanceByAddressRequest) XXX_Size() int { +func (m *BalancesRequest) XXX_Size() int { return m.Size() } -func (m *BalanceByAddressRequest) XXX_DiscardUnknown() { - xxx_messageInfo_BalanceByAddressRequest.DiscardUnknown(m) +func (m *BalancesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_BalancesRequest.DiscardUnknown(m) } -var xxx_messageInfo_BalanceByAddressRequest proto.InternalMessageInfo +var xxx_messageInfo_BalancesRequest proto.InternalMessageInfo -func (m *BalanceByAddressRequest) GetAddress() *v1alpha11.Address { +func (m *BalancesRequest) GetAccountFilter() *v1alpha11.AddressIndex { if m != nil { - return m.Address + return m.AccountFilter + } + return nil +} + +func (m *BalancesRequest) GetAssetIdFilter() *v1alpha11.AssetId { + if m != nil { + return m.AssetIdFilter } return nil } -type BalanceByAddressResponse struct { - Asset *v1alpha11.AssetId `protobuf:"bytes,1,opt,name=asset,proto3" json:"asset,omitempty"` - Amount *v1alpha11.Amount `protobuf:"bytes,2,opt,name=amount,proto3" json:"amount,omitempty"` +type BalancesResponse struct { + Account *v1alpha11.AddressIndex `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + Balance *v1alpha11.Value `protobuf:"bytes,2,opt,name=balance,proto3" json:"balance,omitempty"` } -func (m *BalanceByAddressResponse) Reset() { *m = BalanceByAddressResponse{} } -func (m *BalanceByAddressResponse) String() string { return proto.CompactTextString(m) } -func (*BalanceByAddressResponse) ProtoMessage() {} -func (*BalanceByAddressResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{11} +func (m *BalancesResponse) Reset() { *m = BalancesResponse{} } +func (m *BalancesResponse) String() string { return proto.CompactTextString(m) } +func (*BalancesResponse) ProtoMessage() {} +func (*BalancesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0aa947b204e6a7c2, []int{13} } -func (m *BalanceByAddressResponse) XXX_Unmarshal(b []byte) error { +func (m *BalancesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *BalanceByAddressResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *BalancesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_BalanceByAddressResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_BalancesResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -905,28 +1030,28 @@ func (m *BalanceByAddressResponse) XXX_Marshal(b []byte, deterministic bool) ([] return b[:n], nil } } -func (m *BalanceByAddressResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_BalanceByAddressResponse.Merge(m, src) +func (m *BalancesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_BalancesResponse.Merge(m, src) } -func (m *BalanceByAddressResponse) XXX_Size() int { +func (m *BalancesResponse) XXX_Size() int { return m.Size() } -func (m *BalanceByAddressResponse) XXX_DiscardUnknown() { - xxx_messageInfo_BalanceByAddressResponse.DiscardUnknown(m) +func (m *BalancesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_BalancesResponse.DiscardUnknown(m) } -var xxx_messageInfo_BalanceByAddressResponse proto.InternalMessageInfo +var xxx_messageInfo_BalancesResponse proto.InternalMessageInfo -func (m *BalanceByAddressResponse) GetAsset() *v1alpha11.AssetId { +func (m *BalancesResponse) GetAccount() *v1alpha11.AddressIndex { if m != nil { - return m.Asset + return m.Account } return nil } -func (m *BalanceByAddressResponse) GetAmount() *v1alpha11.Amount { +func (m *BalancesResponse) GetBalance() *v1alpha11.Value { if m != nil { - return m.Amount + return m.Balance } return nil } @@ -940,7 +1065,7 @@ func (m *ViewAuthToken) Reset() { *m = ViewAuthToken{} } func (m *ViewAuthToken) String() string { return proto.CompactTextString(m) } func (*ViewAuthToken) ProtoMessage() {} func (*ViewAuthToken) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{12} + return fileDescriptor_0aa947b204e6a7c2, []int{14} } func (m *ViewAuthToken) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -984,7 +1109,7 @@ func (m *ViewAuthRequest) Reset() { *m = ViewAuthRequest{} } func (m *ViewAuthRequest) String() string { return proto.CompactTextString(m) } func (*ViewAuthRequest) ProtoMessage() {} func (*ViewAuthRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{13} + return fileDescriptor_0aa947b204e6a7c2, []int{15} } func (m *ViewAuthRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1028,7 +1153,7 @@ func (m *ViewAuthResponse) Reset() { *m = ViewAuthResponse{} } func (m *ViewAuthResponse) String() string { return proto.CompactTextString(m) } func (*ViewAuthResponse) ProtoMessage() {} func (*ViewAuthResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{14} + return fileDescriptor_0aa947b204e6a7c2, []int{16} } func (m *ViewAuthResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1075,7 +1200,7 @@ func (m *StatusRequest) Reset() { *m = StatusRequest{} } func (m *StatusRequest) String() string { return proto.CompactTextString(m) } func (*StatusRequest) ProtoMessage() {} func (*StatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{15} + return fileDescriptor_0aa947b204e6a7c2, []int{17} } func (m *StatusRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1149,7 +1274,7 @@ func (m *StatusResponse) Reset() { *m = StatusResponse{} } func (m *StatusResponse) String() string { return proto.CompactTextString(m) } func (*StatusResponse) ProtoMessage() {} func (*StatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{16} + return fileDescriptor_0aa947b204e6a7c2, []int{18} } func (m *StatusResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1203,7 +1328,7 @@ func (m *StatusStreamRequest) Reset() { *m = StatusStreamRequest{} } func (m *StatusStreamRequest) String() string { return proto.CompactTextString(m) } func (*StatusStreamRequest) ProtoMessage() {} func (*StatusStreamRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{17} + return fileDescriptor_0aa947b204e6a7c2, []int{19} } func (m *StatusStreamRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1275,7 +1400,7 @@ func (m *StatusStreamResponse) Reset() { *m = StatusStreamResponse{} } func (m *StatusStreamResponse) String() string { return proto.CompactTextString(m) } func (*StatusStreamResponse) ProtoMessage() {} func (*StatusStreamResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{18} + return fileDescriptor_0aa947b204e6a7c2, []int{20} } func (m *StatusStreamResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1342,7 +1467,7 @@ func (m *NotesRequest) Reset() { *m = NotesRequest{} } func (m *NotesRequest) String() string { return proto.CompactTextString(m) } func (*NotesRequest) ProtoMessage() {} func (*NotesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{19} + return fileDescriptor_0aa947b204e6a7c2, []int{21} } func (m *NotesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1447,7 +1572,7 @@ func (m *NotesForVotingRequest) Reset() { *m = NotesForVotingRequest{} } func (m *NotesForVotingRequest) String() string { return proto.CompactTextString(m) } func (*NotesForVotingRequest) ProtoMessage() {} func (*NotesForVotingRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{20} + return fileDescriptor_0aa947b204e6a7c2, []int{22} } func (m *NotesForVotingRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1537,7 +1662,7 @@ func (m *WitnessRequest) Reset() { *m = WitnessRequest{} } func (m *WitnessRequest) String() string { return proto.CompactTextString(m) } func (*WitnessRequest) ProtoMessage() {} func (*WitnessRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{21} + return fileDescriptor_0aa947b204e6a7c2, []int{23} } func (m *WitnessRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1621,7 +1746,7 @@ func (m *WitnessResponse) Reset() { *m = WitnessResponse{} } func (m *WitnessResponse) String() string { return proto.CompactTextString(m) } func (*WitnessResponse) ProtoMessage() {} func (*WitnessResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{22} + return fileDescriptor_0aa947b204e6a7c2, []int{24} } func (m *WitnessResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1666,7 +1791,7 @@ func (m *WitnessAndBuildRequest) Reset() { *m = WitnessAndBuildRequest{} func (m *WitnessAndBuildRequest) String() string { return proto.CompactTextString(m) } func (*WitnessAndBuildRequest) ProtoMessage() {} func (*WitnessAndBuildRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{23} + return fileDescriptor_0aa947b204e6a7c2, []int{25} } func (m *WitnessAndBuildRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1717,7 +1842,7 @@ func (m *WitnessAndBuildResponse) Reset() { *m = WitnessAndBuildResponse func (m *WitnessAndBuildResponse) String() string { return proto.CompactTextString(m) } func (*WitnessAndBuildResponse) ProtoMessage() {} func (*WitnessAndBuildResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{24} + return fileDescriptor_0aa947b204e6a7c2, []int{26} } func (m *WitnessAndBuildResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1776,7 +1901,7 @@ func (m *AssetsRequest) Reset() { *m = AssetsRequest{} } func (m *AssetsRequest) String() string { return proto.CompactTextString(m) } func (*AssetsRequest) ProtoMessage() {} func (*AssetsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{25} + return fileDescriptor_0aa947b204e6a7c2, []int{27} } func (m *AssetsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1863,7 +1988,7 @@ func (m *AssetsResponse) Reset() { *m = AssetsResponse{} } func (m *AssetsResponse) String() string { return proto.CompactTextString(m) } func (*AssetsResponse) ProtoMessage() {} func (*AssetsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{26} + return fileDescriptor_0aa947b204e6a7c2, []int{28} } func (m *AssetsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1907,7 +2032,7 @@ func (m *ChainParametersRequest) Reset() { *m = ChainParametersRequest{} func (m *ChainParametersRequest) String() string { return proto.CompactTextString(m) } func (*ChainParametersRequest) ProtoMessage() {} func (*ChainParametersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{27} + return fileDescriptor_0aa947b204e6a7c2, []int{29} } func (m *ChainParametersRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1944,7 +2069,7 @@ func (m *ChainParametersResponse) Reset() { *m = ChainParametersResponse func (m *ChainParametersResponse) String() string { return proto.CompactTextString(m) } func (*ChainParametersResponse) ProtoMessage() {} func (*ChainParametersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{28} + return fileDescriptor_0aa947b204e6a7c2, []int{30} } func (m *ChainParametersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1988,7 +2113,7 @@ func (m *FMDParametersRequest) Reset() { *m = FMDParametersRequest{} } func (m *FMDParametersRequest) String() string { return proto.CompactTextString(m) } func (*FMDParametersRequest) ProtoMessage() {} func (*FMDParametersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{29} + return fileDescriptor_0aa947b204e6a7c2, []int{31} } func (m *FMDParametersRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2025,7 +2150,7 @@ func (m *FMDParametersResponse) Reset() { *m = FMDParametersResponse{} } func (m *FMDParametersResponse) String() string { return proto.CompactTextString(m) } func (*FMDParametersResponse) ProtoMessage() {} func (*FMDParametersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{30} + return fileDescriptor_0aa947b204e6a7c2, []int{32} } func (m *FMDParametersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2074,7 +2199,7 @@ func (m *NoteByCommitmentRequest) Reset() { *m = NoteByCommitmentRequest func (m *NoteByCommitmentRequest) String() string { return proto.CompactTextString(m) } func (*NoteByCommitmentRequest) ProtoMessage() {} func (*NoteByCommitmentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{31} + return fileDescriptor_0aa947b204e6a7c2, []int{33} } func (m *NoteByCommitmentRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2158,7 +2283,7 @@ func (m *NoteByCommitmentResponse) Reset() { *m = NoteByCommitmentRespon func (m *NoteByCommitmentResponse) String() string { return proto.CompactTextString(m) } func (*NoteByCommitmentResponse) ProtoMessage() {} func (*NoteByCommitmentResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{32} + return fileDescriptor_0aa947b204e6a7c2, []int{34} } func (m *NoteByCommitmentResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2207,7 +2332,7 @@ func (m *SwapByCommitmentRequest) Reset() { *m = SwapByCommitmentRequest func (m *SwapByCommitmentRequest) String() string { return proto.CompactTextString(m) } func (*SwapByCommitmentRequest) ProtoMessage() {} func (*SwapByCommitmentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{33} + return fileDescriptor_0aa947b204e6a7c2, []int{35} } func (m *SwapByCommitmentRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2291,7 +2416,7 @@ func (m *SwapByCommitmentResponse) Reset() { *m = SwapByCommitmentRespon func (m *SwapByCommitmentResponse) String() string { return proto.CompactTextString(m) } func (*SwapByCommitmentResponse) ProtoMessage() {} func (*SwapByCommitmentResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{34} + return fileDescriptor_0aa947b204e6a7c2, []int{36} } func (m *SwapByCommitmentResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2339,7 +2464,7 @@ func (m *NullifierStatusRequest) Reset() { *m = NullifierStatusRequest{} func (m *NullifierStatusRequest) String() string { return proto.CompactTextString(m) } func (*NullifierStatusRequest) ProtoMessage() {} func (*NullifierStatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{35} + return fileDescriptor_0aa947b204e6a7c2, []int{37} } func (m *NullifierStatusRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2423,7 +2548,7 @@ func (m *NullifierStatusResponse) Reset() { *m = NullifierStatusResponse func (m *NullifierStatusResponse) String() string { return proto.CompactTextString(m) } func (*NullifierStatusResponse) ProtoMessage() {} func (*NullifierStatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{36} + return fileDescriptor_0aa947b204e6a7c2, []int{38} } func (m *NullifierStatusResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2468,7 +2593,7 @@ func (m *TransactionInfoByHashRequest) Reset() { *m = TransactionInfoByH func (m *TransactionInfoByHashRequest) String() string { return proto.CompactTextString(m) } func (*TransactionInfoByHashRequest) ProtoMessage() {} func (*TransactionInfoByHashRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{37} + return fileDescriptor_0aa947b204e6a7c2, []int{39} } func (m *TransactionInfoByHashRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2517,7 +2642,7 @@ func (m *TransactionInfoRequest) Reset() { *m = TransactionInfoRequest{} func (m *TransactionInfoRequest) String() string { return proto.CompactTextString(m) } func (*TransactionInfoRequest) ProtoMessage() {} func (*TransactionInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{38} + return fileDescriptor_0aa947b204e6a7c2, []int{40} } func (m *TransactionInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2620,7 +2745,7 @@ func (m *TransactionInfo) Reset() { *m = TransactionInfo{} } func (m *TransactionInfo) String() string { return proto.CompactTextString(m) } func (*TransactionInfo) ProtoMessage() {} func (*TransactionInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{39} + return fileDescriptor_0aa947b204e6a7c2, []int{41} } func (m *TransactionInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2718,7 +2843,7 @@ func (m *TransactionInfoResponse) Reset() { *m = TransactionInfoResponse func (m *TransactionInfoResponse) String() string { return proto.CompactTextString(m) } func (*TransactionInfoResponse) ProtoMessage() {} func (*TransactionInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{40} + return fileDescriptor_0aa947b204e6a7c2, []int{42} } func (m *TransactionInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2762,7 +2887,7 @@ func (m *TransactionInfoByHashResponse) Reset() { *m = TransactionInfoBy func (m *TransactionInfoByHashResponse) String() string { return proto.CompactTextString(m) } func (*TransactionInfoByHashResponse) ProtoMessage() {} func (*TransactionInfoByHashResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{41} + return fileDescriptor_0aa947b204e6a7c2, []int{43} } func (m *TransactionInfoByHashResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2806,7 +2931,7 @@ func (m *NotesResponse) Reset() { *m = NotesResponse{} } func (m *NotesResponse) String() string { return proto.CompactTextString(m) } func (*NotesResponse) ProtoMessage() {} func (*NotesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{42} + return fileDescriptor_0aa947b204e6a7c2, []int{44} } func (m *NotesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2851,7 +2976,7 @@ func (m *NotesForVotingResponse) Reset() { *m = NotesForVotingResponse{} func (m *NotesForVotingResponse) String() string { return proto.CompactTextString(m) } func (*NotesForVotingResponse) ProtoMessage() {} func (*NotesForVotingResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{43} + return fileDescriptor_0aa947b204e6a7c2, []int{45} } func (m *NotesForVotingResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2919,7 +3044,7 @@ func (m *SpendableNoteRecord) Reset() { *m = SpendableNoteRecord{} } func (m *SpendableNoteRecord) String() string { return proto.CompactTextString(m) } func (*SpendableNoteRecord) ProtoMessage() {} func (*SpendableNoteRecord) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{44} + return fileDescriptor_0aa947b204e6a7c2, []int{46} } func (m *SpendableNoteRecord) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3046,7 +3171,7 @@ func (m *SwapRecord) Reset() { *m = SwapRecord{} } func (m *SwapRecord) String() string { return proto.CompactTextString(m) } func (*SwapRecord) ProtoMessage() {} func (*SwapRecord) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{45} + return fileDescriptor_0aa947b204e6a7c2, []int{47} } func (m *SwapRecord) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3163,7 +3288,7 @@ func (m *OwnedPositionIdsRequest) Reset() { *m = OwnedPositionIdsRequest func (m *OwnedPositionIdsRequest) String() string { return proto.CompactTextString(m) } func (*OwnedPositionIdsRequest) ProtoMessage() {} func (*OwnedPositionIdsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{46} + return fileDescriptor_0aa947b204e6a7c2, []int{48} } func (m *OwnedPositionIdsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3256,7 +3381,7 @@ func (m *OwnedPositionIdsResponse) Reset() { *m = OwnedPositionIdsRespon func (m *OwnedPositionIdsResponse) String() string { return proto.CompactTextString(m) } func (*OwnedPositionIdsResponse) ProtoMessage() {} func (*OwnedPositionIdsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{47} + return fileDescriptor_0aa947b204e6a7c2, []int{49} } func (m *OwnedPositionIdsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3293,6 +3418,8 @@ func (m *OwnedPositionIdsResponse) GetPositionIds() []*v1alpha15.PositionId { } func init() { + proto.RegisterType((*AuthorizeAndBuildRequest)(nil), "penumbra.view.v1alpha1.AuthorizeAndBuildRequest") + proto.RegisterType((*AuthorizeAndBuildResponse)(nil), "penumbra.view.v1alpha1.AuthorizeAndBuildResponse") proto.RegisterType((*BroadcastTransactionRequest)(nil), "penumbra.view.v1alpha1.BroadcastTransactionRequest") proto.RegisterType((*BroadcastTransactionResponse)(nil), "penumbra.view.v1alpha1.BroadcastTransactionResponse") proto.RegisterType((*TransactionPlannerRequest)(nil), "penumbra.view.v1alpha1.TransactionPlannerRequest") @@ -3307,8 +3434,8 @@ func init() { proto.RegisterType((*IndexByAddressResponse)(nil), "penumbra.view.v1alpha1.IndexByAddressResponse") proto.RegisterType((*EphemeralAddressRequest)(nil), "penumbra.view.v1alpha1.EphemeralAddressRequest") proto.RegisterType((*EphemeralAddressResponse)(nil), "penumbra.view.v1alpha1.EphemeralAddressResponse") - proto.RegisterType((*BalanceByAddressRequest)(nil), "penumbra.view.v1alpha1.BalanceByAddressRequest") - proto.RegisterType((*BalanceByAddressResponse)(nil), "penumbra.view.v1alpha1.BalanceByAddressResponse") + proto.RegisterType((*BalancesRequest)(nil), "penumbra.view.v1alpha1.BalancesRequest") + proto.RegisterType((*BalancesResponse)(nil), "penumbra.view.v1alpha1.BalancesResponse") proto.RegisterType((*ViewAuthToken)(nil), "penumbra.view.v1alpha1.ViewAuthToken") proto.RegisterType((*ViewAuthRequest)(nil), "penumbra.view.v1alpha1.ViewAuthRequest") proto.RegisterType((*ViewAuthResponse)(nil), "penumbra.view.v1alpha1.ViewAuthResponse") @@ -3350,187 +3477,192 @@ func init() { func init() { proto.RegisterFile("penumbra/view/v1alpha1/view.proto", fileDescriptor_0aa947b204e6a7c2) } var fileDescriptor_0aa947b204e6a7c2 = []byte{ - // 2865 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5a, 0xdd, 0x6f, 0x1b, 0xc7, - 0xb5, 0xf7, 0x92, 0xfa, 0xf2, 0xa1, 0x48, 0xca, 0x63, 0x5b, 0x62, 0x98, 0x44, 0xf1, 0xdd, 0xc4, - 0xb6, 0xe2, 0x24, 0x94, 0xa3, 0x38, 0xb9, 0xb9, 0x4a, 0x82, 0x1b, 0xd1, 0xba, 0xb2, 0x04, 0xc7, - 0x31, 0xef, 0xca, 0x56, 0x9a, 0x44, 0xe9, 0x62, 0xb4, 0x3b, 0x92, 0xb6, 0x22, 0x77, 0x37, 0xbb, - 0x43, 0x51, 0x6a, 0x9f, 0x52, 0x04, 0x85, 0x11, 0xa0, 0x41, 0xdf, 0x8a, 0xbc, 0xf6, 0xb1, 0xe8, - 0x6b, 0x5f, 0xfb, 0xd2, 0x97, 0xa2, 0x4f, 0x79, 0x2c, 0xd0, 0xa2, 0x28, 0x1c, 0xf4, 0xa5, 0xfd, - 0x17, 0x0a, 0xb4, 0x98, 0xaf, 0xe5, 0xee, 0x92, 0x6b, 0x92, 0xb2, 0x0c, 0xb7, 0x4f, 0xe4, 0xcc, - 0x9c, 0xf3, 0x3b, 0x67, 0xce, 0x9c, 0x39, 0x73, 0xe6, 0xcc, 0xc2, 0x7f, 0xf9, 0xc4, 0x6d, 0xb7, - 0x76, 0x02, 0xbc, 0x78, 0xe8, 0x90, 0xce, 0xe2, 0xe1, 0xeb, 0xb8, 0xe9, 0xef, 0xe3, 0xd7, 0x79, - 0xab, 0xe6, 0x07, 0x1e, 0xf5, 0xd0, 0xac, 0x22, 0xa9, 0xf1, 0x4e, 0x45, 0x52, 0x5d, 0x88, 0x58, - 0x2d, 0x2f, 0x20, 0x8b, 0xd6, 0x3e, 0x76, 0xdc, 0x2e, 0x00, 0x6f, 0x0a, 0x84, 0xea, 0xb5, 0x14, - 0x65, 0x70, 0xec, 0x53, 0x2f, 0x46, 0xca, 0xdb, 0x92, 0xf6, 0xa5, 0x24, 0xad, 0x4d, 0x8e, 0xba, - 0x84, 0x36, 0x39, 0x92, 0x54, 0x37, 0x92, 0x54, 0x34, 0xc0, 0x6e, 0x88, 0x2d, 0xea, 0x78, 0x31, - 0x0d, 0x62, 0x9d, 0xfd, 0xb1, 0x9d, 0x1d, 0xab, 0x4b, 0xed, 0xec, 0x58, 0x92, 0x2a, 0x35, 0xaf, - 0x90, 0xe2, 0x03, 0xd2, 0xa5, 0xe3, 0x4d, 0x41, 0xa9, 0x7f, 0xa3, 0xc1, 0xb3, 0xf5, 0xc0, 0xc3, - 0xb6, 0x85, 0x43, 0x7a, 0xaf, 0x2b, 0xce, 0x20, 0x9f, 0xb7, 0x49, 0x48, 0xd1, 0xff, 0x43, 0x21, - 0xa6, 0x44, 0x45, 0xbb, 0xa4, 0x2d, 0x14, 0x96, 0x16, 0x6b, 0x91, 0x3d, 0x19, 0x7e, 0x2d, 0xae, - 0xa6, 0x92, 0x52, 0x8b, 0x83, 0xc5, 0x31, 0xd0, 0x55, 0x28, 0xe3, 0x0e, 0x76, 0xa8, 0x69, 0x13, - 0x4a, 0x04, 0x6c, 0xee, 0x92, 0xb6, 0x30, 0x65, 0x94, 0x78, 0xf7, 0xaa, 0xea, 0xd5, 0xbf, 0xd0, - 0xe0, 0xb9, 0xfe, 0xba, 0x85, 0xbe, 0xe7, 0x86, 0x04, 0xbd, 0x05, 0x39, 0xc7, 0x96, 0x3a, 0x5d, - 0x19, 0x46, 0xa7, 0x0d, 0xdb, 0xc8, 0x39, 0x36, 0x7a, 0x19, 0x66, 0x22, 0xd9, 0xe6, 0x3e, 0x71, - 0xf6, 0xf6, 0x29, 0x57, 0x61, 0xcc, 0x28, 0x47, 0xfd, 0xeb, 0xbc, 0x5b, 0xff, 0x06, 0xe0, 0x99, - 0x98, 0xe8, 0x46, 0x13, 0xbb, 0x2e, 0x09, 0x94, 0x75, 0x5e, 0x84, 0x22, 0x39, 0xf2, 0x9d, 0xe0, - 0x58, 0xa1, 0x68, 0x1c, 0x65, 0x5a, 0x74, 0x0a, 0x08, 0x74, 0x03, 0xf2, 0xbb, 0x84, 0x70, 0x01, - 0x85, 0x25, 0x3d, 0xa5, 0xa6, 0x74, 0x9c, 0x48, 0xc3, 0x35, 0x42, 0x0c, 0x46, 0x8e, 0x10, 0x8c, - 0xb5, 0x48, 0xcb, 0xab, 0xe4, 0x2f, 0x69, 0x0b, 0x67, 0x0d, 0xfe, 0x1f, 0x6d, 0xc3, 0x0c, 0xb6, - 0x2c, 0xaf, 0xed, 0x52, 0x73, 0x2f, 0xf0, 0xda, 0xbe, 0xe9, 0xd8, 0x95, 0x12, 0x87, 0x7d, 0x6d, - 0x00, 0xec, 0x8a, 0x60, 0xbb, 0xc5, 0xb8, 0x36, 0xec, 0xf5, 0x33, 0x46, 0x09, 0x27, 0x7a, 0x1e, - 0x68, 0x1a, 0x32, 0x60, 0xd2, 0x6b, 0x53, 0xbf, 0x4d, 0xc3, 0xca, 0x85, 0x4b, 0xf9, 0x85, 0xc2, - 0xd2, 0xdb, 0xb5, 0xfe, 0xdb, 0xa6, 0x96, 0x69, 0x90, 0xda, 0x5d, 0x0e, 0x60, 0x28, 0x20, 0xf4, - 0x01, 0x8c, 0x87, 0x1d, 0xec, 0x87, 0x95, 0x79, 0x8e, 0xf8, 0xd6, 0xe8, 0x88, 0x9b, 0x1d, 0xec, - 0x1b, 0x02, 0x04, 0x6d, 0x43, 0xc1, 0x26, 0x4d, 0xb2, 0x87, 0x19, 0x5d, 0x58, 0x59, 0xe0, 0x98, - 0xcb, 0xa3, 0x63, 0xae, 0x0a, 0x10, 0x62, 0xc4, 0xe1, 0xd0, 0x0e, 0x14, 0xdb, 0x6e, 0x1c, 0x7f, - 0x89, 0xe3, 0xbf, 0x3b, 0x3a, 0xfe, 0x7d, 0x05, 0x43, 0x8c, 0x24, 0x24, 0x5a, 0x83, 0x82, 0xb3, - 0x63, 0x99, 0x82, 0x2b, 0xac, 0xbc, 0xcb, 0x25, 0x5c, 0x4e, 0x2d, 0x1e, 0xdb, 0xc7, 0x5d, 0x97, - 0xdd, 0xb1, 0x56, 0x84, 0xd7, 0x83, 0xa3, 0xfe, 0x86, 0xd5, 0x9f, 0x68, 0x30, 0x21, 0x6c, 0x8d, - 0x96, 0x61, 0xfc, 0x10, 0x37, 0xdb, 0x44, 0xee, 0x83, 0x97, 0x06, 0x78, 0xc2, 0x16, 0xa3, 0x35, - 0x04, 0x0b, 0x7a, 0x1f, 0x26, 0xb1, 0x6d, 0x07, 0x24, 0x0c, 0xa5, 0x7b, 0x5e, 0x19, 0xe4, 0x47, - 0x82, 0xda, 0x50, 0x6c, 0xd5, 0xdf, 0x6a, 0x30, 0xc6, 0x96, 0xe8, 0xb1, 0xd4, 0xd8, 0x80, 0x69, - 0x8a, 0x83, 0x3d, 0x42, 0x4d, 0x1c, 0x86, 0x84, 0x0e, 0xab, 0x0b, 0xa3, 0xdd, 0xb0, 0x8d, 0x82, - 0xe0, 0xe5, 0x4d, 0xb5, 0xd9, 0xf2, 0x23, 0x6d, 0xb6, 0xea, 0xd7, 0x1a, 0x4c, 0x29, 0xa7, 0x40, - 0xef, 0xc1, 0x04, 0x6e, 0xb1, 0xbd, 0x21, 0xa7, 0x72, 0x79, 0x90, 0x1e, 0x9c, 0xd8, 0x90, 0x4c, - 0xe8, 0x26, 0x9c, 0x0d, 0x30, 0x25, 0xa6, 0x8d, 0x29, 0x96, 0x7a, 0xa4, 0x67, 0x22, 0x02, 0x70, - 0x04, 0x60, 0x60, 0x4a, 0x56, 0x31, 0xc5, 0xc6, 0x54, 0x20, 0xff, 0x55, 0x7f, 0xaa, 0x01, 0x74, - 0xbd, 0xe8, 0xb1, 0x8c, 0x9b, 0xd0, 0x27, 0x77, 0x32, 0x7d, 0xea, 0xe7, 0xe1, 0x9c, 0x99, 0x0e, - 0x3d, 0x3a, 0x81, 0x6a, 0xbf, 0x3d, 0x20, 0x83, 0xf3, 0x2d, 0x18, 0xf3, 0x9b, 0x58, 0x1d, 0x19, - 0x6f, 0x8c, 0x78, 0x64, 0x30, 0x34, 0x83, 0x03, 0xe8, 0x0e, 0x5c, 0x94, 0x6e, 0x57, 0x3f, 0xde, - 0x70, 0x6d, 0x72, 0xa4, 0xa2, 0x6f, 0x03, 0x8a, 0xd2, 0x0d, 0x4d, 0x87, 0xf5, 0x4b, 0x51, 0xaf, - 0x0c, 0xe7, 0xc3, 0x02, 0x6a, 0x1a, 0xc7, 0x5a, 0xfa, 0x27, 0x30, 0x9b, 0x16, 0x25, 0x67, 0x13, - 0xdb, 0x29, 0xda, 0x89, 0x76, 0x8a, 0xfe, 0x31, 0x5c, 0xe4, 0x90, 0xf5, 0x63, 0x35, 0x24, 0xa7, - 0xf1, 0xf8, 0xd0, 0x5f, 0x68, 0x30, 0x9b, 0xc6, 0x96, 0x7a, 0xdf, 0x7f, 0x7c, 0x1b, 0xad, 0x9f, - 0x49, 0x5a, 0xe9, 0x81, 0xa6, 0xd5, 0x67, 0xa0, 0x64, 0x26, 0x70, 0xf5, 0x03, 0x98, 0xfb, 0x3f, - 0x7f, 0x9f, 0xb4, 0x48, 0x80, 0x9b, 0xa9, 0x09, 0x9e, 0xfe, 0x3a, 0x6d, 0x43, 0xa5, 0x57, 0xd8, - 0xa9, 0xad, 0xd4, 0xa7, 0x30, 0x57, 0xc7, 0x4d, 0xec, 0x5a, 0xe4, 0x09, 0xac, 0xd5, 0xcf, 0x35, - 0xa8, 0xf4, 0xa2, 0x4b, 0xdd, 0xdf, 0x85, 0x71, 0x11, 0x01, 0xb5, 0x91, 0x22, 0xa0, 0x60, 0x8a, - 0x05, 0xae, 0xdc, 0x09, 0x02, 0x97, 0x7e, 0x19, 0x8a, 0x5b, 0x0e, 0xe9, 0xac, 0xb4, 0xe9, 0xfe, - 0x3d, 0xef, 0x80, 0xb8, 0xe8, 0x02, 0x8c, 0x3b, 0x6c, 0x4b, 0x73, 0x6d, 0xa6, 0x0d, 0xd1, 0xd0, - 0x0d, 0x28, 0x2b, 0x32, 0x65, 0x95, 0xff, 0x85, 0xfc, 0xee, 0xe1, 0x81, 0x54, 0x7a, 0x50, 0x2a, - 0xb2, 0xd6, 0x6e, 0x36, 0x19, 0x80, 0xe3, 0xee, 0xdd, 0x26, 0xc7, 0x06, 0xe3, 0xd4, 0xef, 0xc2, - 0x4c, 0x17, 0x53, 0xda, 0xe2, 0x1d, 0x18, 0xa7, 0x4c, 0x8d, 0xde, 0x28, 0x9c, 0x3c, 0x86, 0x13, - 0x3a, 0x1b, 0x82, 0x47, 0xff, 0xb1, 0x06, 0xc5, 0x4d, 0x8a, 0x69, 0x3b, 0x5a, 0xb9, 0x27, 0x9a, - 0x3b, 0xf5, 0x8f, 0x8f, 0x06, 0x94, 0x94, 0x0e, 0x72, 0x4e, 0x2f, 0x40, 0x21, 0x3c, 0x76, 0xad, - 0x64, 0xb6, 0x08, 0xac, 0x4b, 0xe6, 0x8a, 0x2f, 0x40, 0xc1, 0xc2, 0xd4, 0xda, 0x77, 0xdc, 0x3d, - 0xb3, 0xed, 0xcb, 0xbc, 0x18, 0x54, 0xd7, 0x7d, 0x5f, 0x7f, 0xa0, 0xc1, 0x79, 0x01, 0xba, 0x49, - 0x03, 0x82, 0x5b, 0x4f, 0x71, 0x7a, 0x01, 0x5c, 0x48, 0x6a, 0x22, 0x27, 0xf9, 0x3f, 0xf0, 0x4c, - 0x13, 0x53, 0x12, 0x52, 0xf3, 0xc0, 0xf5, 0x3a, 0xae, 0xb9, 0xd3, 0xf4, 0xac, 0x83, 0xe4, 0x94, - 0x67, 0x05, 0xc1, 0x6d, 0x36, 0x5e, 0x67, 0xc3, 0xdd, 0xe9, 0xc7, 0xed, 0x93, 0x4b, 0xdb, 0x47, - 0xff, 0x2a, 0x0f, 0xd3, 0x1f, 0x7a, 0x94, 0x84, 0xb1, 0x0c, 0xdc, 0x71, 0xad, 0x66, 0xdb, 0x26, - 0x66, 0xe8, 0x13, 0xe9, 0xfa, 0x53, 0xc6, 0xb4, 0xec, 0xdc, 0x64, 0x7d, 0x68, 0x05, 0xa6, 0xf8, - 0x0e, 0x61, 0x46, 0xc9, 0x8f, 0xb4, 0xb3, 0x26, 0xb1, 0xf8, 0xd3, 0x1b, 0xc3, 0xc6, 0x1e, 0x33, - 0x86, 0xa1, 0x3b, 0x50, 0x16, 0x1b, 0xcf, 0xa4, 0x1e, 0xd7, 0xdd, 0xae, 0x4c, 0x8c, 0xb2, 0x6d, - 0x8b, 0x82, 0xfb, 0x9e, 0xc7, 0xe6, 0x68, 0x3f, 0x0d, 0x07, 0x78, 0x90, 0x83, 0x8b, 0x7c, 0x31, - 0xd6, 0xbc, 0x60, 0xcb, 0xa3, 0x8e, 0xbb, 0xa7, 0x56, 0xe5, 0x1a, 0x9c, 0x3b, 0xf4, 0x28, 0xde, - 0x69, 0x12, 0x13, 0xd3, 0xe4, 0xd2, 0x97, 0xe5, 0xc0, 0x0a, 0x95, 0x6b, 0xde, 0x63, 0xd9, 0xfc, - 0xe3, 0x5a, 0xf6, 0x29, 0x98, 0xe2, 0x37, 0x39, 0x28, 0x7d, 0xe4, 0x50, 0x37, 0x76, 0x54, 0x7c, - 0x0c, 0x33, 0xae, 0x47, 0x89, 0x69, 0x79, 0xad, 0x96, 0x43, 0x5b, 0xc4, 0xa5, 0x2c, 0xc9, 0x66, - 0xf9, 0x7e, 0x6d, 0x80, 0x16, 0x6c, 0x57, 0x91, 0x9b, 0x11, 0x9b, 0x51, 0x66, 0x38, 0xdd, 0x76, - 0x88, 0xbe, 0x0f, 0x33, 0xb1, 0xfc, 0xc9, 0xe4, 0x69, 0x56, 0xfe, 0xe4, 0x69, 0x56, 0x99, 0x26, - 0x3b, 0x9e, 0x86, 0x01, 0x09, 0x94, 0x23, 0xfb, 0xc9, 0x38, 0x62, 0xc0, 0x74, 0x47, 0x74, 0x89, - 0xdc, 0x75, 0x84, 0xda, 0x83, 0x84, 0xe2, 0x49, 0x6c, 0xa1, 0xd3, 0x6d, 0xe8, 0x7f, 0xd6, 0x60, - 0x56, 0x0e, 0xae, 0xb8, 0x76, 0xbd, 0xed, 0x34, 0x6d, 0xb5, 0x5e, 0xfd, 0x8c, 0xaa, 0x9d, 0xa2, - 0x51, 0x6d, 0x40, 0xb8, 0x4d, 0xf7, 0xbd, 0xc0, 0xf9, 0x21, 0xbf, 0x0c, 0xc6, 0x13, 0xf2, 0x37, - 0x87, 0x91, 0xb0, 0x12, 0xe7, 0xe6, 0x53, 0x3b, 0x87, 0xd3, 0x5d, 0x7a, 0x13, 0xe6, 0x7a, 0xe6, - 0x27, 0xed, 0x79, 0xfa, 0xa5, 0x1c, 0xfd, 0x57, 0x79, 0x28, 0xf2, 0x50, 0x19, 0x79, 0x7d, 0x15, - 0xa6, 0x76, 0x9d, 0x26, 0x25, 0x01, 0x11, 0x85, 0x99, 0x29, 0x23, 0x6a, 0xa3, 0x1f, 0xc0, 0x7c, - 0x2c, 0x56, 0x5b, 0xce, 0xae, 0x63, 0x99, 0x36, 0x71, 0xbd, 0x96, 0xe3, 0xca, 0x1b, 0xb7, 0xd8, - 0x1f, 0x83, 0xae, 0x37, 0xab, 0x8c, 0xc7, 0x78, 0xae, 0x1b, 0xe2, 0x39, 0xd4, 0x6a, 0x1c, 0x09, - 0x2d, 0xc3, 0x33, 0x4a, 0x56, 0xf7, 0xfe, 0x6d, 0xf2, 0xe4, 0x20, 0xe4, 0x7b, 0x65, 0xca, 0x98, - 0x93, 0x04, 0xab, 0xd1, 0x38, 0x4f, 0x21, 0x42, 0xf4, 0x36, 0x54, 0x14, 0x6f, 0xdb, 0xdd, 0xf1, - 0x5c, 0x9b, 0x9d, 0xc6, 0x92, 0x75, 0x8c, 0xb3, 0xce, 0xca, 0xf1, 0xfb, 0x6a, 0x58, 0x72, 0x5e, - 0x81, 0xb2, 0xe2, 0x6c, 0xfa, 0xa6, 0xbb, 0x4b, 0xc3, 0xca, 0x38, 0x67, 0x50, 0x87, 0xd4, 0x07, - 0xfe, 0x87, 0xbb, 0x34, 0x44, 0x4b, 0x70, 0x51, 0xd1, 0xf9, 0x81, 0xe7, 0x7b, 0x21, 0x6e, 0x0a, - 0xea, 0x09, 0x4e, 0x7d, 0x5e, 0x0e, 0x36, 0xe4, 0x18, 0xe7, 0x59, 0x81, 0xe7, 0x15, 0xcf, 0x21, - 0x0f, 0xb6, 0x66, 0x40, 0x2c, 0xe2, 0xf8, 0x54, 0xa9, 0x36, 0xc9, 0x79, 0xab, 0x92, 0x48, 0x05, - 0x64, 0x4e, 0x22, 0xd4, 0xd3, 0x09, 0x94, 0xd4, 0x6a, 0x49, 0x9f, 0xd8, 0x84, 0x12, 0x5f, 0x01, - 0xb3, 0x45, 0x28, 0x8e, 0x39, 0xe4, 0xab, 0xc3, 0x2c, 0xc1, 0x1d, 0xc9, 0x63, 0x14, 0xed, 0x78, - 0x53, 0xaf, 0xc0, 0xec, 0xcd, 0x7d, 0xec, 0xb8, 0x0d, 0x1c, 0xe0, 0x16, 0xa1, 0x24, 0x50, 0xde, - 0xa1, 0xef, 0xc3, 0x5c, 0xcf, 0x88, 0xd4, 0xe4, 0x0e, 0x80, 0x1f, 0xf5, 0x66, 0xa5, 0x92, 0xbc, - 0x20, 0x1b, 0x29, 0x91, 0x86, 0x8a, 0x01, 0xe8, 0xb3, 0x70, 0x61, 0xed, 0xce, 0x6a, 0xaf, 0x06, - 0x36, 0x5c, 0x4c, 0xf5, 0x4b, 0xf9, 0xb7, 0xfb, 0xc8, 0x7f, 0xe5, 0xd1, 0xf2, 0xd7, 0x5a, 0x76, - 0x86, 0xf4, 0xaf, 0x73, 0x30, 0xc7, 0x4e, 0xc6, 0xfa, 0x71, 0x2c, 0x8c, 0xcb, 0x1d, 0xf2, 0x11, - 0x94, 0x53, 0xe7, 0x82, 0xb4, 0xf9, 0xa8, 0xc7, 0x42, 0x29, 0x79, 0x2c, 0xf4, 0xab, 0xab, 0xe6, - 0xfb, 0xd5, 0x55, 0x9f, 0x46, 0x78, 0x77, 0xa1, 0xd2, 0x6b, 0x8f, 0x28, 0xce, 0x97, 0x78, 0xfa, - 0xc3, 0xd3, 0x05, 0x36, 0xa7, 0x5e, 0xeb, 0x27, 0x33, 0xfe, 0x4d, 0x45, 0xcd, 0x20, 0x0d, 0x62, - 0x79, 0x81, 0x6d, 0x14, 0xc3, 0x78, 0x27, 0x5f, 0x80, 0xcd, 0x0e, 0xf6, 0x33, 0x16, 0x20, 0xec, - 0x60, 0xff, 0x14, 0x16, 0x80, 0xc1, 0xfc, 0x87, 0x2c, 0x80, 0x01, 0x95, 0x5e, 0x7b, 0x44, 0x65, - 0xf4, 0x31, 0x36, 0x13, 0x69, 0x76, 0x3d, 0xd3, 0xec, 0x1d, 0xec, 0x4b, 0x6b, 0x73, 0x7a, 0xfd, - 0x1f, 0x1a, 0xcc, 0x7e, 0xd8, 0x6e, 0x36, 0x9d, 0x5d, 0x87, 0x04, 0xc9, 0xdb, 0xd6, 0x1a, 0x9c, - 0x75, 0xd5, 0x88, 0xb4, 0xee, 0xc2, 0x80, 0xa9, 0x45, 0x48, 0x46, 0x97, 0xf5, 0xdf, 0xda, 0xa4, - 0x8b, 0x30, 0xd7, 0x33, 0x7b, 0x69, 0xd1, 0x0b, 0x30, 0x2e, 0x6e, 0x23, 0xe2, 0x08, 0x14, 0x0d, - 0x7d, 0x0b, 0x9e, 0x8b, 0x9d, 0xa4, 0x1b, 0xee, 0xae, 0x57, 0x3f, 0x5e, 0xc7, 0x61, 0x74, 0x8d, - 0x16, 0xcf, 0x19, 0xb9, 0x51, 0x9f, 0x33, 0xf4, 0x2f, 0x35, 0x98, 0x4d, 0x01, 0x2b, 0xc8, 0x2b, - 0x30, 0x1d, 0x52, 0x1c, 0x24, 0x73, 0xf0, 0xf5, 0x33, 0x46, 0x81, 0xf7, 0x8a, 0x0c, 0xfc, 0x81, - 0xa6, 0x21, 0x1d, 0x80, 0xb8, 0x76, 0xe2, 0xde, 0xb5, 0xae, 0x19, 0x67, 0x89, 0x6b, 0x47, 0x34, - 0xf5, 0x32, 0x14, 0xcd, 0x38, 0x58, 0xbd, 0x08, 0x05, 0xb3, 0xcb, 0xa5, 0xff, 0x3d, 0x07, 0xe5, - 0x94, 0x1a, 0xe8, 0x59, 0x98, 0x48, 0x49, 0x96, 0x6d, 0x26, 0xf4, 0x84, 0xf3, 0x4d, 0x27, 0x32, - 0xf9, 0x53, 0x78, 0x93, 0xda, 0x86, 0x82, 0x4f, 0x02, 0x96, 0x95, 0x50, 0xe7, 0x90, 0xc8, 0xcb, - 0xdd, 0xf2, 0xa8, 0x79, 0x5f, 0x17, 0xc1, 0x88, 0xc3, 0xa1, 0x5b, 0x30, 0xc6, 0xb6, 0x12, 0xcf, - 0x05, 0x46, 0x4f, 0x27, 0xb7, 0x1c, 0xd2, 0x31, 0x38, 0x40, 0xfd, 0x2c, 0x4c, 0x2a, 0x6b, 0x7f, - 0x0a, 0x73, 0x3d, 0x6b, 0xde, 0xad, 0x80, 0xd1, 0x23, 0xd3, 0x71, 0x77, 0x3d, 0xb9, 0xa5, 0xaf, - 0x0e, 0xf1, 0x84, 0xc1, 0x11, 0x26, 0xe8, 0x11, 0xfb, 0xd5, 0x31, 0x3c, 0x9f, 0xe1, 0xa9, 0xa7, - 0x26, 0xe2, 0x33, 0x28, 0xca, 0x8b, 0xbc, 0x84, 0xfc, 0x00, 0x0a, 0xfc, 0x5c, 0x0c, 0x78, 0x88, - 0x39, 0xc9, 0x19, 0x00, 0x6e, 0xf4, 0x5f, 0xff, 0x35, 0x8b, 0x4d, 0xa9, 0xbb, 0xe9, 0x93, 0x10, - 0x84, 0xee, 0xc0, 0xb4, 0x63, 0x13, 0x97, 0x3a, 0xf4, 0xd8, 0x3c, 0x20, 0xc7, 0xd2, 0x9d, 0xaf, - 0x0d, 0x08, 0x3a, 0x1b, 0x92, 0xe5, 0x36, 0x39, 0x36, 0x0a, 0x4e, 0xb7, 0xa1, 0xff, 0x33, 0x0f, - 0xe7, 0xfb, 0x88, 0xec, 0x97, 0x35, 0x68, 0xa7, 0x92, 0x35, 0xfc, 0x37, 0x8c, 0xf1, 0x33, 0x57, - 0xe8, 0xfd, 0xe2, 0xa0, 0x20, 0xcd, 0x34, 0xe2, 0x0c, 0x4f, 0xe0, 0xde, 0x9e, 0x38, 0x34, 0xc6, - 0x4e, 0x7e, 0x68, 0x5c, 0x86, 0x92, 0xd8, 0x24, 0xa6, 0x15, 0x10, 0x4c, 0x89, 0xcd, 0x37, 0xde, - 0x98, 0x51, 0x14, 0xbd, 0x37, 0x45, 0x27, 0x8b, 0x8d, 0x92, 0x4c, 0xc4, 0xea, 0x09, 0x15, 0x1b, - 0x45, 0x2f, 0x2f, 0x1d, 0xb1, 0x30, 0x55, 0x85, 0x29, 0xdf, 0x0b, 0x1d, 0x1e, 0x6b, 0x26, 0x39, - 0x50, 0xd4, 0x46, 0xef, 0xc3, 0x44, 0xe8, 0xb5, 0x03, 0x8b, 0x54, 0xa6, 0xfa, 0xeb, 0x9b, 0xcc, - 0x18, 0x99, 0xf9, 0x36, 0x39, 0xbd, 0x21, 0xf9, 0x78, 0x54, 0x8d, 0xab, 0xa1, 0xff, 0x31, 0x0f, - 0xd0, 0x3d, 0x6a, 0xfb, 0x65, 0x2b, 0xda, 0xa9, 0x64, 0x2b, 0xef, 0xc9, 0x53, 0x5f, 0x2c, 0xfc, - 0xcb, 0x29, 0x34, 0x9b, 0x1c, 0x25, 0x4f, 0xfe, 0x46, 0x13, 0x3b, 0x2e, 0x25, 0x47, 0x54, 0x1c, - 0xfe, 0x09, 0xab, 0xe4, 0x53, 0x56, 0x39, 0xad, 0x85, 0x6c, 0x40, 0x41, 0x3c, 0x24, 0x8b, 0xbb, - 0xf2, 0x78, 0xdf, 0x40, 0x9f, 0xd0, 0xb4, 0x8e, 0xa9, 0xb5, 0xcf, 0xd4, 0x15, 0x8f, 0xa3, 0xfc, - 0x96, 0x0c, 0x5e, 0xf4, 0x1f, 0x5d, 0xeb, 0xba, 0x46, 0x13, 0x3b, 0x2d, 0x62, 0x47, 0xab, 0xae, - 0x9c, 0x43, 0x74, 0xb3, 0x75, 0xef, 0xae, 0xed, 0xe4, 0x09, 0xd7, 0xf6, 0x1c, 0x94, 0xcd, 0xa4, - 0x38, 0xfd, 0xaf, 0x1a, 0xcc, 0xdd, 0xed, 0xb8, 0xc4, 0x6e, 0x48, 0x63, 0x6d, 0xd8, 0x51, 0xd2, - 0x74, 0x1f, 0x4a, 0xca, 0x84, 0xec, 0xa0, 0x8d, 0x12, 0xe1, 0x47, 0xae, 0x8d, 0xc2, 0xe1, 0xcb, - 0xcd, 0xe6, 0xe1, 0xc7, 0x3b, 0xd8, 0x3c, 0xee, 0xc2, 0x34, 0x0d, 0x30, 0xbf, 0xc4, 0xfa, 0xd8, - 0x51, 0xe9, 0xd8, 0xd5, 0x47, 0x81, 0xde, 0x13, 0xf4, 0x0d, 0xec, 0x04, 0xeb, 0x1a, 0x3f, 0x29, - 0x55, 0x93, 0x25, 0x02, 0x6c, 0x5a, 0x49, 0x45, 0xb9, 0x17, 0xc7, 0x85, 0xe8, 0x04, 0x2a, 0xbd, - 0xd3, 0x94, 0x01, 0x78, 0x03, 0xa6, 0x23, 0x76, 0xc7, 0x66, 0x97, 0xad, 0x7c, 0x9f, 0x0c, 0xa0, - 0xef, 0x2c, 0x37, 0x6c, 0xa3, 0xe0, 0x77, 0x21, 0x97, 0xfe, 0x84, 0xe0, 0x3c, 0x3b, 0x1f, 0x1b, - 0x81, 0x47, 0x3d, 0xcb, 0x6b, 0x6e, 0x92, 0xe0, 0xd0, 0xb1, 0x08, 0xfa, 0x08, 0x26, 0x44, 0x4a, - 0x86, 0x32, 0xdf, 0x0d, 0x12, 0x09, 0x6b, 0xf5, 0xca, 0x20, 0x32, 0xa9, 0xfb, 0x01, 0x4c, 0xc7, - 0x8b, 0xde, 0xe8, 0x95, 0x47, 0xf3, 0x25, 0x8a, 0xf4, 0xd5, 0x57, 0x87, 0x23, 0x16, 0xa2, 0xae, - 0x6b, 0x68, 0x0b, 0xc6, 0xf9, 0x19, 0x86, 0x5e, 0xca, 0x62, 0x8c, 0xd7, 0xc2, 0xab, 0x97, 0x07, - 0x50, 0x45, 0xb8, 0x9f, 0x43, 0x29, 0x79, 0x36, 0xa2, 0xd7, 0x1e, 0xc9, 0x9a, 0xae, 0xef, 0x56, - 0x6b, 0xc3, 0x92, 0x47, 0x22, 0x3f, 0x81, 0x49, 0x59, 0x97, 0x42, 0x99, 0xa6, 0x4e, 0x16, 0x50, - 0xab, 0x57, 0x07, 0xd2, 0xc9, 0x35, 0x09, 0xa2, 0xda, 0xa1, 0xaa, 0x79, 0xa1, 0xda, 0x00, 0xde, - 0x54, 0xf1, 0xaf, 0xba, 0x38, 0x34, 0xbd, 0x94, 0xf9, 0x31, 0x4c, 0x88, 0x52, 0x4a, 0xb6, 0x83, - 0x25, 0x0a, 0x63, 0xd9, 0x0e, 0x96, 0xac, 0xc8, 0x5c, 0xd7, 0xd8, 0x74, 0x52, 0x95, 0x8d, 0xec, - 0xe9, 0xf4, 0xaf, 0xb3, 0x64, 0x4f, 0x27, 0xab, 0xfa, 0xd2, 0x84, 0x62, 0xa2, 0x2c, 0x82, 0x32, - 0x5d, 0xb5, 0x5f, 0x55, 0xa5, 0xfa, 0xda, 0x90, 0xd4, 0x52, 0x9a, 0x07, 0xa5, 0xe4, 0x33, 0x7b, - 0xb6, 0xff, 0xf5, 0x7d, 0xf9, 0xcf, 0xf6, 0xbf, 0x8c, 0xd7, 0x7b, 0x0f, 0x4a, 0xc9, 0xf7, 0xf1, - 0x6c, 0x81, 0x7d, 0xdf, 0xe8, 0xb3, 0x05, 0x66, 0x3c, 0xbb, 0xb7, 0x61, 0x26, 0xfd, 0x40, 0x8d, - 0x32, 0x17, 0x25, 0xe3, 0xdd, 0xbc, 0x7a, 0x7d, 0x78, 0x06, 0x29, 0xb6, 0x03, 0x33, 0xe9, 0xb7, - 0xe5, 0x6c, 0xb1, 0x19, 0x6f, 0xdc, 0xd9, 0x62, 0xb3, 0x9e, 0xad, 0xaf, 0x6b, 0x6c, 0xbe, 0xe9, - 0xfa, 0x4e, 0xb6, 0xe0, 0x8c, 0xca, 0x58, 0xb6, 0xe0, 0xcc, 0xd2, 0x51, 0x1b, 0x66, 0xd2, 0x55, - 0x8d, 0x6c, 0xb1, 0x19, 0xf5, 0xa0, 0x6c, 0xb1, 0x99, 0x05, 0x93, 0x00, 0xca, 0xa9, 0x9b, 0x7f, - 0xf6, 0x0e, 0xed, 0x5f, 0x20, 0xc9, 0xde, 0xa1, 0x59, 0x25, 0x85, 0x2f, 0x35, 0xb8, 0xd8, 0xf7, - 0x4e, 0x86, 0x6e, 0x0c, 0x79, 0xf5, 0x4a, 0x14, 0x1b, 0xaa, 0x6f, 0x8e, 0xc8, 0x25, 0xd5, 0xa0, - 0xbd, 0x77, 0xfc, 0xda, 0xb0, 0x57, 0xbf, 0x41, 0x53, 0xcf, 0xb8, 0xcf, 0x5e, 0xd7, 0xd0, 0x8f, - 0x00, 0xf5, 0x7e, 0x69, 0x84, 0x5e, 0x1f, 0xf9, 0xcb, 0xbc, 0xea, 0xd2, 0x28, 0x2c, 0x72, 0xca, - 0x5f, 0x68, 0x70, 0xa1, 0xdf, 0x67, 0xa8, 0xe8, 0x8d, 0xcc, 0x8d, 0x92, 0xfd, 0x41, 0x6d, 0xf5, - 0xc6, 0x68, 0x4c, 0x5d, 0x47, 0x4f, 0xa7, 0x53, 0xd9, 0x8e, 0x9e, 0x91, 0x5f, 0x66, 0x3b, 0x7a, - 0x56, 0xa6, 0xb6, 0xe4, 0x77, 0xbf, 0xf5, 0x50, 0x99, 0xd5, 0x67, 0x30, 0xa5, 0xba, 0xd0, 0xd5, - 0x41, 0xdf, 0x64, 0x28, 0xc9, 0x0b, 0x83, 0x09, 0x85, 0xc4, 0xfa, 0x57, 0xb9, 0xdf, 0x3d, 0x9c, - 0xd7, 0xbe, 0x7d, 0x38, 0xaf, 0xfd, 0xe5, 0xe1, 0xbc, 0xf6, 0xb3, 0xef, 0xe6, 0xcf, 0x7c, 0xfb, - 0xdd, 0xfc, 0x99, 0x3f, 0x7c, 0x37, 0x7f, 0x06, 0xaa, 0x96, 0xd7, 0xca, 0xc0, 0xa9, 0x9f, 0x8d, - 0x92, 0xc0, 0x86, 0xf6, 0xc9, 0xdd, 0x3d, 0x87, 0xee, 0xb7, 0x77, 0x6a, 0x96, 0xd7, 0x5a, 0xb4, - 0xbc, 0xb0, 0xe5, 0x85, 0x8b, 0x01, 0x69, 0xe2, 0x63, 0x12, 0x2c, 0x1e, 0x2e, 0x45, 0x7f, 0x79, - 0xfa, 0x1e, 0x2e, 0xf6, 0xff, 0x78, 0xfc, 0x1d, 0xd6, 0x52, 0x8d, 0x5f, 0xe4, 0xf2, 0x8d, 0xad, - 0xef, 0xfd, 0x32, 0x37, 0xdb, 0x50, 0xc2, 0x99, 0xb4, 0xda, 0x96, 0x1c, 0xfe, 0x7d, 0x77, 0x60, - 0x9b, 0x0d, 0x6c, 0xab, 0x81, 0x87, 0x39, 0xbd, 0xff, 0xc0, 0xf6, 0xad, 0x46, 0x5d, 0xbd, 0x96, - 0xfc, 0x2d, 0x57, 0x51, 0x44, 0xcb, 0xcb, 0x8c, 0x6a, 0x79, 0x59, 0x91, 0xed, 0x4c, 0xf0, 0x6f, - 0xb4, 0xdf, 0xf8, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x91, 0xe9, 0x08, 0x47, 0xe2, 0x2e, 0x00, - 0x00, + // 2954 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5b, 0xcd, 0x6f, 0xdc, 0xc6, + 0x15, 0x37, 0x77, 0xf5, 0xe5, 0xb7, 0xda, 0x5d, 0x99, 0xb6, 0xa5, 0xf5, 0x26, 0x51, 0x52, 0x26, + 0xb6, 0x15, 0x27, 0x59, 0xd9, 0x8a, 0x93, 0xa6, 0x4a, 0xd2, 0x46, 0x6b, 0x45, 0x96, 0xe0, 0xd8, + 0x56, 0x29, 0x5b, 0x69, 0x52, 0xa5, 0xc4, 0x88, 0x1c, 0x49, 0xac, 0x76, 0x49, 0x86, 0x9c, 0xd5, + 0x47, 0x7b, 0x4a, 0x11, 0x14, 0x46, 0x80, 0x06, 0x45, 0xd1, 0x4b, 0xae, 0x3d, 0x16, 0xbd, 0xe6, + 0x9a, 0x4b, 0x2f, 0x45, 0x4f, 0x39, 0x16, 0x28, 0x50, 0x04, 0x0e, 0x7a, 0x69, 0xff, 0x85, 0x02, + 0x2d, 0xe6, 0x8b, 0x5f, 0x4b, 0x7a, 0x77, 0x25, 0x19, 0x6e, 0x7b, 0xd2, 0xce, 0xf0, 0xbd, 0xdf, + 0xfb, 0x98, 0x37, 0x6f, 0xde, 0x3c, 0x52, 0xf0, 0x1d, 0x0f, 0x3b, 0x9d, 0xf6, 0xa6, 0x8f, 0x66, + 0xf7, 0x6c, 0xbc, 0x3f, 0xbb, 0x77, 0x0d, 0xb5, 0xbc, 0x1d, 0x74, 0x8d, 0x8d, 0x1a, 0x9e, 0xef, + 0x12, 0x57, 0x9d, 0x94, 0x24, 0x0d, 0x36, 0x29, 0x49, 0xea, 0x33, 0x21, 0xab, 0xe9, 0xfa, 0x78, + 0xd6, 0xdc, 0x41, 0xb6, 0x13, 0x01, 0xb0, 0x21, 0x47, 0xa8, 0x5f, 0x49, 0x51, 0xfa, 0x87, 0x1e, + 0x71, 0x63, 0xa4, 0x6c, 0x2c, 0x68, 0x5f, 0x48, 0xd2, 0x5a, 0xf8, 0x20, 0x22, 0xb4, 0xf0, 0x81, + 0xa0, 0xba, 0x9e, 0xa4, 0x22, 0x3e, 0x72, 0x02, 0x64, 0x12, 0xdb, 0x8d, 0x69, 0x10, 0x9b, 0xcc, + 0xc6, 0xb6, 0x37, 0xcd, 0x88, 0xda, 0xde, 0x34, 0x05, 0x55, 0xca, 0xae, 0x80, 0xa0, 0x5d, 0x1c, + 0xd1, 0xb1, 0x21, 0xa7, 0xd4, 0xbe, 0x51, 0xa0, 0xb6, 0xd0, 0x21, 0x3b, 0xae, 0x6f, 0xff, 0x0c, + 0x2f, 0x38, 0x56, 0xb3, 0x63, 0xb7, 0x2c, 0x1d, 0x7f, 0xdc, 0xc1, 0x01, 0x51, 0x7f, 0x02, 0x13, + 0x31, 0x0d, 0x0c, 0xaf, 0x85, 0x9c, 0x9a, 0xf2, 0x9c, 0x32, 0x53, 0x9a, 0x7b, 0xb5, 0x11, 0x7a, + 0x94, 0x4a, 0x68, 0xc4, 0x15, 0x95, 0x72, 0x1a, 0xf7, 0xa2, 0xc9, 0xd5, 0x16, 0x72, 0xf4, 0x2a, + 0x49, 0x4e, 0xa8, 0x16, 0xa8, 0x48, 0xc8, 0x46, 0x4c, 0x82, 0x85, 0x08, 0xaa, 0x15, 0x98, 0x84, + 0xd7, 0xfa, 0x91, 0xb0, 0x10, 0xe7, 0x5e, 0x44, 0x04, 0xe9, 0x67, 0x50, 0x7a, 0x4a, 0x73, 0xe0, + 0x42, 0x86, 0x85, 0x81, 0xe7, 0x3a, 0x01, 0x56, 0x7f, 0x08, 0xa5, 0x18, 0xb2, 0xb0, 0x6e, 0x76, + 0x40, 0xeb, 0xf4, 0x38, 0x86, 0xf6, 0x85, 0x02, 0x4f, 0x35, 0x7d, 0x17, 0x59, 0x26, 0x0a, 0x48, + 0x9c, 0x4a, 0x78, 0xf5, 0xe4, 0x45, 0xaa, 0x97, 0xa1, 0x8a, 0xf6, 0x91, 0x4d, 0x0c, 0x0b, 0x13, + 0xcc, 0x61, 0xa9, 0x17, 0xc7, 0xf4, 0x0a, 0x9b, 0x5e, 0x94, 0xb3, 0xda, 0x27, 0x0a, 0x3c, 0x9d, + 0xad, 0x9b, 0xf0, 0xc7, 0xeb, 0x50, 0xb0, 0x2d, 0xa1, 0xd3, 0xa5, 0x7e, 0x74, 0x5a, 0xb1, 0xf4, + 0x82, 0x6d, 0xa9, 0x2f, 0xc2, 0x44, 0x28, 0xdb, 0xd8, 0xc1, 0xf6, 0xf6, 0x0e, 0x61, 0x2a, 0x0c, + 0xe9, 0xd5, 0x70, 0x7e, 0x99, 0x4d, 0x6b, 0x5f, 0x00, 0x5c, 0x48, 0x85, 0x86, 0x83, 0x7d, 0xe9, + 0x9d, 0xe7, 0xa1, 0x8c, 0x0f, 0x3c, 0xdb, 0x3f, 0x94, 0x28, 0x0a, 0x43, 0x19, 0xe7, 0x93, 0x1c, + 0x42, 0xbd, 0x0e, 0xc5, 0x2d, 0x8c, 0x45, 0xa4, 0x68, 0x29, 0x35, 0xc5, 0x5e, 0x0c, 0x35, 0x5c, + 0xc2, 0x58, 0xa7, 0xe4, 0xaa, 0x0a, 0x43, 0x6d, 0xdc, 0x76, 0x6b, 0xc5, 0xe7, 0x94, 0x99, 0xd3, + 0x3a, 0xfb, 0xad, 0x6e, 0xc0, 0x04, 0x32, 0x4d, 0xb7, 0xe3, 0x10, 0x63, 0xdb, 0x77, 0x3b, 0x9e, + 0x61, 0x5b, 0xb5, 0x0a, 0x83, 0x7d, 0xa5, 0x07, 0xec, 0x02, 0x67, 0xbb, 0x49, 0xb9, 0x56, 0xac, + 0xe5, 0x53, 0x7a, 0x05, 0x25, 0x66, 0x1e, 0x28, 0x8a, 0xaa, 0xc3, 0xa8, 0xdb, 0x21, 0x5e, 0x87, + 0x04, 0xb5, 0x73, 0xcf, 0x15, 0x67, 0x4a, 0x73, 0x6f, 0x34, 0xb2, 0x33, 0x51, 0x23, 0xd7, 0x21, + 0x8d, 0xbb, 0x0c, 0x40, 0x97, 0x40, 0xea, 0x7b, 0x30, 0x1c, 0xec, 0x23, 0x2f, 0xa8, 0x4d, 0x33, + 0xc4, 0xd7, 0x07, 0x47, 0x5c, 0xdb, 0x47, 0x9e, 0xce, 0x41, 0xd4, 0x0d, 0x28, 0x59, 0xb8, 0x85, + 0xb7, 0xd9, 0x76, 0x09, 0x6a, 0x33, 0x0c, 0x73, 0x7e, 0x70, 0xcc, 0x45, 0x0e, 0x82, 0xf5, 0x38, + 0x9c, 0xba, 0x09, 0xe5, 0x8e, 0x13, 0xc7, 0x9f, 0x63, 0xf8, 0x6f, 0x0d, 0x8e, 0x7f, 0x5f, 0xc2, + 0x60, 0x3d, 0x09, 0xa9, 0x2e, 0x41, 0xc9, 0xde, 0x34, 0x0d, 0xce, 0x15, 0xd4, 0xde, 0x62, 0x12, + 0x2e, 0xa6, 0x16, 0x8f, 0xa6, 0xc6, 0x28, 0x64, 0x37, 0xcd, 0x05, 0x1e, 0xf5, 0x60, 0xcb, 0x9f, + 0x41, 0xfd, 0x97, 0x0a, 0x8c, 0x70, 0x5f, 0xab, 0xf3, 0x30, 0xbc, 0x87, 0x5a, 0x1d, 0x2c, 0xf6, + 0xc1, 0x0b, 0x3d, 0x22, 0x61, 0x9d, 0xd2, 0xea, 0x9c, 0x45, 0x7d, 0x07, 0x46, 0x91, 0x65, 0xf9, + 0x38, 0x08, 0x44, 0x78, 0x5e, 0xea, 0x15, 0x47, 0x9c, 0x5a, 0x97, 0x6c, 0xf5, 0x3f, 0x2a, 0x30, + 0x44, 0x97, 0xe8, 0x58, 0x6a, 0xac, 0xc0, 0x38, 0x41, 0xfe, 0x36, 0x26, 0x06, 0x0a, 0x02, 0x4c, + 0xfa, 0xd5, 0x85, 0xd2, 0xae, 0x58, 0x7a, 0x89, 0xf3, 0xb2, 0xa1, 0xdc, 0x6c, 0xc5, 0x81, 0x36, + 0x5b, 0xfd, 0x73, 0x05, 0xc6, 0x64, 0x50, 0xa8, 0x6f, 0xc3, 0x08, 0x6a, 0xd3, 0xbd, 0x21, 0x4c, + 0xb9, 0xd8, 0x4b, 0x0f, 0x46, 0xac, 0x0b, 0x26, 0xf5, 0x06, 0x9c, 0xf6, 0x11, 0xc1, 0xfc, 0x78, + 0x28, 0x66, 0x5a, 0xc2, 0xcf, 0xb4, 0x10, 0x40, 0x47, 0x04, 0xb3, 0xf3, 0x60, 0xcc, 0x17, 0xbf, + 0xea, 0xbf, 0x52, 0x00, 0xa2, 0x28, 0x3a, 0x96, 0x73, 0x13, 0xfa, 0x14, 0x8e, 0xa6, 0x4f, 0xf3, + 0x2c, 0x9c, 0x31, 0xd2, 0xa9, 0x47, 0xc3, 0x50, 0xcf, 0xda, 0x03, 0x22, 0x39, 0xdf, 0x84, 0xa1, + 0xe3, 0x9e, 0xc1, 0x0c, 0x40, 0xfb, 0x8d, 0x02, 0xe7, 0x45, 0xdc, 0x35, 0x0f, 0x57, 0x1c, 0x0b, + 0x1f, 0xc8, 0xf4, 0xbb, 0x0a, 0x65, 0x11, 0x87, 0x86, 0x4d, 0xe7, 0x85, 0xac, 0x97, 0xfa, 0x0b, + 0x62, 0x0e, 0x35, 0x8e, 0x62, 0x23, 0x7a, 0x36, 0x59, 0x76, 0xe0, 0xb5, 0xd0, 0xa1, 0x61, 0xba, + 0xce, 0x96, 0xed, 0xb7, 0xe5, 0xd9, 0x24, 0xa6, 0x6f, 0xf0, 0x59, 0xed, 0x43, 0x98, 0x4c, 0xeb, + 0x24, 0xec, 0x8e, 0xed, 0x29, 0xe5, 0x48, 0x7b, 0x4a, 0xfb, 0x00, 0xce, 0x33, 0xc8, 0xe6, 0xa1, + 0x7c, 0x24, 0xec, 0x3d, 0x3e, 0xf4, 0x27, 0x0a, 0x4c, 0xa6, 0xb1, 0x85, 0xde, 0xf7, 0x8f, 0xef, + 0xcc, 0xe5, 0x53, 0x49, 0x77, 0x3e, 0x50, 0x94, 0xe6, 0x04, 0x54, 0x8c, 0x04, 0xae, 0xf6, 0x5b, + 0x05, 0xa6, 0xde, 0xf5, 0x76, 0x70, 0x1b, 0xfb, 0xa8, 0x95, 0xb2, 0xf0, 0x09, 0xae, 0xe8, 0x06, + 0xd4, 0xba, 0xb5, 0x3a, 0xb1, 0x35, 0xfd, 0x52, 0x81, 0x6a, 0x13, 0xb5, 0x90, 0x63, 0xe2, 0xd0, + 0x58, 0x1d, 0xe4, 0x29, 0x6c, 0x6c, 0xd9, 0x2d, 0x82, 0xfd, 0xa3, 0x58, 0x5b, 0x16, 0x10, 0x4b, + 0x0c, 0x41, 0xbd, 0x03, 0x55, 0x96, 0x43, 0x0d, 0xdb, 0x92, 0xa0, 0x83, 0x65, 0xd3, 0x32, 0xe2, + 0x3f, 0x38, 0x1e, 0xad, 0x0f, 0x27, 0x22, 0xbd, 0x85, 0x3b, 0xde, 0x85, 0x51, 0x21, 0xf5, 0x28, + 0x1a, 0x4b, 0x5e, 0xf5, 0xfb, 0x30, 0xba, 0xc9, 0xa1, 0x85, 0x8e, 0xfd, 0xe5, 0x35, 0xc9, 0xa4, + 0x5d, 0x84, 0xf2, 0xba, 0x8d, 0xf7, 0x69, 0xbd, 0x7c, 0xcf, 0xdd, 0xc5, 0x8e, 0x7a, 0x0e, 0x86, + 0x6d, 0x9a, 0x83, 0x98, 0x56, 0xe3, 0x3a, 0x1f, 0x68, 0x3a, 0x54, 0x25, 0x99, 0xf4, 0xfc, 0x0f, + 0xa0, 0xb8, 0xb5, 0xb7, 0x2b, 0x94, 0xef, 0x55, 0x3b, 0x2d, 0x75, 0x5a, 0x2d, 0x0a, 0x60, 0x3b, + 0xdb, 0xb7, 0xf0, 0xa1, 0x4e, 0x39, 0xb5, 0xbb, 0x30, 0x11, 0x61, 0x0a, 0xaf, 0xbc, 0x09, 0xc3, + 0x84, 0xaa, 0xd1, 0x7d, 0x6c, 0x24, 0xeb, 0x86, 0x84, 0xce, 0x3a, 0xe7, 0xd1, 0x7e, 0xa1, 0x40, + 0x79, 0x8d, 0x20, 0xd2, 0x09, 0xa3, 0xe3, 0xb1, 0x16, 0x7b, 0xd9, 0x09, 0x5d, 0x87, 0x8a, 0xd4, + 0x41, 0xd8, 0xf4, 0x2c, 0x94, 0x82, 0x43, 0xc7, 0x4c, 0x96, 0xb7, 0x40, 0xa7, 0x44, 0x71, 0xfb, + 0x2c, 0x94, 0x4c, 0x44, 0xcc, 0x1d, 0xdb, 0xd9, 0x36, 0x3a, 0x9e, 0xd8, 0x5a, 0x20, 0xa7, 0xee, + 0x7b, 0xda, 0x03, 0x05, 0xce, 0x72, 0xd0, 0x35, 0xe2, 0x63, 0xd4, 0x7e, 0x82, 0xe6, 0xf9, 0x70, + 0x2e, 0xa9, 0x89, 0x30, 0xf2, 0x7b, 0x70, 0xa1, 0x85, 0x08, 0x0e, 0x88, 0xb1, 0xeb, 0xb8, 0xfb, + 0x8e, 0xb1, 0xd9, 0x72, 0xcd, 0xdd, 0xa4, 0xc9, 0x93, 0x9c, 0xe0, 0x16, 0x7d, 0xde, 0xa4, 0x8f, + 0x23, 0xf3, 0xe3, 0xfe, 0x29, 0xa4, 0xfd, 0xa3, 0x7d, 0x56, 0x84, 0xf1, 0x3b, 0x2e, 0x89, 0x36, + 0xfd, 0xf3, 0x50, 0xb6, 0x1d, 0xb3, 0xd5, 0xb1, 0xb0, 0x11, 0x78, 0xd8, 0x21, 0xc2, 0x65, 0xe3, + 0x62, 0x72, 0x8d, 0xce, 0xa9, 0x0b, 0x30, 0x26, 0x77, 0x71, 0x4e, 0x09, 0x91, 0xb7, 0x7d, 0x47, + 0xc5, 0xf6, 0xed, 0xce, 0xa4, 0x43, 0xc7, 0xcd, 0xa4, 0xb7, 0xa1, 0xca, 0x4b, 0x1c, 0x83, 0xb8, + 0x4c, 0x77, 0xab, 0x36, 0x32, 0x48, 0x81, 0x54, 0xe6, 0xdc, 0xf7, 0x5c, 0x6a, 0xa3, 0xf5, 0x24, + 0x02, 0xe0, 0x41, 0x01, 0xce, 0xb3, 0xc5, 0x58, 0x72, 0xfd, 0x75, 0x97, 0xd8, 0xce, 0xb6, 0x5c, + 0x95, 0x2b, 0x70, 0x66, 0xcf, 0x25, 0x68, 0xb3, 0x85, 0x0d, 0x44, 0x92, 0x4b, 0x5f, 0x15, 0x0f, + 0x16, 0x88, 0x58, 0xf3, 0x2e, 0xcf, 0x16, 0x8f, 0xeb, 0xd9, 0x27, 0xe0, 0x8a, 0xaf, 0x0a, 0x50, + 0x79, 0xdf, 0x26, 0x4e, 0xec, 0xec, 0xfd, 0x00, 0x26, 0x1c, 0x97, 0x60, 0xc3, 0x74, 0xdb, 0x6d, + 0x9b, 0xb4, 0xb1, 0x43, 0xe8, 0xad, 0x80, 0x5e, 0x50, 0x1a, 0x3d, 0xb4, 0xa0, 0xbb, 0x0a, 0xdf, + 0x08, 0xd9, 0xf4, 0x2a, 0xc5, 0x89, 0xc6, 0x41, 0x66, 0x6f, 0xa6, 0x78, 0x82, 0xbd, 0x99, 0x27, + 0xe0, 0x40, 0x0c, 0xd5, 0xd0, 0x7f, 0x22, 0x8f, 0xe8, 0x30, 0xbe, 0xcf, 0xa7, 0x78, 0xb1, 0x3d, + 0x40, 0xb3, 0x44, 0x40, 0xb1, 0xaa, 0xbb, 0xb4, 0x1f, 0x0d, 0xb4, 0xbf, 0x29, 0x30, 0x29, 0x1e, + 0xfe, 0x7f, 0x36, 0xbc, 0x5a, 0x30, 0xd5, 0x65, 0xdf, 0xe3, 0x6b, 0x77, 0xfd, 0xa1, 0x08, 0x65, + 0x96, 0x2a, 0xc3, 0xa8, 0xaf, 0xc3, 0x18, 0xaf, 0x93, 0x30, 0xef, 0x24, 0x8d, 0xe9, 0xe1, 0x58, + 0xfd, 0x29, 0x4c, 0xc7, 0x72, 0xb5, 0x69, 0x6f, 0xd9, 0xa6, 0x61, 0x61, 0xc7, 0x6d, 0xdb, 0x8e, + 0x68, 0x11, 0xf0, 0xfd, 0xd1, 0xab, 0x6e, 0x59, 0xa4, 0x3c, 0xfa, 0xd3, 0x51, 0x8a, 0x67, 0x50, + 0x8b, 0x71, 0x24, 0x75, 0x1e, 0x2e, 0x48, 0x59, 0x51, 0xc3, 0xc0, 0x60, 0xc5, 0x41, 0xc0, 0xf6, + 0xca, 0x98, 0x3e, 0x25, 0x08, 0x16, 0xc3, 0xe7, 0xac, 0x84, 0x08, 0xd4, 0x37, 0xa0, 0x26, 0x79, + 0x3b, 0xce, 0xa6, 0xeb, 0x58, 0xf4, 0x34, 0x16, 0xac, 0x43, 0x8c, 0x75, 0x52, 0x3c, 0xbf, 0x2f, + 0x1f, 0x0b, 0xce, 0x4b, 0x50, 0x95, 0x9c, 0x2d, 0xcf, 0x70, 0xb6, 0x48, 0x50, 0x1b, 0x66, 0x0c, + 0xf2, 0x90, 0x7a, 0xcf, 0xbb, 0xb3, 0x45, 0x02, 0x75, 0x0e, 0xce, 0x4b, 0x3a, 0xcf, 0x77, 0x3d, + 0x37, 0x40, 0x2d, 0x4e, 0x3d, 0xc2, 0xa8, 0xcf, 0x8a, 0x87, 0xab, 0xe2, 0x19, 0xe3, 0x59, 0x80, + 0x67, 0x24, 0xcf, 0x1e, 0x4b, 0xb6, 0x86, 0x8f, 0x4d, 0x6c, 0x7b, 0x44, 0xaa, 0x36, 0xca, 0x78, + 0xeb, 0x82, 0x48, 0x26, 0x64, 0x46, 0xc2, 0xd5, 0xd3, 0x30, 0x54, 0xe4, 0x6a, 0x89, 0x98, 0x58, + 0x83, 0x0a, 0x5b, 0x01, 0xa3, 0x8d, 0x09, 0x8a, 0x05, 0xe4, 0xcb, 0xfd, 0x2c, 0xc1, 0x6d, 0xc1, + 0xa3, 0x97, 0xad, 0xf8, 0x50, 0xab, 0xc1, 0xe4, 0x8d, 0x1d, 0x64, 0x3b, 0xab, 0xc8, 0x47, 0x6d, + 0x4c, 0xb0, 0x2f, 0xa3, 0x43, 0xdb, 0x81, 0xa9, 0xae, 0x27, 0x42, 0x93, 0xdb, 0x00, 0x5e, 0x38, + 0x9b, 0x57, 0x4a, 0xb2, 0xa6, 0x7c, 0xa8, 0x44, 0x1a, 0x2a, 0x06, 0xa0, 0x4d, 0xc2, 0xb9, 0xa5, + 0xdb, 0x8b, 0xdd, 0x1a, 0x58, 0x70, 0x3e, 0x35, 0x2f, 0xe4, 0xdf, 0xca, 0x90, 0xff, 0xd2, 0xa3, + 0xe5, 0x2f, 0xb5, 0xad, 0x1c, 0xe9, 0x9f, 0x17, 0x60, 0x8a, 0x9e, 0x8c, 0xcd, 0xc3, 0x58, 0x1a, + 0x17, 0x3b, 0xe4, 0x7d, 0xa8, 0xa6, 0xce, 0x05, 0xe1, 0xf3, 0x41, 0x8f, 0x85, 0x4a, 0xf2, 0x58, + 0xc8, 0x6a, 0x04, 0x17, 0xb3, 0x1a, 0xc1, 0x4f, 0x22, 0xbd, 0x3b, 0x50, 0xeb, 0xf6, 0x47, 0x98, + 0xe7, 0x2b, 0xac, 0xfc, 0x61, 0xe5, 0x02, 0xb5, 0xa9, 0xdb, 0xfb, 0xc9, 0x8a, 0x7f, 0x4d, 0x52, + 0x53, 0x48, 0x1d, 0x9b, 0xae, 0x6f, 0xe9, 0xe5, 0x20, 0x3e, 0xc9, 0x16, 0x60, 0x6d, 0x1f, 0x79, + 0x39, 0x0b, 0x10, 0xec, 0x23, 0xef, 0x04, 0x16, 0x80, 0xc2, 0xfc, 0x8f, 0x2c, 0x80, 0x0e, 0xb5, + 0x6e, 0x7f, 0x84, 0x7d, 0xff, 0x21, 0x6a, 0x89, 0x70, 0xbb, 0x96, 0xeb, 0xf6, 0x7d, 0xe4, 0x09, + 0x6f, 0x33, 0x7a, 0xed, 0x5f, 0x0a, 0x4c, 0xde, 0xe9, 0xb4, 0x5a, 0xf6, 0x96, 0x8d, 0xfd, 0xe4, + 0x6d, 0x6b, 0x09, 0x4e, 0x3b, 0xf2, 0x89, 0xf0, 0xee, 0x4c, 0x0f, 0xd3, 0x42, 0x24, 0x3d, 0x62, + 0xfd, 0xaf, 0x76, 0xe9, 0x2c, 0x4c, 0x75, 0x59, 0x2f, 0x3c, 0x7a, 0x0e, 0x86, 0xf9, 0x6d, 0x84, + 0x1f, 0x81, 0x7c, 0xa0, 0xad, 0xc3, 0xd3, 0xb1, 0x93, 0x74, 0xc5, 0xd9, 0x72, 0x9b, 0x87, 0xcb, + 0x28, 0x08, 0xaf, 0xd1, 0xfc, 0xfd, 0x4b, 0x61, 0xd0, 0xf7, 0x2f, 0xda, 0xa7, 0x0a, 0x4c, 0xa6, + 0x80, 0x25, 0xe4, 0x25, 0x18, 0x0f, 0x08, 0xf2, 0x93, 0x35, 0xf8, 0xf2, 0x29, 0xbd, 0xc4, 0x66, + 0x79, 0x05, 0xfe, 0x40, 0x51, 0x54, 0x0d, 0x00, 0x3b, 0x56, 0xe2, 0xde, 0xb5, 0xac, 0xe8, 0xa7, + 0xb1, 0x63, 0x85, 0x34, 0xcd, 0x2a, 0x94, 0x8d, 0x38, 0x58, 0xb3, 0x0c, 0x25, 0x23, 0xe2, 0xd2, + 0xfe, 0x59, 0x80, 0x6a, 0x4a, 0x0d, 0xf5, 0x29, 0x18, 0x49, 0x49, 0x16, 0x63, 0x2a, 0xf4, 0x88, + 0xf6, 0xa6, 0x0b, 0x99, 0xe2, 0x09, 0xbc, 0x44, 0xdb, 0x80, 0x92, 0x87, 0x7d, 0x5a, 0x95, 0x10, + 0x7b, 0x0f, 0x8b, 0xcb, 0xdd, 0xfc, 0xa0, 0x75, 0x5f, 0x84, 0xa0, 0xc7, 0xe1, 0xd4, 0x9b, 0x30, + 0x44, 0xb7, 0x12, 0xab, 0x05, 0x06, 0x2f, 0x27, 0xd7, 0x6d, 0xbc, 0xaf, 0x33, 0x80, 0xe6, 0x69, + 0x18, 0x95, 0xde, 0xfe, 0x31, 0x4c, 0x75, 0xad, 0x79, 0xd4, 0x5e, 0x23, 0x07, 0x86, 0xed, 0x6c, + 0xb9, 0x62, 0x4b, 0x5f, 0xee, 0xe3, 0x9d, 0x0b, 0x43, 0x18, 0x21, 0x07, 0xf4, 0xaf, 0x86, 0xe0, + 0x99, 0x9c, 0x48, 0x3d, 0x31, 0x11, 0x1f, 0x41, 0x59, 0x5c, 0xe4, 0x05, 0xe4, 0x7b, 0x50, 0x62, + 0xe7, 0xa2, 0xcf, 0x52, 0xcc, 0x51, 0xce, 0x00, 0x70, 0xc2, 0xdf, 0xda, 0x97, 0x34, 0x37, 0xa5, + 0xee, 0xa6, 0x8f, 0x43, 0x90, 0x7a, 0x1b, 0xc6, 0x6d, 0x0b, 0x3b, 0xc4, 0x26, 0x87, 0xc6, 0x2e, + 0x3e, 0x14, 0xe1, 0x7c, 0xa5, 0x47, 0xd2, 0x59, 0x11, 0x2c, 0xb7, 0xf0, 0xa1, 0x5e, 0xb2, 0xa3, + 0x81, 0xf6, 0xef, 0x22, 0x9c, 0xcd, 0x10, 0x99, 0x55, 0x35, 0x28, 0x27, 0x52, 0x35, 0x7c, 0x17, + 0x86, 0xd8, 0x99, 0xcb, 0xf5, 0x7e, 0xbe, 0x57, 0x92, 0xa6, 0x1a, 0x31, 0x86, 0xc7, 0x70, 0x6f, + 0x4f, 0x1c, 0x1a, 0x43, 0x47, 0x3f, 0x34, 0x2e, 0x42, 0x85, 0x6f, 0x12, 0xc3, 0xf4, 0x31, 0x22, + 0xd8, 0x62, 0x1b, 0x6f, 0x48, 0x2f, 0xf3, 0xd9, 0x1b, 0x7c, 0x92, 0xe6, 0x46, 0x41, 0xc6, 0x73, + 0xf5, 0x88, 0xcc, 0x8d, 0x7c, 0x96, 0xb5, 0x8e, 0x68, 0x9a, 0xaa, 0xc3, 0x98, 0xe7, 0x06, 0x36, + 0xcb, 0x35, 0xa3, 0x0c, 0x28, 0x1c, 0xab, 0xef, 0xc0, 0x48, 0xe0, 0x76, 0x7c, 0x13, 0xd7, 0xc6, + 0xb2, 0xf5, 0x4d, 0x56, 0x8c, 0xd4, 0x7d, 0x6b, 0x8c, 0x5e, 0x17, 0x7c, 0x2c, 0xab, 0xc6, 0xd5, + 0xd0, 0xfe, 0x5a, 0x04, 0x88, 0x8e, 0xda, 0xac, 0x6a, 0x45, 0x39, 0x91, 0x6a, 0xe5, 0x6d, 0x71, + 0xea, 0xf3, 0x85, 0x7f, 0x31, 0x85, 0x66, 0xe1, 0x83, 0xe4, 0xc9, 0xbf, 0xda, 0x42, 0xb6, 0x43, + 0xf0, 0x01, 0xe1, 0x87, 0x7f, 0xc2, 0x2b, 0xc5, 0x94, 0x57, 0x4e, 0x6a, 0x21, 0x57, 0xa1, 0xc4, + 0xdf, 0x7c, 0xf3, 0xbb, 0xf2, 0x70, 0x66, 0xa2, 0x4f, 0x68, 0xda, 0x44, 0xc4, 0xdc, 0xa1, 0xea, + 0xf2, 0xb7, 0xb9, 0xec, 0x96, 0x0c, 0x6e, 0xf8, 0x5b, 0xbd, 0x12, 0x85, 0x46, 0x0b, 0xd9, 0x6d, + 0x6c, 0x85, 0xab, 0x2e, 0x83, 0x83, 0x4f, 0xd3, 0x75, 0x8f, 0xd6, 0x76, 0xf4, 0x88, 0x6b, 0x7b, + 0x06, 0xaa, 0x46, 0x52, 0x9c, 0xf6, 0x77, 0x05, 0xa6, 0xee, 0xee, 0x3b, 0xd8, 0x5a, 0x15, 0xce, + 0x5a, 0xb1, 0xc2, 0xa2, 0xe9, 0x3e, 0x54, 0xa4, 0x0b, 0xe9, 0x41, 0x1b, 0x16, 0xc2, 0x8f, 0x5c, + 0x1b, 0x89, 0xc3, 0x96, 0x9b, 0xda, 0xe1, 0xc5, 0x27, 0xa8, 0x1d, 0x77, 0x61, 0x9c, 0xf8, 0x88, + 0x5d, 0x62, 0x3d, 0x64, 0xcb, 0x72, 0xec, 0xf2, 0xa3, 0x40, 0xef, 0x71, 0xfa, 0x55, 0x64, 0xfb, + 0xcb, 0x0a, 0x3b, 0x29, 0xe5, 0x90, 0x16, 0x02, 0xd4, 0xac, 0xa4, 0xa2, 0x2c, 0x8a, 0xe3, 0x42, + 0x34, 0x0c, 0xb5, 0x6e, 0x33, 0x45, 0x02, 0x5e, 0x81, 0xf1, 0x90, 0xdd, 0xb6, 0xe8, 0x65, 0xab, + 0x98, 0x51, 0x01, 0x64, 0x5a, 0xb9, 0x62, 0xe9, 0x25, 0x2f, 0x82, 0x9c, 0xfb, 0xea, 0x2c, 0x9c, + 0xa5, 0xe7, 0xe3, 0xaa, 0xef, 0x12, 0xd7, 0x74, 0x5b, 0x6b, 0xd8, 0xdf, 0xb3, 0x4d, 0xac, 0xbe, + 0x0f, 0x23, 0xbc, 0x24, 0x53, 0x73, 0xdf, 0x1b, 0x24, 0x0a, 0xd6, 0xfa, 0xa5, 0x5e, 0x64, 0x42, + 0xf7, 0x5d, 0x18, 0x8f, 0x37, 0xbd, 0xd5, 0x97, 0x1e, 0xcd, 0x97, 0x68, 0xd2, 0xd7, 0x5f, 0xee, + 0x8f, 0x98, 0x8b, 0xba, 0xaa, 0xa8, 0xeb, 0x30, 0xcc, 0xce, 0x30, 0xf5, 0x85, 0x3c, 0xc6, 0x78, + 0x2f, 0xbc, 0x7e, 0xb1, 0x07, 0x55, 0x88, 0xfb, 0x31, 0x54, 0x92, 0x67, 0xa3, 0xfa, 0xca, 0x23, + 0x59, 0xd3, 0xfd, 0xdd, 0x7a, 0xa3, 0x5f, 0xf2, 0x50, 0xe4, 0x87, 0x30, 0x2a, 0xfa, 0x52, 0x6a, + 0xae, 0xab, 0x93, 0x0d, 0xd4, 0xfa, 0xe5, 0x9e, 0x74, 0x62, 0x4d, 0xfc, 0xb0, 0x77, 0x28, 0x7b, + 0x5e, 0x6a, 0xa3, 0x07, 0x6f, 0xaa, 0xf9, 0x57, 0x9f, 0xed, 0x9b, 0x5e, 0xc8, 0xfc, 0x00, 0x46, + 0x78, 0x2b, 0x25, 0x3f, 0xc0, 0x12, 0x8d, 0xb1, 0xfc, 0x00, 0x4b, 0x76, 0x64, 0xae, 0x2a, 0xd4, + 0x9c, 0x54, 0x67, 0x23, 0xdf, 0x9c, 0xec, 0x3e, 0x4b, 0xbe, 0x39, 0x79, 0xdd, 0x97, 0x16, 0x94, + 0x13, 0x6d, 0x11, 0x35, 0x37, 0x54, 0xb3, 0xba, 0x2a, 0xf5, 0x57, 0xfa, 0xa4, 0x16, 0xd2, 0x5c, + 0xa8, 0x24, 0xdf, 0xf6, 0xe7, 0xc7, 0x5f, 0xe6, 0x97, 0x0a, 0xf9, 0xf1, 0x97, 0xf3, 0x11, 0x81, + 0x0b, 0x95, 0xe4, 0x6b, 0xfa, 0x7c, 0x81, 0x99, 0x9f, 0x0a, 0xe4, 0x0b, 0xcc, 0x79, 0xfb, 0xdf, + 0x81, 0x89, 0xf4, 0xdb, 0x6f, 0x35, 0x77, 0x51, 0x72, 0xde, 0xde, 0xd7, 0xaf, 0xf6, 0xcf, 0x20, + 0xc4, 0x1a, 0x30, 0x26, 0xdf, 0x2e, 0xab, 0xb9, 0xdb, 0x27, 0xf5, 0xde, 0xbc, 0x3e, 0xd3, 0x9b, + 0x30, 0x8c, 0xcd, 0x0e, 0x4c, 0xa4, 0xfb, 0x38, 0xf9, 0x76, 0xe5, 0x74, 0xc0, 0xf2, 0xed, 0xca, + 0x6d, 0x11, 0x75, 0x60, 0x22, 0xdd, 0xbd, 0xc8, 0x17, 0x9b, 0xd3, 0xf7, 0xc9, 0x17, 0x9b, 0xdb, + 0x18, 0xf1, 0xa1, 0x9a, 0xba, 0xe1, 0xe7, 0xef, 0xc4, 0xec, 0x46, 0x48, 0xfe, 0x4e, 0xcc, 0x6b, + 0x1d, 0x7c, 0xaa, 0xc0, 0xf9, 0xcc, 0xbb, 0x97, 0x7a, 0xbd, 0xcf, 0x2b, 0x56, 0xa2, 0xa9, 0x50, + 0x7f, 0x6d, 0x40, 0x2e, 0xa1, 0x06, 0xe9, 0xbe, 0xcb, 0x37, 0xfa, 0xbd, 0xe2, 0xf5, 0x32, 0x3d, + 0xe7, 0xde, 0x7a, 0x55, 0x51, 0x7f, 0x0e, 0x6a, 0xf7, 0x27, 0x50, 0xea, 0xb5, 0x81, 0x3f, 0x19, + 0xac, 0xcf, 0x0d, 0xc2, 0x22, 0x4c, 0xfe, 0x44, 0x81, 0x73, 0x59, 0xdf, 0xc7, 0xaa, 0xaf, 0xe6, + 0x6e, 0x90, 0xfc, 0x2f, 0x7d, 0xeb, 0xd7, 0x07, 0x63, 0x8a, 0x02, 0x3d, 0x5d, 0x36, 0xe5, 0x07, + 0x7a, 0x4e, 0x1d, 0x99, 0x1f, 0xe8, 0xb9, 0x15, 0xd9, 0x01, 0x9c, 0xe9, 0xfa, 0x4c, 0x5a, 0xcd, + 0x85, 0xc9, 0xfb, 0x66, 0xbc, 0x7e, 0x6d, 0x00, 0x0e, 0x2e, 0x79, 0xce, 0x8b, 0xbe, 0x26, 0x91, + 0xb5, 0xdb, 0x47, 0x30, 0x26, 0xa7, 0xf2, 0x93, 0x58, 0xea, 0x13, 0x94, 0xfc, 0x24, 0x96, 0xfe, + 0xae, 0xa4, 0xf9, 0x59, 0xe1, 0x4f, 0x0f, 0xa7, 0x95, 0xaf, 0x1f, 0x4e, 0x2b, 0xdf, 0x3c, 0x9c, + 0x56, 0x7e, 0xfd, 0xed, 0xf4, 0xa9, 0xaf, 0xbf, 0x9d, 0x3e, 0xf5, 0x97, 0x6f, 0xa7, 0x4f, 0x41, + 0xdd, 0x74, 0xdb, 0x39, 0x38, 0xcd, 0xd3, 0x61, 0x99, 0xb9, 0xaa, 0x7c, 0x78, 0x77, 0xdb, 0x26, + 0x3b, 0x9d, 0xcd, 0x86, 0xe9, 0xb6, 0x67, 0x4d, 0x37, 0x68, 0xbb, 0xc1, 0xac, 0x8f, 0x5b, 0xe8, + 0x10, 0xfb, 0xb3, 0x7b, 0x73, 0xe1, 0x4f, 0x76, 0x41, 0x08, 0x66, 0xb3, 0xff, 0x45, 0xe1, 0x4d, + 0x3a, 0x92, 0x83, 0xdf, 0x15, 0x8a, 0xab, 0xeb, 0x3f, 0xfa, 0x7d, 0x61, 0x72, 0x55, 0x0a, 0xa7, + 0xd2, 0x1a, 0xeb, 0xe2, 0xf1, 0x9f, 0xa3, 0x07, 0x1b, 0xf4, 0xc1, 0x86, 0x7c, 0xf0, 0xb0, 0xa0, + 0x65, 0x3f, 0xd8, 0xb8, 0xb9, 0xda, 0x94, 0xef, 0x63, 0xfe, 0x51, 0xa8, 0x49, 0xa2, 0xf9, 0x79, + 0x4a, 0x35, 0x3f, 0x2f, 0xc9, 0x36, 0x47, 0xd8, 0x7f, 0x02, 0xbc, 0xfa, 0x9f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xa1, 0x4b, 0xc5, 0x96, 0x48, 0x31, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3548,9 +3680,12 @@ type ViewProtocolServiceClient interface { // Get current status of chain sync Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*StatusResponse, error) // Stream sync status updates until the view service has caught up with the core.chain.v1alpha1. + // Returns a stream of `StatusStreamResponse`s. StatusStream(ctx context.Context, in *StatusStreamRequest, opts ...grpc.CallOption) (ViewProtocolService_StatusStreamClient, error) // Queries for notes that have been accepted by the core.chain.v1alpha1. + // Returns a stream of `NotesResponse`s. Notes(ctx context.Context, in *NotesRequest, opts ...grpc.CallOption) (ViewProtocolService_NotesClient, error) + // Returns a stream of `NotesForVotingResponse`s. NotesForVoting(ctx context.Context, in *NotesForVotingRequest, opts ...grpc.CallOption) (ViewProtocolService_NotesForVotingClient, error) // Returns authentication paths for the given note commitments. // @@ -3561,6 +3696,7 @@ type ViewProtocolServiceClient interface { Witness(ctx context.Context, in *WitnessRequest, opts ...grpc.CallOption) (*WitnessResponse, error) WitnessAndBuild(ctx context.Context, in *WitnessAndBuildRequest, opts ...grpc.CallOption) (*WitnessAndBuildResponse, error) // Queries for assets. + // Returns a stream of `AssetsResponse`s. Assets(ctx context.Context, in *AssetsRequest, opts ...grpc.CallOption) (ViewProtocolService_AssetsClient, error) // Query for the current chain parameters. ChainParameters(ctx context.Context, in *ChainParametersRequest, opts ...grpc.CallOption) (*ChainParametersResponse, error) @@ -3572,8 +3708,9 @@ type ViewProtocolServiceClient interface { IndexByAddress(ctx context.Context, in *IndexByAddressRequest, opts ...grpc.CallOption) (*IndexByAddressResponse, error) // Query for an ephemeral address EphemeralAddress(ctx context.Context, in *EphemeralAddressRequest, opts ...grpc.CallOption) (*EphemeralAddressResponse, error) - // Query for balance of a given address - BalanceByAddress(ctx context.Context, in *BalanceByAddressRequest, opts ...grpc.CallOption) (ViewProtocolService_BalanceByAddressClient, error) + // Query for balance of a given address. + // Returns a stream of `BalancesResponses`. + Balances(ctx context.Context, in *BalancesRequest, opts ...grpc.CallOption) (ViewProtocolService_BalancesClient, error) // Query for a note by its note commitment, optionally waiting until the note is detected. NoteByCommitment(ctx context.Context, in *NoteByCommitmentRequest, opts ...grpc.CallOption) (*NoteByCommitmentResponse, error) // Query for a swap by its swap commitment, optionally waiting until the swap is detected. @@ -3583,6 +3720,7 @@ type ViewProtocolServiceClient interface { // Query for a given transaction by its hash. TransactionInfoByHash(ctx context.Context, in *TransactionInfoByHashRequest, opts ...grpc.CallOption) (*TransactionInfoByHashResponse, error) // Query for the full transactions in the given range of blocks. + // Returns a stream of `TransactionInfoResponse`s. TransactionInfo(ctx context.Context, in *TransactionInfoRequest, opts ...grpc.CallOption) (ViewProtocolService_TransactionInfoClient, error) // Query for a transaction plan TransactionPlanner(ctx context.Context, in *TransactionPlannerRequest, opts ...grpc.CallOption) (*TransactionPlannerResponse, error) @@ -3590,6 +3728,8 @@ type ViewProtocolServiceClient interface { BroadcastTransaction(ctx context.Context, in *BroadcastTransactionRequest, opts ...grpc.CallOption) (*BroadcastTransactionResponse, error) // Query for owned position IDs for the given trading pair and in the given position state. OwnedPositionIds(ctx context.Context, in *OwnedPositionIdsRequest, opts ...grpc.CallOption) (*OwnedPositionIdsResponse, error) + // Authorize a transaction plan and build the transaction. + AuthorizeAndBuild(ctx context.Context, in *AuthorizeAndBuildRequest, opts ...grpc.CallOption) (*AuthorizeAndBuildResponse, error) } type viewProtocolServiceClient struct { @@ -3800,12 +3940,12 @@ func (c *viewProtocolServiceClient) EphemeralAddress(ctx context.Context, in *Ep return out, nil } -func (c *viewProtocolServiceClient) BalanceByAddress(ctx context.Context, in *BalanceByAddressRequest, opts ...grpc.CallOption) (ViewProtocolService_BalanceByAddressClient, error) { - stream, err := c.cc.NewStream(ctx, &_ViewProtocolService_serviceDesc.Streams[4], "/penumbra.view.v1alpha1.ViewProtocolService/BalanceByAddress", opts...) +func (c *viewProtocolServiceClient) Balances(ctx context.Context, in *BalancesRequest, opts ...grpc.CallOption) (ViewProtocolService_BalancesClient, error) { + stream, err := c.cc.NewStream(ctx, &_ViewProtocolService_serviceDesc.Streams[4], "/penumbra.view.v1alpha1.ViewProtocolService/Balances", opts...) if err != nil { return nil, err } - x := &viewProtocolServiceBalanceByAddressClient{stream} + x := &viewProtocolServiceBalancesClient{stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -3815,17 +3955,17 @@ func (c *viewProtocolServiceClient) BalanceByAddress(ctx context.Context, in *Ba return x, nil } -type ViewProtocolService_BalanceByAddressClient interface { - Recv() (*BalanceByAddressResponse, error) +type ViewProtocolService_BalancesClient interface { + Recv() (*BalancesResponse, error) grpc.ClientStream } -type viewProtocolServiceBalanceByAddressClient struct { +type viewProtocolServiceBalancesClient struct { grpc.ClientStream } -func (x *viewProtocolServiceBalanceByAddressClient) Recv() (*BalanceByAddressResponse, error) { - m := new(BalanceByAddressResponse) +func (x *viewProtocolServiceBalancesClient) Recv() (*BalancesResponse, error) { + m := new(BalancesResponse) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err } @@ -3927,14 +4067,26 @@ func (c *viewProtocolServiceClient) OwnedPositionIds(ctx context.Context, in *Ow return out, nil } +func (c *viewProtocolServiceClient) AuthorizeAndBuild(ctx context.Context, in *AuthorizeAndBuildRequest, opts ...grpc.CallOption) (*AuthorizeAndBuildResponse, error) { + out := new(AuthorizeAndBuildResponse) + err := c.cc.Invoke(ctx, "/penumbra.view.v1alpha1.ViewProtocolService/AuthorizeAndBuild", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ViewProtocolServiceServer is the server API for ViewProtocolService service. type ViewProtocolServiceServer interface { // Get current status of chain sync Status(context.Context, *StatusRequest) (*StatusResponse, error) // Stream sync status updates until the view service has caught up with the core.chain.v1alpha1. + // Returns a stream of `StatusStreamResponse`s. StatusStream(*StatusStreamRequest, ViewProtocolService_StatusStreamServer) error // Queries for notes that have been accepted by the core.chain.v1alpha1. + // Returns a stream of `NotesResponse`s. Notes(*NotesRequest, ViewProtocolService_NotesServer) error + // Returns a stream of `NotesForVotingResponse`s. NotesForVoting(*NotesForVotingRequest, ViewProtocolService_NotesForVotingServer) error // Returns authentication paths for the given note commitments. // @@ -3945,6 +4097,7 @@ type ViewProtocolServiceServer interface { Witness(context.Context, *WitnessRequest) (*WitnessResponse, error) WitnessAndBuild(context.Context, *WitnessAndBuildRequest) (*WitnessAndBuildResponse, error) // Queries for assets. + // Returns a stream of `AssetsResponse`s. Assets(*AssetsRequest, ViewProtocolService_AssetsServer) error // Query for the current chain parameters. ChainParameters(context.Context, *ChainParametersRequest) (*ChainParametersResponse, error) @@ -3956,8 +4109,9 @@ type ViewProtocolServiceServer interface { IndexByAddress(context.Context, *IndexByAddressRequest) (*IndexByAddressResponse, error) // Query for an ephemeral address EphemeralAddress(context.Context, *EphemeralAddressRequest) (*EphemeralAddressResponse, error) - // Query for balance of a given address - BalanceByAddress(*BalanceByAddressRequest, ViewProtocolService_BalanceByAddressServer) error + // Query for balance of a given address. + // Returns a stream of `BalancesResponses`. + Balances(*BalancesRequest, ViewProtocolService_BalancesServer) error // Query for a note by its note commitment, optionally waiting until the note is detected. NoteByCommitment(context.Context, *NoteByCommitmentRequest) (*NoteByCommitmentResponse, error) // Query for a swap by its swap commitment, optionally waiting until the swap is detected. @@ -3967,6 +4121,7 @@ type ViewProtocolServiceServer interface { // Query for a given transaction by its hash. TransactionInfoByHash(context.Context, *TransactionInfoByHashRequest) (*TransactionInfoByHashResponse, error) // Query for the full transactions in the given range of blocks. + // Returns a stream of `TransactionInfoResponse`s. TransactionInfo(*TransactionInfoRequest, ViewProtocolService_TransactionInfoServer) error // Query for a transaction plan TransactionPlanner(context.Context, *TransactionPlannerRequest) (*TransactionPlannerResponse, error) @@ -3974,6 +4129,8 @@ type ViewProtocolServiceServer interface { BroadcastTransaction(context.Context, *BroadcastTransactionRequest) (*BroadcastTransactionResponse, error) // Query for owned position IDs for the given trading pair and in the given position state. OwnedPositionIds(context.Context, *OwnedPositionIdsRequest) (*OwnedPositionIdsResponse, error) + // Authorize a transaction plan and build the transaction. + AuthorizeAndBuild(context.Context, *AuthorizeAndBuildRequest) (*AuthorizeAndBuildResponse, error) } // UnimplementedViewProtocolServiceServer can be embedded to have forward compatible implementations. @@ -4016,8 +4173,8 @@ func (*UnimplementedViewProtocolServiceServer) IndexByAddress(ctx context.Contex func (*UnimplementedViewProtocolServiceServer) EphemeralAddress(ctx context.Context, req *EphemeralAddressRequest) (*EphemeralAddressResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method EphemeralAddress not implemented") } -func (*UnimplementedViewProtocolServiceServer) BalanceByAddress(req *BalanceByAddressRequest, srv ViewProtocolService_BalanceByAddressServer) error { - return status.Errorf(codes.Unimplemented, "method BalanceByAddress not implemented") +func (*UnimplementedViewProtocolServiceServer) Balances(req *BalancesRequest, srv ViewProtocolService_BalancesServer) error { + return status.Errorf(codes.Unimplemented, "method Balances not implemented") } func (*UnimplementedViewProtocolServiceServer) NoteByCommitment(ctx context.Context, req *NoteByCommitmentRequest) (*NoteByCommitmentResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method NoteByCommitment not implemented") @@ -4043,6 +4200,9 @@ func (*UnimplementedViewProtocolServiceServer) BroadcastTransaction(ctx context. func (*UnimplementedViewProtocolServiceServer) OwnedPositionIds(ctx context.Context, req *OwnedPositionIdsRequest) (*OwnedPositionIdsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method OwnedPositionIds not implemented") } +func (*UnimplementedViewProtocolServiceServer) AuthorizeAndBuild(ctx context.Context, req *AuthorizeAndBuildRequest) (*AuthorizeAndBuildResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AuthorizeAndBuild not implemented") +} func RegisterViewProtocolServiceServer(s grpc1.Server, srv ViewProtocolServiceServer) { s.RegisterService(&_ViewProtocolService_serviceDesc, srv) @@ -4276,24 +4436,24 @@ func _ViewProtocolService_EphemeralAddress_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } -func _ViewProtocolService_BalanceByAddress_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(BalanceByAddressRequest) +func _ViewProtocolService_Balances_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(BalancesRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(ViewProtocolServiceServer).BalanceByAddress(m, &viewProtocolServiceBalanceByAddressServer{stream}) + return srv.(ViewProtocolServiceServer).Balances(m, &viewProtocolServiceBalancesServer{stream}) } -type ViewProtocolService_BalanceByAddressServer interface { - Send(*BalanceByAddressResponse) error +type ViewProtocolService_BalancesServer interface { + Send(*BalancesResponse) error grpc.ServerStream } -type viewProtocolServiceBalanceByAddressServer struct { +type viewProtocolServiceBalancesServer struct { grpc.ServerStream } -func (x *viewProtocolServiceBalanceByAddressServer) Send(m *BalanceByAddressResponse) error { +func (x *viewProtocolServiceBalancesServer) Send(m *BalancesResponse) error { return x.ServerStream.SendMsg(m) } @@ -4444,6 +4604,24 @@ func _ViewProtocolService_OwnedPositionIds_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } +func _ViewProtocolService_AuthorizeAndBuild_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthorizeAndBuildRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ViewProtocolServiceServer).AuthorizeAndBuild(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/penumbra.view.v1alpha1.ViewProtocolService/AuthorizeAndBuild", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ViewProtocolServiceServer).AuthorizeAndBuild(ctx, req.(*AuthorizeAndBuildRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _ViewProtocolService_serviceDesc = grpc.ServiceDesc{ ServiceName: "penumbra.view.v1alpha1.ViewProtocolService", HandlerType: (*ViewProtocolServiceServer)(nil), @@ -4508,6 +4686,10 @@ var _ViewProtocolService_serviceDesc = grpc.ServiceDesc{ MethodName: "OwnedPositionIds", Handler: _ViewProtocolService_OwnedPositionIds_Handler, }, + { + MethodName: "AuthorizeAndBuild", + Handler: _ViewProtocolService_AuthorizeAndBuild_Handler, + }, }, Streams: []grpc.StreamDesc{ { @@ -4531,8 +4713,8 @@ var _ViewProtocolService_serviceDesc = grpc.ServiceDesc{ ServerStreams: true, }, { - StreamName: "BalanceByAddress", - Handler: _ViewProtocolService_BalanceByAddress_Handler, + StreamName: "Balances", + Handler: _ViewProtocolService_Balances_Handler, ServerStreams: true, }, { @@ -4616,7 +4798,7 @@ var _ViewAuthService_serviceDesc = grpc.ServiceDesc{ Metadata: "penumbra/view/v1alpha1/view.proto", } -func (m *BroadcastTransactionRequest) Marshal() (dAtA []byte, err error) { +func (m *AuthorizeAndBuildRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4626,29 +4808,31 @@ func (m *BroadcastTransactionRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *BroadcastTransactionRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *AuthorizeAndBuildRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *BroadcastTransactionRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *AuthorizeAndBuildRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.AwaitDetection { - i-- - if m.AwaitDetection { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if m.AuthorizationData != nil { + { + size, err := m.AuthorizationData.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintView(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x10 + dAtA[i] = 0x12 } - if m.Transaction != nil { + if m.TransactionPlan != nil { { - size, err := m.Transaction.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.TransactionPlan.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -4661,7 +4845,7 @@ func (m *BroadcastTransactionRequest) MarshalToSizedBuffer(dAtA []byte) (int, er return len(dAtA) - i, nil } -func (m *BroadcastTransactionResponse) Marshal() (dAtA []byte, err error) { +func (m *AuthorizeAndBuildResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4671,24 +4855,19 @@ func (m *BroadcastTransactionResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *BroadcastTransactionResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *AuthorizeAndBuildResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *BroadcastTransactionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *AuthorizeAndBuildResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.DetectionHeight != 0 { - i = encodeVarintView(dAtA, i, uint64(m.DetectionHeight)) - i-- - dAtA[i] = 0x10 - } - if m.Id != nil { + if m.Transaction != nil { { - size, err := m.Id.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Transaction.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -4701,7 +4880,7 @@ func (m *BroadcastTransactionResponse) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } -func (m *TransactionPlannerRequest) Marshal() (dAtA []byte, err error) { +func (m *BroadcastTransactionRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4711,33 +4890,118 @@ func (m *TransactionPlannerRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *TransactionPlannerRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *BroadcastTransactionRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *TransactionPlannerRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *BroadcastTransactionRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.IbcActions) > 0 { - for iNdEx := len(m.IbcActions) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.IbcActions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintView(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3 - i-- - dAtA[i] = 0xe2 - } - } - if len(m.Undelegations) > 0 { + if m.AwaitDetection { + i-- + if m.AwaitDetection { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + } + if m.Transaction != nil { + { + size, err := m.Transaction.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintView(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *BroadcastTransactionResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BroadcastTransactionResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BroadcastTransactionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.DetectionHeight != 0 { + i = encodeVarintView(dAtA, i, uint64(m.DetectionHeight)) + i-- + dAtA[i] = 0x10 + } + if m.Id != nil { + { + size, err := m.Id.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintView(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *TransactionPlannerRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TransactionPlannerRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TransactionPlannerRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.IbcActions) > 0 { + for iNdEx := len(m.IbcActions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.IbcActions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintView(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3 + i-- + dAtA[i] = 0xe2 + } + } + if len(m.Undelegations) > 0 { for iNdEx := len(m.Undelegations) - 1; iNdEx >= 0; iNdEx-- { { size, err := m.Undelegations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) @@ -5113,6 +5377,16 @@ func (m *AddressByIndexRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.DisplayConfirm { + i-- + if m.DisplayConfirm { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + } if m.AddressIndex != nil { { size, err := m.AddressIndex.MarshalToSizedBuffer(dAtA[:i]) @@ -5271,6 +5545,16 @@ func (m *EphemeralAddressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l + if m.DisplayConfirm { + i-- + if m.DisplayConfirm { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + } if m.AddressIndex != nil { { size, err := m.AddressIndex.MarshalToSizedBuffer(dAtA[:i]) @@ -5321,7 +5605,7 @@ func (m *EphemeralAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, error return len(dAtA) - i, nil } -func (m *BalanceByAddressRequest) Marshal() (dAtA []byte, err error) { +func (m *BalancesRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -5331,19 +5615,31 @@ func (m *BalanceByAddressRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *BalanceByAddressRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *BalancesRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *BalanceByAddressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *BalancesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Address != nil { + if m.AssetIdFilter != nil { { - size, err := m.Address.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.AssetIdFilter.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintView(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.AccountFilter != nil { + { + size, err := m.AccountFilter.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -5356,7 +5652,7 @@ func (m *BalanceByAddressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *BalanceByAddressResponse) Marshal() (dAtA []byte, err error) { +func (m *BalancesResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -5366,19 +5662,19 @@ func (m *BalanceByAddressResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *BalanceByAddressResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *BalancesResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *BalanceByAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *BalancesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Amount != nil { + if m.Balance != nil { { - size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Balance.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -5388,9 +5684,9 @@ func (m *BalanceByAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, error i-- dAtA[i] = 0x12 } - if m.Asset != nil { + if m.Account != nil { { - size, err := m.Asset.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Account.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -7319,6 +7615,36 @@ func encodeVarintView(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } +func (m *AuthorizeAndBuildRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TransactionPlan != nil { + l = m.TransactionPlan.Size() + n += 1 + l + sovView(uint64(l)) + } + if m.AuthorizationData != nil { + l = m.AuthorizationData.Size() + n += 1 + l + sovView(uint64(l)) + } + return n +} + +func (m *AuthorizeAndBuildResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Transaction != nil { + l = m.Transaction.Size() + n += 1 + l + sovView(uint64(l)) + } + return n +} + func (m *BroadcastTransactionRequest) Size() (n int) { if m == nil { return 0 @@ -7511,6 +7837,9 @@ func (m *AddressByIndexRequest) Size() (n int) { l = m.AddressIndex.Size() n += 1 + l + sovView(uint64(l)) } + if m.DisplayConfirm { + n += 2 + } return n } @@ -7574,6 +7903,9 @@ func (m *EphemeralAddressRequest) Size() (n int) { l = m.AddressIndex.Size() n += 1 + l + sovView(uint64(l)) } + if m.DisplayConfirm { + n += 2 + } return n } @@ -7590,31 +7922,35 @@ func (m *EphemeralAddressResponse) Size() (n int) { return n } -func (m *BalanceByAddressRequest) Size() (n int) { +func (m *BalancesRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.Address != nil { - l = m.Address.Size() + if m.AccountFilter != nil { + l = m.AccountFilter.Size() + n += 1 + l + sovView(uint64(l)) + } + if m.AssetIdFilter != nil { + l = m.AssetIdFilter.Size() n += 1 + l + sovView(uint64(l)) } return n } -func (m *BalanceByAddressResponse) Size() (n int) { +func (m *BalancesResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.Asset != nil { - l = m.Asset.Size() + if m.Account != nil { + l = m.Account.Size() n += 1 + l + sovView(uint64(l)) } - if m.Amount != nil { - l = m.Amount.Size() + if m.Balance != nil { + l = m.Balance.Size() n += 1 + l + sovView(uint64(l)) } return n @@ -8395,6 +8731,214 @@ func sovView(x uint64) (n int) { func sozView(x uint64) (n int) { return sovView(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (m *AuthorizeAndBuildRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowView + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthorizeAndBuildRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthorizeAndBuildRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TransactionPlan", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowView + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthView + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthView + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TransactionPlan == nil { + m.TransactionPlan = &v1alpha1.TransactionPlan{} + } + if err := m.TransactionPlan.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthorizationData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowView + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthView + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthView + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AuthorizationData == nil { + m.AuthorizationData = &v1alpha1.AuthorizationData{} + } + if err := m.AuthorizationData.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipView(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthView + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthorizeAndBuildResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowView + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthorizeAndBuildResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthorizeAndBuildResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Transaction", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowView + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthView + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthView + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Transaction == nil { + m.Transaction = &v1alpha1.Transaction{} + } + if err := m.Transaction.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipView(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthView + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *BroadcastTransactionRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -9623,6 +10167,26 @@ func (m *AddressByIndexRequest) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DisplayConfirm", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowView + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.DisplayConfirm = bool(v != 0) default: iNdEx = preIndex skippy, err := skipView(dAtA[iNdEx:]) @@ -9966,6 +10530,26 @@ func (m *EphemeralAddressRequest) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DisplayConfirm", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowView + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.DisplayConfirm = bool(v != 0) default: iNdEx = preIndex skippy, err := skipView(dAtA[iNdEx:]) @@ -10073,7 +10657,7 @@ func (m *EphemeralAddressResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *BalanceByAddressRequest) Unmarshal(dAtA []byte) error { +func (m *BalancesRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -10096,15 +10680,15 @@ func (m *BalanceByAddressRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: BalanceByAddressRequest: wiretype end group for non-group") + return fmt.Errorf("proto: BalancesRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: BalanceByAddressRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: BalancesRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AccountFilter", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -10131,10 +10715,46 @@ func (m *BalanceByAddressRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Address == nil { - m.Address = &v1alpha11.Address{} + if m.AccountFilter == nil { + m.AccountFilter = &v1alpha11.AddressIndex{} } - if err := m.Address.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.AccountFilter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AssetIdFilter", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowView + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthView + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthView + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AssetIdFilter == nil { + m.AssetIdFilter = &v1alpha11.AssetId{} + } + if err := m.AssetIdFilter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -10159,7 +10779,7 @@ func (m *BalanceByAddressRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *BalanceByAddressResponse) Unmarshal(dAtA []byte) error { +func (m *BalancesResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -10182,15 +10802,15 @@ func (m *BalanceByAddressResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: BalanceByAddressResponse: wiretype end group for non-group") + return fmt.Errorf("proto: BalancesResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: BalanceByAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: BalancesResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Asset", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Account", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -10217,16 +10837,16 @@ func (m *BalanceByAddressResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Asset == nil { - m.Asset = &v1alpha11.AssetId{} + if m.Account == nil { + m.Account = &v1alpha11.AddressIndex{} } - if err := m.Asset.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Account.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Balance", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -10253,10 +10873,10 @@ func (m *BalanceByAddressResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Amount == nil { - m.Amount = &v1alpha11.Amount{} + if m.Balance == nil { + m.Balance = &v1alpha11.Value{} } - if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Balance.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex From 73d338abc45691ba1f7a7066882308bceb6009e8 Mon Sep 17 00:00:00 2001 From: Joe Abbey Date: Sat, 22 Jul 2023 13:32:55 -0400 Subject: [PATCH 03/16] fix: Suppressing scary SDK error on redundant packets (#1214) Co-authored-by: Andrew Gouin --- relayer/chains/cosmos/log.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/relayer/chains/cosmos/log.go b/relayer/chains/cosmos/log.go index 75e43a982..9008e58d5 100644 --- a/relayer/chains/cosmos/log.go +++ b/relayer/chains/cosmos/log.go @@ -1,6 +1,7 @@ package cosmos import ( + "errors" "reflect" "github.com/cosmos/cosmos-sdk/codec/types" @@ -8,6 +9,7 @@ import ( typestx "github.com/cosmos/cosmos-sdk/types/tx" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + chantypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" "github.com/cosmos/relayer/v2/relayer/provider" "go.uber.org/zap" "go.uber.org/zap/zapcore" @@ -52,6 +54,12 @@ func (cc *CosmosProvider) LogFailedTx(res *provider.RelayerTxResponse, err error fields = append(fields, msgTypesField(msgs)) if err != nil { + + if errors.Is(err, chantypes.ErrRedundantTx) { + cc.log.Debug("Redundant message(s)", fields...) + return + } + // Make a copy since we may continue to the warning errorFields := append(fields, zap.Error(err)) cc.log.Error( From 7ae1596b81e6daa6ac54d413077fde500f8cf01a Mon Sep 17 00:00:00 2001 From: murataniloener Date: Tue, 25 Jul 2023 21:03:55 +0200 Subject: [PATCH 04/16] catch error if type is missing (#1234) Co-authored-by: Andrew Gouin --- cmd/config.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cmd/config.go b/cmd/config.go index 5266a4685..9888a4596 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -19,6 +19,7 @@ package cmd import ( "context" "encoding/json" + "errors" "fmt" "io" "io/ioutil" @@ -393,7 +394,11 @@ func UnmarshalJSONProviderConfig(data []byte, customTypes map[string]reflect.Typ return nil, err } - typeName := m["type"].(string) + typeName, ok := m["type"].(string) + if !ok { + return nil, errors.New("cannot find type"); + } + var provCfg provider.ProviderConfig if ty, found := customTypes[typeName]; found { provCfg = reflect.New(ty).Interface().(provider.ProviderConfig) From 22bce429316c81ce9a5386787d021b003d752b72 Mon Sep 17 00:00:00 2001 From: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> Date: Tue, 25 Jul 2023 12:11:21 -0700 Subject: [PATCH 05/16] Export client expiration metric to prometheus (#1235) * export client expiration metric * finalize * add path name * snake case * change label to `chain` * trusting period as string --- relayer/processor/message_processor.go | 7 +++++++ relayer/processor/metrics.go | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/relayer/processor/message_processor.go b/relayer/processor/message_processor.go index bb0f66b12..fe355cfa7 100644 --- a/relayer/processor/message_processor.go +++ b/relayer/processor/message_processor.go @@ -141,8 +141,14 @@ func (mp *messageProcessor) shouldUpdateClientNow(ctx context.Context, src, dst shouldUpdateClientNow := enoughBlocksPassed && (pastTwoThirdsTrustingPeriod || pastConfiguredClientUpdateThreshold) + if mp.metrics != nil { + timeToExpiration := dst.clientState.TrustingPeriod - time.Since(consensusHeightTime) + mp.metrics.SetClientExpiration(src.info.PathName, dst.info.ChainID, dst.clientState.ClientID, fmt.Sprint(dst.clientState.TrustingPeriod.String()), timeToExpiration) + } + if shouldUpdateClientNow { mp.log.Info("Client update threshold condition met", + zap.String("path_name", src.info.PathName), zap.String("chain_id", dst.info.ChainID), zap.String("client_id", dst.info.ClientID), zap.Int64("trusting_period", dst.clientState.TrustingPeriod.Milliseconds()), @@ -249,6 +255,7 @@ func (mp *messageProcessor) assembleMsgUpdateClient(ctx context.Context, src, ds clientConsensusHeight.RevisionHeight+1, src.info.ChainID, err) } mp.log.Debug("Had to query for client trusted IBC header", + zap.String("path_name", src.info.PathName), zap.String("chain_id", src.info.ChainID), zap.String("counterparty_chain_id", dst.info.ChainID), zap.String("counterparty_client_id", clientID), diff --git a/relayer/processor/metrics.go b/relayer/processor/metrics.go index a549eb40a..96de766b6 100644 --- a/relayer/processor/metrics.go +++ b/relayer/processor/metrics.go @@ -1,6 +1,8 @@ package processor import ( + "time" + "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" ) @@ -12,6 +14,7 @@ type PrometheusMetrics struct { LatestHeightGauge *prometheus.GaugeVec WalletBalance *prometheus.GaugeVec FeesSpent *prometheus.GaugeVec + ClientExpiration *prometheus.GaugeVec } func (m *PrometheusMetrics) AddPacketsObserved(path, chain, channel, port, eventType string, count int) { @@ -34,10 +37,15 @@ func (m *PrometheusMetrics) SetFeesSpent(chain, key, address, denom string, amou m.FeesSpent.WithLabelValues(chain, key, address, denom).Set(amount) } +func (m *PrometheusMetrics) SetClientExpiration(pathName, chain, clientID, trustingPeriod string, timeToExpiration time.Duration) { + m.ClientExpiration.WithLabelValues(pathName, chain, clientID, trustingPeriod).Set(timeToExpiration.Seconds()) +} + func NewPrometheusMetrics() *PrometheusMetrics { packetLabels := []string{"path", "chain", "channel", "port", "type"} heightLabels := []string{"chain"} walletLabels := []string{"chain", "key", "address", "denom"} + clientExpirationLables := []string{"path_name", "chain", "client_id", "trusting_period"} registry := prometheus.NewRegistry() registerer := promauto.With(registry) return &PrometheusMetrics{ @@ -62,5 +70,9 @@ func NewPrometheusMetrics() *PrometheusMetrics { Name: "cosmos_relayer_fees_spent", Help: "The amount of fees spent from the relayer's wallet", }, walletLabels), + ClientExpiration: registerer.NewGaugeVec(prometheus.GaugeOpts{ + Name: "cosmos_relayer_client_expiration_seconds", + Help: "Seconds until the client expires", + }, clientExpirationLables), } } From 55084bd5844c42a5df8cf9e6fa2d74a84ccf304c Mon Sep 17 00:00:00 2001 From: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> Date: Tue, 25 Jul 2023 12:21:03 -0700 Subject: [PATCH 06/16] Export configured gas prices to prometheus wallet balance metric (#1236) * export gas price to prom * update label * update fees spent metric * snake case --- relayer/chains/cosmos/cosmos_chain_processor.go | 2 +- relayer/chains/cosmos/tx.go | 2 +- relayer/processor/metrics.go | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/relayer/chains/cosmos/cosmos_chain_processor.go b/relayer/chains/cosmos/cosmos_chain_processor.go index b4bef6d47..9189e945d 100644 --- a/relayer/chains/cosmos/cosmos_chain_processor.go +++ b/relayer/chains/cosmos/cosmos_chain_processor.go @@ -550,6 +550,6 @@ func (ccp *CosmosChainProcessor) CurrentRelayerBalance(ctx context.Context) { bal := relayerWalletBalances.AmountOf(gasDenom.Denom) // Convert to a big float to get a float64 for metrics f, _ := big.NewFloat(0.0).SetInt(bal.BigInt()).Float64() - ccp.metrics.SetWalletBalance(ccp.chainProvider.ChainId(), ccp.chainProvider.Key(), address, gasDenom.Denom, f) + ccp.metrics.SetWalletBalance(ccp.chainProvider.ChainId(), ccp.chainProvider.PCfg.GasPrices, ccp.chainProvider.Key(), address, gasDenom.Denom, f) } } diff --git a/relayer/chains/cosmos/tx.go b/relayer/chains/cosmos/tx.go index e4c06714d..8d9ae37d1 100644 --- a/relayer/chains/cosmos/tx.go +++ b/relayer/chains/cosmos/tx.go @@ -1301,7 +1301,7 @@ func (cc *CosmosProvider) UpdateFeesSpent(chain, key, address string, fees sdk.C for _, fee := range cc.TotalFees { // Convert to a big float to get a float64 for metrics f, _ := big.NewFloat(0.0).SetInt(fee.Amount.BigInt()).Float64() - cc.metrics.SetFeesSpent(chain, key, address, fee.GetDenom(), f) + cc.metrics.SetFeesSpent(chain, cc.PCfg.GasPrices, key, address, fee.GetDenom(), f) } } diff --git a/relayer/processor/metrics.go b/relayer/processor/metrics.go index 96de766b6..6c77b5f3e 100644 --- a/relayer/processor/metrics.go +++ b/relayer/processor/metrics.go @@ -29,12 +29,12 @@ func (m *PrometheusMetrics) SetLatestHeight(chain string, height int64) { m.LatestHeightGauge.WithLabelValues(chain).Set(float64(height)) } -func (m *PrometheusMetrics) SetWalletBalance(chain, key, address, denom string, balance float64) { - m.WalletBalance.WithLabelValues(chain, key, address, denom).Set(balance) +func (m *PrometheusMetrics) SetWalletBalance(chain, gasPrice, key, address, denom string, balance float64) { + m.WalletBalance.WithLabelValues(chain, gasPrice, key, address, denom).Set(balance) } -func (m *PrometheusMetrics) SetFeesSpent(chain, key, address, denom string, amount float64) { - m.FeesSpent.WithLabelValues(chain, key, address, denom).Set(amount) +func (m *PrometheusMetrics) SetFeesSpent(chain, gasPrice, key, address, denom string, amount float64) { + m.FeesSpent.WithLabelValues(chain, gasPrice, key, address, denom).Set(amount) } func (m *PrometheusMetrics) SetClientExpiration(pathName, chain, clientID, trustingPeriod string, timeToExpiration time.Duration) { @@ -44,7 +44,7 @@ func (m *PrometheusMetrics) SetClientExpiration(pathName, chain, clientID, trust func NewPrometheusMetrics() *PrometheusMetrics { packetLabels := []string{"path", "chain", "channel", "port", "type"} heightLabels := []string{"chain"} - walletLabels := []string{"chain", "key", "address", "denom"} + walletLabels := []string{"chain", "gas_price", "key", "address", "denom"} clientExpirationLables := []string{"path_name", "chain", "client_id", "trusting_period"} registry := prometheus.NewRegistry() registerer := promauto.With(registry) From 107d3f5174e17aabd1b336b098ef3bb0f68d1b6a Mon Sep 17 00:00:00 2001 From: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> Date: Tue, 25 Jul 2023 12:32:52 -0700 Subject: [PATCH 07/16] Exports block query errors to prometheus metrics (counter) (#1239) * separate by type * add help info * remove new line in help and fix readme * feedback --- docs/advanced_usage.md | 2 +- relayer/chains/cosmos/cosmos_chain_processor.go | 6 ++++++ relayer/processor/metrics.go | 10 ++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/docs/advanced_usage.md b/docs/advanced_usage.md index 715bc283d..99a721634 100644 --- a/docs/advanced_usage.md +++ b/docs/advanced_usage.md @@ -5,7 +5,7 @@ **Prometheus exporter** If you started `rly` with the default `--debug-addr` argument, -you can use `http://$IP:7597/relayer/metrics` as a target for your prometheus scraper. +you can use `http://$IP:5183/relayer/metrics` as a target for your prometheus scraper. **Example metrics** diff --git a/relayer/chains/cosmos/cosmos_chain_processor.go b/relayer/chains/cosmos/cosmos_chain_processor.go index 9189e945d..c582cc731 100644 --- a/relayer/chains/cosmos/cosmos_chain_processor.go +++ b/relayer/chains/cosmos/cosmos_chain_processor.go @@ -386,12 +386,18 @@ func (ccp *CosmosChainProcessor) queryCycle(ctx context.Context, persistence *qu queryCtx, cancelQueryCtx := context.WithTimeout(ctx, blockResultsQueryTimeout) defer cancelQueryCtx() blockRes, err = ccp.chainProvider.RPCClient.BlockResults(queryCtx, &i) + if err != nil && ccp.metrics != nil { + ccp.metrics.IncBlockQueryFailure(chainID, "RPC Client") + } return err }) eg.Go(func() (err error) { queryCtx, cancelQueryCtx := context.WithTimeout(ctx, queryTimeout) defer cancelQueryCtx() ibcHeader, err = ccp.chainProvider.QueryIBCHeader(queryCtx, i) + if err != nil && ccp.metrics != nil { + ccp.metrics.IncBlockQueryFailure(chainID, "IBC Header") + } return err }) diff --git a/relayer/processor/metrics.go b/relayer/processor/metrics.go index 6c77b5f3e..27e9e789f 100644 --- a/relayer/processor/metrics.go +++ b/relayer/processor/metrics.go @@ -14,6 +14,7 @@ type PrometheusMetrics struct { LatestHeightGauge *prometheus.GaugeVec WalletBalance *prometheus.GaugeVec FeesSpent *prometheus.GaugeVec + BlockQueryFailure *prometheus.CounterVec ClientExpiration *prometheus.GaugeVec } @@ -41,9 +42,14 @@ func (m *PrometheusMetrics) SetClientExpiration(pathName, chain, clientID, trust m.ClientExpiration.WithLabelValues(pathName, chain, clientID, trustingPeriod).Set(timeToExpiration.Seconds()) } +func (m *PrometheusMetrics) IncBlockQueryFailure(chain, err string) { + m.BlockQueryFailure.WithLabelValues(chain, err).Inc() +} + func NewPrometheusMetrics() *PrometheusMetrics { packetLabels := []string{"path", "chain", "channel", "port", "type"} heightLabels := []string{"chain"} + blockQueryFailureLabels := []string{"chain", "type"} walletLabels := []string{"chain", "gas_price", "key", "address", "denom"} clientExpirationLables := []string{"path_name", "chain", "client_id", "trusting_period"} registry := prometheus.NewRegistry() @@ -70,6 +76,10 @@ func NewPrometheusMetrics() *PrometheusMetrics { Name: "cosmos_relayer_fees_spent", Help: "The amount of fees spent from the relayer's wallet", }, walletLabels), + BlockQueryFailure: registerer.NewCounterVec(prometheus.CounterOpts{ + Name: "cosmos_relayer_block_query_errors_total", + Help: "The total number of block query failures. The failures are separated into two catagories: 'RPC Client' and 'IBC Header'", + }, blockQueryFailureLabels), ClientExpiration: registerer.NewGaugeVec(prometheus.GaugeOpts{ Name: "cosmos_relayer_client_expiration_seconds", Help: "Seconds until the client expires", From 3c7828782d351273c1e8192a0cc66a2d26de4296 Mon Sep 17 00:00:00 2001 From: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> Date: Tue, 25 Jul 2023 12:55:34 -0700 Subject: [PATCH 08/16] Export TX failures to prometheus metrics (counter) (#1240) * export tx failures to prometheus * change label to `cause` --- docs/advanced_usage.md | 11 ++++++++ relayer/processor/message_processor.go | 36 ++++++++++++++++++++++++++ relayer/processor/metrics.go | 10 +++++++ 3 files changed, 57 insertions(+) diff --git a/docs/advanced_usage.md b/docs/advanced_usage.md index 99a721634..a0b518b07 100644 --- a/docs/advanced_usage.md +++ b/docs/advanced_usage.md @@ -7,6 +7,17 @@ If you started `rly` with the default `--debug-addr` argument, you can use `http://$IP:5183/relayer/metrics` as a target for your prometheus scraper. + +Exported metrics: + +| **Exported Metric** | **Description** | **Type** | +|:----------------------------------:|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:--------:| +| cosmos_relayer_observed_packets | The total number of observed packets | Counter | +| cosmos_relayer_relayed_packets | The total number of relayed packets | Counter | +| cosmos_relayer_chain_latest_height | The current height of the chain | Gauge | +| cosmos_relayer_wallet_balance | The current balance for the relayer's wallet | Gauge | +| cosmos_relayer_fees_spent | The amount of fees spent from the relayer's wallet | Gauge | +| cosmos_relayer_tx_failure |
The total number of tx failures broken up into catagories .
Categories:
- "packet messages are redundant"
- "insufficient funds"
- "invalid coins"
- "out of gas"
- "incorrect account sequence"

"Tx Failure" is the the catch all bucket| Counter | **Example metrics** ``` diff --git a/relayer/processor/message_processor.go b/relayer/processor/message_processor.go index fe355cfa7..b17978fc4 100644 --- a/relayer/processor/message_processor.go +++ b/relayer/processor/message_processor.go @@ -8,6 +8,7 @@ import ( "sync" "time" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" chantypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" "github.com/cosmos/relayer/v2/relayer/provider" @@ -33,6 +34,9 @@ type messageProcessor struct { isLocalhost bool } +// catagories of tx errors for a Prometheus counter. If the error doesnt fall into one of the below categories, it is labeled as "Tx Failure" +var promErrorCatagories = []error{chantypes.ErrRedundantTx, sdkerrors.ErrInsufficientFunds, sdkerrors.ErrInvalidCoins, sdkerrors.ErrOutOfGas, sdkerrors.ErrWrongSequence} + // trackMessage stores the message tracker in the correct slice and index based on the type. func (mp *messageProcessor) trackMessage(tracker messageToTrack, i int) { switch t := tracker.(type) { @@ -361,6 +365,16 @@ func (mp *messageProcessor) sendClientUpdate( zap.String("dst_client_id", dst.info.ClientID), zap.Error(err), ) + + for _, promError := range promErrorCatagories { + if mp.metrics != nil { + if errors.Is(err, promError) { + mp.metrics.IncTxFailure(src.info.PathName, src.info.ChainID, promError.Error()) + } else { + mp.metrics.IncTxFailure(src.info.PathName, src.info.ChainID, "Tx Failure") + } + } + } return } dst.log.Debug("Client update broadcast completed") @@ -430,6 +444,17 @@ func (mp *messageProcessor) sendBatchMessages( zap.String("dst_client_id", dst.info.ClientID), zap.Error(err), } + + for _, promError := range promErrorCatagories { + if mp.metrics != nil { + if errors.Is(err, promError) { + mp.metrics.IncTxFailure(src.info.PathName, src.info.ChainID, promError.Error()) + } else { + mp.metrics.IncTxFailure(src.info.PathName, src.info.ChainID, "Tx Failure") + } + } + } + if errors.Is(err, chantypes.ErrRedundantTx) { mp.log.Debug("Redundant message(s)", errFields...) return @@ -490,6 +515,17 @@ func (mp *messageProcessor) sendSingleMessage( zap.String("src_client_id", src.info.ClientID), zap.String("dst_client_id", dst.info.ClientID), } + + for _, promError := range promErrorCatagories { + if mp.metrics != nil { + if errors.Is(err, promError) { + mp.metrics.IncTxFailure(src.info.PathName, src.info.ChainID, promError.Error()) + } else { + mp.metrics.IncTxFailure(src.info.PathName, src.info.ChainID, "Tx Failure") + } + } + } + errFields = append(errFields, zap.Object("msg", tracker)) errFields = append(errFields, zap.Error(err)) if errors.Is(err, chantypes.ErrRedundantTx) { diff --git a/relayer/processor/metrics.go b/relayer/processor/metrics.go index 27e9e789f..6e522cfc2 100644 --- a/relayer/processor/metrics.go +++ b/relayer/processor/metrics.go @@ -14,6 +14,7 @@ type PrometheusMetrics struct { LatestHeightGauge *prometheus.GaugeVec WalletBalance *prometheus.GaugeVec FeesSpent *prometheus.GaugeVec + TxFailureError *prometheus.CounterVec BlockQueryFailure *prometheus.CounterVec ClientExpiration *prometheus.GaugeVec } @@ -46,9 +47,14 @@ func (m *PrometheusMetrics) IncBlockQueryFailure(chain, err string) { m.BlockQueryFailure.WithLabelValues(chain, err).Inc() } +func (m *PrometheusMetrics) IncTxFailure(path, chain, errDesc string) { + m.TxFailureError.WithLabelValues(path, chain, errDesc).Inc() +} + func NewPrometheusMetrics() *PrometheusMetrics { packetLabels := []string{"path", "chain", "channel", "port", "type"} heightLabels := []string{"chain"} + txFailureLabels := []string{"path", "chain", "cause"} blockQueryFailureLabels := []string{"chain", "type"} walletLabels := []string{"chain", "gas_price", "key", "address", "denom"} clientExpirationLables := []string{"path_name", "chain", "client_id", "trusting_period"} @@ -76,6 +82,10 @@ func NewPrometheusMetrics() *PrometheusMetrics { Name: "cosmos_relayer_fees_spent", Help: "The amount of fees spent from the relayer's wallet", }, walletLabels), + TxFailureError: registerer.NewCounterVec(prometheus.CounterOpts{ + Name: "cosmos_relayer_tx_errors_total", + Help: "The total number of tx failures broken up into categories. See https://github.com/cosmos/relayer/blob/main/docs/advanced_usage.md#monitoring for list of catagories. 'Tx Failure' is the catch-all category", + }, txFailureLabels), BlockQueryFailure: registerer.NewCounterVec(prometheus.CounterOpts{ Name: "cosmos_relayer_block_query_errors_total", Help: "The total number of block query failures. The failures are separated into two catagories: 'RPC Client' and 'IBC Header'", From 993c21bd3f5e813e4d969f23506673f67061689c Mon Sep 17 00:00:00 2001 From: murataniloener Date: Wed, 26 Jul 2023 19:12:11 +0200 Subject: [PATCH 09/16] use the name given by the user to generate the fetch URL (#1233) * use the name given by the user to generate the fetch URL * add example --------- Co-authored-by: Andrew Gouin Co-authored-by: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> --- cmd/chains.go | 5 +++-- cregistry/chain_info.go | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/cmd/chains.go b/cmd/chains.go index 53404cabe..a11eeb1be 100644 --- a/cmd/chains.go +++ b/cmd/chains.go @@ -277,9 +277,10 @@ func chainsAddCmd(a *appState) *cobra.Command { " the chain-registry or passing a file (-f) or url (-u)", Args: withUsage(cobra.MinimumNArgs(0)), Example: fmt.Sprintf(` $ %s chains add cosmoshub + $ %s chains add testnets/cosmoshubtestnet $ %s chains add cosmoshub osmosis $ %s chains add --file chains/ibc0.json ibc0 - $ %s chains add --url https://relayer.com/ibc0.json ibc0`, appName, appName, appName, appName), + $ %s chains add --url https://relayer.com/ibc0.json ibc0`, appName, appName, appName, appName, appName), RunE: func(cmd *cobra.Command, args []string) error { file, url, err := getAddInputs(cmd) if err != nil { @@ -447,7 +448,7 @@ func addChainsFromRegistry(ctx context.Context, a *appState, chains []string) er continue } - chainConfig, err := chainInfo.GetChainConfig(ctx) + chainConfig, err := chainInfo.GetChainConfig(ctx, chain) if err != nil { a.log.Warn( "Error generating chain config", diff --git a/cregistry/chain_info.go b/cregistry/chain_info.go index 4d49017f0..7309296e2 100644 --- a/cregistry/chain_info.go +++ b/cregistry/chain_info.go @@ -206,8 +206,8 @@ func (c ChainInfo) GetRandomRPCEndpoint(ctx context.Context) (string, error) { } // GetAssetList returns the asset metadata from the cosmos chain registry for this particular chain. -func (c ChainInfo) GetAssetList(ctx context.Context) (AssetList, error) { - chainRegURL := fmt.Sprintf("https://raw.githubusercontent.com/cosmos/chain-registry/master/%s/assetlist.json", c.ChainName) +func (c ChainInfo) GetAssetList(ctx context.Context, name string) (AssetList, error) { + chainRegURL := fmt.Sprintf("https://raw.githubusercontent.com/cosmos/chain-registry/master/%s/assetlist.json", name) res, err := http.Get(chainRegURL) if err != nil { @@ -236,11 +236,11 @@ func (c ChainInfo) GetAssetList(ctx context.Context) (AssetList, error) { // GetChainConfig returns a CosmosProviderConfig composed from the details found in the cosmos chain registry for // this particular chain. -func (c ChainInfo) GetChainConfig(ctx context.Context) (*cosmos.CosmosProviderConfig, error) { +func (c ChainInfo) GetChainConfig(ctx context.Context, name string) (*cosmos.CosmosProviderConfig, error) { debug := viper.GetBool("debug") home := viper.GetString("home") - assetList, err := c.GetAssetList(ctx) + assetList, err := c.GetAssetList(ctx, name) if err != nil { return nil, err } From cdd7661d8470ff6e88f81996b68cde8fd4d23c9d Mon Sep 17 00:00:00 2001 From: KyleMoser Date: Thu, 27 Jul 2023 13:19:25 -0400 Subject: [PATCH 10/16] feegrant PR (#1140) * Feegrant support * Test case for address caching bugfix * Bugfix for SDK account prefix. Feegrant test passing. * Mutex for signer expanded to include feegrantees * Cleaned up feegrant test case * Cleaned up feegrant test case * Cleaned up feegrant test case * check round robin feegrant behavior by counting number of TXs each grantee signer * module updates from merge * v0.47.0 with bech32 address cache fix * Move SetAddrCacheEnabled to NewRelayer func for full coverage * Do not hardcode chain id in feegrant test case * Wait more blocks for ibc transfers * disable cosmos SDK bech32 address cache for rly start command * Fix sloppy comments/remove unnecessary code * Faster acc caching unit test * Penumbra provider feegrant support * Merge upstream * Fixed merge issue where feegrant config wasn't being written to file * feegrant patch for cosmos-sdk v0.47.1 * merge from main * Update to cosmos-sdk v0.47.2 * Increase test case blocks to wait * Fixed data race by moving test parallelization after relayer wallet build * Increased TestScenarioICAChannelClose timeout height * Cleanup feegrant test case * Fixed race condition in sequence guard w/ mutex * Automatic retry for TX lookup in feegrant test case --------- Co-authored-by: Andrew Gouin --- cmd/chains.go | 14 + cmd/feegrant.go | 197 ++++++ cmd/query.go | 15 + go.work.sum | 650 +++++++++++++++++- interchaintest/acc_cache_test.go | 44 ++ interchaintest/client_threshold_test.go | 38 +- interchaintest/fee_middleware_test.go | 6 +- interchaintest/feegrant_test.go | 532 ++++++++++++++ interchaintest/go.mod | 6 +- interchaintest/go.sum | 9 +- interchaintest/ica_channel_close_test.go | 8 +- interchaintest/interchain_accounts_test.go | 4 +- interchaintest/misbehaviour_test.go | 14 +- interchaintest/path_filter_test.go | 6 +- interchaintest/relayer.go | 4 + interchaintest/stride/stride_icq_test.go | 65 +- .../tendermint_v0.37_boundary_test.go | 4 +- relayer/chains/cosmos/feegrant.go | 529 ++++++++++++++ relayer/chains/cosmos/grpc_query.go | 2 +- relayer/chains/cosmos/keys.go | 35 +- relayer/chains/cosmos/log.go | 7 + relayer/chains/cosmos/msg.go | 9 +- relayer/chains/cosmos/provider.go | 60 +- relayer/chains/cosmos/query.go | 91 +++ relayer/chains/cosmos/relayer_packets.go | 12 +- relayer/chains/cosmos/tx.go | 484 ++++++++++--- relayer/chains/cosmos/tx_test.go | 23 +- relayer/chains/penumbra/tx.go | 131 +++- relayer/processor/message_processor.go | 50 +- relayer/provider/provider.go | 2 +- relayer/strategies.go | 4 + 31 files changed, 2846 insertions(+), 209 deletions(-) create mode 100644 cmd/feegrant.go create mode 100644 interchaintest/acc_cache_test.go create mode 100644 interchaintest/feegrant_test.go create mode 100644 relayer/chains/cosmos/feegrant.go diff --git a/cmd/chains.go b/cmd/chains.go index a11eeb1be..7e471ae00 100644 --- a/cmd/chains.go +++ b/cmd/chains.go @@ -39,6 +39,7 @@ func chainsCmd(a *appState) *cobra.Command { chainsShowCmd(a), chainsAddrCmd(a), chainsAddDirCmd(a), + cmdChainsConfigure(a), ) return cmd @@ -144,6 +145,19 @@ $ %s ch d ibc-0`, appName, appName)), return cmd } +func cmdChainsConfigure(a *appState) *cobra.Command { + cmd := &cobra.Command{ + Use: "configure", + Short: "manage local chain configurations", + } + + cmd.AddCommand( + feegrantConfigureBaseCmd(a), + ) + + return cmd +} + func chainsRegistryList(a *appState) *cobra.Command { cmd := &cobra.Command{ Use: "registry-list", diff --git a/cmd/feegrant.go b/cmd/feegrant.go new file mode 100644 index 000000000..3d0c86421 --- /dev/null +++ b/cmd/feegrant.go @@ -0,0 +1,197 @@ +package cmd + +import ( + "errors" + "fmt" + + "github.com/cosmos/relayer/v2/relayer/chains/cosmos" + "github.com/spf13/cobra" +) + +// feegrantConfigureCmd returns the fee grant configuration commands for this module +func feegrantConfigureBaseCmd(a *appState) *cobra.Command { + cmd := &cobra.Command{ + Use: "feegrant", + Short: "Configure the client to use round-robin feegranted accounts when sending TXs", + Long: "Use round-robin feegranted accounts when sending TXs. Useful for relayers and applications where sequencing is important", + } + + cmd.AddCommand( + feegrantConfigureBasicCmd(a), + ) + + return cmd +} + +func feegrantConfigureBasicCmd(a *appState) *cobra.Command { + var numGrantees int + var update bool + var updateGrantees bool + var grantees []string + + cmd := &cobra.Command{ + Use: "basicallowance [chain-name] [granter] --num-grantees [int] --overwrite-granter --overwrite-grantees", + Short: "feegrants for the given chain and granter (if granter is unspecified, use the default key)", + Long: "feegrants for the given chain. 10 grantees by default, all with an unrestricted BasicAllowance.", + Args: cobra.MinimumNArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + chain := args[0] + cosmosChain, ok := a.config.Chains[chain] + if !ok { + return errChainNotFound(args[0]) + } + + prov, ok := cosmosChain.ChainProvider.(*cosmos.CosmosProvider) + if !ok { + return errors.New("only CosmosProvider can be feegranted") + } + + granterKeyOrAddr := "" + + if len(args) > 1 { + granterKeyOrAddr = args[1] + } else if prov.PCfg.FeeGrants != nil { + granterKeyOrAddr = prov.PCfg.FeeGrants.GranterKey + } else { + granterKeyOrAddr = prov.PCfg.Key + } + + granterKey, err := prov.KeyFromKeyOrAddress(granterKeyOrAddr) + if err != nil { + return fmt.Errorf("could not get granter key from '%s'", granterKeyOrAddr) + } + + if prov.PCfg.FeeGrants != nil && granterKey != prov.PCfg.FeeGrants.GranterKey && !update { + return fmt.Errorf("you specified granter '%s' which is different than configured feegranter '%s', but you did not specify the --overwrite-granter flag", granterKeyOrAddr, prov.PCfg.FeeGrants.GranterKey) + } else if prov.PCfg.FeeGrants != nil && granterKey != prov.PCfg.FeeGrants.GranterKey && update { + cfgErr := a.performConfigLockingOperation(cmd.Context(), func() error { + prov.PCfg.FeeGrants.GranterKey = granterKey + return nil + }) + cobra.CheckErr(cfgErr) + } + + if prov.PCfg.FeeGrants == nil || updateGrantees || len(grantees) > 0 { + var feegrantErr error + + //No list of grantees was provided, so we will use the default naming convention "grantee1, ... granteeN" + if grantees == nil { + feegrantErr = prov.ConfigureFeegrants(numGrantees, granterKey) + } else { + feegrantErr = prov.ConfigureWithGrantees(grantees, granterKey) + } + + if feegrantErr != nil { + return feegrantErr + } + + cfgErr := a.performConfigLockingOperation(cmd.Context(), func() error { + chain := a.config.Chains[chain] + oldProv := chain.ChainProvider.(*cosmos.CosmosProvider) + oldProv.PCfg.FeeGrants = prov.PCfg.FeeGrants + return nil + }) + cobra.CheckErr(cfgErr) + } + + memo, err := cmd.Flags().GetString(flagMemo) + if err != nil { + return err + } + + ctx := cmd.Context() + _, err = prov.EnsureBasicGrants(ctx, memo) + if err != nil { + return fmt.Errorf("error writing grants on chain: '%s'", err.Error()) + } + + //Get latest height from the chain, mark feegrant configuration as verified up to that height. + //This means we've verified feegranting is enabled on-chain and TXs can be sent with a feegranter. + if prov.PCfg.FeeGrants != nil { + fmt.Printf("Querying latest chain height to mark FeeGrant height... \n") + h, err := prov.QueryLatestHeight(ctx) + cobra.CheckErr(err) + + cfgErr := a.performConfigLockingOperation(cmd.Context(), func() error { + chain := a.config.Chains[chain] + oldProv := chain.ChainProvider.(*cosmos.CosmosProvider) + oldProv.PCfg.FeeGrants = prov.PCfg.FeeGrants + oldProv.PCfg.FeeGrants.BlockHeightVerified = h + fmt.Printf("Feegrant chain height marked: %d\n", h) + return nil + }) + cobra.CheckErr(cfgErr) + } + + return nil + }, + } + cmd.Flags().BoolVar(&update, "overwrite-granter", false, "allow overwriting the existing granter") + cmd.Flags().BoolVar(&updateGrantees, "overwrite-grantees", false, "allow overwriting existing grantees") + cmd.Flags().IntVar(&numGrantees, "num-grantees", 10, "number of grantees that will be feegranted with basic allowances") + cmd.Flags().StringSliceVar(&grantees, "grantees", []string{}, "comma separated list of grantee key names (keys are created if they do not exist)") + cmd.MarkFlagsMutuallyExclusive("num-grantees", "grantees") + + memoFlag(a.viper, cmd) + return cmd +} + +func feegrantBasicGrantsCmd(a *appState) *cobra.Command { + cmd := &cobra.Command{ + Use: "basic chain-name [granter]", + Short: "query the grants for an account (if none is specified, the default account is returned)", + Args: cobra.RangeArgs(1, 2), + RunE: func(cmd *cobra.Command, args []string) error { + chain := args[0] + cosmosChain, ok := a.config.Chains[chain] + if !ok { + return errChainNotFound(args[0]) + } + + prov, ok := cosmosChain.ChainProvider.(*cosmos.CosmosProvider) + if !ok { + return errors.New("only CosmosProvider can be feegranted") + } + + // TODO fix pagination + // pageReq, err := client.ReadPageRequest(cmd.Flags()) + // if err != nil { + // return err + // } + + //TODO fix height + // height, err := lensCmd.ReadHeight(cmd.Flags()) + // if err != nil { + // return err + // } + + keyNameOrAddress := "" + if len(args) == 0 { + keyNameOrAddress = prov.PCfg.Key + } else { + keyNameOrAddress = args[0] + } + + granterAcc, err := prov.AccountFromKeyOrAddress(keyNameOrAddress) + if err != nil { + fmt.Printf("Error retrieving account from key '%s'\n", keyNameOrAddress) + return err + } + granterAddr := prov.MustEncodeAccAddr(granterAcc) + + res, err := prov.QueryFeegrantsByGranter(granterAddr, nil) + if err != nil { + return err + } + + for _, grant := range res { + allowance, e := prov.Sprint(grant.Allowance) + cobra.CheckErr(e) + fmt.Printf("Granter: %s, Grantee: %s, Allowance: %s\n", grant.Granter, grant.Grantee, allowance) + } + + return nil + }, + } + return paginationFlags(a.viper, cmd, "feegrant") +} diff --git a/cmd/query.go b/cmd/query.go index 5540fb916..cd91bc2d7 100644 --- a/cmd/query.go +++ b/cmd/query.go @@ -47,6 +47,21 @@ func queryCmd(a *appState) *cobra.Command { lineBreakCommand(), queryIBCDenoms(a), queryBaseDenomFromIBCDenom(a), + feegrantQueryCmd(a), + ) + + return cmd +} + +// feegrantQueryCmd returns the fee grant query commands for this module +func feegrantQueryCmd(a *appState) *cobra.Command { + cmd := &cobra.Command{ + Use: "feegrant", + Short: "Querying commands for the feegrant module [currently BasicAllowance only]", + } + + cmd.AddCommand( + feegrantBasicGrantsCmd(a), ) return cmd diff --git a/go.work.sum b/go.work.sum index 2767b9f8c..4232792ab 100644 --- a/go.work.sum +++ b/go.work.sum @@ -7,321 +7,761 @@ cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFO cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= cloud.google.com/go/accessapproval v1.5.0 h1:/nTivgnV/n1CaAeo+ekGexTYUsKEU9jUVkoY5359+3Q= cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accessapproval v1.6.0 h1:x0cEHro/JFPd7eS4BlEWNTMecIj2HdXjOVB5BtvwER0= cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= -cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= +cloud.google.com/go/accesscontextmanager v1.7.0 h1:MG60JgnEoawHJrbWw0jGdv6HLNSf6gQvYRiXpuzqgEA= cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= +cloud.google.com/go/aiplatform v1.37.0 h1:zTw+suCVchgZyO+k847wjzdVjWmrAuehxdvcZvJwfGg= cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= +cloud.google.com/go/analytics v0.19.0 h1:LqAo3tAh2FU9+w/r7vc3hBjU23Kv7GhO/PDIW7kIYgM= cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= +cloud.google.com/go/apigateway v1.5.0 h1:ZI9mVO7x3E9RK/BURm2p1aw9YTBSCQe3klmyP1WxWEg= cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= +cloud.google.com/go/apigeeconnect v1.5.0 h1:sWOmgDyAsi1AZ48XRHcATC0tsi9SkPT7DA/+VCfkaeA= cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= +cloud.google.com/go/apigeeregistry v0.6.0 h1:E43RdhhCxdlV+I161gUY2rI4eOaMzHTA5kNkvRsFXvc= cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= +cloud.google.com/go/apikeys v0.6.0 h1:B9CdHFZTFjVti89tmyXXrO+7vSNo2jvZuHG8zD5trdQ= cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= +cloud.google.com/go/appengine v1.7.1 h1:aBGDKmRIaRRoWJ2tAoN0oVSHoWLhtO9aj/NvUyP4aYs= cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= +cloud.google.com/go/area120 v0.7.1 h1:ugckkFh4XkHJMPhTIx0CyvdoBxmOpMe8rNs4Ok8GAag= cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= +cloud.google.com/go/artifactregistry v1.13.0 h1:o1Q80vqEB6Qp8WLEH3b8FBLNUCrGQ4k5RFj0sn/sgO8= cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= +cloud.google.com/go/asset v1.13.0 h1:YAsssO08BqZ6mncbb6FPlj9h6ACS7bJQUOlzciSfbNk= cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= +cloud.google.com/go/assuredworkloads v1.10.0 h1:VLGnVFta+N4WM+ASHbhc14ZOItOabDLH1MSoDv+Xuag= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= +cloud.google.com/go/automl v1.12.0 h1:50VugllC+U4IGl3tDNcZaWvApHBTrn/TvyHDJ0wM+Uw= cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= +cloud.google.com/go/baremetalsolution v0.5.0 h1:2AipdYXL0VxMboelTTw8c1UJ7gYu35LZYUbuRv9Q28s= cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= +cloud.google.com/go/batch v0.7.0 h1:YbMt0E6BtqeD5FvSv1d56jbVsWEzlGm55lYte+M6Mzs= cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= +cloud.google.com/go/beyondcorp v0.5.0 h1:UkY2BTZkEUAVrgqnSdOJ4p3y9ZRBPEe1LkjgC8Bj/Pc= cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= +cloud.google.com/go/bigquery v1.50.0 h1:RscMV6LbnAmhAzD893Lv9nXXy2WCaJmbxYPWDLbGqNQ= cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= +cloud.google.com/go/billing v1.13.0 h1:JYj28UYF5w6VBAh0gQYlgHJ/OD1oA+JgW29YZQU+UHM= cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= +cloud.google.com/go/binaryauthorization v1.5.0 h1:d3pMDBCCNivxt5a4eaV7FwL7cSH0H7RrEnFrTb1QKWs= cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= +cloud.google.com/go/certificatemanager v1.6.0 h1:5C5UWeSt8Jkgp7OWn2rCkLmYurar/vIWIoSQ2+LaTOc= cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= +cloud.google.com/go/channel v1.12.0 h1:GpcQY5UJKeOekYgsX3QXbzzAc/kRGtBq43fTmyKe6Uw= cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= +cloud.google.com/go/cloudbuild v1.9.0 h1:GHQCjV4WlPPVU/j3Rlpc8vNIDwThhd1U9qSY/NPZdko= cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= +cloud.google.com/go/clouddms v1.5.0 h1:E7v4TpDGUyEm1C/4KIrpVSOCTm0P6vWdHT0I4mostRA= cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= +cloud.google.com/go/cloudtasks v1.10.0 h1:uK5k6abf4yligFgYFnG0ni8msai/dSv6mDmiBulU0hU= cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/contactcenterinsights v1.6.0 h1:jXIpfcH/VYSE1SYcPzO0n1VVb+sAamiLOgCw45JbOQk= cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= +cloud.google.com/go/container v1.15.0 h1:NKlY/wCDapfVZlbVVaeuu2UZZED5Dy1z4Zx1KhEzm8c= cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= +cloud.google.com/go/containeranalysis v0.9.0 h1:EQ4FFxNaEAg8PqQCO7bVQfWz9NVwZCUKaM1b3ycfx3U= cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= +cloud.google.com/go/datacatalog v1.13.0 h1:4H5IJiyUE0X6ShQBqgFFZvGGcrwGVndTwUSLP4c52gw= cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= +cloud.google.com/go/dataflow v0.8.0 h1:eYyD9o/8Nm6EttsKZaEGD84xC17bNgSKCu0ZxwqUbpg= cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= +cloud.google.com/go/dataform v0.7.0 h1:Dyk+fufup1FR6cbHjFpMuP4SfPiF3LI3JtoIIALoq48= cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= +cloud.google.com/go/datafusion v1.6.0 h1:sZjRnS3TWkGsu1LjYPFD/fHeMLZNXDK6PDHi2s2s/bk= cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= +cloud.google.com/go/datalabeling v0.7.0 h1:ch4qA2yvddGRUrlfwrNJCr79qLqhS9QBwofPHfFlDIk= cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= +cloud.google.com/go/dataplex v1.6.0 h1:RvoZ5T7gySwm1CHzAw7yY1QwwqaGswunmqEssPxU/AM= cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= +cloud.google.com/go/dataproc v1.12.0 h1:W47qHL3W4BPkAIbk4SWmIERwsWBaNnWm0P2sdx3YgGU= cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= +cloud.google.com/go/dataqna v0.7.0 h1:yFzi/YU4YAdjyo7pXkBE2FeHbgz5OQQBVDdbErEHmVQ= cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= +cloud.google.com/go/datastore v1.11.0 h1:iF6I/HaLs3Ado8uRKMvZRvF/ZLkWaWE9i8AiHzbC774= cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= +cloud.google.com/go/datastream v1.7.0 h1:BBCBTnWMDwwEzQQmipUXxATa7Cm7CA/gKjKcR2w35T0= cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= +cloud.google.com/go/deploy v1.8.0 h1:otshdKEbmsi1ELYeCKNYppwV0UH5xD05drSdBm7ouTk= cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= +cloud.google.com/go/dialogflow v1.32.0 h1:uVlKKzp6G/VtSW0E7IH1Y5o0H48/UOCmqksG2riYCwQ= cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= +cloud.google.com/go/dlp v1.9.0 h1:1JoJqezlgu6NWCroBxr4rOZnwNFILXr4cB9dMaSKO4A= cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= +cloud.google.com/go/documentai v1.18.0 h1:KM3Xh0QQyyEdC8Gs2vhZfU+rt6OCPF0dwVwxKgLmWfI= cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= +cloud.google.com/go/domains v0.8.0 h1:2ti/o9tlWL4N+wIuWUNH+LbfgpwxPr8J1sv9RHA4bYQ= cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= +cloud.google.com/go/edgecontainer v1.0.0 h1:O0YVE5v+O0Q/ODXYsQHmHb+sYM8KNjGZw2pjX2Ws41c= cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= +cloud.google.com/go/errorreporting v0.3.0 h1:kj1XEWMu8P0qlLhm3FwcaFsUvXChV/OraZwA70trRR0= cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.5.0 h1:gIzEhCoOT7bi+6QZqZIzX1Erj4SswMPIteNvYVlu+pM= cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= +cloud.google.com/go/eventarc v1.11.0 h1:fsJmNeqvqtk74FsaVDU6cH79lyZNCYP8Rrv7EhaB/PU= cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= +cloud.google.com/go/filestore v1.6.0 h1:ckTEXN5towyTMu4q0uQ1Mde/JwTHur0gXs8oaIZnKfw= cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= +cloud.google.com/go/firestore v1.9.0 h1:IBlRyxgGySXu5VuW0RgGFlTtLukSnNkpDiEOMkQkmpA= cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/functions v1.13.0 h1:pPDqtsXG2g9HeOQLoquLbmvmb82Y4Ezdo1GXuotFoWg= cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= +cloud.google.com/go/gaming v1.9.0 h1:7vEhFnZmd931Mo7sZ6pJy7uQPDxF7m7v8xtBheG08tc= cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gkebackup v0.4.0 h1:za3QZvw6ujR0uyqkhomKKKNoXDyqYGPJies3voUK8DA= cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= +cloud.google.com/go/gkeconnect v0.7.0 h1:gXYKciHS/Lgq0GJ5Kc9SzPA35NGc3yqu6SkjonpEr2Q= cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= +cloud.google.com/go/gkehub v0.12.0 h1:TqCSPsEBQ6oZSJgEYZ3XT8x2gUadbvfwI32YB0kuHCs= cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= +cloud.google.com/go/gkemulticloud v0.5.0 h1:8I84Q4vl02rJRsFiinBxl7WCozfdLlUVBQuSrqr9Wtk= cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= +cloud.google.com/go/grafeas v0.2.0 h1:CYjC+xzdPvbV65gi6Dr4YowKcmLo045pm18L0DhdELM= +cloud.google.com/go/gsuiteaddons v1.5.0 h1:1mvhXqJzV0Vg5Fa95QwckljODJJfDFXV4pn+iL50zzA= cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iap v1.7.1 h1:PxVHFuMxmSZyfntKXHXhd8bo82WJ+LcATenq7HLdVnU= cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= +cloud.google.com/go/ids v1.3.0 h1:fodnCDtOXuMmS8LTC2y3h8t24U8F3eKWfhi+3LY6Qf0= cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= +cloud.google.com/go/iot v1.6.0 h1:39W5BFSarRNZfVG0eXI5LYux+OVQT8GkgpHCnrZL2vM= cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= +cloud.google.com/go/kms v1.10.1 h1:7hm1bRqGCA1GBRQUrp831TwJ9TWhP+tvLuP497CQS2g= cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= +cloud.google.com/go/language v1.9.0 h1:7Ulo2mDk9huBoBi8zCE3ONOoBrL6UXfAI71CLQ9GEIM= cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= +cloud.google.com/go/lifesciences v0.8.0 h1:uWrMjWTsGjLZpCTWEAzYvyXj+7fhiZST45u9AgasasI= cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= +cloud.google.com/go/logging v1.7.0 h1:CJYxlNNNNAMkHp9em/YEXcfJg+rPDg7YfwoRpMU+t5I= cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/managedidentities v1.5.0 h1:ZRQ4k21/jAhrHBVKl/AY7SjgzeJwG1iZa+mJ82P+VNg= cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= +cloud.google.com/go/maps v0.7.0 h1:mv9YaczD4oZBZkM5XJl6fXQ984IkJNHPwkc8MUsdkBo= cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= +cloud.google.com/go/mediatranslation v0.7.0 h1:anPxH+/WWt8Yc3EdoEJhPMBRF7EhIdz426A+tuoA0OU= cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= +cloud.google.com/go/memcache v1.9.0 h1:8/VEmWCpnETCrBwS3z4MhT+tIdKgR1Z4Tr2tvYH32rg= cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= +cloud.google.com/go/metastore v1.10.0 h1:QCFhZVe2289KDBQ7WxaHV2rAmPrmRAdLC6gbjUd3HPo= cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= +cloud.google.com/go/monitoring v1.13.0 h1:2qsrgXGVoRXpP7otZ14eE1I568zAa92sJSDPyOJvwjM= cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= +cloud.google.com/go/networkconnectivity v1.11.0 h1:ZD6b4Pk1jEtp/cx9nx0ZYcL3BKqDa+KixNDZ6Bjs1B8= cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= +cloud.google.com/go/networkmanagement v1.6.0 h1:8KWEUNGcpSX9WwZXq7FtciuNGPdPdPN/ruDm769yAEM= cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= +cloud.google.com/go/networksecurity v0.8.0 h1:sOc42Ig1K2LiKlzG71GUVloeSJ0J3mffEBYmvu+P0eo= cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= +cloud.google.com/go/notebooks v1.8.0 h1:Kg2K3K7CbSXYJHZ1aGQpf1xi5x2GUvQWf2sFVuiZh8M= cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= +cloud.google.com/go/optimization v1.3.1 h1:dj8O4VOJRB4CUwZXdmwNViH1OtI0WtWL867/lnYH248= cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= +cloud.google.com/go/orchestration v1.6.0 h1:Vw+CEXo8M/FZ1rb4EjcLv0gJqqw89b7+g+C/EmniTb8= cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= +cloud.google.com/go/orgpolicy v1.10.0 h1:XDriMWug7sd0kYT1QKofRpRHzjad0bK8Q8uA9q+XrU4= cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= +cloud.google.com/go/osconfig v1.11.0 h1:PkSQx4OHit5xz2bNyr11KGcaFccL5oqglFPdTboyqwQ= cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= +cloud.google.com/go/oslogin v1.9.0 h1:whP7vhpmc+ufZa90eVpkfbgzJRK/Xomjz+XCD4aGwWw= cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= +cloud.google.com/go/phishingprotection v0.7.0 h1:l6tDkT7qAEV49MNEJkEJTB6vOO/onbSOcNtAT09HPuA= cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= +cloud.google.com/go/policytroubleshooter v1.6.0 h1:yKAGC4p9O61ttZUswaq9GAn1SZnEzTd0vUYXD7ZBT7Y= cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= +cloud.google.com/go/privatecatalog v0.8.0 h1:EPEJ1DpEGXLDnmc7mnCAqFmkwUJbIsaLAiLHVOkkwtc= cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= +cloud.google.com/go/pubsub v1.30.0 h1:vCge8m7aUKBJYOgrZp7EsNDf6QMd2CAlXZqWTn3yq6s= cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= +cloud.google.com/go/pubsublite v1.7.0 h1:cb9fsrtpINtETHiJ3ECeaVzrfIVhcGjhhJEjybHXHao= cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= +cloud.google.com/go/recaptchaenterprise v1.3.1 h1:u6EznTGzIdsyOsvm+Xkw0aSuKFXQlyjGE9a4exk6iNQ= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.0 h1:6iOCujSNJ0YS7oNymI64hXsjGq60T4FK1zdLugxbzvU= cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= +cloud.google.com/go/recommendationengine v0.7.0 h1:VibRFCwWXrFebEWKHfZAt2kta6pS7Tlimsnms0fjv7k= cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= +cloud.google.com/go/recommender v1.9.0 h1:ZnFRY5R6zOVk2IDS1Jbv5Bw+DExCI5rFumsTnMXiu/A= cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= +cloud.google.com/go/redis v1.11.0 h1:JoAd3SkeDt3rLFAAxEvw6wV4t+8y4ZzfZcZmddqphQ8= cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= +cloud.google.com/go/resourcemanager v1.7.0 h1:NRM0p+RJkaQF9Ee9JMnUV9BQ2QBIOq/v8M+Pbv/wmCs= cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= +cloud.google.com/go/resourcesettings v1.5.0 h1:8Dua37kQt27CCWHm4h/Q1XqCF6ByD7Ouu49xg95qJzI= cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= +cloud.google.com/go/retail v1.12.0 h1:1Dda2OpFNzIb4qWgFZjYlpP7sxX3aLeypKG6A3H4Yys= cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= +cloud.google.com/go/run v0.9.0 h1:ydJQo+k+MShYnBfhaRHSZYeD/SQKZzZLAROyfpeD9zw= cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= +cloud.google.com/go/scheduler v1.9.0 h1:NpQAHtx3sulByTLe2dMwWmah8PWgeoieFPpJpArwFV0= cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= +cloud.google.com/go/secretmanager v1.10.0 h1:pu03bha7ukxF8otyPKTFdDz+rr9sE3YauS5PliDXK60= cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= +cloud.google.com/go/security v1.13.0 h1:PYvDxopRQBfYAXKAuDpFCKBvDOWPWzp9k/H5nB3ud3o= cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= +cloud.google.com/go/securitycenter v1.19.0 h1:AF3c2s3awNTMoBtMX3oCUoOMmGlYxGOeuXSYHNBkf14= cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= +cloud.google.com/go/servicecontrol v1.11.1 h1:d0uV7Qegtfaa7Z2ClDzr9HJmnbJW7jn0WhZ7wOX6hLE= cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= +cloud.google.com/go/servicedirectory v1.9.0 h1:SJwk0XX2e26o25ObYUORXx6torSFiYgsGkWSkZgkoSU= cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= +cloud.google.com/go/servicemanagement v1.8.0 h1:fopAQI/IAzlxnVeiKn/8WiV6zKndjFkvi+gzu+NjywY= cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= +cloud.google.com/go/serviceusage v1.6.0 h1:rXyq+0+RSIm3HFypctp7WoXxIA563rn206CfMWdqXX4= cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= +cloud.google.com/go/shell v1.6.0 h1:wT0Uw7ib7+AgZST9eCDygwTJn4+bHMDtZo5fh7kGWDU= cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= +cloud.google.com/go/spanner v1.45.0 h1:7VdjZ8zj4sHbDw55atp5dfY6kn1j9sam9DRNpPQhqR4= cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= +cloud.google.com/go/speech v1.15.0 h1:JEVoWGNnTF128kNty7T4aG4eqv2z86yiMJPT9Zjp+iw= cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storagetransfer v1.8.0 h1:5T+PM+3ECU3EY2y9Brv0Sf3oka8pKmsCfpQ07+91G9o= cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= +cloud.google.com/go/talent v1.5.0 h1:nI9sVZPjMKiO2q3Uu0KhTDVov3Xrlpt63fghP9XjyEM= cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= +cloud.google.com/go/texttospeech v1.6.0 h1:H4g1ULStsbVtalbZGktyzXzw6jP26RjVGYx9RaYjBzc= cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= +cloud.google.com/go/tpu v1.5.0 h1:/34T6CbSi+kTv5E19Q9zbU/ix8IviInZpzwz3rsFE+A= cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= +cloud.google.com/go/trace v1.9.0 h1:olxC0QHC59zgJVALtgqfD9tGk0lfeCP5/AGXL3Px/no= cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= +cloud.google.com/go/translate v1.7.0 h1:GvLP4oQ4uPdChBmBaUSa/SaZxCdyWELtlAaKzpHsXdA= cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/video v1.15.0 h1:upIbnGI0ZgACm58HPjAeBMleW3sl5cT84AbYQ8PWOgM= cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/videointelligence v1.10.0 h1:Uh5BdoET8XXqXX2uXIahGb+wTKbLkGH7s4GXR58RrG8= cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= +cloud.google.com/go/vision v1.2.0 h1:/CsSTkbmO9HC8iQpxbK8ATms3OQaX3YQUeTMGCxlaK4= +cloud.google.com/go/vision/v2 v2.7.0 h1:8C8RXUJoflCI4yVdqhTy9tRyygSHmp60aP363z23HKg= cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= +cloud.google.com/go/vmmigration v1.6.0 h1:Azs5WKtfOC8pxvkyrDvt7J0/4DYBch0cVbuFfCCFt5k= cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= +cloud.google.com/go/vmwareengine v0.3.0 h1:b0NBu7S294l0gmtrT0nOJneMYgZapr5x9tVWvgDoVEM= cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= +cloud.google.com/go/vpcaccess v1.6.0 h1:FOe6CuiQD3BhHJWt7E8QlbBcaIzVRddupwJlp7eqmn4= cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= +cloud.google.com/go/webrisk v1.8.0 h1:IY+L2+UwxcVm2zayMAtBhZleecdIFLiC+QJMzgb0kT0= cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= +cloud.google.com/go/websecurityscanner v1.5.0 h1:AHC1xmaNMOZtNqxI9Rmm87IJEyPaRkOxeI0gpAacXGk= cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= +cloud.google.com/go/workflows v1.10.0 h1:FfGp9w0cYnaKZJhUOMqCOJCYT/WlvYBfTQhFWV3sRKI= cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY= +github.com/Abirdcfly/dupword v0.0.7 h1:z14n0yytA3wNO2gpCD/jVtp/acEXPGmYu0esewpBt6Q= github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= +github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= +github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= +github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q= github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1 h1:qoVeMsc9/fh/yhxVaA0obYjVH/oI/ihrOoMwsLS9KSA= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3 h1:E+m3SkZCN0Bf5q7YdTs5lSm2CYY3CK4spn5OmUIiQtk= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0 h1:Px2UA+2RvSSvv+RvJNuUB6n7rs5Wsel4dXLe90Um2n4= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= +github.com/CosmWasm/wasmd v0.40.0-rc.1 h1:prIM2vP1jNh0zgs9seua5BgKdayBgp3FiHtwxFcZSGs= +github.com/CosmWasm/wasmvm v1.2.3 h1:OKYlobwmVGbl0eSn0mXoAAjE5hIuXnQCLPjbNd91sVY= +github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= +github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= +github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= +github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= +github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s= +github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= +github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= +github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/alecthomas/kingpin/v2 v2.3.1 h1:ANLJcKmQm4nIaog7xdr/id6FM6zm5hHnfZrvtKPxqGg= github.com/alecthomas/kingpin/v2 v2.3.1/go.mod h1:oYL5vtsvEHZGHxU7DMp32Dvx+qL+ptGn6lWaot2vCNE= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= +github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= +github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= +github.com/apache/arrow/go/v11 v11.0.0 h1:hqauxvFQxww+0mEU/2XHG6LT7eZternCZq+A5Yly2uM= +github.com/apache/thrift v0.16.0 h1:qEy6UW60iVOlUy+b9ZR0d5WzUWYGOo4HfopoyBaNmoY= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a h1:pv34s756C4pEXnjgPfGYgdhg/ZdajGhyOvzx8k+23nw= +github.com/ashanbrown/forbidigo v1.3.0 h1:VkYIwb/xxdireGAdJNZoo24O4lmnEWkactplBlWTShc= github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s= github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= +github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= +github.com/aws/aws-lambda-go v1.13.3 h1:SuCy7H3NLyp+1Mrfp+m80jcbi9KYWAs9/BXwppwRDzY= +github.com/aws/aws-sdk-go-v2 v1.9.1 h1:ZbovGV/qo40nrOJ4q8G33AGICzaPI45FHQWJ9650pF4= +github.com/aws/aws-sdk-go-v2/config v1.1.1 h1:ZAoq32boMzcaTW9bcUacBswAmHTbvlvDJICgHFZuECo= +github.com/aws/aws-sdk-go-v2/credentials v1.1.1 h1:NbvWIM1Mx6sNPTxowHgS2ewXCRp+NGTzUYb/96FZJbY= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2 h1:EtEU7WRaWliitZh2nmuxEXrN0Cb8EgPUFGIoTMeqbzI= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1 h1:w/fPGB0t5rWwA43mux4e9ozFSH5zF1moQemlA131PWc= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2 h1:4AH9fFjUlVktQMznF+YN33aWNXaR4VgDXyP28qokJC0= +github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1 h1:cKr6St+CtC3/dl/rEBJvlk7A/IN5D5F02GNkGzfbtVU= +github.com/aws/aws-sdk-go-v2/service/sso v1.1.1 h1:37QubsarExl5ZuCBlnRP+7l1tNwZPBSTqpTBrPH98RU= +github.com/aws/aws-sdk-go-v2/service/sts v1.1.1 h1:TJoIfnIFubCX0ACVeJ0w46HEH5MwjwYN4iFhuYIhfIY= +github.com/aws/smithy-go v1.8.0 h1:AEwwwXQZtUwP5Mz506FeXXrKBe0jA8gVM+1gEcSRooc= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7A= github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M= github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= +github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/bradleyfalzon/ghinstallation/v2 v2.0.4 h1:tXKVfhE7FcSkhkv0UwkLvPDeZ4kz6OXd0PKPlFqf81M= +github.com/breml/bidichk v0.2.3 h1:qe6ggxpTfA8E75hdjWPZ581sY3a2lnl0IRxLQFelECI= github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= +github.com/breml/errchkjson v0.3.0 h1:YdDqhfqMT+I1vIxPSas44P+9Z9HzJwCeAzjB8PxP1xw= github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= github.com/btcsuite/btcd/btcec/v2 v2.2.1/go.mod h1:9/CSmJxmuvqzX9Wh2fXMWToLOHhPd11lSPuIupwTkI8= github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw= +github.com/btcsuite/goleveldb v1.0.0 h1:Tvd0BfvqX9o823q1j2UZ/epQo09eJh6dTcRp79ilIN4= +github.com/btcsuite/snappy-go v1.0.0 h1:ZxaA6lo2EpxGddsA8JwWOcxlzRybb444sgmeJQMJGQE= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 h1:R8vQdOQdZ9Y3SkEwmHoWBmX1DNXhXZqlTpq6s4tyJGc= +github.com/btcsuite/winsvc v1.0.0 h1:J9B4L7e3oqhXOcm+2IuNApwzQec85lE+QaikUcCs+dk= +github.com/bufbuild/buf v1.7.0 h1:uWRjhIXcrWkzIkA5TqXGyJbF51VW54QJsQZ3nwaes5Q= github.com/bufbuild/buf v1.7.0/go.mod h1:Go40fMAF46PnPLC7jJgTQhAI95pmC0+VtxFKVC0qLq0= +github.com/bufbuild/connect-go v1.0.0 h1:htSflKUT8y1jxhoPhPYTZMrsY3ipUXjjrbcZR5O2cVo= github.com/bufbuild/connect-go v1.0.0/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= +github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/casbin/casbin/v2 v2.37.0 h1:/poEwPSovi4bTOcP752/CsTQiRz2xycyVKFG7GUhbDw= +github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy6EEutYk= github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 h1:E7LT642ysztPWE0dfz43cWOvMiF42DyTRC+eZIaO4yI= github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= +github.com/checkpoint-restore/go-criu/v5 v5.3.0 h1:wpFFOoomK3389ue2lAb0Boag6XPht5QYpipxmSNL4d8= +github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= +github.com/cheggaaa/pb v1.0.27 h1:wIkZHkNfC7R6GI5w7l/PdAdzXzlrbcI3p8OAlnkTsnc= +github.com/cilium/ebpf v0.7.0 h1:1k/q3ATgxSXRdrmPfH8d7YK0GfqVsEKZAX9dQZvs56k= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= +github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= +github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec h1:EdRZT3IeKQmfCSrgo8SZ8V3MEnskuJP0wCYNpe+aiXo= +github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= +github.com/cloudflare/circl v1.1.0 h1:bZgT/A+cikZnKIwn7xL2OBj012Bmvho/o6RpRvv3GKY= github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= +github.com/cloudflare/cloudflare-go v0.14.0 h1:gFqGlGl/5f9UGXAaKapCGUfaTCgRKKnzu2VvzMZlOFA= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk= github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195 h1:58f1tJ1ra+zFINPlwLWvQsR9CzAKt2e+EWV2yX9oXQ4= github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= +github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677 h1:qbb/AE938DFhOajUYh9+OXELpSF9KZw2ZivtmW6eX1Q= +github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= +github.com/cometbft/cometbft v0.37.1/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= +github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f h1:C43yEtQ6NIf4ftFXD/V55gnGFgPbMQobd//YlnLjUJ8= +github.com/containerd/aufs v1.0.0 h1:2oeJiwX5HstO7shSrPZjrohJZLzK36wvpdmzDRkL/LY= +github.com/containerd/btrfs v1.0.0 h1:osn1exbzdub9L5SouXO5swW4ea/xVdJZ3wokxN5GrnA= +github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= +github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/containerd/fifo v1.0.0 h1:6PirWBr9/L7GDamKr+XM0IeUFXu5mf3M/BPpH9gaLBU= +github.com/containerd/go-cni v1.1.6 h1:el5WPymG5nRRLQF1EfB97FWob4Tdc8INg8RZMaXWZlo= +github.com/containerd/go-runc v1.0.0 h1:oU+lLv1ULm5taqgV/CJivypVODI4SUz1znWjv3nNYS0= +github.com/containerd/imgcrypt v1.1.4 h1:iKTstFebwy3Ak5UF0RHSeuCTahC5OIrPJa6vjMAM81s= +github.com/containerd/nri v0.1.0 h1:6QioHRlThlKh2RkRTR4kIT3PKAcrLo3gIWnjkM4dQmQ= +github.com/containerd/ttrpc v1.1.0 h1:GbtyLRxb0gOLR0TYQWt3O6B0NvT8tMdorEHqIQo/lWI= +github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY= github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= +github.com/containerd/zfs v1.0.0 h1:cXLJbx+4Jj7rNsTiqVfm6i+RNLx6FFA2fMmDlEf+Wm8= +github.com/containernetworking/cni v1.1.1 h1:ky20T7c0MvKvbMOwS/FrlbNwjEoqJEUUYfsL4b0mc4k= +github.com/containernetworking/plugins v1.1.1 h1:+AGfFigZ5TiQH00vhR8qPeSatj53eNGz0C1d3wVYlHE= +github.com/containers/ocicrypt v1.1.3 h1:uMxn2wTb4nDR7GqG3rnZSfpJXqWURfzZ7nKydzIeKpA= +github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04= +github.com/coreos/go-etcd v2.0.0+incompatible h1:bXhRBIXoTm9BYHS3gE0TtQuyNZyeEMux2sDi4oo5YOo= +github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7 h1:u9SHYsPQNyt5tgDm3YN7+9dYrpK96E5wFilTFWIDZOM= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf h1:CAKfRE2YtTUIjjh1bkBtyYFaUT/WmOqsJjgtihT0vMI= +github.com/cosmos/cosmos-db v0.0.0-20221226095112-f3c38ecb5e32 h1:zlCp9n3uwQieELltZWHRmwPmPaZ8+XoL2Sj+A2YJlr8= +github.com/cosmos/cosmos-sdk v0.47.2/go.mod h1:zYzgI8w8hhotXTSoGbbSOAKfpJTx4wOy4XgbaKhtRtc= +github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a h1:2humuGPw3O5riJVFq/E2FRjF57UrO97W1qJcGVmK+6k= github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a/go.mod h1:c8IO23vgNxueCCJlSI9awQtcxsvc+buzaeThB85qfBU= github.com/cosmos/gogoproto v1.4.1/go.mod h1:Ac9lzL4vFpBMcptJROQ6dQ4M3pOEK5Z/l0Q9p+LoCr4= +github.com/cosmos/gogoproto v1.4.8/go.mod h1:hnb0DIEWTv+wdNzNcqus5xCQXq5+CXauq1FJuurRfVY= +github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= +github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= +github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= +github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= +github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= +github.com/daixiang0/gci v0.8.1 h1:T4xpSC+hmsi4CSyuYfIJdMZAr9o7xZmHpQVygMghGZ4= github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= +github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= +github.com/decred/dcrd/lru v1.0.0 h1:Kbsb1SFDsIlaupWPwsPp+dkxiBY1frcS07PCPgotKz8= +github.com/deepmap/oapi-codegen v1.8.2 h1:SegyeYGcdi0jLLrpbCMoJxnUUn8GBXHsvr4rbzjuhfU= +github.com/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU= github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= +github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 h1:Izz0+t1Z5nI16/II7vuEo/nHjodOg0p7+OiDpjX5t1E= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.24+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= +github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= +github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf h1:Yt+4K30SdjOkRoRRm3vYNQgR+/ZIy0RmeUDZo7Y8zeQ= +github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= +github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= +github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= +github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/envoyproxy/go-control-plane v0.11.0 h1:jtLewhRR2vMRNnq2ZZUoCjUlgut+Y0+sDDWPOfwOi1o= github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= +github.com/envoyproxy/protoc-gen-validate v0.10.0 h1:oIfnZFdC0YhpNNEX+SuIqko4cqqVZeN9IGTrhZje83Y= github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= +github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= +github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= +github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= +github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= +github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c h1:CndMRAH4JIwxbW8KYq6Q+cGWcGHz0FjGR3QqcInWcW0= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= +github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db h1:gb2Z18BhTPJPpLQWj4T+rfKHYCHxRHCtRxhKKjRidVw= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 h1:a9ENSRDFBUPkJ5lCgVZh26+ZbGyoVJG7yb5SSzF5H54= github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= +github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61 h1:IZqZOB2fydHte3kUgxrzK5E1fW7RQGeDwE8F/ZZnUYc= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= +github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= +github.com/gdamore/tcell/v2 v2.6.0 h1:OKbluoP9VYmJwZwq/iLb4BxwKcwGthaa1YNBJIyCySg= +github.com/getsentry/sentry-go v0.17.0 h1:UustVWnOoDFHBS7IJUB2QK/nB5pap748ZEp0swnQJak= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= +github.com/go-chi/chi/v5 v5.0.7 h1:rDTPXLDHGATaeHvVlLcR4Qe0zftYethFucbjVQ1PxU8= github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-critic/go-critic v0.6.5 h1:fDaR/5GWURljXwF8Eh31T2GZNz9X4jeboS912mWF8Uo= github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= +github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.4.0 h1:Vaw7LaSTRJOUric7pe4vnzBSgyuf2KrLsu2Y4ZpQBDE= github.com/go-git/go-billy/v5 v5.4.0/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= +github.com/go-git/go-git/v5 v5.5.2 h1:v8lgZa5k9ylUw+OR/roJHTxR4QItsNFI5nKtAXFuynw= github.com/go-git/go-git/v5 v5.5.2/go.mod h1:BE5hUJ5yaV2YMxhmaP4l6RBQ08kMxKSPD4BlxtH7OjI= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4 h1:WtGNWLvXpe6ZudgnXrq0barxBImvnnJoMEhXAzcbM0I= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= +github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= +github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.2 h1:YnWf5Rnh1hUudj11kei53kI57quN/VH6Hp1n+erozn0= github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= +github.com/go-toolsmith/astequal v1.0.3 h1:+LVdyRatFS+XO78SGV4I3TCEA0AC7fKEGma+fH+674o= github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= +github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= +github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.2 h1:8xdsa1+FSIH/RhEkgnD1j2CJOy5mNllW1Q9tRiYwvlk= github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b h1:khEcpUM4yFcxg4/FHQWkvVRmgijNXRfzkIDHh23ggEo= github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/go-zookeeper/zk v1.0.2 h1:4mx0EYENAdX/B/rbunjlt5+4RTA/a9SMHBRuSKdGxPM= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe h1:6RGUuS7EGotKx6J5HIP8ZtyMdiDscjMLfRBSPuzVVeo= github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= +github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzrdA+Nx5WA3tV1N0goTspwmKCQvBY= github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= +github.com/golangci/golangci-lint v1.50.1 h1:C829clMcZXEORakZlwpk7M4iDw2XiwxxKaG504SZ9zY= github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.3.5 h1:pLzmVdl3VxTOncgzHcvLOKirdvcx/TydsClUQXTehjo= github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 h1:DIPQnGy2Gv2FSA4B/hh8Q7xx3B7AIDk3DAMeHclH1vQ= github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/google/flatbuffers v2.0.8+incompatible h1:ivUb1cGomAB101ZM1T0nOiWz9pSrTMoa9+EiY7igmkM= +github.com/google/go-github/v41 v41.0.0 h1:HseJrM2JFf2vfiZJ8anY2hqBjdfY1Vlj/K27ueww4gg= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8 h1:tlyzajkF3030q6M8SvmJSemC9DTHL/xaMa18b65+JM4= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8 h1:PVRE9d4AQKmbelZ7emNig1+NT27DUmKZn5qXxfio54U= github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= +github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= +github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= +github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q= github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= +github.com/gostaticanalysis/forcetypeassert v0.1.0 h1:6eUflI3DiGusXGK6X7cCcIgVCpZ2CiZ1Q7jl6ZxNV70= github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= +github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk= github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= +github.com/gotestyourself/gotestyourself v2.2.0+incompatible h1:AQwinXlbQR2HvPjQZOmDhRqsv5mZf+Jb1RnSLxcqZcI= github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= +github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= +github.com/hashicorp/consul/api v1.20.0 h1:9IHTjNVSZ7MIwjlW3N3a7iGiykCMDpxZu8jsxFJh0yc= github.com/hashicorp/consul/api v1.20.0/go.mod h1:nR64eD44KQ59Of/ECwt2vUmIK2DKsDzAwTmwmLl8Wpo= +github.com/hashicorp/consul/sdk v0.3.0 h1:UOxjlb4xVNF93jak1mzzoBatyFju9nrkxpVwIp/QqxQ= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v1.2.0 h1:La19f8d7WIlm4ogzNHB0JGqs5AUDAZ2UfCY4sJXcJdM= github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.5.3 h1:QlWt0KvWT0lq8MFppF9tsJGF+ynG7ztc2KIPhzRGk7s= github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= +github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= +github.com/hashicorp/mdns v1.0.0 h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs= github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.1.3 h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M= github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/hudl/fargo v1.4.0 h1:ZDDILMbB37UlAVLlWcJ2Iz1XuahZZTDZfdCKeclfq2s= +github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= +github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639 h1:mV02weKRL81bEnm8A0HT1/CAelMQDBuQIfLw8n+d6xI= +github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/influxdata/influxdb v1.8.3 h1:WEypI1BQFTT4teLM+1qkEcvUi0dAvopAI/ir0vAiBg8= +github.com/influxdata/influxdb-client-go/v2 v2.4.0 h1:HGBfZYStlx3Kqvsv1h2pJixbCl/jhnFtxpKFAv9Tu5k= +github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab h1:HqW4xhhynfjrtEiiSGcQUd6vrK23iMam1FO8rI7mwig= +github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 h1:vilfsDSy7TDxedi9gyBkMvAirat/oRcL0lFdJBf6tdM= +github.com/informalsystems/tm-load-test v1.3.0 h1:FGjKy7vBw6mXNakt+wmNWKggQZRsKkEYpaFk/zR64VA= github.com/informalsystems/tm-load-test v1.3.0/go.mod h1:OQ5AQ9TbT5hKWBNIwsMjn6Bf4O0U4b1kRc+0qZlQJKw= +github.com/intel/goresctrl v0.2.0 h1:JyZjdMQu9Kl/wLXe9xA6s1X+tF6BWsQPFGJMEeCfWzE= +github.com/ipfs/go-datastore v0.5.1 h1:WkRhLuISI+XPD0uk3OskB0fYFSyqK8Ob5ZYew9Qa1nQ= +github.com/ipfs/go-ds-badger v0.3.0 h1:xREL3V0EH9S219kFFueOYJJTcjgNSZ2HY1iSvN7U1Ro= +github.com/ipfs/go-ds-leveldb v0.5.0 h1:s++MEBbD3ZKc9/8/njrn4flZLnCuY9I79v94gBUNumo= +github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= +github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= +github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= +github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a h1:d4+I1YEKVmWZrgkt6jpXBnLgV2ZjO0YxEtLDdfIZfH4= github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= +github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e h1:UvSe12bq+Uj2hWd8aOlwPmoZ+CITRFrdit+sDGfAg8U= +github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= +github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f h1:BNuUg9k2EiJmlMwjoef3e8vZLHplbVw6DrjGFjLL+Yo= github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= +github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= +github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= +github.com/jrick/logrotate v1.0.0 h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= +github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/karalabe/usb v0.0.2 h1:M6QQBNxF+CQ8OFvxrT90BA0qBOXymndZnk5q235mFc4= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.6.2 h1:uGQ9xI8/pgc9iOoCe7kWQgRE6SBTrCGmTSf0LrEtY7c= github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= +github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= +github.com/kkHAIKE/contextcheck v1.1.3 h1:l4pNvrb8JSwRd51ojtcOxOeHJzHek+MtOyXbaR0uvmw= github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE= +github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= +github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= +github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8= +github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs= github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= +github.com/kunwardeep/paralleltest v1.0.6 h1:FCKYMF1OF2+RveWlABsdnmsvJrei5aoyZoaGS+Ugg8g= github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kyoh86/exportloopref v0.1.8 h1:5Ry/at+eFdkX9Vsdw3qU4YkvGtzuVfzT4X7S77LoN/M= github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUcJwlhA= github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= +github.com/ldez/tagliatelle v0.3.1 h1:3BqVVlReVUZwafJUwQ+oxbx2BEX2vUG4Yu/NOfMiKiM= github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/leonklingele/grouper v1.1.0 h1:tC2y/ygPbMFSBOs3DcyaEMKnnwH7eYKzohOtRrf0SAg= github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= +github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= +github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw= +github.com/libp2p/go-libp2p-testing v0.11.0 h1:+R7FRl/U3Y00neyBSM2qgDzqz3HkWH24U9nMlascHL4= +github.com/libp2p/go-mplex v0.7.0 h1:BDhFZdlk5tbr0oyFq/xv/NPGfjbnrsDam1EvutpBDbY= +github.com/libp2p/go-msgio v0.2.0 h1:W6shmB+FeynDrUVl2dgFQvzfBZcXiyqY4VmpQLu9FqU= +github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg= +github.com/libp2p/go-netroute v0.2.0 h1:0FpsbsvuSnAhXFnCY0VLFbJOzaK0VnP0r1QT/o4nWRE= +github.com/libp2p/go-reuseport v0.2.0 h1:18PRvIMlpY6ZK85nIAicSBuXXvrYoSw3dsBAR7zc560= +github.com/libp2p/go-yamux/v3 v3.1.2 h1:lNEy28MBk1HavUAlzKgShp+F6mn/ea1nDYWftZhFW9Q= +github.com/libp2p/zeroconf/v2 v2.2.0 h1:Cup06Jv6u81HLhIj1KasuNM/RHHrJ8T7wOTS4+Tv53Q= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743 h1:143Bb8f8DuGWck/xpNUOckBVYfFbBTnLevfRZ1aVVqo= +github.com/lightstep/lightstep-tracer-go v0.18.1 h1:vi1F1IQ8N7hNWytK9DpJsUfQhGuNSc19z330K6vl4zk= +github.com/lucas-clemente/quic-go v0.28.1 h1:Uo0lvVxWg5la9gflIF9lwa39ONq85Xq2D91YNEIslzU= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= +github.com/lyft/protoc-gen-star/v2 v2.0.1 h1:keaAo8hRuAT0O3DfJ/wM3rufbAjGeJ1lAtWZHDjKGB0= +github.com/lyft/protoc-gen-validate v0.0.13 h1:KNt/RhmQTOLr7Aj8PsJ7mTronaFyx80mRTT9qF261dA= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= +github.com/maratori/testpackage v1.1.0 h1:GJY4wlzQhuBusMF1oahQCBtUV/AQ/k69IZ68vxaac2Q= github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= +github.com/marten-seemann/qtls-go1-16 v0.1.5 h1:o9JrYPPco/Nukd/HpOHMHZoBDXQqoNtUCmny98/1uqQ= +github.com/marten-seemann/qtls-go1-17 v0.1.2 h1:JADBlm0LYiVbuSySCHeY863dNkcpMmDR7s0bLKJeYlQ= +github.com/marten-seemann/qtls-go1-18 v0.1.2 h1:JH6jmzbduz0ITVQ7ShevK10Av5+jBEKAHMntXmIV7kM= +github.com/marten-seemann/qtls-go1-19 v0.1.0 h1:rLFKD/9mp/uq1SYGYuVZhm83wkmU95pK5df3GufyYYU= +github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= @@ -335,40 +775,109 @@ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mgechev/revive v1.2.4 h1:+2Hd/S8oO2H0Ikq2+egtNwQsVhAeELHjxjIUFX5ajLI= github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= +github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU= +github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= +github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible h1:aKW/4cBs+yK6gpqU3K/oIwk9Q/XICqd3zOX/UFuvqmk= +github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/gox v0.4.0 h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc= +github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= +github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= +github.com/moby/buildkit v0.10.4 h1:FvC+buO8isGpUFZ1abdSLdGHZVqg9sqI4BbFL8tlzP4= github.com/moby/buildkit v0.10.4/go.mod h1:Yajz9vt1Zw5q9Pp4pdb3TCSUXJBIroIQGQ3TTs/sLug= +github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= +github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= +github.com/moby/sys/mountinfo v0.5.0 h1:2Ks8/r6lopsxWi9m58nlwjaeSzUX9iiL1vj5qB/9ObI= +github.com/moby/sys/signal v0.6.0 h1:aDpY94H8VlhTGa9sNYUFCFsMZIUh5wm0B6XkIoJj/iY= +github.com/moby/sys/symlink v0.2.0 h1:tk1rOM+Ljp0nFmfOIBtlV3rTDlWOwFRhjEeAhZB0nZc= github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4= github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mrunalp/fileutils v0.5.0 h1:NKzVxiH7eSk+OQ4M+ZYW1K6h27RUV3MI6NUTsHhU6Z4= +github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= +github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= +github.com/multiformats/go-multistream v0.3.3 h1:d5PZpjwRgVlbwfdTDjife7XszfZd8KYWfROYFlGcR8o= +github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76 h1:0xuRacu/Zr+jX+KyLLPPktbwXqyOvnOPUQmMLzX1jxU= +github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= +github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= +github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= +github.com/nats-io/jwt v0.3.2 h1:+RB5hMpXUUA2dfxuhBTEkMOrYmM+gKIZYS1KjSostMI= +github.com/nats-io/jwt/v2 v2.0.3 h1:i/O6cmIsjpcQyWDYNcq2JyZ3/VTF8SJ4JWluI5OhpvI= +github.com/nats-io/nats-server/v2 v2.5.0 h1:wsnVaaXH9VRSg+A2MVg5Q727/CqxnmPLGFQ3YZYKTQg= +github.com/nats-io/nats.go v1.12.1 h1:+0ndxwUPz3CmQ2vjbXdkC1fo3FdiOQDim4gl3Mge8Qo= +github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/nishanths/exhaustive v0.8.3 h1:pw5O09vwg8ZaditDp/nQRqVnrMczSJDxRDJMowvhsrM= github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= +github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= +github.com/oklog/oklog v0.3.2 h1:wVfs8F+in6nTBMkA7CbRw+zZMIB7nNM825cM1wuzoTk= +github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc= github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= +github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= +github.com/opencontainers/selinux v1.10.1 h1:09LIPVRP3uuZGQvgR+SgMSNBd1Eb3vlRbGqQpoHsF8w= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU= +github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5 h1:ZCnq+JUrvXcDVhX/xRolRBZifmabN1HcS1wrPSvxhrU= +github.com/openzipkin/zipkin-go v0.2.5 h1:UwtQQx2pyPIgWYHRg+epgdx1/HnBQTgN3/oIYEJTQzU= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= +github.com/pact-foundation/pact-go v1.0.4 h1:OYkFijGHoZAYbOIb1LWXrwKQbMMRUv1oQ89blD2Mh2Q= +github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= +github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/pelletier/go-toml/v2 v2.0.7/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/performancecopilot/speed v3.0.0+incompatible h1:2WnRzIquHa5QxaJKShDkLM+sc0JPuwhXzK8OYOyt3Vg= +github.com/performancecopilot/speed/v4 v4.0.0 h1:VxEDCmdkfbQYDlcr/GC9YoN9PQ6p8ulk9xVsepYy9ZY= +github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= +github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= +github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0= +github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/profile v1.6.0 h1:hUDfIISABYI59DyeB3OTay/HxSRwTQ8rB/H83k6r5dM= github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= +github.com/pkg/sftp v1.13.1 h1:I2qBYMChEhIjOgazfJmV3/mZM256btk6wkCDRmW7JYs= +github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3 h1:hUmXhbljNFtrH5hzV9kiRoddZ5nfPTq3K0Sb2hYYiqE= github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3/go.mod h1:q5NXNGzqj5uPnVuhGkZfmgHqNUhf15VLi6L9kW0VEc0= +github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4 h1:RHHRCZeaNyBXdYPMjZNH8/XHDBH38TZzw8izrW7dmBE= github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4/go.mod h1:RdR1j20Aj5pB6+fw6Y9Ur7lMHpegTEjY1vc19hEZL40= +github.com/pointlander/peg v1.0.1 h1:mgA/GQE8TeS9MdkU6Xn6iEzBmQUQCNuWD7rHCK6Mjs0= github.com/pointlander/peg v1.0.1/go.mod h1:5hsGDQR2oZI4QoWz0/Kdg3VSVEC31iJw/b7WjqCBGRI= +github.com/polyfloyd/go-errorlint v1.0.5 h1:AHB5JRCjlmelh9RrLxT9sgzpalIwwq4hqE8EkwIwKdY= github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= +github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= @@ -379,87 +888,185 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.18 h1:sd+abO1PEI9fkYennwzHn9kl3nqP6M5vE7FiOzZ+5CE= github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f h1:6Gtn2i04RD0gVyYf2/IUMTIs+qYleBt4zxDqkLTcu4U= github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY= github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= +github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= +github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= +github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 h1:xe+mmCnDN82KhC010l3NfYlA8ZbOuzbXAzSYBa6wbMc= github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= +github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY= github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= +github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/ryancurrah/gomodguard v1.2.4 h1:CpMSDKan0LtNGGhPrvupAoLeObRFjND8/tU1rEOtBp4= github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= +github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8OUZI9xFw= github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f h1:UFr9zpz4xgTnIE5yIMtWAMngCdZ9p/+q6lTbgelo80M= +github.com/sagikazarmark/crypt v0.10.0 h1:96E1qrToLBU6fGzo+PRRz7KGOc9FkYFiPnR3/zf8Smg= github.com/sagikazarmark/crypt v0.10.0/go.mod h1:gwTNHQVoOS3xp9Xvz5LLR+1AauC5M6880z5NWzdhOyQ= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCLY7gIfzeQaUJ+kppEO5WQG3cL8iE8tGHU= +github.com/sanposhiho/wastedassign/v2 v2.0.6 h1:+6/hQIHKNJAUixEj6EmOngGIisyeI+T3335lYTyxRoA= github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= +github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= +github.com/sashamelentyev/usestdlibvars v1.20.0 h1:K6CXjqqtSYSsuyRDDC7Sjn6vTMLiSJa4ZmDkiokoqtw= github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= +github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 h1:RpforrEYXWkmGwJHIGnLZ3tTWStkjVVstwzNGqxX2Ds= +github.com/securego/gosec/v2 v2.13.1 h1:7mU32qn2dyC81MH9L2kefnQyRMUarfDER3iQyMHcjYM= github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/sivchari/containedctx v1.0.2 h1:0hLQKpgC53OVF1VT7CeoFHk9YKstur1XOgfYIc1yrHI= github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= +github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt95do8= github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= +github.com/sivchari/tenv v1.7.0 h1:d4laZMBK6jpe5PWepxlV9S+LC0yXqvYHiq8E6ceoVVE= github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= +github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= +github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= +github.com/sonatard/noctx v0.0.1 h1:VC1Qhl6Oxx9vvWo3UDgrGXYCeKCe3Wbw7qAWL6FrmTY= github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= +github.com/sony/gobreaker v0.4.1 h1:oMnRNZXX5j85zso6xCPRNPtmAycat+WcoKbklScLDgQ= +github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= +github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= +github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= +github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc= github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= +github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980 h1:lIOOHPEbXzO3vnmx2gok1Tfs31Q8GQqKLc8vVqyQq/I= +github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo= +github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e h1:mOtuXaRAbVZsxAHVdPR3IjfmN8T1h2iczJLynhLybf8= github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344 h1:m+8fKfQwCAy1QjzINvKe/pYtLjo2dl59x2w9YSEJxuY= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= +github.com/tchap/go-patricia v2.2.6+incompatible h1:JvoDL7JSoIP2HDE8AbDH3zC8QBPxmzYe32HHy5yQ+Ck= +github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTXuO0A= github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= +github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= +github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= +github.com/tendermint/tendermint v0.37.0-rc2 h1:2n1em+jfbhSv6QnBj8F6KHCpbIzZCB8KgcjidJUQNlY= +github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= +github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= +github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144 h1:kl4KhGNsJIbDHS9/4U9yQo1UcPQM0kOMJHn29EoH/Ro= github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/timonwong/loggercheck v0.9.3 h1:ecACo9fNiHxX4/Bc02rW2+kaJIAMAes7qJ7JKxt0EZI= github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8 h1:ndzgwNDnKIqyCvHTXaCqh9KlOWKvBry6nuXMJmonVsE= +github.com/tomarrell/wrapcheck/v2 v2.7.0 h1:J/F8DbSKJC83bAvC6FoZaRjZiZ/iKoueSdrEkmGeacA= github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= +github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8= github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= +github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqzi/CzI= github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= +github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= +github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y= +github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= +github.com/vektra/mockery/v2 v2.14.0 h1:KZ1p5Hrn8tiY+LErRMr14HHle6khxo+JKOXLBW/yfqs= github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= +github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5 h1:+UB2BJA852UkGH42H+Oee69djmxS3ANzl2b/JtT1YiA= +github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xhit/go-str2duration v1.2.0 h1:BcV5u025cITWxEQKGWr1URRzrcXtu7uk8+luz3Yuhwc= github.com/xhit/go-str2duration v1.2.0/go.mod h1:3cPSlfZlUHVlneIVfePFWcJZsuwf+P1v2SRTV4cUmp4= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= +github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o= github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= +github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0= gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0= +go.etcd.io/etcd/api/v3 v3.5.9 h1:4wSsluwyTbGGmyjJktOf3wFQoTBIURXHnq9n/G/JQHs= go.etcd.io/etcd/api/v3 v3.5.9/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k= +go.etcd.io/etcd/client/pkg/v3 v3.5.9 h1:oidDC4+YEuSIQbsR94rY9gur91UPL6DnxDCIYd2IGsE= go.etcd.io/etcd/client/pkg/v3 v3.5.9/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4= +go.etcd.io/etcd/client/v2 v2.305.7 h1:AELPkjNR3/igjbO7CjyF1fPuVPjrblliiKj+Y6xSGOU= go.etcd.io/etcd/client/v2 v2.305.7/go.mod h1:GQGT5Z3TBuAQGvgPfhR7VPySu/SudxmEkRq9BgzFU6s= +go.etcd.io/etcd/client/v3 v3.5.9 h1:r5xghnU7CwbUxD/fbUtRyJGaYNfDun8sp/gTr1hew6E= go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA= +go.etcd.io/gofail v0.1.0 h1:XItAMIhOojXFQMgrxjnd2EIIHun/d5qL0Pf7FzVTkFg= go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= +go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1 h1:A/5uWzF44DlIgdm/PQFwfMkW0JX+cIcQi/SwLAmZP5M= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3 h1:syAz40OyelLZo42+3U68Phisvrx4qh+4wpdZw7eUUdY= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3/go.mod h1:Dts42MGkzZne2yCru741+bFiTMWkIj/LLRizad7b9tw= +go.opentelemetry.io/otel v1.11.0 h1:kfToEGMDq6TrVrJ9Vht84Y8y9enykSZzDDZglV0kIEk= go.opentelemetry.io/otel v1.11.0/go.mod h1:H2KtuEphyMvlhZ+F7tg9GRhAOe60moNx61Ex+WmiKkk= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0 h1:R/OBkMoGgfy2fLhs2QhkCI1w4HLEQX92GCcJB6SSdNk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0 h1:giGm8w67Ja7amYNfYMdme7xSp2pIxThWopw8+QP51Yk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0 h1:VQbUHoJqytHHSJ1OZodPH9tvZZSVzUHjPHpkO85sT6k= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0 h1:Ydage/P0fRrSPpZeCVxzjqGcI6iVmG2xb43+IR8cjqM= +go.opentelemetry.io/otel/sdk v1.3.0 h1:3278edCoH89MEJ0Ky8WQXVmDQv3FX4ZJ3Pp+9fJreAI= +go.opentelemetry.io/otel/trace v1.11.0 h1:20U/Vj42SX+mASlXLmSGBg6jpI1jQtv682lZtTAOVFI= go.opentelemetry.io/otel/trace v1.11.0/go.mod h1:nyYjis9jy0gytE9LXGU+/m1sHTKbRY0fX0hulNNDP1U= +go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -467,19 +1074,23 @@ golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= -golang.org/x/exp v0.0.0-20221205204356-47842c84f3db/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/exp v0.0.0-20230131160201-f062dba9d201/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91 h1:Ic/qN6TEifvObMGQy72k0n1LlJr7DjWWEi+MOsDOiSk= golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -522,6 +1133,7 @@ golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -557,16 +1169,20 @@ golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= @@ -575,20 +1191,48 @@ google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsA google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE= google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.2-0.20230222093303-bc1253ad3743/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.27 h1:kJdccidYzt3CaHD1crCFTS1hxyhSi059NhOFUf03YFo= +gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/gcfg.v1 v1.2.3 h1:m8OOJ4ccYHnx2f4gQwpno8nAX5OGOh7RLaaz0pj3Ogs= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= +gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= +honnef.co/go/tools v0.3.3 h1:oDx7VAwstgpYpb3wv0oxiZlxY+foCpRAwY7Vk6XpAgA= honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= +k8s.io/api v0.22.5 h1:xk7C+rMjF/EGELiD560jdmwzrB788mfcHiNbMQLIVI8= +k8s.io/apimachinery v0.22.5 h1:cIPwldOYm1Slq9VLBRPtEYpyhjIm1C6aAMAoENuvN9s= +k8s.io/apiserver v0.22.5 h1:71krQxCUz218ecb+nPhfDsNB6QgP1/4EMvi1a2uYBlg= +k8s.io/client-go v0.22.5 h1:I8Zn/UqIdi2r02aZmhaJ1hqMxcpfJ3t5VqvHtctHYFo= +k8s.io/component-base v0.22.5 h1:U0eHqZm7mAFE42hFwYhY6ze/MmVaW00JpMrzVsQmzYE= +k8s.io/cri-api v0.23.1 h1:0DHL/hpTf4Fp+QkUXFefWcp1fhjXr9OlNdY9X99c+O8= +k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= +k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b h1:wxEMGetGMur3J1xuGLQY7GEQYg9bZxKn3tKo5k/eYcs= +mvdan.cc/gofumpt v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM= mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20220706161116-678bad134442 h1:seuXWbRB1qPrS3NQnHmFKLJLtskWyueeIzmLXghMGgk= mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= +rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0 h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY= +rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4= +sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= diff --git a/interchaintest/acc_cache_test.go b/interchaintest/acc_cache_test.go new file mode 100644 index 000000000..a2d0fbbc2 --- /dev/null +++ b/interchaintest/acc_cache_test.go @@ -0,0 +1,44 @@ +package interchaintest + +import ( + "testing" + + "github.com/cometbft/cometbft/crypto/ed25519" + "github.com/cosmos/cosmos-sdk/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" +) + +// See https://github.com/cosmos/cosmos-sdk/issues/15317 for description of bug. +// Basically, in cosmos SDK, there is an account address cache that will ignore the bech32 prefix setting. +// This will cause the AccAddress.String() to print out unexpected prefixes. +// If this function fails you are on an unsafe SDK version that should NOT be used with the relayer. +func TestAccCacheBugfix(t *testing.T) { + types.SetAddrCacheEnabled(false) + + // Use a random key + priv := ed25519.GenPrivKey() + pub := priv.PubKey() + + //Set to 'osmo' + prefix := "osmo" + sdkConf := sdk.GetConfig() + sdkConf.SetBech32PrefixForAccount(prefix, prefix+"pub") + sdkConf.SetBech32PrefixForValidator(prefix+"valoper", prefix+"valoperpub") + sdkConf.SetBech32PrefixForConsensusNode(prefix+"valcons", prefix+"valconspub") + + addrOsmo := sdk.AccAddress(pub.Address()) + osmoAddrBech32 := addrOsmo.String() + + //Set to 'cosmos' + prefix = "cosmos" + sdkConf.SetBech32PrefixForAccount(prefix, prefix+"pub") + sdkConf.SetBech32PrefixForValidator(prefix+"valoper", prefix+"valoperpub") + sdkConf.SetBech32PrefixForConsensusNode(prefix+"valcons", prefix+"valconspub") + + addrCosmos := sdk.AccAddress(pub.Address()) + cosmosAddrBech32 := addrCosmos.String() + + //If the addresses are equal, the AccAddress caching caused a bug + require.NotEqual(t, osmoAddrBech32, cosmosAddrBech32) +} diff --git a/interchaintest/client_threshold_test.go b/interchaintest/client_threshold_test.go index 8b608ca68..bc6e22a12 100644 --- a/interchaintest/client_threshold_test.go +++ b/interchaintest/client_threshold_test.go @@ -12,6 +12,7 @@ import ( "github.com/strangelove-ventures/interchaintest/v7/testreporter" "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" + "go.uber.org/zap" "go.uber.org/zap/zaptest" "golang.org/x/sync/errgroup" ) @@ -24,8 +25,6 @@ const ( // Tests that the Relayer will update light clients within a // user specified time threshold. func TestScenarioClientThresholdUpdate(t *testing.T) { - t.Parallel() - ctx := context.Background() nv := 1 @@ -85,6 +84,9 @@ func TestScenarioClientThresholdUpdate(t *testing.T) { Client: client, NetworkID: network, })) + + t.Parallel() + t.Cleanup(func() { _ = ic.Close() }) @@ -144,9 +146,8 @@ func TestScenarioClientThresholdUpdate(t *testing.T) { // Tests that without the threshold flag, the clients will be updated // automatically due to passing 2/3 trusting period expiration. func TestScenarioClientTrustingPeriodUpdate(t *testing.T) { - t.Parallel() - ctx := context.Background() + t.Parallel() nv := 1 nf := 0 @@ -164,12 +165,13 @@ func TestScenarioClientTrustingPeriodUpdate(t *testing.T) { client, network := interchaintest.DockerSetup(t) relayerinterchaintest.BuildRelayerImage(t) + logger := zaptest.NewLogger(t) // Relayer is set with "--time-threshold 0" // The Relayer should NOT continuously update clients r := interchaintest.NewBuiltinRelayerFactory( ibc.CosmosRly, - zaptest.NewLogger(t), + logger, interchaintestrelayer.CustomDockerImage(relayerinterchaintest.RelayerImageName, "latest", "100:1000"), interchaintestrelayer.ImagePull(false), ).Build(t, client, network) @@ -203,18 +205,24 @@ func TestScenarioClientTrustingPeriodUpdate(t *testing.T) { SkipPathCreation: false, })) + t.Cleanup(func() { _ = ic.Close() }) // Wait 2 blocks after building interchain require.NoError(t, testutil.WaitForBlocks(ctx, 2, g0, g1)) + g0Ctx := context.Background() + g1Ctx := context.Background() - g0Height, err := g0.Height(ctx) + g0Height, err := g0.Height(g0Ctx) require.NoError(t, err) - g1Height, err := g1.Height(ctx) + g1Height, err := g1.Height(g1Ctx) require.NoError(t, err) + logger.Info("Chain height", zap.String("g0 chainID", g0.Config().ChainID), zap.Uint64("height", g0Height)) + logger.Info("Chain height", zap.String("g1 chainID", g1.Config().ChainID), zap.Uint64("g1 height", g1Height)) + require.NoError(t, r.StartRelayer(ctx, eRep, ibcPath)) t.Cleanup(func() { _ = r.StopRelayer(ctx, eRep) @@ -222,13 +230,13 @@ func TestScenarioClientTrustingPeriodUpdate(t *testing.T) { const heightOffset = 10 - g0Conns, err := r.GetConnections(ctx, eRep, g0ChainId) + g0Conns, err := r.GetConnections(g0Ctx, eRep, g0ChainId) require.NoError(t, err) require.Len(t, g0Conns, 1) g0ClientID := g0Conns[0].ClientID - g1Conns, err := r.GetConnections(ctx, eRep, g1ChainId) + g1Conns, err := r.GetConnections(g1Ctx, eRep, g1ChainId) require.NoError(t, err) require.Len(t, g1Conns, 1) @@ -236,7 +244,11 @@ func TestScenarioClientTrustingPeriodUpdate(t *testing.T) { var eg errgroup.Group eg.Go(func() error { - msg, err := pollForUpdateClient(ctx, g0, g0Height, g0Height+heightOffset) + updatedG0Height, err := g0.Height(g0Ctx) + require.NoError(t, err) + logger.Info("G0 Chain height (2)", zap.String("g0 chainID", g0.Config().ChainID), zap.Uint64("g0 height", updatedG0Height)) + + msg, err := pollForUpdateClient(g0Ctx, g0, updatedG0Height, updatedG0Height+heightOffset) if err != nil { return fmt.Errorf("first chain: %w", err) } @@ -246,7 +258,11 @@ func TestScenarioClientTrustingPeriodUpdate(t *testing.T) { return nil }) eg.Go(func() error { - msg, err := pollForUpdateClient(ctx, g1, g1Height, g1Height+heightOffset) + updatedG1Height, err := g1.Height(g1Ctx) + require.NoError(t, err) + logger.Info("G1 Chain height (2)", zap.String("g1 chainID", g1.Config().ChainID), zap.Uint64("g1 height", updatedG1Height)) + + msg, err := pollForUpdateClient(g1Ctx, g1, updatedG1Height, updatedG1Height+heightOffset) if err != nil { return fmt.Errorf("second chain: %w", err) } diff --git a/interchaintest/fee_middleware_test.go b/interchaintest/fee_middleware_test.go index 93caad39e..850fe27d7 100644 --- a/interchaintest/fee_middleware_test.go +++ b/interchaintest/fee_middleware_test.go @@ -21,8 +21,6 @@ func TestRelayerFeeMiddleware(t *testing.T) { t.Skip() } - t.Parallel() - nv := 1 nf := 0 @@ -73,11 +71,13 @@ func TestRelayerFeeMiddleware(t *testing.T) { SkipPathCreation: false, })) + t.Parallel() + t.Cleanup(func() { _ = ic.Close() }) - err = testutil.WaitForBlocks(ctx, 10, chainA, chainB) + err = testutil.WaitForBlocks(ctx, 5, chainA, chainB) require.NoError(t, err) // ChainID of ChainA diff --git a/interchaintest/feegrant_test.go b/interchaintest/feegrant_test.go new file mode 100644 index 000000000..0d0dcd13a --- /dev/null +++ b/interchaintest/feegrant_test.go @@ -0,0 +1,532 @@ +package interchaintest + +import ( + "context" + "encoding/hex" + "fmt" + "math/rand" + "strings" + "testing" + "time" + + "github.com/avast/retry-go/v4" + rpcclient "github.com/cometbft/cometbft/rpc/client" + ctypes "github.com/cometbft/cometbft/rpc/core/types" + "github.com/cosmos/cosmos-sdk/types" + txtypes "github.com/cosmos/cosmos-sdk/types/tx" + "github.com/cosmos/go-bip39" + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + chantypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + "github.com/cosmos/relayer/v2/relayer" + "github.com/cosmos/relayer/v2/relayer/chains/cosmos" + "github.com/cosmos/relayer/v2/relayer/processor" + interchaintest "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/testreporter" + "github.com/strangelove-ventures/interchaintest/v7/testutil" + "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" + "golang.org/x/sync/errgroup" +) + +// protoTxProvider is a type which can provide a proto transaction. It is a +// workaround to get access to the wrapper TxBuilder's method GetProtoTx(). +type protoTxProvider interface { + GetProtoTx() *txtypes.Tx +} + +type chainFeegrantInfo struct { + granter string + grantees []string +} + +func genMnemonic(t *testing.T) string { + // read entropy seed straight from tmcrypto.Rand and convert to mnemonic + entropySeed, err := bip39.NewEntropy(256) + if err != nil { + t.Fail() + } + + mn, err := bip39.NewMnemonic(entropySeed) + if err != nil { + t.Fail() + } + + return mn +} + +// TestScenarioFeegrantBasic Feegrant on a single chain +// Run this test with e.g. go test -timeout 300s -run ^TestScenarioFeegrantBasic$ github.com/cosmos/relayer/v2/ibctest. +// +// Helpful to debug: +// docker ps -a --format {{.Names}} then e.g. docker logs gaia-1-val-0-TestScenarioFeegrantBasic 2>&1 -f +func TestScenarioFeegrantBasic(t *testing.T) { + ctx := context.Background() + logger := zaptest.NewLogger(t) + + nv := 1 + nf := 0 + + //In order to have this image locally you'd need to build it with heighliner, e.g., + //from within the local "gaia" directory, run the following command: + //../heighliner/heighliner build -c gaia --local -f ../heighliner/chains.yaml + // gaiaImage := ibc.DockerImage{ + // Repository: "gaia", + // Version: "local", + // UidGid: "1025:1025", //the heighliner user string. this isn't exposed on ibctest + // } + + // gaiaChainSpec := &interchaintest.ChainSpec{ + // ChainName: "gaia", + // NumValidators: &nv, + // NumFullNodes: &nf, + // ChainConfig: ibc.ChainConfig{ + // Type: "cosmos", + // Name: "gaia", + // //ChainID: "gaia-1", //I believe this will be auto-generated? + // Images: []ibc.DockerImage{gaiaImage}, + // Bin: "gaiad", + // Bech32Prefix: "cosmos", + // Denom: "uatom", + // GasPrices: "0.01uatom", + // TrustingPeriod: "504h", + // GasAdjustment: 1.3, + // }} + + // Chain Factory + cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ + {Name: "gaia", ChainName: "gaia", Version: "v7.0.3", NumValidators: &nv, NumFullNodes: &nf}, + {Name: "osmosis", ChainName: "osmosis", Version: "v14.0.1", NumValidators: &nv, NumFullNodes: &nf}, + }) + + chains, err := cf.Chains(t.Name()) + require.NoError(t, err) + gaia, osmosis := chains[0], chains[1] + + // Relayer Factory to construct relayer + r := NewRelayerFactory(RelayerConfig{ + Processor: relayer.ProcessorEvents, + InitialBlockHistory: 100, + }).Build(t, nil, "") + + processor.PathProcMessageCollector = make(chan *processor.PathProcessorMessageResp, 10000) + + // Prep Interchain + const ibcPath = "gaia-osmosis" + ic := interchaintest.NewInterchain(). + AddChain(gaia). + AddChain(osmosis). + AddRelayer(r, "relayer"). + AddLink(interchaintest.InterchainLink{ + Chain1: gaia, + Chain2: osmosis, + Relayer: r, + Path: ibcPath, + }) + + // Reporter/logs + rep := testreporter.NewNopReporter() + eRep := rep.RelayerExecReporter(t) + + client, network := interchaintest.DockerSetup(t) + + // Build interchain + require.NoError(t, ic.Build(ctx, eRep, interchaintest.InterchainBuildOptions{ + TestName: t.Name(), + Client: client, + NetworkID: network, + + SkipPathCreation: false, + })) + + t.Parallel() + + // Get Channel ID + gaiaChans, err := r.GetChannels(ctx, eRep, gaia.Config().ChainID) + require.NoError(t, err) + gaiaChannel := gaiaChans[0] + osmosisChannel := gaiaChans[0].Counterparty + + // Create and Fund User Wallets + fundAmount := int64(10_000_000) + + // Tiny amount of funding, not enough to pay for a single TX fee (the GRANTER should be paying the fee) + granteeFundAmount := int64(10) + granteeKeyPrefix := "grantee1" + grantee2KeyPrefix := "grantee2" + grantee3KeyPrefix := "grantee3" + granterKeyPrefix := "default" + + mnemonicAny := genMnemonic(t) + gaiaGranterWallet, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, granterKeyPrefix, mnemonicAny, int64(fundAmount), gaia) + require.NoError(t, err) + + mnemonicAny = genMnemonic(t) + gaiaGranteeWallet, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, granteeKeyPrefix, mnemonicAny, int64(granteeFundAmount), gaia) + require.NoError(t, err) + + mnemonicAny = genMnemonic(t) + gaiaGrantee2Wallet, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, grantee2KeyPrefix, mnemonicAny, int64(granteeFundAmount), gaia) + require.NoError(t, err) + + mnemonicAny = genMnemonic(t) + gaiaGrantee3Wallet, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, grantee3KeyPrefix, mnemonicAny, int64(granteeFundAmount), gaia) + require.NoError(t, err) + + mnemonicAny = genMnemonic(t) + osmosisUser, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, "recipient", mnemonicAny, int64(fundAmount), osmosis) + require.NoError(t, err) + + mnemonicAny = genMnemonic(t) + gaiaUser, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, "recipient", mnemonicAny, int64(fundAmount), gaia) + require.NoError(t, err) + + mnemonic := gaiaGranterWallet.Mnemonic() + fmt.Printf("Wallet mnemonic: %s\n", mnemonic) + + rand.Seed(time.Now().UnixNano()) + + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + gaia.Config(), + gaiaGranterWallet.KeyName(), + gaiaGranterWallet.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) + } + + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + gaia.Config(), + gaiaGranteeWallet.KeyName(), + gaiaGranteeWallet.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) + } + + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + gaia.Config(), + gaiaGrantee2Wallet.KeyName(), + gaiaGrantee2Wallet.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) + } + + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + gaia.Config(), + gaiaGrantee3Wallet.KeyName(), + gaiaGrantee3Wallet.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) + } + + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + osmosis.Config(), + osmosisUser.KeyName(), + osmosisUser.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", osmosis.Config().ChainID, err.Error()) + } + + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + osmosis.Config(), + gaiaUser.KeyName(), + gaiaUser.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) + } + + gaiaGranteeAddr := gaiaGranteeWallet.FormattedAddress() + gaiaGrantee2Addr := gaiaGrantee2Wallet.FormattedAddress() + gaiaGrantee3Addr := gaiaGrantee3Wallet.FormattedAddress() + gaiaGranterAddr := gaiaGranterWallet.FormattedAddress() + + granteeCsv := gaiaGranteeWallet.KeyName() + "," + gaiaGrantee2Wallet.KeyName() + "," + gaiaGrantee3Wallet.KeyName() + + //You MUST run the configure feegrant command prior to starting the relayer, otherwise it'd be like you never set it up at all (within this test) + //Note that Gaia supports feegrants, but Osmosis does not (x/feegrant module, or any compatible module, is not included in Osmosis SDK app modules) + localRelayer := r.(*Relayer) + res := localRelayer.sys().Run(logger, "chains", "configure", "feegrant", "basicallowance", gaia.Config().ChainID, gaiaGranterWallet.KeyName(), "--grantees", granteeCsv, "--overwrite-granter") + if res.Err != nil { + fmt.Printf("configure feegrant results: %s\n", res.Stdout.String()) + t.Fatalf("failed to rly config feegrants: %v", res.Err) + } + + //Map of feegranted chains and the feegrant info for the chain + feegrantedChains := map[string]*chainFeegrantInfo{} + feegrantedChains[gaia.Config().ChainID] = &chainFeegrantInfo{granter: gaiaGranterAddr, grantees: []string{gaiaGranteeAddr, gaiaGrantee2Addr, gaiaGrantee3Addr}} + + time.Sleep(14 * time.Second) //commit a couple blocks + r.StartRelayer(ctx, eRep, ibcPath) + + // Send Transaction + amountToSend := int64(1_000) + + gaiaDstAddress := types.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, gaiaUser.Address()) + osmosisDstAddress := types.MustBech32ifyAddressBytes(gaia.Config().Bech32Prefix, osmosisUser.Address()) + + gaiaHeight, err := gaia.Height(ctx) + require.NoError(t, err) + + osmosisHeight, err := osmosis.Height(ctx) + require.NoError(t, err) + + var eg errgroup.Group + var gaiaTx ibc.Tx + + eg.Go(func() error { + gaiaTx, err = gaia.SendIBCTransfer(ctx, gaiaChannel.ChannelID, gaiaUser.KeyName(), ibc.WalletAmount{ + Address: gaiaDstAddress, + Denom: gaia.Config().Denom, + Amount: amountToSend, + }, + ibc.TransferOptions{}, + ) + if err != nil { + return err + } + if err := gaiaTx.Validate(); err != nil { + return err + } + + _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+20, gaiaTx.Packet) + return err + }) + + eg.Go(func() error { + tx, err := osmosis.SendIBCTransfer(ctx, osmosisChannel.ChannelID, osmosisUser.KeyName(), ibc.WalletAmount{ + Address: osmosisDstAddress, + Denom: osmosis.Config().Denom, + Amount: amountToSend, + }, + ibc.TransferOptions{}, + ) + if err != nil { + return err + } + if err := tx.Validate(); err != nil { + return err + } + _, err = testutil.PollForAck(ctx, osmosis, osmosisHeight, osmosisHeight+20, tx.Packet) + return err + }) + + eg.Go(func() error { + tx, err := osmosis.SendIBCTransfer(ctx, osmosisChannel.ChannelID, osmosisUser.KeyName(), ibc.WalletAmount{ + Address: osmosisDstAddress, + Denom: osmosis.Config().Denom, + Amount: amountToSend, + }, + ibc.TransferOptions{}, + ) + if err != nil { + return err + } + if err := tx.Validate(); err != nil { + return err + } + _, err = testutil.PollForAck(ctx, osmosis, osmosisHeight, osmosisHeight+20, tx.Packet) + return err + }) + + eg.Go(func() error { + tx, err := osmosis.SendIBCTransfer(ctx, osmosisChannel.ChannelID, osmosisUser.KeyName(), ibc.WalletAmount{ + Address: osmosisDstAddress, + Denom: osmosis.Config().Denom, + Amount: amountToSend, + }, + ibc.TransferOptions{}, + ) + if err != nil { + return err + } + if err := tx.Validate(); err != nil { + return err + } + _, err = testutil.PollForAck(ctx, osmosis, osmosisHeight, osmosisHeight+20, tx.Packet) + return err + }) + + require.NoError(t, err) + require.NoError(t, eg.Wait()) + + feegrantMsgSigners := map[string][]string{} //chain to list of signers + + for len(processor.PathProcMessageCollector) > 0 { + select { + case curr, ok := <-processor.PathProcMessageCollector: + if ok && curr.Error == nil && curr.SuccessfulTx { + cProv, cosmProv := curr.DestinationChain.(*cosmos.CosmosProvider) + if cosmProv { + chain := cProv.PCfg.ChainID + feegrantInfo, isFeegrantedChain := feegrantedChains[chain] + if isFeegrantedChain && !strings.Contains(cProv.PCfg.KeyDirectory, t.Name()) { + //This would indicate that a parallel test is inserting msgs into the queue. + //We can safely skip over any messages inserted by other test cases. + fmt.Println("Skipping PathProcessorMessageResp from unrelated Parallel test case") + continue + } + + done := cProv.SetSDKContext() + + hash, err := hex.DecodeString(curr.Response.TxHash) + require.Nil(t, err) + txResp, err := TxWithRetry(ctx, cProv.RPCClient, hash) + require.Nil(t, err) + + require.Nil(t, err) + dc := cProv.Cdc.TxConfig.TxDecoder() + tx, err := dc(txResp.Tx) + require.Nil(t, err) + builder, err := cProv.Cdc.TxConfig.WrapTxBuilder(tx) + require.Nil(t, err) + txFinder := builder.(protoTxProvider) + fullTx := txFinder.GetProtoTx() + isFeegrantedMsg := false + + msgs := "" + msgType := "" + for _, m := range fullTx.GetMsgs() { + msgType = types.MsgTypeURL(m) + //We want all IBC transfers (on an open channel/connection) to be feegranted in round robin fashion + if msgType == "/ibc.core.channel.v1.MsgRecvPacket" || msgType == "/ibc.core.channel.v1.MsgAcknowledgement" { + isFeegrantedMsg = true + msgs += msgType + ", " + } else { + msgs += msgType + ", " + } + } + + //It's required that TXs be feegranted in a round robin fashion for this chain and message type + if isFeegrantedChain && isFeegrantedMsg { + fmt.Printf("Msg types: %+v\n", msgs) + signers := fullTx.GetSigners() + require.Equal(t, len(signers), 1) + granter := fullTx.FeeGranter() + + //Feegranter for the TX that was signed on chain must be the relayer chain's configured feegranter + require.Equal(t, feegrantInfo.granter, granter.String()) + require.NotEmpty(t, granter) + + for _, msg := range fullTx.GetMsgs() { + msgType = types.MsgTypeURL(msg) + //We want all IBC transfers (on an open channel/connection) to be feegranted in round robin fashion + if msgType == "/ibc.core.channel.v1.MsgRecvPacket" { + c := msg.(*chantypes.MsgRecvPacket) + appData := c.Packet.GetData() + tokenTransfer := &transfertypes.FungibleTokenPacketData{} + err := tokenTransfer.Unmarshal(appData) + if err == nil { + fmt.Printf("%+v\n", tokenTransfer) + } else { + fmt.Println(string(appData)) + } + } + } + + //Grantee for the TX that was signed on chain must be a configured grantee in the relayer's chain feegrants. + //In addition, the grantee must be used in round robin fashion + //expectedGrantee := nextGrantee(feegrantInfo) + actualGrantee := signers[0].String() + signerList, ok := feegrantMsgSigners[chain] + if ok { + signerList = append(signerList, actualGrantee) + feegrantMsgSigners[chain] = signerList + } else { + feegrantMsgSigners[chain] = []string{actualGrantee} + } + fmt.Printf("Chain: %s, msg type: %s, height: %d, signer: %s, granter: %s\n", chain, msgType, curr.Response.Height, actualGrantee, granter.String()) + } + done() + } + } + default: + fmt.Println("Unknown channel message") + } + } + + for chain, signers := range feegrantMsgSigners { + require.Equal(t, chain, gaia.Config().ChainID) + signerCountMap := map[string]int{} + + for _, signer := range signers { + count, ok := signerCountMap[signer] + if ok { + signerCountMap[signer] = count + 1 + } else { + signerCountMap[signer] = 1 + } + } + + highestCount := 0 + for _, count := range signerCountMap { + if count > highestCount { + highestCount = count + } + } + + //At least one feegranter must have signed a TX + require.GreaterOrEqual(t, highestCount, 1) + + //All of the feegrantees must have signed at least one TX + expectedFeegrantInfo := feegrantedChains[chain] + require.Equal(t, len(signerCountMap), len(expectedFeegrantInfo.grantees)) + + // verify that TXs were signed in a round robin fashion. + // no grantee should have signed more TXs than any other grantee (off by one is allowed). + for signer, count := range signerCountMap { + fmt.Printf("signer %s signed %d feegranted TXs \n", signer, count) + require.LessOrEqual(t, highestCount-count, 1) + } + } + + // Trace IBC Denom + gaiaDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(osmosisChannel.PortID, osmosisChannel.ChannelID, gaia.Config().Denom)) + gaiaIbcDenom := gaiaDenomTrace.IBCDenom() + + osmosisDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(gaiaChannel.PortID, gaiaChannel.ChannelID, osmosis.Config().Denom)) + osmosisIbcDenom := osmosisDenomTrace.IBCDenom() + + // Test destination wallets have increased funds + gaiaIBCBalance, err := osmosis.GetBalance(ctx, gaiaDstAddress, gaiaIbcDenom) + require.NoError(t, err) + require.Equal(t, amountToSend, gaiaIBCBalance) + + osmosisIBCBalance, err := gaia.GetBalance(ctx, osmosisDstAddress, osmosisIbcDenom) + require.NoError(t, err) + require.Equal(t, 3*amountToSend, osmosisIBCBalance) + + // Test grantee still has exact amount expected + gaiaGranteeIBCBalance, err := gaia.GetBalance(ctx, gaiaGranteeAddr, gaia.Config().Denom) + require.NoError(t, err) + require.Equal(t, granteeFundAmount, gaiaGranteeIBCBalance) + + // Test granter has less than they started with, meaning fees came from their account + gaiaGranterIBCBalance, err := gaia.GetBalance(ctx, gaiaGranterAddr, gaia.Config().Denom) + require.NoError(t, err) + require.Less(t, gaiaGranterIBCBalance, fundAmount) + r.StopRelayer(ctx, eRep) +} + +func TxWithRetry(ctx context.Context, client rpcclient.Client, hash []byte) (*ctypes.ResultTx, error) { + var err error + var res *ctypes.ResultTx + if err = retry.Do(func() error { + res, err = client.Tx(ctx, hash, true) + return err + }, retry.Context(ctx), relayer.RtyAtt, relayer.RtyDel, relayer.RtyErr); err != nil { + return res, err + } + + return res, err +} diff --git a/interchaintest/go.mod b/interchaintest/go.mod index 6d4e1f484..6352c1099 100644 --- a/interchaintest/go.mod +++ b/interchaintest/go.mod @@ -3,12 +3,13 @@ module github.com/cosmos/relayer/v2/interchaintest go 1.20 require ( - cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff + cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462 github.com/cometbft/cometbft v0.37.2 github.com/cosmos/cosmos-sdk v0.47.3 + github.com/cosmos/go-bip39 v1.0.0 github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/ibc-go/v7 v7.2.0 - github.com/cosmos/relayer/v2 v2.0.0-00010101000000-000000000000 + github.com/cosmos/relayer/v2 v2.0.0 github.com/docker/docker v24.0.1+incompatible github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 github.com/moby/moby v24.0.2+incompatible @@ -64,7 +65,6 @@ require ( github.com/containerd/containerd v1.6.8 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect - github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/iavl v0.20.0 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect diff --git a/interchaintest/go.sum b/interchaintest/go.sum index 37d2d6154..74c50689d 100644 --- a/interchaintest/go.sum +++ b/interchaintest/go.sum @@ -200,8 +200,8 @@ cosmossdk.io/log v1.1.0 h1:v0ogPHYeTzPcBTcPR1A3j1hkei4pZama8kz8LKlCMv0= cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= -cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff h1:P1ialzTepD1oxdNPYc5N8Eggq3RdejZq3cJs8YYMs9Y= -cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff/go.mod h1:AKzx6Mb544LjJ9RHmGFHjY9rEOLiUAi8I0F727TR0dY= +cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462 h1:g8muUHnXL8vhld2Sjilyhb1UQObc+x9GVuDK43TYZns= +cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462/go.mod h1:4Dd3NLoLYoN90kZ0uyHoTHzVVk9+J0v4HhZRBNTAq2c= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -484,8 +484,8 @@ github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbS github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -507,8 +507,8 @@ github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8c github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= +github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= @@ -520,7 +520,6 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= diff --git a/interchaintest/ica_channel_close_test.go b/interchaintest/ica_channel_close_test.go index b21a41c32..6eac44b64 100644 --- a/interchaintest/ica_channel_close_test.go +++ b/interchaintest/ica_channel_close_test.go @@ -26,8 +26,6 @@ func TestScenarioICAChannelClose(t *testing.T) { t.Skip("skipping in short mode") } - t.Parallel() - client, network := interchaintest.DockerSetup(t) rep := testreporter.NewNopReporter() @@ -93,6 +91,8 @@ func TestScenarioICAChannelClose(t *testing.T) { // BlockDatabaseFile: interchaintest.DefaultBlockDatabaseFilepath(), })) + t.Parallel() + // Fund a user account on chain1 and chain2 const userFunds = int64(10_000_000_000) users := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), userFunds, chain1, chain2) @@ -244,7 +244,7 @@ func TestScenarioICAChannelClose(t *testing.T) { // Wait for ack _, err = cosmos.PollForMessage(ctx, chain1, ir, - c1h, c1h+10, ackFound) + c1h, c1h+25, ackFound) require.NoError(t, err) // Assert that the funds have been received by the user account on chain2 @@ -311,7 +311,7 @@ func TestScenarioICAChannelClose(t *testing.T) { // Wait for channel open confirm _, err = cosmos.PollForMessage(ctx, chain2, ir, - c2h, c2h+30, channelFound) + c2h, c2h+40, channelFound) require.NoError(t, err) // Assert that a new channel has been opened and the same ICA is in use diff --git a/interchaintest/interchain_accounts_test.go b/interchaintest/interchain_accounts_test.go index 0185b2bc2..0ec0a1df5 100644 --- a/interchaintest/interchain_accounts_test.go +++ b/interchaintest/interchain_accounts_test.go @@ -27,8 +27,6 @@ func TestScenarioInterchainAccounts(t *testing.T) { t.Skip("skipping in short mode") } - t.Parallel() - client, network := interchaintest.DockerSetup(t) rep := testreporter.NewNopReporter() @@ -94,6 +92,8 @@ func TestScenarioInterchainAccounts(t *testing.T) { // BlockDatabaseFile: interchaintest.DefaultBlockDatabaseFilepath(), })) + t.Parallel() + // Fund a user account on chain1 and chain2 const userFunds = int64(10_000_000_000) users := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), userFunds, chain1, chain2) diff --git a/interchaintest/misbehaviour_test.go b/interchaintest/misbehaviour_test.go index 2dc8b4656..9c99c5504 100644 --- a/interchaintest/misbehaviour_test.go +++ b/interchaintest/misbehaviour_test.go @@ -35,6 +35,7 @@ import ( "github.com/strangelove-ventures/interchaintest/v7/testreporter" "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" + "go.uber.org/zap" "go.uber.org/zap/zaptest" ) @@ -43,13 +44,13 @@ func TestRelayerMisbehaviourDetection(t *testing.T) { t.Skip() } - t.Parallel() - numVals := 1 numFullNodes := 0 - cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ - {Name: "gaia", Version: "v9.0.0-rc1", NumValidators: &numVals, NumFullNodes: &numFullNodes, ChainConfig: ibc.ChainConfig{ChainID: "chain-a", GasPrices: "0.0uatom"}}, - {Name: "gaia", Version: "v9.0.0-rc1", NumValidators: &numVals, NumFullNodes: &numFullNodes, ChainConfig: ibc.ChainConfig{ChainID: "chain-b", GasPrices: "0.0uatom"}}}, + logger := zaptest.NewLogger(t) + + cf := interchaintest.NewBuiltinChainFactory(logger, []*interchaintest.ChainSpec{ + {Name: "gaia", Version: "v9.0.0-rc1", NumValidators: &numVals, NumFullNodes: &numFullNodes, ChainConfig: ibc.ChainConfig{ChainID: "chain-a", GasPrices: "0.0uatom", Bech32Prefix: "cosmos"}}, + {Name: "gaia", Version: "v9.0.0-rc1", NumValidators: &numVals, NumFullNodes: &numFullNodes, ChainConfig: ibc.ChainConfig{ChainID: "chain-b", GasPrices: "0.0uatom", Bech32Prefix: "cosmos"}}}, ) chains, err := cf.Chains(t.Name()) @@ -86,6 +87,8 @@ func TestRelayerMisbehaviourDetection(t *testing.T) { SkipPathCreation: false, })) + t.Parallel() + t.Cleanup(func() { _ = ic.Close() }) @@ -186,6 +189,7 @@ func TestRelayerMisbehaviourDetection(t *testing.T) { ClientMessage: protoAny, Signer: user.FormattedAddress(), } + logger.Info("Misbehaviour test, MsgUpdateClient", zap.String("Signer", user.FormattedAddress())) resp, err := cosmos.BroadcastTx(ctx, b, user, msg) require.NoError(t, err) diff --git a/interchaintest/path_filter_test.go b/interchaintest/path_filter_test.go index 1ec706a80..3ef7b9215 100644 --- a/interchaintest/path_filter_test.go +++ b/interchaintest/path_filter_test.go @@ -21,7 +21,6 @@ import ( // TestScenarioPathFilterAllow tests the channel allowlist func TestScenarioPathFilterAllow(t *testing.T) { - t.Parallel() ctx := context.Background() nv := 1 @@ -43,6 +42,8 @@ func TestScenarioPathFilterAllow(t *testing.T) { InitialBlockHistory: 100, }).Build(t, nil, "") + t.Parallel() + // Prep Interchain const ibcPath = "gaia-osmosis" ic := interchaintest.NewInterchain(). @@ -167,7 +168,6 @@ func TestScenarioPathFilterAllow(t *testing.T) { // TestScenarioPathFilterDeny tests the channel denylist func TestScenarioPathFilterDeny(t *testing.T) { - t.Parallel() ctx := context.Background() nv := 1 @@ -216,6 +216,8 @@ func TestScenarioPathFilterDeny(t *testing.T) { SkipPathCreation: false, })) + t.Parallel() + // Get Channel ID gaiaChans, err := r.GetChannels(ctx, eRep, gaia.Config().ChainID) require.NoError(t, err) diff --git a/interchaintest/relayer.go b/interchaintest/relayer.go index d06c0e1b8..8641830bc 100644 --- a/interchaintest/relayer.go +++ b/interchaintest/relayer.go @@ -9,6 +9,7 @@ import ( "testing" "github.com/cosmos/cosmos-sdk/crypto/keyring" + "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/relayer/v2/cmd" "github.com/cosmos/relayer/v2/internal/relayertest" "github.com/cosmos/relayer/v2/relayer" @@ -37,6 +38,9 @@ func NewRelayer( t *testing.T, config RelayerConfig, ) ibc.Relayer { + //prevent incorrect bech32 address prefixed addresses when calling AccAddress.String() + types.SetAddrCacheEnabled(false) + r := &Relayer{ t: t, home: t.TempDir(), diff --git a/interchaintest/stride/stride_icq_test.go b/interchaintest/stride/stride_icq_test.go index 00a42c609..ac9a067e4 100644 --- a/interchaintest/stride/stride_icq_test.go +++ b/interchaintest/stride/stride_icq_test.go @@ -16,6 +16,7 @@ import ( "github.com/strangelove-ventures/interchaintest/v7/testreporter" "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" + "go.uber.org/zap" "go.uber.org/zap/zaptest" "golang.org/x/sync/errgroup" ) @@ -26,9 +27,6 @@ func TestScenarioStrideICAandICQ(t *testing.T) { if testing.Short() { t.Skip() } - - t.Parallel() - client, network := interchaintest.DockerSetup(t) rep := testreporter.NewNopReporter() @@ -38,9 +36,10 @@ func TestScenarioStrideICAandICQ(t *testing.T) { nf := 0 nv := 1 + logger := zaptest.NewLogger(t) // Define chains involved in test - cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ + cf := interchaintest.NewBuiltinChainFactory(logger, []*interchaintest.ChainSpec{ { Name: "stride", ChainName: "stride", @@ -113,10 +112,15 @@ func TestScenarioStrideICAandICQ(t *testing.T) { SkipPathCreation: false, })) + + t.Parallel() + t.Cleanup(func() { _ = ic.Close() }) + logger.Info("TestScenarioStrideICAandICQ [1]") + // Fund user accounts, so we can query balances and make assertions. const userFunds = int64(10_000_000_000_000) users := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), userFunds, stride, gaia) @@ -128,6 +132,8 @@ func TestScenarioStrideICAandICQ(t *testing.T) { err = r.StartRelayer(ctx, eRep, pathStrideGaia) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [2]") + t.Cleanup( func() { err := r.StopRelayer(ctx, eRep) @@ -147,6 +153,8 @@ func TestScenarioStrideICAandICQ(t *testing.T) { strideAdminAddr, err := types.Bech32ifyAddressBytes(strideCfg.Bech32Prefix, strideAdminAddrBytes) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [3]") + err = stride.SendFunds(ctx, interchaintest.FaucetAccountKeyName, ibc.WalletAmount{ Address: strideAdminAddr, Amount: userFunds, @@ -154,12 +162,16 @@ func TestScenarioStrideICAandICQ(t *testing.T) { }) require.NoError(t, err, "failed to fund stride admin account") + logger.Info("TestScenarioStrideICAandICQ [4]") + // get native chain user addresses strideAddr := strideUser.FormattedAddress() require.NotEmpty(t, strideAddr) + logger.Info("TestScenarioStrideICAandICQ [5]", zap.String("stride addr", strideAddr)) gaiaAddress := gaiaUser.FormattedAddress() require.NotEmpty(t, gaiaAddress) + logger.Info("TestScenarioStrideICAandICQ [6]", zap.String("gaia addr", gaiaAddress)) // get ibc paths gaiaConns, err := r.GetConnections(ctx, eRep, gaiaCfg.ChainID) @@ -168,6 +180,8 @@ func TestScenarioStrideICAandICQ(t *testing.T) { gaiaChans, err := r.GetChannels(ctx, eRep, gaiaCfg.ChainID) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [7]") + atomIBCDenom := transfertypes.ParseDenomTrace( transfertypes.GetPrefixedDenom( gaiaChans[0].Counterparty.PortID, @@ -182,6 +196,8 @@ func TestScenarioStrideICAandICQ(t *testing.T) { gaiaHeight, err := gaia.Height(ctx) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [8]") + // Fund stride user with ibc denom atom tx, err := gaia.SendIBCTransfer(ctx, gaiaChans[0].ChannelID, gaiaUser.KeyName(), ibc.WalletAmount{ Amount: 1_000_000_000_000, @@ -190,13 +206,19 @@ func TestScenarioStrideICAandICQ(t *testing.T) { }, ibc.TransferOptions{}) require.NoError(t, err) - _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+10, tx.Packet) + logger.Info("TestScenarioStrideICAandICQ [9]") + + _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+40, tx.Packet) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [10]") + require.NoError(t, eg.Wait()) + logger.Info("TestScenarioStrideICAandICQ [11]") + // Register gaia host zone - _, err = strideFullNode.ExecTx(ctx, StrideAdminAccount, + res, err := strideFullNode.ExecTx(ctx, StrideAdminAccount, "stakeibc", "register-host-zone", gaiaConns[0].Counterparty.ConnectionId, gaiaCfg.Denom, gaiaCfg.Bech32Prefix, atomIBCDenom, gaiaChans[0].Counterparty.ChannelID, "1", @@ -204,30 +226,40 @@ func TestScenarioStrideICAandICQ(t *testing.T) { ) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [12]", zap.String("execTx res", res)) + gaiaHeight, err = gaia.Height(ctx) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [13]") + // Wait for the ICA accounts to be setup // Poll for 4 MsgChannelOpenConfirm with timeout after 15 blocks. chanCount := 0 _, err = cosmos.PollForMessage( - ctx, gaia, gaiaCfg.EncodingConfig.InterfaceRegistry, gaiaHeight, gaiaHeight+15, + ctx, gaia, gaiaCfg.EncodingConfig.InterfaceRegistry, gaiaHeight, gaiaHeight+40, func(found *chantypes.MsgChannelOpenConfirm) bool { chanCount++; return chanCount == 4 }, ) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [14]") + // Get validator address gaiaVal1Address, err := gaia.Validators[0].KeyBech32(ctx, "validator", "val") require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [15]") + // Add gaia validator - _, err = strideFullNode.ExecTx(ctx, StrideAdminAccount, + res, err = strideFullNode.ExecTx(ctx, StrideAdminAccount, "stakeibc", "add-validator", gaiaCfg.ChainID, "gval1", gaiaVal1Address, "10", "5", ) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [16]", zap.String("execTx res", res)) + var gaiaHostZone HostZoneWrapper // query gaia host zone @@ -238,20 +270,31 @@ func TestScenarioStrideICAandICQ(t *testing.T) { err = json.Unmarshal(stdout, &gaiaHostZone) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [17]", zap.String("execQuery res", string(stdout))) + // Liquid stake some atom - _, err = strideFullNode.ExecTx(ctx, strideUser.KeyName(), + res, err = strideFullNode.ExecTx(ctx, strideUser.KeyName(), "stakeibc", "liquid-stake", "1000000000000", gaiaCfg.Denom, ) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [18]", zap.String("execTx res", res)) + strideHeight, err := stride.Height(ctx) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [19]") + // Poll for MsgSubmitQueryResponse with timeout after 20 blocks - _, err = cosmos.PollForMessage( - ctx, stride, strideCfg.EncodingConfig.InterfaceRegistry, strideHeight, strideHeight+20, + resp, err := cosmos.PollForMessage( + ctx, stride, strideCfg.EncodingConfig.InterfaceRegistry, strideHeight, strideHeight+40, func(found *rlystride.MsgSubmitQueryResponse) bool { return true }, ) + + logger.Info("TestScenarioStrideICAandICQ [20]", zap.String("[poll for msg] resp", resp.String())) + if err != nil { + logger.Info("error poll: " + err.Error()) + } require.NoError(t, err) } diff --git a/interchaintest/tendermint_v0.37_boundary_test.go b/interchaintest/tendermint_v0.37_boundary_test.go index c7972c1ac..04a7a8c47 100644 --- a/interchaintest/tendermint_v0.37_boundary_test.go +++ b/interchaintest/tendermint_v0.37_boundary_test.go @@ -18,8 +18,6 @@ func TestScenarioTendermint37Boundary(t *testing.T) { t.Skip("skipping in short mode") } - t.Parallel() - nv := 1 nf := 0 @@ -58,6 +56,8 @@ func TestScenarioTendermint37Boundary(t *testing.T) { }) r := rf.Build(t, client, network) + t.Parallel() + ic := interchaintest.NewInterchain(). AddChain(chain). AddChain(counterpartyChain). diff --git a/relayer/chains/cosmos/feegrant.go b/relayer/chains/cosmos/feegrant.go new file mode 100644 index 000000000..92b14b6d3 --- /dev/null +++ b/relayer/chains/cosmos/feegrant.go @@ -0,0 +1,529 @@ +package cosmos + +import ( + "context" + "errors" + "fmt" + "regexp" + "strconv" + "time" + + "github.com/cosmos/cosmos-sdk/crypto/hd" + "github.com/cosmos/cosmos-sdk/types" + sdk "github.com/cosmos/cosmos-sdk/types" + txtypes "github.com/cosmos/cosmos-sdk/types/tx" + "github.com/cosmos/cosmos-sdk/x/feegrant" +) + +// Searches for valid, existing BasicAllowance grants for the ChainClient's configured Feegranter. +// Expired grants are ignored. Other grant types are ignored. +func (cc *CosmosProvider) GetValidBasicGrants() ([]*feegrant.Grant, error) { + validGrants := []*feegrant.Grant{} + + if cc.PCfg.FeeGrants == nil { + return nil, errors.New("no feegrant configuration for chainclient") + } + + keyNameOrAddress := cc.PCfg.FeeGrants.GranterKey + address, err := cc.AccountFromKeyOrAddress(keyNameOrAddress) + if err != nil { + return nil, err + } + + encodedAddr := cc.MustEncodeAccAddr(address) + grants, err := cc.QueryFeegrantsByGranter(encodedAddr, nil) + if err != nil { + return nil, err + } + + for _, grant := range grants { + switch grant.Allowance.TypeUrl { + case "/cosmos.feegrant.v1beta1.BasicAllowance": + //var feegrantAllowance feegrant.BasicAllowance + var feegrantAllowance feegrant.FeeAllowanceI + e := cc.Cdc.InterfaceRegistry.UnpackAny(grant.Allowance, &feegrantAllowance) + if e != nil { + return nil, e + } + //feegrantAllowance := grant.Allowance.GetCachedValue().(*feegrant.BasicAllowance) + if isValidGrant(feegrantAllowance.(*feegrant.BasicAllowance)) { + validGrants = append(validGrants, grant) + } + default: + fmt.Printf("Ignoring grant type %s for granter %s and grantee %s\n", grant.Allowance.TypeUrl, grant.Granter, grant.Grantee) + } + } + + return validGrants, nil +} + +// Searches for valid, existing BasicAllowance grants for the given grantee & ChainClient's configured granter. +// Expired grants are ignored. Other grant types are ignored. +func (cc *CosmosProvider) GetGranteeValidBasicGrants(granteeKey string) ([]*feegrant.Grant, error) { + validGrants := []*feegrant.Grant{} + + if cc.PCfg.FeeGrants == nil { + return nil, errors.New("no feegrant configuration for chainclient") + } + + granterAddr, err := cc.AccountFromKeyOrAddress(cc.PCfg.FeeGrants.GranterKey) + if err != nil { + return nil, err + } + granterEncodedAddr := cc.MustEncodeAccAddr(granterAddr) + + address, err := cc.AccountFromKeyOrAddress(granteeKey) + if err != nil { + return nil, err + } + + encodedAddr := cc.MustEncodeAccAddr(address) + grants, err := cc.QueryFeegrantsByGrantee(encodedAddr, nil) + if err != nil { + return nil, err + } + + for _, grant := range grants { + if grant.Granter == granterEncodedAddr { + switch grant.Allowance.TypeUrl { + case "/cosmos.feegrant.v1beta1.BasicAllowance": + var feegrantAllowance feegrant.FeeAllowanceI + e := cc.Cdc.InterfaceRegistry.UnpackAny(grant.Allowance, &feegrantAllowance) + if e != nil { + return nil, e + } + if isValidGrant(feegrantAllowance.(*feegrant.BasicAllowance)) { + validGrants = append(validGrants, grant) + } + default: + fmt.Printf("Ignoring grant type %s for granter %s and grantee %s\n", grant.Allowance.TypeUrl, grant.Granter, grant.Grantee) + } + } + } + + return validGrants, nil +} + +// True if the grant has not expired and all coins have positive balances, false otherwise +// Note: technically, any single coin with a positive balance makes the grant usable +func isValidGrant(a *feegrant.BasicAllowance) bool { + //grant expired due to time limit + if a.Expiration != nil && time.Now().After(*a.Expiration) { + return false + } + + //feegrant without a spending limit specified allows unlimited fees to be spent + valid := true + + //spending limit is specified, check if there are funds remaining on every coin + if a.SpendLimit != nil { + for _, coin := range a.SpendLimit { + if coin.Amount.LTE(types.ZeroInt()) { + valid = false + } + } + } + + return valid +} + +func (cc *CosmosProvider) ConfigureFeegrants(numGrantees int, granterKey string) error { + cc.PCfg.FeeGrants = &FeeGrantConfiguration{ + GranteesWanted: numGrantees, + GranterKey: granterKey, + ManagedGrantees: []string{}, + } + + return cc.PCfg.FeeGrants.AddGranteeKeys(cc) +} + +func (cc *CosmosProvider) ConfigureWithGrantees(grantees []string, granterKey string) error { + if len(grantees) == 0 { + return errors.New("list of grantee names cannot be empty") + } + + cc.PCfg.FeeGrants = &FeeGrantConfiguration{ + GranteesWanted: len(grantees), + GranterKey: granterKey, + ManagedGrantees: grantees, + } + + for _, newGrantee := range grantees { + if !cc.KeyExists(newGrantee) { + //Add another key to the chain client for the grantee + _, err := cc.AddKey(newGrantee, sdk.CoinType, string(hd.Secp256k1Type)) + if err != nil { + return err + } + } + } + + return nil +} + +func (fg *FeeGrantConfiguration) AddGranteeKeys(cc *CosmosProvider) error { + for i := len(fg.ManagedGrantees); i < fg.GranteesWanted; i++ { + newGranteeIdx := strconv.Itoa(len(fg.ManagedGrantees) + 1) + newGrantee := "grantee" + newGranteeIdx + + //Add another key to the chain client for the grantee + _, err := cc.AddKey(newGrantee, sdk.CoinType, string(hd.Secp256k1Type)) + if err != nil { + return err + } + + fg.ManagedGrantees = append(fg.ManagedGrantees, newGrantee) + } + + return nil +} + +// Get the feegrant params to use for the next TX. If feegrants are not configured for the chain client, the default key will be used for TX signing. +// Otherwise, a configured feegrantee will be chosen for TX signing in round-robin fashion. +func (cc *CosmosProvider) GetTxFeeGrant() (txSignerKey string, feeGranterKey string) { + //By default, we should sign TXs with the ChainClient's default key + txSignerKey = cc.PCfg.Key + + if cc.PCfg.FeeGrants == nil { + fmt.Printf("cc.Config.FeeGrants == nil\n") + return + } + + // Use the ChainClient's configured Feegranter key for the next TX. + feeGranterKey = cc.PCfg.FeeGrants.GranterKey + + // The ChainClient Feegrant configuration has never been verified on chain. + // Don't use Feegrants as it could cause the TX to fail on chain. + if feeGranterKey == "" || cc.PCfg.FeeGrants.BlockHeightVerified <= 0 { + fmt.Printf("cc.Config.FeeGrants.BlockHeightVerified <= 0\n") + feeGranterKey = "" + return + } + + //Pick the next managed grantee in the list as the TX signer + lastGranteeIdx := cc.PCfg.FeeGrants.GranteeLastSignerIndex + + if lastGranteeIdx >= 0 && lastGranteeIdx <= len(cc.PCfg.FeeGrants.ManagedGrantees)-1 { + txSignerKey = cc.PCfg.FeeGrants.ManagedGrantees[lastGranteeIdx] + cc.PCfg.FeeGrants.GranteeLastSignerIndex = cc.PCfg.FeeGrants.GranteeLastSignerIndex + 1 + + //Restart the round robin at 0 if we reached the end of the list of grantees + if cc.PCfg.FeeGrants.GranteeLastSignerIndex == len(cc.PCfg.FeeGrants.ManagedGrantees) { + cc.PCfg.FeeGrants.GranteeLastSignerIndex = 0 + } + } + + return +} + +// Ensure all Basic Allowance grants are in place for the given ChainClient. +// This will query (RPC) for existing grants and create new grants if they don't exist. +func (cc *CosmosProvider) EnsureBasicGrants(ctx context.Context, memo string) (*sdk.TxResponse, error) { + if cc.PCfg.FeeGrants == nil { + return nil, errors.New("ChainClient must be a FeeGranter to establish grants") + } else if len(cc.PCfg.FeeGrants.ManagedGrantees) == 0 { + return nil, errors.New("ChainClient is a FeeGranter, but is not managing any Grantees") + } + + granterKey := cc.PCfg.FeeGrants.GranterKey + if granterKey == "" { + granterKey = cc.PCfg.Key + } + + granterAcc, err := cc.GetKeyAddressForKey(granterKey) + if err != nil { + fmt.Printf("Retrieving key '%s': ChainClient FeeGranter misconfiguration: %s", granterKey, err.Error()) + return nil, err + } + + granterAddr, granterAddrErr := cc.EncodeBech32AccAddr(granterAcc) + if granterAddrErr != nil { + return nil, granterAddrErr + } + + validGrants, err := cc.GetValidBasicGrants() + failedLookupGrantsByGranter := err != nil + + msgs := []sdk.Msg{} + numGrantees := len(cc.PCfg.FeeGrants.ManagedGrantees) + grantsNeeded := 0 + + for _, grantee := range cc.PCfg.FeeGrants.ManagedGrantees { + + //Searching for all grants with the given granter failed, so we will search by the grantee. + //Reason this lookup sometimes fails is because the 'Search by granter' request is in SDK v0.46+ + if failedLookupGrantsByGranter { + validGrants, err = cc.GetGranteeValidBasicGrants(grantee) + if err != nil { + return nil, err + } + } + + granteeAcc, err := cc.GetKeyAddressForKey(grantee) + if err != nil { + fmt.Printf("Misconfiguration for grantee key %s. Error: %s\n", grantee, err.Error()) + return nil, err + } + + granteeAddr, granteeAddrErr := cc.EncodeBech32AccAddr(granteeAcc) + if granteeAddrErr != nil { + return nil, granteeAddrErr + } + + hasGrant := false + for _, basicGrant := range validGrants { + if basicGrant.Grantee == granteeAddr { + fmt.Printf("Valid grant found for granter %s, grantee %s\n", basicGrant.Granter, basicGrant.Grantee) + hasGrant = true + } + } + + if !hasGrant { + grantsNeeded += 1 + fmt.Printf("Grant will be created on chain for granter %s and grantee %s\n", granterAddr, granteeAddr) + grantMsg, err := cc.getMsgGrantBasicAllowance(granterAcc, granteeAcc) + if err != nil { + return nil, err + } + msgs = append(msgs, grantMsg) + } + } + + if len(msgs) > 0 { + //Make sure the granter has funds on chain, if not, we can't even pay TX fees. + //Also, depending how the config was initialized, the key might only exist locally, not on chain. + balance, err := cc.QueryBalanceWithAddress(ctx, granterAddr) + if err != nil { + return nil, err + } + + //Check to ensure the feegranter has funds on chain that can pay TX fees + weBroke := true + gasDenom, err := getGasTokenDenom(cc.PCfg.GasPrices) + if err != nil { + return nil, err + } + + for _, coin := range balance { + if coin.Denom == gasDenom { + if coin.Amount.GT(sdk.ZeroInt()) { + weBroke = false + } + } + } + + //Feegranter can pay TX fees + if !weBroke { + txResp, err := cc.SubmitTxAwaitResponse(ctx, msgs, memo, 0, granterKey) + if err != nil { + fmt.Printf("Error: SubmitTxAwaitResponse: %s", err.Error()) + return nil, err + } else if txResp != nil && txResp.TxResponse != nil && txResp.TxResponse.Code != 0 { + fmt.Printf("Submitting grants for granter %s failed. Code: %d, TX hash: %s\n", granterKey, txResp.TxResponse.Code, txResp.TxResponse.TxHash) + return nil, fmt.Errorf("could not configure feegrant for granter %s", granterKey) + } + + fmt.Printf("TX succeeded, %d new grants configured, %d grants already in place. TX hash: %s\n", grantsNeeded, numGrantees-grantsNeeded, txResp.TxResponse.TxHash) + return txResp.TxResponse, err + } else { + return nil, fmt.Errorf("granter %s does not have funds on chain in fee denom '%s' (no TXs submitted)", granterKey, gasDenom) + } + } else { + fmt.Printf("All grantees (%d total) already had valid feegrants. Feegrant configuration verified.\n", numGrantees) + } + + return nil, nil +} + +func getGasTokenDenom(gasPrices string) (string, error) { + r := regexp.MustCompile(`(?P[0-9.]*)(?P.*)`) + submatches := r.FindStringSubmatch(gasPrices) + if len(submatches) != 3 { + return "", errors.New("could not find fee denom") + } + + return submatches[2], nil +} + +// GrantBasicAllowance Send a feegrant with the basic allowance type. +// This function does not check for existing feegrant authorizations. +// TODO: check for existing authorizations prior to attempting new one. +func (cc *CosmosProvider) GrantAllGranteesBasicAllowance(ctx context.Context, gas uint64) error { + if cc.PCfg.FeeGrants == nil { + return errors.New("ChainClient must be a FeeGranter to establish grants") + } else if len(cc.PCfg.FeeGrants.ManagedGrantees) == 0 { + return errors.New("ChainClient is a FeeGranter, but is not managing any Grantees") + } + + granterKey := cc.PCfg.FeeGrants.GranterKey + if granterKey == "" { + granterKey = cc.PCfg.Key + } + granterAddr, err := cc.GetKeyAddressForKey(granterKey) + if err != nil { + fmt.Printf("ChainClient FeeGranter misconfiguration: %s", err.Error()) + return err + } + + for _, grantee := range cc.PCfg.FeeGrants.ManagedGrantees { + granteeAddr, err := cc.GetKeyAddressForKey(grantee) + + if err != nil { + fmt.Printf("Misconfiguration for grantee %s. Error: %s\n", grantee, err.Error()) + return err + } + + grantResp, err := cc.GrantBasicAllowance(ctx, granterAddr, granterKey, granteeAddr, gas) + if err != nil { + return err + } else if grantResp != nil && grantResp.TxResponse != nil && grantResp.TxResponse.Code != 0 { + fmt.Printf("grantee %s and granter %s. Code: %d\n", granterAddr.String(), granteeAddr.String(), grantResp.TxResponse.Code) + return fmt.Errorf("could not configure feegrant for granter %s and grantee %s", granterAddr.String(), granteeAddr.String()) + } + } + return nil +} + +// GrantBasicAllowance Send a feegrant with the basic allowance type. +// This function does not check for existing feegrant authorizations. +// TODO: check for existing authorizations prior to attempting new one. +func (cc *CosmosProvider) GrantAllGranteesBasicAllowanceWithExpiration(ctx context.Context, gas uint64, expiration time.Time) error { + if cc.PCfg.FeeGrants == nil { + return errors.New("ChainClient must be a FeeGranter to establish grants") + } else if len(cc.PCfg.FeeGrants.ManagedGrantees) == 0 { + return errors.New("ChainClient is a FeeGranter, but is not managing any Grantees") + } + + granterKey := cc.PCfg.FeeGrants.GranterKey + if granterKey == "" { + granterKey = cc.PCfg.Key + } + + granterAddr, err := cc.GetKeyAddressForKey(granterKey) + if err != nil { + fmt.Printf("ChainClient FeeGranter misconfiguration: %s", err.Error()) + return err + } + + for _, grantee := range cc.PCfg.FeeGrants.ManagedGrantees { + granteeAddr, err := cc.GetKeyAddressForKey(grantee) + + if err != nil { + fmt.Printf("Misconfiguration for grantee %s. Error: %s\n", grantee, err.Error()) + return err + } + + grantResp, err := cc.GrantBasicAllowanceWithExpiration(ctx, granterAddr, granterKey, granteeAddr, gas, expiration) + if err != nil { + return err + } else if grantResp != nil && grantResp.TxResponse != nil && grantResp.TxResponse.Code != 0 { + fmt.Printf("grantee %s and granter %s. Code: %d\n", granterAddr.String(), granteeAddr.String(), grantResp.TxResponse.Code) + return fmt.Errorf("could not configure feegrant for granter %s and grantee %s", granterAddr.String(), granteeAddr.String()) + } + } + return nil +} + +func (cc *CosmosProvider) getMsgGrantBasicAllowanceWithExpiration(granter sdk.AccAddress, grantee sdk.AccAddress, expiration time.Time) (sdk.Msg, error) { + //thirtyMin := time.Now().Add(30 * time.Minute) + feeGrantBasic := &feegrant.BasicAllowance{ + Expiration: &expiration, + } + msgGrantAllowance, err := feegrant.NewMsgGrantAllowance(feeGrantBasic, granter, grantee) + if err != nil { + fmt.Printf("Error: GrantBasicAllowance.NewMsgGrantAllowance: %s", err.Error()) + return nil, err + } + + //Due to the way Lens configures the SDK, addresses will have the 'cosmos' prefix which + //doesn't necessarily match the chain prefix of the ChainClient config. So calling the internal + //'NewMsgGrantAllowance' function will return the *incorrect* 'cosmos' prefixed bech32 address. + + //Update the Grant to ensure the correct chain-specific granter is set + granterAddr, granterAddrErr := cc.EncodeBech32AccAddr(granter) + if granterAddrErr != nil { + fmt.Printf("EncodeBech32AccAddr: %s", granterAddrErr.Error()) + return nil, granterAddrErr + } + + //Update the Grant to ensure the correct chain-specific grantee is set + granteeAddr, granteeAddrErr := cc.EncodeBech32AccAddr(grantee) + if granteeAddrErr != nil { + fmt.Printf("EncodeBech32AccAddr: %s", granteeAddrErr.Error()) + return nil, granteeAddrErr + } + + //override the 'cosmos' prefixed bech32 addresses with the correct chain prefix + msgGrantAllowance.Grantee = granteeAddr + msgGrantAllowance.Granter = granterAddr + + return msgGrantAllowance, nil +} + +func (cc *CosmosProvider) getMsgGrantBasicAllowance(granter sdk.AccAddress, grantee sdk.AccAddress) (sdk.Msg, error) { + //thirtyMin := time.Now().Add(30 * time.Minute) + feeGrantBasic := &feegrant.BasicAllowance{ + //Expiration: &thirtyMin, + } + msgGrantAllowance, err := feegrant.NewMsgGrantAllowance(feeGrantBasic, granter, grantee) + if err != nil { + fmt.Printf("Error: GrantBasicAllowance.NewMsgGrantAllowance: %s", err.Error()) + return nil, err + } + + //Due to the way Lens configures the SDK, addresses will have the 'cosmos' prefix which + //doesn't necessarily match the chain prefix of the ChainClient config. So calling the internal + //'NewMsgGrantAllowance' function will return the *incorrect* 'cosmos' prefixed bech32 address. + + //Update the Grant to ensure the correct chain-specific granter is set + granterAddr, granterAddrErr := cc.EncodeBech32AccAddr(granter) + if granterAddrErr != nil { + fmt.Printf("EncodeBech32AccAddr: %s", granterAddrErr.Error()) + return nil, granterAddrErr + } + + //Update the Grant to ensure the correct chain-specific grantee is set + granteeAddr, granteeAddrErr := cc.EncodeBech32AccAddr(grantee) + if granteeAddrErr != nil { + fmt.Printf("EncodeBech32AccAddr: %s", granteeAddrErr.Error()) + return nil, granteeAddrErr + } + + //override the 'cosmos' prefixed bech32 addresses with the correct chain prefix + msgGrantAllowance.Grantee = granteeAddr + msgGrantAllowance.Granter = granterAddr + + return msgGrantAllowance, nil +} + +func (cc *CosmosProvider) GrantBasicAllowance(ctx context.Context, granter sdk.AccAddress, granterKeyName string, grantee sdk.AccAddress, gas uint64) (*txtypes.GetTxResponse, error) { + msgGrantAllowance, err := cc.getMsgGrantBasicAllowance(granter, grantee) + if err != nil { + return nil, err + } + + msgs := []sdk.Msg{msgGrantAllowance} + txResp, err := cc.SubmitTxAwaitResponse(ctx, msgs, "", gas, granterKeyName) + if err != nil { + fmt.Printf("Error: GrantBasicAllowance.SubmitTxAwaitResponse: %s", err.Error()) + return nil, err + } + + return txResp, nil +} + +func (cc *CosmosProvider) GrantBasicAllowanceWithExpiration(ctx context.Context, granter sdk.AccAddress, granterKeyName string, grantee sdk.AccAddress, gas uint64, expiration time.Time) (*txtypes.GetTxResponse, error) { + msgGrantAllowance, err := cc.getMsgGrantBasicAllowanceWithExpiration(granter, grantee, expiration) + if err != nil { + return nil, err + } + + msgs := []sdk.Msg{msgGrantAllowance} + txResp, err := cc.SubmitTxAwaitResponse(ctx, msgs, "", gas, granterKeyName) + if err != nil { + fmt.Printf("Error: GrantBasicAllowance.SubmitTxAwaitResponse: %s", err.Error()) + return nil, err + } + + return txResp, nil +} diff --git a/relayer/chains/cosmos/grpc_query.go b/relayer/chains/cosmos/grpc_query.go index dec0c84a8..33f274e8d 100644 --- a/relayer/chains/cosmos/grpc_query.go +++ b/relayer/chains/cosmos/grpc_query.go @@ -177,7 +177,7 @@ func (cc *CosmosProvider) TxServiceBroadcast(ctx context.Context, req *tx.Broadc wg.Add(1) - if err := cc.broadcastTx(ctx, req.TxBytes, nil, nil, ctx, blockTimeout, callback); err != nil { + if err := cc.broadcastTx(ctx, req.TxBytes, nil, nil, ctx, blockTimeout, []func(*provider.RelayerTxResponse, error){callback}); err != nil { return nil, err } diff --git a/relayer/chains/cosmos/keys.go b/relayer/chains/cosmos/keys.go index 0ccdd0938..858f77505 100644 --- a/relayer/chains/cosmos/keys.go +++ b/relayer/chains/cosmos/keys.go @@ -192,8 +192,8 @@ func (cc *CosmosProvider) ExportPrivKeyArmor(keyName string) (armor string, err } // GetKeyAddress returns the account address representation for the currently configured key. -func (cc *CosmosProvider) GetKeyAddress() (sdk.AccAddress, error) { - info, err := cc.Keybase.Key(cc.PCfg.Key) +func (cc *CosmosProvider) GetKeyAddress(key string) (sdk.AccAddress, error) { + info, err := cc.Keybase.Key(key) if err != nil { return nil, err } @@ -219,3 +219,34 @@ func CreateMnemonic() (string, error) { func (cc *CosmosProvider) EncodeBech32AccAddr(addr sdk.AccAddress) (string, error) { return sdk.Bech32ifyAddressBytes(cc.PCfg.AccountPrefix, addr) } + +func (cc *CosmosProvider) DecodeBech32AccAddr(addr string) (sdk.AccAddress, error) { + return sdk.GetFromBech32(addr, cc.PCfg.AccountPrefix) +} + +func (cc *CosmosProvider) GetKeyAddressForKey(key string) (sdk.AccAddress, error) { + info, err := cc.Keybase.Key(key) + if err != nil { + return nil, err + } + return info.GetAddress() +} + +func (cc *CosmosProvider) KeyFromKeyOrAddress(keyOrAddress string) (string, error) { + switch { + case keyOrAddress == "": + return cc.PCfg.Key, nil + case cc.KeyExists(keyOrAddress): + return keyOrAddress, nil + default: + acc, err := cc.DecodeBech32AccAddr(keyOrAddress) + if err != nil { + return "", err + } + kr, err := cc.Keybase.KeyByAddress(acc) + if err != nil { + return "", err + } + return kr.Name, nil + } +} diff --git a/relayer/chains/cosmos/log.go b/relayer/chains/cosmos/log.go index 9008e58d5..f6e6564a0 100644 --- a/relayer/chains/cosmos/log.go +++ b/relayer/chains/cosmos/log.go @@ -7,7 +7,9 @@ import ( "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" typestx "github.com/cosmos/cosmos-sdk/types/tx" + feetypes "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/types" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" chantypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" "github.com/cosmos/relayer/v2/relayer/provider" @@ -162,6 +164,11 @@ func getFeePayer(tx *typestx.Tx) string { case *clienttypes.MsgUpdateClient: // Same failure mode as MsgCreateClient. return firstMsg.Signer + case *clienttypes.MsgSubmitMisbehaviour: + // Same failure mode as MsgCreateClient. + return firstMsg.Signer + case *feetypes.MsgRegisterCounterpartyPayee: + return firstMsg.Relayer default: return firstMsg.GetSigners()[0].String() } diff --git a/relayer/chains/cosmos/msg.go b/relayer/chains/cosmos/msg.go index 6f0dfeb14..ddd5a770d 100644 --- a/relayer/chains/cosmos/msg.go +++ b/relayer/chains/cosmos/msg.go @@ -11,12 +11,15 @@ import ( ) type CosmosMessage struct { - Msg sdk.Msg + Msg sdk.Msg + SetSigner func(string) //callback to update the Msg Signer field + FeegrantDisabled bool //marks whether this message type should ALWAYS disable feegranting (use the default signer) } -func NewCosmosMessage(msg sdk.Msg) provider.RelayerMessage { +func NewCosmosMessage(msg sdk.Msg, optionalSetSigner func(string)) provider.RelayerMessage { return CosmosMessage{ - Msg: msg, + Msg: msg, + SetSigner: optionalSetSigner, } } diff --git a/relayer/chains/cosmos/provider.go b/relayer/chains/cosmos/provider.go index 505b26782..c33743faf 100644 --- a/relayer/chains/cosmos/provider.go +++ b/relayer/chains/cosmos/provider.go @@ -58,6 +58,23 @@ type CosmosProviderConfig struct { Broadcast provider.BroadcastMode `json:"broadcast-mode" yaml:"broadcast-mode"` MinLoopDuration time.Duration `json:"min-loop-duration" yaml:"min-loop-duration"` ExtensionOptions []provider.ExtensionOption `json:"extension-options" yaml:"extension-options"` + + //If FeeGrantConfiguration is set, TXs submitted by the ChainClient will be signed by the FeeGrantees in a round-robin fashion by default. + FeeGrants *FeeGrantConfiguration `json:"feegrants" yaml:"feegrants"` +} + +// By default, TXs will be signed by the feegrantees 'ManagedGrantees' keys in a round robin fashion. +// Clients can use other signing keys by invoking 'tx.SendMsgsWith' and specifying the signing key. +type FeeGrantConfiguration struct { + GranteesWanted int `json:"num_grantees" yaml:"num_grantees"` + //Normally this is the default ChainClient key + GranterKey string `json:"granter" yaml:"granter"` + //List of keys (by name) that this FeeGranter manages + ManagedGrantees []string `json:"grantees" yaml:"grantees"` + //Last checked on chain (0 means grants never checked and may not exist) + BlockHeightVerified int64 `json:"block_last_verified" yaml:"block_last_verified"` + //Index of the last ManagedGrantee used as a TX signer + GranteeLastSignerIndex int } func (pc CosmosProviderConfig) Validate() error { @@ -92,6 +109,7 @@ func (pc CosmosProviderConfig) NewProvider(log *zap.Logger, homepath string, deb KeyringOptions: []keyring.Option{ethermint.EthSecp256k1Option()}, Input: os.Stdin, Output: os.Stdout, + walletStateMap: map[string]*WalletState{}, // TODO: this is a bit of a hack, we should probably have a better way to inject modules Cdc: MakeCodec(pc.Modules, pc.ExtraCodecs), @@ -113,8 +131,13 @@ type CosmosProvider struct { Cdc Codec // TODO: GRPC Client type? - nextAccountSeq uint64 - txMu sync.Mutex + //nextAccountSeq uint64 + feegrantMu sync.Mutex + + // the map key is the TX signer, which can either be 'default' (provider key) or a feegrantee + // the purpose of the map is to lock on the signer from TX creation through submission, + // thus making TX sequencing errors less likely. + walletStateMap map[string]*WalletState // metrics to monitor the provider TotalFees sdk.Coins @@ -126,6 +149,11 @@ type CosmosProvider struct { cometLegacyEncoding bool } +type WalletState struct { + NextAccountSequence uint64 + Mu sync.Mutex +} + func (cc *CosmosProvider) ProviderConfig() provider.ProviderConfig { return cc.PCfg } @@ -175,6 +203,28 @@ func (cc *CosmosProvider) Address() (string, error) { return out, err } +func (cc *CosmosProvider) MustEncodeAccAddr(addr sdk.AccAddress) string { + enc, err := cc.EncodeBech32AccAddr(addr) + if err != nil { + panic(err) + } + return enc +} + +// AccountFromKeyOrAddress returns an account from either a key or an address. +// If 'keyOrAddress' is the empty string, this returns the default key's address. +func (cc *CosmosProvider) AccountFromKeyOrAddress(keyOrAddress string) (out sdk.AccAddress, err error) { + switch { + case keyOrAddress == "": + out, err = cc.GetKeyAddress(cc.PCfg.Key) + case cc.KeyExists(keyOrAddress): + out, err = cc.GetKeyAddress(keyOrAddress) + default: + out, err = sdk.GetFromBech32(keyOrAddress, cc.PCfg.AccountPrefix) + } + return +} + func (cc *CosmosProvider) TrustingPeriod(ctx context.Context) (time.Duration, error) { res, err := cc.QueryStakingParams(ctx) @@ -297,9 +347,9 @@ func (cc *CosmosProvider) SetMetrics(m *processor.PrometheusMetrics) { cc.metrics = m } -func (cc *CosmosProvider) updateNextAccountSequence(seq uint64) { - if seq > cc.nextAccountSeq { - cc.nextAccountSeq = seq +func (cc *CosmosProvider) updateNextAccountSequence(sequenceGuard *WalletState, seq uint64) { + if seq > sequenceGuard.NextAccountSequence { + sequenceGuard.NextAccountSequence = seq } } diff --git a/relayer/chains/cosmos/query.go b/relayer/chains/cosmos/query.go index 6e438727f..766ad06dc 100644 --- a/relayer/chains/cosmos/query.go +++ b/relayer/chains/cosmos/query.go @@ -17,8 +17,11 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" + "github.com/cosmos/cosmos-sdk/types/query" querytypes "github.com/cosmos/cosmos-sdk/types/query" bankTypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/cosmos/cosmos-sdk/x/feegrant" "github.com/cosmos/cosmos-sdk/x/params/types/proposal" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" @@ -33,6 +36,7 @@ import ( "github.com/cosmos/relayer/v2/relayer/provider" "go.uber.org/zap" "golang.org/x/sync/errgroup" + "google.golang.org/grpc/metadata" ) const PaginationDelay = 10 * time.Millisecond @@ -183,6 +187,93 @@ func parseEventsFromResponseDeliverTx(resp abci.ResponseDeliverTx) []provider.Re return events } +// QueryFeegrantsByGrantee returns all requested grants for the given grantee. +// Default behavior will return all grants. +func (cc *CosmosProvider) QueryFeegrantsByGrantee(address string, paginator *query.PageRequest) ([]*feegrant.Grant, error) { + grants := []*feegrant.Grant{} + allPages := paginator == nil + + req := &feegrant.QueryAllowancesRequest{Grantee: address, Pagination: paginator} + queryClient := feegrant.NewQueryClient(cc) + ctx, cancel := cc.GetQueryContext(0) + defer cancel() + hasNextPage := true + + for { + res, err := queryClient.Allowances(ctx, req) + if err != nil { + return nil, err + } + + if res.Allowances != nil { + grants = append(grants, res.Allowances...) + } + + if res.Pagination != nil { + req.Pagination.Key = res.Pagination.NextKey + if len(res.Pagination.NextKey) == 0 { + hasNextPage = false + } + } else { + hasNextPage = false + } + + if !allPages || !hasNextPage { + break + } + } + + return grants, nil +} + +// Feegrant_GrantsByGranterRPC returns all requested grants for the given Granter. +// Default behavior will return all grants. +func (cc *CosmosProvider) QueryFeegrantsByGranter(address string, paginator *query.PageRequest) ([]*feegrant.Grant, error) { + grants := []*feegrant.Grant{} + allPages := paginator == nil + + req := &feegrant.QueryAllowancesByGranterRequest{Granter: address, Pagination: paginator} + queryClient := feegrant.NewQueryClient(cc) + ctx, cancel := cc.GetQueryContext(0) + defer cancel() + hasNextPage := true + + for { + res, err := queryClient.AllowancesByGranter(ctx, req) + if err != nil { + return nil, err + } + + if res.Allowances != nil { + grants = append(grants, res.Allowances...) + } + + if res.Pagination != nil && res.Pagination.NextKey != nil { + req.Pagination.Key = res.Pagination.NextKey + if len(res.Pagination.NextKey) == 0 { + hasNextPage = false + } + } else { + hasNextPage = false + } + + if !allPages || !hasNextPage { + break + } + } + + return grants, nil +} + +// GetQueryContext returns a context that includes the height and uses the timeout from the config +func (cc *CosmosProvider) GetQueryContext(height int64) (context.Context, context.CancelFunc) { + timeout, _ := time.ParseDuration(cc.PCfg.Timeout) // Timeout is validated in the config so no error check + ctx, cancel := context.WithTimeout(context.Background(), timeout) + strHeight := strconv.FormatInt(height, 10) + ctx = metadata.AppendToOutgoingContext(ctx, grpctypes.GRPCBlockHeightHeader, strHeight) + return ctx, cancel +} + // QueryBalance returns the amount of coins in the relayer account func (cc *CosmosProvider) QueryBalance(ctx context.Context, keyName string) (sdk.Coins, error) { addr, err := cc.ShowAddress(keyName) diff --git a/relayer/chains/cosmos/relayer_packets.go b/relayer/chains/cosmos/relayer_packets.go index 168b6be9a..ad7779c6a 100644 --- a/relayer/chains/cosmos/relayer_packets.go +++ b/relayer/chains/cosmos/relayer_packets.go @@ -66,7 +66,9 @@ func (rp relayMsgTimeout) Msg(src provider.ChainProvider, srcPortId, srcChanId, Signer: addr, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } type relayMsgRecvPacket struct { @@ -129,7 +131,9 @@ func (rp relayMsgRecvPacket) Msg(src provider.ChainProvider, srcPortId, srcChanI Signer: addr, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } type relayMsgPacketAck struct { @@ -184,5 +188,7 @@ func (rp relayMsgPacketAck) Msg(src provider.ChainProvider, srcPortId, srcChanId Signer: addr, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } diff --git a/relayer/chains/cosmos/tx.go b/relayer/chains/cosmos/tx.go index 8d9ae37d1..48eeb6a9d 100644 --- a/relayer/chains/cosmos/tx.go +++ b/relayer/chains/cosmos/tx.go @@ -6,6 +6,7 @@ import ( "fmt" "math" "math/big" + "math/rand" "regexp" "strconv" "strings" @@ -14,6 +15,7 @@ import ( "github.com/avast/retry-go/v4" abci "github.com/cometbft/cometbft/abci/types" + "github.com/cometbft/cometbft/libs/bytes" "github.com/cometbft/cometbft/light" rpcclient "github.com/cometbft/cometbft/rpc/client" coretypes "github.com/cometbft/cometbft/rpc/core/types" @@ -78,6 +80,26 @@ func (cc *CosmosProvider) SendMessage(ctx context.Context, msg provider.RelayerM return cc.SendMessages(ctx, []provider.RelayerMessage{msg}, memo) } +var seqGuardSingleton sync.Mutex + +// Gets the sequence guard. If it doesn't exist, initialized and returns it. +func ensureSequenceGuard(cc *CosmosProvider, key string) *WalletState { + seqGuardSingleton.Lock() + defer seqGuardSingleton.Unlock() + + if cc.walletStateMap == nil { + cc.walletStateMap = map[string]*WalletState{} + } + + sequenceGuard, ok := cc.walletStateMap[key] + if !ok { + cc.walletStateMap[key] = &WalletState{} + return cc.walletStateMap[key] + } + + return sequenceGuard +} + // SendMessages attempts to sign, encode, & send a slice of RelayerMessages // This is used extensively in the relayer as an extension of the Provider interface // @@ -101,7 +123,7 @@ func (cc *CosmosProvider) SendMessages(ctx context.Context, msgs []provider.Rela wg.Add(1) if err := retry.Do(func() error { - return cc.SendMessagesToMempool(ctx, msgs, memo, ctx, callback) + return cc.SendMessagesToMempool(ctx, msgs, memo, ctx, []func(*provider.RelayerTxResponse, error){callback}) }, retry.Context(ctx), rtyAtt, rtyDel, rtyErr, retry.OnRetry(func(n uint, err error) { cc.log.Info( "Error building or broadcasting transaction", @@ -137,37 +159,183 @@ func (cc *CosmosProvider) SendMessagesToMempool( memo string, asyncCtx context.Context, - asyncCallback func(*provider.RelayerTxResponse, error), + asyncCallbacks []func(*provider.RelayerTxResponse, error), ) error { - // Guard against account sequence number mismatch errors by locking for the specific wallet for - // the account sequence query all the way through the transaction broadcast success/fail. - cc.txMu.Lock() - defer cc.txMu.Unlock() + txSignerKey, feegranterKey, err := cc.buildSignerConfig(msgs) + if err != nil { + return err + } + + sequenceGuard := ensureSequenceGuard(cc, txSignerKey) + sequenceGuard.Mu.Lock() + defer sequenceGuard.Mu.Unlock() - txBytes, sequence, fees, err := cc.buildMessages(ctx, msgs, memo) + txBytes, sequence, fees, err := cc.buildMessages(ctx, msgs, memo, 0, txSignerKey, feegranterKey, sequenceGuard) if err != nil { // Account sequence mismatch errors can happen on the simulated transaction also. if strings.Contains(err.Error(), sdkerrors.ErrWrongSequence.Error()) { - cc.handleAccountSequenceMismatchError(err) + cc.handleAccountSequenceMismatchError(sequenceGuard, err) } return err } - if err := cc.broadcastTx(ctx, txBytes, msgs, fees, asyncCtx, defaultBroadcastWaitTimeout, asyncCallback); err != nil { + if err := cc.broadcastTx(ctx, txBytes, msgs, fees, asyncCtx, defaultBroadcastWaitTimeout, asyncCallbacks); err != nil { if strings.Contains(err.Error(), sdkerrors.ErrWrongSequence.Error()) { - cc.handleAccountSequenceMismatchError(err) + cc.handleAccountSequenceMismatchError(sequenceGuard, err) } return err } // we had a successful tx broadcast with this sequence, so update it to the next - cc.updateNextAccountSequence(sequence + 1) - + cc.updateNextAccountSequence(sequenceGuard, sequence+1) return nil } +func (cc *CosmosProvider) SubmitTxAwaitResponse(ctx context.Context, msgs []sdk.Msg, memo string, gas uint64, signingKeyName string) (*txtypes.GetTxResponse, error) { + resp, err := cc.SendMsgsWith(ctx, msgs, memo, gas, signingKeyName, "") + if err != nil { + return nil, err + } + fmt.Printf("TX result code: %d. Waiting for TX with hash %s\n", resp.Code, resp.Hash) + tx1resp, err := cc.AwaitTx(resp.Hash, 15*time.Second) + if err != nil { + return nil, err + } + + return tx1resp, err +} + +// Get the TX by hash, waiting for it to be included in a block +func (cc *CosmosProvider) AwaitTx(txHash bytes.HexBytes, timeout time.Duration) (*txtypes.GetTxResponse, error) { + var txByHash *txtypes.GetTxResponse + var txLookupErr error + startTime := time.Now() + timeBetweenQueries := 100 + + txClient := txtypes.NewServiceClient(cc) + + for txByHash == nil { + ctx, cancel := context.WithTimeout(context.Background(), timeout) + if time.Since(startTime) > timeout { + cancel() + return nil, txLookupErr + } + + txByHash, txLookupErr = txClient.GetTx(ctx, &txtypes.GetTxRequest{Hash: txHash.String()}) + if txLookupErr != nil { + time.Sleep(time.Duration(timeBetweenQueries) * time.Millisecond) + } + cancel() + } + + return txByHash, nil +} + +// SendMsgs wraps the msgs in a StdTx, signs and sends it. An error is returned if there +// was an issue sending the transaction. A successfully sent, but failed transaction will +// not return an error. If a transaction is successfully sent, the result of the execution +// of that transaction will be logged. A boolean indicating if a transaction was successfully +// sent and executed successfully is returned. +// +// feegranterKey - key name of the address set as the feegranter, empty string will not feegrant +func (cc *CosmosProvider) SendMsgsWith(ctx context.Context, msgs []sdk.Msg, memo string, gas uint64, signingKey string, feegranterKey string) (*coretypes.ResultBroadcastTx, error) { + sdkConfigMutex.Lock() + sdkConf := sdk.GetConfig() + sdkConf.SetBech32PrefixForAccount(cc.PCfg.AccountPrefix, cc.PCfg.AccountPrefix+"pub") + sdkConf.SetBech32PrefixForValidator(cc.PCfg.AccountPrefix+"valoper", cc.PCfg.AccountPrefix+"valoperpub") + sdkConf.SetBech32PrefixForConsensusNode(cc.PCfg.AccountPrefix+"valcons", cc.PCfg.AccountPrefix+"valconspub") + defer sdkConfigMutex.Unlock() + + rand.Seed(time.Now().UnixNano()) + feegrantKeyAcc, _ := cc.GetKeyAddressForKey(feegranterKey) + + txf, err := cc.PrepareFactory(cc.TxFactory(), signingKey) + if err != nil { + return nil, err + } + + adjusted := gas + + if gas == 0 { + // TODO: Make this work with new CalculateGas method + // TODO: This is related to GRPC client stuff? + // https://github.com/cosmos/cosmos-sdk/blob/5725659684fc93790a63981c653feee33ecf3225/client/tx/tx.go#L297 + _, adjusted, err = cc.CalculateGas(ctx, txf, signingKey, msgs...) + + if err != nil { + return nil, err + } + + adjusted = uint64(float64(adjusted) * cc.PCfg.GasAdjustment) + } + + //Cannot feegrant your own TX + if signingKey != feegranterKey && feegranterKey != "" { + //Must be set in Factory to affect gas calculation (sim tx) as well as real tx + txf = txf.WithFeeGranter(feegrantKeyAcc) + } + + if memo != "" { + txf = txf.WithMemo(memo) + } + + // Set the gas amount on the transaction factory + txf = txf.WithGas(adjusted) + + // Build the transaction builder + txb, err := txf.BuildUnsignedTx(msgs...) + if err != nil { + return nil, err + } + + // Attach the signature to the transaction + // c.LogFailedTx(nil, err, msgs) + // Force encoding in the chain specific address + for _, msg := range msgs { + cc.Cdc.Marshaler.MustMarshalJSON(msg) + } + + err = func() error { + //done := cc.SetSDKContext() + // ensure that we allways call done, even in case of an error or panic + //defer done() + + if err = tx.Sign(txf, signingKey, txb, false); err != nil { + return err + } + return nil + }() + + if err != nil { + return nil, err + } + + // Generate the transaction bytes + txBytes, err := cc.Cdc.TxConfig.TxEncoder()(txb.GetTx()) + if err != nil { + return nil, err + } + + res, err := cc.RPCClient.BroadcastTxAsync(ctx, txBytes) + if res != nil { + fmt.Printf("TX hash: %s\n", res.Hash) + } + if err != nil { + return nil, err + } + + // transaction was executed, log the success or failure using the tx response code + // NOTE: error is nil, logic should use the returned error to determine if the + // transaction was successfully executed. + if res.Code != 0 { + return res, fmt.Errorf("transaction failed with code: %d", res.Code) + } + + return res, nil +} + // sdkError will return the Cosmos SDK registered error for a given codespace/code combo if registered, otherwise nil. func (cc *CosmosProvider) sdkError(codespace string, code uint32) error { // ABCIError will return an error other than "unknown" if syncRes.Code is a registered error in syncRes.Codespace @@ -190,7 +358,7 @@ func (cc *CosmosProvider) broadcastTx( asyncCtx context.Context, // context for async wait for block inclusion after successful tx broadcast asyncTimeout time.Duration, // timeout for waiting for block inclusion - asyncCallback func(*provider.RelayerTxResponse, error), // callback for success/fail of the wait for block inclusion + asyncCallbacks []func(*provider.RelayerTxResponse, error), // callback for success/fail of the wait for block inclusion ) error { res, err := cc.RPCClient.BroadcastTxSync(ctx, tx) isErr := err != nil @@ -228,7 +396,7 @@ func (cc *CosmosProvider) broadcastTx( // TODO: maybe we need to check if the node has tx indexing enabled? // if not, we need to find a new way to block until inclusion in a block - go cc.waitForTx(asyncCtx, res.Hash, msgs, asyncTimeout, asyncCallback) + go cc.waitForTx(asyncCtx, res.Hash, msgs, asyncTimeout, asyncCallbacks) return nil } @@ -240,13 +408,16 @@ func (cc *CosmosProvider) waitForTx( txHash []byte, msgs []provider.RelayerMessage, // used for logging only waitTimeout time.Duration, - callback func(*provider.RelayerTxResponse, error), + callbacks []func(*provider.RelayerTxResponse, error), ) { res, err := cc.waitForBlockInclusion(ctx, txHash, waitTimeout) if err != nil { cc.log.Error("Failed to wait for block inclusion", zap.Error(err)) - if callback != nil { - callback(nil, err) + if len(callbacks) > 0 { + for _, cb := range callbacks { + //Call each callback in order since waitForTx is already invoked asyncronously + cb(nil, err) + } } return } @@ -270,15 +441,21 @@ func (cc *CosmosProvider) waitForTx( if err == nil { err = fmt.Errorf("transaction failed to execute") } - if callback != nil { - callback(nil, err) + if len(callbacks) > 0 { + for _, cb := range callbacks { + //Call each callback in order since waitForTx is already invoked asyncronously + cb(nil, err) + } } cc.LogFailedTx(rlyResp, nil, msgs) return } - if callback != nil { - callback(rlyResp, nil) + if len(callbacks) > 0 { + for _, cb := range callbacks { + //Call each callback in order since waitForTx is already invoked asyncronously + cb(rlyResp, nil) + } } cc.LogSuccessTx(res, msgs) } @@ -345,9 +522,76 @@ func parseEventsFromTxResponse(resp *sdk.TxResponse) []provider.RelayerEvent { return events } -func (cc *CosmosProvider) buildMessages(ctx context.Context, msgs []provider.RelayerMessage, memo string) ([]byte, uint64, sdk.Coins, error) { - // Query account details - txf, err := cc.PrepareFactory(cc.TxFactory()) +func (cc *CosmosProvider) buildSignerConfig(msgs []provider.RelayerMessage) ( + txSignerKey string, + feegranterKey string, + err error, +) { + //Guard against race conditions when choosing a signer/feegranter + cc.feegrantMu.Lock() + defer cc.feegrantMu.Unlock() + + //Some messages have feegranting disabled. If any message in the TX disables feegrants, then the TX will not be feegranted. + isFeegrantEligible := cc.PCfg.FeeGrants != nil + + for _, curr := range msgs { + if cMsg, ok := curr.(CosmosMessage); ok { + if cMsg.FeegrantDisabled { + isFeegrantEligible = false + } + } + } + + //By default, we should sign TXs with the provider's default key + txSignerKey = cc.PCfg.Key + + if isFeegrantEligible { + txSignerKey, feegranterKey = cc.GetTxFeeGrant() + signerAcc, addrErr := cc.GetKeyAddressForKey(txSignerKey) + if addrErr != nil { + err = addrErr + return + } + + signerAccAddr, encodeErr := cc.EncodeBech32AccAddr(signerAcc) + if encodeErr != nil { + err = encodeErr + return + } + + //Overwrite the 'Signer' field in any Msgs that provide an 'optionalSetSigner' callback + for _, curr := range msgs { + if cMsg, ok := curr.(CosmosMessage); ok { + if cMsg.SetSigner != nil { + cMsg.SetSigner(signerAccAddr) + } + } + } + } + + return +} + +func (cc *CosmosProvider) buildMessages( + ctx context.Context, + msgs []provider.RelayerMessage, + memo string, + gas uint64, + txSignerKey string, + feegranterKey string, + sequenceGuard *WalletState, +) ( + txBytes []byte, + sequence uint64, + fees sdk.Coins, + err error, +) { + done := cc.SetSDKContext() + defer done() + + cMsgs := CosmosMsgs(msgs...) + + txf, err := cc.PrepareFactory(cc.TxFactory(), txSignerKey) if err != nil { return nil, 0, sdk.Coins{}, err } @@ -356,73 +600,66 @@ func (cc *CosmosProvider) buildMessages(ctx context.Context, msgs []provider.Rel txf = txf.WithMemo(memo) } - sequence := txf.Sequence() - cc.updateNextAccountSequence(sequence) - if sequence < cc.nextAccountSeq { - sequence = cc.nextAccountSeq + sequence = txf.Sequence() + cc.updateNextAccountSequence(sequenceGuard, sequence) + if sequence < sequenceGuard.NextAccountSequence { + sequence = sequenceGuard.NextAccountSequence txf = txf.WithSequence(sequence) } - // TODO: Make this work with new CalculateGas method - // TODO: This is related to GRPC client stuff? - // https://github.com/cosmos/cosmos-sdk/blob/5725659684fc93790a63981c653feee33ecf3225/client/tx/tx.go#L297 - // If users pass gas adjustment, then calculate gas - _, adjusted, err := cc.CalculateGas(ctx, txf, CosmosMsgs(msgs...)...) - if err != nil { - return nil, 0, sdk.Coins{}, err - } + adjusted := gas - // Set the gas amount on the transaction factory - txf = txf.WithGas(adjusted) + if gas == 0 { + _, adjusted, err = cc.CalculateGas(ctx, txf, txSignerKey, cMsgs...) - var txb client.TxBuilder - // Build the transaction builder & retry on failures - if err := retry.Do(func() error { - txb, err = txf.BuildUnsignedTx(CosmosMsgs(msgs...)...) if err != nil { - return err + return nil, 0, sdk.Coins{}, err } - return nil - }, retry.Context(ctx), rtyAtt, rtyDel, rtyErr); err != nil { - return nil, 0, sdk.Coins{}, err } - done := cc.SetSDKContext() - - if err := retry.Do(func() error { - if err := tx.Sign(txf, cc.PCfg.Key, txb, false); err != nil { - return err + //Cannot feegrant your own TX + if txSignerKey != feegranterKey && feegranterKey != "" { + granterAddr, err := cc.GetKeyAddressForKey(feegranterKey) + if err != nil { + return nil, 0, sdk.Coins{}, err } - return nil - }, retry.Context(ctx), rtyAtt, rtyDel, rtyErr); err != nil { + + txf = txf.WithFeeGranter(granterAddr) + } + + // Set the gas amount on the transaction factory + txf = txf.WithGas(adjusted) + + // Build the transaction builder + txb, err := txf.BuildUnsignedTx(cMsgs...) + if err != nil { return nil, 0, sdk.Coins{}, err } - done() + if err = tx.Sign(txf, txSignerKey, txb, false); err != nil { + return nil, 0, sdk.Coins{}, err + } tx := txb.GetTx() - fees := tx.GetFee() + fees = tx.GetFee() - var txBytes []byte // Generate the transaction bytes - if err := retry.Do(func() error { - var err error - txBytes, err = cc.Cdc.TxConfig.TxEncoder()(tx) - if err != nil { - return err - } - return nil - }, retry.Context(ctx), rtyAtt, rtyDel, rtyErr); err != nil { + txBytes, err = cc.Cdc.TxConfig.TxEncoder()(tx) + if err != nil { return nil, 0, sdk.Coins{}, err } - return txBytes, sequence, fees, nil + return txBytes, txf.Sequence(), fees, nil } // handleAccountSequenceMismatchError will parse the error string, e.g.: // "account sequence mismatch, expected 10, got 9: incorrect account sequence" // and update the next account sequence with the expected value. -func (cc *CosmosProvider) handleAccountSequenceMismatchError(err error) { +func (cc *CosmosProvider) handleAccountSequenceMismatchError(sequenceGuard *WalletState, err error) { + if sequenceGuard == nil { + panic("sequence guard not configured") + } + sequences := numRegex.FindAllString(err.Error(), -1) if len(sequences) != 2 { return @@ -431,9 +668,24 @@ func (cc *CosmosProvider) handleAccountSequenceMismatchError(err error) { if err != nil { return } - cc.nextAccountSeq = nextSeq + sequenceGuard.NextAccountSequence = nextSeq } +// handleAccountSequenceMismatchError will parse the error string, e.g.: +// "account sequence mismatch, expected 10, got 9: incorrect account sequence" +// and update the next account sequence with the expected value. +// func (cc *CosmosProvider) handleAccountSequenceMismatchError(err error) { +// sequences := numRegex.FindAllString(err.Error(), -1) +// if len(sequences) != 2 { +// return +// } +// nextSeq, err := strconv.ParseUint(sequences[0], 10, 64) +// if err != nil { +// return +// } +// cc.nextAccountSeq = nextSeq +// } + // MsgCreateClient creates an sdk.Msg to update the client on src with consensus state from dst func (cc *CosmosProvider) MsgCreateClient( clientState ibcexported.ClientState, @@ -460,7 +712,9 @@ func (cc *CosmosProvider) MsgCreateClient( Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgUpdateClient(srcClientID string, dstHeader ibcexported.ClientMessage) (provider.RelayerMessage, error) { @@ -478,7 +732,9 @@ func (cc *CosmosProvider) MsgUpdateClient(srcClientID string, dstHeader ibcexpor ClientMessage: clientMsg, Signer: acc, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgUpgradeClient(srcClientId string, consRes *clienttypes.QueryConsensusStateResponse, clientRes *clienttypes.QueryClientStateResponse) (provider.RelayerMessage, error) { @@ -489,9 +745,14 @@ func (cc *CosmosProvider) MsgUpgradeClient(srcClientId string, consRes *clientty if acc, err = cc.Address(); err != nil { return nil, err } - return NewCosmosMessage(&clienttypes.MsgUpgradeClient{ClientId: srcClientId, ClientState: clientRes.ClientState, + + msgUpgradeClient := &clienttypes.MsgUpgradeClient{ClientId: srcClientId, ClientState: clientRes.ClientState, ConsensusState: consRes.ConsensusState, ProofUpgradeClient: consRes.GetProof(), - ProofUpgradeConsensusState: consRes.ConsensusState.Value, Signer: acc}), nil + ProofUpgradeConsensusState: consRes.ConsensusState.Value, Signer: acc} + + return NewCosmosMessage(msgUpgradeClient, func(signer string) { + msgUpgradeClient.Signer = signer + }), nil } // MsgTransfer creates a new transfer message @@ -518,7 +779,9 @@ func (cc *CosmosProvider) MsgTransfer( msg.TimeoutHeight = info.TimeoutHeight } - return NewCosmosMessage(msg), nil + msgTransfer := NewCosmosMessage(msg, nil).(CosmosMessage) + msgTransfer.FeegrantDisabled = true + return msgTransfer, nil } func (cc *CosmosProvider) ValidatePacket(msgTransfer provider.PacketInfo, latest provider.LatestBlock) error { @@ -584,7 +847,9 @@ func (cc *CosmosProvider) MsgRecvPacket( Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) PacketAcknowledgement( @@ -622,7 +887,9 @@ func (cc *CosmosProvider) MsgAcknowledgement( Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) PacketReceipt( @@ -675,7 +942,9 @@ func (cc *CosmosProvider) MsgTimeout(msgTransfer provider.PacketInfo, proof prov Signer: signer, } - return NewCosmosMessage(assembled), nil + return NewCosmosMessage(assembled, func(signer string) { + assembled.Signer = signer + }), nil } func (cc *CosmosProvider) MsgTimeoutOnClose(msgTransfer provider.PacketInfo, proof provider.PacketProof) (provider.RelayerMessage, error) { @@ -691,7 +960,9 @@ func (cc *CosmosProvider) MsgTimeoutOnClose(msgTransfer provider.PacketInfo, pro Signer: signer, } - return NewCosmosMessage(assembled), nil + return NewCosmosMessage(assembled, func(signer string) { + assembled.Signer = signer + }), nil } func (cc *CosmosProvider) MsgConnectionOpenInit(info provider.ConnectionInfo, proof provider.ConnectionProof) (provider.RelayerMessage, error) { @@ -711,7 +982,9 @@ func (cc *CosmosProvider) MsgConnectionOpenInit(info provider.ConnectionInfo, pr Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) ConnectionHandshakeProof( @@ -773,7 +1046,9 @@ func (cc *CosmosProvider) MsgConnectionOpenTry(msgOpenInit provider.ConnectionIn Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgConnectionOpenAck(msgOpenTry provider.ConnectionInfo, proof provider.ConnectionProof) (provider.RelayerMessage, error) { @@ -803,7 +1078,9 @@ func (cc *CosmosProvider) MsgConnectionOpenAck(msgOpenTry provider.ConnectionInf Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) ConnectionProof( @@ -834,7 +1111,9 @@ func (cc *CosmosProvider) MsgConnectionOpenConfirm(msgOpenAck provider.Connectio Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgChannelOpenInit(info provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -857,7 +1136,9 @@ func (cc *CosmosProvider) MsgChannelOpenInit(info provider.ChannelInfo, proof pr Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) ChannelProof( @@ -904,7 +1185,9 @@ func (cc *CosmosProvider) MsgChannelOpenTry(msgOpenInit provider.ChannelInfo, pr Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgChannelOpenAck(msgOpenTry provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -922,7 +1205,9 @@ func (cc *CosmosProvider) MsgChannelOpenAck(msgOpenTry provider.ChannelInfo, pro Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgChannelOpenConfirm(msgOpenAck provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -938,7 +1223,9 @@ func (cc *CosmosProvider) MsgChannelOpenConfirm(msgOpenAck provider.ChannelInfo, Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgChannelCloseInit(info provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -952,7 +1239,9 @@ func (cc *CosmosProvider) MsgChannelCloseInit(info provider.ChannelInfo, proof p Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgChannelCloseConfirm(msgCloseInit provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -968,7 +1257,9 @@ func (cc *CosmosProvider) MsgChannelCloseConfirm(msgCloseInit provider.ChannelIn Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgUpdateClientHeader(latestHeader provider.IBCHeader, trustedHeight clienttypes.Height, trustedHeader provider.IBCHeader) (ibcexported.ClientMessage, error) { @@ -1036,7 +1327,9 @@ func (cc *CosmosProvider) MsgSubmitQueryResponse(chainID string, queryID provide FromAddress: signer, } - return NewCosmosMessage(msg), nil + submitQueryRespMsg := NewCosmosMessage(msg, nil).(CosmosMessage) + submitQueryRespMsg.FeegrantDisabled = true + return submitQueryRespMsg, nil } func (cc *CosmosProvider) MsgSubmitMisbehaviour(clientID string, misbehaviour ibcexported.ClientMessage) (provider.RelayerMessage, error) { @@ -1050,7 +1343,9 @@ func (cc *CosmosProvider) MsgSubmitMisbehaviour(clientID string, misbehaviour ib return nil, err } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } // RelayPacketFromSequence relays a packet with a given seq on src and returns recvPacket msgs, timeoutPacketmsgs and error @@ -1308,11 +1603,11 @@ func (cc *CosmosProvider) UpdateFeesSpent(chain, key, address string, fees sdk.C // MsgRegisterCounterpartyPayee creates an sdk.Msg to broadcast the counterparty address func (cc *CosmosProvider) MsgRegisterCounterpartyPayee(portID, channelID, relayerAddr, counterpartyPayee string) (provider.RelayerMessage, error) { msg := feetypes.NewMsgRegisterCounterpartyPayee(portID, channelID, relayerAddr, counterpartyPayee) - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, nil), nil } // PrepareFactory mutates the tx factory with the appropriate account number, sequence number, and min gas settings. -func (cc *CosmosProvider) PrepareFactory(txf tx.Factory) (tx.Factory, error) { +func (cc *CosmosProvider) PrepareFactory(txf tx.Factory, signingKey string) (tx.Factory, error) { var ( err error from sdk.AccAddress @@ -1321,7 +1616,7 @@ func (cc *CosmosProvider) PrepareFactory(txf tx.Factory) (tx.Factory, error) { // Get key address and retry if fail if err = retry.Do(func() error { - from, err = cc.GetKeyAddress() + from, err = cc.GetKeyAddressForKey(signingKey) if err != nil { return err } @@ -1333,7 +1628,8 @@ func (cc *CosmosProvider) PrepareFactory(txf tx.Factory) (tx.Factory, error) { cliCtx := client.Context{}.WithClient(cc.RPCClient). WithInterfaceRegistry(cc.Cdc.InterfaceRegistry). WithChainID(cc.PCfg.ChainID). - WithCodec(cc.Cdc.Marshaler) + WithCodec(cc.Cdc.Marshaler). + WithFromAddress(from) // Set the account number and sequence on the transaction factory and retry if fail if err = retry.Do(func() error { @@ -1427,8 +1723,8 @@ func (cc *CosmosProvider) SetWithExtensionOptions(txf tx.Factory) (tx.Factory, e } // CalculateGas simulates a tx to generate the appropriate gas settings before broadcasting a tx. -func (cc *CosmosProvider) CalculateGas(ctx context.Context, txf tx.Factory, msgs ...sdk.Msg) (txtypes.SimulateResponse, uint64, error) { - keyInfo, err := cc.Keybase.Key(cc.PCfg.Key) +func (cc *CosmosProvider) CalculateGas(ctx context.Context, txf tx.Factory, signingKey string, msgs ...sdk.Msg) (txtypes.SimulateResponse, uint64, error) { + keyInfo, err := cc.Keybase.Key(signingKey) if err != nil { return txtypes.SimulateResponse{}, 0, err } diff --git a/relayer/chains/cosmos/tx_test.go b/relayer/chains/cosmos/tx_test.go index a582adc54..25bb02dd2 100644 --- a/relayer/chains/cosmos/tx_test.go +++ b/relayer/chains/cosmos/tx_test.go @@ -15,6 +15,18 @@ import ( "github.com/stretchr/testify/require" ) +type mockAccountSequenceMismatchError struct { + Expected uint64 + Actual uint64 +} + +// func TestHandleAccountSequenceMismatchError(t *testing.T) { +// p := &CosmosProvider{} +// ws := &WalletState{} +// p.handleAccountSequenceMismatchError(ws, mockAccountSequenceMismatchError{Actual: 9, Expected: 10}) +// require.Equal(t, ws.NextAccountSequence, uint64(10)) +// } + func TestCosmosProvider_AdjustEstimatedGas(t *testing.T) { testCases := []struct { name string @@ -75,21 +87,10 @@ func TestCosmosProvider_AdjustEstimatedGas(t *testing.T) { } } -type mockAccountSequenceMismatchError struct { - Expected uint64 - Actual uint64 -} - func (err mockAccountSequenceMismatchError) Error() string { return fmt.Sprintf("account sequence mismatch, expected %d, got %d: incorrect account sequence", err.Expected, err.Actual) } -func TestHandleAccountSequenceMismatchError(t *testing.T) { - p := &CosmosProvider{} - p.handleAccountSequenceMismatchError(mockAccountSequenceMismatchError{Actual: 9, Expected: 10}) - require.Equal(t, p.nextAccountSeq, uint64(10)) -} - type mockTxConfig struct { legacytx.StdTxConfig txBuilder *mockTxBuilder diff --git a/relayer/chains/penumbra/tx.go b/relayer/chains/penumbra/tx.go index 4ef4c8d30..dd90ac098 100644 --- a/relayer/chains/penumbra/tx.go +++ b/relayer/chains/penumbra/tx.go @@ -499,7 +499,9 @@ func (cc *PenumbraProvider) MsgUpdateClient(srcClientId string, dstHeader ibcexp Signer: acc, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) ConnectionOpenInit(srcClientId, dstClientId string, dstPrefix commitmenttypes.MerklePrefix, dstHeader ibcexported.ClientMessage) ([]provider.RelayerMessage, error) { @@ -532,7 +534,9 @@ func (cc *PenumbraProvider) ConnectionOpenInit(srcClientId, dstClientId string, Signer: acc, } - return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg)}, nil + return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + })}, nil } func (cc *PenumbraProvider) ConnectionOpenTry(ctx context.Context, dstQueryProvider provider.QueryProvider, dstHeader ibcexported.ClientMessage, dstPrefix commitmenttypes.MerklePrefix, srcClientId, dstClientId, srcConnId, dstConnId string) ([]provider.RelayerMessage, error) { @@ -597,7 +601,9 @@ func (cc *PenumbraProvider) ConnectionOpenTry(ctx context.Context, dstQueryProvi Signer: acc, } - return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg)}, nil + return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + })}, nil } func (cc *PenumbraProvider) ConnectionOpenAck(ctx context.Context, dstQueryProvider provider.QueryProvider, dstHeader ibcexported.ClientMessage, srcClientId, srcConnId, dstClientId, dstConnId string) ([]provider.RelayerMessage, error) { @@ -647,7 +653,9 @@ func (cc *PenumbraProvider) ConnectionOpenAck(ctx context.Context, dstQueryProvi Signer: acc, } - return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg)}, nil + return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + })}, nil } func (cc *PenumbraProvider) ConnectionOpenConfirm(ctx context.Context, dstQueryProvider provider.QueryProvider, dstHeader ibcexported.ClientMessage, dstConnId, srcClientId, srcConnId string) ([]provider.RelayerMessage, error) { @@ -680,7 +688,9 @@ func (cc *PenumbraProvider) ConnectionOpenConfirm(ctx context.Context, dstQueryP Signer: acc, } - return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg)}, nil + return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + })}, nil } func (cc *PenumbraProvider) ChannelOpenInit(srcClientId, srcConnId, srcPortId, srcVersion, dstPortId string, order chantypes.Order, dstHeader ibcexported.ClientMessage) ([]provider.RelayerMessage, error) { @@ -712,7 +722,9 @@ func (cc *PenumbraProvider) ChannelOpenInit(srcClientId, srcConnId, srcPortId, s Signer: acc, } - return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg)}, nil + return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + })}, nil } func (cc *PenumbraProvider) ChannelOpenTry(ctx context.Context, dstQueryProvider provider.QueryProvider, dstHeader ibcexported.ClientMessage, srcPortId, dstPortId, srcChanId, dstChanId, srcVersion, srcConnectionId, srcClientId string) ([]provider.RelayerMessage, error) { @@ -765,7 +777,9 @@ func (cc *PenumbraProvider) ChannelOpenTry(ctx context.Context, dstQueryProvider Signer: acc, } - return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg)}, nil + return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + })}, nil } func (cc *PenumbraProvider) ChannelOpenAck(ctx context.Context, dstQueryProvider provider.QueryProvider, dstHeader ibcexported.ClientMessage, srcClientId, srcPortId, srcChanId, dstChanId, dstPortId string) ([]provider.RelayerMessage, error) { @@ -802,7 +816,9 @@ func (cc *PenumbraProvider) ChannelOpenAck(ctx context.Context, dstQueryProvider Signer: acc, } - return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg)}, nil + return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + })}, nil } func (cc *PenumbraProvider) ChannelOpenConfirm(ctx context.Context, dstQueryProvider provider.QueryProvider, dstHeader ibcexported.ClientMessage, srcClientId, srcPortId, srcChanId, dstPortId, dstChanId string) ([]provider.RelayerMessage, error) { @@ -836,7 +852,9 @@ func (cc *PenumbraProvider) ChannelOpenConfirm(ctx context.Context, dstQueryProv Signer: acc, } - return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg)}, nil + return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + })}, nil } func (cc *PenumbraProvider) ChannelCloseInit(srcPortId, srcChanId string) (provider.RelayerMessage, error) { @@ -854,7 +872,9 @@ func (cc *PenumbraProvider) ChannelCloseInit(srcPortId, srcChanId string) (provi Signer: acc, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) ChannelCloseConfirm(ctx context.Context, dstQueryProvider provider.QueryProvider, dsth int64, dstChanId, dstPortId, srcPortId, srcChanId string) (provider.RelayerMessage, error) { @@ -879,7 +899,9 @@ func (cc *PenumbraProvider) ChannelCloseConfirm(ctx context.Context, dstQueryPro Signer: acc, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgUpgradeClient(srcClientId string, consRes *clienttypes.QueryConsensusStateResponse, clientRes *clienttypes.QueryClientStateResponse) (provider.RelayerMessage, error) { @@ -890,9 +912,14 @@ func (cc *PenumbraProvider) MsgUpgradeClient(srcClientId string, consRes *client if acc, err = cc.Address(); err != nil { return nil, err } - return cosmos.NewCosmosMessage(&clienttypes.MsgUpgradeClient{ClientId: srcClientId, ClientState: clientRes.ClientState, + + msgUpgradeClient := &clienttypes.MsgUpgradeClient{ClientId: srcClientId, ClientState: clientRes.ClientState, ConsensusState: consRes.ConsensusState, ProofUpgradeClient: consRes.GetProof(), - ProofUpgradeConsensusState: consRes.ConsensusState.Value, Signer: acc}), nil + ProofUpgradeConsensusState: consRes.ConsensusState.Value, Signer: acc} + + return cosmos.NewCosmosMessage(msgUpgradeClient, func(signer string) { + msgUpgradeClient.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgSubmitMisbehaviour(clientID string, misbehaviour ibcexported.ClientMessage) (provider.RelayerMessage, error) { @@ -960,7 +987,9 @@ func (cc *PenumbraProvider) MsgRelayAcknowledgement(ctx context.Context, dst pro Signer: acc, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } } @@ -988,7 +1017,9 @@ func (cc *PenumbraProvider) MsgTransfer( msg.TimeoutHeight = info.TimeoutHeight } - return cosmos.NewCosmosMessage(msg), nil + msgTransfer := cosmos.NewCosmosMessage(msg, nil).(cosmos.CosmosMessage) + msgTransfer.FeegrantDisabled = true + return msgTransfer, nil } // MsgRelayTimeout constructs the MsgTimeout which is to be sent to the sending chain. @@ -1067,7 +1098,9 @@ func (cc *PenumbraProvider) orderedChannelTimeoutMsg( Signer: acc, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) unorderedChannelTimeoutMsg( @@ -1106,7 +1139,9 @@ func (cc *PenumbraProvider) unorderedChannelTimeoutMsg( NextSequenceRecv: packet.Seq(), Signer: acc, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } // MsgRelayRecvPacket constructs the MsgRecvPacket which is to be sent to the receiving chain. @@ -1145,7 +1180,9 @@ func (cc *PenumbraProvider) MsgRelayRecvPacket(ctx context.Context, dst provider Signer: acc, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } } @@ -1200,7 +1237,9 @@ func (cc *PenumbraProvider) MsgRecvPacket(msgTransfer provider.PacketInfo, proof Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) PacketAcknowledgement(ctx context.Context, msgRecvPacket provider.PacketInfo, height uint64) (provider.PacketProof, error) { @@ -1228,7 +1267,9 @@ func (cc *PenumbraProvider) MsgAcknowledgement(msgRecvPacket provider.PacketInfo Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) PacketReceipt(ctx context.Context, msgTransfer provider.PacketInfo, height uint64) (provider.PacketProof, error) { @@ -1257,7 +1298,9 @@ func (cc *PenumbraProvider) MsgTimeout(msgTransfer provider.PacketInfo, proof pr Signer: signer, } - return cosmos.NewCosmosMessage(assembled), nil + return cosmos.NewCosmosMessage(assembled, func(signer string) { + assembled.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgTimeoutOnClose(msgTransfer provider.PacketInfo, proof provider.PacketProof) (provider.RelayerMessage, error) { @@ -1273,7 +1316,9 @@ func (cc *PenumbraProvider) MsgTimeoutOnClose(msgTransfer provider.PacketInfo, p Signer: signer, } - return cosmos.NewCosmosMessage(assembled), nil + return cosmos.NewCosmosMessage(assembled, func(signer string) { + assembled.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgConnectionOpenInit(info provider.ConnectionInfo, proof provider.ConnectionProof) (provider.RelayerMessage, error) { @@ -1293,7 +1338,9 @@ func (cc *PenumbraProvider) MsgConnectionOpenInit(info provider.ConnectionInfo, Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) ConnectionHandshakeProof(ctx context.Context, msgOpenInit provider.ConnectionInfo, height uint64) (provider.ConnectionProof, error) { @@ -1351,7 +1398,9 @@ func (cc *PenumbraProvider) MsgConnectionOpenTry(msgOpenInit provider.Connection Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgConnectionOpenAck(msgOpenTry provider.ConnectionInfo, proof provider.ConnectionProof) (provider.RelayerMessage, error) { @@ -1381,7 +1430,9 @@ func (cc *PenumbraProvider) MsgConnectionOpenAck(msgOpenTry provider.ConnectionI Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } // NextSeqRecv queries for the appropriate Tendermint proof required to prove the next expected packet sequence number @@ -1428,7 +1479,9 @@ func (cc *PenumbraProvider) MsgConnectionOpenConfirm(msgOpenAck provider.Connect Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgChannelOpenInit(info provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -1451,7 +1504,9 @@ func (cc *PenumbraProvider) MsgChannelOpenInit(info provider.ChannelInfo, proof Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) ChannelProof(ctx context.Context, msg provider.ChannelInfo, height uint64) (provider.ChannelProof, error) { @@ -1494,7 +1549,9 @@ func (cc *PenumbraProvider) MsgChannelOpenTry(msgOpenInit provider.ChannelInfo, Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgChannelOpenAck(msgOpenTry provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -1512,7 +1569,9 @@ func (cc *PenumbraProvider) MsgChannelOpenAck(msgOpenTry provider.ChannelInfo, p Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgChannelOpenConfirm(msgOpenAck provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -1528,7 +1587,9 @@ func (cc *PenumbraProvider) MsgChannelOpenConfirm(msgOpenAck provider.ChannelInf Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgChannelCloseInit(info provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -1542,7 +1603,9 @@ func (cc *PenumbraProvider) MsgChannelCloseInit(info provider.ChannelInfo, proof Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgChannelCloseConfirm(msgCloseInit provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -1558,7 +1621,9 @@ func (cc *PenumbraProvider) MsgChannelCloseConfirm(msgCloseInit provider.Channel Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgUpdateClientHeader(latestHeader provider.IBCHeader, trustedHeight clienttypes.Height, trustedHeader provider.IBCHeader) (ibcexported.ClientMessage, error) { @@ -2231,7 +2296,7 @@ func (cc *PenumbraProvider) MsgSubmitQueryResponse(chainID string, queryID provi panic("implement me") } -func (cc *PenumbraProvider) SendMessagesToMempool(ctx context.Context, msgs []provider.RelayerMessage, memo string, asyncCtx context.Context, asyncCallback func(*provider.RelayerTxResponse, error)) error { +func (cc *PenumbraProvider) SendMessagesToMempool(ctx context.Context, msgs []provider.RelayerMessage, memo string, asyncCtx context.Context, asyncCallback []func(*provider.RelayerTxResponse, error)) error { sendRsp, err := cc.sendMessagesInner(ctx, msgs, memo) cc.log.Debug("Received response from sending messages", zap.Any("response", sendRsp), zap.Error(err)) return err diff --git a/relayer/processor/message_processor.go b/relayer/processor/message_processor.go index b17978fc4..d5c8f9db4 100644 --- a/relayer/processor/message_processor.go +++ b/relayer/processor/message_processor.go @@ -380,6 +380,15 @@ func (mp *messageProcessor) sendClientUpdate( dst.log.Debug("Client update broadcast completed") } +type PathProcessorMessageResp struct { + Response *provider.RelayerTxResponse + DestinationChain provider.ChainProvider + SuccessfulTx bool + Error error +} + +var PathProcMessageCollector chan *PathProcessorMessageResp + // sendBatchMessages will send a batch of messages, // then increment metrics counters for successful packet messages. func (mp *messageProcessor) sendBatchMessages( @@ -413,7 +422,7 @@ func (mp *messageProcessor) sendBatchMessages( dst.log.Debug("Will relay messages", fields...) - callback := func(rtr *provider.RelayerTxResponse, err error) { + callback := func(_ *provider.RelayerTxResponse, err error) { // only increment metrics counts for successful packets if err != nil || mp.metrics == nil { return @@ -434,8 +443,23 @@ func (mp *messageProcessor) sendBatchMessages( mp.metrics.IncPacketsRelayed(dst.info.PathName, dst.info.ChainID, channel, port, t.msg.eventType) } } + callbacks := []func(rtr *provider.RelayerTxResponse, err error){callback} + + //During testing, this adds a callback so our test case can inspect the TX results + if PathProcMessageCollector != nil { + testCallback := func(rtr *provider.RelayerTxResponse, err error) { + msgResult := &PathProcessorMessageResp{ + DestinationChain: dst.chainProvider, + Response: rtr, + SuccessfulTx: err == nil, + Error: err, + } + PathProcMessageCollector <- msgResult + } + callbacks = append(callbacks, testCallback) + } - if err := dst.chainProvider.SendMessagesToMempool(broadcastCtx, msgs, mp.memo, ctx, callback); err != nil { + if err := dst.chainProvider.SendMessagesToMempool(broadcastCtx, msgs, mp.memo, ctx, callbacks); err != nil { errFields := []zapcore.Field{ zap.String("path_name", src.info.PathName), zap.String("src_chain_id", src.info.ChainID), @@ -487,9 +511,9 @@ func (mp *messageProcessor) sendSingleMessage( dst.log.Debug(fmt.Sprintf("Will broadcast %s message", msgType), zap.Object("msg", tracker)) // Set callback for packet messages so that we increment prometheus metrics on successful relays. - var callback func(rtr *provider.RelayerTxResponse, err error) + callbacks := []func(rtr *provider.RelayerTxResponse, err error){} if t, ok := tracker.(packetMessageToTrack); ok { - callback = func(rtr *provider.RelayerTxResponse, err error) { + callback := func(_ *provider.RelayerTxResponse, err error) { // only increment metrics counts for successful packets if err != nil || mp.metrics == nil { return @@ -504,9 +528,25 @@ func (mp *messageProcessor) sendSingleMessage( } mp.metrics.IncPacketsRelayed(dst.info.PathName, dst.info.ChainID, channel, port, t.msg.eventType) } + + callbacks = append(callbacks, callback) + } + + //During testing, this adds a callback so our test case can inspect the TX results + if PathProcMessageCollector != nil { + testCallback := func(rtr *provider.RelayerTxResponse, err error) { + msgResult := &PathProcessorMessageResp{ + DestinationChain: dst.chainProvider, + Response: rtr, + SuccessfulTx: err == nil, + Error: err, + } + PathProcMessageCollector <- msgResult + } + callbacks = append(callbacks, testCallback) } - err := dst.chainProvider.SendMessagesToMempool(broadcastCtx, msgs, mp.memo, ctx, callback) + err := dst.chainProvider.SendMessagesToMempool(broadcastCtx, msgs, mp.memo, ctx, callbacks) if err != nil { errFields := []zapcore.Field{ zap.String("path_name", src.info.PathName), diff --git a/relayer/provider/provider.go b/relayer/provider/provider.go index a740dd845..a1c150e0a 100644 --- a/relayer/provider/provider.go +++ b/relayer/provider/provider.go @@ -391,7 +391,7 @@ type ChainProvider interface { memo string, asyncCtx context.Context, - asyncCallback func(*RelayerTxResponse, error), + asyncCallbacks []func(*RelayerTxResponse, error), ) error MsgRegisterCounterpartyPayee(portID, channelID, relayerAddr, counterpartyPayeeAddr string) (RelayerMessage, error) diff --git a/relayer/strategies.go b/relayer/strategies.go index 047478938..fd2856aad 100644 --- a/relayer/strategies.go +++ b/relayer/strategies.go @@ -8,6 +8,8 @@ import ( "sync" "time" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/avast/retry-go/v4" "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" "github.com/cosmos/relayer/v2/relayer/chains/cosmos" @@ -46,6 +48,8 @@ func StartRelayer( initialBlockHistory uint64, metrics *processor.PrometheusMetrics, ) chan error { + //prevent incorrect bech32 address prefixed addresses when calling AccAddress.String() + sdk.SetAddrCacheEnabled(false) errorChan := make(chan error, 1) switch processorType { From 5236f6f5635c639b02d8949d30882d2f9ab31b64 Mon Sep 17 00:00:00 2001 From: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> Date: Thu, 27 Jul 2023 14:05:04 -0700 Subject: [PATCH 11/16] Export Client Trusting Period to Prometheus metrics (#1246) * export client trusting period * update docs --- docs/advanced_usage.md | 40 +++++++++----------------- relayer/processor/message_processor.go | 1 + relayer/processor/metrics.go | 12 +++++++- 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/docs/advanced_usage.md b/docs/advanced_usage.md index a0b518b07..1b6c37595 100644 --- a/docs/advanced_usage.md +++ b/docs/advanced_usage.md @@ -10,33 +10,19 @@ you can use `http://$IP:5183/relayer/metrics` as a target for your prometheus sc Exported metrics: -| **Exported Metric** | **Description** | **Type** | -|:----------------------------------:|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:--------:| -| cosmos_relayer_observed_packets | The total number of observed packets | Counter | -| cosmos_relayer_relayed_packets | The total number of relayed packets | Counter | -| cosmos_relayer_chain_latest_height | The current height of the chain | Gauge | -| cosmos_relayer_wallet_balance | The current balance for the relayer's wallet | Gauge | -| cosmos_relayer_fees_spent | The amount of fees spent from the relayer's wallet | Gauge | -| cosmos_relayer_tx_failure |
The total number of tx failures broken up into catagories .
Categories:
- "packet messages are redundant"
- "insufficient funds"
- "invalid coins"
- "out of gas"
- "incorrect account sequence"

"Tx Failure" is the the catch all bucket| Counter | -**Example metrics** - -``` -go_goroutines 29 -... -go_threads 39 -... -observed_packets{chain="cosmoshub-4",channel="channel-141",path="hubosmo",port="transfer",type="acknowledge_packet"} 57 -observed_packets{chain="cosmoshub-4",channel="channel-141",path="hubosmo",port="transfer",type="recv_packet"} 103 -observed_packets{chain="cosmoshub-4",channel="channel-141",path="hubosmo",port="transfer",type="send_packet"} 58 -observed_packets{chain="osmosis-1",channel="channel-0",path="hubosmo",port="transfer",type="acknowledge_packet"} 107 -observed_packets{chain="osmosis-1",channel="channel-0",path="hubosmo",port="transfer",type="recv_packet"} 60 -observed_packets{chain="osmosis-1",channel="channel-0",path="hubosmo",port="transfer",type="send_packet"} 102 -... -relayed_packets{chain="cosmoshub-4",channel="channel-141",path="hubosmo",port="transfer",type="acknowledge_packet"} 31 -relayed_packets{chain="cosmoshub-4",channel="channel-141",path="hubosmo",port="transfer",type="recv_packet"} 65 -relayed_packets{chain="osmosis-1",channel="channel-0",path="hubosmo",port="transfer",type="acknowledge_packet"} 36 -relayed_packets{chain="osmosis-1",channel="channel-0",path="hubosmo",port="transfer",type="recv_packet"} 35 -``` +| **Exported Metric** | **Description** | **Type** | +|:---------------------------------------------: |:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |:--------: | +| cosmos_relayer_observed_packets | The total number of observed packets | Counter | +| cosmos_relayer_relayed_packets | The total number of relayed packets | Counter | +| cosmos_relayer_chain_latest_height | The current height of the chain | Gauge | +| cosmos_relayer_wallet_balance | The current balance for the relayer's wallet | Gauge | +| cosmos_relayer_fees_spent | The amount of fees spent from the relayer's wallet | Gauge | +| cosmos_relayer_tx_failure |
The total number of tx failures broken up into categories:
- "packet messages are redundant"
- "insufficient funds"
- "invalid coins"
- "out of gas"


"Tx Failure" is the the catch all bucket | Counter | +| cosmos_relayer_block_query_errors_total | The total number of block query failures. The failures are separated into two categories:
- "RPC Client"
- "IBC Header" | Counter | +| cosmos_relayer_client_expiration_seconds | Seconds until the client expires | Gauge | +| cosmos_relayer_client_trusting_period_seconds | The trusting period (in seconds) of the client | Gauge | + + --- diff --git a/relayer/processor/message_processor.go b/relayer/processor/message_processor.go index d5c8f9db4..9b9ed250e 100644 --- a/relayer/processor/message_processor.go +++ b/relayer/processor/message_processor.go @@ -148,6 +148,7 @@ func (mp *messageProcessor) shouldUpdateClientNow(ctx context.Context, src, dst if mp.metrics != nil { timeToExpiration := dst.clientState.TrustingPeriod - time.Since(consensusHeightTime) mp.metrics.SetClientExpiration(src.info.PathName, dst.info.ChainID, dst.clientState.ClientID, fmt.Sprint(dst.clientState.TrustingPeriod.String()), timeToExpiration) + mp.metrics.SetClientTrustingPeriod(src.info.PathName, dst.info.ChainID, dst.info.ClientID, time.Duration(dst.clientState.TrustingPeriod)) } if shouldUpdateClientNow { diff --git a/relayer/processor/metrics.go b/relayer/processor/metrics.go index 6e522cfc2..0b40e3d1a 100644 --- a/relayer/processor/metrics.go +++ b/relayer/processor/metrics.go @@ -17,6 +17,7 @@ type PrometheusMetrics struct { TxFailureError *prometheus.CounterVec BlockQueryFailure *prometheus.CounterVec ClientExpiration *prometheus.GaugeVec + ClientTrustingPeriod *prometheus.GaugeVec } func (m *PrometheusMetrics) AddPacketsObserved(path, chain, channel, port, eventType string, count int) { @@ -43,6 +44,10 @@ func (m *PrometheusMetrics) SetClientExpiration(pathName, chain, clientID, trust m.ClientExpiration.WithLabelValues(pathName, chain, clientID, trustingPeriod).Set(timeToExpiration.Seconds()) } +func (m *PrometheusMetrics) SetClientTrustingPeriod(pathName, chain, clientID string, trustingPeriod time.Duration) { + m.ClientTrustingPeriod.WithLabelValues(pathName, chain, clientID).Set(trustingPeriod.Abs().Seconds()) +} + func (m *PrometheusMetrics) IncBlockQueryFailure(chain, err string) { m.BlockQueryFailure.WithLabelValues(chain, err).Inc() } @@ -58,6 +63,7 @@ func NewPrometheusMetrics() *PrometheusMetrics { blockQueryFailureLabels := []string{"chain", "type"} walletLabels := []string{"chain", "gas_price", "key", "address", "denom"} clientExpirationLables := []string{"path_name", "chain", "client_id", "trusting_period"} + clientTrustingPeriodLables := []string{"path_name", "chain", "client_id"} registry := prometheus.NewRegistry() registerer := promauto.With(registry) return &PrometheusMetrics{ @@ -88,11 +94,15 @@ func NewPrometheusMetrics() *PrometheusMetrics { }, txFailureLabels), BlockQueryFailure: registerer.NewCounterVec(prometheus.CounterOpts{ Name: "cosmos_relayer_block_query_errors_total", - Help: "The total number of block query failures. The failures are separated into two catagories: 'RPC Client' and 'IBC Header'", + Help: "The total number of block query failures. The failures are separated into two categories: 'RPC Client' and 'IBC Header'", }, blockQueryFailureLabels), ClientExpiration: registerer.NewGaugeVec(prometheus.GaugeOpts{ Name: "cosmos_relayer_client_expiration_seconds", Help: "Seconds until the client expires", }, clientExpirationLables), + ClientTrustingPeriod: registerer.NewGaugeVec(prometheus.GaugeOpts{ + Name: "cosmos_relayer_client_trusting_period_seconds", + Help: "The trusting period (in seconds) of the client", + }, clientTrustingPeriodLables), } } From f054ac4658293d563bf29968af5b46331cea9712 Mon Sep 17 00:00:00 2001 From: mmsqe Date: Sat, 29 Jul 2023 10:50:10 +0800 Subject: [PATCH 12/16] separate feegrant test to avoid no space left on device (#1250) from scenarios test in ci --- .github/workflows/interchaintest.yml | 22 ++++++++++++++++++++++ Makefile | 3 +++ interchaintest/feegrant_test.go | 8 ++++---- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/.github/workflows/interchaintest.yml b/.github/workflows/interchaintest.yml index 814b44289..cffb9647e 100644 --- a/.github/workflows/interchaintest.yml +++ b/.github/workflows/interchaintest.yml @@ -117,6 +117,28 @@ jobs: - name: interchaintest run: make interchaintest-fee-middleware + fee-grant: + runs-on: ubuntu-latest + steps: + - name: Set up Go 1.20 + uses: actions/setup-go@v1 + with: + go-version: 1.20 + id: go + + - name: checkout relayer + uses: actions/checkout@v2 + + - uses: actions/cache@v1 + with: + path: ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-go- + + - name: interchaintest + run: make interchaintest-fee-grant + scenarios: runs-on: ubuntu-latest steps: diff --git a/Makefile b/Makefile index 66f67961d..20e9bbb2b 100644 --- a/Makefile +++ b/Makefile @@ -88,6 +88,9 @@ interchaintest-misbehaviour: interchaintest-fee-middleware: cd interchaintest && go test -race -v -run TestRelayerFeeMiddleware . +interchaintest-fee-grant: + cd interchaintest && go test -race -v -run TestRelayerFeeGrant . + interchaintest-scenario: ## Scenario tests are suitable for simple networks of 1 validator and no full nodes. They test specific functionality. cd interchaintest && go test -timeout 30m -race -v -run TestScenario ./... diff --git a/interchaintest/feegrant_test.go b/interchaintest/feegrant_test.go index 0d0dcd13a..d120c15b5 100644 --- a/interchaintest/feegrant_test.go +++ b/interchaintest/feegrant_test.go @@ -55,12 +55,12 @@ func genMnemonic(t *testing.T) string { return mn } -// TestScenarioFeegrantBasic Feegrant on a single chain -// Run this test with e.g. go test -timeout 300s -run ^TestScenarioFeegrantBasic$ github.com/cosmos/relayer/v2/ibctest. +// TestRelayerFeeGrant Feegrant on a single chain +// Run this test with e.g. go test -timeout 300s -run ^TestRelayerFeeGrant$ github.com/cosmos/relayer/v2/ibctest. // // Helpful to debug: -// docker ps -a --format {{.Names}} then e.g. docker logs gaia-1-val-0-TestScenarioFeegrantBasic 2>&1 -f -func TestScenarioFeegrantBasic(t *testing.T) { +// docker ps -a --format {{.Names}} then e.g. docker logs gaia-1-val-0-TestRelayerFeeGrant 2>&1 -f +func TestRelayerFeeGrant(t *testing.T) { ctx := context.Background() logger := zaptest.NewLogger(t) From 1301e1d991bdc19d5070ced484fb392e4954d75f Mon Sep 17 00:00:00 2001 From: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> Date: Sat, 29 Jul 2023 07:13:12 -0700 Subject: [PATCH 13/16] Add extra client info when querying client expiration (#1247) * extra client info * cleanup print * remove extra comments * add alias * allow only one client * spelling * remainingTime --------- Co-authored-by: Justin Tieri <37750742+jtieri@users.noreply.github.com> --- cmd/query.go | 35 ++++++++++++------ relayer/query.go | 33 ++++++++++------- relayer/query_test.go | 83 ++++++++++++++++++++++++++++++++++++------- 3 files changed, 115 insertions(+), 36 deletions(-) diff --git a/cmd/query.go b/cmd/query.go index cd91bc2d7..15ccd743a 100644 --- a/cmd/query.go +++ b/cmd/query.go @@ -1070,9 +1070,10 @@ $ %s query unrelayed-acks demo-path channel-0`, func queryClientsExpiration(a *appState) *cobra.Command { cmd := &cobra.Command{ - Use: "clients-expiration path", - Short: "query for light clients expiration date", - Args: withUsage(cobra.ExactArgs(1)), + Use: "clients-expiration path", + Aliases: []string{"ce"}, + Short: "query for light clients expiration date", + Args: withUsage(cobra.ExactArgs(1)), Example: strings.TrimSpace(fmt.Sprintf(` $ %s query clients-expiration demo-path`, appName, @@ -1095,17 +1096,29 @@ $ %s query clients-expiration demo-path`, return err } - srcExpiration, err := relayer.QueryClientExpiration(cmd.Context(), c[src], c[dst]) - if err != nil { - return err + srcExpiration, srcClientInfo, errSrc := relayer.QueryClientExpiration(cmd.Context(), c[src], c[dst]) + if errSrc != nil && !strings.Contains(errSrc.Error(), "light client not found") { + return errSrc } - dstExpiration, err := relayer.QueryClientExpiration(cmd.Context(), c[dst], c[src]) - if err != nil { - return err + dstExpiration, dstClientInfo, errDst := relayer.QueryClientExpiration(cmd.Context(), c[dst], c[src]) + if errDst != nil && !strings.Contains(errDst.Error(), "light client not found") { + return errDst + } + + // if only the src light client is found, just print info for source light client + if errSrc == nil && errDst != nil { + fmt.Fprintln(cmd.OutOrStdout(), relayer.SPrintClientExpiration(c[src], srcExpiration, srcClientInfo)) + return nil + } + + // if only the dst light client is found, just print info for destination light client + if errDst == nil && errSrc != nil { + fmt.Fprintln(cmd.OutOrStdout(), relayer.SPrintClientExpiration(c[dst], dstExpiration, dstClientInfo)) + return nil } - fmt.Fprintf(cmd.OutOrStdout(), relayer.SPrintClientExpiration(c[src], srcExpiration)) - fmt.Fprintf(cmd.OutOrStdout(), relayer.SPrintClientExpiration(c[dst], dstExpiration)) + fmt.Fprintln(cmd.OutOrStdout(), relayer.SPrintClientExpiration(c[src], srcExpiration, srcClientInfo)) + fmt.Fprintln(cmd.OutOrStdout(), relayer.SPrintClientExpiration(c[dst], dstExpiration, dstClientInfo)) return nil }, diff --git a/relayer/query.go b/relayer/query.go index 24c40672a..08b2ec1b0 100644 --- a/relayer/query.go +++ b/relayer/query.go @@ -272,39 +272,48 @@ func QueryBalance(ctx context.Context, chain *Chain, address string, showDenoms return out, nil } -func QueryClientExpiration(ctx context.Context, src, dst *Chain) (time.Time, error) { +func QueryClientExpiration(ctx context.Context, src, dst *Chain) (time.Time, ClientStateInfo, error) { latestHeight, err := src.ChainProvider.QueryLatestHeight(ctx) if err != nil { - return time.Time{}, err + return time.Time{}, ClientStateInfo{}, err } clientStateRes, err := src.ChainProvider.QueryClientStateResponse(ctx, latestHeight, src.ClientID()) if err != nil { - return time.Time{}, err + return time.Time{}, ClientStateInfo{}, err } clientInfo, err := ClientInfoFromClientState(clientStateRes.ClientState) if err != nil { - return time.Time{}, err + return time.Time{}, ClientStateInfo{}, err } clientTime, err := dst.ChainProvider.BlockTime(ctx, int64(clientInfo.LatestHeight.GetRevisionHeight())) if err != nil { - return time.Time{}, err + return time.Time{}, ClientStateInfo{}, err } - return clientTime.Add(clientInfo.TrustingPeriod), nil + return clientTime.Add(clientInfo.TrustingPeriod), clientInfo, nil } -func SPrintClientExpiration(chain *Chain, expiration time.Time) string { +func SPrintClientExpiration(chain *Chain, expiration time.Time, clientInfo ClientStateInfo) string { now := time.Now() remainingTime := expiration.Sub(now) expirationFormatted := expiration.Format(time.RFC822) - if remainingTime < 0 { - return fmt.Sprintf("client %s (%s) is already expired (%s)\n", - chain.ClientID(), chain.ChainID(), expirationFormatted) + var status string + if remainingTime <= 0 { + status = "EXPIRED" + } else { + status = "GOOD" } - return fmt.Sprintf("client %s (%s) expires in %s (%s)\n", - chain.ClientID(), chain.ChainID(), remainingTime.Round(time.Second), expirationFormatted) + + return fmt.Sprintf(` + client: %s (%s) + HEALTH: %s + TIME: %s (%s) + LAST UPDATE HEIGHT: %d + TRUSTING PERIOD: %s + `, + chain.ClientID(), chain.ChainID(), status, expirationFormatted, remainingTime.Round(time.Second), clientInfo.LatestHeight.GetRevisionHeight(), clientInfo.TrustingPeriod.String()) } diff --git a/relayer/query_test.go b/relayer/query_test.go index fb67c60d1..39dc837b7 100644 --- a/relayer/query_test.go +++ b/relayer/query_test.go @@ -1,76 +1,124 @@ package relayer import ( - "github.com/cosmos/relayer/v2/relayer/chains/cosmos" "testing" "time" + "github.com/cosmos/relayer/v2/relayer/chains/cosmos" + + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" "github.com/stretchr/testify/require" ) func TestSPrintClientExpiration_PrintChainId(t *testing.T) { previousTime := time.Now().Add(10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) chain := mockChain("expected-chain-id", "test-client-id") - expiration := SPrintClientExpiration(chain, previousTime) + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, previousTime, *clientStateInfo) require.Contains(t, expiration, "expected-chain-id") } func TestSPrintClientExpiration_PrintClientId(t *testing.T) { previousTime := time.Now().Add(10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) chain := mockChain("test-chain-id", "expected-client-id") - expiration := SPrintClientExpiration(chain, previousTime) + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, previousTime, *clientStateInfo) require.Contains(t, expiration, "expected-client-id") } -func TestSPrintClientExpiration_PrintIsAlreadyExpired_WhenTimeIsInPast(t *testing.T) { +func TestSPrintClientExpiration_PrintExpired_WhenTimeIsInPast(t *testing.T) { previousTime := time.Now().Add(-10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) chain := mockChain("test-chain-id", "test-client-id") - expiration := SPrintClientExpiration(chain, previousTime) + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, previousTime, *clientStateInfo) - require.Contains(t, expiration, "is already expired") + require.Contains(t, expiration, "EXPIRED") } func TestSPrintClientExpiration_PrintRFC822FormattedTime_WhenTimeIsInPast(t *testing.T) { pastTime := time.Now().Add(-10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) - chain := mockChain("test-chain-id", "test-client-id") - expiration := SPrintClientExpiration(chain, pastTime) + chain := mockChain("expected-chain-id", "test-client-id") + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, pastTime, *clientStateInfo) require.Contains(t, expiration, pastTime.Format(time.RFC822)) } -func TestSPrintClientExpiration_PrintExpiresIn_WhenTimeIsInFuture(t *testing.T) { +func TestSPrintClientExpiration_PrintGood_WhenTimeIsInFuture(t *testing.T) { previousTime := time.Now().Add(10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) chain := mockChain("test-chain-id", "test-client-id") - expiration := SPrintClientExpiration(chain, previousTime) + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, previousTime, *clientStateInfo) - require.Contains(t, expiration, "expires in") + require.Contains(t, expiration, "GOOD") } func TestSPrintClientExpiration_PrintRFC822FormattedTime_WhenTimeIsInFuture(t *testing.T) { futureTime := time.Now().Add(10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) chain := mockChain("test-chain-id", "test-client-id") - expiration := SPrintClientExpiration(chain, futureTime) + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, futureTime, *clientStateInfo) require.Contains(t, expiration, futureTime.Format(time.RFC822)) } func TestSPrintClientExpiration_PrintRemainingTime_WhenTimeIsInFuture(t *testing.T) { futureTime := time.Now().Add(10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) chain := mockChain("test-chain-id", "test-client-id") - expiration := SPrintClientExpiration(chain, futureTime) + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, futureTime, *clientStateInfo) require.Contains(t, expiration, "10h0m0s") } +func TestSPrintClientExpiration_TrustingPeriod(t *testing.T) { + previousTime := time.Now().Add(10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) + + chain := mockChain("expected-chain-id", "test-client-id") + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, previousTime, *clientStateInfo) + + require.Contains(t, expiration, "1h0m0s") +} + +func TestSPrintClientExpiration_LastUpdateHeight(t *testing.T) { + previousTime := time.Now().Add(10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) + + chain := mockChain("expected-chain-id", "test-client-id") + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, previousTime, *clientStateInfo) + + require.Contains(t, expiration, "100") +} + func mockChain(chainId string, clientId string) *Chain { return &Chain{ Chainid: chainId, @@ -85,3 +133,12 @@ func mockChain(chainId string, clientId string) *Chain { }, } } + +func mockClientStateInfo(chainID string, trustingPeriod time.Duration, latestHeight ibcexported.Height) *ClientStateInfo { + mockHeight := clienttypes.NewHeight(1, 100) + return &ClientStateInfo{ + ChainID: chainID, + TrustingPeriod: time.Duration(1 * time.Hour), + LatestHeight: mockHeight, + } +} From ab1c4fc1dfe9d82a0bd8227596b7b4045831856a Mon Sep 17 00:00:00 2001 From: Andrew Gouin Date: Mon, 31 Jul 2023 16:12:06 -0500 Subject: [PATCH 14/16] next seq ack handling (#1244) * next seq ack handling and chan order * use max msgs for ack flush * improve logs * fix check * don't override unless not chantypes.NONE * fix: Suppressing scary SDK error on redundant packets (#1214) Co-authored-by: Andrew Gouin * tidy logic * improve logic and order detection * shorten flushFailureRetry * check empty string * tidy logs. better account sequence regex. don't split up ordered channel batches --------- Co-authored-by: Joe Abbey Co-authored-by: jtieri --- .gitignore | 2 + go.work.sum | 1238 ----------------- .../chains/cosmos/cosmos_chain_processor.go | 16 +- relayer/chains/cosmos/message_handlers.go | 10 +- .../chains/cosmos/message_handlers_test.go | 10 +- relayer/chains/cosmos/query.go | 23 + relayer/chains/cosmos/tx.go | 23 +- relayer/chains/mock/mock_chain_processor.go | 2 +- relayer/chains/penumbra/message_handlers.go | 8 +- .../penumbra/penumbra_chain_processor.go | 5 +- relayer/chains/penumbra/query.go | 23 + relayer/processor/message_processor.go | 9 +- relayer/processor/path_end_runtime.go | 2 +- relayer/processor/path_processor.go | 16 +- relayer/processor/path_processor_internal.go | 239 +++- relayer/processor/types.go | 24 +- relayer/provider/provider.go | 1 + 17 files changed, 293 insertions(+), 1358 deletions(-) delete mode 100644 go.work.sum diff --git a/.gitignore b/.gitignore index 835dd0cc9..1af13e52e 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,5 @@ dist/ # Don't commit the vendor directory if anyone runs 'go mod vendor'. /vendor + +go.work.sum diff --git a/go.work.sum b/go.work.sum deleted file mode 100644 index 4232792ab..000000000 --- a/go.work.sum +++ /dev/null @@ -1,1238 +0,0 @@ -4d63.com/gochecknoglobals v0.1.0 h1:zeZSRqj5yCg28tCkIV/z/lWbwvNm5qnKVS15PI8nhD0= -4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= -bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512 h1:SRsZGA7aFnCZETmov57jwPrWuTmaZK6+4R4v5FUe1/c= -bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= -cloud.google.com/go v0.0.0-20170206221025-ce650573d812/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= -cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= -cloud.google.com/go/accessapproval v1.5.0 h1:/nTivgnV/n1CaAeo+ekGexTYUsKEU9jUVkoY5359+3Q= -cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= -cloud.google.com/go/accessapproval v1.6.0 h1:x0cEHro/JFPd7eS4BlEWNTMecIj2HdXjOVB5BtvwER0= -cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= -cloud.google.com/go/accesscontextmanager v1.7.0 h1:MG60JgnEoawHJrbWw0jGdv6HLNSf6gQvYRiXpuzqgEA= -cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= -cloud.google.com/go/aiplatform v1.37.0 h1:zTw+suCVchgZyO+k847wjzdVjWmrAuehxdvcZvJwfGg= -cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= -cloud.google.com/go/analytics v0.19.0 h1:LqAo3tAh2FU9+w/r7vc3hBjU23Kv7GhO/PDIW7kIYgM= -cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= -cloud.google.com/go/apigateway v1.5.0 h1:ZI9mVO7x3E9RK/BURm2p1aw9YTBSCQe3klmyP1WxWEg= -cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= -cloud.google.com/go/apigeeconnect v1.5.0 h1:sWOmgDyAsi1AZ48XRHcATC0tsi9SkPT7DA/+VCfkaeA= -cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= -cloud.google.com/go/apigeeregistry v0.6.0 h1:E43RdhhCxdlV+I161gUY2rI4eOaMzHTA5kNkvRsFXvc= -cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= -cloud.google.com/go/apikeys v0.6.0 h1:B9CdHFZTFjVti89tmyXXrO+7vSNo2jvZuHG8zD5trdQ= -cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= -cloud.google.com/go/appengine v1.7.1 h1:aBGDKmRIaRRoWJ2tAoN0oVSHoWLhtO9aj/NvUyP4aYs= -cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= -cloud.google.com/go/area120 v0.7.1 h1:ugckkFh4XkHJMPhTIx0CyvdoBxmOpMe8rNs4Ok8GAag= -cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= -cloud.google.com/go/artifactregistry v1.13.0 h1:o1Q80vqEB6Qp8WLEH3b8FBLNUCrGQ4k5RFj0sn/sgO8= -cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= -cloud.google.com/go/asset v1.13.0 h1:YAsssO08BqZ6mncbb6FPlj9h6ACS7bJQUOlzciSfbNk= -cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= -cloud.google.com/go/assuredworkloads v1.10.0 h1:VLGnVFta+N4WM+ASHbhc14ZOItOabDLH1MSoDv+Xuag= -cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/automl v1.12.0 h1:50VugllC+U4IGl3tDNcZaWvApHBTrn/TvyHDJ0wM+Uw= -cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= -cloud.google.com/go/baremetalsolution v0.5.0 h1:2AipdYXL0VxMboelTTw8c1UJ7gYu35LZYUbuRv9Q28s= -cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= -cloud.google.com/go/batch v0.7.0 h1:YbMt0E6BtqeD5FvSv1d56jbVsWEzlGm55lYte+M6Mzs= -cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= -cloud.google.com/go/beyondcorp v0.5.0 h1:UkY2BTZkEUAVrgqnSdOJ4p3y9ZRBPEe1LkjgC8Bj/Pc= -cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= -cloud.google.com/go/bigquery v1.50.0 h1:RscMV6LbnAmhAzD893Lv9nXXy2WCaJmbxYPWDLbGqNQ= -cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= -cloud.google.com/go/billing v1.13.0 h1:JYj28UYF5w6VBAh0gQYlgHJ/OD1oA+JgW29YZQU+UHM= -cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= -cloud.google.com/go/binaryauthorization v1.5.0 h1:d3pMDBCCNivxt5a4eaV7FwL7cSH0H7RrEnFrTb1QKWs= -cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= -cloud.google.com/go/certificatemanager v1.6.0 h1:5C5UWeSt8Jkgp7OWn2rCkLmYurar/vIWIoSQ2+LaTOc= -cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= -cloud.google.com/go/channel v1.12.0 h1:GpcQY5UJKeOekYgsX3QXbzzAc/kRGtBq43fTmyKe6Uw= -cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= -cloud.google.com/go/cloudbuild v1.9.0 h1:GHQCjV4WlPPVU/j3Rlpc8vNIDwThhd1U9qSY/NPZdko= -cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= -cloud.google.com/go/clouddms v1.5.0 h1:E7v4TpDGUyEm1C/4KIrpVSOCTm0P6vWdHT0I4mostRA= -cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= -cloud.google.com/go/cloudtasks v1.10.0 h1:uK5k6abf4yligFgYFnG0ni8msai/dSv6mDmiBulU0hU= -cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= -cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= -cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/contactcenterinsights v1.6.0 h1:jXIpfcH/VYSE1SYcPzO0n1VVb+sAamiLOgCw45JbOQk= -cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= -cloud.google.com/go/container v1.15.0 h1:NKlY/wCDapfVZlbVVaeuu2UZZED5Dy1z4Zx1KhEzm8c= -cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= -cloud.google.com/go/containeranalysis v0.9.0 h1:EQ4FFxNaEAg8PqQCO7bVQfWz9NVwZCUKaM1b3ycfx3U= -cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= -cloud.google.com/go/datacatalog v1.13.0 h1:4H5IJiyUE0X6ShQBqgFFZvGGcrwGVndTwUSLP4c52gw= -cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= -cloud.google.com/go/dataflow v0.8.0 h1:eYyD9o/8Nm6EttsKZaEGD84xC17bNgSKCu0ZxwqUbpg= -cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= -cloud.google.com/go/dataform v0.7.0 h1:Dyk+fufup1FR6cbHjFpMuP4SfPiF3LI3JtoIIALoq48= -cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= -cloud.google.com/go/datafusion v1.6.0 h1:sZjRnS3TWkGsu1LjYPFD/fHeMLZNXDK6PDHi2s2s/bk= -cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= -cloud.google.com/go/datalabeling v0.7.0 h1:ch4qA2yvddGRUrlfwrNJCr79qLqhS9QBwofPHfFlDIk= -cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= -cloud.google.com/go/dataplex v1.6.0 h1:RvoZ5T7gySwm1CHzAw7yY1QwwqaGswunmqEssPxU/AM= -cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= -cloud.google.com/go/dataproc v1.12.0 h1:W47qHL3W4BPkAIbk4SWmIERwsWBaNnWm0P2sdx3YgGU= -cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= -cloud.google.com/go/dataqna v0.7.0 h1:yFzi/YU4YAdjyo7pXkBE2FeHbgz5OQQBVDdbErEHmVQ= -cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= -cloud.google.com/go/datastore v1.11.0 h1:iF6I/HaLs3Ado8uRKMvZRvF/ZLkWaWE9i8AiHzbC774= -cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= -cloud.google.com/go/datastream v1.7.0 h1:BBCBTnWMDwwEzQQmipUXxATa7Cm7CA/gKjKcR2w35T0= -cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= -cloud.google.com/go/deploy v1.8.0 h1:otshdKEbmsi1ELYeCKNYppwV0UH5xD05drSdBm7ouTk= -cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= -cloud.google.com/go/dialogflow v1.32.0 h1:uVlKKzp6G/VtSW0E7IH1Y5o0H48/UOCmqksG2riYCwQ= -cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= -cloud.google.com/go/dlp v1.9.0 h1:1JoJqezlgu6NWCroBxr4rOZnwNFILXr4cB9dMaSKO4A= -cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= -cloud.google.com/go/documentai v1.18.0 h1:KM3Xh0QQyyEdC8Gs2vhZfU+rt6OCPF0dwVwxKgLmWfI= -cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= -cloud.google.com/go/domains v0.8.0 h1:2ti/o9tlWL4N+wIuWUNH+LbfgpwxPr8J1sv9RHA4bYQ= -cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= -cloud.google.com/go/edgecontainer v1.0.0 h1:O0YVE5v+O0Q/ODXYsQHmHb+sYM8KNjGZw2pjX2Ws41c= -cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= -cloud.google.com/go/errorreporting v0.3.0 h1:kj1XEWMu8P0qlLhm3FwcaFsUvXChV/OraZwA70trRR0= -cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= -cloud.google.com/go/essentialcontacts v1.5.0 h1:gIzEhCoOT7bi+6QZqZIzX1Erj4SswMPIteNvYVlu+pM= -cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= -cloud.google.com/go/eventarc v1.11.0 h1:fsJmNeqvqtk74FsaVDU6cH79lyZNCYP8Rrv7EhaB/PU= -cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= -cloud.google.com/go/filestore v1.6.0 h1:ckTEXN5towyTMu4q0uQ1Mde/JwTHur0gXs8oaIZnKfw= -cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= -cloud.google.com/go/firestore v1.9.0 h1:IBlRyxgGySXu5VuW0RgGFlTtLukSnNkpDiEOMkQkmpA= -cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -cloud.google.com/go/functions v1.13.0 h1:pPDqtsXG2g9HeOQLoquLbmvmb82Y4Ezdo1GXuotFoWg= -cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= -cloud.google.com/go/gaming v1.9.0 h1:7vEhFnZmd931Mo7sZ6pJy7uQPDxF7m7v8xtBheG08tc= -cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= -cloud.google.com/go/gkebackup v0.4.0 h1:za3QZvw6ujR0uyqkhomKKKNoXDyqYGPJies3voUK8DA= -cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= -cloud.google.com/go/gkeconnect v0.7.0 h1:gXYKciHS/Lgq0GJ5Kc9SzPA35NGc3yqu6SkjonpEr2Q= -cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= -cloud.google.com/go/gkehub v0.12.0 h1:TqCSPsEBQ6oZSJgEYZ3XT8x2gUadbvfwI32YB0kuHCs= -cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= -cloud.google.com/go/gkemulticloud v0.5.0 h1:8I84Q4vl02rJRsFiinBxl7WCozfdLlUVBQuSrqr9Wtk= -cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= -cloud.google.com/go/grafeas v0.2.0 h1:CYjC+xzdPvbV65gi6Dr4YowKcmLo045pm18L0DhdELM= -cloud.google.com/go/gsuiteaddons v1.5.0 h1:1mvhXqJzV0Vg5Fa95QwckljODJJfDFXV4pn+iL50zzA= -cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= -cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= -cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= -cloud.google.com/go/iap v1.7.1 h1:PxVHFuMxmSZyfntKXHXhd8bo82WJ+LcATenq7HLdVnU= -cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= -cloud.google.com/go/ids v1.3.0 h1:fodnCDtOXuMmS8LTC2y3h8t24U8F3eKWfhi+3LY6Qf0= -cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= -cloud.google.com/go/iot v1.6.0 h1:39W5BFSarRNZfVG0eXI5LYux+OVQT8GkgpHCnrZL2vM= -cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= -cloud.google.com/go/kms v1.10.1 h1:7hm1bRqGCA1GBRQUrp831TwJ9TWhP+tvLuP497CQS2g= -cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= -cloud.google.com/go/language v1.9.0 h1:7Ulo2mDk9huBoBi8zCE3ONOoBrL6UXfAI71CLQ9GEIM= -cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= -cloud.google.com/go/lifesciences v0.8.0 h1:uWrMjWTsGjLZpCTWEAzYvyXj+7fhiZST45u9AgasasI= -cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= -cloud.google.com/go/logging v1.7.0 h1:CJYxlNNNNAMkHp9em/YEXcfJg+rPDg7YfwoRpMU+t5I= -cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= -cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= -cloud.google.com/go/managedidentities v1.5.0 h1:ZRQ4k21/jAhrHBVKl/AY7SjgzeJwG1iZa+mJ82P+VNg= -cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= -cloud.google.com/go/maps v0.7.0 h1:mv9YaczD4oZBZkM5XJl6fXQ984IkJNHPwkc8MUsdkBo= -cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= -cloud.google.com/go/mediatranslation v0.7.0 h1:anPxH+/WWt8Yc3EdoEJhPMBRF7EhIdz426A+tuoA0OU= -cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= -cloud.google.com/go/memcache v1.9.0 h1:8/VEmWCpnETCrBwS3z4MhT+tIdKgR1Z4Tr2tvYH32rg= -cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= -cloud.google.com/go/metastore v1.10.0 h1:QCFhZVe2289KDBQ7WxaHV2rAmPrmRAdLC6gbjUd3HPo= -cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= -cloud.google.com/go/monitoring v1.13.0 h1:2qsrgXGVoRXpP7otZ14eE1I568zAa92sJSDPyOJvwjM= -cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= -cloud.google.com/go/networkconnectivity v1.11.0 h1:ZD6b4Pk1jEtp/cx9nx0ZYcL3BKqDa+KixNDZ6Bjs1B8= -cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= -cloud.google.com/go/networkmanagement v1.6.0 h1:8KWEUNGcpSX9WwZXq7FtciuNGPdPdPN/ruDm769yAEM= -cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= -cloud.google.com/go/networksecurity v0.8.0 h1:sOc42Ig1K2LiKlzG71GUVloeSJ0J3mffEBYmvu+P0eo= -cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= -cloud.google.com/go/notebooks v1.8.0 h1:Kg2K3K7CbSXYJHZ1aGQpf1xi5x2GUvQWf2sFVuiZh8M= -cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= -cloud.google.com/go/optimization v1.3.1 h1:dj8O4VOJRB4CUwZXdmwNViH1OtI0WtWL867/lnYH248= -cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= -cloud.google.com/go/orchestration v1.6.0 h1:Vw+CEXo8M/FZ1rb4EjcLv0gJqqw89b7+g+C/EmniTb8= -cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= -cloud.google.com/go/orgpolicy v1.10.0 h1:XDriMWug7sd0kYT1QKofRpRHzjad0bK8Q8uA9q+XrU4= -cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= -cloud.google.com/go/osconfig v1.11.0 h1:PkSQx4OHit5xz2bNyr11KGcaFccL5oqglFPdTboyqwQ= -cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= -cloud.google.com/go/oslogin v1.9.0 h1:whP7vhpmc+ufZa90eVpkfbgzJRK/Xomjz+XCD4aGwWw= -cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= -cloud.google.com/go/phishingprotection v0.7.0 h1:l6tDkT7qAEV49MNEJkEJTB6vOO/onbSOcNtAT09HPuA= -cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= -cloud.google.com/go/policytroubleshooter v1.6.0 h1:yKAGC4p9O61ttZUswaq9GAn1SZnEzTd0vUYXD7ZBT7Y= -cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= -cloud.google.com/go/privatecatalog v0.8.0 h1:EPEJ1DpEGXLDnmc7mnCAqFmkwUJbIsaLAiLHVOkkwtc= -cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= -cloud.google.com/go/pubsub v1.30.0 h1:vCge8m7aUKBJYOgrZp7EsNDf6QMd2CAlXZqWTn3yq6s= -cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= -cloud.google.com/go/pubsublite v1.7.0 h1:cb9fsrtpINtETHiJ3ECeaVzrfIVhcGjhhJEjybHXHao= -cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= -cloud.google.com/go/recaptchaenterprise v1.3.1 h1:u6EznTGzIdsyOsvm+Xkw0aSuKFXQlyjGE9a4exk6iNQ= -cloud.google.com/go/recaptchaenterprise/v2 v2.7.0 h1:6iOCujSNJ0YS7oNymI64hXsjGq60T4FK1zdLugxbzvU= -cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= -cloud.google.com/go/recommendationengine v0.7.0 h1:VibRFCwWXrFebEWKHfZAt2kta6pS7Tlimsnms0fjv7k= -cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= -cloud.google.com/go/recommender v1.9.0 h1:ZnFRY5R6zOVk2IDS1Jbv5Bw+DExCI5rFumsTnMXiu/A= -cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= -cloud.google.com/go/redis v1.11.0 h1:JoAd3SkeDt3rLFAAxEvw6wV4t+8y4ZzfZcZmddqphQ8= -cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= -cloud.google.com/go/resourcemanager v1.7.0 h1:NRM0p+RJkaQF9Ee9JMnUV9BQ2QBIOq/v8M+Pbv/wmCs= -cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= -cloud.google.com/go/resourcesettings v1.5.0 h1:8Dua37kQt27CCWHm4h/Q1XqCF6ByD7Ouu49xg95qJzI= -cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= -cloud.google.com/go/retail v1.12.0 h1:1Dda2OpFNzIb4qWgFZjYlpP7sxX3aLeypKG6A3H4Yys= -cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= -cloud.google.com/go/run v0.9.0 h1:ydJQo+k+MShYnBfhaRHSZYeD/SQKZzZLAROyfpeD9zw= -cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= -cloud.google.com/go/scheduler v1.9.0 h1:NpQAHtx3sulByTLe2dMwWmah8PWgeoieFPpJpArwFV0= -cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= -cloud.google.com/go/secretmanager v1.10.0 h1:pu03bha7ukxF8otyPKTFdDz+rr9sE3YauS5PliDXK60= -cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= -cloud.google.com/go/security v1.13.0 h1:PYvDxopRQBfYAXKAuDpFCKBvDOWPWzp9k/H5nB3ud3o= -cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= -cloud.google.com/go/securitycenter v1.19.0 h1:AF3c2s3awNTMoBtMX3oCUoOMmGlYxGOeuXSYHNBkf14= -cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= -cloud.google.com/go/servicecontrol v1.11.1 h1:d0uV7Qegtfaa7Z2ClDzr9HJmnbJW7jn0WhZ7wOX6hLE= -cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= -cloud.google.com/go/servicedirectory v1.9.0 h1:SJwk0XX2e26o25ObYUORXx6torSFiYgsGkWSkZgkoSU= -cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= -cloud.google.com/go/servicemanagement v1.8.0 h1:fopAQI/IAzlxnVeiKn/8WiV6zKndjFkvi+gzu+NjywY= -cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= -cloud.google.com/go/serviceusage v1.6.0 h1:rXyq+0+RSIm3HFypctp7WoXxIA563rn206CfMWdqXX4= -cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= -cloud.google.com/go/shell v1.6.0 h1:wT0Uw7ib7+AgZST9eCDygwTJn4+bHMDtZo5fh7kGWDU= -cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= -cloud.google.com/go/spanner v1.45.0 h1:7VdjZ8zj4sHbDw55atp5dfY6kn1j9sam9DRNpPQhqR4= -cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= -cloud.google.com/go/speech v1.15.0 h1:JEVoWGNnTF128kNty7T4aG4eqv2z86yiMJPT9Zjp+iw= -cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= -cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= -cloud.google.com/go/storagetransfer v1.8.0 h1:5T+PM+3ECU3EY2y9Brv0Sf3oka8pKmsCfpQ07+91G9o= -cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= -cloud.google.com/go/talent v1.5.0 h1:nI9sVZPjMKiO2q3Uu0KhTDVov3Xrlpt63fghP9XjyEM= -cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= -cloud.google.com/go/texttospeech v1.6.0 h1:H4g1ULStsbVtalbZGktyzXzw6jP26RjVGYx9RaYjBzc= -cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= -cloud.google.com/go/tpu v1.5.0 h1:/34T6CbSi+kTv5E19Q9zbU/ix8IviInZpzwz3rsFE+A= -cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= -cloud.google.com/go/trace v1.9.0 h1:olxC0QHC59zgJVALtgqfD9tGk0lfeCP5/AGXL3Px/no= -cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= -cloud.google.com/go/translate v1.7.0 h1:GvLP4oQ4uPdChBmBaUSa/SaZxCdyWELtlAaKzpHsXdA= -cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= -cloud.google.com/go/video v1.15.0 h1:upIbnGI0ZgACm58HPjAeBMleW3sl5cT84AbYQ8PWOgM= -cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= -cloud.google.com/go/videointelligence v1.10.0 h1:Uh5BdoET8XXqXX2uXIahGb+wTKbLkGH7s4GXR58RrG8= -cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= -cloud.google.com/go/vision v1.2.0 h1:/CsSTkbmO9HC8iQpxbK8ATms3OQaX3YQUeTMGCxlaK4= -cloud.google.com/go/vision/v2 v2.7.0 h1:8C8RXUJoflCI4yVdqhTy9tRyygSHmp60aP363z23HKg= -cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= -cloud.google.com/go/vmmigration v1.6.0 h1:Azs5WKtfOC8pxvkyrDvt7J0/4DYBch0cVbuFfCCFt5k= -cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= -cloud.google.com/go/vmwareengine v0.3.0 h1:b0NBu7S294l0gmtrT0nOJneMYgZapr5x9tVWvgDoVEM= -cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= -cloud.google.com/go/vpcaccess v1.6.0 h1:FOe6CuiQD3BhHJWt7E8QlbBcaIzVRddupwJlp7eqmn4= -cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= -cloud.google.com/go/webrisk v1.8.0 h1:IY+L2+UwxcVm2zayMAtBhZleecdIFLiC+QJMzgb0kT0= -cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= -cloud.google.com/go/websecurityscanner v1.5.0 h1:AHC1xmaNMOZtNqxI9Rmm87IJEyPaRkOxeI0gpAacXGk= -cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= -cloud.google.com/go/workflows v1.10.0 h1:FfGp9w0cYnaKZJhUOMqCOJCYT/WlvYBfTQhFWV3sRKI= -cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY= -github.com/Abirdcfly/dupword v0.0.7 h1:z14n0yytA3wNO2gpCD/jVtp/acEXPGmYu0esewpBt6Q= -github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= -github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= -github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= -github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= -github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q= -github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= -github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1 h1:qoVeMsc9/fh/yhxVaA0obYjVH/oI/ihrOoMwsLS9KSA= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3 h1:E+m3SkZCN0Bf5q7YdTs5lSm2CYY3CK4spn5OmUIiQtk= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0 h1:Px2UA+2RvSSvv+RvJNuUB6n7rs5Wsel4dXLe90Um2n4= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= -github.com/CosmWasm/wasmd v0.40.0-rc.1 h1:prIM2vP1jNh0zgs9seua5BgKdayBgp3FiHtwxFcZSGs= -github.com/CosmWasm/wasmvm v1.2.3 h1:OKYlobwmVGbl0eSn0mXoAAjE5hIuXnQCLPjbNd91sVY= -github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= -github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= -github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= -github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= -github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= -github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= -github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I= -github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= -github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s= -github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= -github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= -github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= -github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/alecthomas/kingpin/v2 v2.3.1 h1:ANLJcKmQm4nIaog7xdr/id6FM6zm5hHnfZrvtKPxqGg= -github.com/alecthomas/kingpin/v2 v2.3.1/go.mod h1:oYL5vtsvEHZGHxU7DMp32Dvx+qL+ptGn6lWaot2vCNE= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= -github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= -github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= -github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= -github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= -github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= -github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= -github.com/apache/arrow/go/v11 v11.0.0 h1:hqauxvFQxww+0mEU/2XHG6LT7eZternCZq+A5Yly2uM= -github.com/apache/thrift v0.16.0 h1:qEy6UW60iVOlUy+b9ZR0d5WzUWYGOo4HfopoyBaNmoY= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= -github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a h1:pv34s756C4pEXnjgPfGYgdhg/ZdajGhyOvzx8k+23nw= -github.com/ashanbrown/forbidigo v1.3.0 h1:VkYIwb/xxdireGAdJNZoo24O4lmnEWkactplBlWTShc= -github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= -github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s= -github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= -github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= -github.com/aws/aws-lambda-go v1.13.3 h1:SuCy7H3NLyp+1Mrfp+m80jcbi9KYWAs9/BXwppwRDzY= -github.com/aws/aws-sdk-go-v2 v1.9.1 h1:ZbovGV/qo40nrOJ4q8G33AGICzaPI45FHQWJ9650pF4= -github.com/aws/aws-sdk-go-v2/config v1.1.1 h1:ZAoq32boMzcaTW9bcUacBswAmHTbvlvDJICgHFZuECo= -github.com/aws/aws-sdk-go-v2/credentials v1.1.1 h1:NbvWIM1Mx6sNPTxowHgS2ewXCRp+NGTzUYb/96FZJbY= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2 h1:EtEU7WRaWliitZh2nmuxEXrN0Cb8EgPUFGIoTMeqbzI= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1 h1:w/fPGB0t5rWwA43mux4e9ozFSH5zF1moQemlA131PWc= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2 h1:4AH9fFjUlVktQMznF+YN33aWNXaR4VgDXyP28qokJC0= -github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1 h1:cKr6St+CtC3/dl/rEBJvlk7A/IN5D5F02GNkGzfbtVU= -github.com/aws/aws-sdk-go-v2/service/sso v1.1.1 h1:37QubsarExl5ZuCBlnRP+7l1tNwZPBSTqpTBrPH98RU= -github.com/aws/aws-sdk-go-v2/service/sts v1.1.1 h1:TJoIfnIFubCX0ACVeJ0w46HEH5MwjwYN4iFhuYIhfIY= -github.com/aws/smithy-go v1.8.0 h1:AEwwwXQZtUwP5Mz506FeXXrKBe0jA8gVM+1gEcSRooc= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7A= -github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= -github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= -github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M= -github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= -github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= -github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/bradleyfalzon/ghinstallation/v2 v2.0.4 h1:tXKVfhE7FcSkhkv0UwkLvPDeZ4kz6OXd0PKPlFqf81M= -github.com/breml/bidichk v0.2.3 h1:qe6ggxpTfA8E75hdjWPZ581sY3a2lnl0IRxLQFelECI= -github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= -github.com/breml/errchkjson v0.3.0 h1:YdDqhfqMT+I1vIxPSas44P+9Z9HzJwCeAzjB8PxP1xw= -github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= -github.com/btcsuite/btcd/btcec/v2 v2.2.1/go.mod h1:9/CSmJxmuvqzX9Wh2fXMWToLOHhPd11lSPuIupwTkI8= -github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw= -github.com/btcsuite/goleveldb v1.0.0 h1:Tvd0BfvqX9o823q1j2UZ/epQo09eJh6dTcRp79ilIN4= -github.com/btcsuite/snappy-go v1.0.0 h1:ZxaA6lo2EpxGddsA8JwWOcxlzRybb444sgmeJQMJGQE= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 h1:R8vQdOQdZ9Y3SkEwmHoWBmX1DNXhXZqlTpq6s4tyJGc= -github.com/btcsuite/winsvc v1.0.0 h1:J9B4L7e3oqhXOcm+2IuNApwzQec85lE+QaikUcCs+dk= -github.com/bufbuild/buf v1.7.0 h1:uWRjhIXcrWkzIkA5TqXGyJbF51VW54QJsQZ3nwaes5Q= -github.com/bufbuild/buf v1.7.0/go.mod h1:Go40fMAF46PnPLC7jJgTQhAI95pmC0+VtxFKVC0qLq0= -github.com/bufbuild/connect-go v1.0.0 h1:htSflKUT8y1jxhoPhPYTZMrsY3ipUXjjrbcZR5O2cVo= -github.com/bufbuild/connect-go v1.0.0/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I= -github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= -github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= -github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= -github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/casbin/casbin/v2 v2.37.0 h1:/poEwPSovi4bTOcP752/CsTQiRz2xycyVKFG7GUhbDw= -github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= -github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy6EEutYk= -github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= -github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 h1:E7LT642ysztPWE0dfz43cWOvMiF42DyTRC+eZIaO4yI= -github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= -github.com/checkpoint-restore/go-criu/v5 v5.3.0 h1:wpFFOoomK3389ue2lAb0Boag6XPht5QYpipxmSNL4d8= -github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= -github.com/cheggaaa/pb v1.0.27 h1:wIkZHkNfC7R6GI5w7l/PdAdzXzlrbcI3p8OAlnkTsnc= -github.com/cilium/ebpf v0.7.0 h1:1k/q3ATgxSXRdrmPfH8d7YK0GfqVsEKZAX9dQZvs56k= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= -github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= -github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec h1:EdRZT3IeKQmfCSrgo8SZ8V3MEnskuJP0wCYNpe+aiXo= -github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= -github.com/cloudflare/circl v1.1.0 h1:bZgT/A+cikZnKIwn7xL2OBj012Bmvho/o6RpRvv3GKY= -github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/cloudflare-go v0.14.0 h1:gFqGlGl/5f9UGXAaKapCGUfaTCgRKKnzu2VvzMZlOFA= -github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk= -github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195 h1:58f1tJ1ra+zFINPlwLWvQsR9CzAKt2e+EWV2yX9oXQ4= -github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= -github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= -github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677 h1:qbb/AE938DFhOajUYh9+OXELpSF9KZw2ZivtmW6eX1Q= -github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= -github.com/cometbft/cometbft v0.37.1/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= -github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f h1:C43yEtQ6NIf4ftFXD/V55gnGFgPbMQobd//YlnLjUJ8= -github.com/containerd/aufs v1.0.0 h1:2oeJiwX5HstO7shSrPZjrohJZLzK36wvpdmzDRkL/LY= -github.com/containerd/btrfs v1.0.0 h1:osn1exbzdub9L5SouXO5swW4ea/xVdJZ3wokxN5GrnA= -github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= -github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= -github.com/containerd/fifo v1.0.0 h1:6PirWBr9/L7GDamKr+XM0IeUFXu5mf3M/BPpH9gaLBU= -github.com/containerd/go-cni v1.1.6 h1:el5WPymG5nRRLQF1EfB97FWob4Tdc8INg8RZMaXWZlo= -github.com/containerd/go-runc v1.0.0 h1:oU+lLv1ULm5taqgV/CJivypVODI4SUz1znWjv3nNYS0= -github.com/containerd/imgcrypt v1.1.4 h1:iKTstFebwy3Ak5UF0RHSeuCTahC5OIrPJa6vjMAM81s= -github.com/containerd/nri v0.1.0 h1:6QioHRlThlKh2RkRTR4kIT3PKAcrLo3gIWnjkM4dQmQ= -github.com/containerd/ttrpc v1.1.0 h1:GbtyLRxb0gOLR0TYQWt3O6B0NvT8tMdorEHqIQo/lWI= -github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY= -github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= -github.com/containerd/zfs v1.0.0 h1:cXLJbx+4Jj7rNsTiqVfm6i+RNLx6FFA2fMmDlEf+Wm8= -github.com/containernetworking/cni v1.1.1 h1:ky20T7c0MvKvbMOwS/FrlbNwjEoqJEUUYfsL4b0mc4k= -github.com/containernetworking/plugins v1.1.1 h1:+AGfFigZ5TiQH00vhR8qPeSatj53eNGz0C1d3wVYlHE= -github.com/containers/ocicrypt v1.1.3 h1:uMxn2wTb4nDR7GqG3rnZSfpJXqWURfzZ7nKydzIeKpA= -github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04= -github.com/coreos/go-etcd v2.0.0+incompatible h1:bXhRBIXoTm9BYHS3gE0TtQuyNZyeEMux2sDi4oo5YOo= -github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7 h1:u9SHYsPQNyt5tgDm3YN7+9dYrpK96E5wFilTFWIDZOM= -github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf h1:CAKfRE2YtTUIjjh1bkBtyYFaUT/WmOqsJjgtihT0vMI= -github.com/cosmos/cosmos-db v0.0.0-20221226095112-f3c38ecb5e32 h1:zlCp9n3uwQieELltZWHRmwPmPaZ8+XoL2Sj+A2YJlr8= -github.com/cosmos/cosmos-sdk v0.47.2/go.mod h1:zYzgI8w8hhotXTSoGbbSOAKfpJTx4wOy4XgbaKhtRtc= -github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a h1:2humuGPw3O5riJVFq/E2FRjF57UrO97W1qJcGVmK+6k= -github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a/go.mod h1:c8IO23vgNxueCCJlSI9awQtcxsvc+buzaeThB85qfBU= -github.com/cosmos/gogoproto v1.4.1/go.mod h1:Ac9lzL4vFpBMcptJROQ6dQ4M3pOEK5Z/l0Q9p+LoCr4= -github.com/cosmos/gogoproto v1.4.8/go.mod h1:hnb0DIEWTv+wdNzNcqus5xCQXq5+CXauq1FJuurRfVY= -github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= -github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= -github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= -github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= -github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= -github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= -github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= -github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= -github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= -github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= -github.com/daixiang0/gci v0.8.1 h1:T4xpSC+hmsi4CSyuYfIJdMZAr9o7xZmHpQVygMghGZ4= -github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= -github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= -github.com/decred/dcrd/lru v1.0.0 h1:Kbsb1SFDsIlaupWPwsPp+dkxiBY1frcS07PCPgotKz8= -github.com/deepmap/oapi-codegen v1.8.2 h1:SegyeYGcdi0jLLrpbCMoJxnUUn8GBXHsvr4rbzjuhfU= -github.com/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU= -github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= -github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= -github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= -github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 h1:Izz0+t1Z5nI16/II7vuEo/nHjodOg0p7+OiDpjX5t1E= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.24+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= -github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= -github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf h1:Yt+4K30SdjOkRoRRm3vYNQgR+/ZIy0RmeUDZo7Y8zeQ= -github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= -github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= -github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= -github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= -github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= -github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= -github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/envoyproxy/go-control-plane v0.11.0 h1:jtLewhRR2vMRNnq2ZZUoCjUlgut+Y0+sDDWPOfwOi1o= -github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= -github.com/envoyproxy/protoc-gen-validate v0.10.0 h1:oIfnZFdC0YhpNNEX+SuIqko4cqqVZeN9IGTrhZje83Y= -github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= -github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= -github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= -github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= -github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= -github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= -github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= -github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= -github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c h1:CndMRAH4JIwxbW8KYq6Q+cGWcGHz0FjGR3QqcInWcW0= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= -github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db h1:gb2Z18BhTPJPpLQWj4T+rfKHYCHxRHCtRxhKKjRidVw= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 h1:a9ENSRDFBUPkJ5lCgVZh26+ZbGyoVJG7yb5SSzF5H54= -github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= -github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= -github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61 h1:IZqZOB2fydHte3kUgxrzK5E1fW7RQGeDwE8F/ZZnUYc= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= -github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= -github.com/gdamore/tcell/v2 v2.6.0 h1:OKbluoP9VYmJwZwq/iLb4BxwKcwGthaa1YNBJIyCySg= -github.com/getsentry/sentry-go v0.17.0 h1:UustVWnOoDFHBS7IJUB2QK/nB5pap748ZEp0swnQJak= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= -github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= -github.com/go-chi/chi/v5 v5.0.7 h1:rDTPXLDHGATaeHvVlLcR4Qe0zftYethFucbjVQ1PxU8= -github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -github.com/go-critic/go-critic v0.6.5 h1:fDaR/5GWURljXwF8Eh31T2GZNz9X4jeboS912mWF8Uo= -github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= -github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= -github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.4.0 h1:Vaw7LaSTRJOUric7pe4vnzBSgyuf2KrLsu2Y4ZpQBDE= -github.com/go-git/go-billy/v5 v5.4.0/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= -github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= -github.com/go-git/go-git/v5 v5.5.2 h1:v8lgZa5k9ylUw+OR/roJHTxR4QItsNFI5nKtAXFuynw= -github.com/go-git/go-git/v5 v5.5.2/go.mod h1:BE5hUJ5yaV2YMxhmaP4l6RBQ08kMxKSPD4BlxtH7OjI= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4 h1:WtGNWLvXpe6ZudgnXrq0barxBImvnnJoMEhXAzcbM0I= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= -github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= -github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= -github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= -github.com/go-toolsmith/astcopy v1.0.2 h1:YnWf5Rnh1hUudj11kei53kI57quN/VH6Hp1n+erozn0= -github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= -github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= -github.com/go-toolsmith/astequal v1.0.3 h1:+LVdyRatFS+XO78SGV4I3TCEA0AC7fKEGma+fH+674o= -github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= -github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= -github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= -github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= -github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= -github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= -github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= -github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= -github.com/go-toolsmith/typep v1.0.2 h1:8xdsa1+FSIH/RhEkgnD1j2CJOy5mNllW1Q9tRiYwvlk= -github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b h1:khEcpUM4yFcxg4/FHQWkvVRmgijNXRfzkIDHh23ggEo= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= -github.com/go-zookeeper/zk v1.0.2 h1:4mx0EYENAdX/B/rbunjlt5+4RTA/a9SMHBRuSKdGxPM= -github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= -github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= -github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= -github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe h1:6RGUuS7EGotKx6J5HIP8ZtyMdiDscjMLfRBSPuzVVeo= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= -github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzrdA+Nx5WA3tV1N0goTspwmKCQvBY= -github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= -github.com/golangci/golangci-lint v1.50.1 h1:C829clMcZXEORakZlwpk7M4iDw2XiwxxKaG504SZ9zY= -github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.3.5 h1:pLzmVdl3VxTOncgzHcvLOKirdvcx/TydsClUQXTehjo= -github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 h1:DIPQnGy2Gv2FSA4B/hh8Q7xx3B7AIDk3DAMeHclH1vQ= -github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= -github.com/google/flatbuffers v2.0.8+incompatible h1:ivUb1cGomAB101ZM1T0nOiWz9pSrTMoa9+EiY7igmkM= -github.com/google/go-github/v41 v41.0.0 h1:HseJrM2JFf2vfiZJ8anY2hqBjdfY1Vlj/K27ueww4gg= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= -github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= -github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= -github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8 h1:tlyzajkF3030q6M8SvmJSemC9DTHL/xaMa18b65+JM4= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= -github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8 h1:PVRE9d4AQKmbelZ7emNig1+NT27DUmKZn5qXxfio54U= -github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= -github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= -github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= -github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= -github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= -github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= -github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q= -github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= -github.com/gostaticanalysis/forcetypeassert v0.1.0 h1:6eUflI3DiGusXGK6X7cCcIgVCpZ2CiZ1Q7jl6ZxNV70= -github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= -github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk= -github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= -github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible h1:AQwinXlbQR2HvPjQZOmDhRqsv5mZf+Jb1RnSLxcqZcI= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= -github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= -github.com/hashicorp/consul/api v1.20.0 h1:9IHTjNVSZ7MIwjlW3N3a7iGiykCMDpxZu8jsxFJh0yc= -github.com/hashicorp/consul/api v1.20.0/go.mod h1:nR64eD44KQ59Of/ECwt2vUmIK2DKsDzAwTmwmLl8Wpo= -github.com/hashicorp/consul/sdk v0.3.0 h1:UOxjlb4xVNF93jak1mzzoBatyFju9nrkxpVwIp/QqxQ= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= -github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v1.2.0 h1:La19f8d7WIlm4ogzNHB0JGqs5AUDAZ2UfCY4sJXcJdM= -github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-retryablehttp v0.5.3 h1:QlWt0KvWT0lq8MFppF9tsJGF+ynG7ztc2KIPhzRGk7s= -github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= -github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= -github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= -github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= -github.com/hashicorp/mdns v1.0.0 h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs= -github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= -github.com/hashicorp/memberlist v0.1.3 h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M= -github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= -github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= -github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= -github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= -github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= -github.com/hudl/fargo v1.4.0 h1:ZDDILMbB37UlAVLlWcJ2Iz1XuahZZTDZfdCKeclfq2s= -github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= -github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639 h1:mV02weKRL81bEnm8A0HT1/CAelMQDBuQIfLw8n+d6xI= -github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= -github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= -github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/influxdb v1.8.3 h1:WEypI1BQFTT4teLM+1qkEcvUi0dAvopAI/ir0vAiBg8= -github.com/influxdata/influxdb-client-go/v2 v2.4.0 h1:HGBfZYStlx3Kqvsv1h2pJixbCl/jhnFtxpKFAv9Tu5k= -github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab h1:HqW4xhhynfjrtEiiSGcQUd6vrK23iMam1FO8rI7mwig= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 h1:vilfsDSy7TDxedi9gyBkMvAirat/oRcL0lFdJBf6tdM= -github.com/informalsystems/tm-load-test v1.3.0 h1:FGjKy7vBw6mXNakt+wmNWKggQZRsKkEYpaFk/zR64VA= -github.com/informalsystems/tm-load-test v1.3.0/go.mod h1:OQ5AQ9TbT5hKWBNIwsMjn6Bf4O0U4b1kRc+0qZlQJKw= -github.com/intel/goresctrl v0.2.0 h1:JyZjdMQu9Kl/wLXe9xA6s1X+tF6BWsQPFGJMEeCfWzE= -github.com/ipfs/go-datastore v0.5.1 h1:WkRhLuISI+XPD0uk3OskB0fYFSyqK8Ob5ZYew9Qa1nQ= -github.com/ipfs/go-ds-badger v0.3.0 h1:xREL3V0EH9S219kFFueOYJJTcjgNSZ2HY1iSvN7U1Ro= -github.com/ipfs/go-ds-leveldb v0.5.0 h1:s++MEBbD3ZKc9/8/njrn4flZLnCuY9I79v94gBUNumo= -github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= -github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= -github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= -github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a h1:d4+I1YEKVmWZrgkt6jpXBnLgV2ZjO0YxEtLDdfIZfH4= -github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= -github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e h1:UvSe12bq+Uj2hWd8aOlwPmoZ+CITRFrdit+sDGfAg8U= -github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= -github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= -github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= -github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= -github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f h1:BNuUg9k2EiJmlMwjoef3e8vZLHplbVw6DrjGFjLL+Yo= -github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= -github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= -github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= -github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= -github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= -github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= -github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= -github.com/jrick/logrotate v1.0.0 h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= -github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= -github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= -github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/karalabe/usb v0.0.2 h1:M6QQBNxF+CQ8OFvxrT90BA0qBOXymndZnk5q235mFc4= -github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= -github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.6.2 h1:uGQ9xI8/pgc9iOoCe7kWQgRE6SBTrCGmTSf0LrEtY7c= -github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= -github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= -github.com/kkHAIKE/contextcheck v1.1.3 h1:l4pNvrb8JSwRd51ojtcOxOeHJzHek+MtOyXbaR0uvmw= -github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE= -github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= -github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= -github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= -github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8= -github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs= -github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= -github.com/kunwardeep/paralleltest v1.0.6 h1:FCKYMF1OF2+RveWlABsdnmsvJrei5aoyZoaGS+Ugg8g= -github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kyoh86/exportloopref v0.1.8 h1:5Ry/at+eFdkX9Vsdw3qU4YkvGtzuVfzT4X7S77LoN/M= -github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= -github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUcJwlhA= -github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= -github.com/ldez/tagliatelle v0.3.1 h1:3BqVVlReVUZwafJUwQ+oxbx2BEX2vUG4Yu/NOfMiKiM= -github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/leonklingele/grouper v1.1.0 h1:tC2y/ygPbMFSBOs3DcyaEMKnnwH7eYKzohOtRrf0SAg= -github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= -github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= -github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw= -github.com/libp2p/go-libp2p-testing v0.11.0 h1:+R7FRl/U3Y00neyBSM2qgDzqz3HkWH24U9nMlascHL4= -github.com/libp2p/go-mplex v0.7.0 h1:BDhFZdlk5tbr0oyFq/xv/NPGfjbnrsDam1EvutpBDbY= -github.com/libp2p/go-msgio v0.2.0 h1:W6shmB+FeynDrUVl2dgFQvzfBZcXiyqY4VmpQLu9FqU= -github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg= -github.com/libp2p/go-netroute v0.2.0 h1:0FpsbsvuSnAhXFnCY0VLFbJOzaK0VnP0r1QT/o4nWRE= -github.com/libp2p/go-reuseport v0.2.0 h1:18PRvIMlpY6ZK85nIAicSBuXXvrYoSw3dsBAR7zc560= -github.com/libp2p/go-yamux/v3 v3.1.2 h1:lNEy28MBk1HavUAlzKgShp+F6mn/ea1nDYWftZhFW9Q= -github.com/libp2p/zeroconf/v2 v2.2.0 h1:Cup06Jv6u81HLhIj1KasuNM/RHHrJ8T7wOTS4+Tv53Q= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743 h1:143Bb8f8DuGWck/xpNUOckBVYfFbBTnLevfRZ1aVVqo= -github.com/lightstep/lightstep-tracer-go v0.18.1 h1:vi1F1IQ8N7hNWytK9DpJsUfQhGuNSc19z330K6vl4zk= -github.com/lucas-clemente/quic-go v0.28.1 h1:Uo0lvVxWg5la9gflIF9lwa39ONq85Xq2D91YNEIslzU= -github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= -github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= -github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= -github.com/lyft/protoc-gen-star/v2 v2.0.1 h1:keaAo8hRuAT0O3DfJ/wM3rufbAjGeJ1lAtWZHDjKGB0= -github.com/lyft/protoc-gen-validate v0.0.13 h1:KNt/RhmQTOLr7Aj8PsJ7mTronaFyx80mRTT9qF261dA= -github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= -github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= -github.com/maratori/testpackage v1.1.0 h1:GJY4wlzQhuBusMF1oahQCBtUV/AQ/k69IZ68vxaac2Q= -github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= -github.com/marten-seemann/qtls-go1-16 v0.1.5 h1:o9JrYPPco/Nukd/HpOHMHZoBDXQqoNtUCmny98/1uqQ= -github.com/marten-seemann/qtls-go1-17 v0.1.2 h1:JADBlm0LYiVbuSySCHeY863dNkcpMmDR7s0bLKJeYlQ= -github.com/marten-seemann/qtls-go1-18 v0.1.2 h1:JH6jmzbduz0ITVQ7ShevK10Av5+jBEKAHMntXmIV7kM= -github.com/marten-seemann/qtls-go1-19 v0.1.0 h1:rLFKD/9mp/uq1SYGYuVZhm83wkmU95pK5df3GufyYYU= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= -github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= -github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= -github.com/mgechev/revive v1.2.4 h1:+2Hd/S8oO2H0Ikq2+egtNwQsVhAeELHjxjIUFX5ajLI= -github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= -github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= -github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= -github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= -github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible h1:aKW/4cBs+yK6gpqU3K/oIwk9Q/XICqd3zOX/UFuvqmk= -github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/gox v0.4.0 h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc= -github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= -github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= -github.com/moby/buildkit v0.10.4 h1:FvC+buO8isGpUFZ1abdSLdGHZVqg9sqI4BbFL8tlzP4= -github.com/moby/buildkit v0.10.4/go.mod h1:Yajz9vt1Zw5q9Pp4pdb3TCSUXJBIroIQGQ3TTs/sLug= -github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= -github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= -github.com/moby/sys/mountinfo v0.5.0 h1:2Ks8/r6lopsxWi9m58nlwjaeSzUX9iiL1vj5qB/9ObI= -github.com/moby/sys/signal v0.6.0 h1:aDpY94H8VlhTGa9sNYUFCFsMZIUh5wm0B6XkIoJj/iY= -github.com/moby/sys/symlink v0.2.0 h1:tk1rOM+Ljp0nFmfOIBtlV3rTDlWOwFRhjEeAhZB0nZc= -github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4= -github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mrunalp/fileutils v0.5.0 h1:NKzVxiH7eSk+OQ4M+ZYW1K6h27RUV3MI6NUTsHhU6Z4= -github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= -github.com/multiformats/go-multistream v0.3.3 h1:d5PZpjwRgVlbwfdTDjife7XszfZd8KYWfROYFlGcR8o= -github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76 h1:0xuRacu/Zr+jX+KyLLPPktbwXqyOvnOPUQmMLzX1jxU= -github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= -github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= -github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= -github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= -github.com/nats-io/jwt v0.3.2 h1:+RB5hMpXUUA2dfxuhBTEkMOrYmM+gKIZYS1KjSostMI= -github.com/nats-io/jwt/v2 v2.0.3 h1:i/O6cmIsjpcQyWDYNcq2JyZ3/VTF8SJ4JWluI5OhpvI= -github.com/nats-io/nats-server/v2 v2.5.0 h1:wsnVaaXH9VRSg+A2MVg5Q727/CqxnmPLGFQ3YZYKTQg= -github.com/nats-io/nats.go v1.12.1 h1:+0ndxwUPz3CmQ2vjbXdkC1fo3FdiOQDim4gl3Mge8Qo= -github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8= -github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/nishanths/exhaustive v0.8.3 h1:pw5O09vwg8ZaditDp/nQRqVnrMczSJDxRDJMowvhsrM= -github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= -github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= -github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= -github.com/oklog/oklog v0.3.2 h1:wVfs8F+in6nTBMkA7CbRw+zZMIB7nNM825cM1wuzoTk= -github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc= -github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= -github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= -github.com/opencontainers/selinux v1.10.1 h1:09LIPVRP3uuZGQvgR+SgMSNBd1Eb3vlRbGqQpoHsF8w= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU= -github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5 h1:ZCnq+JUrvXcDVhX/xRolRBZifmabN1HcS1wrPSvxhrU= -github.com/openzipkin/zipkin-go v0.2.5 h1:UwtQQx2pyPIgWYHRg+epgdx1/HnBQTgN3/oIYEJTQzU= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= -github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= -github.com/pact-foundation/pact-go v1.0.4 h1:OYkFijGHoZAYbOIb1LWXrwKQbMMRUv1oQ89blD2Mh2Q= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= -github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= -github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= -github.com/pelletier/go-toml/v2 v2.0.7/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= -github.com/performancecopilot/speed v3.0.0+incompatible h1:2WnRzIquHa5QxaJKShDkLM+sc0JPuwhXzK8OYOyt3Vg= -github.com/performancecopilot/speed/v4 v4.0.0 h1:VxEDCmdkfbQYDlcr/GC9YoN9PQ6p8ulk9xVsepYy9ZY= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= -github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= -github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0= -github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= -github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/profile v1.6.0 h1:hUDfIISABYI59DyeB3OTay/HxSRwTQ8rB/H83k6r5dM= -github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= -github.com/pkg/sftp v1.13.1 h1:I2qBYMChEhIjOgazfJmV3/mZM256btk6wkCDRmW7JYs= -github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3 h1:hUmXhbljNFtrH5hzV9kiRoddZ5nfPTq3K0Sb2hYYiqE= -github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3/go.mod h1:q5NXNGzqj5uPnVuhGkZfmgHqNUhf15VLi6L9kW0VEc0= -github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4 h1:RHHRCZeaNyBXdYPMjZNH8/XHDBH38TZzw8izrW7dmBE= -github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4/go.mod h1:RdR1j20Aj5pB6+fw6Y9Ur7lMHpegTEjY1vc19hEZL40= -github.com/pointlander/peg v1.0.1 h1:mgA/GQE8TeS9MdkU6Xn6iEzBmQUQCNuWD7rHCK6Mjs0= -github.com/pointlander/peg v1.0.1/go.mod h1:5hsGDQR2oZI4QoWz0/Kdg3VSVEC31iJw/b7WjqCBGRI= -github.com/polyfloyd/go-errorlint v1.0.5 h1:AHB5JRCjlmelh9RrLxT9sgzpalIwwq4hqE8EkwIwKdY= -github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= -github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= -github.com/quasilyte/go-ruleguard v0.3.18 h1:sd+abO1PEI9fkYennwzHn9kl3nqP6M5vE7FiOzZ+5CE= -github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= -github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= -github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f h1:6Gtn2i04RD0gVyYf2/IUMTIs+qYleBt4zxDqkLTcu4U= -github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= -github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs= -github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= -github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= -github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 h1:xe+mmCnDN82KhC010l3NfYlA8ZbOuzbXAzSYBa6wbMc= -github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= -github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY= -github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= -github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= -github.com/ryancurrah/gomodguard v1.2.4 h1:CpMSDKan0LtNGGhPrvupAoLeObRFjND8/tU1rEOtBp4= -github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= -github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8OUZI9xFw= -github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f h1:UFr9zpz4xgTnIE5yIMtWAMngCdZ9p/+q6lTbgelo80M= -github.com/sagikazarmark/crypt v0.10.0 h1:96E1qrToLBU6fGzo+PRRz7KGOc9FkYFiPnR3/zf8Smg= -github.com/sagikazarmark/crypt v0.10.0/go.mod h1:gwTNHQVoOS3xp9Xvz5LLR+1AauC5M6880z5NWzdhOyQ= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCLY7gIfzeQaUJ+kppEO5WQG3cL8iE8tGHU= -github.com/sanposhiho/wastedassign/v2 v2.0.6 h1:+6/hQIHKNJAUixEj6EmOngGIisyeI+T3335lYTyxRoA= -github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= -github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= -github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= -github.com/sashamelentyev/usestdlibvars v1.20.0 h1:K6CXjqqtSYSsuyRDDC7Sjn6vTMLiSJa4ZmDkiokoqtw= -github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= -github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= -github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 h1:RpforrEYXWkmGwJHIGnLZ3tTWStkjVVstwzNGqxX2Ds= -github.com/securego/gosec/v2 v2.13.1 h1:7mU32qn2dyC81MH9L2kefnQyRMUarfDER3iQyMHcjYM= -github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= -github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= -github.com/sivchari/containedctx v1.0.2 h1:0hLQKpgC53OVF1VT7CeoFHk9YKstur1XOgfYIc1yrHI= -github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= -github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt95do8= -github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= -github.com/sivchari/tenv v1.7.0 h1:d4laZMBK6jpe5PWepxlV9S+LC0yXqvYHiq8E6ceoVVE= -github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= -github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= -github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= -github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= -github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= -github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= -github.com/sonatard/noctx v0.0.1 h1:VC1Qhl6Oxx9vvWo3UDgrGXYCeKCe3Wbw7qAWL6FrmTY= -github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= -github.com/sony/gobreaker v0.4.1 h1:oMnRNZXX5j85zso6xCPRNPtmAycat+WcoKbklScLDgQ= -github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= -github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= -github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= -github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= -github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= -github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= -github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= -github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= -github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= -github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc= -github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= -github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980 h1:lIOOHPEbXzO3vnmx2gok1Tfs31Q8GQqKLc8vVqyQq/I= -github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo= -github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e h1:mOtuXaRAbVZsxAHVdPR3IjfmN8T1h2iczJLynhLybf8= -github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344 h1:m+8fKfQwCAy1QjzINvKe/pYtLjo2dl59x2w9YSEJxuY= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= -github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= -github.com/tchap/go-patricia v2.2.6+incompatible h1:JvoDL7JSoIP2HDE8AbDH3zC8QBPxmzYe32HHy5yQ+Ck= -github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTXuO0A= -github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= -github.com/tendermint/tendermint v0.37.0-rc2 h1:2n1em+jfbhSv6QnBj8F6KHCpbIzZCB8KgcjidJUQNlY= -github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= -github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= -github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= -github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= -github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144 h1:kl4KhGNsJIbDHS9/4U9yQo1UcPQM0kOMJHn29EoH/Ro= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/timonwong/loggercheck v0.9.3 h1:ecACo9fNiHxX4/Bc02rW2+kaJIAMAes7qJ7JKxt0EZI= -github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8 h1:ndzgwNDnKIqyCvHTXaCqh9KlOWKvBry6nuXMJmonVsE= -github.com/tomarrell/wrapcheck/v2 v2.7.0 h1:J/F8DbSKJC83bAvC6FoZaRjZiZ/iKoueSdrEkmGeacA= -github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= -github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= -github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8= -github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= -github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= -github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqzi/CzI= -github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= -github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= -github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y= -github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= -github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= -github.com/vektra/mockery/v2 v2.14.0 h1:KZ1p5Hrn8tiY+LErRMr14HHle6khxo+JKOXLBW/yfqs= -github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= -github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5 h1:+UB2BJA852UkGH42H+Oee69djmxS3ANzl2b/JtT1YiA= -github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA= -github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= -github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= -github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= -github.com/xhit/go-str2duration v1.2.0 h1:BcV5u025cITWxEQKGWr1URRzrcXtu7uk8+luz3Yuhwc= -github.com/xhit/go-str2duration v1.2.0/go.mod h1:3cPSlfZlUHVlneIVfePFWcJZsuwf+P1v2SRTV4cUmp4= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= -github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= -github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= -github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o= -github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= -github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= -github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= -gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0= -gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0= -go.etcd.io/etcd/api/v3 v3.5.9 h1:4wSsluwyTbGGmyjJktOf3wFQoTBIURXHnq9n/G/JQHs= -go.etcd.io/etcd/api/v3 v3.5.9/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k= -go.etcd.io/etcd/client/pkg/v3 v3.5.9 h1:oidDC4+YEuSIQbsR94rY9gur91UPL6DnxDCIYd2IGsE= -go.etcd.io/etcd/client/pkg/v3 v3.5.9/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4= -go.etcd.io/etcd/client/v2 v2.305.7 h1:AELPkjNR3/igjbO7CjyF1fPuVPjrblliiKj+Y6xSGOU= -go.etcd.io/etcd/client/v2 v2.305.7/go.mod h1:GQGT5Z3TBuAQGvgPfhR7VPySu/SudxmEkRq9BgzFU6s= -go.etcd.io/etcd/client/v3 v3.5.9 h1:r5xghnU7CwbUxD/fbUtRyJGaYNfDun8sp/gTr1hew6E= -go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA= -go.etcd.io/gofail v0.1.0 h1:XItAMIhOojXFQMgrxjnd2EIIHun/d5qL0Pf7FzVTkFg= -go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= -go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1 h1:A/5uWzF44DlIgdm/PQFwfMkW0JX+cIcQi/SwLAmZP5M= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3 h1:syAz40OyelLZo42+3U68Phisvrx4qh+4wpdZw7eUUdY= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3/go.mod h1:Dts42MGkzZne2yCru741+bFiTMWkIj/LLRizad7b9tw= -go.opentelemetry.io/otel v1.11.0 h1:kfToEGMDq6TrVrJ9Vht84Y8y9enykSZzDDZglV0kIEk= -go.opentelemetry.io/otel v1.11.0/go.mod h1:H2KtuEphyMvlhZ+F7tg9GRhAOe60moNx61Ex+WmiKkk= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0 h1:R/OBkMoGgfy2fLhs2QhkCI1w4HLEQX92GCcJB6SSdNk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0 h1:giGm8w67Ja7amYNfYMdme7xSp2pIxThWopw8+QP51Yk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0 h1:VQbUHoJqytHHSJ1OZodPH9tvZZSVzUHjPHpkO85sT6k= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0 h1:Ydage/P0fRrSPpZeCVxzjqGcI6iVmG2xb43+IR8cjqM= -go.opentelemetry.io/otel/sdk v1.3.0 h1:3278edCoH89MEJ0Ky8WQXVmDQv3FX4ZJ3Pp+9fJreAI= -go.opentelemetry.io/otel/trace v1.11.0 h1:20U/Vj42SX+mASlXLmSGBg6jpI1jQtv682lZtTAOVFI= -go.opentelemetry.io/otel/trace v1.11.0/go.mod h1:nyYjis9jy0gytE9LXGU+/m1sHTKbRY0fX0hulNNDP1U= -go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= -go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= -golang.org/x/exp v0.0.0-20230131160201-f062dba9d201/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91 h1:Ic/qN6TEifvObMGQy72k0n1LlJr7DjWWEi+MOsDOiSk= -golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= -golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= -golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= -golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= -golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= -golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= -golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= -golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= -google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= -google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= -google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= -google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= -google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE= -google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.2-0.20230222093303-bc1253ad3743/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.27 h1:kJdccidYzt3CaHD1crCFTS1hxyhSi059NhOFUf03YFo= -gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= -gopkg.in/gcfg.v1 v1.2.3 h1:m8OOJ4ccYHnx2f4gQwpno8nAX5OGOh7RLaaz0pj3Ogs= -gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= -gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= -gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= -gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= -honnef.co/go/tools v0.3.3 h1:oDx7VAwstgpYpb3wv0oxiZlxY+foCpRAwY7Vk6XpAgA= -honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= -k8s.io/api v0.22.5 h1:xk7C+rMjF/EGELiD560jdmwzrB788mfcHiNbMQLIVI8= -k8s.io/apimachinery v0.22.5 h1:cIPwldOYm1Slq9VLBRPtEYpyhjIm1C6aAMAoENuvN9s= -k8s.io/apiserver v0.22.5 h1:71krQxCUz218ecb+nPhfDsNB6QgP1/4EMvi1a2uYBlg= -k8s.io/client-go v0.22.5 h1:I8Zn/UqIdi2r02aZmhaJ1hqMxcpfJ3t5VqvHtctHYFo= -k8s.io/component-base v0.22.5 h1:U0eHqZm7mAFE42hFwYhY6ze/MmVaW00JpMrzVsQmzYE= -k8s.io/cri-api v0.23.1 h1:0DHL/hpTf4Fp+QkUXFefWcp1fhjXr9OlNdY9X99c+O8= -k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= -k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b h1:wxEMGetGMur3J1xuGLQY7GEQYg9bZxKn3tKo5k/eYcs= -mvdan.cc/gofumpt v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM= -mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20220706161116-678bad134442 h1:seuXWbRB1qPrS3NQnHmFKLJLtskWyueeIzmLXghMGgk= -mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= -rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0 h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY= -rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4= -sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= diff --git a/relayer/chains/cosmos/cosmos_chain_processor.go b/relayer/chains/cosmos/cosmos_chain_processor.go index c582cc731..ad2d56c6c 100644 --- a/relayer/chains/cosmos/cosmos_chain_processor.go +++ b/relayer/chains/cosmos/cosmos_chain_processor.go @@ -71,6 +71,7 @@ func NewCosmosChainProcessor(log *zap.Logger, provider *CosmosProvider, metrics const ( queryTimeout = 5 * time.Second + queryStateTimeout = 60 * time.Second blockResultsQueryTimeout = 2 * time.Minute latestHeightQueryRetryDelay = 1 * time.Second latestHeightQueryRetries = 5 @@ -279,7 +280,7 @@ func (ccp *CosmosChainProcessor) Run(ctx context.Context, initialBlockHistory ui // initializeConnectionState will bootstrap the connectionStateCache with the open connection state. func (ccp *CosmosChainProcessor) initializeConnectionState(ctx context.Context) error { - ctx, cancel := context.WithTimeout(ctx, queryTimeout) + ctx, cancel := context.WithTimeout(ctx, queryStateTimeout) defer cancel() connections, err := ccp.chainProvider.QueryConnections(ctx) if err != nil { @@ -299,7 +300,7 @@ func (ccp *CosmosChainProcessor) initializeConnectionState(ctx context.Context) // initializeChannelState will bootstrap the channelStateCache with the open channel state. func (ccp *CosmosChainProcessor) initializeChannelState(ctx context.Context) error { - ctx, cancel := context.WithTimeout(ctx, queryTimeout) + ctx, cancel := context.WithTimeout(ctx, queryStateTimeout) defer cancel() channels, err := ccp.chainProvider.QueryChannels(ctx) if err != nil { @@ -315,12 +316,13 @@ func (ccp *CosmosChainProcessor) initializeChannelState(ctx context.Context) err continue } ccp.channelConnections[ch.ChannelId] = ch.ConnectionHops[0] - ccp.channelStateCache[processor.ChannelKey{ + k := processor.ChannelKey{ ChannelID: ch.ChannelId, PortID: ch.PortId, CounterpartyChannelID: ch.Counterparty.ChannelId, CounterpartyPortID: ch.Counterparty.PortId, - }] = ch.State == chantypes.OPEN + } + ccp.channelStateCache.SetOpen(k, ch.State == chantypes.OPEN, ch.Ordering) } return nil } @@ -402,11 +404,11 @@ func (ccp *CosmosChainProcessor) queryCycle(ctx context.Context, persistence *qu }) if err := eg.Wait(); err != nil { - ccp.log.Warn( - "Could not query block data. Consider checking if your RPC node is online, and that transaction indexing is enabled.", + ccp.log.Debug( + "Error querying block data", zap.Int64("height", i), + zap.Error(err), ) - ccp.log.Debug("Error querying block data", zap.Error(err)) persistence.retriesAtLatestQueriedBlock++ if persistence.retriesAtLatestQueriedBlock >= blockMaxRetries { diff --git a/relayer/chains/cosmos/message_handlers.go b/relayer/chains/cosmos/message_handlers.go index 1e6a811c0..029ddd652 100644 --- a/relayer/chains/cosmos/message_handlers.go +++ b/relayer/chains/cosmos/message_handlers.go @@ -40,7 +40,7 @@ func (ccp *CosmosChainProcessor) handlePacketMessage(eventType string, pi provid } if eventType == chantypes.EventTypeTimeoutPacket && pi.ChannelOrder == chantypes.ORDERED.String() { - ccp.channelStateCache[k] = false + ccp.channelStateCache.SetOpen(k, false, chantypes.ORDERED) } if !c.PacketFlow.ShouldRetainSequence(ccp.pathProcessors, k, ccp.chainProvider.ChainId(), eventType, pi.Sequence) { @@ -78,19 +78,19 @@ func (ccp *CosmosChainProcessor) handleChannelMessage(eventType string, ci provi } } if !found { - ccp.channelStateCache[channelKey] = false + ccp.channelStateCache.SetOpen(channelKey, false, ci.Order) } } else { switch eventType { case chantypes.EventTypeChannelOpenTry: - ccp.channelStateCache[channelKey] = false + ccp.channelStateCache.SetOpen(channelKey, false, ci.Order) case chantypes.EventTypeChannelOpenAck, chantypes.EventTypeChannelOpenConfirm: - ccp.channelStateCache[channelKey] = true + ccp.channelStateCache.SetOpen(channelKey, true, ci.Order) ccp.logChannelOpenMessage(eventType, ci) case chantypes.EventTypeChannelCloseConfirm: for k := range ccp.channelStateCache { if k.PortID == ci.PortID && k.ChannelID == ci.ChannelID { - ccp.channelStateCache[k] = false + ccp.channelStateCache.SetOpen(channelKey, false, ci.Order) break } } diff --git a/relayer/chains/cosmos/message_handlers_test.go b/relayer/chains/cosmos/message_handlers_test.go index 10ebc9771..8038b3e5e 100644 --- a/relayer/chains/cosmos/message_handlers_test.go +++ b/relayer/chains/cosmos/message_handlers_test.go @@ -128,7 +128,7 @@ func TestChannelStateCache(t *testing.T) { // The channel state is not open, but the entry should exist in the channelStateCache. // MsgInitKey returns the ChannelKey with an empty counterparty channel ID. - require.False(t, ccp.channelStateCache[k.MsgInitKey()]) + require.False(t, ccp.channelStateCache[k.MsgInitKey()].Open) // Observe MsgChannelOpenAck, which does have counterparty channel ID. ccp.handleChannelMessage(chantypes.EventTypeChannelOpenAck, msgOpenAck, c) @@ -139,7 +139,7 @@ func TestChannelStateCache(t *testing.T) { // The fully populated ChannelKey should now be the only entry for this channel. // The channel now open. - require.True(t, ccp.channelStateCache[k]) + require.True(t, ccp.channelStateCache[k].Open) }) t.Run("handshake already occurred", func(t *testing.T) { @@ -156,7 +156,7 @@ func TestChannelStateCache(t *testing.T) { // Initialize channelStateCache with populated channel ID and counterparty channel ID. // This emulates initializeChannelState after a recent channel handshake has completed - ccp.channelStateCache[k] = true + ccp.channelStateCache.SetOpen(k, true, chantypes.NONE) // Observe MsgChannelOpenInit, which does not have counterparty channel ID. ccp.handleChannelMessage(chantypes.EventTypeChannelOpenInit, msgOpenInit, c) @@ -166,7 +166,7 @@ func TestChannelStateCache(t *testing.T) { // The fully populated ChannelKey should still be the only entry for this channel. // The channel is still marked open since it was open during initializeChannelState. - require.True(t, ccp.channelStateCache[k]) + require.True(t, ccp.channelStateCache[k].Open) // Observe MsgChannelOpenAck, which does have counterparty channel ID. ccp.handleChannelMessage(chantypes.EventTypeChannelOpenAck, msgOpenAck, c) @@ -175,6 +175,6 @@ func TestChannelStateCache(t *testing.T) { require.Len(t, ccp.channelStateCache, 1) // The fully populated ChannelKey should still be the only entry for this channel. - require.True(t, ccp.channelStateCache[k]) + require.True(t, ccp.channelStateCache[k].Open) }) } diff --git a/relayer/chains/cosmos/query.go b/relayer/chains/cosmos/query.go index 766ad06dc..dfc040214 100644 --- a/relayer/chains/cosmos/query.go +++ b/relayer/chains/cosmos/query.go @@ -1096,6 +1096,29 @@ func (cc *CosmosProvider) QueryNextSeqRecv(ctx context.Context, height int64, ch }, nil } +// QueryNextSeqAck returns the next seqAck for a configured channel +func (cc *CosmosProvider) QueryNextSeqAck(ctx context.Context, height int64, channelid, portid string) (recvRes *chantypes.QueryNextSequenceReceiveResponse, err error) { + key := host.NextSequenceAckKey(portid, channelid) + + value, proofBz, proofHeight, err := cc.QueryTendermintProof(ctx, height, key) + if err != nil { + return nil, err + } + + // check if next sequence receive exists + if len(value) == 0 { + return nil, sdkerrors.Wrapf(chantypes.ErrChannelNotFound, "portID (%s), channelID (%s)", portid, channelid) + } + + sequence := binary.BigEndian.Uint64(value) + + return &chantypes.QueryNextSequenceReceiveResponse{ + NextSequenceReceive: sequence, + Proof: proofBz, + ProofHeight: proofHeight, + }, nil +} + // QueryPacketCommitment returns the packet commitment proof at a given height func (cc *CosmosProvider) QueryPacketCommitment(ctx context.Context, height int64, channelid, portid string, seq uint64) (comRes *chantypes.QueryPacketCommitmentResponse, err error) { key := host.PacketCommitmentKey(portid, channelid, seq) diff --git a/relayer/chains/cosmos/tx.go b/relayer/chains/cosmos/tx.go index 48eeb6a9d..a9da07179 100644 --- a/relayer/chains/cosmos/tx.go +++ b/relayer/chains/cosmos/tx.go @@ -55,7 +55,7 @@ var ( rtyAtt = retry.Attempts(rtyAttNum) rtyDel = retry.Delay(time.Millisecond * 400) rtyErr = retry.LastErrorOnly(true) - numRegex = regexp.MustCompile("[0-9]+") + accountSeqRegex = regexp.MustCompile("account sequence mismatch, expected ([0-9]+), got ([0-9]+)") defaultBroadcastWaitTimeout = 10 * time.Minute errUnknown = "unknown" ) @@ -660,32 +660,17 @@ func (cc *CosmosProvider) handleAccountSequenceMismatchError(sequenceGuard *Wall panic("sequence guard not configured") } - sequences := numRegex.FindAllString(err.Error(), -1) - if len(sequences) != 2 { + matches := accountSeqRegex.FindStringSubmatch(err.Error()) + if len(matches) == 0 { return } - nextSeq, err := strconv.ParseUint(sequences[0], 10, 64) + nextSeq, err := strconv.ParseUint(matches[1], 10, 64) if err != nil { return } sequenceGuard.NextAccountSequence = nextSeq } -// handleAccountSequenceMismatchError will parse the error string, e.g.: -// "account sequence mismatch, expected 10, got 9: incorrect account sequence" -// and update the next account sequence with the expected value. -// func (cc *CosmosProvider) handleAccountSequenceMismatchError(err error) { -// sequences := numRegex.FindAllString(err.Error(), -1) -// if len(sequences) != 2 { -// return -// } -// nextSeq, err := strconv.ParseUint(sequences[0], 10, 64) -// if err != nil { -// return -// } -// cc.nextAccountSeq = nextSeq -// } - // MsgCreateClient creates an sdk.Msg to update the client on src with consensus state from dst func (cc *CosmosProvider) MsgCreateClient( clientState ibcexported.ClientState, diff --git a/relayer/chains/mock/mock_chain_processor.go b/relayer/chains/mock/mock_chain_processor.go index 4faf1fe3c..85ec8e769 100644 --- a/relayer/chains/mock/mock_chain_processor.go +++ b/relayer/chains/mock/mock_chain_processor.go @@ -170,7 +170,7 @@ func (mcp *MockChainProcessor) queryCycle(ctx context.Context, persistence *quer // mocking all channels open for channelKey := range ibcMessagesCache.PacketFlow { - channelStateCache[channelKey] = true + channelStateCache.SetOpen(channelKey, true, chantypes.NONE) } // now pass foundMessages to the path processors diff --git a/relayer/chains/penumbra/message_handlers.go b/relayer/chains/penumbra/message_handlers.go index 69f3b3538..22b570eb6 100644 --- a/relayer/chains/penumbra/message_handlers.go +++ b/relayer/chains/penumbra/message_handlers.go @@ -63,18 +63,18 @@ func (pcp *PenumbraChainProcessor) handleChannelMessage(eventType string, ci pro } } if !found { - pcp.channelStateCache[channelKey] = false + pcp.channelStateCache.SetOpen(channelKey, false, ci.Order) } } else { switch eventType { case chantypes.EventTypeChannelOpenTry: - pcp.channelStateCache[channelKey] = false + pcp.channelStateCache.SetOpen(channelKey, false, ci.Order) case chantypes.EventTypeChannelOpenAck, chantypes.EventTypeChannelOpenConfirm: - pcp.channelStateCache[channelKey] = true + pcp.channelStateCache.SetOpen(channelKey, true, ci.Order) case chantypes.EventTypeChannelCloseConfirm: for k := range pcp.channelStateCache { if k.PortID == ci.PortID && k.ChannelID == ci.ChannelID { - pcp.channelStateCache[k] = false + pcp.channelStateCache.SetOpen(channelKey, false, ci.Order) break } } diff --git a/relayer/chains/penumbra/penumbra_chain_processor.go b/relayer/chains/penumbra/penumbra_chain_processor.go index b140b87f5..2f741d589 100644 --- a/relayer/chains/penumbra/penumbra_chain_processor.go +++ b/relayer/chains/penumbra/penumbra_chain_processor.go @@ -257,12 +257,13 @@ func (pcp *PenumbraChainProcessor) initializeChannelState(ctx context.Context) e continue } pcp.channelConnections[ch.ChannelId] = ch.ConnectionHops[0] - pcp.channelStateCache[processor.ChannelKey{ + k := processor.ChannelKey{ ChannelID: ch.ChannelId, PortID: ch.PortId, CounterpartyChannelID: ch.Counterparty.ChannelId, CounterpartyPortID: ch.Counterparty.PortId, - }] = ch.State == chantypes.OPEN + } + pcp.channelStateCache.SetOpen(k, ch.State == chantypes.OPEN, ch.Ordering) } return nil } diff --git a/relayer/chains/penumbra/query.go b/relayer/chains/penumbra/query.go index da651ef93..ce1f08ed6 100644 --- a/relayer/chains/penumbra/query.go +++ b/relayer/chains/penumbra/query.go @@ -702,6 +702,29 @@ func (cc *PenumbraProvider) QueryNextSeqRecv(ctx context.Context, height int64, }, nil } +// QueryNextSeqAck returns the next seqAck for a configured channel +func (cc *PenumbraProvider) QueryNextSeqAck(ctx context.Context, height int64, channelid, portid string) (recvRes *chantypes.QueryNextSequenceReceiveResponse, err error) { + key := host.NextSequenceAckKey(portid, channelid) + + value, proofBz, proofHeight, err := cc.QueryTendermintProof(ctx, height, key) + if err != nil { + return nil, err + } + + // check if next sequence receive exists + if len(value) == 0 { + return nil, sdkerrors.Wrapf(chantypes.ErrChannelNotFound, "portID (%s), channelID (%s)", portid, channelid) + } + + sequence := binary.BigEndian.Uint64(value) + + return &chantypes.QueryNextSequenceReceiveResponse{ + NextSequenceReceive: sequence, + Proof: proofBz, + ProofHeight: proofHeight, + }, nil +} + // QueryPacketCommitment returns the packet commitment proof at a given height func (cc *PenumbraProvider) QueryPacketCommitment(ctx context.Context, height int64, channelid, portid string, seq uint64) (comRes *chantypes.QueryPacketCommitmentResponse, err error) { key := host.PacketCommitmentKey(portid, channelid, seq) diff --git a/relayer/processor/message_processor.go b/relayer/processor/message_processor.go index 9b9ed250e..c73bab303 100644 --- a/relayer/processor/message_processor.go +++ b/relayer/processor/message_processor.go @@ -313,11 +313,18 @@ func (mp *messageProcessor) trackAndSendMessages( var batch []messageToTrack for _, t := range mp.trackers() { + retries := dst.trackProcessingMessage(t) if t.assembledMsg() == nil { continue } - if broadcastBatch && retries == 0 { + + ordered := false + if m, ok := t.(packetMessageToTrack); ok && m.msg.info.ChannelOrder == chantypes.ORDERED.String() { + ordered = true + } + + if broadcastBatch && (retries == 0 || ordered) { batch = append(batch, t) continue } diff --git a/relayer/processor/path_end_runtime.go b/relayer/processor/path_end_runtime.go index 031ea60bb..f1b732af7 100644 --- a/relayer/processor/path_end_runtime.go +++ b/relayer/processor/path_end_runtime.go @@ -442,7 +442,7 @@ func (pathEnd *pathEndRuntime) shouldSendPacketMessage(message packetIBCMessage, ) return false } - if !pathEnd.channelStateCache[k] { + if !pathEnd.channelStateCache[k].Open { // channel is not open, do not send pathEnd.log.Warn("Refusing to relay packet message because channel is not open", zap.String("event_type", eventType), diff --git a/relayer/processor/path_processor.go b/relayer/processor/path_processor.go index d41296a4f..5b0b2c76e 100644 --- a/relayer/processor/path_processor.go +++ b/relayer/processor/path_processor.go @@ -30,7 +30,7 @@ const ( interchainQueryTimeout = 60 * time.Second // Amount of time between flushes if the previous flush failed. - flushFailureRetry = 15 * time.Second + flushFailureRetry = 5 * time.Second // If message assembly fails from either proof query failure on the source // or assembling the message for the destination, how many blocks should pass @@ -186,12 +186,12 @@ func (pp *PathProcessor) OnConnectionMessage(chainID string, eventType string, o func (pp *PathProcessor) channelPairs() []channelPair { // Channel keys are from pathEnd1's perspective - channels := make(map[ChannelKey]bool) - for k, open := range pp.pathEnd1.channelStateCache { - channels[k] = open + channels := make(map[ChannelKey]ChannelState) + for k, cs := range pp.pathEnd1.channelStateCache { + channels[k] = cs } - for k, open := range pp.pathEnd2.channelStateCache { - channels[k.Counterparty()] = open + for k, cs := range pp.pathEnd2.channelStateCache { + channels[k.Counterparty()] = cs } pairs := make([]channelPair, len(channels)) i := 0 @@ -457,8 +457,8 @@ func (pp *PathProcessor) handleLocalhostData(cacheData ChainProcessorCacheData) } } - channelStateCache1 := make(map[ChannelKey]bool) - channelStateCache2 := make(map[ChannelKey]bool) + channelStateCache1 := make(map[ChannelKey]ChannelState) + channelStateCache2 := make(map[ChannelKey]ChannelState) // split up data and send lower channel-id data to pathEnd2 and higher channel-id data to pathEnd1. for k, v := range cacheData.ChannelStateCache { diff --git a/relayer/processor/path_processor_internal.go b/relayer/processor/path_processor_internal.go index 7a1aa2037..58bbcc4a5 100644 --- a/relayer/processor/path_processor_internal.go +++ b/relayer/processor/path_processor_internal.go @@ -19,9 +19,8 @@ import ( // i.e. a MsgConnectionOpenInit or a MsgChannelOpenInit should be broadcasted to start // the handshake if this key exists in the relevant cache. const ( - preInitKey = "pre_init" - preCloseKey = "pre_close" - maxPacketsPerFlush = 10 + preInitKey = "pre_init" + preCloseKey = "pre_close" ) // getMessagesToSend returns only the lowest sequence message (if it should be sent) for ordered channels, @@ -35,21 +34,27 @@ func (pp *PathProcessor) getMessagesToSend( return } - if msgs[0].info.ChannelOrder == chantypes.ORDERED.String() { + ordered := false + + // channelStateCache most likely has the ordering information. + if cs, ok := src.channelStateCache[packetInfoChannelKey(msgs[0].info)]; ok && cs.Order == chantypes.ORDERED { + ordered = true + } + + // if packet info has the order defined, use that. + if msgs[0].info.ChannelOrder != "" && msgs[0].info.ChannelOrder != chantypes.NONE.String() { + ordered = msgs[0].info.ChannelOrder == chantypes.ORDERED.String() + } + + if ordered { eventMessages := make(map[string][]packetIBCMessage) + lowestSeq := make(map[string]uint64) for _, m := range msgs { eventMessages[m.eventType] = append(eventMessages[m.eventType], m) - } - - for e, m := range eventMessages { - m := m - sort.SliceStable(m, func(i, j int) bool { - return m[i].info.Sequence < m[j].info.Sequence - }) - - if e == chantypes.EventTypeRecvPacket { - dstChan, dstPort := m[0].info.DestChannel, m[0].info.DestPort + switch m.eventType { + case chantypes.EventTypeRecvPacket: + dstChan, dstPort := m.info.DestChannel, m.info.DestPort res, err := dst.chainProvider.QueryNextSeqRecv(ctx, 0, dstChan, dstPort) if err != nil { dst.log.Error("Failed to query next sequence recv", @@ -59,38 +64,104 @@ func (pp *PathProcessor) getMessagesToSend( ) return } - - if m[0].info.Sequence != res.NextSequenceReceive { - dst.log.Error("Unexpected next sequence recv", - zap.String("channel_id", m[0].info.DestChannel), - zap.String("port_id", m[0].info.DestChannel), - zap.Uint64("expected", res.NextSequenceReceive), - zap.Uint64("actual", m[0].info.Sequence), + lowestSeq[chantypes.EventTypeRecvPacket] = res.NextSequenceReceive + case chantypes.EventTypeAcknowledgePacket: + srcChan, srcPort := m.info.SourceChannel, m.info.SourcePort + res, err := src.chainProvider.QueryNextSeqAck(ctx, 0, srcChan, srcPort) + if err != nil { + src.log.Error("Failed to query next sequence ack", + zap.String("channel_id", srcChan), + zap.String("port_id", srcPort), + zap.Error(err), ) return } + lowestSeq[chantypes.EventTypeAcknowledgePacket] = res.NextSequenceReceive } + } - for i, msg := range m { - // only handle consecutive sequences on ordered channels - if i > 0 && msg.info.Sequence-1 != m[i-1].info.Sequence { - dst.log.Error("Packets are not consecutive", - zap.String("channel_id", m[0].info.DestChannel), - zap.String("port_id", m[0].info.DestChannel), - zap.Uint64("seq", msg.info.Sequence), - zap.Uint64("prior_seq", m[i-1].info.Sequence), - ) - break + for e, m := range eventMessages { + m := m + sort.SliceStable(m, func(i, j int) bool { + return m[i].info.Sequence < m[j].info.Sequence + }) + + foundFirst := false + MsgLoop: + for _, msg := range m { + if e == chantypes.EventTypeRecvPacket || e == chantypes.EventTypeAcknowledgePacket { + if msg.info.Sequence < lowestSeq[e] { + // TODO prune these from caches + continue MsgLoop + } else if msg.info.Sequence > lowestSeq[e] && !foundFirst { + switch e { + case chantypes.EventTypeRecvPacket: + dst.log.Debug("Not yet ready to relay this recv sequence", + zap.String("channel_id", msg.info.DestChannel), + zap.String("port_id", msg.info.DestPort), + zap.Uint64("expected", lowestSeq[e]), + zap.Uint64("actual", msg.info.Sequence), + ) + case chantypes.EventTypeAcknowledgePacket: + src.log.Debug("Not yet ready to relay this ack sequence", + zap.String("channel_id", msg.info.SourceChannel), + zap.String("port_id", msg.info.SourcePort), + zap.Uint64("expected", lowestSeq[e]), + zap.Uint64("actual", msg.info.Sequence), + ) + } + + break MsgLoop + } } switch e { case chantypes.EventTypeRecvPacket: + if len(dstMsgs) > 0 && dstMsgs[len(dstMsgs)-1].eventType == e && dstMsgs[len(dstMsgs)-1].info.Sequence != msg.info.Sequence-1 { + dst.log.Debug("Skipping non-consecutive packet(s)", + zap.String("event_type", e), + zap.String("channel_id", msg.info.DestChannel), + zap.String("port_id", msg.info.DestChannel), + zap.Uint64("seq", msg.info.Sequence), + zap.Uint64("prior_seq", dstMsgs[len(dstMsgs)-1].info.Sequence), + ) + break MsgLoop + } if uint64(len(dstMsgs)) <= pp.maxMsgs && dst.shouldSendPacketMessage(msg, src) { + dst.log.Debug("Appending packet", + zap.String("event_type", e), + zap.String("channel_id", msg.info.DestChannel), + zap.String("port_id", msg.info.DestChannel), + zap.Uint64("seq", msg.info.Sequence), + ) dstMsgs = append(dstMsgs, msg) + if e == chantypes.EventTypeRecvPacket && msg.info.Sequence == lowestSeq[e] { + foundFirst = true + } } default: + if len(srcMsgs) > 0 && srcMsgs[len(srcMsgs)-1].eventType == e && srcMsgs[len(srcMsgs)-1].info.Sequence != msg.info.Sequence-1 { + src.log.Debug("Skipping non-consecutive packet(s)", + zap.String("event_type", e), + zap.String("channel_id", msg.info.SourceChannel), + zap.String("port_id", msg.info.SourcePort), + zap.Uint64("seq", msg.info.Sequence), + zap.Uint64("prior_seq", srcMsgs[len(srcMsgs)-1].info.Sequence), + ) + break MsgLoop + } + if uint64(len(srcMsgs)) <= pp.maxMsgs && src.shouldSendPacketMessage(msg, dst) { + src.log.Debug("Appending packet", + zap.String("event_type", e), + zap.String("channel_id", msg.info.SourceChannel), + zap.String("port_id", msg.info.SourcePort), + zap.Uint64("seq", msg.info.Sequence), + ) srcMsgs = append(srcMsgs, msg) + if e == chantypes.EventTypeAcknowledgePacket && msg.info.Sequence == lowestSeq[e] { + foundFirst = true + } } } } @@ -789,13 +860,13 @@ func (pp *PathProcessor) queuePreInitMessages(cancel func()) { return } - for k, open := range pp.pathEnd1.channelStateCache { + for k, cs := range pp.pathEnd1.channelStateCache { if k.ChannelID == m.SrcChannelID && k.PortID == m.SrcPortID && k.CounterpartyChannelID != "" && k.CounterpartyPortID != "" { - if open { + if cs.Open { // channel is still open on pathEnd1 break } - if counterpartyOpen, ok := pp.pathEnd2.channelStateCache[k.Counterparty()]; ok && !counterpartyOpen { + if counterpartyState, ok := pp.pathEnd2.channelStateCache[k.Counterparty()]; ok && !counterpartyState.Open { pp.log.Info("Channel already closed on both sides") cancel() return @@ -815,13 +886,13 @@ func (pp *PathProcessor) queuePreInitMessages(cancel func()) { } } - for k, open := range pp.pathEnd2.channelStateCache { + for k, cs := range pp.pathEnd2.channelStateCache { if k.CounterpartyChannelID == m.SrcChannelID && k.CounterpartyPortID == m.SrcPortID && k.ChannelID != "" && k.PortID != "" { - if open { + if cs.Open { // channel is still open on pathEnd2 break } - if counterpartyChanState, ok := pp.pathEnd1.channelStateCache[k.Counterparty()]; ok && !counterpartyChanState { + if counterpartyChanState, ok := pp.pathEnd1.channelStateCache[k.Counterparty()]; ok && !counterpartyChanState.Open { pp.log.Info("Channel already closed on both sides") cancel() return @@ -1128,7 +1199,13 @@ func queryPacketCommitments( } } -// queuePendingRecvAndAcks returns whether flush can be considered complete (none skipped). +// skippedPackets is used to track the number of packets skipped during a flush. +type skippedPackets struct { + Recv uint64 + Ack uint64 +} + +// queuePendingRecvAndAcks returns the number of packets skipped during a flush (nil if none). func (pp *PathProcessor) queuePendingRecvAndAcks( ctx context.Context, src, dst *pathEndRuntime, @@ -1138,32 +1215,36 @@ func (pp *PathProcessor) queuePendingRecvAndAcks( dstCache ChannelPacketMessagesCache, srcMu sync.Locker, dstMu sync.Locker, -) (bool, error) { +) (*skippedPackets, error) { if len(seqs) == 0 { src.log.Debug("Nothing to flush", zap.String("channel", k.ChannelID), zap.String("port", k.PortID)) - return true, nil + return nil, nil } dstChan, dstPort := k.CounterpartyChannelID, k.CounterpartyPortID unrecv, err := dst.chainProvider.QueryUnreceivedPackets(ctx, dst.latestBlock.Height, dstChan, dstPort, seqs) if err != nil { - return false, err + return nil, err } dstHeight := int64(dst.latestBlock.Height) + var order chantypes.Order + if len(unrecv) > 0 { channel, err := dst.chainProvider.QueryChannel(ctx, dstHeight, dstChan, dstPort) if err != nil { - return false, err + return nil, err } + order = channel.Channel.Ordering + if channel.Channel.Ordering == chantypes.ORDERED { nextSeqRecv, err := dst.chainProvider.QueryNextSeqRecv(ctx, dstHeight, dstChan, dstPort) if err != nil { - return false, err + return nil, err } var newUnrecv []uint64 @@ -1184,7 +1265,7 @@ func (pp *PathProcessor) queuePendingRecvAndAcks( var eg errgroup.Group - skipped := false + var skipped *skippedPackets for i, seq := range unrecv { srcMu.Lock() @@ -1193,8 +1274,11 @@ func (pp *PathProcessor) queuePendingRecvAndAcks( } srcMu.Unlock() - if i >= maxPacketsPerFlush { - skipped = true + if i >= int(pp.maxMsgs) { + if skipped == nil { + skipped = new(skippedPackets) + } + skipped.Recv = uint64(len(unrecv) - i) break } @@ -1211,6 +1295,7 @@ func (pp *PathProcessor) queuePendingRecvAndAcks( if err != nil { return err } + sendPacket.ChannelOrder = order.String() srcMu.Lock() srcCache.Cache(chantypes.EventTypeSendPacket, k, seq, sendPacket) srcMu.Unlock() @@ -1228,7 +1313,7 @@ func (pp *PathProcessor) queuePendingRecvAndAcks( } if err := eg.Wait(); err != nil { - return false, err + return skipped, err } if len(unrecv) > 0 { @@ -1266,8 +1351,11 @@ SeqLoop: } dstMu.Unlock() - if i >= maxPacketsPerFlush { - skipped = true + if i >= int(pp.maxMsgs) { + if skipped == nil { + skipped = new(skippedPackets) + } + skipped.Ack = uint64(len(unacked) - i) break } @@ -1286,6 +1374,7 @@ SeqLoop: } ck := k.Counterparty() + recvPacket.ChannelOrder = order.String() dstMu.Lock() dstCache.Cache(chantypes.EventTypeRecvPacket, ck, seq, recvPacket) dstCache.Cache(chantypes.EventTypeWriteAck, ck, seq, recvPacket) @@ -1296,7 +1385,7 @@ SeqLoop: } if err := eg.Wait(); err != nil { - return false, err + return skipped, err } if len(unacked) > 0 { @@ -1313,7 +1402,7 @@ SeqLoop: ) } - return !skipped, nil + return skipped, nil } // flush runs queries to relay any pending messages which may have been @@ -1331,8 +1420,8 @@ func (pp *PathProcessor) flush(ctx context.Context) error { // Query remaining packet commitments on both chains var eg errgroup.Group - for k, open := range pp.pathEnd1.channelStateCache { - if !open { + for k, cs := range pp.pathEnd1.channelStateCache { + if !cs.Open { continue } if !pp.pathEnd1.info.ShouldRelayChannel(ChainChannelKey{ @@ -1344,8 +1433,8 @@ func (pp *PathProcessor) flush(ctx context.Context) error { } eg.Go(queryPacketCommitments(ctx, pp.pathEnd1, k, commitments1, &commitments1Mu)) } - for k, open := range pp.pathEnd2.channelStateCache { - if !open { + for k, cs := range pp.pathEnd2.channelStateCache { + if !cs.Open { continue } if !pp.pathEnd2.info.ShouldRelayChannel(ChainChannelKey{ @@ -1366,17 +1455,20 @@ func (pp *PathProcessor) flush(ctx context.Context) error { // 1. Packet commitment is on source, but MsgRecvPacket has not yet been relayed to destination // 2. Packet commitment is on source, and MsgRecvPacket has been relayed to destination, but MsgAcknowledgement has not been written to source to clear the packet commitment. // Based on above conditions, enqueue MsgRecvPacket and MsgAcknowledgement messages - skipped := false + skipped := make(map[string]map[ChannelKey]skippedPackets) for k, seqs := range commitments1 { k := k seqs := seqs eg.Go(func() error { - done, err := pp.queuePendingRecvAndAcks(ctx, pp.pathEnd1, pp.pathEnd2, k, seqs, pathEnd1Cache.PacketFlow, pathEnd2Cache.PacketFlow, &pathEnd1CacheMu, &pathEnd2CacheMu) + s, err := pp.queuePendingRecvAndAcks(ctx, pp.pathEnd1, pp.pathEnd2, k, seqs, pathEnd1Cache.PacketFlow, pathEnd2Cache.PacketFlow, &pathEnd1CacheMu, &pathEnd2CacheMu) if err != nil { return err } - if !done { - skipped = true + if s != nil { + if _, ok := skipped[pp.pathEnd1.info.ChainID]; !ok { + skipped[pp.pathEnd1.info.ChainID] = make(map[ChannelKey]skippedPackets) + } + skipped[pp.pathEnd1.info.ChainID][k] = *s } return nil }) @@ -1386,12 +1478,15 @@ func (pp *PathProcessor) flush(ctx context.Context) error { k := k seqs := seqs eg.Go(func() error { - done, err := pp.queuePendingRecvAndAcks(ctx, pp.pathEnd2, pp.pathEnd1, k, seqs, pathEnd2Cache.PacketFlow, pathEnd1Cache.PacketFlow, &pathEnd2CacheMu, &pathEnd1CacheMu) + s, err := pp.queuePendingRecvAndAcks(ctx, pp.pathEnd2, pp.pathEnd1, k, seqs, pathEnd2Cache.PacketFlow, pathEnd1Cache.PacketFlow, &pathEnd2CacheMu, &pathEnd1CacheMu) if err != nil { return err } - if !done { - skipped = true + if s != nil { + if _, ok := skipped[pp.pathEnd2.info.ChainID]; !ok { + skipped[pp.pathEnd2.info.ChainID] = make(map[ChannelKey]skippedPackets) + } + skipped[pp.pathEnd2.info.ChainID][k] = *s } return nil }) @@ -1404,8 +1499,20 @@ func (pp *PathProcessor) flush(ctx context.Context) error { pp.pathEnd1.mergeMessageCache(pathEnd1Cache, pp.pathEnd2.info.ChainID, pp.pathEnd2.inSync) pp.pathEnd2.mergeMessageCache(pathEnd2Cache, pp.pathEnd1.info.ChainID, pp.pathEnd1.inSync) - if skipped { - return fmt.Errorf("flush was successful, but more packet sequences are still pending") + if len(skipped) > 0 { + skippedPacketsString := "" + for chainID, chainSkipped := range skipped { + for channelKey, skipped := range chainSkipped { + skippedPacketsString += fmt.Sprintf( + "{ %s %s %s recv: %d, ack: %d } ", + chainID, channelKey.ChannelID, channelKey.PortID, skipped.Recv, skipped.Ack, + ) + } + } + return fmt.Errorf( + "flush was successful, but packets are still pending. %s", + skippedPacketsString, + ) } return nil @@ -1418,7 +1525,7 @@ func (pp *PathProcessor) shouldTerminateForFlushComplete() bool { return false } for k, packetMessagesCache := range pp.pathEnd1.messageCache.PacketFlow { - if open, ok := pp.pathEnd1.channelStateCache[k]; !ok || !open { + if cs, ok := pp.pathEnd1.channelStateCache[k]; !ok || !cs.Open { continue } for _, c := range packetMessagesCache { @@ -1442,7 +1549,7 @@ func (pp *PathProcessor) shouldTerminateForFlushComplete() bool { } } for k, packetMessagesCache := range pp.pathEnd2.messageCache.PacketFlow { - if open, ok := pp.pathEnd1.channelStateCache[k]; !ok || !open { + if cs, ok := pp.pathEnd1.channelStateCache[k]; !ok || !cs.Open { continue } for _, c := range packetMessagesCache { diff --git a/relayer/processor/types.go b/relayer/processor/types.go index d01e73205..a5db23c9b 100644 --- a/relayer/processor/types.go +++ b/relayer/processor/types.go @@ -159,6 +159,12 @@ type ChannelKey struct { CounterpartyPortID string } +// ChannelState is used for caching channel open state and a lookup for the channel order. +type ChannelState struct { + Order chantypes.Order + Open bool +} + // Counterparty flips a ChannelKey for the perspective of the counterparty chain func (k ChannelKey) Counterparty() ChannelKey { return ChannelKey{ @@ -250,7 +256,23 @@ func (k ConnectionKey) MarshalLogObject(enc zapcore.ObjectEncoder) error { } // ChannelStateCache maintains channel open state for multiple channels. -type ChannelStateCache map[ChannelKey]bool +type ChannelStateCache map[ChannelKey]ChannelState + +// SetOpen sets the open state for a channel, and also the order if it is not NONE. +func (c ChannelStateCache) SetOpen(k ChannelKey, open bool, order chantypes.Order) { + if s, ok := c[k]; ok { + s.Open = open + if order != chantypes.NONE { + s.Order = order + } + c[k] = s + return + } + c[k] = ChannelState{ + Open: open, + Order: order, + } +} // FilterForClient returns a filtered copy of channels on top of an underlying clientID so it can be used by other goroutines. func (c ChannelStateCache) FilterForClient(clientID string, channelConnections map[string]string, connectionClients map[string]string) ChannelStateCache { diff --git a/relayer/provider/provider.go b/relayer/provider/provider.go index a1c150e0a..34cee434d 100644 --- a/relayer/provider/provider.go +++ b/relayer/provider/provider.go @@ -457,6 +457,7 @@ type QueryProvider interface { QueryUnreceivedPackets(ctx context.Context, height uint64, channelid, portid string, seqs []uint64) ([]uint64, error) QueryUnreceivedAcknowledgements(ctx context.Context, height uint64, channelid, portid string, seqs []uint64) ([]uint64, error) QueryNextSeqRecv(ctx context.Context, height int64, channelid, portid string) (recvRes *chantypes.QueryNextSequenceReceiveResponse, err error) + QueryNextSeqAck(ctx context.Context, height int64, channelid, portid string) (recvRes *chantypes.QueryNextSequenceReceiveResponse, err error) QueryPacketCommitment(ctx context.Context, height int64, channelid, portid string, seq uint64) (comRes *chantypes.QueryPacketCommitmentResponse, err error) QueryPacketAcknowledgement(ctx context.Context, height int64, channelid, portid string, seq uint64) (ackRes *chantypes.QueryPacketAcknowledgementResponse, err error) QueryPacketReceipt(ctx context.Context, height int64, channelid, portid string, seq uint64) (recRes *chantypes.QueryPacketReceiptResponse, err error) From d878a55acb1999ef81341dd7ce854e6d4a08945d Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Mon, 31 Jul 2023 14:20:08 -0700 Subject: [PATCH 15/16] chore: update penumbra protos to v0.57.0 (#1249) Version 0.57.0 of Penumbra was released on 2023-07-26 [0]. This commit pulls in the latest proto defs from BSR. [0] https://github.com/penumbra-zone/penumbra/releases/tag/v0.57.0 Co-authored-by: Conor Schaefer Co-authored-by: Justin Tieri <37750742+jtieri@users.noreply.github.com> --- .../penumbra/core/ibc/v1alpha1/ibc.pb.go | 199 +++---- .../chains/penumbra/view/v1alpha1/view.pb.go | 493 +++++++++--------- 2 files changed, 332 insertions(+), 360 deletions(-) diff --git a/relayer/chains/penumbra/core/ibc/v1alpha1/ibc.pb.go b/relayer/chains/penumbra/core/ibc/v1alpha1/ibc.pb.go index 9f95c7e73..cf5d9ad90 100644 --- a/relayer/chains/penumbra/core/ibc/v1alpha1/ibc.pb.go +++ b/relayer/chains/penumbra/core/ibc/v1alpha1/ibc.pb.go @@ -168,27 +168,25 @@ func (m *FungibleTokenPacketData) GetReceiver() string { } type Ics20Withdrawal struct { - // the chain ID of the destination chain for this ICS20 transfer - DestinationChainId string `protobuf:"bytes,1,opt,name=destination_chain_id,json=destinationChainId,proto3" json:"destination_chain_id,omitempty"` - Amount *v1alpha1.Amount `protobuf:"bytes,2,opt,name=amount,proto3" json:"amount,omitempty"` - Denom *v1alpha1.Denom `protobuf:"bytes,3,opt,name=denom,proto3" json:"denom,omitempty"` + Amount *v1alpha1.Amount `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"` + Denom *v1alpha1.Denom `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` // the address on the destination chain to send the transfer to - DestinationChainAddress string `protobuf:"bytes,4,opt,name=destination_chain_address,json=destinationChainAddress,proto3" json:"destination_chain_address,omitempty"` + DestinationChainAddress string `protobuf:"bytes,3,opt,name=destination_chain_address,json=destinationChainAddress,proto3" json:"destination_chain_address,omitempty"` // a "sender" penumbra address to use to return funds from this withdrawal. // this should be an ephemeral address - ReturnAddress *v1alpha1.Address `protobuf:"bytes,5,opt,name=return_address,json=returnAddress,proto3" json:"return_address,omitempty"` + ReturnAddress *v1alpha1.Address `protobuf:"bytes,4,opt,name=return_address,json=returnAddress,proto3" json:"return_address,omitempty"` // the height (on Penumbra) at which this transfer expires (and funds are sent // back to the sender address?). NOTE: if funds are sent back to the sender, // we MUST verify a nonexistence proof before accepting the timeout, to // prevent relayer censorship attacks. The core IBC implementation does this // in its handling of validation of timeouts. - TimeoutHeight uint64 `protobuf:"varint,6,opt,name=timeout_height,json=timeoutHeight,proto3" json:"timeout_height,omitempty"` + TimeoutHeight uint64 `protobuf:"varint,5,opt,name=timeout_height,json=timeoutHeight,proto3" json:"timeout_height,omitempty"` // the timestamp at which this transfer expires. - TimeoutTime uint64 `protobuf:"varint,7,opt,name=timeout_time,json=timeoutTime,proto3" json:"timeout_time,omitempty"` + TimeoutTime uint64 `protobuf:"varint,6,opt,name=timeout_time,json=timeoutTime,proto3" json:"timeout_time,omitempty"` // the source port that identifies the channel used for the withdrawal - SourcePort string `protobuf:"bytes,8,opt,name=source_port,json=sourcePort,proto3" json:"source_port,omitempty"` + SourcePort string `protobuf:"bytes,7,opt,name=source_port,json=sourcePort,proto3" json:"source_port,omitempty"` // the source channel used for the withdrawal - SourceChannel string `protobuf:"bytes,9,opt,name=source_channel,json=sourceChannel,proto3" json:"source_channel,omitempty"` + SourceChannel string `protobuf:"bytes,8,opt,name=source_channel,json=sourceChannel,proto3" json:"source_channel,omitempty"` } func (m *Ics20Withdrawal) Reset() { *m = Ics20Withdrawal{} } @@ -224,13 +222,6 @@ func (m *Ics20Withdrawal) XXX_DiscardUnknown() { var xxx_messageInfo_Ics20Withdrawal proto.InternalMessageInfo -func (m *Ics20Withdrawal) GetDestinationChainId() string { - if m != nil { - return m.DestinationChainId - } - return "" -} - func (m *Ics20Withdrawal) GetAmount() *v1alpha1.Amount { if m != nil { return m.Amount @@ -592,58 +583,57 @@ func init() { } var fileDescriptor_6509740287584c65 = []byte{ - // 803 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0x41, 0x8f, 0x1b, 0x35, - 0x14, 0xde, 0x49, 0xb6, 0xbb, 0x1b, 0xa7, 0x49, 0xe8, 0x68, 0x45, 0xa7, 0x41, 0xa4, 0x61, 0xd4, - 0x56, 0x5b, 0x24, 0x66, 0x9a, 0x14, 0x84, 0x34, 0xa8, 0x12, 0xd9, 0xa9, 0x28, 0x73, 0xa8, 0x88, - 0x86, 0xaa, 0x48, 0x28, 0x52, 0xe4, 0xf1, 0xb8, 0x89, 0xd5, 0x8c, 0x1d, 0xd9, 0x9e, 0xac, 0x22, - 0xfe, 0x04, 0x7f, 0x01, 0x8e, 0x9c, 0xf9, 0x11, 0x88, 0x53, 0x8f, 0x48, 0x5c, 0x50, 0xf6, 0xc6, - 0xaf, 0x40, 0xb6, 0xc7, 0x49, 0x03, 0x6c, 0xf7, 0x14, 0xbf, 0xef, 0xfb, 0xde, 0xcb, 0xf7, 0x9e, - 0xdf, 0x18, 0xdc, 0x5b, 0x62, 0x5a, 0x16, 0x19, 0x87, 0x21, 0x62, 0x1c, 0x87, 0x24, 0x43, 0xe1, - 0x6a, 0x00, 0x17, 0xcb, 0x39, 0x1c, 0xa8, 0x20, 0x58, 0x72, 0x26, 0x99, 0xdb, 0xb5, 0xaa, 0x40, - 0xa9, 0x02, 0x45, 0x58, 0x55, 0xf7, 0xe3, 0xfd, 0x0a, 0x88, 0xaf, 0x97, 0x92, 0xed, 0x8a, 0x98, - 0xd8, 0xd4, 0xe9, 0xde, 0x55, 0xf5, 0x8d, 0x6c, 0x41, 0x30, 0x95, 0xe1, 0x6a, 0x50, 0x9d, 0x2a, - 0xc1, 0x9d, 0x19, 0x63, 0xb3, 0x05, 0x0e, 0x75, 0x94, 0x95, 0xaf, 0x42, 0x48, 0xd7, 0x86, 0xf2, - 0xbf, 0x04, 0x8d, 0x24, 0x43, 0x23, 0x24, 0x09, 0xa3, 0xee, 0x63, 0x00, 0x38, 0xbc, 0x98, 0x42, - 0x1d, 0x79, 0x4e, 0xdf, 0x39, 0x6b, 0x0e, 0x4f, 0x03, 0x93, 0x1c, 0xd8, 0xe4, 0x60, 0x44, 0xd7, - 0x69, 0x83, 0xc3, 0x0b, 0x93, 0xe4, 0xff, 0x00, 0x6e, 0x7f, 0x55, 0xd2, 0x19, 0xc9, 0x16, 0xf8, - 0x05, 0x7b, 0x8d, 0xe9, 0x18, 0xa2, 0xd7, 0x58, 0x3e, 0x85, 0x12, 0xba, 0xa7, 0xe0, 0x46, 0x8e, - 0x29, 0x2b, 0x74, 0xa9, 0x46, 0x6a, 0x02, 0xf7, 0x7d, 0x70, 0x04, 0x0b, 0x56, 0x52, 0xe9, 0xd5, - 0x34, 0x5c, 0x45, 0x0a, 0x17, 0x98, 0xe6, 0x98, 0x7b, 0x75, 0x83, 0x9b, 0xc8, 0xed, 0x82, 0x13, - 0x8e, 0x11, 0x26, 0x2b, 0xcc, 0xbd, 0x43, 0xcd, 0x6c, 0x63, 0xff, 0xcf, 0x3a, 0xe8, 0x24, 0x48, - 0x0c, 0x1f, 0x7d, 0x47, 0xe4, 0x3c, 0xe7, 0xf0, 0x02, 0x2e, 0xdc, 0x47, 0xe0, 0x34, 0xc7, 0x42, - 0x12, 0x0a, 0x95, 0xbf, 0x29, 0x9a, 0x43, 0x42, 0xa7, 0x24, 0xaf, 0x4c, 0xb8, 0x6f, 0x71, 0xb1, - 0xa2, 0x92, 0xdc, 0x7d, 0xb2, 0xe7, 0xa8, 0x39, 0xbc, 0x1f, 0xec, 0xdf, 0x4c, 0x35, 0x6d, 0x3b, - 0xfd, 0x60, 0xa4, 0xc5, 0x5b, 0xe3, 0x91, 0x6d, 0xb3, 0xae, 0xb3, 0xef, 0x5d, 0x93, 0xfd, 0x54, - 0x69, 0xed, 0x30, 0x22, 0x70, 0xe7, 0xbf, 0x66, 0x61, 0x9e, 0x73, 0x2c, 0x44, 0xd5, 0xed, 0xed, - 0x7f, 0x3b, 0x1e, 0x19, 0xda, 0x7d, 0x0e, 0xda, 0x1c, 0xcb, 0x92, 0xef, 0x12, 0x6e, 0x68, 0x03, - 0x0f, 0xae, 0xb3, 0x6f, 0xd4, 0x69, 0xcb, 0x64, 0xdb, 0x72, 0xf7, 0x41, 0x5b, 0x92, 0x02, 0xb3, - 0x52, 0x4e, 0xe7, 0x98, 0xcc, 0xe6, 0xd2, 0x3b, 0xea, 0x3b, 0x67, 0x87, 0x69, 0xab, 0x42, 0xbf, - 0xd6, 0xa0, 0xfb, 0x11, 0xb8, 0x69, 0x65, 0xea, 0xd7, 0x3b, 0xd6, 0xa2, 0x66, 0x85, 0xbd, 0x20, - 0x05, 0x76, 0xef, 0x82, 0xa6, 0x60, 0x25, 0x47, 0x78, 0xba, 0x64, 0x5c, 0x7a, 0x27, 0xba, 0x0d, - 0x60, 0xa0, 0x31, 0xe3, 0x52, 0xfd, 0x55, 0x25, 0x40, 0x73, 0x48, 0x29, 0x5e, 0x78, 0x0d, 0xad, - 0x69, 0x19, 0x34, 0x36, 0xa0, 0xff, 0xab, 0x03, 0x40, 0xac, 0x17, 0x59, 0xaf, 0xd3, 0x07, 0xa0, - 0x61, 0xd6, 0x7a, 0x77, 0x9b, 0x27, 0x06, 0x48, 0x72, 0xf7, 0x73, 0x70, 0xb3, 0x22, 0x85, 0x84, - 0x12, 0x57, 0x37, 0xf9, 0xff, 0xdb, 0xdb, 0x34, 0xca, 0x6f, 0x95, 0x50, 0x79, 0x59, 0x72, 0x86, - 0xb0, 0x10, 0x38, 0x37, 0x1d, 0x99, 0xf5, 0x6b, 0x6d, 0x51, 0xdd, 0xd3, 0x43, 0xf0, 0xde, 0x4e, - 0x56, 0xcd, 0xe7, 0x50, 0xb7, 0xde, 0xd9, 0xe2, 0x66, 0x42, 0xfe, 0x43, 0xd0, 0x32, 0xae, 0x63, - 0xb5, 0x1e, 0x98, 0xbb, 0x1e, 0x38, 0x46, 0xe6, 0xa8, 0x6d, 0x1f, 0xa6, 0x36, 0xf4, 0xbf, 0x01, - 0xed, 0x98, 0x51, 0x81, 0xa9, 0x28, 0x85, 0xb1, 0xf3, 0x04, 0x74, 0x90, 0x45, 0xaa, 0x56, 0xde, - 0xf5, 0x21, 0xb6, 0xd1, 0x5e, 0xba, 0xff, 0x0c, 0x74, 0x5e, 0x62, 0x4e, 0x5e, 0x11, 0xeb, 0x46, - 0xb8, 0x9f, 0x82, 0x63, 0xe3, 0x57, 0x78, 0x4e, 0xbf, 0x7e, 0xd6, 0x1c, 0x76, 0xf5, 0x53, 0x63, - 0x56, 0xc3, 0x3c, 0x13, 0xab, 0x41, 0x60, 0xd4, 0xa9, 0x95, 0xfa, 0x9f, 0x80, 0x5b, 0x31, 0xa3, - 0x14, 0xeb, 0x8f, 0xfc, 0xfa, 0x46, 0x3e, 0x03, 0xb7, 0x6c, 0xcf, 0x36, 0x49, 0xb8, 0x7d, 0xd0, - 0x44, 0xbb, 0x50, 0xff, 0x7b, 0x23, 0x7d, 0x1b, 0x3a, 0xff, 0xa9, 0xf6, 0xdb, 0xa6, 0xe7, 0xbc, - 0xd9, 0xf4, 0x9c, 0xbf, 0x36, 0x3d, 0xe7, 0xc7, 0xcb, 0xde, 0xc1, 0x9b, 0xcb, 0xde, 0xc1, 0x1f, - 0x97, 0xbd, 0x03, 0xd0, 0x43, 0xac, 0x08, 0xae, 0x7e, 0x21, 0xcf, 0x4f, 0x92, 0x0c, 0x8d, 0xd5, - 0x28, 0xc6, 0xce, 0xf7, 0xe9, 0x8c, 0xc8, 0x79, 0x99, 0x05, 0x88, 0x15, 0x21, 0x62, 0xa2, 0x60, - 0x22, 0xe4, 0x78, 0x01, 0xd7, 0x98, 0x87, 0xab, 0xe1, 0xf6, 0xa8, 0x3f, 0x2e, 0x11, 0x5e, 0xfd, - 0x36, 0x7f, 0x41, 0x32, 0x64, 0xcf, 0x3f, 0xd7, 0xea, 0xe3, 0x38, 0xf9, 0xa5, 0xd6, 0x1d, 0x5b, - 0x0b, 0xb1, 0xb2, 0x90, 0x64, 0x28, 0x78, 0x59, 0x49, 0x7e, 0xdf, 0x91, 0x13, 0x45, 0x4e, 0x92, - 0x0c, 0x4d, 0x2c, 0xb9, 0xa9, 0x3d, 0xb8, 0x9a, 0x9c, 0x3c, 0x1b, 0x9f, 0x3f, 0xc7, 0x12, 0xe6, - 0x50, 0xc2, 0xbf, 0x6b, 0x1f, 0x5a, 0x61, 0x14, 0x29, 0x65, 0x14, 0x25, 0x19, 0x8a, 0x22, 0xab, - 0xcd, 0x8e, 0xf4, 0x85, 0x3f, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x96, 0x37, 0xa5, 0x55, - 0x06, 0x00, 0x00, + // 791 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x94, 0x41, 0x8f, 0x1b, 0x35, + 0x14, 0xc7, 0x77, 0x92, 0x74, 0x37, 0x71, 0x9a, 0x84, 0x8e, 0x2a, 0x3a, 0x0d, 0x22, 0x0d, 0xa3, + 0xb6, 0xda, 0x22, 0x31, 0x43, 0x52, 0x10, 0xd2, 0xa0, 0x4a, 0x64, 0xa7, 0xa2, 0xcc, 0xa1, 0x22, + 0x1a, 0xaa, 0x22, 0xa1, 0x48, 0x91, 0xc7, 0xe3, 0x26, 0x56, 0x33, 0x76, 0x64, 0x7b, 0xb2, 0x8a, + 0xf8, 0x12, 0x7c, 0x05, 0xb8, 0xc1, 0x99, 0x0f, 0x81, 0x38, 0xf5, 0xc8, 0x11, 0x65, 0x6f, 0x7c, + 0x0a, 0x64, 0x7b, 0x9c, 0xec, 0x4a, 0x2c, 0x7b, 0x8a, 0xdf, 0xff, 0xfd, 0xde, 0xcb, 0x7b, 0x6f, + 0x9e, 0x0d, 0x1e, 0xae, 0x31, 0x2d, 0x8b, 0x8c, 0xc3, 0x10, 0x31, 0x8e, 0x43, 0x92, 0xa1, 0x70, + 0x33, 0x82, 0xab, 0xf5, 0x12, 0x8e, 0x94, 0x11, 0xac, 0x39, 0x93, 0xcc, 0xed, 0x5b, 0x2a, 0x50, + 0x54, 0xa0, 0x1c, 0x96, 0xea, 0x7f, 0x7c, 0x35, 0x03, 0xe2, 0xdb, 0xb5, 0x64, 0x87, 0x24, 0xc6, + 0x36, 0x79, 0xfa, 0x0f, 0x54, 0x7e, 0x83, 0xad, 0x08, 0xa6, 0x32, 0xdc, 0x8c, 0xaa, 0x53, 0x05, + 0xdc, 0x5f, 0x30, 0xb6, 0x58, 0xe1, 0x50, 0x5b, 0x59, 0xf9, 0x26, 0x84, 0x74, 0x6b, 0x5c, 0xfe, + 0x57, 0xa0, 0x95, 0x64, 0x68, 0x82, 0x24, 0x61, 0xd4, 0x7d, 0x0a, 0x00, 0x87, 0xe7, 0x73, 0xa8, + 0x2d, 0xcf, 0x19, 0x3a, 0xa7, 0xed, 0xf1, 0xdd, 0xc0, 0x04, 0x07, 0x36, 0x38, 0x98, 0xd0, 0x6d, + 0xda, 0xe2, 0xf0, 0xdc, 0x04, 0xf9, 0x3f, 0x82, 0x7b, 0x5f, 0x97, 0x74, 0x41, 0xb2, 0x15, 0x7e, + 0xc5, 0xde, 0x62, 0x3a, 0x85, 0xe8, 0x2d, 0x96, 0xcf, 0xa1, 0x84, 0xee, 0x5d, 0x70, 0x2b, 0xc7, + 0x94, 0x15, 0x3a, 0x55, 0x2b, 0x35, 0x86, 0xfb, 0x3e, 0x38, 0x86, 0x05, 0x2b, 0xa9, 0xf4, 0x6a, + 0x5a, 0xae, 0x2c, 0xa5, 0x0b, 0x4c, 0x73, 0xcc, 0xbd, 0xba, 0xd1, 0x8d, 0xe5, 0xf6, 0x41, 0x93, + 0x63, 0x84, 0xc9, 0x06, 0x73, 0xaf, 0xa1, 0x3d, 0x7b, 0xdb, 0xff, 0xb5, 0x0e, 0x7a, 0x09, 0x12, + 0xe3, 0x4f, 0xbf, 0x27, 0x72, 0x99, 0x73, 0x78, 0x0e, 0x57, 0xee, 0xb3, 0x7d, 0x7e, 0xd3, 0xc1, + 0xa3, 0xe0, 0xea, 0x9c, 0xab, 0xd9, 0xd9, 0x59, 0x06, 0x13, 0x0d, 0xef, 0xcb, 0x88, 0x6c, 0xd1, + 0x35, 0x1d, 0xfd, 0xf0, 0x86, 0xe8, 0xe7, 0x8a, 0xb5, 0xad, 0x45, 0xe0, 0x7e, 0x8e, 0x85, 0x24, + 0x14, 0xaa, 0xd1, 0xcc, 0xd1, 0x12, 0x12, 0x3a, 0x87, 0x79, 0xce, 0xb1, 0x10, 0x55, 0x57, 0xf7, + 0x2e, 0x01, 0xb1, 0xf2, 0x4f, 0x8c, 0xdb, 0x7d, 0x09, 0xba, 0x1c, 0xcb, 0x92, 0x1f, 0x02, 0x1a, + 0xba, 0x80, 0xc7, 0x37, 0x95, 0x6f, 0xe8, 0xb4, 0x63, 0xa2, 0x6d, 0xba, 0x47, 0xa0, 0x2b, 0x49, + 0x81, 0x59, 0x29, 0xe7, 0x4b, 0x4c, 0x16, 0x4b, 0xe9, 0xdd, 0x1a, 0x3a, 0xa7, 0x8d, 0xb4, 0x53, + 0xa9, 0xdf, 0x68, 0xd1, 0xfd, 0x08, 0xdc, 0xb6, 0x98, 0xfa, 0xf5, 0x8e, 0x35, 0xd4, 0xae, 0xb4, + 0x57, 0xa4, 0xc0, 0xee, 0x03, 0xd0, 0x16, 0xac, 0xe4, 0x08, 0xcf, 0xd7, 0x8c, 0x4b, 0xef, 0x44, + 0xb7, 0x01, 0x8c, 0x34, 0x65, 0x5c, 0xaa, 0xbf, 0xaa, 0x00, 0xb4, 0x84, 0x94, 0xe2, 0x95, 0xd7, + 0xd4, 0x4c, 0xc7, 0xa8, 0xb1, 0x11, 0xfd, 0xdf, 0x1d, 0x00, 0x62, 0xbd, 0x96, 0x7a, 0x39, 0x3e, + 0x00, 0x2d, 0xb3, 0xa4, 0x73, 0x92, 0x57, 0x0b, 0xd2, 0x34, 0x42, 0x92, 0xbb, 0x5f, 0x80, 0xdb, + 0x95, 0x53, 0x48, 0x28, 0x71, 0xf5, 0x2d, 0xfe, 0x7b, 0x17, 0xdb, 0x86, 0xfc, 0x4e, 0x81, 0xaa, + 0x96, 0x35, 0x67, 0x08, 0x0b, 0x81, 0x73, 0xd3, 0x91, 0x19, 0x7b, 0x67, 0xaf, 0xea, 0x9e, 0x9e, + 0x80, 0xf7, 0x0e, 0x58, 0x35, 0x9f, 0x86, 0x6e, 0xbd, 0xb7, 0xd7, 0xcd, 0x84, 0xfc, 0x27, 0xa0, + 0x63, 0xaa, 0x8e, 0xd5, 0x7a, 0x60, 0xee, 0x7a, 0xe0, 0x04, 0x99, 0xa3, 0x2e, 0xbb, 0x91, 0x5a, + 0xd3, 0xff, 0x16, 0x74, 0x63, 0x46, 0x05, 0xa6, 0xa2, 0x14, 0xa6, 0x9c, 0x67, 0xa0, 0x87, 0xac, + 0x52, 0xb5, 0xf2, 0x7f, 0xd7, 0xaa, 0x8b, 0xae, 0x84, 0xfb, 0x2f, 0x40, 0xef, 0x35, 0xe6, 0xe4, + 0x0d, 0xb1, 0xd5, 0x08, 0xf7, 0x33, 0x70, 0x62, 0xea, 0x15, 0x9e, 0x33, 0xac, 0x9f, 0xb6, 0xc7, + 0x7d, 0xfd, 0x70, 0x98, 0xd5, 0x30, 0x97, 0x7e, 0x33, 0x0a, 0x0c, 0x9d, 0x5a, 0xd4, 0xff, 0x04, + 0xdc, 0x89, 0x19, 0xa5, 0x58, 0x5f, 0xd9, 0x9b, 0x1b, 0xf9, 0x1c, 0xdc, 0xb1, 0x3d, 0xdb, 0x20, + 0xe1, 0x0e, 0x41, 0x1b, 0x1d, 0x4c, 0xfd, 0xef, 0xad, 0xf4, 0xb2, 0x74, 0xf6, 0x73, 0xed, 0x8f, + 0xdd, 0xc0, 0x79, 0xb7, 0x1b, 0x38, 0x7f, 0xef, 0x06, 0xce, 0x4f, 0x17, 0x83, 0xa3, 0x77, 0x17, + 0x83, 0xa3, 0xbf, 0x2e, 0x06, 0x47, 0x60, 0x80, 0x58, 0x11, 0x5c, 0xff, 0xde, 0x9d, 0x35, 0x93, + 0x0c, 0x4d, 0xd5, 0x28, 0xa6, 0xce, 0x0f, 0xe9, 0x82, 0xc8, 0x65, 0x99, 0x05, 0x88, 0x15, 0x21, + 0x62, 0xa2, 0x60, 0x22, 0xe4, 0x78, 0x05, 0xb7, 0x98, 0x87, 0x9b, 0xf1, 0xfe, 0xa8, 0x2f, 0x97, + 0x08, 0xaf, 0x7f, 0x69, 0xbf, 0x24, 0x19, 0xb2, 0xe7, 0x5f, 0x6a, 0xf5, 0x69, 0x9c, 0xfc, 0x56, + 0xeb, 0x4f, 0x6d, 0x09, 0xb1, 0x2a, 0x21, 0xc9, 0x50, 0xf0, 0xba, 0x42, 0xfe, 0x3c, 0x38, 0x67, + 0xca, 0x39, 0x4b, 0x32, 0x34, 0xb3, 0xce, 0x5d, 0xed, 0xf1, 0xf5, 0xce, 0xd9, 0x8b, 0xe9, 0xd9, + 0x4b, 0x2c, 0x61, 0x0e, 0x25, 0xfc, 0xa7, 0xf6, 0xa1, 0x05, 0xa3, 0x48, 0x91, 0x51, 0x94, 0x64, + 0x28, 0x8a, 0x2c, 0x9b, 0x1d, 0xeb, 0x0f, 0xfe, 0xf4, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xec, + 0xc7, 0x3e, 0x41, 0x23, 0x06, 0x00, 0x00, } func (m *IbcAction) Marshal() (dAtA []byte, err error) { @@ -757,24 +747,24 @@ func (m *Ics20Withdrawal) MarshalToSizedBuffer(dAtA []byte) (int, error) { copy(dAtA[i:], m.SourceChannel) i = encodeVarintIbc(dAtA, i, uint64(len(m.SourceChannel))) i-- - dAtA[i] = 0x4a + dAtA[i] = 0x42 } if len(m.SourcePort) > 0 { i -= len(m.SourcePort) copy(dAtA[i:], m.SourcePort) i = encodeVarintIbc(dAtA, i, uint64(len(m.SourcePort))) i-- - dAtA[i] = 0x42 + dAtA[i] = 0x3a } if m.TimeoutTime != 0 { i = encodeVarintIbc(dAtA, i, uint64(m.TimeoutTime)) i-- - dAtA[i] = 0x38 + dAtA[i] = 0x30 } if m.TimeoutHeight != 0 { i = encodeVarintIbc(dAtA, i, uint64(m.TimeoutHeight)) i-- - dAtA[i] = 0x30 + dAtA[i] = 0x28 } if m.ReturnAddress != nil { { @@ -786,14 +776,14 @@ func (m *Ics20Withdrawal) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintIbc(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x2a + dAtA[i] = 0x22 } if len(m.DestinationChainAddress) > 0 { i -= len(m.DestinationChainAddress) copy(dAtA[i:], m.DestinationChainAddress) i = encodeVarintIbc(dAtA, i, uint64(len(m.DestinationChainAddress))) i-- - dAtA[i] = 0x22 + dAtA[i] = 0x1a } if m.Denom != nil { { @@ -805,7 +795,7 @@ func (m *Ics20Withdrawal) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintIbc(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a + dAtA[i] = 0x12 } if m.Amount != nil { { @@ -817,13 +807,6 @@ func (m *Ics20Withdrawal) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintIbc(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x12 - } - if len(m.DestinationChainId) > 0 { - i -= len(m.DestinationChainId) - copy(dAtA[i:], m.DestinationChainId) - i = encodeVarintIbc(dAtA, i, uint64(len(m.DestinationChainId))) - i-- dAtA[i] = 0xa } return len(dAtA) - i, nil @@ -1098,10 +1081,6 @@ func (m *Ics20Withdrawal) Size() (n int) { } var l int _ = l - l = len(m.DestinationChainId) - if l > 0 { - n += 1 + l + sovIbc(uint64(l)) - } if m.Amount != nil { l = m.Amount.Size() n += 1 + l + sovIbc(uint64(l)) @@ -1526,38 +1505,6 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DestinationChainId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowIbc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthIbc - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthIbc - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DestinationChainId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) } @@ -1593,7 +1540,7 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 3: + case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) } @@ -1629,7 +1576,7 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 4: + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field DestinationChainAddress", wireType) } @@ -1661,7 +1608,7 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { } m.DestinationChainAddress = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 5: + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ReturnAddress", wireType) } @@ -1697,7 +1644,7 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 6: + case 5: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field TimeoutHeight", wireType) } @@ -1716,7 +1663,7 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { break } } - case 7: + case 6: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field TimeoutTime", wireType) } @@ -1735,7 +1682,7 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { break } } - case 8: + case 7: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field SourcePort", wireType) } @@ -1767,7 +1714,7 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { } m.SourcePort = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 9: + case 8: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field SourceChannel", wireType) } diff --git a/relayer/chains/penumbra/view/v1alpha1/view.pb.go b/relayer/chains/penumbra/view/v1alpha1/view.pb.go index aacce5f7e..603de4d9b 100644 --- a/relayer/chains/penumbra/view/v1alpha1/view.pb.go +++ b/relayer/chains/penumbra/view/v1alpha1/view.pb.go @@ -3374,7 +3374,7 @@ func (*OwnedPositionIdsRequest) XXX_OneofWrappers() []interface{} { } type OwnedPositionIdsResponse struct { - PositionIds []*v1alpha15.PositionId `protobuf:"bytes,1,rep,name=position_ids,json=positionIds,proto3" json:"position_ids,omitempty"` + PositionId *v1alpha15.PositionId `protobuf:"bytes,1,opt,name=position_id,json=positionId,proto3" json:"position_id,omitempty"` } func (m *OwnedPositionIdsResponse) Reset() { *m = OwnedPositionIdsResponse{} } @@ -3410,9 +3410,9 @@ func (m *OwnedPositionIdsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_OwnedPositionIdsResponse proto.InternalMessageInfo -func (m *OwnedPositionIdsResponse) GetPositionIds() []*v1alpha15.PositionId { +func (m *OwnedPositionIdsResponse) GetPositionId() *v1alpha15.PositionId { if m != nil { - return m.PositionIds + return m.PositionId } return nil } @@ -3478,191 +3478,191 @@ func init() { proto.RegisterFile("penumbra/view/v1alpha1/view.proto", fileDescri var fileDescriptor_0aa947b204e6a7c2 = []byte{ // 2954 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5b, 0xcd, 0x6f, 0xdc, 0xc6, - 0x15, 0x37, 0x77, 0xf5, 0xe5, 0xb7, 0xda, 0x5d, 0x99, 0xb6, 0xa5, 0xf5, 0x26, 0x51, 0x52, 0x26, - 0xb6, 0x15, 0x27, 0x59, 0xd9, 0x8a, 0x93, 0xa6, 0x4a, 0xd2, 0x46, 0x6b, 0x45, 0x96, 0xe0, 0xd8, - 0x56, 0x29, 0x5b, 0x69, 0x52, 0xa5, 0xc4, 0x88, 0x1c, 0x49, 0xac, 0x76, 0x49, 0x86, 0x9c, 0xd5, - 0x47, 0x7b, 0x4a, 0x11, 0x14, 0x46, 0x80, 0x06, 0x45, 0xd1, 0x4b, 0xae, 0x3d, 0x16, 0xbd, 0xe6, - 0x9a, 0x4b, 0x2f, 0x45, 0x4f, 0x39, 0x16, 0x28, 0x50, 0x04, 0x0e, 0x7a, 0x69, 0xff, 0x85, 0x02, - 0x2d, 0xe6, 0x8b, 0x5f, 0x4b, 0x7a, 0x77, 0x25, 0x19, 0x6e, 0x7b, 0xd2, 0xce, 0xf0, 0xbd, 0xdf, - 0xfb, 0x98, 0x37, 0x6f, 0xde, 0x3c, 0x52, 0xf0, 0x1d, 0x0f, 0x3b, 0x9d, 0xf6, 0xa6, 0x8f, 0x66, - 0xf7, 0x6c, 0xbc, 0x3f, 0xbb, 0x77, 0x0d, 0xb5, 0xbc, 0x1d, 0x74, 0x8d, 0x8d, 0x1a, 0x9e, 0xef, - 0x12, 0x57, 0x9d, 0x94, 0x24, 0x0d, 0x36, 0x29, 0x49, 0xea, 0x33, 0x21, 0xab, 0xe9, 0xfa, 0x78, - 0xd6, 0xdc, 0x41, 0xb6, 0x13, 0x01, 0xb0, 0x21, 0x47, 0xa8, 0x5f, 0x49, 0x51, 0xfa, 0x87, 0x1e, - 0x71, 0x63, 0xa4, 0x6c, 0x2c, 0x68, 0x5f, 0x48, 0xd2, 0x5a, 0xf8, 0x20, 0x22, 0xb4, 0xf0, 0x81, - 0xa0, 0xba, 0x9e, 0xa4, 0x22, 0x3e, 0x72, 0x02, 0x64, 0x12, 0xdb, 0x8d, 0x69, 0x10, 0x9b, 0xcc, - 0xc6, 0xb6, 0x37, 0xcd, 0x88, 0xda, 0xde, 0x34, 0x05, 0x55, 0xca, 0xae, 0x80, 0xa0, 0x5d, 0x1c, - 0xd1, 0xb1, 0x21, 0xa7, 0xd4, 0xbe, 0x51, 0xa0, 0xb6, 0xd0, 0x21, 0x3b, 0xae, 0x6f, 0xff, 0x0c, - 0x2f, 0x38, 0x56, 0xb3, 0x63, 0xb7, 0x2c, 0x1d, 0x7f, 0xdc, 0xc1, 0x01, 0x51, 0x7f, 0x02, 0x13, - 0x31, 0x0d, 0x0c, 0xaf, 0x85, 0x9c, 0x9a, 0xf2, 0x9c, 0x32, 0x53, 0x9a, 0x7b, 0xb5, 0x11, 0x7a, - 0x94, 0x4a, 0x68, 0xc4, 0x15, 0x95, 0x72, 0x1a, 0xf7, 0xa2, 0xc9, 0xd5, 0x16, 0x72, 0xf4, 0x2a, - 0x49, 0x4e, 0xa8, 0x16, 0xa8, 0x48, 0xc8, 0x46, 0x4c, 0x82, 0x85, 0x08, 0xaa, 0x15, 0x98, 0x84, - 0xd7, 0xfa, 0x91, 0xb0, 0x10, 0xe7, 0x5e, 0x44, 0x04, 0xe9, 0x67, 0x50, 0x7a, 0x4a, 0x73, 0xe0, - 0x42, 0x86, 0x85, 0x81, 0xe7, 0x3a, 0x01, 0x56, 0x7f, 0x08, 0xa5, 0x18, 0xb2, 0xb0, 0x6e, 0x76, - 0x40, 0xeb, 0xf4, 0x38, 0x86, 0xf6, 0x85, 0x02, 0x4f, 0x35, 0x7d, 0x17, 0x59, 0x26, 0x0a, 0x48, - 0x9c, 0x4a, 0x78, 0xf5, 0xe4, 0x45, 0xaa, 0x97, 0xa1, 0x8a, 0xf6, 0x91, 0x4d, 0x0c, 0x0b, 0x13, - 0xcc, 0x61, 0xa9, 0x17, 0xc7, 0xf4, 0x0a, 0x9b, 0x5e, 0x94, 0xb3, 0xda, 0x27, 0x0a, 0x3c, 0x9d, - 0xad, 0x9b, 0xf0, 0xc7, 0xeb, 0x50, 0xb0, 0x2d, 0xa1, 0xd3, 0xa5, 0x7e, 0x74, 0x5a, 0xb1, 0xf4, - 0x82, 0x6d, 0xa9, 0x2f, 0xc2, 0x44, 0x28, 0xdb, 0xd8, 0xc1, 0xf6, 0xf6, 0x0e, 0x61, 0x2a, 0x0c, - 0xe9, 0xd5, 0x70, 0x7e, 0x99, 0x4d, 0x6b, 0x5f, 0x00, 0x5c, 0x48, 0x85, 0x86, 0x83, 0x7d, 0xe9, - 0x9d, 0xe7, 0xa1, 0x8c, 0x0f, 0x3c, 0xdb, 0x3f, 0x94, 0x28, 0x0a, 0x43, 0x19, 0xe7, 0x93, 0x1c, - 0x42, 0xbd, 0x0e, 0xc5, 0x2d, 0x8c, 0x45, 0xa4, 0x68, 0x29, 0x35, 0xc5, 0x5e, 0x0c, 0x35, 0x5c, - 0xc2, 0x58, 0xa7, 0xe4, 0xaa, 0x0a, 0x43, 0x6d, 0xdc, 0x76, 0x6b, 0xc5, 0xe7, 0x94, 0x99, 0xd3, - 0x3a, 0xfb, 0xad, 0x6e, 0xc0, 0x04, 0x32, 0x4d, 0xb7, 0xe3, 0x10, 0x63, 0xdb, 0x77, 0x3b, 0x9e, - 0x61, 0x5b, 0xb5, 0x0a, 0x83, 0x7d, 0xa5, 0x07, 0xec, 0x02, 0x67, 0xbb, 0x49, 0xb9, 0x56, 0xac, - 0xe5, 0x53, 0x7a, 0x05, 0x25, 0x66, 0x1e, 0x28, 0x8a, 0xaa, 0xc3, 0xa8, 0xdb, 0x21, 0x5e, 0x87, - 0x04, 0xb5, 0x73, 0xcf, 0x15, 0x67, 0x4a, 0x73, 0x6f, 0x34, 0xb2, 0x33, 0x51, 0x23, 0xd7, 0x21, - 0x8d, 0xbb, 0x0c, 0x40, 0x97, 0x40, 0xea, 0x7b, 0x30, 0x1c, 0xec, 0x23, 0x2f, 0xa8, 0x4d, 0x33, - 0xc4, 0xd7, 0x07, 0x47, 0x5c, 0xdb, 0x47, 0x9e, 0xce, 0x41, 0xd4, 0x0d, 0x28, 0x59, 0xb8, 0x85, - 0xb7, 0xd9, 0x76, 0x09, 0x6a, 0x33, 0x0c, 0x73, 0x7e, 0x70, 0xcc, 0x45, 0x0e, 0x82, 0xf5, 0x38, - 0x9c, 0xba, 0x09, 0xe5, 0x8e, 0x13, 0xc7, 0x9f, 0x63, 0xf8, 0x6f, 0x0d, 0x8e, 0x7f, 0x5f, 0xc2, - 0x60, 0x3d, 0x09, 0xa9, 0x2e, 0x41, 0xc9, 0xde, 0x34, 0x0d, 0xce, 0x15, 0xd4, 0xde, 0x62, 0x12, - 0x2e, 0xa6, 0x16, 0x8f, 0xa6, 0xc6, 0x28, 0x64, 0x37, 0xcd, 0x05, 0x1e, 0xf5, 0x60, 0xcb, 0x9f, - 0x41, 0xfd, 0x97, 0x0a, 0x8c, 0x70, 0x5f, 0xab, 0xf3, 0x30, 0xbc, 0x87, 0x5a, 0x1d, 0x2c, 0xf6, - 0xc1, 0x0b, 0x3d, 0x22, 0x61, 0x9d, 0xd2, 0xea, 0x9c, 0x45, 0x7d, 0x07, 0x46, 0x91, 0x65, 0xf9, - 0x38, 0x08, 0x44, 0x78, 0x5e, 0xea, 0x15, 0x47, 0x9c, 0x5a, 0x97, 0x6c, 0xf5, 0x3f, 0x2a, 0x30, - 0x44, 0x97, 0xe8, 0x58, 0x6a, 0xac, 0xc0, 0x38, 0x41, 0xfe, 0x36, 0x26, 0x06, 0x0a, 0x02, 0x4c, - 0xfa, 0xd5, 0x85, 0xd2, 0xae, 0x58, 0x7a, 0x89, 0xf3, 0xb2, 0xa1, 0xdc, 0x6c, 0xc5, 0x81, 0x36, - 0x5b, 0xfd, 0x73, 0x05, 0xc6, 0x64, 0x50, 0xa8, 0x6f, 0xc3, 0x08, 0x6a, 0xd3, 0xbd, 0x21, 0x4c, - 0xb9, 0xd8, 0x4b, 0x0f, 0x46, 0xac, 0x0b, 0x26, 0xf5, 0x06, 0x9c, 0xf6, 0x11, 0xc1, 0xfc, 0x78, - 0x28, 0x66, 0x5a, 0xc2, 0xcf, 0xb4, 0x10, 0x40, 0x47, 0x04, 0xb3, 0xf3, 0x60, 0xcc, 0x17, 0xbf, - 0xea, 0xbf, 0x52, 0x00, 0xa2, 0x28, 0x3a, 0x96, 0x73, 0x13, 0xfa, 0x14, 0x8e, 0xa6, 0x4f, 0xf3, - 0x2c, 0x9c, 0x31, 0xd2, 0xa9, 0x47, 0xc3, 0x50, 0xcf, 0xda, 0x03, 0x22, 0x39, 0xdf, 0x84, 0xa1, - 0xe3, 0x9e, 0xc1, 0x0c, 0x40, 0xfb, 0x8d, 0x02, 0xe7, 0x45, 0xdc, 0x35, 0x0f, 0x57, 0x1c, 0x0b, - 0x1f, 0xc8, 0xf4, 0xbb, 0x0a, 0x65, 0x11, 0x87, 0x86, 0x4d, 0xe7, 0x85, 0xac, 0x97, 0xfa, 0x0b, - 0x62, 0x0e, 0x35, 0x8e, 0x62, 0x23, 0x7a, 0x36, 0x59, 0x76, 0xe0, 0xb5, 0xd0, 0xa1, 0x61, 0xba, - 0xce, 0x96, 0xed, 0xb7, 0xe5, 0xd9, 0x24, 0xa6, 0x6f, 0xf0, 0x59, 0xed, 0x43, 0x98, 0x4c, 0xeb, - 0x24, 0xec, 0x8e, 0xed, 0x29, 0xe5, 0x48, 0x7b, 0x4a, 0xfb, 0x00, 0xce, 0x33, 0xc8, 0xe6, 0xa1, - 0x7c, 0x24, 0xec, 0x3d, 0x3e, 0xf4, 0x27, 0x0a, 0x4c, 0xa6, 0xb1, 0x85, 0xde, 0xf7, 0x8f, 0xef, - 0xcc, 0xe5, 0x53, 0x49, 0x77, 0x3e, 0x50, 0x94, 0xe6, 0x04, 0x54, 0x8c, 0x04, 0xae, 0xf6, 0x5b, - 0x05, 0xa6, 0xde, 0xf5, 0x76, 0x70, 0x1b, 0xfb, 0xa8, 0x95, 0xb2, 0xf0, 0x09, 0xae, 0xe8, 0x06, - 0xd4, 0xba, 0xb5, 0x3a, 0xb1, 0x35, 0xfd, 0x52, 0x81, 0x6a, 0x13, 0xb5, 0x90, 0x63, 0xe2, 0xd0, - 0x58, 0x1d, 0xe4, 0x29, 0x6c, 0x6c, 0xd9, 0x2d, 0x82, 0xfd, 0xa3, 0x58, 0x5b, 0x16, 0x10, 0x4b, - 0x0c, 0x41, 0xbd, 0x03, 0x55, 0x96, 0x43, 0x0d, 0xdb, 0x92, 0xa0, 0x83, 0x65, 0xd3, 0x32, 0xe2, - 0x3f, 0x38, 0x1e, 0xad, 0x0f, 0x27, 0x22, 0xbd, 0x85, 0x3b, 0xde, 0x85, 0x51, 0x21, 0xf5, 0x28, - 0x1a, 0x4b, 0x5e, 0xf5, 0xfb, 0x30, 0xba, 0xc9, 0xa1, 0x85, 0x8e, 0xfd, 0xe5, 0x35, 0xc9, 0xa4, - 0x5d, 0x84, 0xf2, 0xba, 0x8d, 0xf7, 0x69, 0xbd, 0x7c, 0xcf, 0xdd, 0xc5, 0x8e, 0x7a, 0x0e, 0x86, - 0x6d, 0x9a, 0x83, 0x98, 0x56, 0xe3, 0x3a, 0x1f, 0x68, 0x3a, 0x54, 0x25, 0x99, 0xf4, 0xfc, 0x0f, - 0xa0, 0xb8, 0xb5, 0xb7, 0x2b, 0x94, 0xef, 0x55, 0x3b, 0x2d, 0x75, 0x5a, 0x2d, 0x0a, 0x60, 0x3b, - 0xdb, 0xb7, 0xf0, 0xa1, 0x4e, 0x39, 0xb5, 0xbb, 0x30, 0x11, 0x61, 0x0a, 0xaf, 0xbc, 0x09, 0xc3, - 0x84, 0xaa, 0xd1, 0x7d, 0x6c, 0x24, 0xeb, 0x86, 0x84, 0xce, 0x3a, 0xe7, 0xd1, 0x7e, 0xa1, 0x40, - 0x79, 0x8d, 0x20, 0xd2, 0x09, 0xa3, 0xe3, 0xb1, 0x16, 0x7b, 0xd9, 0x09, 0x5d, 0x87, 0x8a, 0xd4, - 0x41, 0xd8, 0xf4, 0x2c, 0x94, 0x82, 0x43, 0xc7, 0x4c, 0x96, 0xb7, 0x40, 0xa7, 0x44, 0x71, 0xfb, - 0x2c, 0x94, 0x4c, 0x44, 0xcc, 0x1d, 0xdb, 0xd9, 0x36, 0x3a, 0x9e, 0xd8, 0x5a, 0x20, 0xa7, 0xee, - 0x7b, 0xda, 0x03, 0x05, 0xce, 0x72, 0xd0, 0x35, 0xe2, 0x63, 0xd4, 0x7e, 0x82, 0xe6, 0xf9, 0x70, - 0x2e, 0xa9, 0x89, 0x30, 0xf2, 0x7b, 0x70, 0xa1, 0x85, 0x08, 0x0e, 0x88, 0xb1, 0xeb, 0xb8, 0xfb, - 0x8e, 0xb1, 0xd9, 0x72, 0xcd, 0xdd, 0xa4, 0xc9, 0x93, 0x9c, 0xe0, 0x16, 0x7d, 0xde, 0xa4, 0x8f, - 0x23, 0xf3, 0xe3, 0xfe, 0x29, 0xa4, 0xfd, 0xa3, 0x7d, 0x56, 0x84, 0xf1, 0x3b, 0x2e, 0x89, 0x36, - 0xfd, 0xf3, 0x50, 0xb6, 0x1d, 0xb3, 0xd5, 0xb1, 0xb0, 0x11, 0x78, 0xd8, 0x21, 0xc2, 0x65, 0xe3, - 0x62, 0x72, 0x8d, 0xce, 0xa9, 0x0b, 0x30, 0x26, 0x77, 0x71, 0x4e, 0x09, 0x91, 0xb7, 0x7d, 0x47, - 0xc5, 0xf6, 0xed, 0xce, 0xa4, 0x43, 0xc7, 0xcd, 0xa4, 0xb7, 0xa1, 0xca, 0x4b, 0x1c, 0x83, 0xb8, - 0x4c, 0x77, 0xab, 0x36, 0x32, 0x48, 0x81, 0x54, 0xe6, 0xdc, 0xf7, 0x5c, 0x6a, 0xa3, 0xf5, 0x24, - 0x02, 0xe0, 0x41, 0x01, 0xce, 0xb3, 0xc5, 0x58, 0x72, 0xfd, 0x75, 0x97, 0xd8, 0xce, 0xb6, 0x5c, - 0x95, 0x2b, 0x70, 0x66, 0xcf, 0x25, 0x68, 0xb3, 0x85, 0x0d, 0x44, 0x92, 0x4b, 0x5f, 0x15, 0x0f, - 0x16, 0x88, 0x58, 0xf3, 0x2e, 0xcf, 0x16, 0x8f, 0xeb, 0xd9, 0x27, 0xe0, 0x8a, 0xaf, 0x0a, 0x50, - 0x79, 0xdf, 0x26, 0x4e, 0xec, 0xec, 0xfd, 0x00, 0x26, 0x1c, 0x97, 0x60, 0xc3, 0x74, 0xdb, 0x6d, - 0x9b, 0xb4, 0xb1, 0x43, 0xe8, 0xad, 0x80, 0x5e, 0x50, 0x1a, 0x3d, 0xb4, 0xa0, 0xbb, 0x0a, 0xdf, - 0x08, 0xd9, 0xf4, 0x2a, 0xc5, 0x89, 0xc6, 0x41, 0x66, 0x6f, 0xa6, 0x78, 0x82, 0xbd, 0x99, 0x27, - 0xe0, 0x40, 0x0c, 0xd5, 0xd0, 0x7f, 0x22, 0x8f, 0xe8, 0x30, 0xbe, 0xcf, 0xa7, 0x78, 0xb1, 0x3d, - 0x40, 0xb3, 0x44, 0x40, 0xb1, 0xaa, 0xbb, 0xb4, 0x1f, 0x0d, 0xb4, 0xbf, 0x29, 0x30, 0x29, 0x1e, - 0xfe, 0x7f, 0x36, 0xbc, 0x5a, 0x30, 0xd5, 0x65, 0xdf, 0xe3, 0x6b, 0x77, 0xfd, 0xa1, 0x08, 0x65, - 0x96, 0x2a, 0xc3, 0xa8, 0xaf, 0xc3, 0x18, 0xaf, 0x93, 0x30, 0xef, 0x24, 0x8d, 0xe9, 0xe1, 0x58, - 0xfd, 0x29, 0x4c, 0xc7, 0x72, 0xb5, 0x69, 0x6f, 0xd9, 0xa6, 0x61, 0x61, 0xc7, 0x6d, 0xdb, 0x8e, - 0x68, 0x11, 0xf0, 0xfd, 0xd1, 0xab, 0x6e, 0x59, 0xa4, 0x3c, 0xfa, 0xd3, 0x51, 0x8a, 0x67, 0x50, - 0x8b, 0x71, 0x24, 0x75, 0x1e, 0x2e, 0x48, 0x59, 0x51, 0xc3, 0xc0, 0x60, 0xc5, 0x41, 0xc0, 0xf6, - 0xca, 0x98, 0x3e, 0x25, 0x08, 0x16, 0xc3, 0xe7, 0xac, 0x84, 0x08, 0xd4, 0x37, 0xa0, 0x26, 0x79, - 0x3b, 0xce, 0xa6, 0xeb, 0x58, 0xf4, 0x34, 0x16, 0xac, 0x43, 0x8c, 0x75, 0x52, 0x3c, 0xbf, 0x2f, - 0x1f, 0x0b, 0xce, 0x4b, 0x50, 0x95, 0x9c, 0x2d, 0xcf, 0x70, 0xb6, 0x48, 0x50, 0x1b, 0x66, 0x0c, - 0xf2, 0x90, 0x7a, 0xcf, 0xbb, 0xb3, 0x45, 0x02, 0x75, 0x0e, 0xce, 0x4b, 0x3a, 0xcf, 0x77, 0x3d, - 0x37, 0x40, 0x2d, 0x4e, 0x3d, 0xc2, 0xa8, 0xcf, 0x8a, 0x87, 0xab, 0xe2, 0x19, 0xe3, 0x59, 0x80, - 0x67, 0x24, 0xcf, 0x1e, 0x4b, 0xb6, 0x86, 0x8f, 0x4d, 0x6c, 0x7b, 0x44, 0xaa, 0x36, 0xca, 0x78, - 0xeb, 0x82, 0x48, 0x26, 0x64, 0x46, 0xc2, 0xd5, 0xd3, 0x30, 0x54, 0xe4, 0x6a, 0x89, 0x98, 0x58, - 0x83, 0x0a, 0x5b, 0x01, 0xa3, 0x8d, 0x09, 0x8a, 0x05, 0xe4, 0xcb, 0xfd, 0x2c, 0xc1, 0x6d, 0xc1, - 0xa3, 0x97, 0xad, 0xf8, 0x50, 0xab, 0xc1, 0xe4, 0x8d, 0x1d, 0x64, 0x3b, 0xab, 0xc8, 0x47, 0x6d, - 0x4c, 0xb0, 0x2f, 0xa3, 0x43, 0xdb, 0x81, 0xa9, 0xae, 0x27, 0x42, 0x93, 0xdb, 0x00, 0x5e, 0x38, - 0x9b, 0x57, 0x4a, 0xb2, 0xa6, 0x7c, 0xa8, 0x44, 0x1a, 0x2a, 0x06, 0xa0, 0x4d, 0xc2, 0xb9, 0xa5, - 0xdb, 0x8b, 0xdd, 0x1a, 0x58, 0x70, 0x3e, 0x35, 0x2f, 0xe4, 0xdf, 0xca, 0x90, 0xff, 0xd2, 0xa3, - 0xe5, 0x2f, 0xb5, 0xad, 0x1c, 0xe9, 0x9f, 0x17, 0x60, 0x8a, 0x9e, 0x8c, 0xcd, 0xc3, 0x58, 0x1a, - 0x17, 0x3b, 0xe4, 0x7d, 0xa8, 0xa6, 0xce, 0x05, 0xe1, 0xf3, 0x41, 0x8f, 0x85, 0x4a, 0xf2, 0x58, - 0xc8, 0x6a, 0x04, 0x17, 0xb3, 0x1a, 0xc1, 0x4f, 0x22, 0xbd, 0x3b, 0x50, 0xeb, 0xf6, 0x47, 0x98, - 0xe7, 0x2b, 0xac, 0xfc, 0x61, 0xe5, 0x02, 0xb5, 0xa9, 0xdb, 0xfb, 0xc9, 0x8a, 0x7f, 0x4d, 0x52, - 0x53, 0x48, 0x1d, 0x9b, 0xae, 0x6f, 0xe9, 0xe5, 0x20, 0x3e, 0xc9, 0x16, 0x60, 0x6d, 0x1f, 0x79, - 0x39, 0x0b, 0x10, 0xec, 0x23, 0xef, 0x04, 0x16, 0x80, 0xc2, 0xfc, 0x8f, 0x2c, 0x80, 0x0e, 0xb5, - 0x6e, 0x7f, 0x84, 0x7d, 0xff, 0x21, 0x6a, 0x89, 0x70, 0xbb, 0x96, 0xeb, 0xf6, 0x7d, 0xe4, 0x09, - 0x6f, 0x33, 0x7a, 0xed, 0x5f, 0x0a, 0x4c, 0xde, 0xe9, 0xb4, 0x5a, 0xf6, 0x96, 0x8d, 0xfd, 0xe4, - 0x6d, 0x6b, 0x09, 0x4e, 0x3b, 0xf2, 0x89, 0xf0, 0xee, 0x4c, 0x0f, 0xd3, 0x42, 0x24, 0x3d, 0x62, - 0xfd, 0xaf, 0x76, 0xe9, 0x2c, 0x4c, 0x75, 0x59, 0x2f, 0x3c, 0x7a, 0x0e, 0x86, 0xf9, 0x6d, 0x84, - 0x1f, 0x81, 0x7c, 0xa0, 0xad, 0xc3, 0xd3, 0xb1, 0x93, 0x74, 0xc5, 0xd9, 0x72, 0x9b, 0x87, 0xcb, - 0x28, 0x08, 0xaf, 0xd1, 0xfc, 0xfd, 0x4b, 0x61, 0xd0, 0xf7, 0x2f, 0xda, 0xa7, 0x0a, 0x4c, 0xa6, - 0x80, 0x25, 0xe4, 0x25, 0x18, 0x0f, 0x08, 0xf2, 0x93, 0x35, 0xf8, 0xf2, 0x29, 0xbd, 0xc4, 0x66, - 0x79, 0x05, 0xfe, 0x40, 0x51, 0x54, 0x0d, 0x00, 0x3b, 0x56, 0xe2, 0xde, 0xb5, 0xac, 0xe8, 0xa7, - 0xb1, 0x63, 0x85, 0x34, 0xcd, 0x2a, 0x94, 0x8d, 0x38, 0x58, 0xb3, 0x0c, 0x25, 0x23, 0xe2, 0xd2, - 0xfe, 0x59, 0x80, 0x6a, 0x4a, 0x0d, 0xf5, 0x29, 0x18, 0x49, 0x49, 0x16, 0x63, 0x2a, 0xf4, 0x88, - 0xf6, 0xa6, 0x0b, 0x99, 0xe2, 0x09, 0xbc, 0x44, 0xdb, 0x80, 0x92, 0x87, 0x7d, 0x5a, 0x95, 0x10, - 0x7b, 0x0f, 0x8b, 0xcb, 0xdd, 0xfc, 0xa0, 0x75, 0x5f, 0x84, 0xa0, 0xc7, 0xe1, 0xd4, 0x9b, 0x30, - 0x44, 0xb7, 0x12, 0xab, 0x05, 0x06, 0x2f, 0x27, 0xd7, 0x6d, 0xbc, 0xaf, 0x33, 0x80, 0xe6, 0x69, - 0x18, 0x95, 0xde, 0xfe, 0x31, 0x4c, 0x75, 0xad, 0x79, 0xd4, 0x5e, 0x23, 0x07, 0x86, 0xed, 0x6c, - 0xb9, 0x62, 0x4b, 0x5f, 0xee, 0xe3, 0x9d, 0x0b, 0x43, 0x18, 0x21, 0x07, 0xf4, 0xaf, 0x86, 0xe0, - 0x99, 0x9c, 0x48, 0x3d, 0x31, 0x11, 0x1f, 0x41, 0x59, 0x5c, 0xe4, 0x05, 0xe4, 0x7b, 0x50, 0x62, - 0xe7, 0xa2, 0xcf, 0x52, 0xcc, 0x51, 0xce, 0x00, 0x70, 0xc2, 0xdf, 0xda, 0x97, 0x34, 0x37, 0xa5, - 0xee, 0xa6, 0x8f, 0x43, 0x90, 0x7a, 0x1b, 0xc6, 0x6d, 0x0b, 0x3b, 0xc4, 0x26, 0x87, 0xc6, 0x2e, - 0x3e, 0x14, 0xe1, 0x7c, 0xa5, 0x47, 0xd2, 0x59, 0x11, 0x2c, 0xb7, 0xf0, 0xa1, 0x5e, 0xb2, 0xa3, - 0x81, 0xf6, 0xef, 0x22, 0x9c, 0xcd, 0x10, 0x99, 0x55, 0x35, 0x28, 0x27, 0x52, 0x35, 0x7c, 0x17, - 0x86, 0xd8, 0x99, 0xcb, 0xf5, 0x7e, 0xbe, 0x57, 0x92, 0xa6, 0x1a, 0x31, 0x86, 0xc7, 0x70, 0x6f, - 0x4f, 0x1c, 0x1a, 0x43, 0x47, 0x3f, 0x34, 0x2e, 0x42, 0x85, 0x6f, 0x12, 0xc3, 0xf4, 0x31, 0x22, - 0xd8, 0x62, 0x1b, 0x6f, 0x48, 0x2f, 0xf3, 0xd9, 0x1b, 0x7c, 0x92, 0xe6, 0x46, 0x41, 0xc6, 0x73, - 0xf5, 0x88, 0xcc, 0x8d, 0x7c, 0x96, 0xb5, 0x8e, 0x68, 0x9a, 0xaa, 0xc3, 0x98, 0xe7, 0x06, 0x36, - 0xcb, 0x35, 0xa3, 0x0c, 0x28, 0x1c, 0xab, 0xef, 0xc0, 0x48, 0xe0, 0x76, 0x7c, 0x13, 0xd7, 0xc6, - 0xb2, 0xf5, 0x4d, 0x56, 0x8c, 0xd4, 0x7d, 0x6b, 0x8c, 0x5e, 0x17, 0x7c, 0x2c, 0xab, 0xc6, 0xd5, - 0xd0, 0xfe, 0x5a, 0x04, 0x88, 0x8e, 0xda, 0xac, 0x6a, 0x45, 0x39, 0x91, 0x6a, 0xe5, 0x6d, 0x71, - 0xea, 0xf3, 0x85, 0x7f, 0x31, 0x85, 0x66, 0xe1, 0x83, 0xe4, 0xc9, 0xbf, 0xda, 0x42, 0xb6, 0x43, - 0xf0, 0x01, 0xe1, 0x87, 0x7f, 0xc2, 0x2b, 0xc5, 0x94, 0x57, 0x4e, 0x6a, 0x21, 0x57, 0xa1, 0xc4, - 0xdf, 0x7c, 0xf3, 0xbb, 0xf2, 0x70, 0x66, 0xa2, 0x4f, 0x68, 0xda, 0x44, 0xc4, 0xdc, 0xa1, 0xea, - 0xf2, 0xb7, 0xb9, 0xec, 0x96, 0x0c, 0x6e, 0xf8, 0x5b, 0xbd, 0x12, 0x85, 0x46, 0x0b, 0xd9, 0x6d, - 0x6c, 0x85, 0xab, 0x2e, 0x83, 0x83, 0x4f, 0xd3, 0x75, 0x8f, 0xd6, 0x76, 0xf4, 0x88, 0x6b, 0x7b, - 0x06, 0xaa, 0x46, 0x52, 0x9c, 0xf6, 0x77, 0x05, 0xa6, 0xee, 0xee, 0x3b, 0xd8, 0x5a, 0x15, 0xce, - 0x5a, 0xb1, 0xc2, 0xa2, 0xe9, 0x3e, 0x54, 0xa4, 0x0b, 0xe9, 0x41, 0x1b, 0x16, 0xc2, 0x8f, 0x5c, - 0x1b, 0x89, 0xc3, 0x96, 0x9b, 0xda, 0xe1, 0xc5, 0x27, 0xa8, 0x1d, 0x77, 0x61, 0x9c, 0xf8, 0x88, - 0x5d, 0x62, 0x3d, 0x64, 0xcb, 0x72, 0xec, 0xf2, 0xa3, 0x40, 0xef, 0x71, 0xfa, 0x55, 0x64, 0xfb, - 0xcb, 0x0a, 0x3b, 0x29, 0xe5, 0x90, 0x16, 0x02, 0xd4, 0xac, 0xa4, 0xa2, 0x2c, 0x8a, 0xe3, 0x42, - 0x34, 0x0c, 0xb5, 0x6e, 0x33, 0x45, 0x02, 0x5e, 0x81, 0xf1, 0x90, 0xdd, 0xb6, 0xe8, 0x65, 0xab, - 0x98, 0x51, 0x01, 0x64, 0x5a, 0xb9, 0x62, 0xe9, 0x25, 0x2f, 0x82, 0x9c, 0xfb, 0xea, 0x2c, 0x9c, - 0xa5, 0xe7, 0xe3, 0xaa, 0xef, 0x12, 0xd7, 0x74, 0x5b, 0x6b, 0xd8, 0xdf, 0xb3, 0x4d, 0xac, 0xbe, - 0x0f, 0x23, 0xbc, 0x24, 0x53, 0x73, 0xdf, 0x1b, 0x24, 0x0a, 0xd6, 0xfa, 0xa5, 0x5e, 0x64, 0x42, - 0xf7, 0x5d, 0x18, 0x8f, 0x37, 0xbd, 0xd5, 0x97, 0x1e, 0xcd, 0x97, 0x68, 0xd2, 0xd7, 0x5f, 0xee, - 0x8f, 0x98, 0x8b, 0xba, 0xaa, 0xa8, 0xeb, 0x30, 0xcc, 0xce, 0x30, 0xf5, 0x85, 0x3c, 0xc6, 0x78, - 0x2f, 0xbc, 0x7e, 0xb1, 0x07, 0x55, 0x88, 0xfb, 0x31, 0x54, 0x92, 0x67, 0xa3, 0xfa, 0xca, 0x23, - 0x59, 0xd3, 0xfd, 0xdd, 0x7a, 0xa3, 0x5f, 0xf2, 0x50, 0xe4, 0x87, 0x30, 0x2a, 0xfa, 0x52, 0x6a, - 0xae, 0xab, 0x93, 0x0d, 0xd4, 0xfa, 0xe5, 0x9e, 0x74, 0x62, 0x4d, 0xfc, 0xb0, 0x77, 0x28, 0x7b, - 0x5e, 0x6a, 0xa3, 0x07, 0x6f, 0xaa, 0xf9, 0x57, 0x9f, 0xed, 0x9b, 0x5e, 0xc8, 0xfc, 0x00, 0x46, - 0x78, 0x2b, 0x25, 0x3f, 0xc0, 0x12, 0x8d, 0xb1, 0xfc, 0x00, 0x4b, 0x76, 0x64, 0xae, 0x2a, 0xd4, - 0x9c, 0x54, 0x67, 0x23, 0xdf, 0x9c, 0xec, 0x3e, 0x4b, 0xbe, 0x39, 0x79, 0xdd, 0x97, 0x16, 0x94, - 0x13, 0x6d, 0x11, 0x35, 0x37, 0x54, 0xb3, 0xba, 0x2a, 0xf5, 0x57, 0xfa, 0xa4, 0x16, 0xd2, 0x5c, - 0xa8, 0x24, 0xdf, 0xf6, 0xe7, 0xc7, 0x5f, 0xe6, 0x97, 0x0a, 0xf9, 0xf1, 0x97, 0xf3, 0x11, 0x81, - 0x0b, 0x95, 0xe4, 0x6b, 0xfa, 0x7c, 0x81, 0x99, 0x9f, 0x0a, 0xe4, 0x0b, 0xcc, 0x79, 0xfb, 0xdf, - 0x81, 0x89, 0xf4, 0xdb, 0x6f, 0x35, 0x77, 0x51, 0x72, 0xde, 0xde, 0xd7, 0xaf, 0xf6, 0xcf, 0x20, - 0xc4, 0x1a, 0x30, 0x26, 0xdf, 0x2e, 0xab, 0xb9, 0xdb, 0x27, 0xf5, 0xde, 0xbc, 0x3e, 0xd3, 0x9b, - 0x30, 0x8c, 0xcd, 0x0e, 0x4c, 0xa4, 0xfb, 0x38, 0xf9, 0x76, 0xe5, 0x74, 0xc0, 0xf2, 0xed, 0xca, - 0x6d, 0x11, 0x75, 0x60, 0x22, 0xdd, 0xbd, 0xc8, 0x17, 0x9b, 0xd3, 0xf7, 0xc9, 0x17, 0x9b, 0xdb, - 0x18, 0xf1, 0xa1, 0x9a, 0xba, 0xe1, 0xe7, 0xef, 0xc4, 0xec, 0x46, 0x48, 0xfe, 0x4e, 0xcc, 0x6b, - 0x1d, 0x7c, 0xaa, 0xc0, 0xf9, 0xcc, 0xbb, 0x97, 0x7a, 0xbd, 0xcf, 0x2b, 0x56, 0xa2, 0xa9, 0x50, - 0x7f, 0x6d, 0x40, 0x2e, 0xa1, 0x06, 0xe9, 0xbe, 0xcb, 0x37, 0xfa, 0xbd, 0xe2, 0xf5, 0x32, 0x3d, - 0xe7, 0xde, 0x7a, 0x55, 0x51, 0x7f, 0x0e, 0x6a, 0xf7, 0x27, 0x50, 0xea, 0xb5, 0x81, 0x3f, 0x19, - 0xac, 0xcf, 0x0d, 0xc2, 0x22, 0x4c, 0xfe, 0x44, 0x81, 0x73, 0x59, 0xdf, 0xc7, 0xaa, 0xaf, 0xe6, - 0x6e, 0x90, 0xfc, 0x2f, 0x7d, 0xeb, 0xd7, 0x07, 0x63, 0x8a, 0x02, 0x3d, 0x5d, 0x36, 0xe5, 0x07, - 0x7a, 0x4e, 0x1d, 0x99, 0x1f, 0xe8, 0xb9, 0x15, 0xd9, 0x01, 0x9c, 0xe9, 0xfa, 0x4c, 0x5a, 0xcd, - 0x85, 0xc9, 0xfb, 0x66, 0xbc, 0x7e, 0x6d, 0x00, 0x0e, 0x2e, 0x79, 0xce, 0x8b, 0xbe, 0x26, 0x91, - 0xb5, 0xdb, 0x47, 0x30, 0x26, 0xa7, 0xf2, 0x93, 0x58, 0xea, 0x13, 0x94, 0xfc, 0x24, 0x96, 0xfe, - 0xae, 0xa4, 0xf9, 0x59, 0xe1, 0x4f, 0x0f, 0xa7, 0x95, 0xaf, 0x1f, 0x4e, 0x2b, 0xdf, 0x3c, 0x9c, - 0x56, 0x7e, 0xfd, 0xed, 0xf4, 0xa9, 0xaf, 0xbf, 0x9d, 0x3e, 0xf5, 0x97, 0x6f, 0xa7, 0x4f, 0x41, - 0xdd, 0x74, 0xdb, 0x39, 0x38, 0xcd, 0xd3, 0x61, 0x99, 0xb9, 0xaa, 0x7c, 0x78, 0x77, 0xdb, 0x26, - 0x3b, 0x9d, 0xcd, 0x86, 0xe9, 0xb6, 0x67, 0x4d, 0x37, 0x68, 0xbb, 0xc1, 0xac, 0x8f, 0x5b, 0xe8, - 0x10, 0xfb, 0xb3, 0x7b, 0x73, 0xe1, 0x4f, 0x76, 0x41, 0x08, 0x66, 0xb3, 0xff, 0x45, 0xe1, 0x4d, - 0x3a, 0x92, 0x83, 0xdf, 0x15, 0x8a, 0xab, 0xeb, 0x3f, 0xfa, 0x7d, 0x61, 0x72, 0x55, 0x0a, 0xa7, - 0xd2, 0x1a, 0xeb, 0xe2, 0xf1, 0x9f, 0xa3, 0x07, 0x1b, 0xf4, 0xc1, 0x86, 0x7c, 0xf0, 0xb0, 0xa0, - 0x65, 0x3f, 0xd8, 0xb8, 0xb9, 0xda, 0x94, 0xef, 0x63, 0xfe, 0x51, 0xa8, 0x49, 0xa2, 0xf9, 0x79, - 0x4a, 0x35, 0x3f, 0x2f, 0xc9, 0x36, 0x47, 0xd8, 0x7f, 0x02, 0xbc, 0xfa, 0x9f, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xa1, 0x4b, 0xc5, 0x96, 0x48, 0x31, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5b, 0xcd, 0x6f, 0x1b, 0xc7, + 0x15, 0xf7, 0x92, 0xfa, 0xf2, 0xa3, 0x48, 0xca, 0x6b, 0x5b, 0xa2, 0x99, 0x44, 0x49, 0x37, 0xb1, + 0xad, 0x38, 0x09, 0x65, 0x2b, 0x4e, 0x9a, 0x2a, 0x49, 0x1b, 0xd1, 0x8a, 0x2c, 0xc1, 0xb1, 0xad, + 0xae, 0x6c, 0xa5, 0x49, 0x95, 0x2e, 0x46, 0xbb, 0x23, 0x69, 0x2b, 0x72, 0x77, 0xb3, 0x3b, 0x14, + 0xc5, 0xf6, 0x94, 0x22, 0x28, 0x8c, 0x00, 0x0d, 0x8a, 0xa2, 0x97, 0x5c, 0x7b, 0x2c, 0x7a, 0xcd, + 0xb5, 0x28, 0xd0, 0x4b, 0xd1, 0x53, 0x8e, 0x05, 0x0a, 0x14, 0x81, 0x83, 0x5e, 0xda, 0x7f, 0xa1, + 0x40, 0x8b, 0xf9, 0x5a, 0xee, 0x2e, 0x77, 0x4d, 0x52, 0x92, 0xe1, 0xb6, 0x27, 0x71, 0x66, 0xde, + 0xfb, 0xbd, 0x8f, 0x99, 0x79, 0xf3, 0xe6, 0xcd, 0x0a, 0xbe, 0xe5, 0x61, 0xa7, 0xd5, 0xdc, 0xf6, + 0xd1, 0xfc, 0x81, 0x8d, 0xdb, 0xf3, 0x07, 0xd7, 0x50, 0xc3, 0xdb, 0x43, 0xd7, 0x58, 0xab, 0xe6, + 0xf9, 0x2e, 0x71, 0xd5, 0x69, 0x49, 0x52, 0x63, 0x9d, 0x92, 0xa4, 0x3a, 0x17, 0xb2, 0x9a, 0xae, + 0x8f, 0xe7, 0xcd, 0x3d, 0x64, 0x3b, 0x5d, 0x00, 0xd6, 0xe4, 0x08, 0xd5, 0x2b, 0x09, 0x4a, 0xbf, + 0xe3, 0x11, 0x37, 0x42, 0xca, 0xda, 0x82, 0xf6, 0x85, 0x38, 0xad, 0x85, 0x0f, 0xbb, 0x84, 0x16, + 0x3e, 0x14, 0x54, 0xd7, 0xe3, 0x54, 0xc4, 0x47, 0x4e, 0x80, 0x4c, 0x62, 0xbb, 0x11, 0x0d, 0x22, + 0x9d, 0xe9, 0xd8, 0xf6, 0xb6, 0xd9, 0xa5, 0xb6, 0xb7, 0x4d, 0x41, 0x95, 0xb0, 0x2b, 0x20, 0x68, + 0x1f, 0x77, 0xe9, 0x58, 0x93, 0x53, 0x6a, 0x5f, 0x2b, 0x50, 0x59, 0x6a, 0x91, 0x3d, 0xd7, 0xb7, + 0x7f, 0x82, 0x97, 0x1c, 0xab, 0xde, 0xb2, 0x1b, 0x96, 0x8e, 0x3f, 0x6e, 0xe1, 0x80, 0xa8, 0x3f, + 0x82, 0xa9, 0x88, 0x06, 0x86, 0xd7, 0x40, 0x4e, 0x45, 0x79, 0x4e, 0x99, 0x2b, 0x2c, 0xbc, 0x5a, + 0x0b, 0x3d, 0x4a, 0x25, 0xd4, 0xa2, 0x8a, 0x4a, 0x39, 0xb5, 0x7b, 0xdd, 0xce, 0xf5, 0x06, 0x72, + 0xf4, 0x32, 0x89, 0x77, 0xa8, 0x16, 0xa8, 0x48, 0xc8, 0x46, 0x4c, 0x82, 0x85, 0x08, 0xaa, 0xe4, + 0x98, 0x84, 0xd7, 0x06, 0x91, 0xb0, 0x14, 0xe5, 0x5e, 0x46, 0x04, 0xe9, 0x67, 0x50, 0xb2, 0x4b, + 0x73, 0xe0, 0x42, 0x8a, 0x85, 0x81, 0xe7, 0x3a, 0x01, 0x56, 0xbf, 0x0f, 0x85, 0x08, 0xb2, 0xb0, + 0x6e, 0x7e, 0x48, 0xeb, 0xf4, 0x28, 0x86, 0xf6, 0x85, 0x02, 0x4f, 0xd5, 0x7d, 0x17, 0x59, 0x26, + 0x0a, 0x48, 0x94, 0x4a, 0x78, 0xf5, 0xe4, 0x45, 0xaa, 0x97, 0xa1, 0x8c, 0xda, 0xc8, 0x26, 0x86, + 0x85, 0x09, 0xe6, 0xb0, 0xd4, 0x8b, 0x13, 0x7a, 0x89, 0x75, 0x2f, 0xcb, 0x5e, 0xed, 0x13, 0x05, + 0x9e, 0x4e, 0xd7, 0x4d, 0xf8, 0xe3, 0x75, 0xc8, 0xd9, 0x96, 0xd0, 0xe9, 0xd2, 0x20, 0x3a, 0xad, + 0x59, 0x7a, 0xce, 0xb6, 0xd4, 0x17, 0x61, 0x2a, 0x94, 0x6d, 0xec, 0x61, 0x7b, 0x77, 0x8f, 0x30, + 0x15, 0x46, 0xf4, 0x72, 0xd8, 0xbf, 0xca, 0xba, 0xb5, 0x2f, 0x00, 0x2e, 0x24, 0x96, 0x86, 0x83, + 0x7d, 0xe9, 0x9d, 0xe7, 0xa1, 0x88, 0x0f, 0x3d, 0xdb, 0xef, 0x48, 0x14, 0x85, 0xa1, 0x4c, 0xf2, + 0x4e, 0x0e, 0xa1, 0x5e, 0x87, 0xfc, 0x0e, 0xc6, 0x62, 0xa5, 0x68, 0x09, 0x35, 0xc5, 0x5e, 0x0c, + 0x35, 0x5c, 0xc1, 0x58, 0xa7, 0xe4, 0xaa, 0x0a, 0x23, 0x4d, 0xdc, 0x74, 0x2b, 0xf9, 0xe7, 0x94, + 0xb9, 0xd3, 0x3a, 0xfb, 0xad, 0x6e, 0xc1, 0x14, 0x32, 0x4d, 0xb7, 0xe5, 0x10, 0x63, 0xd7, 0x77, + 0x5b, 0x9e, 0x61, 0x5b, 0x95, 0x12, 0x83, 0x7d, 0xa5, 0x0f, 0xec, 0x12, 0x67, 0xbb, 0x49, 0xb9, + 0xd6, 0xac, 0xd5, 0x53, 0x7a, 0x09, 0xc5, 0x7a, 0x1e, 0x28, 0x8a, 0xaa, 0xc3, 0xb8, 0xdb, 0x22, + 0x5e, 0x8b, 0x04, 0x95, 0x73, 0xcf, 0xe5, 0xe7, 0x0a, 0x0b, 0x6f, 0xd4, 0xd2, 0x23, 0x51, 0x2d, + 0xd3, 0x21, 0xb5, 0xbb, 0x0c, 0x40, 0x97, 0x40, 0xea, 0x7b, 0x30, 0x1a, 0xb4, 0x91, 0x17, 0x54, + 0x66, 0x19, 0xe2, 0xeb, 0xc3, 0x23, 0x6e, 0xb4, 0x91, 0xa7, 0x73, 0x10, 0x75, 0x0b, 0x0a, 0x16, + 0x6e, 0xe0, 0x5d, 0xb6, 0x5d, 0x82, 0xca, 0x1c, 0xc3, 0x5c, 0x1c, 0x1e, 0x73, 0x99, 0x83, 0x60, + 0x3d, 0x0a, 0xa7, 0x6e, 0x43, 0xb1, 0xe5, 0x44, 0xf1, 0x17, 0x18, 0xfe, 0x5b, 0xc3, 0xe3, 0xdf, + 0x97, 0x30, 0x58, 0x8f, 0x43, 0xaa, 0x2b, 0x50, 0xb0, 0xb7, 0x4d, 0x83, 0x73, 0x05, 0x95, 0xb7, + 0x98, 0x84, 0x8b, 0x89, 0xc9, 0xa3, 0xa1, 0xb1, 0xbb, 0x64, 0xb7, 0xcd, 0x25, 0xbe, 0xea, 0xc1, + 0x96, 0x3f, 0x83, 0xea, 0xcf, 0x15, 0x18, 0xe3, 0xbe, 0x56, 0x17, 0x61, 0xf4, 0x00, 0x35, 0x5a, + 0x58, 0xec, 0x83, 0x17, 0xfa, 0xac, 0x84, 0x4d, 0x4a, 0xab, 0x73, 0x16, 0xf5, 0x1d, 0x18, 0x47, + 0x96, 0xe5, 0xe3, 0x20, 0x10, 0xcb, 0xf3, 0x52, 0xbf, 0x75, 0xc4, 0xa9, 0x75, 0xc9, 0x56, 0xfd, + 0xa3, 0x02, 0x23, 0x74, 0x8a, 0x8e, 0xa5, 0xc6, 0x1a, 0x4c, 0x12, 0xe4, 0xef, 0x62, 0x62, 0xa0, + 0x20, 0xc0, 0x64, 0x50, 0x5d, 0x28, 0xed, 0x9a, 0xa5, 0x17, 0x38, 0x2f, 0x6b, 0xca, 0xcd, 0x96, + 0x1f, 0x6a, 0xb3, 0x55, 0x3f, 0x57, 0x60, 0x42, 0x2e, 0x0a, 0xf5, 0x6d, 0x18, 0x43, 0x4d, 0xba, + 0x37, 0x84, 0x29, 0x17, 0xfb, 0xe9, 0xc1, 0x88, 0x75, 0xc1, 0xa4, 0xde, 0x80, 0xd3, 0x3e, 0x22, + 0x98, 0x1f, 0x0f, 0xf9, 0x54, 0x4b, 0xf8, 0x99, 0x16, 0x02, 0xe8, 0x88, 0x60, 0x76, 0x1e, 0x4c, + 0xf8, 0xe2, 0x57, 0xf5, 0x17, 0x0a, 0x40, 0x77, 0x15, 0x1d, 0xcb, 0xb9, 0x31, 0x7d, 0x72, 0x47, + 0xd3, 0xa7, 0x7e, 0x16, 0xce, 0x18, 0xc9, 0xd0, 0xa3, 0x61, 0xa8, 0xa6, 0xed, 0x01, 0x11, 0x9c, + 0x6f, 0xc2, 0xc8, 0x71, 0xcf, 0x60, 0x06, 0xa0, 0xfd, 0x4a, 0x81, 0xf3, 0x62, 0xdd, 0xd5, 0x3b, + 0x6b, 0x8e, 0x85, 0x0f, 0x65, 0xf8, 0x5d, 0x87, 0xa2, 0x58, 0x87, 0x86, 0x4d, 0xfb, 0x85, 0xac, + 0x97, 0x06, 0x5b, 0xc4, 0x1c, 0x6a, 0x12, 0x45, 0x5a, 0xf4, 0x6c, 0xb2, 0xec, 0xc0, 0x6b, 0xa0, + 0x8e, 0x61, 0xba, 0xce, 0x8e, 0xed, 0x37, 0xe5, 0xd9, 0x24, 0xba, 0x6f, 0xf0, 0x5e, 0xed, 0x43, + 0x98, 0x4e, 0xea, 0x24, 0xec, 0x8e, 0xec, 0x29, 0xe5, 0x48, 0x7b, 0x4a, 0xfb, 0x00, 0xce, 0x33, + 0xc8, 0x7a, 0x47, 0x0e, 0x09, 0x7b, 0x8f, 0x0f, 0xfd, 0x89, 0x02, 0xd3, 0x49, 0x6c, 0xa1, 0xf7, + 0xfd, 0xe3, 0x3b, 0x73, 0xf5, 0x54, 0xdc, 0x9d, 0x0f, 0x14, 0xa5, 0x3e, 0x05, 0x25, 0x23, 0x86, + 0xab, 0xfd, 0x5a, 0x81, 0x99, 0x77, 0xbd, 0x3d, 0xdc, 0xc4, 0x3e, 0x6a, 0x24, 0x2c, 0x7c, 0x82, + 0x33, 0xba, 0x05, 0x95, 0x5e, 0xad, 0x4e, 0x6c, 0x4e, 0xbf, 0x54, 0xa0, 0x5c, 0x47, 0x0d, 0xe4, + 0x98, 0x38, 0x34, 0x56, 0x07, 0x79, 0x0a, 0x1b, 0x3b, 0x76, 0x83, 0x60, 0xff, 0x28, 0xd6, 0x16, + 0x05, 0xc4, 0x0a, 0x43, 0x50, 0xef, 0x40, 0x99, 0xc5, 0x50, 0xc3, 0xb6, 0x24, 0xe8, 0x70, 0xd1, + 0xb4, 0x88, 0xf8, 0x0f, 0x8e, 0x47, 0xf3, 0xc3, 0xa9, 0xae, 0xde, 0xc2, 0x1d, 0xef, 0xc2, 0xb8, + 0x90, 0x7a, 0x14, 0x8d, 0x25, 0xaf, 0xfa, 0x5d, 0x18, 0xdf, 0xe6, 0xd0, 0x42, 0xc7, 0xc1, 0xe2, + 0x9a, 0x64, 0xd2, 0x2e, 0x42, 0x71, 0xd3, 0xc6, 0x6d, 0x9a, 0x2f, 0xdf, 0x73, 0xf7, 0xb1, 0xa3, + 0x9e, 0x83, 0x51, 0x9b, 0xc6, 0x20, 0xa6, 0xd5, 0xa4, 0xce, 0x1b, 0x9a, 0x0e, 0x65, 0x49, 0x26, + 0x3d, 0xff, 0x3d, 0xc8, 0xef, 0x1c, 0xec, 0x0b, 0xe5, 0xfb, 0xe5, 0x4e, 0x2b, 0xad, 0x46, 0x83, + 0x02, 0xd8, 0xce, 0xee, 0x2d, 0xdc, 0xd1, 0x29, 0xa7, 0x76, 0x17, 0xa6, 0xba, 0x98, 0xc2, 0x2b, + 0x6f, 0xc2, 0x28, 0xa1, 0x6a, 0xf4, 0x1e, 0x1b, 0xf1, 0xbc, 0x21, 0xa6, 0xb3, 0xce, 0x79, 0xb4, + 0x9f, 0x29, 0x50, 0xdc, 0x20, 0x88, 0xb4, 0xc2, 0xd5, 0xf1, 0x58, 0x93, 0xbd, 0xf4, 0x80, 0xae, + 0x43, 0x49, 0xea, 0x20, 0x6c, 0x7a, 0x16, 0x0a, 0x41, 0xc7, 0x31, 0xe3, 0xe9, 0x2d, 0xd0, 0x2e, + 0x91, 0xdc, 0x3e, 0x0b, 0x05, 0x13, 0x11, 0x73, 0xcf, 0x76, 0x76, 0x8d, 0x96, 0x27, 0xb6, 0x16, + 0xc8, 0xae, 0xfb, 0x9e, 0xf6, 0x40, 0x81, 0xb3, 0x1c, 0x74, 0x83, 0xf8, 0x18, 0x35, 0x9f, 0xa0, + 0x79, 0x3e, 0x9c, 0x8b, 0x6b, 0x22, 0x8c, 0xfc, 0x0e, 0x5c, 0x68, 0x20, 0x82, 0x03, 0x62, 0xec, + 0x3b, 0x6e, 0xdb, 0x31, 0xb6, 0x1b, 0xae, 0xb9, 0x1f, 0x37, 0x79, 0x9a, 0x13, 0xdc, 0xa2, 0xe3, + 0x75, 0x3a, 0xdc, 0x35, 0x3f, 0xea, 0x9f, 0x5c, 0xd2, 0x3f, 0xda, 0x67, 0x79, 0x98, 0xbc, 0xe3, + 0x92, 0xee, 0xa6, 0x7f, 0x1e, 0x8a, 0xb6, 0x63, 0x36, 0x5a, 0x16, 0x36, 0x02, 0x0f, 0x3b, 0x44, + 0xb8, 0x6c, 0x52, 0x74, 0x6e, 0xd0, 0x3e, 0x75, 0x09, 0x26, 0xe4, 0x2e, 0xce, 0x48, 0x21, 0xb2, + 0xb6, 0xef, 0xb8, 0xd8, 0xbe, 0xbd, 0x91, 0x74, 0xe4, 0xb8, 0x91, 0xf4, 0x36, 0x94, 0x79, 0x8a, + 0x63, 0x10, 0x97, 0xe9, 0x6e, 0x55, 0xc6, 0x86, 0x49, 0x90, 0x8a, 0x9c, 0xfb, 0x9e, 0x4b, 0x6d, + 0xb4, 0x9e, 0xc4, 0x02, 0x78, 0x90, 0x83, 0xf3, 0x6c, 0x32, 0x56, 0x5c, 0x7f, 0xd3, 0x25, 0xb6, + 0xb3, 0x2b, 0x67, 0xe5, 0x0a, 0x9c, 0x39, 0x70, 0x09, 0xda, 0x6e, 0x60, 0x03, 0x91, 0xf8, 0xd4, + 0x97, 0xc5, 0xc0, 0x12, 0x11, 0x73, 0xde, 0xe3, 0xd9, 0xfc, 0x71, 0x3d, 0xfb, 0x04, 0x5c, 0xf1, + 0xfb, 0x1c, 0x94, 0xde, 0xb7, 0x89, 0x13, 0x39, 0x7b, 0x3f, 0x80, 0x29, 0xc7, 0x25, 0xd8, 0x30, + 0xdd, 0x66, 0xd3, 0x26, 0x4d, 0xec, 0x10, 0x7a, 0x2b, 0xa0, 0x17, 0x94, 0x5a, 0x1f, 0x2d, 0xe8, + 0xae, 0xc2, 0x37, 0x42, 0x36, 0xbd, 0x4c, 0x71, 0xba, 0xed, 0x20, 0xb5, 0x36, 0x93, 0x3f, 0xc1, + 0xda, 0xcc, 0x13, 0x70, 0x20, 0x86, 0x72, 0xe8, 0x3f, 0x11, 0x47, 0x74, 0x98, 0x6c, 0xf3, 0x2e, + 0x9e, 0x6c, 0x0f, 0x51, 0x2c, 0x11, 0x50, 0x2c, 0xeb, 0x2e, 0xb4, 0xbb, 0x0d, 0xed, 0x6f, 0x0a, + 0x4c, 0x8b, 0xc1, 0xff, 0xcf, 0x82, 0x57, 0x03, 0x66, 0x7a, 0xec, 0x7b, 0x7c, 0xe5, 0xae, 0xdf, + 0xe5, 0xa1, 0xc8, 0x42, 0x65, 0xb8, 0xea, 0xab, 0x30, 0xc1, 0xf3, 0x24, 0xcc, 0x2b, 0x49, 0x13, + 0x7a, 0xd8, 0x56, 0x7f, 0x0c, 0xb3, 0x91, 0x58, 0x6d, 0xda, 0x3b, 0xb6, 0x69, 0x58, 0xd8, 0x71, + 0x9b, 0xb6, 0x23, 0x4a, 0x04, 0x7c, 0x7f, 0xf4, 0xcb, 0x5b, 0x96, 0x29, 0x8f, 0xfe, 0x74, 0x37, + 0xc4, 0x33, 0xa8, 0xe5, 0x28, 0x92, 0xba, 0x08, 0x17, 0xa4, 0xac, 0x6e, 0xc1, 0xc0, 0x60, 0xc9, + 0x41, 0xc0, 0xf6, 0xca, 0x84, 0x3e, 0x23, 0x08, 0x96, 0xc3, 0x71, 0x96, 0x42, 0x04, 0xea, 0x1b, + 0x50, 0x91, 0xbc, 0x2d, 0x67, 0xdb, 0x75, 0x2c, 0x7a, 0x1a, 0x0b, 0xd6, 0x11, 0xc6, 0x3a, 0x2d, + 0xc6, 0xef, 0xcb, 0x61, 0xc1, 0x79, 0x09, 0xca, 0x92, 0xb3, 0xe1, 0x19, 0xce, 0x0e, 0x09, 0x2a, + 0xa3, 0x8c, 0x41, 0x1e, 0x52, 0xef, 0x79, 0x77, 0x76, 0x48, 0xa0, 0x2e, 0xc0, 0x79, 0x49, 0xe7, + 0xf9, 0xae, 0xe7, 0x06, 0xa8, 0xc1, 0xa9, 0xc7, 0x18, 0xf5, 0x59, 0x31, 0xb8, 0x2e, 0xc6, 0x18, + 0xcf, 0x12, 0x3c, 0x23, 0x79, 0x0e, 0x58, 0xb0, 0x35, 0x7c, 0x6c, 0x62, 0xdb, 0x23, 0x52, 0xb5, + 0x71, 0xc6, 0x5b, 0x15, 0x44, 0x32, 0x20, 0x33, 0x12, 0xae, 0x9e, 0x86, 0xa1, 0x24, 0x67, 0x4b, + 0xac, 0x89, 0x0d, 0x28, 0xb1, 0x19, 0x30, 0x9a, 0x98, 0xa0, 0xc8, 0x82, 0x7c, 0x79, 0x90, 0x29, + 0xb8, 0x2d, 0x78, 0xf4, 0xa2, 0x15, 0x6d, 0x6a, 0x15, 0x98, 0xbe, 0xb1, 0x87, 0x6c, 0x67, 0x1d, + 0xf9, 0xa8, 0x89, 0x09, 0xf6, 0xe5, 0xea, 0xd0, 0xf6, 0x60, 0xa6, 0x67, 0x44, 0x68, 0x72, 0x1b, + 0xc0, 0x0b, 0x7b, 0xb3, 0x52, 0x49, 0x56, 0x94, 0x0f, 0x95, 0x48, 0x42, 0x45, 0x00, 0xb4, 0x69, + 0x38, 0xb7, 0x72, 0x7b, 0xb9, 0x57, 0x03, 0x0b, 0xce, 0x27, 0xfa, 0x85, 0xfc, 0x5b, 0x29, 0xf2, + 0x5f, 0x7a, 0xb4, 0xfc, 0x95, 0xa6, 0x95, 0x21, 0xfd, 0xf3, 0x1c, 0xcc, 0xd0, 0x93, 0xb1, 0xde, + 0x89, 0x84, 0x71, 0xb1, 0x43, 0xde, 0x87, 0x72, 0xe2, 0x5c, 0x10, 0x3e, 0x1f, 0xf6, 0x58, 0x28, + 0xc5, 0x8f, 0x85, 0xb4, 0x42, 0x70, 0x3e, 0xad, 0x10, 0xfc, 0x24, 0xc2, 0xbb, 0x03, 0x95, 0x5e, + 0x7f, 0x84, 0x71, 0xbe, 0xc4, 0xd2, 0x1f, 0x96, 0x2e, 0x50, 0x9b, 0x7a, 0xbd, 0x1f, 0xcf, 0xf8, + 0x37, 0x24, 0x35, 0x85, 0xd4, 0xb1, 0xe9, 0xfa, 0x96, 0x5e, 0x0c, 0xa2, 0x9d, 0x6c, 0x02, 0x36, + 0xda, 0xc8, 0xcb, 0x98, 0x80, 0xa0, 0x8d, 0xbc, 0x13, 0x98, 0x00, 0x0a, 0xf3, 0x3f, 0x32, 0x01, + 0x3a, 0x54, 0x7a, 0xfd, 0x11, 0xd6, 0xfd, 0x47, 0xa8, 0x25, 0xc2, 0xed, 0x5a, 0xa6, 0xdb, 0xdb, + 0xc8, 0x13, 0xde, 0x66, 0xf4, 0xda, 0xbf, 0x14, 0x98, 0xbe, 0xd3, 0x6a, 0x34, 0xec, 0x1d, 0x1b, + 0xfb, 0xf1, 0xdb, 0xd6, 0x0a, 0x9c, 0x76, 0xe4, 0x88, 0xf0, 0xee, 0x5c, 0x1f, 0xd3, 0x42, 0x24, + 0xbd, 0xcb, 0xfa, 0x5f, 0xed, 0xd2, 0x79, 0x98, 0xe9, 0xb1, 0x5e, 0x78, 0xf4, 0x1c, 0x8c, 0xf2, + 0xdb, 0x08, 0x3f, 0x02, 0x79, 0x43, 0xdb, 0x84, 0xa7, 0x23, 0x27, 0xe9, 0x9a, 0xb3, 0xe3, 0xd6, + 0x3b, 0xab, 0x28, 0x08, 0xaf, 0xd1, 0xfc, 0xfd, 0x25, 0x37, 0xec, 0xfb, 0x8b, 0xf6, 0xa9, 0x02, + 0xd3, 0x09, 0x60, 0x09, 0x79, 0x09, 0x26, 0x03, 0x82, 0xfc, 0x78, 0x0e, 0xbe, 0x7a, 0x4a, 0x2f, + 0xb0, 0x5e, 0x9e, 0x81, 0x3f, 0x50, 0x14, 0x55, 0x03, 0xc0, 0x8e, 0x15, 0xbb, 0x77, 0xad, 0x2a, + 0xfa, 0x69, 0xec, 0x58, 0x21, 0x4d, 0xbd, 0x0c, 0x45, 0x23, 0x0a, 0x56, 0x2f, 0x42, 0xc1, 0xe8, + 0x72, 0x69, 0xff, 0xcc, 0x41, 0x39, 0xa1, 0x86, 0xfa, 0x14, 0x8c, 0x25, 0x24, 0x8b, 0x36, 0x15, + 0x7a, 0x44, 0x7b, 0x93, 0x89, 0x4c, 0xfe, 0x04, 0x1e, 0xd1, 0xb6, 0xa0, 0xe0, 0x61, 0x9f, 0x66, + 0x25, 0xc4, 0x3e, 0xc0, 0xe2, 0x72, 0xb7, 0x38, 0x6c, 0xde, 0xd7, 0x45, 0xd0, 0xa3, 0x70, 0xea, + 0x4d, 0x18, 0xa1, 0x5b, 0x89, 0xe5, 0x02, 0xc3, 0xa7, 0x93, 0x9b, 0x36, 0x6e, 0xeb, 0x0c, 0xa0, + 0x7e, 0x1a, 0xc6, 0xa5, 0xb7, 0x7f, 0x08, 0x33, 0x3d, 0x73, 0xde, 0x2d, 0xaf, 0x91, 0x43, 0xc3, + 0x76, 0x76, 0x5c, 0xb1, 0xa5, 0x2f, 0x0f, 0xf0, 0xe6, 0xc2, 0x10, 0xc6, 0xc8, 0x21, 0xfd, 0xab, + 0x21, 0x78, 0x26, 0x63, 0xa5, 0x9e, 0x98, 0x88, 0x8f, 0xa0, 0x28, 0x2e, 0xf2, 0x02, 0xf2, 0x3d, + 0x28, 0xb0, 0x73, 0xd1, 0x67, 0x21, 0xe6, 0x28, 0x67, 0x00, 0x38, 0xe1, 0x6f, 0xed, 0x4b, 0x1a, + 0x9b, 0x12, 0x77, 0xd3, 0xc7, 0x21, 0x48, 0xbd, 0x0d, 0x93, 0xb6, 0x85, 0x1d, 0x62, 0x93, 0x8e, + 0xb1, 0x8f, 0x3b, 0x62, 0x39, 0x5f, 0xe9, 0x13, 0x74, 0xd6, 0x04, 0xcb, 0x2d, 0xdc, 0xd1, 0x0b, + 0x76, 0xb7, 0xa1, 0xfd, 0x3b, 0x0f, 0x67, 0x53, 0x44, 0xa6, 0x65, 0x0d, 0xca, 0x89, 0x64, 0x0d, + 0xdf, 0x86, 0x11, 0x76, 0xe6, 0x72, 0xbd, 0x9f, 0xef, 0x17, 0xa4, 0xa9, 0x46, 0x8c, 0xe1, 0x31, + 0xdc, 0xdb, 0x63, 0x87, 0xc6, 0xc8, 0xd1, 0x0f, 0x8d, 0x8b, 0x50, 0xe2, 0x9b, 0xc4, 0x30, 0x7d, + 0x8c, 0x08, 0xb6, 0xd8, 0xc6, 0x1b, 0xd1, 0x8b, 0xbc, 0xf7, 0x06, 0xef, 0xa4, 0xb1, 0x51, 0x90, + 0xf1, 0x58, 0x3d, 0x26, 0x63, 0x23, 0xef, 0x65, 0xa5, 0x23, 0x1a, 0xa6, 0xaa, 0x30, 0xe1, 0xb9, + 0x81, 0xcd, 0x62, 0xcd, 0x38, 0x03, 0x0a, 0xdb, 0xea, 0x3b, 0x30, 0x16, 0xb8, 0x2d, 0xdf, 0xc4, + 0x95, 0x89, 0x74, 0x7d, 0xe3, 0x19, 0x23, 0x75, 0xdf, 0x06, 0xa3, 0xd7, 0x05, 0x1f, 0x8b, 0xaa, + 0x51, 0x35, 0xb4, 0xbf, 0xe6, 0x01, 0xba, 0x47, 0x6d, 0x5a, 0xb6, 0xa2, 0x9c, 0x48, 0xb6, 0xf2, + 0xb6, 0x38, 0xf5, 0xf9, 0xc4, 0xbf, 0x98, 0x40, 0xb3, 0xf0, 0x61, 0xfc, 0xe4, 0x5f, 0x6f, 0x20, + 0xdb, 0x21, 0xf8, 0x90, 0xf0, 0xc3, 0x3f, 0xe6, 0x95, 0x7c, 0xc2, 0x2b, 0x27, 0x35, 0x91, 0xeb, + 0x50, 0xe0, 0x2f, 0xdf, 0xfc, 0xae, 0x3c, 0x9a, 0x1a, 0xe8, 0x63, 0x9a, 0xd6, 0x11, 0x31, 0xf7, + 0xa8, 0xba, 0xfc, 0x35, 0x97, 0xdd, 0x92, 0xc1, 0x0d, 0x7f, 0xab, 0x57, 0xba, 0x4b, 0xa3, 0x81, + 0xec, 0x26, 0xb6, 0xc2, 0x59, 0x97, 0x8b, 0x83, 0x77, 0xd3, 0x79, 0xef, 0xce, 0xed, 0xf8, 0x11, + 0xe7, 0xf6, 0x0c, 0x94, 0x8d, 0xb8, 0x38, 0xed, 0xef, 0x0a, 0xcc, 0xdc, 0x6d, 0x3b, 0xd8, 0x5a, + 0x17, 0xce, 0x5a, 0xb3, 0xc2, 0xa4, 0xe9, 0x3e, 0x94, 0xa4, 0x0b, 0xe9, 0x41, 0x1b, 0x26, 0xc2, + 0x8f, 0x9c, 0x1b, 0x89, 0xc3, 0xa6, 0x9b, 0xda, 0xe1, 0x45, 0x3b, 0xa8, 0x1d, 0x77, 0x61, 0x92, + 0xf8, 0x88, 0x5d, 0x62, 0x3d, 0x64, 0xcb, 0x74, 0xec, 0xf2, 0xa3, 0x40, 0xef, 0x71, 0xfa, 0x75, + 0x64, 0xfb, 0xab, 0x0a, 0x3b, 0x29, 0x65, 0x93, 0x26, 0x02, 0xd4, 0xac, 0xb8, 0xa2, 0x6c, 0x15, + 0x47, 0x85, 0x68, 0x26, 0x54, 0x7a, 0xcd, 0x0c, 0x9f, 0x32, 0x0b, 0x21, 0x7b, 0xe6, 0x07, 0x27, + 0xa9, 0x46, 0xae, 0x59, 0x3a, 0x78, 0xe1, 0xef, 0x85, 0x3f, 0x9c, 0x85, 0xb3, 0xf4, 0x74, 0x5c, + 0xf7, 0x5d, 0xe2, 0x9a, 0x6e, 0x63, 0x03, 0xfb, 0x07, 0xb6, 0x89, 0xd5, 0xf7, 0x61, 0x8c, 0x27, + 0x64, 0x6a, 0xe6, 0xab, 0x41, 0x2c, 0x5d, 0xad, 0x5e, 0xea, 0x47, 0x26, 0x34, 0xdf, 0x87, 0xc9, + 0x68, 0xc9, 0x5b, 0x7d, 0xe9, 0xd1, 0x7c, 0xb1, 0x12, 0x7d, 0xf5, 0xe5, 0xc1, 0x88, 0xb9, 0xa8, + 0xab, 0x8a, 0xba, 0x09, 0xa3, 0xec, 0x04, 0x53, 0x5f, 0xc8, 0x62, 0x8c, 0x56, 0xc2, 0xab, 0x17, + 0xfb, 0x50, 0x85, 0xb8, 0x1f, 0x43, 0x29, 0x7e, 0x32, 0xaa, 0xaf, 0x3c, 0x92, 0x35, 0x59, 0xdd, + 0xad, 0xd6, 0x06, 0x25, 0x0f, 0x45, 0x7e, 0x08, 0xe3, 0xa2, 0x2a, 0xa5, 0x66, 0xba, 0x3a, 0x5e, + 0x3e, 0xad, 0x5e, 0xee, 0x4b, 0x27, 0xe6, 0xc4, 0x0f, 0x2b, 0x87, 0xb2, 0xe2, 0xa5, 0xd6, 0xfa, + 0xf0, 0x26, 0x4a, 0x7f, 0xd5, 0xf9, 0x81, 0xe9, 0x85, 0xcc, 0x0f, 0x60, 0x8c, 0x17, 0x52, 0xb2, + 0x17, 0x58, 0xac, 0x2c, 0x96, 0xbd, 0xc0, 0xe2, 0xf5, 0x98, 0xab, 0x0a, 0x35, 0x27, 0x51, 0xd7, + 0xc8, 0x36, 0x27, 0xbd, 0xca, 0x92, 0x6d, 0x4e, 0x56, 0xed, 0xa5, 0x01, 0xc5, 0x58, 0x51, 0x44, + 0xcd, 0x5c, 0xaa, 0x69, 0x35, 0x95, 0xea, 0x2b, 0x03, 0x52, 0x0b, 0x69, 0x2e, 0x94, 0xe2, 0x6f, + 0xfd, 0xd9, 0xeb, 0x2f, 0xf5, 0x3b, 0x85, 0xec, 0xf5, 0x97, 0xf1, 0x09, 0x81, 0x0b, 0xa5, 0xf8, + 0x23, 0x7d, 0xb6, 0xc0, 0xd4, 0x0f, 0x05, 0xb2, 0x05, 0x66, 0xbc, 0xfd, 0xb7, 0x60, 0x2a, 0xf9, + 0xf6, 0xad, 0x66, 0x4e, 0x4a, 0xc6, 0xdb, 0x7d, 0xf5, 0xea, 0xe0, 0x0c, 0x42, 0xac, 0x01, 0x13, + 0xf2, 0x6d, 0x59, 0xcd, 0xdc, 0x3e, 0x89, 0x57, 0xf3, 0xea, 0x5c, 0x7f, 0xc2, 0x70, 0x6d, 0xb6, + 0x60, 0x2a, 0x59, 0xc5, 0xc9, 0xb6, 0x2b, 0xa3, 0xfe, 0x95, 0x6d, 0x57, 0x66, 0x81, 0xa8, 0x05, + 0x53, 0xc9, 0xda, 0x45, 0xb6, 0xd8, 0x8c, 0xaa, 0x4f, 0xb6, 0xd8, 0xcc, 0xb2, 0x88, 0x0f, 0xe5, + 0xc4, 0xfd, 0x3e, 0x7b, 0x27, 0xa6, 0x97, 0x41, 0xb2, 0x77, 0x62, 0x56, 0xe1, 0xe0, 0x53, 0x05, + 0xce, 0xa7, 0xde, 0xbc, 0xd4, 0xeb, 0x03, 0x5e, 0xb0, 0x62, 0x25, 0x85, 0xea, 0x6b, 0x43, 0x72, + 0x09, 0x35, 0x48, 0xef, 0x4d, 0xbe, 0x36, 0xe8, 0x05, 0xaf, 0x9f, 0xe9, 0x19, 0xb7, 0xd6, 0xab, + 0x8a, 0xfa, 0x53, 0x50, 0x7b, 0x3f, 0x80, 0x52, 0xaf, 0x0d, 0xfd, 0xc1, 0x60, 0x75, 0x61, 0x18, + 0x16, 0x61, 0xf2, 0x27, 0x0a, 0x9c, 0x4b, 0xfb, 0x3a, 0x56, 0x7d, 0x35, 0x73, 0x83, 0x64, 0x7f, + 0xe7, 0x5b, 0xbd, 0x3e, 0x1c, 0x93, 0xd0, 0xa1, 0x0d, 0x53, 0xc9, 0xa4, 0x29, 0x7b, 0xa1, 0x67, + 0x64, 0x91, 0xd9, 0x0b, 0x3d, 0x2b, 0x1f, 0xbb, 0xaa, 0xa8, 0x87, 0x70, 0xa6, 0xe7, 0x33, 0x69, + 0x35, 0x13, 0x28, 0xeb, 0x9b, 0xf1, 0xea, 0xb5, 0x21, 0x38, 0xb8, 0xec, 0x05, 0xaf, 0xfb, 0x35, + 0x89, 0xcc, 0xde, 0x3e, 0x82, 0x09, 0xd9, 0x95, 0x1d, 0xc6, 0x12, 0x9f, 0xa0, 0x64, 0x87, 0xb1, + 0xe4, 0x77, 0x25, 0xf5, 0xcf, 0x72, 0x7f, 0x7a, 0x38, 0xab, 0x7c, 0xf5, 0x70, 0x56, 0xf9, 0xfa, + 0xe1, 0xac, 0xf2, 0xcb, 0x6f, 0x66, 0x4f, 0x7d, 0xf5, 0xcd, 0xec, 0xa9, 0xbf, 0x7c, 0x33, 0x7b, + 0x0a, 0xaa, 0xa6, 0xdb, 0xcc, 0xc0, 0xa9, 0x9f, 0x0e, 0x13, 0xcd, 0x75, 0xe5, 0xc3, 0xbb, 0xbb, + 0x36, 0xd9, 0x6b, 0x6d, 0xd7, 0x4c, 0xb7, 0x39, 0x6f, 0xba, 0x41, 0xd3, 0x0d, 0xe6, 0x7d, 0xdc, + 0x40, 0x1d, 0xec, 0xcf, 0x1f, 0x2c, 0x84, 0x3f, 0xd9, 0x05, 0x21, 0x98, 0x4f, 0xff, 0x17, 0x85, + 0x37, 0x69, 0x4b, 0x36, 0x7e, 0x93, 0xcb, 0xaf, 0x6f, 0xfe, 0xe0, 0xb7, 0xb9, 0xe9, 0x75, 0x29, + 0x9c, 0x4a, 0xab, 0x6d, 0x8a, 0xe1, 0x3f, 0x77, 0x07, 0xb6, 0xe8, 0xc0, 0x96, 0x1c, 0x78, 0x98, + 0xd3, 0xd2, 0x07, 0xb6, 0x6e, 0xae, 0xd7, 0xe5, 0x7b, 0xcc, 0x3f, 0x72, 0x15, 0x49, 0xb4, 0xb8, + 0x48, 0xa9, 0x16, 0x17, 0x25, 0xd9, 0xf6, 0x18, 0xfb, 0x4f, 0x80, 0x57, 0xff, 0x13, 0x00, 0x00, + 0xff, 0xff, 0x56, 0x54, 0x09, 0x86, 0x48, 0x31, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3727,7 +3727,7 @@ type ViewProtocolServiceClient interface { // Broadcast a transaction to the network, optionally waiting for full confirmation. BroadcastTransaction(ctx context.Context, in *BroadcastTransactionRequest, opts ...grpc.CallOption) (*BroadcastTransactionResponse, error) // Query for owned position IDs for the given trading pair and in the given position state. - OwnedPositionIds(ctx context.Context, in *OwnedPositionIdsRequest, opts ...grpc.CallOption) (*OwnedPositionIdsResponse, error) + OwnedPositionIds(ctx context.Context, in *OwnedPositionIdsRequest, opts ...grpc.CallOption) (ViewProtocolService_OwnedPositionIdsClient, error) // Authorize a transaction plan and build the transaction. AuthorizeAndBuild(ctx context.Context, in *AuthorizeAndBuildRequest, opts ...grpc.CallOption) (*AuthorizeAndBuildResponse, error) } @@ -4058,13 +4058,36 @@ func (c *viewProtocolServiceClient) BroadcastTransaction(ctx context.Context, in return out, nil } -func (c *viewProtocolServiceClient) OwnedPositionIds(ctx context.Context, in *OwnedPositionIdsRequest, opts ...grpc.CallOption) (*OwnedPositionIdsResponse, error) { - out := new(OwnedPositionIdsResponse) - err := c.cc.Invoke(ctx, "/penumbra.view.v1alpha1.ViewProtocolService/OwnedPositionIds", in, out, opts...) +func (c *viewProtocolServiceClient) OwnedPositionIds(ctx context.Context, in *OwnedPositionIdsRequest, opts ...grpc.CallOption) (ViewProtocolService_OwnedPositionIdsClient, error) { + stream, err := c.cc.NewStream(ctx, &_ViewProtocolService_serviceDesc.Streams[6], "/penumbra.view.v1alpha1.ViewProtocolService/OwnedPositionIds", opts...) if err != nil { return nil, err } - return out, nil + x := &viewProtocolServiceOwnedPositionIdsClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type ViewProtocolService_OwnedPositionIdsClient interface { + Recv() (*OwnedPositionIdsResponse, error) + grpc.ClientStream +} + +type viewProtocolServiceOwnedPositionIdsClient struct { + grpc.ClientStream +} + +func (x *viewProtocolServiceOwnedPositionIdsClient) Recv() (*OwnedPositionIdsResponse, error) { + m := new(OwnedPositionIdsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil } func (c *viewProtocolServiceClient) AuthorizeAndBuild(ctx context.Context, in *AuthorizeAndBuildRequest, opts ...grpc.CallOption) (*AuthorizeAndBuildResponse, error) { @@ -4128,7 +4151,7 @@ type ViewProtocolServiceServer interface { // Broadcast a transaction to the network, optionally waiting for full confirmation. BroadcastTransaction(context.Context, *BroadcastTransactionRequest) (*BroadcastTransactionResponse, error) // Query for owned position IDs for the given trading pair and in the given position state. - OwnedPositionIds(context.Context, *OwnedPositionIdsRequest) (*OwnedPositionIdsResponse, error) + OwnedPositionIds(*OwnedPositionIdsRequest, ViewProtocolService_OwnedPositionIdsServer) error // Authorize a transaction plan and build the transaction. AuthorizeAndBuild(context.Context, *AuthorizeAndBuildRequest) (*AuthorizeAndBuildResponse, error) } @@ -4197,8 +4220,8 @@ func (*UnimplementedViewProtocolServiceServer) TransactionPlanner(ctx context.Co func (*UnimplementedViewProtocolServiceServer) BroadcastTransaction(ctx context.Context, req *BroadcastTransactionRequest) (*BroadcastTransactionResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method BroadcastTransaction not implemented") } -func (*UnimplementedViewProtocolServiceServer) OwnedPositionIds(ctx context.Context, req *OwnedPositionIdsRequest) (*OwnedPositionIdsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method OwnedPositionIds not implemented") +func (*UnimplementedViewProtocolServiceServer) OwnedPositionIds(req *OwnedPositionIdsRequest, srv ViewProtocolService_OwnedPositionIdsServer) error { + return status.Errorf(codes.Unimplemented, "method OwnedPositionIds not implemented") } func (*UnimplementedViewProtocolServiceServer) AuthorizeAndBuild(ctx context.Context, req *AuthorizeAndBuildRequest) (*AuthorizeAndBuildResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AuthorizeAndBuild not implemented") @@ -4586,22 +4609,25 @@ func _ViewProtocolService_BroadcastTransaction_Handler(srv interface{}, ctx cont return interceptor(ctx, in, info, handler) } -func _ViewProtocolService_OwnedPositionIds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(OwnedPositionIdsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ViewProtocolServiceServer).OwnedPositionIds(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/penumbra.view.v1alpha1.ViewProtocolService/OwnedPositionIds", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ViewProtocolServiceServer).OwnedPositionIds(ctx, req.(*OwnedPositionIdsRequest)) +func _ViewProtocolService_OwnedPositionIds_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(OwnedPositionIdsRequest) + if err := stream.RecvMsg(m); err != nil { + return err } - return interceptor(ctx, in, info, handler) + return srv.(ViewProtocolServiceServer).OwnedPositionIds(m, &viewProtocolServiceOwnedPositionIdsServer{stream}) +} + +type ViewProtocolService_OwnedPositionIdsServer interface { + Send(*OwnedPositionIdsResponse) error + grpc.ServerStream +} + +type viewProtocolServiceOwnedPositionIdsServer struct { + grpc.ServerStream +} + +func (x *viewProtocolServiceOwnedPositionIdsServer) Send(m *OwnedPositionIdsResponse) error { + return x.ServerStream.SendMsg(m) } func _ViewProtocolService_AuthorizeAndBuild_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -4682,10 +4708,6 @@ var _ViewProtocolService_serviceDesc = grpc.ServiceDesc{ MethodName: "BroadcastTransaction", Handler: _ViewProtocolService_BroadcastTransaction_Handler, }, - { - MethodName: "OwnedPositionIds", - Handler: _ViewProtocolService_OwnedPositionIds_Handler, - }, { MethodName: "AuthorizeAndBuild", Handler: _ViewProtocolService_AuthorizeAndBuild_Handler, @@ -4722,6 +4744,11 @@ var _ViewProtocolService_serviceDesc = grpc.ServiceDesc{ Handler: _ViewProtocolService_TransactionInfo_Handler, ServerStreams: true, }, + { + StreamName: "OwnedPositionIds", + Handler: _ViewProtocolService_OwnedPositionIds_Handler, + ServerStreams: true, + }, }, Metadata: "penumbra/view/v1alpha1/view.proto", } @@ -7587,19 +7614,17 @@ func (m *OwnedPositionIdsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error _ = i var l int _ = l - if len(m.PositionIds) > 0 { - for iNdEx := len(m.PositionIds) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.PositionIds[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintView(dAtA, i, uint64(size)) + if m.PositionId != nil { + { + size, err := m.PositionId.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i-- - dAtA[i] = 0xa + i -= size + i = encodeVarintView(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa } return len(dAtA) - i, nil } @@ -8716,11 +8741,9 @@ func (m *OwnedPositionIdsResponse) Size() (n int) { } var l int _ = l - if len(m.PositionIds) > 0 { - for _, e := range m.PositionIds { - l = e.Size() - n += 1 + l + sovView(uint64(l)) - } + if m.PositionId != nil { + l = m.PositionId.Size() + n += 1 + l + sovView(uint64(l)) } return n } @@ -15011,7 +15034,7 @@ func (m *OwnedPositionIdsResponse) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PositionIds", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PositionId", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -15038,8 +15061,10 @@ func (m *OwnedPositionIdsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.PositionIds = append(m.PositionIds, &v1alpha15.PositionId{}) - if err := m.PositionIds[len(m.PositionIds)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.PositionId == nil { + m.PositionId = &v1alpha15.PositionId{} + } + if err := m.PositionId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex From 21382210474855199b012ec72a7bb4a13ad7c26b Mon Sep 17 00:00:00 2001 From: mmsqe Date: Wed, 2 Aug 2023 01:06:23 +0800 Subject: [PATCH 16/16] fix: reduce get bech32 prefix when get signer (#1231) * add missing getFeePayer for clienttypes * add missing getFeePayer for feetypes * apply in penumbra * add change doc --------- Co-authored-by: Justin Tieri <37750742+jtieri@users.noreply.github.com> --- CHANGELOG.md | 1 + relayer/chains/cosmos/log.go | 8 ++++++++ relayer/chains/penumbra/log.go | 13 +++++++++++++ 3 files changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d46967e8..93f9f9358 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ * [\#1208](https://github.com/cosmos/relayer/pull/1208) Replace gogo/protobuf to cosmos/gogoproto. * [\#1221](https://github.com/cosmos/relayer/pull/1221) Update cometbft to v0.37.2 and ibc-go to v7.2.0. * [\#1226](https://github.com/cosmos/relayer/pull/1226) Avoid invalid Bech32 prefix error in parallel tests when sdk Config get overwritten by each other in single process. +* [\#1231](https://github.com/cosmos/relayer/pull/1231) Reduce get bech32 prefix when get signer. ## v0.9.3 diff --git a/relayer/chains/cosmos/log.go b/relayer/chains/cosmos/log.go index f6e6564a0..22342e549 100644 --- a/relayer/chains/cosmos/log.go +++ b/relayer/chains/cosmos/log.go @@ -164,11 +164,19 @@ func getFeePayer(tx *typestx.Tx) string { case *clienttypes.MsgUpdateClient: // Same failure mode as MsgCreateClient. return firstMsg.Signer + case *clienttypes.MsgUpgradeClient: + return firstMsg.Signer case *clienttypes.MsgSubmitMisbehaviour: // Same failure mode as MsgCreateClient. return firstMsg.Signer + case *feetypes.MsgRegisterPayee: + return firstMsg.Relayer case *feetypes.MsgRegisterCounterpartyPayee: return firstMsg.Relayer + case *feetypes.MsgPayPacketFee: + return firstMsg.Signer + case *feetypes.MsgPayPacketFeeAsync: + return firstMsg.PacketFee.RefundAddress default: return firstMsg.GetSigners()[0].String() } diff --git a/relayer/chains/penumbra/log.go b/relayer/chains/penumbra/log.go index 3c4661cc5..b1f110cf0 100644 --- a/relayer/chains/penumbra/log.go +++ b/relayer/chains/penumbra/log.go @@ -6,6 +6,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" typestx "github.com/cosmos/cosmos-sdk/types/tx" + feetypes "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/types" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" "github.com/cosmos/relayer/v2/relayer/provider" @@ -151,6 +152,18 @@ func getFeePayer(tx *typestx.Tx) string { case *clienttypes.MsgUpdateClient: // Same failure mode as MsgCreateClient. return firstMsg.Signer + case *clienttypes.MsgUpgradeClient: + return firstMsg.Signer + case *clienttypes.MsgSubmitMisbehaviour: + return firstMsg.Signer + case *feetypes.MsgRegisterPayee: + return firstMsg.Relayer + case *feetypes.MsgRegisterCounterpartyPayee: + return firstMsg.Relayer + case *feetypes.MsgPayPacketFee: + return firstMsg.Signer + case *feetypes.MsgPayPacketFeeAsync: + return firstMsg.PacketFee.RefundAddress default: return firstMsg.GetSigners()[0].String() }