Add VersionService to gRPC server to query server versions.

Fixes #375.
This commit is contained in:
Josh Rickmar 2016-02-24 00:12:57 -05:00
parent f03556b2f9
commit 620a3c649e
5 changed files with 373 additions and 203 deletions

View file

@ -2,6 +2,20 @@ syntax = "proto3";
package walletrpc;
service VersionService {
rpc Version (VersionRequest) returns (VersionResponse);
}
message VersionRequest {}
message VersionResponse {
string version_string = 1;
uint32 major = 2;
uint32 minor = 3;
uint32 patch = 4;
string prerelease = 5;
string build_metadata = 6;
}
service WalletService {
// Queries
rpc Ping (PingRequest) returns (PingResponse);

View file

@ -1,6 +1,6 @@
# RPC API Specification
Version: 0.2.0
Version: 0.3.0
**Note:** This document assumes the reader is familiar with gRPC concepts.
Refer to the [gRPC Concepts documentation](http://www.grpc.io/docs/guides/concepts.html)
@ -20,7 +20,7 @@ perceived usefulness and ease-of-use over alternatives, and user feedback.
This document is the authoritative source on the RPC API's definitions and
semantics. Any divergence from this document is an implementation error. API
fixes and additions require a version increase according to the rules of
[Semantic Versioning 2.0](http://semver.org/).
[Semantic Versioning 2.0.0](http://semver.org/).
Only optional proto3 message fields are used (the `required` keyword is never
used in the `.proto` file). If a message field must be set to something other
@ -35,9 +35,46 @@ server may be running without a loaded wallet, in which case the Wallet service
is not running and the Loader service must be used to create a new or load an
existing wallet.
- [`VersionService`](#versionservice)
- [`LoaderService`](#loaderservice)
- [`WalletService`](#walletservice)
## `VersionService`
The `VersionService` service provides the caller with versioning information
regarding the RPC server. It has no dependencies and is always running.
**Methods:**
- [`Version`](#version)
### Methods
#### `Version`
The `Version` method returns the RPC server version. Versioning follows the
rules of Semantic Versioning (SemVer) 2.0.0.
**Request:** `VersionRequest`
**Response:** `VersionResponse`
- `string version_string`: The version encoded as a string.
- `uint32 major`: The SemVer major version number.
- `uint32 minor`: The SemVer minor version number.
- `uint32 patch`: The SemVer patch version number.
- `string prerelease`: The SemVer pre-release version identifier, if any.
- `string build_metadata`: Extra SemVer build metadata, if any.
**Expected errors:** None
**Stability:** Stable
## `LoaderService`
The `LoaderService` service provides the caller with functions related to the

View file

@ -51,6 +51,14 @@ import (
"github.com/btcsuite/btcwallet/walletdb"
)
// Public API version constants
const (
semverString = "0.3.0"
semverMajor = 0
semverMinor = 3
semverPatch = 0
)
// translateError creates a new gRPC error with an appropiate error code for
// recognized errors.
//
@ -99,6 +107,11 @@ func errorCode(err error) codes.Code {
}
}
// versionServer provides RPC clients with the ability to query the RPC server
// version.
type versionServer struct {
}
// walletServer provides wallet services for RPC clients.
type walletServer struct {
wallet *wallet.Wallet
@ -113,7 +126,22 @@ type loaderServer struct {
mu sync.Mutex
}
// StartWalletService creates a implementation of the WalletService and
// StartVersionService creates an implementation of the VersionService and
// registers it with the gRPC server.
func StartVersionService(server *grpc.Server) {
pb.RegisterVersionServiceServer(server, &versionServer{})
}
func (*versionServer) Version(ctx context.Context, req *pb.VersionRequest) (*pb.VersionResponse, error) {
return &pb.VersionResponse{
VersionString: semverString,
Major: semverMajor,
Minor: semverMinor,
Patch: semverPatch,
}, nil
}
// StartWalletService creates an implementation of the WalletService and
// registers it with the gRPC server.
func StartWalletService(server *grpc.Server, wallet *wallet.Wallet) {
service := &walletServer{wallet}
@ -715,7 +743,7 @@ func (s *walletServer) AccountNotifications(req *pb.AccountNotificationsRequest,
}
}
// StartWalletLoaderService creates a implementation of the WalletLoaderService
// StartWalletLoaderService creates an implementation of the WalletLoaderService
// and registers it with the gRPC server.
func StartWalletLoaderService(server *grpc.Server, loader *wallet.Loader,
activeNet *netparams.Params) {

View file

@ -9,6 +9,8 @@ It is generated from these files:
api.proto
It has these top-level messages:
VersionRequest
VersionResponse
TransactionDetails
BlockDetails
AccountBalance
@ -96,7 +98,7 @@ var NextAddressRequest_Kind_value = map[string]int32{
func (x NextAddressRequest_Kind) String() string {
return proto.EnumName(NextAddressRequest_Kind_name, int32(x))
}
func (NextAddressRequest_Kind) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{15, 0} }
func (NextAddressRequest_Kind) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{17, 0} }
type ChangePassphraseRequest_Key int32
@ -118,9 +120,31 @@ func (x ChangePassphraseRequest_Key) String() string {
return proto.EnumName(ChangePassphraseRequest_Key_name, int32(x))
}
func (ChangePassphraseRequest_Key) EnumDescriptor() ([]byte, []int) {
return fileDescriptor0, []int{23, 0}
return fileDescriptor0, []int{25, 0}
}
type VersionRequest struct {
}
func (m *VersionRequest) Reset() { *m = VersionRequest{} }
func (m *VersionRequest) String() string { return proto.CompactTextString(m) }
func (*VersionRequest) ProtoMessage() {}
func (*VersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
type VersionResponse struct {
VersionString string `protobuf:"bytes,1,opt,name=version_string,json=versionString" json:"version_string,omitempty"`
Major uint32 `protobuf:"varint,2,opt,name=major" json:"major,omitempty"`
Minor uint32 `protobuf:"varint,3,opt,name=minor" json:"minor,omitempty"`
Patch uint32 `protobuf:"varint,4,opt,name=patch" json:"patch,omitempty"`
Prerelease string `protobuf:"bytes,5,opt,name=prerelease" json:"prerelease,omitempty"`
BuildMetadata string `protobuf:"bytes,6,opt,name=build_metadata,json=buildMetadata" json:"build_metadata,omitempty"`
}
func (m *VersionResponse) Reset() { *m = VersionResponse{} }
func (m *VersionResponse) String() string { return proto.CompactTextString(m) }
func (*VersionResponse) ProtoMessage() {}
func (*VersionResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
type TransactionDetails struct {
Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
Transaction []byte `protobuf:"bytes,2,opt,name=transaction,proto3" json:"transaction,omitempty"`
@ -133,7 +157,7 @@ type TransactionDetails struct {
func (m *TransactionDetails) Reset() { *m = TransactionDetails{} }
func (m *TransactionDetails) String() string { return proto.CompactTextString(m) }
func (*TransactionDetails) ProtoMessage() {}
func (*TransactionDetails) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
func (*TransactionDetails) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
func (m *TransactionDetails) GetDebits() []*TransactionDetails_Input {
if m != nil {
@ -158,7 +182,7 @@ type TransactionDetails_Input struct {
func (m *TransactionDetails_Input) Reset() { *m = TransactionDetails_Input{} }
func (m *TransactionDetails_Input) String() string { return proto.CompactTextString(m) }
func (*TransactionDetails_Input) ProtoMessage() {}
func (*TransactionDetails_Input) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} }
func (*TransactionDetails_Input) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} }
type TransactionDetails_Output struct {
Mine bool `protobuf:"varint,3,opt,name=mine" json:"mine,omitempty"`
@ -172,7 +196,7 @@ type TransactionDetails_Output struct {
func (m *TransactionDetails_Output) Reset() { *m = TransactionDetails_Output{} }
func (m *TransactionDetails_Output) String() string { return proto.CompactTextString(m) }
func (*TransactionDetails_Output) ProtoMessage() {}
func (*TransactionDetails_Output) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 1} }
func (*TransactionDetails_Output) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 1} }
type BlockDetails struct {
Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
@ -184,7 +208,7 @@ type BlockDetails struct {
func (m *BlockDetails) Reset() { *m = BlockDetails{} }
func (m *BlockDetails) String() string { return proto.CompactTextString(m) }
func (*BlockDetails) ProtoMessage() {}
func (*BlockDetails) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
func (*BlockDetails) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
func (m *BlockDetails) GetTransactions() []*TransactionDetails {
if m != nil {
@ -201,7 +225,7 @@ type AccountBalance struct {
func (m *AccountBalance) Reset() { *m = AccountBalance{} }
func (m *AccountBalance) String() string { return proto.CompactTextString(m) }
func (*AccountBalance) ProtoMessage() {}
func (*AccountBalance) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
func (*AccountBalance) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
type PingRequest struct {
}
@ -209,7 +233,7 @@ type PingRequest struct {
func (m *PingRequest) Reset() { *m = PingRequest{} }
func (m *PingRequest) String() string { return proto.CompactTextString(m) }
func (*PingRequest) ProtoMessage() {}
func (*PingRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
func (*PingRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
type PingResponse struct {
}
@ -217,7 +241,7 @@ type PingResponse struct {
func (m *PingResponse) Reset() { *m = PingResponse{} }
func (m *PingResponse) String() string { return proto.CompactTextString(m) }
func (*PingResponse) ProtoMessage() {}
func (*PingResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
func (*PingResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
type NetworkRequest struct {
}
@ -225,7 +249,7 @@ type NetworkRequest struct {
func (m *NetworkRequest) Reset() { *m = NetworkRequest{} }
func (m *NetworkRequest) String() string { return proto.CompactTextString(m) }
func (*NetworkRequest) ProtoMessage() {}
func (*NetworkRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
func (*NetworkRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
type NetworkResponse struct {
ActiveNetwork uint32 `protobuf:"varint,1,opt,name=active_network,json=activeNetwork" json:"active_network,omitempty"`
@ -234,7 +258,7 @@ type NetworkResponse struct {
func (m *NetworkResponse) Reset() { *m = NetworkResponse{} }
func (m *NetworkResponse) String() string { return proto.CompactTextString(m) }
func (*NetworkResponse) ProtoMessage() {}
func (*NetworkResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
func (*NetworkResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
type AccountNumberRequest struct {
AccountName string `protobuf:"bytes,1,opt,name=account_name,json=accountName" json:"account_name,omitempty"`
@ -243,7 +267,7 @@ type AccountNumberRequest struct {
func (m *AccountNumberRequest) Reset() { *m = AccountNumberRequest{} }
func (m *AccountNumberRequest) String() string { return proto.CompactTextString(m) }
func (*AccountNumberRequest) ProtoMessage() {}
func (*AccountNumberRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
func (*AccountNumberRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
type AccountNumberResponse struct {
AccountNumber uint32 `protobuf:"varint,1,opt,name=account_number,json=accountNumber" json:"account_number,omitempty"`
@ -252,7 +276,7 @@ type AccountNumberResponse struct {
func (m *AccountNumberResponse) Reset() { *m = AccountNumberResponse{} }
func (m *AccountNumberResponse) String() string { return proto.CompactTextString(m) }
func (*AccountNumberResponse) ProtoMessage() {}
func (*AccountNumberResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
func (*AccountNumberResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
type AccountsRequest struct {
}
@ -260,7 +284,7 @@ type AccountsRequest struct {
func (m *AccountsRequest) Reset() { *m = AccountsRequest{} }
func (m *AccountsRequest) String() string { return proto.CompactTextString(m) }
func (*AccountsRequest) ProtoMessage() {}
func (*AccountsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
func (*AccountsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
type AccountsResponse struct {
Accounts []*AccountsResponse_Account `protobuf:"bytes,1,rep,name=accounts" json:"accounts,omitempty"`
@ -271,7 +295,7 @@ type AccountsResponse struct {
func (m *AccountsResponse) Reset() { *m = AccountsResponse{} }
func (m *AccountsResponse) String() string { return proto.CompactTextString(m) }
func (*AccountsResponse) ProtoMessage() {}
func (*AccountsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
func (*AccountsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
func (m *AccountsResponse) GetAccounts() []*AccountsResponse_Account {
if m != nil {
@ -292,7 +316,7 @@ type AccountsResponse_Account struct {
func (m *AccountsResponse_Account) Reset() { *m = AccountsResponse_Account{} }
func (m *AccountsResponse_Account) String() string { return proto.CompactTextString(m) }
func (*AccountsResponse_Account) ProtoMessage() {}
func (*AccountsResponse_Account) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10, 0} }
func (*AccountsResponse_Account) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12, 0} }
type RenameAccountRequest struct {
AccountNumber uint32 `protobuf:"varint,1,opt,name=account_number,json=accountNumber" json:"account_number,omitempty"`
@ -302,7 +326,7 @@ type RenameAccountRequest struct {
func (m *RenameAccountRequest) Reset() { *m = RenameAccountRequest{} }
func (m *RenameAccountRequest) String() string { return proto.CompactTextString(m) }
func (*RenameAccountRequest) ProtoMessage() {}
func (*RenameAccountRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
func (*RenameAccountRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
type RenameAccountResponse struct {
}
@ -310,7 +334,7 @@ type RenameAccountResponse struct {
func (m *RenameAccountResponse) Reset() { *m = RenameAccountResponse{} }
func (m *RenameAccountResponse) String() string { return proto.CompactTextString(m) }
func (*RenameAccountResponse) ProtoMessage() {}
func (*RenameAccountResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
func (*RenameAccountResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
type NextAccountRequest struct {
Passphrase []byte `protobuf:"bytes,1,opt,name=passphrase,proto3" json:"passphrase,omitempty"`
@ -320,7 +344,7 @@ type NextAccountRequest struct {
func (m *NextAccountRequest) Reset() { *m = NextAccountRequest{} }
func (m *NextAccountRequest) String() string { return proto.CompactTextString(m) }
func (*NextAccountRequest) ProtoMessage() {}
func (*NextAccountRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
func (*NextAccountRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
type NextAccountResponse struct {
AccountNumber uint32 `protobuf:"varint,1,opt,name=account_number,json=accountNumber" json:"account_number,omitempty"`
@ -329,7 +353,7 @@ type NextAccountResponse struct {
func (m *NextAccountResponse) Reset() { *m = NextAccountResponse{} }
func (m *NextAccountResponse) String() string { return proto.CompactTextString(m) }
func (*NextAccountResponse) ProtoMessage() {}
func (*NextAccountResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
func (*NextAccountResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
type NextAddressRequest struct {
Account uint32 `protobuf:"varint,1,opt,name=account" json:"account,omitempty"`
@ -339,7 +363,7 @@ type NextAddressRequest struct {
func (m *NextAddressRequest) Reset() { *m = NextAddressRequest{} }
func (m *NextAddressRequest) String() string { return proto.CompactTextString(m) }
func (*NextAddressRequest) ProtoMessage() {}
func (*NextAddressRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
func (*NextAddressRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
type NextAddressResponse struct {
Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"`
@ -348,7 +372,7 @@ type NextAddressResponse struct {
func (m *NextAddressResponse) Reset() { *m = NextAddressResponse{} }
func (m *NextAddressResponse) String() string { return proto.CompactTextString(m) }
func (*NextAddressResponse) ProtoMessage() {}
func (*NextAddressResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
func (*NextAddressResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
type ImportPrivateKeyRequest struct {
Passphrase []byte `protobuf:"bytes,1,opt,name=passphrase,proto3" json:"passphrase,omitempty"`
@ -360,7 +384,7 @@ type ImportPrivateKeyRequest struct {
func (m *ImportPrivateKeyRequest) Reset() { *m = ImportPrivateKeyRequest{} }
func (m *ImportPrivateKeyRequest) String() string { return proto.CompactTextString(m) }
func (*ImportPrivateKeyRequest) ProtoMessage() {}
func (*ImportPrivateKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
func (*ImportPrivateKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
type ImportPrivateKeyResponse struct {
}
@ -368,7 +392,7 @@ type ImportPrivateKeyResponse struct {
func (m *ImportPrivateKeyResponse) Reset() { *m = ImportPrivateKeyResponse{} }
func (m *ImportPrivateKeyResponse) String() string { return proto.CompactTextString(m) }
func (*ImportPrivateKeyResponse) ProtoMessage() {}
func (*ImportPrivateKeyResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
func (*ImportPrivateKeyResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
type BalanceRequest struct {
AccountNumber uint32 `protobuf:"varint,1,opt,name=account_number,json=accountNumber" json:"account_number,omitempty"`
@ -378,7 +402,7 @@ type BalanceRequest struct {
func (m *BalanceRequest) Reset() { *m = BalanceRequest{} }
func (m *BalanceRequest) String() string { return proto.CompactTextString(m) }
func (*BalanceRequest) ProtoMessage() {}
func (*BalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
func (*BalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
type BalanceResponse struct {
Total int64 `protobuf:"varint,1,opt,name=total" json:"total,omitempty"`
@ -389,7 +413,7 @@ type BalanceResponse struct {
func (m *BalanceResponse) Reset() { *m = BalanceResponse{} }
func (m *BalanceResponse) String() string { return proto.CompactTextString(m) }
func (*BalanceResponse) ProtoMessage() {}
func (*BalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
func (*BalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
type GetTransactionsRequest struct {
// Optionally specify the starting block from which to begin including all transactions.
@ -417,7 +441,7 @@ type GetTransactionsRequest struct {
func (m *GetTransactionsRequest) Reset() { *m = GetTransactionsRequest{} }
func (m *GetTransactionsRequest) String() string { return proto.CompactTextString(m) }
func (*GetTransactionsRequest) ProtoMessage() {}
func (*GetTransactionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
func (*GetTransactionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
type GetTransactionsResponse struct {
MinedTransactions []*BlockDetails `protobuf:"bytes,1,rep,name=mined_transactions,json=minedTransactions" json:"mined_transactions,omitempty"`
@ -427,7 +451,7 @@ type GetTransactionsResponse struct {
func (m *GetTransactionsResponse) Reset() { *m = GetTransactionsResponse{} }
func (m *GetTransactionsResponse) String() string { return proto.CompactTextString(m) }
func (*GetTransactionsResponse) ProtoMessage() {}
func (*GetTransactionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
func (*GetTransactionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
func (m *GetTransactionsResponse) GetMinedTransactions() []*BlockDetails {
if m != nil {
@ -452,7 +476,7 @@ type ChangePassphraseRequest struct {
func (m *ChangePassphraseRequest) Reset() { *m = ChangePassphraseRequest{} }
func (m *ChangePassphraseRequest) String() string { return proto.CompactTextString(m) }
func (*ChangePassphraseRequest) ProtoMessage() {}
func (*ChangePassphraseRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
func (*ChangePassphraseRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
type ChangePassphraseResponse struct {
}
@ -460,7 +484,7 @@ type ChangePassphraseResponse struct {
func (m *ChangePassphraseResponse) Reset() { *m = ChangePassphraseResponse{} }
func (m *ChangePassphraseResponse) String() string { return proto.CompactTextString(m) }
func (*ChangePassphraseResponse) ProtoMessage() {}
func (*ChangePassphraseResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
func (*ChangePassphraseResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
type FundTransactionRequest struct {
Account uint32 `protobuf:"varint,1,opt,name=account" json:"account,omitempty"`
@ -473,7 +497,7 @@ type FundTransactionRequest struct {
func (m *FundTransactionRequest) Reset() { *m = FundTransactionRequest{} }
func (m *FundTransactionRequest) String() string { return proto.CompactTextString(m) }
func (*FundTransactionRequest) ProtoMessage() {}
func (*FundTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
func (*FundTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
type FundTransactionResponse struct {
SelectedOutputs []*FundTransactionResponse_PreviousOutput `protobuf:"bytes,1,rep,name=selected_outputs,json=selectedOutputs" json:"selected_outputs,omitempty"`
@ -484,7 +508,7 @@ type FundTransactionResponse struct {
func (m *FundTransactionResponse) Reset() { *m = FundTransactionResponse{} }
func (m *FundTransactionResponse) String() string { return proto.CompactTextString(m) }
func (*FundTransactionResponse) ProtoMessage() {}
func (*FundTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
func (*FundTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
func (m *FundTransactionResponse) GetSelectedOutputs() []*FundTransactionResponse_PreviousOutput {
if m != nil {
@ -508,7 +532,7 @@ func (m *FundTransactionResponse_PreviousOutput) Reset() {
func (m *FundTransactionResponse_PreviousOutput) String() string { return proto.CompactTextString(m) }
func (*FundTransactionResponse_PreviousOutput) ProtoMessage() {}
func (*FundTransactionResponse_PreviousOutput) Descriptor() ([]byte, []int) {
return fileDescriptor0, []int{26, 0}
return fileDescriptor0, []int{28, 0}
}
type SignTransactionRequest struct {
@ -525,7 +549,7 @@ type SignTransactionRequest struct {
func (m *SignTransactionRequest) Reset() { *m = SignTransactionRequest{} }
func (m *SignTransactionRequest) String() string { return proto.CompactTextString(m) }
func (*SignTransactionRequest) ProtoMessage() {}
func (*SignTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
func (*SignTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
type SignTransactionResponse struct {
Transaction []byte `protobuf:"bytes,1,opt,name=transaction,proto3" json:"transaction,omitempty"`
@ -535,7 +559,7 @@ type SignTransactionResponse struct {
func (m *SignTransactionResponse) Reset() { *m = SignTransactionResponse{} }
func (m *SignTransactionResponse) String() string { return proto.CompactTextString(m) }
func (*SignTransactionResponse) ProtoMessage() {}
func (*SignTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
func (*SignTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
type PublishTransactionRequest struct {
SignedTransaction []byte `protobuf:"bytes,1,opt,name=signed_transaction,json=signedTransaction,proto3" json:"signed_transaction,omitempty"`
@ -544,7 +568,7 @@ type PublishTransactionRequest struct {
func (m *PublishTransactionRequest) Reset() { *m = PublishTransactionRequest{} }
func (m *PublishTransactionRequest) String() string { return proto.CompactTextString(m) }
func (*PublishTransactionRequest) ProtoMessage() {}
func (*PublishTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
func (*PublishTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
type PublishTransactionResponse struct {
}
@ -552,7 +576,7 @@ type PublishTransactionResponse struct {
func (m *PublishTransactionResponse) Reset() { *m = PublishTransactionResponse{} }
func (m *PublishTransactionResponse) String() string { return proto.CompactTextString(m) }
func (*PublishTransactionResponse) ProtoMessage() {}
func (*PublishTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
func (*PublishTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
type TransactionNotificationsRequest struct {
}
@ -561,7 +585,7 @@ func (m *TransactionNotificationsRequest) Reset() { *m = TransactionNoti
func (m *TransactionNotificationsRequest) String() string { return proto.CompactTextString(m) }
func (*TransactionNotificationsRequest) ProtoMessage() {}
func (*TransactionNotificationsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor0, []int{31}
return fileDescriptor0, []int{33}
}
type TransactionNotificationsResponse struct {
@ -587,7 +611,7 @@ func (m *TransactionNotificationsResponse) Reset() { *m = TransactionNot
func (m *TransactionNotificationsResponse) String() string { return proto.CompactTextString(m) }
func (*TransactionNotificationsResponse) ProtoMessage() {}
func (*TransactionNotificationsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor0, []int{32}
return fileDescriptor0, []int{34}
}
func (m *TransactionNotificationsResponse) GetAttachedBlocks() []*BlockDetails {
@ -613,7 +637,7 @@ type SpentnessNotificationsRequest struct {
func (m *SpentnessNotificationsRequest) Reset() { *m = SpentnessNotificationsRequest{} }
func (m *SpentnessNotificationsRequest) String() string { return proto.CompactTextString(m) }
func (*SpentnessNotificationsRequest) ProtoMessage() {}
func (*SpentnessNotificationsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }
func (*SpentnessNotificationsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
type SpentnessNotificationsResponse struct {
TransactionHash []byte `protobuf:"bytes,1,opt,name=transaction_hash,json=transactionHash,proto3" json:"transaction_hash,omitempty"`
@ -624,7 +648,7 @@ type SpentnessNotificationsResponse struct {
func (m *SpentnessNotificationsResponse) Reset() { *m = SpentnessNotificationsResponse{} }
func (m *SpentnessNotificationsResponse) String() string { return proto.CompactTextString(m) }
func (*SpentnessNotificationsResponse) ProtoMessage() {}
func (*SpentnessNotificationsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
func (*SpentnessNotificationsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
func (m *SpentnessNotificationsResponse) GetSpender() *SpentnessNotificationsResponse_Spender {
if m != nil {
@ -644,7 +668,7 @@ func (m *SpentnessNotificationsResponse_Spender) Reset() {
func (m *SpentnessNotificationsResponse_Spender) String() string { return proto.CompactTextString(m) }
func (*SpentnessNotificationsResponse_Spender) ProtoMessage() {}
func (*SpentnessNotificationsResponse_Spender) Descriptor() ([]byte, []int) {
return fileDescriptor0, []int{34, 0}
return fileDescriptor0, []int{36, 0}
}
type AccountNotificationsRequest struct {
@ -653,7 +677,7 @@ type AccountNotificationsRequest struct {
func (m *AccountNotificationsRequest) Reset() { *m = AccountNotificationsRequest{} }
func (m *AccountNotificationsRequest) String() string { return proto.CompactTextString(m) }
func (*AccountNotificationsRequest) ProtoMessage() {}
func (*AccountNotificationsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
func (*AccountNotificationsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
type AccountNotificationsResponse struct {
AccountNumber uint32 `protobuf:"varint,1,opt,name=account_number,json=accountNumber" json:"account_number,omitempty"`
@ -666,7 +690,7 @@ type AccountNotificationsResponse struct {
func (m *AccountNotificationsResponse) Reset() { *m = AccountNotificationsResponse{} }
func (m *AccountNotificationsResponse) String() string { return proto.CompactTextString(m) }
func (*AccountNotificationsResponse) ProtoMessage() {}
func (*AccountNotificationsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
func (*AccountNotificationsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }
type CreateWalletRequest struct {
PublicPassphrase []byte `protobuf:"bytes,1,opt,name=public_passphrase,json=publicPassphrase,proto3" json:"public_passphrase,omitempty"`
@ -677,7 +701,7 @@ type CreateWalletRequest struct {
func (m *CreateWalletRequest) Reset() { *m = CreateWalletRequest{} }
func (m *CreateWalletRequest) String() string { return proto.CompactTextString(m) }
func (*CreateWalletRequest) ProtoMessage() {}
func (*CreateWalletRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
func (*CreateWalletRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }
type CreateWalletResponse struct {
}
@ -685,7 +709,7 @@ type CreateWalletResponse struct {
func (m *CreateWalletResponse) Reset() { *m = CreateWalletResponse{} }
func (m *CreateWalletResponse) String() string { return proto.CompactTextString(m) }
func (*CreateWalletResponse) ProtoMessage() {}
func (*CreateWalletResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }
func (*CreateWalletResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} }
type OpenWalletRequest struct {
PublicPassphrase []byte `protobuf:"bytes,1,opt,name=public_passphrase,json=publicPassphrase,proto3" json:"public_passphrase,omitempty"`
@ -694,7 +718,7 @@ type OpenWalletRequest struct {
func (m *OpenWalletRequest) Reset() { *m = OpenWalletRequest{} }
func (m *OpenWalletRequest) String() string { return proto.CompactTextString(m) }
func (*OpenWalletRequest) ProtoMessage() {}
func (*OpenWalletRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }
func (*OpenWalletRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} }
type OpenWalletResponse struct {
}
@ -702,7 +726,7 @@ type OpenWalletResponse struct {
func (m *OpenWalletResponse) Reset() { *m = OpenWalletResponse{} }
func (m *OpenWalletResponse) String() string { return proto.CompactTextString(m) }
func (*OpenWalletResponse) ProtoMessage() {}
func (*OpenWalletResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} }
func (*OpenWalletResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} }
type CloseWalletRequest struct {
}
@ -710,7 +734,7 @@ type CloseWalletRequest struct {
func (m *CloseWalletRequest) Reset() { *m = CloseWalletRequest{} }
func (m *CloseWalletRequest) String() string { return proto.CompactTextString(m) }
func (*CloseWalletRequest) ProtoMessage() {}
func (*CloseWalletRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} }
func (*CloseWalletRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} }
type CloseWalletResponse struct {
}
@ -718,7 +742,7 @@ type CloseWalletResponse struct {
func (m *CloseWalletResponse) Reset() { *m = CloseWalletResponse{} }
func (m *CloseWalletResponse) String() string { return proto.CompactTextString(m) }
func (*CloseWalletResponse) ProtoMessage() {}
func (*CloseWalletResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} }
func (*CloseWalletResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} }
type WalletExistsRequest struct {
}
@ -726,7 +750,7 @@ type WalletExistsRequest struct {
func (m *WalletExistsRequest) Reset() { *m = WalletExistsRequest{} }
func (m *WalletExistsRequest) String() string { return proto.CompactTextString(m) }
func (*WalletExistsRequest) ProtoMessage() {}
func (*WalletExistsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} }
func (*WalletExistsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} }
type WalletExistsResponse struct {
Exists bool `protobuf:"varint,1,opt,name=exists" json:"exists,omitempty"`
@ -735,7 +759,7 @@ type WalletExistsResponse struct {
func (m *WalletExistsResponse) Reset() { *m = WalletExistsResponse{} }
func (m *WalletExistsResponse) String() string { return proto.CompactTextString(m) }
func (*WalletExistsResponse) ProtoMessage() {}
func (*WalletExistsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} }
func (*WalletExistsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} }
type StartBtcdRpcRequest struct {
NetworkAddress string `protobuf:"bytes,1,opt,name=network_address,json=networkAddress" json:"network_address,omitempty"`
@ -747,7 +771,7 @@ type StartBtcdRpcRequest struct {
func (m *StartBtcdRpcRequest) Reset() { *m = StartBtcdRpcRequest{} }
func (m *StartBtcdRpcRequest) String() string { return proto.CompactTextString(m) }
func (*StartBtcdRpcRequest) ProtoMessage() {}
func (*StartBtcdRpcRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} }
func (*StartBtcdRpcRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} }
type StartBtcdRpcResponse struct {
}
@ -755,9 +779,11 @@ type StartBtcdRpcResponse struct {
func (m *StartBtcdRpcResponse) Reset() { *m = StartBtcdRpcResponse{} }
func (m *StartBtcdRpcResponse) String() string { return proto.CompactTextString(m) }
func (*StartBtcdRpcResponse) ProtoMessage() {}
func (*StartBtcdRpcResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} }
func (*StartBtcdRpcResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} }
func init() {
proto.RegisterType((*VersionRequest)(nil), "walletrpc.VersionRequest")
proto.RegisterType((*VersionResponse)(nil), "walletrpc.VersionResponse")
proto.RegisterType((*TransactionDetails)(nil), "walletrpc.TransactionDetails")
proto.RegisterType((*TransactionDetails_Input)(nil), "walletrpc.TransactionDetails.Input")
proto.RegisterType((*TransactionDetails_Output)(nil), "walletrpc.TransactionDetails.Output")
@ -818,6 +844,63 @@ func init() {
var _ context.Context
var _ grpc.ClientConn
// Client API for VersionService service
type VersionServiceClient interface {
Version(ctx context.Context, in *VersionRequest, opts ...grpc.CallOption) (*VersionResponse, error)
}
type versionServiceClient struct {
cc *grpc.ClientConn
}
func NewVersionServiceClient(cc *grpc.ClientConn) VersionServiceClient {
return &versionServiceClient{cc}
}
func (c *versionServiceClient) Version(ctx context.Context, in *VersionRequest, opts ...grpc.CallOption) (*VersionResponse, error) {
out := new(VersionResponse)
err := grpc.Invoke(ctx, "/walletrpc.VersionService/Version", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// Server API for VersionService service
type VersionServiceServer interface {
Version(context.Context, *VersionRequest) (*VersionResponse, error)
}
func RegisterVersionServiceServer(s *grpc.Server, srv VersionServiceServer) {
s.RegisterService(&_VersionService_serviceDesc, srv)
}
func _VersionService_Version_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) {
in := new(VersionRequest)
if err := dec(in); err != nil {
return nil, err
}
out, err := srv.(VersionServiceServer).Version(ctx, in)
if err != nil {
return nil, err
}
return out, nil
}
var _VersionService_serviceDesc = grpc.ServiceDesc{
ServiceName: "walletrpc.VersionService",
HandlerType: (*VersionServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "Version",
Handler: _VersionService_Version_Handler,
},
},
Streams: []grpc.StreamDesc{},
}
// Client API for WalletService service
type WalletServiceClient interface {
@ -1579,149 +1662,156 @@ var _WalletLoaderService_serviceDesc = grpc.ServiceDesc{
}
var fileDescriptor0 = []byte{
// 2290 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x19, 0x5d, 0x73, 0xdb, 0x58,
0x15, 0x47, 0x4e, 0xe2, 0x1c, 0xc7, 0x5f, 0x37, 0x5f, 0xae, 0xda, 0xb4, 0xa9, 0xca, 0x76, 0xb3,
0xbb, 0x60, 0x4a, 0x28, 0xb0, 0x0c, 0x3b, 0x65, 0x9b, 0xd0, 0x65, 0x4d, 0x3b, 0x89, 0x47, 0x69,
0x69, 0x67, 0x60, 0xc6, 0xa3, 0xc8, 0x37, 0x89, 0x26, 0xb6, 0xa4, 0x4a, 0x72, 0xd3, 0xf2, 0xc4,
0x30, 0xc3, 0x23, 0x2f, 0xc0, 0xc3, 0x0e, 0x0c, 0x0f, 0xf0, 0x17, 0x78, 0xe1, 0x95, 0xdf, 0xc0,
0x23, 0xfc, 0x0a, 0x7e, 0x01, 0xf7, 0xd3, 0xba, 0x57, 0x92, 0x1d, 0xa7, 0xb3, 0x6f, 0xd6, 0xf9,
0xba, 0xe7, 0x9c, 0x7b, 0x3e, 0xaf, 0x61, 0xc5, 0x09, 0xbd, 0x4e, 0x18, 0x05, 0x49, 0x80, 0x56,
0x2e, 0x9d, 0xe1, 0x10, 0x27, 0x51, 0xe8, 0x5a, 0xff, 0x35, 0x00, 0x3d, 0x8f, 0x1c, 0x3f, 0x76,
0xdc, 0xc4, 0x0b, 0xfc, 0x9f, 0xe2, 0xc4, 0xf1, 0x86, 0x31, 0x42, 0x50, 0x3e, 0x77, 0xe2, 0xf3,
0x76, 0x69, 0xa7, 0xb4, 0xbb, 0x6a, 0xb3, 0xdf, 0x68, 0x07, 0xaa, 0x49, 0x4a, 0xd9, 0x5e, 0x60,
0x28, 0x15, 0x84, 0x7e, 0x0c, 0x4b, 0x03, 0x7c, 0xe2, 0x25, 0x71, 0xdb, 0xd8, 0x31, 0x76, 0xab,
0x7b, 0xf7, 0x3a, 0x93, 0x83, 0x3a, 0xf9, 0x43, 0x3a, 0x5d, 0x3f, 0x1c, 0x27, 0xb6, 0x60, 0x41,
0x8f, 0x60, 0x39, 0x18, 0x27, 0x04, 0x12, 0xb7, 0xcb, 0x8c, 0xfb, 0x9b, 0xb3, 0xb9, 0x8f, 0x18,
0xb1, 0x2d, 0x99, 0x50, 0x13, 0x8c, 0x53, 0x8c, 0xdb, 0x8b, 0x44, 0x2d, 0xc3, 0xa6, 0x3f, 0xd1,
0x2d, 0x58, 0x49, 0xbc, 0x11, 0x8e, 0x13, 0x67, 0x14, 0xb6, 0x97, 0x18, 0x3c, 0x05, 0x98, 0xaf,
0x61, 0x91, 0x29, 0x80, 0xd6, 0x61, 0xd1, 0xf3, 0x07, 0xf8, 0x2d, 0x33, 0xb6, 0x66, 0xf3, 0x0f,
0xf4, 0x11, 0x34, 0xc3, 0x08, 0xbf, 0xf1, 0x82, 0x71, 0xdc, 0x77, 0x5c, 0x37, 0x18, 0xfb, 0x09,
0x33, 0xb9, 0x66, 0x37, 0x24, 0xfc, 0x31, 0x07, 0xa3, 0x0f, 0xa1, 0x91, 0x92, 0x8e, 0x18, 0xa5,
0xc1, 0x4e, 0xab, 0x4f, 0x28, 0x19, 0xd4, 0x0c, 0x61, 0x89, 0x6b, 0x4d, 0xfd, 0x3b, 0xf2, 0x7c,
0xcc, 0xe8, 0x2a, 0x36, 0xfb, 0x8d, 0xda, 0xb0, 0x2c, 0x0f, 0x2a, 0xb3, 0x83, 0xe4, 0x27, 0x32,
0xa1, 0xe2, 0xf9, 0x09, 0x8e, 0x7c, 0x67, 0xc8, 0xec, 0xab, 0xd8, 0x93, 0x6f, 0x6a, 0xa4, 0x33,
0x18, 0x44, 0x38, 0x8e, 0x71, 0x4c, 0x8c, 0x34, 0x76, 0x57, 0xec, 0x14, 0x60, 0xfd, 0xa5, 0x04,
0xab, 0xfb, 0xc3, 0xc0, 0xbd, 0x98, 0x75, 0xb1, 0x9b, 0xb0, 0x74, 0x8e, 0xbd, 0xb3, 0x73, 0x6e,
0xe0, 0xa2, 0x2d, 0xbe, 0x74, 0xff, 0x19, 0x19, 0xff, 0xa1, 0xc7, 0xb0, 0xaa, 0xdc, 0xbd, 0xbc,
0xb4, 0xed, 0x99, 0x97, 0x66, 0x6b, 0x2c, 0xd6, 0x11, 0xd4, 0x85, 0x0f, 0xf7, 0x9d, 0xa1, 0xe3,
0xbb, 0x9a, 0x0f, 0x4a, 0xba, 0x0f, 0xee, 0x41, 0x2d, 0x09, 0x12, 0x67, 0xd8, 0x3f, 0xe1, 0xa4,
0x4c, 0x57, 0x83, 0x08, 0xa4, 0x40, 0xc1, 0x6e, 0xd5, 0xa0, 0xda, 0xf3, 0xfc, 0x33, 0x1b, 0xbf,
0x1e, 0x13, 0x2d, 0xad, 0x3a, 0xac, 0xf2, 0xcf, 0x38, 0x24, 0xc7, 0x61, 0xab, 0x09, 0xf5, 0x43,
0x9c, 0x5c, 0x06, 0xd1, 0x85, 0xa4, 0xf8, 0x14, 0x1a, 0x13, 0x08, 0x27, 0x42, 0x1f, 0x40, 0x9d,
0xea, 0xf7, 0x06, 0xf7, 0x7d, 0x8e, 0x11, 0x9a, 0xd4, 0x38, 0x54, 0x90, 0x5b, 0x3f, 0x82, 0x75,
0xa1, 0xfb, 0xe1, 0x78, 0x74, 0x82, 0x23, 0x21, 0x11, 0xdd, 0x85, 0x55, 0xa1, 0x72, 0xdf, 0x77,
0x46, 0x98, 0x31, 0xaf, 0xd8, 0x55, 0x01, 0x3b, 0x24, 0x20, 0xeb, 0x11, 0x6c, 0x64, 0x58, 0xd5,
0xa3, 0x05, 0x2f, 0xc3, 0xa4, 0x47, 0x2b, 0xe4, 0x56, 0x0b, 0x1a, 0x82, 0x3f, 0x96, 0x76, 0xfc,
0xd3, 0x80, 0x66, 0x0a, 0x13, 0xe2, 0x7e, 0x02, 0x15, 0xc1, 0x18, 0x13, 0x41, 0xd9, 0x84, 0xcc,
0x92, 0x4b, 0x80, 0x3d, 0x61, 0x42, 0xdf, 0x02, 0xe4, 0x8e, 0xa3, 0x08, 0x13, 0x7d, 0x4e, 0x68,
0x10, 0xf5, 0x59, 0xe8, 0xf0, 0xc4, 0x6f, 0x0a, 0x0c, 0x8b, 0xae, 0x2f, 0x69, 0x18, 0x3d, 0x80,
0xf5, 0x0c, 0x35, 0x0f, 0x2a, 0x83, 0x05, 0x15, 0xd2, 0xe8, 0x19, 0xc6, 0xfc, 0xed, 0x02, 0x2c,
0xcb, 0x24, 0x9a, 0xcf, 0xf6, 0x9c, 0x7b, 0x17, 0x72, 0xee, 0xcd, 0x47, 0x8a, 0x91, 0x8f, 0x14,
0x6a, 0x1a, 0x7e, 0xcb, 0x53, 0xa8, 0x7f, 0x81, 0xdf, 0xf5, 0xd5, 0xbc, 0x6b, 0x4a, 0xcc, 0x53,
0xfc, 0xee, 0x80, 0x29, 0x47, 0xa8, 0x65, 0xc2, 0x29, 0xd4, 0x8b, 0x9c, 0x5a, 0x62, 0x34, 0xea,
0x51, 0x18, 0x44, 0x09, 0x1e, 0x28, 0xd4, 0x4b, 0x82, 0x5a, 0x60, 0x24, 0xb5, 0xf5, 0x0a, 0xd6,
0x6d, 0x4c, 0x6d, 0x91, 0xfe, 0x17, 0x81, 0x34, 0xa7, 0x43, 0x6e, 0x40, 0xc5, 0xc7, 0x97, 0xaa,
0x33, 0x96, 0xc9, 0x37, 0x8b, 0xb3, 0x2d, 0xd8, 0xc8, 0x48, 0x16, 0x79, 0xf0, 0x12, 0xd0, 0x21,
0xb1, 0x31, 0x73, 0xe0, 0x6d, 0x80, 0xd0, 0x89, 0xe3, 0xf0, 0x3c, 0x72, 0x62, 0x2c, 0x0a, 0x84,
0x02, 0x99, 0xc3, 0xf5, 0xd6, 0x67, 0xb0, 0xa6, 0x09, 0xbe, 0x5e, 0x5c, 0xff, 0xb9, 0x24, 0xf4,
0xe2, 0xe5, 0x4b, 0xea, 0x35, 0xbd, 0x26, 0xfc, 0x00, 0xca, 0x17, 0xa4, 0x5a, 0x33, 0x4d, 0xea,
0x7b, 0x96, 0x12, 0xdc, 0x79, 0x31, 0x9d, 0xa7, 0x84, 0xd2, 0x66, 0xf4, 0xd6, 0x1e, 0x94, 0xe9,
0x17, 0xa9, 0xfc, 0xcd, 0xfd, 0x6e, 0xef, 0xc1, 0x83, 0x87, 0x0f, 0xfb, 0x4f, 0x5e, 0x3d, 0x7f,
0x62, 0x1f, 0x3e, 0x7e, 0xd6, 0xfc, 0x86, 0x0a, 0xed, 0x1e, 0x0a, 0x68, 0xc9, 0xfa, 0x8e, 0x30,
0x4d, 0x0a, 0x15, 0xa6, 0x51, 0xe5, 0x38, 0x48, 0x64, 0xba, 0xfc, 0xb4, 0xfe, 0x58, 0x82, 0xad,
0x2e, 0xbb, 0xec, 0x5e, 0xe4, 0xbd, 0x71, 0x12, 0x4c, 0x6e, 0x7c, 0x5e, 0x57, 0x2b, 0x26, 0x2f,
0xe8, 0x26, 0xdf, 0xa7, 0xbd, 0x86, 0x89, 0x63, 0xa1, 0x75, 0xe9, 0x9d, 0xb2, 0xf0, 0x5e, 0xb1,
0x6b, 0xe1, 0xe4, 0x94, 0x97, 0xde, 0x29, 0xad, 0xe9, 0x44, 0x0b, 0xd7, 0xf1, 0x59, 0x4c, 0x57,
0x6c, 0xf1, 0x65, 0x99, 0xd0, 0xce, 0x2b, 0x25, 0xc2, 0xc2, 0x87, 0xba, 0x48, 0x8f, 0x6b, 0xc6,
0xe0, 0xf7, 0x61, 0x33, 0x22, 0x1c, 0x5e, 0x44, 0x02, 0xde, 0x0d, 0xfc, 0x53, 0x2f, 0x1a, 0x39,
0xbc, 0x29, 0xf0, 0x86, 0xb2, 0x21, 0xb1, 0x07, 0x2a, 0x92, 0x9c, 0xd7, 0x98, 0x9c, 0x27, 0xdc,
0x49, 0x7a, 0x31, 0x4b, 0x53, 0x76, 0x8e, 0x61, 0xf3, 0x0f, 0xda, 0x88, 0xe2, 0x10, 0xfb, 0x03,
0xe7, 0x64, 0x28, 0xeb, 0x7e, 0x0a, 0xa0, 0xed, 0xd7, 0x1b, 0x11, 0x99, 0xe3, 0x08, 0xf7, 0x23,
0x7c, 0xe9, 0x44, 0x03, 0xd9, 0x7e, 0x25, 0xd8, 0x66, 0x50, 0xeb, 0xab, 0x05, 0xd8, 0xfc, 0x19,
0x4e, 0x94, 0xb6, 0x34, 0x89, 0xb1, 0x0e, 0xac, 0x91, 0xae, 0x16, 0x25, 0xa4, 0x5b, 0xa8, 0xa5,
0x8e, 0xdf, 0x4c, 0x4b, 0xa2, 0xd2, 0x5a, 0xb7, 0x07, 0x1b, 0x59, 0xfa, 0xb4, 0x83, 0xb6, 0xec,
0x35, 0x9d, 0x83, 0xb7, 0xd3, 0x8f, 0xa1, 0x45, 0x54, 0xce, 0x9c, 0x60, 0xb0, 0x13, 0x1a, 0x1c,
0x91, 0xca, 0x27, 0xfa, 0xe8, 0xb4, 0x5c, 0x7a, 0x99, 0xb9, 0xb3, 0xa5, 0x52, 0x73, 0xd9, 0x8f,
0xe0, 0x26, 0x99, 0x21, 0xbc, 0xd1, 0x78, 0x44, 0x5c, 0xe0, 0xd2, 0x12, 0xac, 0xf5, 0xe6, 0x45,
0xc6, 0x77, 0x43, 0x90, 0xd8, 0x8c, 0x42, 0x75, 0x83, 0xf5, 0x0f, 0x12, 0xac, 0x39, 0xd7, 0x88,
0x3b, 0xf9, 0x02, 0x10, 0x9d, 0x4f, 0x06, 0xba, 0x48, 0xde, 0x50, 0xb6, 0x94, 0x9c, 0x53, 0xe7,
0x0c, 0xbb, 0xc5, 0x58, 0x54, 0x79, 0xa8, 0x07, 0xeb, 0x63, 0xbf, 0x40, 0xd2, 0xc2, 0x3c, 0x83,
0xc3, 0x9a, 0x60, 0xd5, 0xb4, 0xfe, 0x17, 0xd1, 0xfa, 0xe0, 0xdc, 0xf1, 0xcf, 0x70, 0x6f, 0x92,
0x3b, 0xf2, 0x46, 0x3f, 0x05, 0x83, 0x24, 0x08, 0xbb, 0xc1, 0xfa, 0xde, 0x7d, 0x45, 0xf8, 0x14,
0x86, 0x0e, 0xcd, 0x04, 0xca, 0x42, 0x83, 0x3e, 0x18, 0x0e, 0xfa, 0x4a, 0x82, 0xf2, 0x8e, 0x57,
0x23, 0xd0, 0x94, 0x8d, 0x92, 0xd1, 0xc2, 0xab, 0x90, 0xf1, 0xbb, 0xac, 0x11, 0x68, 0x4a, 0x66,
0xdd, 0x06, 0x83, 0x48, 0x46, 0x55, 0x58, 0xee, 0xd9, 0xdd, 0x5f, 0x3c, 0x7e, 0xfe, 0x84, 0x54,
0x18, 0x80, 0xa5, 0xde, 0x8b, 0xfd, 0x67, 0xdd, 0x03, 0x52, 0x57, 0x48, 0x42, 0xe6, 0x35, 0x12,
0x09, 0xf9, 0x1b, 0x12, 0xb0, 0x5f, 0x8c, 0x7d, 0xd5, 0xe8, 0xab, 0x8b, 0x22, 0x6d, 0x7f, 0x4e,
0x74, 0x86, 0x13, 0x39, 0x8b, 0xca, 0x41, 0x89, 0x01, 0xf9, 0x24, 0x3a, 0x23, 0x63, 0x8d, 0x19,
0x19, 0x8b, 0x3e, 0x03, 0xd3, 0xf3, 0xdd, 0xe1, 0x78, 0x80, 0xfb, 0x93, 0x94, 0x73, 0x03, 0xcf,
0x3f, 0x71, 0xe8, 0xf4, 0xc9, 0x2b, 0x4d, 0x5b, 0x50, 0x74, 0x05, 0xc1, 0x81, 0xc4, 0xd3, 0xa4,
0x91, 0xdc, 0x2e, 0x33, 0xb9, 0x1f, 0xbb, 0x91, 0x17, 0x26, 0x62, 0xa6, 0x5d, 0x13, 0x48, 0xee,
0x8e, 0x63, 0x86, 0xb2, 0xfe, 0x6e, 0xc0, 0x56, 0xce, 0x05, 0x22, 0x30, 0x7f, 0x05, 0xcd, 0x18,
0x0f, 0xb1, 0x4b, 0xfb, 0xac, 0x5c, 0x1d, 0x78, 0x58, 0x7e, 0x57, 0xb9, 0xef, 0x29, 0xdc, 0x9d,
0x9e, 0x98, 0xcd, 0xc5, 0x1e, 0xd1, 0x90, 0xa2, 0x8e, 0xc4, 0x3e, 0x41, 0xda, 0x1d, 0x1f, 0x23,
0x34, 0x37, 0x56, 0x19, 0x4c, 0x78, 0x71, 0x17, 0x9a, 0xc2, 0x90, 0xf0, 0x42, 0xda, 0xc2, 0x83,
0xa0, 0xce, 0xe1, 0xbd, 0x0b, 0x6e, 0x86, 0xf9, 0x9f, 0x12, 0xd4, 0xf5, 0x03, 0xe9, 0x82, 0xa1,
0xa4, 0x81, 0x5a, 0x6f, 0x1a, 0x0a, 0x9c, 0x55, 0x03, 0xa2, 0x0a, 0xb7, 0xaf, 0xcf, 0x17, 0x15,
0xde, 0x13, 0xaa, 0x1c, 0xd6, 0x65, 0xeb, 0x0a, 0xa9, 0xf7, 0xda, 0xea, 0x21, 0xbe, 0xd0, 0x4d,
0x58, 0x49, 0x75, 0x2b, 0x33, 0xf1, 0x95, 0x50, 0x68, 0x45, 0xe5, 0xd2, 0x6a, 0x41, 0x67, 0x5d,
0x3a, 0xd7, 0x8b, 0xdd, 0xa9, 0x2a, 0x60, 0xcf, 0x3d, 0x3e, 0x4c, 0x9d, 0x46, 0xc1, 0x68, 0x72,
0xcb, 0x6c, 0x8c, 0xa9, 0xd8, 0xab, 0x14, 0x28, 0x6f, 0xd6, 0xfa, 0x53, 0x09, 0x36, 0x8f, 0xbd,
0x33, 0xbf, 0x20, 0x4e, 0xaf, 0xea, 0x74, 0x24, 0x10, 0x63, 0x1c, 0x79, 0xce, 0xd0, 0xfb, 0xb5,
0x5e, 0x17, 0x44, 0xd2, 0x6d, 0xa4, 0x58, 0x45, 0x3a, 0x55, 0xcb, 0xf3, 0x27, 0x0e, 0xc1, 0x7c,
0xe1, 0xac, 0xd9, 0xab, 0x0c, 0xd8, 0xe5, 0x30, 0xeb, 0x35, 0x6c, 0xe5, 0xb4, 0x12, 0xa1, 0x93,
0xd9, 0x65, 0x4b, 0xf9, 0x5d, 0xf6, 0x21, 0x6c, 0x8e, 0xfd, 0x98, 0xb0, 0x13, 0xb5, 0xf4, 0xa3,
0x16, 0xd8, 0x51, 0xeb, 0x12, 0xdb, 0x55, 0x8f, 0xfc, 0x39, 0xdc, 0xe8, 0x8d, 0x4f, 0x86, 0x5e,
0x7c, 0x5e, 0xe0, 0x8b, 0x6f, 0x03, 0x12, 0x02, 0xf3, 0x67, 0xb7, 0x38, 0x46, 0xe1, 0xb2, 0x6e,
0x81, 0x59, 0x24, 0x4b, 0xd4, 0x86, 0xbb, 0x70, 0x47, 0x01, 0x1f, 0x06, 0x89, 0x77, 0xea, 0xb9,
0x8e, 0xda, 0xd4, 0xac, 0xbf, 0x2e, 0xc0, 0xce, 0x74, 0x1a, 0xe1, 0x89, 0xcf, 0xa1, 0xe1, 0x24,
0x89, 0xe3, 0x9e, 0x13, 0xb5, 0x58, 0xaf, 0xb9, 0xb2, 0xb4, 0xd7, 0x25, 0x3d, 0x83, 0xc6, 0xb4,
0xff, 0x0e, 0xb0, 0x2e, 0x81, 0xba, 0x88, 0x24, 0x81, 0x04, 0x0b, 0xc2, 0x69, 0x0d, 0xc0, 0x78,
0xdf, 0x06, 0x40, 0xeb, 0x51, 0x81, 0x44, 0x96, 0x4b, 0x98, 0x6f, 0xa4, 0xab, 0x76, 0x3b, 0xcf,
0xf8, 0x25, 0xc3, 0x5b, 0xbf, 0x2f, 0xc1, 0xf6, 0x31, 0x19, 0x23, 0x12, 0x9f, 0xcc, 0x6b, 0x45,
0x1e, 0x9c, 0x51, 0x65, 0x49, 0x33, 0xf7, 0x83, 0xbe, 0x4f, 0x99, 0xde, 0xf5, 0x49, 0x28, 0x50,
0x31, 0x2c, 0x64, 0x2b, 0x76, 0xc3, 0x0f, 0x98, 0xb0, 0x77, 0x2f, 0x38, 0x98, 0xce, 0x6c, 0x29,
0x2d, 0xa7, 0xe4, 0x7b, 0x7f, 0x4d, 0x52, 0x32, 0x2d, 0xac, 0x3f, 0x2c, 0xc0, 0xed, 0x69, 0xfa,
0x88, 0xdb, 0xfa, 0x7a, 0x8b, 0xc6, 0x53, 0x58, 0x66, 0x63, 0x14, 0x99, 0xeb, 0xa8, 0x42, 0x7a,
0xdd, 0x9c, 0xad, 0x09, 0x43, 0x13, 0x46, 0x5b, 0x4a, 0x30, 0x5f, 0xc0, 0xb2, 0x80, 0x5d, 0x47,
0xcb, 0x3b, 0x50, 0x55, 0xb2, 0x4b, 0x28, 0x09, 0x69, 0x1a, 0x5b, 0xdb, 0x70, 0x53, 0x2e, 0xcb,
0x45, 0x31, 0xfe, 0xbf, 0x12, 0xdc, 0x2a, 0xc6, 0x5f, 0x6b, 0xf7, 0x98, 0x67, 0xaf, 0x2c, 0x5e,
0x19, 0x8d, 0x6b, 0xad, 0x8c, 0xe5, 0x6b, 0xad, 0x8c, 0x8b, 0x53, 0x56, 0xc6, 0xdf, 0x95, 0x60,
0xed, 0x20, 0xc2, 0x64, 0x7c, 0x7f, 0xc9, 0xae, 0x4b, 0x86, 0xeb, 0x27, 0xd0, 0x0a, 0x69, 0xc5,
0x70, 0xfb, 0xb9, 0x9a, 0xdb, 0xe4, 0x08, 0x65, 0x7e, 0x21, 0xd5, 0x48, 0x6e, 0x12, 0xb9, 0x51,
0xa7, 0x25, 0x30, 0x0a, 0x39, 0x82, 0x72, 0x8c, 0xf1, 0x40, 0xf4, 0x37, 0xf6, 0xdb, 0xda, 0x84,
0x75, 0x5d, 0x0d, 0x51, 0x9b, 0x3e, 0x87, 0xd6, 0x11, 0x09, 0x85, 0xf7, 0x57, 0xce, 0x5a, 0x07,
0xa4, 0x4a, 0x10, 0x72, 0x09, 0xf4, 0x60, 0x18, 0xc4, 0xba, 0xd5, 0xd6, 0x06, 0x71, 0x86, 0x0a,
0x15, 0xc4, 0x04, 0xcc, 0x21, 0x4f, 0xde, 0x7a, 0x71, 0xfa, 0x52, 0xd2, 0x81, 0x75, 0x1d, 0x2c,
0xe2, 0x84, 0x34, 0x50, 0xcc, 0x20, 0x4c, 0x27, 0xb2, 0x30, 0xf1, 0x2f, 0xeb, 0x2b, 0xe2, 0xeb,
0x63, 0x3a, 0xcd, 0xef, 0x27, 0xee, 0xc0, 0x0e, 0x5d, 0x69, 0x0e, 0xa9, 0x7a, 0xe2, 0x7d, 0xa8,
0xaf, 0x2f, 0x80, 0x75, 0x01, 0x16, 0x9b, 0x22, 0x7d, 0xbc, 0x1b, 0xc7, 0xf4, 0xb6, 0x27, 0x51,
0x35, 0xf9, 0xa6, 0x38, 0xea, 0x0c, 0x42, 0x2e, 0x1d, 0x3b, 0xf9, 0xa6, 0x2d, 0xca, 0xc5, 0x91,
0x08, 0x69, 0x2c, 0x7a, 0xb7, 0x0a, 0xa2, 0xee, 0xd7, 0x35, 0xe3, 0xa6, 0xec, 0xfd, 0xbb, 0x0a,
0x35, 0x6e, 0xe3, 0x31, 0x8e, 0xde, 0x78, 0x2e, 0x46, 0x3f, 0x84, 0x32, 0x7d, 0x08, 0x43, 0x9b,
0x4a, 0x7e, 0x2b, 0x0f, 0x65, 0xe6, 0x56, 0x0e, 0x3e, 0xe9, 0x0e, 0xcb, 0xe2, 0xc1, 0x0b, 0xdd,
0xd0, 0xd6, 0x6b, 0xf5, 0x15, 0xcd, 0x34, 0x8b, 0x50, 0x42, 0x82, 0x0d, 0x35, 0xed, 0xb1, 0x0b,
0xdd, 0xc9, 0xbf, 0x41, 0x69, 0x2f, 0x68, 0xe6, 0xce, 0x74, 0x02, 0x21, 0xf3, 0x00, 0x2a, 0xf2,
0xf5, 0x0a, 0x99, 0x85, 0x4f, 0x5a, 0x5c, 0xd2, 0xcd, 0x19, 0xcf, 0x5d, 0xd4, 0x34, 0xf9, 0x18,
0xa4, 0x9a, 0xa6, 0x6f, 0xc0, 0x9a, 0x69, 0xd9, 0x65, 0xf5, 0x15, 0x34, 0x32, 0x3b, 0x13, 0xba,
0xab, 0x90, 0x17, 0xaf, 0x9a, 0xa6, 0x35, 0x8b, 0x44, 0x48, 0x1e, 0x43, 0x7b, 0x5a, 0xe3, 0x46,
0x1f, 0x17, 0xf7, 0xc9, 0xa2, 0xea, 0x68, 0x7e, 0x32, 0x17, 0x2d, 0x3f, 0xf4, 0x41, 0x09, 0x05,
0x64, 0x8c, 0x2b, 0xac, 0xfa, 0x68, 0x77, 0x8e, 0xc6, 0xc0, 0x8f, 0xfc, 0x68, 0xee, 0x16, 0x42,
0x0e, 0xf4, 0xd2, 0x47, 0x54, 0xed, 0xb8, 0xfb, 0x05, 0x21, 0x50, 0x74, 0xd8, 0x87, 0x57, 0xd2,
0x4d, 0x8e, 0xfa, 0x25, 0x34, 0xb3, 0x7b, 0x16, 0xb2, 0xae, 0x5e, 0x0b, 0xcd, 0x7b, 0x33, 0x69,
0xd2, 0x20, 0xd7, 0x5e, 0xda, 0xb4, 0x20, 0x2f, 0x7a, 0xdd, 0xd3, 0x82, 0xbc, 0xf0, 0x91, 0x0e,
0x3d, 0x83, 0xaa, 0xf2, 0x96, 0x86, 0xb6, 0xb3, 0xaf, 0x5b, 0xba, 0xbc, 0xdb, 0xd3, 0xd0, 0x19,
0x69, 0xa2, 0x28, 0x6d, 0xcf, 0x7c, 0x2b, 0xcb, 0x4b, 0xcb, 0xbc, 0x7a, 0x11, 0x67, 0x66, 0x5f,
0x91, 0x34, 0x67, 0x4e, 0x79, 0xf7, 0xd2, 0x9c, 0x39, 0xed, 0x19, 0x8a, 0xa6, 0x55, 0x66, 0x67,
0xd3, 0xd2, 0xaa, 0x78, 0x21, 0xd6, 0xd2, 0x6a, 0xda, 0xc2, 0x48, 0x24, 0x67, 0x16, 0x02, 0x4d,
0x72, 0xf1, 0x0a, 0xa3, 0x49, 0x9e, 0xb6, 0x4f, 0x38, 0x80, 0xf2, 0xb3, 0x3a, 0x52, 0xff, 0xc1,
0x9a, 0xba, 0x16, 0x98, 0x1f, 0x5c, 0x41, 0x25, 0xaa, 0xfa, 0xdf, 0x0c, 0xd9, 0xd0, 0x9e, 0x05,
0x0e, 0x99, 0xb2, 0x64, 0x6d, 0x3f, 0x82, 0x55, 0xb5, 0xa1, 0x21, 0xf5, 0xee, 0x0a, 0x1a, 0xa0,
0x79, 0x67, 0x2a, 0x5e, 0xd8, 0x42, 0x04, 0xaa, 0x5d, 0x5d, 0x13, 0x58, 0x30, 0x75, 0x68, 0x02,
0x8b, 0xc6, 0x01, 0xd4, 0x05, 0x48, 0x9b, 0x39, 0xba, 0xa5, 0x90, 0xe7, 0xa6, 0x04, 0x73, 0x7b,
0x0a, 0x36, 0x0d, 0x63, 0xa5, 0xd7, 0x6b, 0x61, 0x9c, 0x9f, 0x0c, 0xb4, 0x30, 0x2e, 0x18, 0x11,
0xa8, 0xa5, 0x6a, 0x03, 0xd5, 0x2c, 0x2d, 0xe8, 0xf9, 0x9a, 0xa5, 0x45, 0x9d, 0xf7, 0x64, 0x89,
0xfd, 0xbf, 0xfa, 0xbd, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xee, 0x55, 0x88, 0x61, 0x6c, 0x1d,
0x00, 0x00,
// 2403 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x59, 0x5b, 0x73, 0xdc, 0x48,
0x15, 0x66, 0x2c, 0xdf, 0x72, 0xe6, 0xde, 0xbe, 0x4d, 0x94, 0x38, 0x17, 0x85, 0xcd, 0x66, 0x77,
0xc1, 0x04, 0x13, 0x60, 0x29, 0xb6, 0xc2, 0x26, 0x26, 0xcb, 0x0e, 0x09, 0xce, 0x94, 0x9c, 0x6c,
0x52, 0x05, 0x55, 0x53, 0xb2, 0xa6, 0x1d, 0x0b, 0xcf, 0x48, 0x13, 0x49, 0x13, 0x27, 0x3c, 0x51,
0x54, 0xf1, 0xc8, 0x0b, 0xf0, 0xb0, 0x05, 0xc5, 0x03, 0xfc, 0x05, 0x5e, 0x78, 0xe5, 0x37, 0xf0,
0x08, 0xbf, 0x82, 0x5f, 0xc0, 0xe9, 0xdb, 0xa8, 0x5b, 0xd2, 0x8c, 0xed, 0x2d, 0xde, 0x46, 0x5f,
0x9f, 0x3e, 0x7d, 0xce, 0xe9, 0x73, 0xed, 0x81, 0x4b, 0xde, 0x38, 0xd8, 0x19, 0xc7, 0x51, 0x1a,
0x91, 0x4b, 0xa7, 0xde, 0x70, 0x48, 0xd3, 0x78, 0xec, 0x3b, 0x2d, 0x68, 0x7c, 0x41, 0xe3, 0x24,
0x88, 0x42, 0x97, 0xbe, 0x9e, 0xd0, 0x24, 0x75, 0xfe, 0x59, 0x81, 0xe6, 0x14, 0x4a, 0xc6, 0x51,
0x98, 0x50, 0xf2, 0x1e, 0x34, 0xde, 0x08, 0xa8, 0x9f, 0xa4, 0x71, 0x10, 0xbe, 0xea, 0x54, 0x6e,
0x54, 0xee, 0x5c, 0x72, 0xeb, 0x12, 0x3d, 0xe0, 0x20, 0x59, 0x87, 0xa5, 0x91, 0xf7, 0xcb, 0x28,
0xee, 0x2c, 0xe0, 0x6a, 0xdd, 0x15, 0x1f, 0x1c, 0x0d, 0x42, 0x44, 0x2d, 0x89, 0xb2, 0x0f, 0x86,
0x8e, 0xbd, 0xd4, 0x3f, 0xee, 0x2c, 0x0a, 0x94, 0x7f, 0x90, 0x6b, 0x00, 0xe3, 0x98, 0xc6, 0x74,
0x48, 0xbd, 0x84, 0x76, 0x96, 0xf8, 0x21, 0x1a, 0xc2, 0x04, 0x39, 0x9c, 0x04, 0xc3, 0x41, 0x7f,
0x44, 0x53, 0x6f, 0xe0, 0xa5, 0x5e, 0x67, 0x59, 0x08, 0xc2, 0xd1, 0x9f, 0x49, 0xd0, 0xf9, 0x8f,
0x05, 0xe4, 0x59, 0xec, 0x85, 0x89, 0xe7, 0xa7, 0x28, 0xde, 0x8f, 0x11, 0x0f, 0x86, 0x09, 0x21,
0xb0, 0x78, 0xec, 0x25, 0xc7, 0x5c, 0xf8, 0x9a, 0xcb, 0x7f, 0x93, 0x1b, 0x50, 0x4d, 0x33, 0x4a,
0x2e, 0x79, 0xcd, 0xd5, 0x21, 0xf2, 0x43, 0x58, 0x1e, 0xd0, 0xc3, 0x20, 0x4d, 0x50, 0x01, 0xeb,
0x4e, 0x75, 0xf7, 0xd6, 0xce, 0xd4, 0x7c, 0x3b, 0xc5, 0x43, 0x76, 0xba, 0xe1, 0x78, 0x92, 0xba,
0x72, 0x0b, 0xb9, 0x0f, 0x2b, 0xd1, 0x24, 0x45, 0x24, 0x41, 0x45, 0xd9, 0xee, 0xaf, 0xcf, 0xdf,
0xfd, 0x94, 0x13, 0xbb, 0x6a, 0x13, 0x69, 0x81, 0x75, 0x44, 0x85, 0x25, 0x2c, 0x97, 0xfd, 0x24,
0x57, 0xe1, 0x52, 0x1a, 0x8c, 0xf0, 0xa6, 0xbc, 0xd1, 0x98, 0x6b, 0x6f, 0xb9, 0x19, 0x60, 0xbf,
0x86, 0x25, 0x2e, 0x00, 0xb3, 0x6f, 0x10, 0x0e, 0xe8, 0x5b, 0xae, 0x2c, 0xda, 0x97, 0x7f, 0x90,
0x0f, 0xa0, 0x85, 0xd6, 0x7c, 0x13, 0x44, 0x93, 0xa4, 0xef, 0xf9, 0x7e, 0x34, 0x09, 0x53, 0x79,
0x59, 0x4d, 0x85, 0x3f, 0x10, 0x30, 0x79, 0x1f, 0x9a, 0x19, 0xe9, 0x88, 0x53, 0x5a, 0xfc, 0xb4,
0xc6, 0x94, 0x92, 0xa3, 0xf6, 0x18, 0x96, 0x85, 0xd4, 0xcc, 0xbe, 0x78, 0xb9, 0x94, 0xd3, 0xad,
0xba, 0xfc, 0x37, 0xe9, 0xc0, 0x8a, 0x3a, 0x48, 0xdc, 0xb4, 0xfa, 0x24, 0x36, 0xac, 0x06, 0x61,
0x4a, 0xe3, 0xd0, 0x1b, 0x72, 0xfd, 0x56, 0xdd, 0xe9, 0x37, 0x53, 0xd2, 0x1b, 0x0c, 0x62, 0x9a,
0x24, 0x34, 0x41, 0x25, 0x2d, 0xbc, 0xe2, 0x0c, 0x70, 0xfe, 0x5c, 0x81, 0xda, 0xc3, 0x61, 0xe4,
0x9f, 0xcc, 0xbb, 0xd8, 0x4d, 0x58, 0x3e, 0xa6, 0xc1, 0xab, 0x63, 0xa1, 0xe0, 0x92, 0x2b, 0xbf,
0x4c, 0xfb, 0x59, 0x39, 0xfb, 0x91, 0x07, 0x50, 0xd3, 0xee, 0x5e, 0x5d, 0xda, 0xf6, 0xdc, 0x4b,
0x73, 0x8d, 0x2d, 0xce, 0x53, 0x68, 0x48, 0x1b, 0x3e, 0xf4, 0x86, 0x5e, 0xe8, 0x1b, 0x36, 0xa8,
0x98, 0x36, 0xb8, 0x05, 0xf5, 0x34, 0x4a, 0xbd, 0x61, 0xff, 0x50, 0x90, 0x72, 0x59, 0x2d, 0x64,
0xc8, 0x40, 0xb9, 0xdd, 0xa9, 0x43, 0xb5, 0x87, 0xe1, 0xa5, 0x02, 0xb4, 0x01, 0x35, 0xf1, 0x29,
0x82, 0x93, 0x85, 0xf0, 0x3e, 0x4d, 0x4f, 0xa3, 0xf8, 0x44, 0x51, 0x7c, 0x0c, 0xcd, 0x29, 0x92,
0x45, 0x30, 0x93, 0xef, 0x0d, 0xed, 0x87, 0x62, 0x45, 0x4a, 0x52, 0x17, 0xa8, 0x24, 0x77, 0x7e,
0x00, 0xeb, 0x52, 0xf6, 0xfd, 0xc9, 0xe8, 0x90, 0xc6, 0x92, 0x23, 0xb9, 0x09, 0x35, 0x29, 0x72,
0x3f, 0xf4, 0x46, 0x54, 0x86, 0x7f, 0x55, 0x62, 0xfb, 0x08, 0x39, 0xf7, 0x61, 0x23, 0xb7, 0x55,
0x3f, 0x5a, 0xee, 0xe5, 0x2b, 0xd9, 0xd1, 0x1a, 0xb9, 0xd3, 0x86, 0xa6, 0xdc, 0x9f, 0x28, 0x3d,
0xfe, 0x61, 0x41, 0x2b, 0xc3, 0x24, 0xbb, 0x1f, 0xc1, 0xaa, 0xdc, 0x98, 0x20, 0xa3, 0x7c, 0x40,
0xe6, 0xc9, 0x15, 0xe0, 0x4e, 0x37, 0x91, 0x6f, 0x00, 0xf1, 0x27, 0x71, 0x4c, 0x51, 0x9e, 0x43,
0xe6, 0x44, 0x7d, 0xee, 0x3a, 0x22, 0xf0, 0x5b, 0x72, 0x85, 0x7b, 0xd7, 0xe7, 0xcc, 0x8d, 0xee,
0xc2, 0x7a, 0x8e, 0x5a, 0x38, 0x95, 0xc5, 0x9d, 0x8a, 0x18, 0xf4, 0x7c, 0xc5, 0xfe, 0xcd, 0x02,
0xac, 0xa8, 0x20, 0x3a, 0x9f, 0xee, 0x05, 0xf3, 0x2e, 0x14, 0xcc, 0x5b, 0xf4, 0x14, 0xab, 0xe8,
0x29, 0x4c, 0x35, 0xfa, 0x56, 0x84, 0x50, 0xff, 0x84, 0xbe, 0xeb, 0xeb, 0x71, 0xd7, 0x52, 0x2b,
0x8f, 0xe9, 0xbb, 0x3d, 0x2e, 0x1c, 0x52, 0xab, 0x80, 0xd3, 0xa8, 0x97, 0x04, 0xb5, 0x5a, 0x31,
0xa8, 0x47, 0xe3, 0x28, 0x4e, 0xe9, 0x40, 0xa3, 0x5e, 0x96, 0xd4, 0x72, 0x45, 0x51, 0x3b, 0x2f,
0x61, 0xdd, 0xa5, 0x4c, 0x17, 0x65, 0x7f, 0xe9, 0x48, 0xe7, 0x34, 0xc8, 0x65, 0x58, 0x0d, 0xe9,
0xa9, 0x6e, 0x8c, 0x15, 0xfc, 0xe6, 0x7e, 0xb6, 0x05, 0x1b, 0x39, 0xce, 0x32, 0x0e, 0x5e, 0x00,
0xd9, 0x47, 0x1d, 0x73, 0x07, 0xb2, 0x8a, 0xe2, 0x25, 0xc9, 0xf8, 0x38, 0x66, 0x15, 0x45, 0x24,
0x08, 0x0d, 0x39, 0x87, 0xe9, 0x9d, 0x4f, 0x60, 0xcd, 0x60, 0x7c, 0x31, 0xbf, 0xfe, 0x53, 0x45,
0xca, 0x25, 0xd2, 0x97, 0x92, 0x6b, 0x76, 0x4e, 0xf8, 0x1e, 0x2c, 0x9e, 0x60, 0xb6, 0xe6, 0x92,
0x34, 0x76, 0x1d, 0xcd, 0xb9, 0x8b, 0x6c, 0x76, 0x1e, 0x23, 0xa5, 0xcb, 0xe9, 0x9d, 0x5d, 0x58,
0x64, 0x5f, 0x98, 0xf9, 0x5b, 0x0f, 0xbb, 0xbd, 0xbb, 0x77, 0xef, 0xdd, 0xeb, 0x3f, 0x7a, 0xf9,
0xec, 0x91, 0xbb, 0xff, 0xe0, 0x49, 0xeb, 0x6b, 0x3a, 0xda, 0xdd, 0x97, 0x68, 0xc5, 0xf9, 0x96,
0x54, 0x4d, 0x31, 0x95, 0xaa, 0x31, 0xe1, 0x04, 0x24, 0x23, 0x5d, 0x7d, 0x3a, 0x7f, 0xa8, 0xc0,
0x56, 0x97, 0x5f, 0x76, 0x2f, 0x0e, 0xde, 0x78, 0x29, 0xc5, 0x1b, 0x3f, 0xaf, 0xa9, 0x35, 0x95,
0x17, 0x4c, 0x95, 0x6f, 0xb3, 0x5a, 0xc3, 0xd9, 0x71, 0xd7, 0x3a, 0x0d, 0x8e, 0xb8, 0x7b, 0x63,
0x5d, 0x1f, 0x4f, 0x4f, 0x79, 0x11, 0x1c, 0xb1, 0x9c, 0x8e, 0x52, 0xf8, 0x5e, 0xc8, 0x7d, 0x7a,
0xd5, 0x95, 0x5f, 0x8e, 0x0d, 0x9d, 0xa2, 0x50, 0xd2, 0x2d, 0x42, 0x68, 0xc8, 0xf0, 0xb8, 0xa0,
0x0f, 0x7e, 0x17, 0x36, 0x63, 0xdc, 0x11, 0xc4, 0xe8, 0xf0, 0x7e, 0x14, 0x1e, 0x05, 0xf1, 0xc8,
0x13, 0x45, 0x41, 0x14, 0x94, 0x0d, 0xb5, 0xba, 0xa7, 0x2f, 0xe2, 0x79, 0xcd, 0xe9, 0x79, 0xd2,
0x9c, 0x58, 0x8b, 0x79, 0x98, 0xf2, 0x73, 0x2c, 0x57, 0x7c, 0xb0, 0x42, 0x94, 0x8c, 0x69, 0x38,
0xf0, 0x0e, 0x87, 0x2a, 0xef, 0x67, 0x00, 0x2b, 0xbf, 0xc1, 0x08, 0x79, 0x4e, 0x62, 0xda, 0x8f,
0xe9, 0xa9, 0x17, 0x0f, 0x54, 0xf9, 0x55, 0xb0, 0xcb, 0x51, 0xe7, 0xcb, 0x05, 0xd8, 0xfc, 0x09,
0x4d, 0xb5, 0xb2, 0x34, 0xf5, 0xb1, 0x1d, 0x58, 0xc3, 0xaa, 0x16, 0xa7, 0x58, 0x2d, 0xf4, 0x54,
0x27, 0x6e, 0xa6, 0xad, 0x96, 0xb2, 0x5c, 0xb7, 0x0b, 0x1b, 0x79, 0xfa, 0xac, 0x82, 0xb6, 0xdd,
0x35, 0x73, 0x87, 0x28, 0xa7, 0x1f, 0x42, 0x1b, 0x45, 0xce, 0x9d, 0x60, 0xf1, 0x13, 0x9a, 0x62,
0x21, 0xe3, 0x8f, 0xf2, 0x98, 0xb4, 0x82, 0xfb, 0x22, 0x37, 0x67, 0x5b, 0xa7, 0x16, 0xbc, 0xef,
0xc3, 0x15, 0xec, 0x21, 0x82, 0xd1, 0x64, 0x84, 0x26, 0xf0, 0x59, 0x0a, 0x36, 0x6a, 0xf3, 0x12,
0xdf, 0x77, 0x59, 0x92, 0xb8, 0x9c, 0x42, 0x37, 0x83, 0xf3, 0x77, 0x74, 0xd6, 0x82, 0x69, 0xe4,
0x9d, 0x7c, 0x06, 0x84, 0xf5, 0x27, 0x03, 0x93, 0xa5, 0x28, 0x28, 0x5b, 0x5a, 0xcc, 0xe9, 0x7d,
0x86, 0xdb, 0xe6, 0x5b, 0x74, 0x7e, 0xa4, 0x07, 0xeb, 0x93, 0xb0, 0x84, 0xd3, 0xc2, 0x79, 0x1a,
0x87, 0x35, 0xb9, 0xd5, 0x90, 0x1a, 0x1b, 0xf0, 0xad, 0xbd, 0x63, 0x2f, 0x7c, 0x45, 0x7b, 0xd3,
0xd8, 0x51, 0x37, 0xfa, 0x31, 0x58, 0x18, 0x20, 0xfc, 0x06, 0x1b, 0xbb, 0xb7, 0x35, 0xe6, 0x33,
0x36, 0xec, 0xb0, 0x48, 0x60, 0x5b, 0x98, 0xd3, 0x47, 0xd8, 0x37, 0x6b, 0x01, 0x2a, 0x2a, 0x5e,
0x1d, 0xd1, 0x6c, 0x1b, 0x23, 0x63, 0x89, 0x57, 0x23, 0x13, 0x77, 0x59, 0x47, 0x34, 0x23, 0x73,
0xae, 0x81, 0x85, 0x9c, 0x49, 0x15, 0x56, 0x7a, 0x6e, 0xf7, 0x8b, 0x07, 0xcf, 0x1e, 0x61, 0x86,
0x01, 0x58, 0xee, 0x3d, 0x7f, 0xf8, 0xa4, 0xbb, 0x87, 0x79, 0x05, 0x03, 0xb2, 0x28, 0x91, 0x0c,
0xc8, 0x5f, 0xa3, 0xc3, 0x7e, 0x36, 0x09, 0x75, 0xa5, 0xcf, 0x4e, 0x8a, 0xac, 0xfc, 0x79, 0xf1,
0x2b, 0x9a, 0xaa, 0x5e, 0x54, 0x35, 0x4a, 0x1c, 0x14, 0x9d, 0xe8, 0x9c, 0x88, 0xb5, 0xe6, 0x44,
0x2c, 0xf9, 0x04, 0xec, 0x20, 0xf4, 0x87, 0x93, 0x01, 0xed, 0x4f, 0x43, 0xce, 0x8f, 0x82, 0xf0,
0xd0, 0x63, 0xdd, 0xa7, 0xc8, 0x34, 0x1d, 0x49, 0xd1, 0x95, 0x04, 0x7b, 0x6a, 0x9d, 0x05, 0x8d,
0xda, 0xed, 0x73, 0x95, 0xfb, 0x89, 0x1f, 0x07, 0xe3, 0x54, 0xf6, 0xb4, 0x6b, 0x72, 0x51, 0x98,
0xe3, 0x80, 0x2f, 0x39, 0x7f, 0xb3, 0x60, 0xab, 0x60, 0x02, 0xe9, 0x98, 0xbf, 0x80, 0x56, 0x82,
0xd3, 0x8e, 0xcf, 0xea, 0xac, 0x1a, 0x1d, 0x84, 0x5b, 0x7e, 0x5b, 0xbb, 0xef, 0x19, 0xbb, 0x77,
0x7a, 0xb2, 0x37, 0x97, 0x73, 0x44, 0x53, 0xb1, 0x7a, 0x2a, 0xe7, 0x09, 0x2c, 0x77, 0xa2, 0x8d,
0x30, 0xcc, 0x58, 0xe5, 0x98, 0xb4, 0xe2, 0x1d, 0x68, 0x49, 0x45, 0xc6, 0x27, 0x4a, 0x17, 0xe1,
0x04, 0x0d, 0x81, 0xf7, 0x4e, 0x84, 0x1a, 0xf6, 0xbf, 0x2b, 0xd0, 0x30, 0x0f, 0x64, 0x03, 0x86,
0x16, 0x06, 0x7a, 0xbe, 0x69, 0x6a, 0x38, 0xcf, 0x06, 0x28, 0x8a, 0xd0, 0xaf, 0x2f, 0x06, 0x15,
0x51, 0x13, 0xaa, 0x02, 0xeb, 0xf2, 0x71, 0x05, 0xf3, 0xbd, 0x31, 0x7a, 0xc8, 0x2f, 0x72, 0x05,
0x2e, 0x65, 0xb2, 0x2d, 0x72, 0xf6, 0xab, 0x63, 0x29, 0x15, 0xe3, 0xcb, 0xb2, 0x05, 0xeb, 0x75,
0x59, 0x5f, 0x2f, 0x67, 0xa7, 0xaa, 0xc4, 0x9e, 0x05, 0xa2, 0x99, 0x3a, 0x8a, 0xa3, 0xd1, 0xf4,
0x96, 0x79, 0x1b, 0xb3, 0xea, 0xd6, 0x18, 0xa8, 0x6e, 0xd6, 0xf9, 0x63, 0x05, 0x36, 0x0f, 0x82,
0x57, 0x61, 0x89, 0x9f, 0x9e, 0x55, 0xe9, 0xd0, 0x11, 0x13, 0x1a, 0x07, 0xde, 0x30, 0xf8, 0x95,
0x99, 0x17, 0x64, 0xd0, 0x6d, 0x64, 0xab, 0x1a, 0x77, 0x26, 0x56, 0x10, 0x4e, 0x0d, 0x42, 0xc5,
0xc0, 0x59, 0x77, 0x6b, 0x1c, 0xec, 0x0a, 0xcc, 0x79, 0x0d, 0x5b, 0x05, 0xa9, 0xa4, 0xeb, 0xe4,
0x66, 0xd9, 0x4a, 0x71, 0x96, 0xbd, 0x07, 0x9b, 0x93, 0x30, 0xc1, 0xed, 0x28, 0x96, 0x79, 0xd4,
0x02, 0x3f, 0x6a, 0x5d, 0xad, 0x76, 0xf5, 0x23, 0x7f, 0x0a, 0x97, 0x7b, 0x93, 0xc3, 0x61, 0x90,
0x1c, 0x97, 0xd8, 0xe2, 0x9b, 0x40, 0x24, 0xc3, 0xe2, 0xd9, 0x6d, 0xb1, 0xa2, 0xed, 0x72, 0xae,
0x82, 0x5d, 0xc6, 0x4b, 0xe6, 0x86, 0x9b, 0x70, 0x5d, 0x83, 0xf7, 0xa3, 0x34, 0x38, 0x0a, 0x7c,
0x4f, 0x2f, 0x6a, 0xce, 0x5f, 0x16, 0xe0, 0xc6, 0x6c, 0x1a, 0x69, 0x89, 0x4f, 0xa1, 0xe9, 0xa5,
0xa9, 0xe7, 0x1f, 0xa3, 0x58, 0xbc, 0xd6, 0x9c, 0x99, 0xda, 0x1b, 0x8a, 0x9e, 0xa3, 0x09, 0xab,
0xbf, 0x03, 0x6a, 0x72, 0x60, 0x26, 0xc2, 0x20, 0x50, 0xb0, 0x24, 0x9c, 0x55, 0x00, 0xac, 0xaf,
0x5a, 0x00, 0x58, 0x3e, 0x2a, 0xe1, 0xc8, 0x63, 0x89, 0x8a, 0x89, 0xb4, 0xe6, 0x76, 0x8a, 0x1b,
0x3f, 0xe7, 0xeb, 0xce, 0xef, 0x2a, 0xb0, 0x7d, 0x80, 0x6d, 0x44, 0x1a, 0x62, 0xbf, 0x56, 0x66,
0xc1, 0x39, 0x59, 0x16, 0x8b, 0x79, 0x18, 0xf5, 0x43, 0xb6, 0xe9, 0x5d, 0x1f, 0x5d, 0x81, 0xb1,
0xe1, 0x2e, 0xbb, 0xea, 0x36, 0xc3, 0x88, 0x33, 0x7b, 0xf7, 0x5c, 0xc0, 0xac, 0x67, 0xcb, 0x68,
0x05, 0xa5, 0x98, 0xfb, 0xeb, 0x8a, 0x92, 0x4b, 0xe1, 0xfc, 0x7e, 0x01, 0xae, 0xcd, 0x92, 0x47,
0xde, 0xd6, 0xff, 0x37, 0x69, 0x3c, 0x86, 0x15, 0xde, 0x46, 0x51, 0xf1, 0xe2, 0x64, 0xe6, 0xcd,
0xf9, 0x92, 0xf0, 0x65, 0xdc, 0xe8, 0x2a, 0x0e, 0xf6, 0x73, 0x58, 0x91, 0xd8, 0x45, 0xa4, 0xbc,
0x0e, 0x55, 0x2d, 0xba, 0xa4, 0x90, 0x90, 0x85, 0xb1, 0xb3, 0x0d, 0x57, 0xd4, 0xb0, 0x5c, 0xe6,
0xe3, 0xff, 0xad, 0xc0, 0xd5, 0xf2, 0xf5, 0x0b, 0xcd, 0x1e, 0xe7, 0x99, 0x2b, 0xcb, 0x47, 0x46,
0xeb, 0x42, 0x23, 0xe3, 0xe2, 0x85, 0x46, 0xc6, 0xa5, 0x19, 0x23, 0xe3, 0x6f, 0x2b, 0xb0, 0xb6,
0x17, 0x53, 0x6c, 0xdf, 0x5f, 0xf0, 0xeb, 0x52, 0xee, 0xfa, 0x11, 0xb4, 0xc7, 0x2c, 0x63, 0xf8,
0xfd, 0x42, 0xce, 0x6d, 0x89, 0x05, 0xad, 0x7f, 0xc1, 0x6c, 0xa4, 0x26, 0x89, 0x42, 0xab, 0xd3,
0x96, 0x2b, 0x1a, 0x39, 0x81, 0xc5, 0x84, 0xd2, 0x81, 0xac, 0x6f, 0xfc, 0xb7, 0xb3, 0x09, 0xeb,
0xa6, 0x18, 0x32, 0x37, 0x7d, 0x0a, 0xed, 0xa7, 0xe8, 0x0a, 0x5f, 0x5d, 0x38, 0x67, 0x1d, 0x88,
0xce, 0x41, 0xf2, 0x45, 0x74, 0x6f, 0x18, 0x25, 0xa6, 0xd6, 0xce, 0x06, 0x1a, 0x43, 0x47, 0x25,
0x31, 0xc2, 0x02, 0x79, 0xf4, 0x36, 0x48, 0xb2, 0x97, 0x92, 0x1d, 0x58, 0x37, 0x61, 0xe9, 0x27,
0x58, 0x40, 0x29, 0x47, 0xb8, 0x4c, 0x38, 0x30, 0x89, 0x2f, 0xe7, 0x4b, 0xb4, 0xf5, 0x01, 0xeb,
0xe6, 0x1f, 0xa6, 0xfe, 0xc0, 0x1d, 0xfb, 0x4a, 0x1d, 0xcc, 0x7a, 0xf2, 0x7d, 0xa8, 0x6f, 0x0e,
0x80, 0x0d, 0x09, 0xcb, 0x49, 0x91, 0x3d, 0xde, 0x4d, 0x12, 0x76, 0xdb, 0x53, 0xaf, 0x9a, 0x7e,
0xb3, 0x35, 0x66, 0x0c, 0x24, 0x57, 0x86, 0x9d, 0x7e, 0xb3, 0x12, 0xe5, 0xd3, 0x58, 0xba, 0x34,
0x95, 0xb5, 0x5b, 0x87, 0x98, 0xf9, 0x4d, 0xc9, 0x84, 0x2a, 0xbb, 0xee, 0xf4, 0xa5, 0xfa, 0x80,
0xc6, 0x6f, 0x02, 0x9f, 0x25, 0xf9, 0x15, 0x89, 0x90, 0xcb, 0x5a, 0x88, 0x9b, 0xef, 0xd9, 0xb6,
0x5d, 0xb6, 0x24, 0x79, 0xfe, 0xab, 0x0a, 0x75, 0x61, 0x37, 0xc5, 0xf3, 0xfb, 0xb0, 0xc8, 0x1e,
0xd7, 0xc8, 0xa6, 0xb6, 0x4b, 0x7b, 0x7c, 0xb3, 0xb7, 0x0a, 0xf8, 0xb4, 0xe2, 0xac, 0xc8, 0x47,
0x34, 0x43, 0x18, 0xf3, 0x65, 0xce, 0x10, 0x26, 0xff, 0x44, 0xe7, 0x42, 0xdd, 0x78, 0x40, 0x23,
0xd7, 0x8b, 0xef, 0x5a, 0xc6, 0xab, 0x9c, 0x7d, 0x63, 0x36, 0x81, 0xe4, 0xb9, 0x07, 0xab, 0xea,
0x45, 0x8c, 0xd8, 0xa5, 0xcf, 0x64, 0x82, 0xd3, 0x95, 0x39, 0x4f, 0x68, 0x4c, 0x35, 0xf5, 0xc0,
0xa4, 0xab, 0x66, 0x4e, 0xd5, 0x86, 0x6a, 0xf9, 0x01, 0xf8, 0x25, 0x34, 0x73, 0x73, 0x18, 0xb9,
0xa9, 0x91, 0x97, 0x8f, 0xaf, 0xb6, 0x33, 0x8f, 0x44, 0x72, 0x9e, 0x40, 0x67, 0x56, 0x33, 0x40,
0x3e, 0x2c, 0xaf, 0xbd, 0x65, 0x19, 0xd7, 0xfe, 0xe8, 0x5c, 0xb4, 0xe2, 0xd0, 0xbb, 0x15, 0x12,
0x61, 0x6b, 0x58, 0x5a, 0x49, 0xc8, 0x9d, 0x73, 0x14, 0x1b, 0x71, 0xe4, 0x07, 0xe7, 0x2e, 0x4b,
0x78, 0x60, 0x90, 0x3d, 0xcc, 0x1a, 0xc7, 0xdd, 0x2e, 0x71, 0x81, 0xb2, 0xc3, 0xde, 0x3f, 0x93,
0x6e, 0x7a, 0xd4, 0xcf, 0xa1, 0x95, 0x9f, 0xdd, 0x88, 0x73, 0xf6, 0xa8, 0x69, 0xdf, 0x9a, 0x4b,
0x93, 0x39, 0xb9, 0xf1, 0x7a, 0x67, 0x38, 0x79, 0xd9, 0x8b, 0xa1, 0xe1, 0xe4, 0xa5, 0x0f, 0x7f,
0xe4, 0x09, 0x54, 0xb5, 0xf7, 0x39, 0xb2, 0x9d, 0x7f, 0x31, 0x33, 0xf9, 0x5d, 0x9b, 0xb5, 0x9c,
0xe3, 0x26, 0x13, 0xdd, 0xf6, 0xdc, 0xf7, 0xb7, 0x22, 0xb7, 0xdc, 0x4b, 0x1a, 0x1a, 0x33, 0xff,
0x32, 0x65, 0x18, 0x73, 0xc6, 0x5b, 0x9a, 0x61, 0xcc, 0x59, 0x4f, 0x5b, 0x2c, 0xac, 0x72, 0x73,
0xa0, 0x11, 0x56, 0xe5, 0x43, 0xb6, 0x11, 0x56, 0xb3, 0x86, 0x50, 0xe4, 0x9c, 0x1b, 0x32, 0x0c,
0xce, 0xe5, 0x63, 0x91, 0xc1, 0x79, 0xd6, 0x8c, 0xe2, 0x01, 0x29, 0xf6, 0xff, 0x44, 0xff, 0x57,
0x6c, 0xe6, 0xa8, 0x61, 0xbf, 0x77, 0x06, 0x95, 0xcc, 0xea, 0x7f, 0xb5, 0x54, 0x91, 0x7c, 0x12,
0x79, 0xd8, 0xb9, 0xa9, 0xdc, 0xfe, 0x14, 0x6a, 0x7a, 0x91, 0x24, 0xfa, 0xdd, 0x95, 0x14, 0x55,
0xfb, 0xfa, 0xcc, 0x75, 0xa9, 0x0b, 0x32, 0xd4, 0x3b, 0x05, 0x83, 0x61, 0x49, 0x27, 0x63, 0x30,
0x2c, 0x6b, 0x31, 0x48, 0x17, 0x20, 0x6b, 0x10, 0xc8, 0x55, 0x8d, 0xbc, 0xd0, 0x79, 0xd8, 0xdb,
0x33, 0x56, 0x33, 0x37, 0xd6, 0xfa, 0x07, 0xc3, 0x8d, 0x8b, 0xdd, 0x86, 0xe1, 0xc6, 0x25, 0x6d,
0x07, 0xd3, 0x54, 0x2f, 0xca, 0x86, 0xa6, 0x25, 0x7d, 0x84, 0xa1, 0x69, 0x59, 0x35, 0x3f, 0x5c,
0xe6, 0xff, 0x44, 0x7f, 0xe7, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x00, 0xfb, 0x05, 0x0c, 0x96,
0x1e, 0x00, 0x00,
}

View file

@ -148,6 +148,7 @@ func startRPCServers(walletLoader *wallet.Loader) (*grpc.Server, *legacyrpc.Serv
}
creds := credentials.NewServerTLSFromCert(&keyPair)
server = grpc.NewServer(grpc.Creds(creds))
rpcserver.StartVersionService(server)
rpcserver.StartWalletLoaderService(server, walletLoader, activeNet)
for _, lis := range listeners {
lis := lis