From 2ad808e70c722018099808fa72d91727e0f6ddb3 Mon Sep 17 00:00:00 2001 From: Adrian Gallagher Date: Tue, 11 Jun 2019 17:02:00 +1000 Subject: [PATCH] Daily engine improvements: New GetExchangeOTPs API CLI validation Standardised pairs for GCTCLI Expand test coverage Trim SMS global from name is len > 11 Linter fixes --- cmd/gctcli/commands.go | 61 ++- cmd/gctcli/main.go | 14 +- cmd/gctcli/validation.go | 14 + config/config.go | 5 + engine/helpers.go | 31 +- engine/helpers_test.go | 107 +++- engine/rpcserver.go | 9 +- exchanges/bitstamp/bitstamp_test.go | 4 +- gctrpc/rpc.pb.go | 778 ++++++++++++++-------------- gctrpc/rpc.pb.gw.go | 55 +- gctrpc/rpc.proto | 12 + gctrpc/rpc.swagger.json | 27 + 12 files changed, 702 insertions(+), 415 deletions(-) create mode 100644 cmd/gctcli/validation.go diff --git a/cmd/gctcli/commands.go b/cmd/gctcli/commands.go index 61e4dc84..a4c5911b 100644 --- a/cmd/gctcli/commands.go +++ b/cmd/gctcli/commands.go @@ -218,6 +218,31 @@ func getExchangeOTPCode(c *cli.Context) error { return nil } +var getExchangeOTPsCommand = cli.Command{ + Name: "getexchangeotps", + Usage: "gets all exchange OTPs", + Action: getExchangeOTPCodes, +} + +func getExchangeOTPCodes(c *cli.Context) error { + conn, err := setupClient() + if err != nil { + return err + } + defer conn.Close() + + client := gctrpc.NewGoCryptoTraderClient(conn) + result, err := client.GetExchangeOTPCodes(context.Background(), + &gctrpc.GetExchangeOTPsRequest{}) + + if err != nil { + return err + } + + jsonOutput(result) + return nil +} + var getExchangeInfoCommand = cli.Command{ Name: "getexchangeinfo", Usage: "gets a specific exchanges info", @@ -320,7 +345,11 @@ func getTicker(c *cli.Context) error { assetType = c.Args().Get(2) } - p := currency.NewPairFromString(currencyPair) + if !validPair(currencyPair) { + return errInvalidPair + } + p := currency.NewPairDelimiter(currencyPair, pairDelimiter) + client := gctrpc.NewGoCryptoTraderClient(conn) result, err := client.GetTicker(context.Background(), &gctrpc.GetTickerRequest{ @@ -420,7 +449,11 @@ func getOrderbook(c *cli.Context) error { assetType = c.Args().Get(2) } - p := currency.NewPairFromString(currencyPair) + if !validPair(currencyPair) { + return errInvalidPair + } + p := currency.NewPairDelimiter(currencyPair, pairDelimiter) + client := gctrpc.NewGoCryptoTraderClient(conn) result, err := client.GetOrderbook(context.Background(), &gctrpc.GetOrderbookRequest{ @@ -832,7 +865,11 @@ func getOrders(c *cli.Context) error { currencyPair = c.Args().Get(2) } - p := currency.NewPairFromString(currencyPair) + if !validPair(currencyPair) { + return errInvalidPair + } + p := currency.NewPairDelimiter(currencyPair, pairDelimiter) + client := gctrpc.NewGoCryptoTraderClient(conn) result, err := client.GetOrders(context.Background(), &gctrpc.GetOrdersRequest{ Exchange: exchangeName, @@ -1007,7 +1044,11 @@ func submitOrder(c *cli.Context) error { clientID = c.Args().Get(6) } - p := currency.NewPairFromString(currencyPair) + if !validPair(currencyPair) { + return errInvalidPair + } + p := currency.NewPairDelimiter(currencyPair, pairDelimiter) + client := gctrpc.NewGoCryptoTraderClient(conn) result, err := client.SubmitOrder(context.Background(), &gctrpc.SubmitOrderRequest{ Exchange: exchangeName, @@ -1121,8 +1162,12 @@ func cancelOrder(c *cli.Context) error { var p currency.Pair if len(currencyPair) > 0 { - p = currency.NewPairFromString(currencyPair) + if !validPair(currencyPair) { + return errInvalidPair + } + p = currency.NewPairDelimiter(currencyPair, pairDelimiter) } + client := gctrpc.NewGoCryptoTraderClient(conn) result, err := client.CancelOrder(context.Background(), &gctrpc.CancelOrderRequest{ Exchange: exchangeName, @@ -1329,7 +1374,11 @@ func addEvent(c *cli.Context) error { } defer conn.Close() - p := currency.NewPairFromString(currencyPair) + if !validPair(currencyPair) { + return errInvalidPair + } + p := currency.NewPairDelimiter(currencyPair, pairDelimiter) + client := gctrpc.NewGoCryptoTraderClient(conn) result, err := client.AddEvent(context.Background(), &gctrpc.AddEventRequest{ Exchange: exchangeName, diff --git a/cmd/gctcli/main.go b/cmd/gctcli/main.go index fb5e39bf..d501e69b 100644 --- a/cmd/gctcli/main.go +++ b/cmd/gctcli/main.go @@ -17,9 +17,10 @@ import ( ) var ( - host string - username string - password string + host string + username string + password string + pairDelimiter string ) func jsonOutput(in interface{}) { @@ -75,6 +76,12 @@ func main() { Usage: "the gRPC password", Destination: &password, }, + cli.StringFlag{ + Name: "delimiter", + Value: "-", + Usage: "the default pair delimiter used to standardise currency pair input", + Destination: &pairDelimiter, + }, } app.Commands = []cli.Command{ getInfoCommand, @@ -82,6 +89,7 @@ func main() { enableExchangeCommand, disableExchangeCommand, getExchangeOTPCommand, + getExchangeOTPsCommand, getExchangeInfoCommand, getTickerCommand, getTickersCommand, diff --git a/cmd/gctcli/validation.go b/cmd/gctcli/validation.go new file mode 100644 index 00000000..b170d98b --- /dev/null +++ b/cmd/gctcli/validation.go @@ -0,0 +1,14 @@ +package main + +import ( + "errors" + "strings" +) + +var ( + errInvalidPair = errors.New("invalid currency pair supplied") +) + +func validPair(pair string) bool { + return strings.Contains(pair, pairDelimiter) +} diff --git a/config/config.go b/config/config.go index 31a5ea7b..6b8c4eac 100644 --- a/config/config.go +++ b/config/config.go @@ -333,6 +333,11 @@ func (c *Config) CheckCommunicationsConfig() { c.Communications.SMSGlobalConfig.From = c.Name } + if len(c.Communications.SMSGlobalConfig.From) > 11 { + log.Warnf("SMSGlobal config supplied from name exceeds 11 characters, trimming.") + c.Communications.SMSGlobalConfig.From = c.Communications.SMSGlobalConfig.From[:11] + } + if c.SMS != nil { // flush old SMS config c.SMS = nil diff --git a/engine/helpers.go b/engine/helpers.go index 9b21b3f0..fb500ca0 100644 --- a/engine/helpers.go +++ b/engine/helpers.go @@ -29,9 +29,33 @@ import ( "github.com/thrasher-/gocryptotrader/utils" ) -// GetOTPByExchange returns a OTP code for the desired exchange +// GetExchangeOTPs returns OTP codes for all exchanges which have a otpsecret +// stored +func GetExchangeOTPs() (map[string]string, error) { + otpCodes := make(map[string]string) + for x := range Bot.Config.Exchanges { + if otpSecret := Bot.Config.Exchanges[x].API.Credentials.OTPSecret; otpSecret != "" { + exchName := Bot.Config.Exchanges[x].Name + o, err := totp.GenerateCode(otpSecret, time.Now()) + if err != nil { + log.Errorf("Unable to generate OTP code for exchange %s. Err: %s", + exchName, err) + continue + } + otpCodes[exchName] = o + } + } + + if len(otpCodes) == 0 { + return nil, errors.New("no exchanges found which have a OTP secret stored") + } + + return otpCodes, nil +} + +// GetExchangeoOTPByName returns a OTP code for the desired exchange // if it exists -func GetOTPByExchange(exchName string) (string, error) { +func GetExchangeoOTPByName(exchName string) (string, error) { for x := range Bot.Config.Exchanges { if !strings.EqualFold(Bot.Config.Exchanges[x].Name, exchName) { continue @@ -41,7 +65,7 @@ func GetOTPByExchange(exchName string) (string, error) { return totp.GenerateCode(otpSecret, time.Now()) } } - return "", errors.New("exchange does not have a otpsecret stored") + return "", errors.New("exchange does not have a OTP secret stored") } // GetAuthAPISupportedExchanges returns a list of auth api enabled exchanges @@ -60,6 +84,7 @@ func GetAuthAPISupportedExchanges() []string { func IsOnline() bool { if Bot.Connectivity == nil { log.Warnf("IsOnline called but Bot.Connectivity is nil") + return false } return Bot.Connectivity.IsConnected() } diff --git a/engine/helpers_test.go b/engine/helpers_test.go index c30a3989..7b66bee2 100644 --- a/engine/helpers_test.go +++ b/engine/helpers_test.go @@ -2,9 +2,11 @@ package engine import ( "testing" + "time" "github.com/thrasher-/gocryptotrader/common" "github.com/thrasher-/gocryptotrader/config" + "github.com/thrasher-/gocryptotrader/connchecker" "github.com/thrasher-/gocryptotrader/currency" exchange "github.com/thrasher-/gocryptotrader/exchanges" "github.com/thrasher-/gocryptotrader/exchanges/assets" @@ -42,6 +44,110 @@ func SetupTestHelpers(t *testing.T) { } } +func TestGetExchangeOTPs(t *testing.T) { + SetupTestHelpers(t) + _, err := GetExchangeOTPs() + if err == nil { + t.Fatal("Expected err with no exchange OTP secrets set") + } + + bfxCfg, err := Bot.Config.GetExchangeConfig("Bitfinex") + if err != nil { + t.Fatal(err) + } + bCfg, err := Bot.Config.GetExchangeConfig("Bitstamp") + if err != nil { + t.Fatal(err) + } + + bfxCfg.API.Credentials.OTPSecret = "JBSWY3DPEHPK3PXP" + bCfg.API.Credentials.OTPSecret = "JBSWY3DPEHPK3PXP" + result, err := GetExchangeOTPs() + if err != nil { + t.Fatal(err) + } + if len(result) != 2 { + t.Fatal("Expected 2 OTP results") + } + + bfxCfg.API.Credentials.OTPSecret = "°" + result, err = GetExchangeOTPs() + if err != nil { + t.Fatal(err) + } + if len(result) != 1 { + t.Fatal("Expected 1 OTP code with invalid OTP Secret") + } + + // Flush settings + bfxCfg.API.Credentials.OTPSecret = "" + bCfg.API.Credentials.OTPSecret = "" +} + +func TestGetExchangeoOTPByName(t *testing.T) { + SetupTestHelpers(t) + _, err := GetExchangeoOTPByName("Bitstamp") + if err == nil { + t.Fatal("Expected err with no exchange OTP secrets set") + } + + bCfg, err := Bot.Config.GetExchangeConfig("Bitstamp") + if err != nil { + t.Fatal(err) + } + + bCfg.API.Credentials.OTPSecret = "JBSWY3DPEHPK3PXP" + result, err := GetExchangeoOTPByName("Bitstamp") + if err != nil { + t.Fatal(err) + } + if result == "" { + t.Fatal("Expected valid OTP code") + } +} + +func TestGetAuthAPISupportedExchanges(t *testing.T) { + SetupTestHelpers(t) + if result := GetAuthAPISupportedExchanges(); result != nil { + t.Fatal("Unexpected result") + } +} + +func TestIsOnline(t *testing.T) { + SetupTestHelpers(t) + if r := IsOnline(); r { + t.Fatal("Unexpected result") + } + + var err error + Bot.Connectivity, err = connchecker.New(Bot.Config.ConnectionMonitor.DNSList, + Bot.Config.ConnectionMonitor.PublicDomainList, + Bot.Config.ConnectionMonitor.CheckInterval) + if err != nil { + t.Fatal(err) + } + + tick := time.NewTicker(time.Second * 5) + for { + select { + case <-tick.C: + t.Fatal("Test timeout") + default: + if IsOnline() { + Bot.Connectivity.Shutdown() + return + } + } + } +} + +func TestGetAvailableExchanges(t *testing.T) { + SetupTestHelpers(t) + if r := len(GetAvailableExchanges()); r == 0 { + t.Error("Expected len > 0") + } +} + func TestGetSpecificAvailablePairs(t *testing.T) { SetupTestHelpers(t) assetType := assets.AssetTypeSpot @@ -255,7 +361,6 @@ func TestGetExchangeNamesByCurrency(t *testing.T) { } result = GetExchangeNamesByCurrency(currency.NewPairFromStrings("BTC", "JPY"), true, assetType) - t.Log(result) if !common.StringDataCompare(result, "Bitflyer") { t.Fatal("Unexpected result") } diff --git a/engine/rpcserver.go b/engine/rpcserver.go index c057f464..6fd20978 100644 --- a/engine/rpcserver.go +++ b/engine/rpcserver.go @@ -178,10 +178,17 @@ func (s *RPCServer) EnableExchange(ctx context.Context, r *gctrpc.GenericExchang // GetExchangeOTPCode retrieves an exchanges OTP code func (s *RPCServer) GetExchangeOTPCode(ctx context.Context, r *gctrpc.GenericExchangeNameRequest) (*gctrpc.GetExchangeOTPReponse, error) { - result, err := GetOTPByExchange(r.Exchange) + result, err := GetExchangeoOTPByName(r.Exchange) return &gctrpc.GetExchangeOTPReponse{OtpCode: result}, err } +// GetExchangeOTPCodes retrieves OTP codes for all exchanges which have an +// OTP secret installed +func (s *RPCServer) GetExchangeOTPCodes(ctx context.Context, r *gctrpc.GetExchangeOTPsRequest) (*gctrpc.GetExchangeOTPsResponse, error) { + result, err := GetExchangeOTPs() + return &gctrpc.GetExchangeOTPsResponse{OtpCodes: result}, err +} + // GetExchangeInfo gets info for a specific exchange func (s *RPCServer) GetExchangeInfo(ctx context.Context, r *gctrpc.GenericExchangeNameRequest) (*gctrpc.GetExchangeInfoResponse, error) { exchCfg, err := Bot.Config.GetExchangeConfig(r.Exchange) diff --git a/exchanges/bitstamp/bitstamp_test.go b/exchanges/bitstamp/bitstamp_test.go index e09c09d0..55f7c096 100644 --- a/exchanges/bitstamp/bitstamp_test.go +++ b/exchanges/bitstamp/bitstamp_test.go @@ -419,8 +419,8 @@ func TestSubmitOrder(t *testing.T) { var orderSubmission = &exchange.OrderSubmission{ Pair: currency.Pair{ - Base: currency.BTC, - Quote: currency.USD, + Base: currency.BTC, + Quote: currency.USD, }, OrderSide: exchange.BuyOrderSide, OrderType: exchange.LimitOrderType, diff --git a/gctrpc/rpc.pb.go b/gctrpc/rpc.pb.go index 40bd05a3..70fa45fc 100644 --- a/gctrpc/rpc.pb.go +++ b/gctrpc/rpc.pb.go @@ -9,8 +9,6 @@ import ( proto "github.com/golang/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" math "math" ) @@ -314,6 +312,76 @@ func (m *GetExchangeOTPReponse) GetOtpCode() string { return "" } +type GetExchangeOTPsRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetExchangeOTPsRequest) Reset() { *m = GetExchangeOTPsRequest{} } +func (m *GetExchangeOTPsRequest) String() string { return proto.CompactTextString(m) } +func (*GetExchangeOTPsRequest) ProtoMessage() {} +func (*GetExchangeOTPsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_77a6da22d6a3feb1, []int{7} +} + +func (m *GetExchangeOTPsRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetExchangeOTPsRequest.Unmarshal(m, b) +} +func (m *GetExchangeOTPsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetExchangeOTPsRequest.Marshal(b, m, deterministic) +} +func (m *GetExchangeOTPsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetExchangeOTPsRequest.Merge(m, src) +} +func (m *GetExchangeOTPsRequest) XXX_Size() int { + return xxx_messageInfo_GetExchangeOTPsRequest.Size(m) +} +func (m *GetExchangeOTPsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetExchangeOTPsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetExchangeOTPsRequest proto.InternalMessageInfo + +type GetExchangeOTPsResponse struct { + OtpCodes map[string]string `protobuf:"bytes,1,rep,name=otp_codes,json=otpCodes,proto3" json:"otp_codes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetExchangeOTPsResponse) Reset() { *m = GetExchangeOTPsResponse{} } +func (m *GetExchangeOTPsResponse) String() string { return proto.CompactTextString(m) } +func (*GetExchangeOTPsResponse) ProtoMessage() {} +func (*GetExchangeOTPsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_77a6da22d6a3feb1, []int{8} +} + +func (m *GetExchangeOTPsResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetExchangeOTPsResponse.Unmarshal(m, b) +} +func (m *GetExchangeOTPsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetExchangeOTPsResponse.Marshal(b, m, deterministic) +} +func (m *GetExchangeOTPsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetExchangeOTPsResponse.Merge(m, src) +} +func (m *GetExchangeOTPsResponse) XXX_Size() int { + return xxx_messageInfo_GetExchangeOTPsResponse.Size(m) +} +func (m *GetExchangeOTPsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetExchangeOTPsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetExchangeOTPsResponse proto.InternalMessageInfo + +func (m *GetExchangeOTPsResponse) GetOtpCodes() map[string]string { + if m != nil { + return m.OtpCodes + } + return nil +} + type DisableExchangeRequest struct { Exchange string `protobuf:"bytes,1,opt,name=exchange,proto3" json:"exchange,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -325,7 +393,7 @@ func (m *DisableExchangeRequest) Reset() { *m = DisableExchangeRequest{} func (m *DisableExchangeRequest) String() string { return proto.CompactTextString(m) } func (*DisableExchangeRequest) ProtoMessage() {} func (*DisableExchangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{7} + return fileDescriptor_77a6da22d6a3feb1, []int{9} } func (m *DisableExchangeRequest) XXX_Unmarshal(b []byte) error { @@ -375,7 +443,7 @@ func (m *GetExchangeInfoResponse) Reset() { *m = GetExchangeInfoResponse func (m *GetExchangeInfoResponse) String() string { return proto.CompactTextString(m) } func (*GetExchangeInfoResponse) ProtoMessage() {} func (*GetExchangeInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{8} + return fileDescriptor_77a6da22d6a3feb1, []int{10} } func (m *GetExchangeInfoResponse) XXX_Unmarshal(b []byte) error { @@ -493,7 +561,7 @@ func (m *GetTickerRequest) Reset() { *m = GetTickerRequest{} } func (m *GetTickerRequest) String() string { return proto.CompactTextString(m) } func (*GetTickerRequest) ProtoMessage() {} func (*GetTickerRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{9} + return fileDescriptor_77a6da22d6a3feb1, []int{11} } func (m *GetTickerRequest) XXX_Unmarshal(b []byte) error { @@ -548,7 +616,7 @@ func (m *CurrencyPair) Reset() { *m = CurrencyPair{} } func (m *CurrencyPair) String() string { return proto.CompactTextString(m) } func (*CurrencyPair) ProtoMessage() {} func (*CurrencyPair) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{10} + return fileDescriptor_77a6da22d6a3feb1, []int{12} } func (m *CurrencyPair) XXX_Unmarshal(b []byte) error { @@ -610,7 +678,7 @@ func (m *TickerResponse) Reset() { *m = TickerResponse{} } func (m *TickerResponse) String() string { return proto.CompactTextString(m) } func (*TickerResponse) ProtoMessage() {} func (*TickerResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{11} + return fileDescriptor_77a6da22d6a3feb1, []int{13} } func (m *TickerResponse) XXX_Unmarshal(b []byte) error { @@ -711,7 +779,7 @@ func (m *GetTickersRequest) Reset() { *m = GetTickersRequest{} } func (m *GetTickersRequest) String() string { return proto.CompactTextString(m) } func (*GetTickersRequest) ProtoMessage() {} func (*GetTickersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{12} + return fileDescriptor_77a6da22d6a3feb1, []int{14} } func (m *GetTickersRequest) XXX_Unmarshal(b []byte) error { @@ -744,7 +812,7 @@ func (m *Tickers) Reset() { *m = Tickers{} } func (m *Tickers) String() string { return proto.CompactTextString(m) } func (*Tickers) ProtoMessage() {} func (*Tickers) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{13} + return fileDescriptor_77a6da22d6a3feb1, []int{15} } func (m *Tickers) XXX_Unmarshal(b []byte) error { @@ -790,7 +858,7 @@ func (m *GetTickersResponse) Reset() { *m = GetTickersResponse{} } func (m *GetTickersResponse) String() string { return proto.CompactTextString(m) } func (*GetTickersResponse) ProtoMessage() {} func (*GetTickersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{14} + return fileDescriptor_77a6da22d6a3feb1, []int{16} } func (m *GetTickersResponse) XXX_Unmarshal(b []byte) error { @@ -831,7 +899,7 @@ func (m *GetOrderbookRequest) Reset() { *m = GetOrderbookRequest{} } func (m *GetOrderbookRequest) String() string { return proto.CompactTextString(m) } func (*GetOrderbookRequest) ProtoMessage() {} func (*GetOrderbookRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{15} + return fileDescriptor_77a6da22d6a3feb1, []int{17} } func (m *GetOrderbookRequest) XXX_Unmarshal(b []byte) error { @@ -886,7 +954,7 @@ func (m *OrderbookItem) Reset() { *m = OrderbookItem{} } func (m *OrderbookItem) String() string { return proto.CompactTextString(m) } func (*OrderbookItem) ProtoMessage() {} func (*OrderbookItem) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{16} + return fileDescriptor_77a6da22d6a3feb1, []int{18} } func (m *OrderbookItem) XXX_Unmarshal(b []byte) error { @@ -944,7 +1012,7 @@ func (m *OrderbookResponse) Reset() { *m = OrderbookResponse{} } func (m *OrderbookResponse) String() string { return proto.CompactTextString(m) } func (*OrderbookResponse) ProtoMessage() {} func (*OrderbookResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{17} + return fileDescriptor_77a6da22d6a3feb1, []int{19} } func (m *OrderbookResponse) XXX_Unmarshal(b []byte) error { @@ -1017,7 +1085,7 @@ func (m *GetOrderbooksRequest) Reset() { *m = GetOrderbooksRequest{} } func (m *GetOrderbooksRequest) String() string { return proto.CompactTextString(m) } func (*GetOrderbooksRequest) ProtoMessage() {} func (*GetOrderbooksRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{18} + return fileDescriptor_77a6da22d6a3feb1, []int{20} } func (m *GetOrderbooksRequest) XXX_Unmarshal(b []byte) error { @@ -1050,7 +1118,7 @@ func (m *Orderbooks) Reset() { *m = Orderbooks{} } func (m *Orderbooks) String() string { return proto.CompactTextString(m) } func (*Orderbooks) ProtoMessage() {} func (*Orderbooks) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{19} + return fileDescriptor_77a6da22d6a3feb1, []int{21} } func (m *Orderbooks) XXX_Unmarshal(b []byte) error { @@ -1096,7 +1164,7 @@ func (m *GetOrderbooksResponse) Reset() { *m = GetOrderbooksResponse{} } func (m *GetOrderbooksResponse) String() string { return proto.CompactTextString(m) } func (*GetOrderbooksResponse) ProtoMessage() {} func (*GetOrderbooksResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{20} + return fileDescriptor_77a6da22d6a3feb1, []int{22} } func (m *GetOrderbooksResponse) XXX_Unmarshal(b []byte) error { @@ -1135,7 +1203,7 @@ func (m *GetAccountInfoRequest) Reset() { *m = GetAccountInfoRequest{} } func (m *GetAccountInfoRequest) String() string { return proto.CompactTextString(m) } func (*GetAccountInfoRequest) ProtoMessage() {} func (*GetAccountInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{21} + return fileDescriptor_77a6da22d6a3feb1, []int{23} } func (m *GetAccountInfoRequest) XXX_Unmarshal(b []byte) error { @@ -1175,7 +1243,7 @@ func (m *Account) Reset() { *m = Account{} } func (m *Account) String() string { return proto.CompactTextString(m) } func (*Account) ProtoMessage() {} func (*Account) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{22} + return fileDescriptor_77a6da22d6a3feb1, []int{24} } func (m *Account) XXX_Unmarshal(b []byte) error { @@ -1223,7 +1291,7 @@ func (m *AccountCurrencyInfo) Reset() { *m = AccountCurrencyInfo{} } func (m *AccountCurrencyInfo) String() string { return proto.CompactTextString(m) } func (*AccountCurrencyInfo) ProtoMessage() {} func (*AccountCurrencyInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{23} + return fileDescriptor_77a6da22d6a3feb1, []int{25} } func (m *AccountCurrencyInfo) XXX_Unmarshal(b []byte) error { @@ -1277,7 +1345,7 @@ func (m *GetAccountInfoResponse) Reset() { *m = GetAccountInfoResponse{} func (m *GetAccountInfoResponse) String() string { return proto.CompactTextString(m) } func (*GetAccountInfoResponse) ProtoMessage() {} func (*GetAccountInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{24} + return fileDescriptor_77a6da22d6a3feb1, []int{26} } func (m *GetAccountInfoResponse) XXX_Unmarshal(b []byte) error { @@ -1322,7 +1390,7 @@ func (m *GetConfigRequest) Reset() { *m = GetConfigRequest{} } func (m *GetConfigRequest) String() string { return proto.CompactTextString(m) } func (*GetConfigRequest) ProtoMessage() {} func (*GetConfigRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{25} + return fileDescriptor_77a6da22d6a3feb1, []int{27} } func (m *GetConfigRequest) XXX_Unmarshal(b []byte) error { @@ -1354,7 +1422,7 @@ func (m *GetConfigResponse) Reset() { *m = GetConfigResponse{} } func (m *GetConfigResponse) String() string { return proto.CompactTextString(m) } func (*GetConfigResponse) ProtoMessage() {} func (*GetConfigResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{26} + return fileDescriptor_77a6da22d6a3feb1, []int{28} } func (m *GetConfigResponse) XXX_Unmarshal(b []byte) error { @@ -1396,7 +1464,7 @@ func (m *PortfolioAddress) Reset() { *m = PortfolioAddress{} } func (m *PortfolioAddress) String() string { return proto.CompactTextString(m) } func (*PortfolioAddress) ProtoMessage() {} func (*PortfolioAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{27} + return fileDescriptor_77a6da22d6a3feb1, []int{29} } func (m *PortfolioAddress) XXX_Unmarshal(b []byte) error { @@ -1455,7 +1523,7 @@ func (m *GetPortfolioRequest) Reset() { *m = GetPortfolioRequest{} } func (m *GetPortfolioRequest) String() string { return proto.CompactTextString(m) } func (*GetPortfolioRequest) ProtoMessage() {} func (*GetPortfolioRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{28} + return fileDescriptor_77a6da22d6a3feb1, []int{30} } func (m *GetPortfolioRequest) XXX_Unmarshal(b []byte) error { @@ -1487,7 +1555,7 @@ func (m *GetPortfolioResponse) Reset() { *m = GetPortfolioResponse{} } func (m *GetPortfolioResponse) String() string { return proto.CompactTextString(m) } func (*GetPortfolioResponse) ProtoMessage() {} func (*GetPortfolioResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{29} + return fileDescriptor_77a6da22d6a3feb1, []int{31} } func (m *GetPortfolioResponse) XXX_Unmarshal(b []byte) error { @@ -1525,7 +1593,7 @@ func (m *GetPortfolioSummaryRequest) Reset() { *m = GetPortfolioSummaryR func (m *GetPortfolioSummaryRequest) String() string { return proto.CompactTextString(m) } func (*GetPortfolioSummaryRequest) ProtoMessage() {} func (*GetPortfolioSummaryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{30} + return fileDescriptor_77a6da22d6a3feb1, []int{32} } func (m *GetPortfolioSummaryRequest) XXX_Unmarshal(b []byte) error { @@ -1560,7 +1628,7 @@ func (m *Coin) Reset() { *m = Coin{} } func (m *Coin) String() string { return proto.CompactTextString(m) } func (*Coin) ProtoMessage() {} func (*Coin) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{31} + return fileDescriptor_77a6da22d6a3feb1, []int{33} } func (m *Coin) XXX_Unmarshal(b []byte) error { @@ -1622,7 +1690,7 @@ func (m *OfflineCoinSummary) Reset() { *m = OfflineCoinSummary{} } func (m *OfflineCoinSummary) String() string { return proto.CompactTextString(m) } func (*OfflineCoinSummary) ProtoMessage() {} func (*OfflineCoinSummary) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{32} + return fileDescriptor_77a6da22d6a3feb1, []int{34} } func (m *OfflineCoinSummary) XXX_Unmarshal(b []byte) error { @@ -1676,7 +1744,7 @@ func (m *OnlineCoinSummary) Reset() { *m = OnlineCoinSummary{} } func (m *OnlineCoinSummary) String() string { return proto.CompactTextString(m) } func (*OnlineCoinSummary) ProtoMessage() {} func (*OnlineCoinSummary) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{33} + return fileDescriptor_77a6da22d6a3feb1, []int{35} } func (m *OnlineCoinSummary) XXX_Unmarshal(b []byte) error { @@ -1722,7 +1790,7 @@ func (m *OfflineCoins) Reset() { *m = OfflineCoins{} } func (m *OfflineCoins) String() string { return proto.CompactTextString(m) } func (*OfflineCoins) ProtoMessage() {} func (*OfflineCoins) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{34} + return fileDescriptor_77a6da22d6a3feb1, []int{36} } func (m *OfflineCoins) XXX_Unmarshal(b []byte) error { @@ -1761,7 +1829,7 @@ func (m *OnlineCoins) Reset() { *m = OnlineCoins{} } func (m *OnlineCoins) String() string { return proto.CompactTextString(m) } func (*OnlineCoins) ProtoMessage() {} func (*OnlineCoins) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{35} + return fileDescriptor_77a6da22d6a3feb1, []int{37} } func (m *OnlineCoins) XXX_Unmarshal(b []byte) error { @@ -1804,7 +1872,7 @@ func (m *GetPortfolioSummaryResponse) Reset() { *m = GetPortfolioSummary func (m *GetPortfolioSummaryResponse) String() string { return proto.CompactTextString(m) } func (*GetPortfolioSummaryResponse) ProtoMessage() {} func (*GetPortfolioSummaryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{36} + return fileDescriptor_77a6da22d6a3feb1, []int{38} } func (m *GetPortfolioSummaryResponse) XXX_Unmarshal(b []byte) error { @@ -1874,7 +1942,7 @@ func (m *AddPortfolioAddressRequest) Reset() { *m = AddPortfolioAddressR func (m *AddPortfolioAddressRequest) String() string { return proto.CompactTextString(m) } func (*AddPortfolioAddressRequest) ProtoMessage() {} func (*AddPortfolioAddressRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{37} + return fileDescriptor_77a6da22d6a3feb1, []int{39} } func (m *AddPortfolioAddressRequest) XXX_Unmarshal(b []byte) error { @@ -1933,7 +2001,7 @@ func (m *AddPortfolioAddressResponse) Reset() { *m = AddPortfolioAddress func (m *AddPortfolioAddressResponse) String() string { return proto.CompactTextString(m) } func (*AddPortfolioAddressResponse) ProtoMessage() {} func (*AddPortfolioAddressResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{38} + return fileDescriptor_77a6da22d6a3feb1, []int{40} } func (m *AddPortfolioAddressResponse) XXX_Unmarshal(b []byte) error { @@ -1967,7 +2035,7 @@ func (m *RemovePortfolioAddressRequest) Reset() { *m = RemovePortfolioAd func (m *RemovePortfolioAddressRequest) String() string { return proto.CompactTextString(m) } func (*RemovePortfolioAddressRequest) ProtoMessage() {} func (*RemovePortfolioAddressRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{39} + return fileDescriptor_77a6da22d6a3feb1, []int{41} } func (m *RemovePortfolioAddressRequest) XXX_Unmarshal(b []byte) error { @@ -2019,7 +2087,7 @@ func (m *RemovePortfolioAddressResponse) Reset() { *m = RemovePortfolioA func (m *RemovePortfolioAddressResponse) String() string { return proto.CompactTextString(m) } func (*RemovePortfolioAddressResponse) ProtoMessage() {} func (*RemovePortfolioAddressResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{40} + return fileDescriptor_77a6da22d6a3feb1, []int{42} } func (m *RemovePortfolioAddressResponse) XXX_Unmarshal(b []byte) error { @@ -2050,7 +2118,7 @@ func (m *GetForexProvidersRequest) Reset() { *m = GetForexProvidersReque func (m *GetForexProvidersRequest) String() string { return proto.CompactTextString(m) } func (*GetForexProvidersRequest) ProtoMessage() {} func (*GetForexProvidersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{41} + return fileDescriptor_77a6da22d6a3feb1, []int{43} } func (m *GetForexProvidersRequest) XXX_Unmarshal(b []byte) error { @@ -2088,7 +2156,7 @@ func (m *ForexProvider) Reset() { *m = ForexProvider{} } func (m *ForexProvider) String() string { return proto.CompactTextString(m) } func (*ForexProvider) ProtoMessage() {} func (*ForexProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{42} + return fileDescriptor_77a6da22d6a3feb1, []int{44} } func (m *ForexProvider) XXX_Unmarshal(b []byte) error { @@ -2169,7 +2237,7 @@ func (m *GetForexProvidersResponse) Reset() { *m = GetForexProvidersResp func (m *GetForexProvidersResponse) String() string { return proto.CompactTextString(m) } func (*GetForexProvidersResponse) ProtoMessage() {} func (*GetForexProvidersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{43} + return fileDescriptor_77a6da22d6a3feb1, []int{45} } func (m *GetForexProvidersResponse) XXX_Unmarshal(b []byte) error { @@ -2207,7 +2275,7 @@ func (m *GetForexRatesRequest) Reset() { *m = GetForexRatesRequest{} } func (m *GetForexRatesRequest) String() string { return proto.CompactTextString(m) } func (*GetForexRatesRequest) ProtoMessage() {} func (*GetForexRatesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{44} + return fileDescriptor_77a6da22d6a3feb1, []int{46} } func (m *GetForexRatesRequest) XXX_Unmarshal(b []byte) error { @@ -2242,7 +2310,7 @@ func (m *ForexRatesConversion) Reset() { *m = ForexRatesConversion{} } func (m *ForexRatesConversion) String() string { return proto.CompactTextString(m) } func (*ForexRatesConversion) ProtoMessage() {} func (*ForexRatesConversion) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{45} + return fileDescriptor_77a6da22d6a3feb1, []int{47} } func (m *ForexRatesConversion) XXX_Unmarshal(b []byte) error { @@ -2302,7 +2370,7 @@ func (m *GetForexRatesResponse) Reset() { *m = GetForexRatesResponse{} } func (m *GetForexRatesResponse) String() string { return proto.CompactTextString(m) } func (*GetForexRatesResponse) ProtoMessage() {} func (*GetForexRatesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{46} + return fileDescriptor_77a6da22d6a3feb1, []int{48} } func (m *GetForexRatesResponse) XXX_Unmarshal(b []byte) error { @@ -2352,7 +2420,7 @@ func (m *OrderDetails) Reset() { *m = OrderDetails{} } func (m *OrderDetails) String() string { return proto.CompactTextString(m) } func (*OrderDetails) ProtoMessage() {} func (*OrderDetails) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{47} + return fileDescriptor_77a6da22d6a3feb1, []int{49} } func (m *OrderDetails) XXX_Unmarshal(b []byte) error { @@ -2470,7 +2538,7 @@ func (m *GetOrdersRequest) Reset() { *m = GetOrdersRequest{} } func (m *GetOrdersRequest) String() string { return proto.CompactTextString(m) } func (*GetOrdersRequest) ProtoMessage() {} func (*GetOrdersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{48} + return fileDescriptor_77a6da22d6a3feb1, []int{50} } func (m *GetOrdersRequest) XXX_Unmarshal(b []byte) error { @@ -2523,7 +2591,7 @@ func (m *GetOrdersResponse) Reset() { *m = GetOrdersResponse{} } func (m *GetOrdersResponse) String() string { return proto.CompactTextString(m) } func (*GetOrdersResponse) ProtoMessage() {} func (*GetOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{49} + return fileDescriptor_77a6da22d6a3feb1, []int{51} } func (m *GetOrdersResponse) XXX_Unmarshal(b []byte) error { @@ -2563,7 +2631,7 @@ func (m *GetOrderRequest) Reset() { *m = GetOrderRequest{} } func (m *GetOrderRequest) String() string { return proto.CompactTextString(m) } func (*GetOrderRequest) ProtoMessage() {} func (*GetOrderRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{50} + return fileDescriptor_77a6da22d6a3feb1, []int{52} } func (m *GetOrderRequest) XXX_Unmarshal(b []byte) error { @@ -2615,7 +2683,7 @@ func (m *SubmitOrderRequest) Reset() { *m = SubmitOrderRequest{} } func (m *SubmitOrderRequest) String() string { return proto.CompactTextString(m) } func (*SubmitOrderRequest) ProtoMessage() {} func (*SubmitOrderRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{51} + return fileDescriptor_77a6da22d6a3feb1, []int{53} } func (m *SubmitOrderRequest) XXX_Unmarshal(b []byte) error { @@ -2697,7 +2765,7 @@ func (m *SubmitOrderResponse) Reset() { *m = SubmitOrderResponse{} } func (m *SubmitOrderResponse) String() string { return proto.CompactTextString(m) } func (*SubmitOrderResponse) ProtoMessage() {} func (*SubmitOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{52} + return fileDescriptor_77a6da22d6a3feb1, []int{54} } func (m *SubmitOrderResponse) XXX_Unmarshal(b []byte) error { @@ -2749,7 +2817,7 @@ func (m *CancelOrderRequest) Reset() { *m = CancelOrderRequest{} } func (m *CancelOrderRequest) String() string { return proto.CompactTextString(m) } func (*CancelOrderRequest) ProtoMessage() {} func (*CancelOrderRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{53} + return fileDescriptor_77a6da22d6a3feb1, []int{55} } func (m *CancelOrderRequest) XXX_Unmarshal(b []byte) error { @@ -2829,7 +2897,7 @@ func (m *CancelOrderResponse) Reset() { *m = CancelOrderResponse{} } func (m *CancelOrderResponse) String() string { return proto.CompactTextString(m) } func (*CancelOrderResponse) ProtoMessage() {} func (*CancelOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{54} + return fileDescriptor_77a6da22d6a3feb1, []int{56} } func (m *CancelOrderResponse) XXX_Unmarshal(b []byte) error { @@ -2861,7 +2929,7 @@ func (m *CancelAllOrdersRequest) Reset() { *m = CancelAllOrdersRequest{} func (m *CancelAllOrdersRequest) String() string { return proto.CompactTextString(m) } func (*CancelAllOrdersRequest) ProtoMessage() {} func (*CancelAllOrdersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{55} + return fileDescriptor_77a6da22d6a3feb1, []int{57} } func (m *CancelAllOrdersRequest) XXX_Unmarshal(b []byte) error { @@ -2900,7 +2968,7 @@ func (m *CancelAllOrdersResponse) Reset() { *m = CancelAllOrdersResponse func (m *CancelAllOrdersResponse) String() string { return proto.CompactTextString(m) } func (*CancelAllOrdersResponse) ProtoMessage() {} func (*CancelAllOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{56} + return fileDescriptor_77a6da22d6a3feb1, []int{58} } func (m *CancelAllOrdersResponse) XXX_Unmarshal(b []byte) error { @@ -2940,7 +3008,7 @@ func (m *CancelAllOrdersResponse_Orders) Reset() { *m = CancelAllOrdersR func (m *CancelAllOrdersResponse_Orders) String() string { return proto.CompactTextString(m) } func (*CancelAllOrdersResponse_Orders) ProtoMessage() {} func (*CancelAllOrdersResponse_Orders) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{56, 0} + return fileDescriptor_77a6da22d6a3feb1, []int{58, 0} } func (m *CancelAllOrdersResponse_Orders) XXX_Unmarshal(b []byte) error { @@ -2985,7 +3053,7 @@ func (m *GetEventsRequest) Reset() { *m = GetEventsRequest{} } func (m *GetEventsRequest) String() string { return proto.CompactTextString(m) } func (*GetEventsRequest) ProtoMessage() {} func (*GetEventsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{57} + return fileDescriptor_77a6da22d6a3feb1, []int{59} } func (m *GetEventsRequest) XXX_Unmarshal(b []byte) error { @@ -3021,7 +3089,7 @@ func (m *ConditionParams) Reset() { *m = ConditionParams{} } func (m *ConditionParams) String() string { return proto.CompactTextString(m) } func (*ConditionParams) ProtoMessage() {} func (*ConditionParams) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{58} + return fileDescriptor_77a6da22d6a3feb1, []int{60} } func (m *ConditionParams) XXX_Unmarshal(b []byte) error { @@ -3094,7 +3162,7 @@ func (m *GetEventsResponse) Reset() { *m = GetEventsResponse{} } func (m *GetEventsResponse) String() string { return proto.CompactTextString(m) } func (*GetEventsResponse) ProtoMessage() {} func (*GetEventsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{59} + return fileDescriptor_77a6da22d6a3feb1, []int{61} } func (m *GetEventsResponse) XXX_Unmarshal(b []byte) error { @@ -3180,7 +3248,7 @@ func (m *AddEventRequest) Reset() { *m = AddEventRequest{} } func (m *AddEventRequest) String() string { return proto.CompactTextString(m) } func (*AddEventRequest) ProtoMessage() {} func (*AddEventRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{60} + return fileDescriptor_77a6da22d6a3feb1, []int{62} } func (m *AddEventRequest) XXX_Unmarshal(b []byte) error { @@ -3254,7 +3322,7 @@ func (m *AddEventResponse) Reset() { *m = AddEventResponse{} } func (m *AddEventResponse) String() string { return proto.CompactTextString(m) } func (*AddEventResponse) ProtoMessage() {} func (*AddEventResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{61} + return fileDescriptor_77a6da22d6a3feb1, []int{63} } func (m *AddEventResponse) XXX_Unmarshal(b []byte) error { @@ -3293,7 +3361,7 @@ func (m *RemoveEventRequest) Reset() { *m = RemoveEventRequest{} } func (m *RemoveEventRequest) String() string { return proto.CompactTextString(m) } func (*RemoveEventRequest) ProtoMessage() {} func (*RemoveEventRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{62} + return fileDescriptor_77a6da22d6a3feb1, []int{64} } func (m *RemoveEventRequest) XXX_Unmarshal(b []byte) error { @@ -3331,7 +3399,7 @@ func (m *RemoveEventResponse) Reset() { *m = RemoveEventResponse{} } func (m *RemoveEventResponse) String() string { return proto.CompactTextString(m) } func (*RemoveEventResponse) ProtoMessage() {} func (*RemoveEventResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{63} + return fileDescriptor_77a6da22d6a3feb1, []int{65} } func (m *RemoveEventResponse) XXX_Unmarshal(b []byte) error { @@ -3365,7 +3433,7 @@ func (m *GetCryptocurrencyDepositAddressesRequest) Reset() { func (m *GetCryptocurrencyDepositAddressesRequest) String() string { return proto.CompactTextString(m) } func (*GetCryptocurrencyDepositAddressesRequest) ProtoMessage() {} func (*GetCryptocurrencyDepositAddressesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{64} + return fileDescriptor_77a6da22d6a3feb1, []int{66} } func (m *GetCryptocurrencyDepositAddressesRequest) XXX_Unmarshal(b []byte) error { @@ -3406,7 +3474,7 @@ func (m *GetCryptocurrencyDepositAddressesResponse) Reset() { func (m *GetCryptocurrencyDepositAddressesResponse) String() string { return proto.CompactTextString(m) } func (*GetCryptocurrencyDepositAddressesResponse) ProtoMessage() {} func (*GetCryptocurrencyDepositAddressesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{65} + return fileDescriptor_77a6da22d6a3feb1, []int{67} } func (m *GetCryptocurrencyDepositAddressesResponse) XXX_Unmarshal(b []byte) error { @@ -3448,7 +3516,7 @@ func (m *GetCryptocurrencyDepositAddressRequest) Reset() { func (m *GetCryptocurrencyDepositAddressRequest) String() string { return proto.CompactTextString(m) } func (*GetCryptocurrencyDepositAddressRequest) ProtoMessage() {} func (*GetCryptocurrencyDepositAddressRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{66} + return fileDescriptor_77a6da22d6a3feb1, []int{68} } func (m *GetCryptocurrencyDepositAddressRequest) XXX_Unmarshal(b []byte) error { @@ -3496,7 +3564,7 @@ func (m *GetCryptocurrencyDepositAddressResponse) Reset() { func (m *GetCryptocurrencyDepositAddressResponse) String() string { return proto.CompactTextString(m) } func (*GetCryptocurrencyDepositAddressResponse) ProtoMessage() {} func (*GetCryptocurrencyDepositAddressResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{67} + return fileDescriptor_77a6da22d6a3feb1, []int{69} } func (m *GetCryptocurrencyDepositAddressResponse) XXX_Unmarshal(b []byte) error { @@ -3551,7 +3619,7 @@ func (m *WithdrawCurrencyRequest) Reset() { *m = WithdrawCurrencyRequest func (m *WithdrawCurrencyRequest) String() string { return proto.CompactTextString(m) } func (*WithdrawCurrencyRequest) ProtoMessage() {} func (*WithdrawCurrencyRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{68} + return fileDescriptor_77a6da22d6a3feb1, []int{70} } func (m *WithdrawCurrencyRequest) XXX_Unmarshal(b []byte) error { @@ -3702,7 +3770,7 @@ func (m *WithdrawResponse) Reset() { *m = WithdrawResponse{} } func (m *WithdrawResponse) String() string { return proto.CompactTextString(m) } func (*WithdrawResponse) ProtoMessage() {} func (*WithdrawResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{69} + return fileDescriptor_77a6da22d6a3feb1, []int{71} } func (m *WithdrawResponse) XXX_Unmarshal(b []byte) error { @@ -3738,6 +3806,9 @@ func init() { proto.RegisterType((*GetExchangesRequest)(nil), "gctrpc.GetExchangesRequest") proto.RegisterType((*GetExchangesResponse)(nil), "gctrpc.GetExchangesResponse") proto.RegisterType((*GetExchangeOTPReponse)(nil), "gctrpc.GetExchangeOTPReponse") + proto.RegisterType((*GetExchangeOTPsRequest)(nil), "gctrpc.GetExchangeOTPsRequest") + proto.RegisterType((*GetExchangeOTPsResponse)(nil), "gctrpc.GetExchangeOTPsResponse") + proto.RegisterMapType((map[string]string)(nil), "gctrpc.GetExchangeOTPsResponse.OtpCodesEntry") proto.RegisterType((*DisableExchangeRequest)(nil), "gctrpc.DisableExchangeRequest") proto.RegisterType((*GetExchangeInfoResponse)(nil), "gctrpc.GetExchangeInfoResponse") proto.RegisterType((*GetTickerRequest)(nil), "gctrpc.GetTickerRequest") @@ -3812,227 +3883,232 @@ func init() { func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) } var fileDescriptor_77a6da22d6a3feb1 = []byte{ - // 3508 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x1a, 0x4d, 0x6f, 0xdc, 0xc6, - 0x15, 0x5c, 0x7d, 0xbf, 0x5d, 0x69, 0x57, 0xa3, 0xaf, 0xd5, 0x4a, 0xb2, 0xe5, 0x49, 0xed, 0xd8, - 0x4e, 0x62, 0x25, 0x8e, 0xd1, 0xa6, 0x49, 0x9a, 0x56, 0x91, 0x3f, 0x62, 0xa4, 0x89, 0x05, 0xda, - 0x71, 0x80, 0xa4, 0x28, 0x41, 0x91, 0xb3, 0x12, 0x21, 0x8a, 0x64, 0x48, 0xae, 0x64, 0x05, 0x05, - 0x0a, 0x04, 0xe8, 0xb5, 0x3d, 0x14, 0x05, 0x7a, 0xe8, 0xa5, 0xd7, 0x02, 0xbd, 0xf4, 0x07, 0x04, - 0xbd, 0x16, 0x3d, 0xf6, 0xd2, 0x1f, 0x50, 0xf4, 0xd6, 0x16, 0x3d, 0xf4, 0xd2, 0x53, 0x31, 0x6f, - 0x66, 0x48, 0x0e, 0xc9, 0x5d, 0xad, 0x9b, 0x36, 0x17, 0x89, 0x7c, 0xf3, 0xe6, 0x7d, 0xcf, 0x9b, - 0xf7, 0x1e, 0x17, 0xe6, 0xe2, 0xc8, 0xb9, 0x15, 0xc5, 0x61, 0x1a, 0x92, 0xe9, 0x43, 0x27, 0x8d, - 0x23, 0xa7, 0xb7, 0x79, 0x18, 0x86, 0x87, 0x3e, 0xdb, 0xb1, 0x23, 0x6f, 0xc7, 0x0e, 0x82, 0x30, - 0xb5, 0x53, 0x2f, 0x0c, 0x12, 0x81, 0x45, 0x3b, 0xb0, 0xf0, 0x80, 0xa5, 0x0f, 0x83, 0x7e, 0x68, - 0xb2, 0xcf, 0x06, 0x2c, 0x49, 0xe9, 0x3f, 0x0d, 0x68, 0x67, 0xa0, 0x24, 0x0a, 0x83, 0x84, 0x91, - 0x55, 0x98, 0x1e, 0x44, 0xa9, 0x77, 0xc2, 0xba, 0xc6, 0xb6, 0x71, 0x7d, 0xce, 0x94, 0x6f, 0x64, - 0x07, 0x96, 0xec, 0x53, 0xdb, 0xf3, 0xed, 0x03, 0x9f, 0x59, 0xec, 0x99, 0x73, 0x64, 0x07, 0x87, - 0x2c, 0xe9, 0x36, 0xb6, 0x8d, 0xeb, 0x13, 0x26, 0xc9, 0x96, 0xee, 0xa9, 0x15, 0xf2, 0x12, 0x2c, - 0xb2, 0x80, 0x83, 0xdc, 0x02, 0xfa, 0x04, 0xa2, 0x77, 0xe4, 0x42, 0x8e, 0x7c, 0x07, 0x56, 0x5d, - 0xd6, 0xb7, 0x07, 0x7e, 0x6a, 0xf5, 0xc3, 0x98, 0x3d, 0xb3, 0xa2, 0x38, 0x3c, 0xf5, 0x5c, 0x16, - 0x77, 0x27, 0x51, 0x8a, 0x65, 0xb9, 0x7a, 0x9f, 0x2f, 0xee, 0xcb, 0x35, 0x72, 0x1b, 0x56, 0xb2, - 0x5d, 0x9e, 0x9d, 0x5a, 0xce, 0x20, 0x8e, 0x59, 0xe0, 0x9c, 0x77, 0xa7, 0x70, 0xd3, 0x92, 0xda, - 0xe4, 0xd9, 0xe9, 0x9e, 0x5c, 0xa2, 0x6f, 0x40, 0xef, 0x01, 0x0b, 0x58, 0xec, 0x39, 0x8a, 0xfb, - 0x87, 0xf6, 0x09, 0x93, 0x16, 0x21, 0x3d, 0x98, 0x55, 0xc2, 0x4a, 0xfd, 0xb3, 0x77, 0xba, 0x05, - 0x1b, 0xb5, 0x3b, 0x85, 0xe1, 0xe8, 0x0e, 0x2c, 0x3d, 0x60, 0x69, 0xa6, 0x92, 0xa2, 0xd8, 0x85, - 0x19, 0xa9, 0x2d, 0x12, 0x9c, 0x35, 0xd5, 0x2b, 0xbd, 0x03, 0xcb, 0xfa, 0x06, 0xe9, 0x81, 0x4d, - 0x98, 0xcb, 0x0d, 0x26, 0x84, 0xc8, 0x01, 0xf4, 0x36, 0xac, 0x14, 0x76, 0x3d, 0x7a, 0xb2, 0x6f, - 0x32, 0xb1, 0x6d, 0x1d, 0x66, 0xc3, 0x34, 0xb2, 0x9c, 0xd0, 0x55, 0xa2, 0xcf, 0x84, 0x69, 0xb4, - 0x17, 0xba, 0x8c, 0xde, 0x81, 0xd5, 0xbb, 0x5e, 0x52, 0x74, 0xcf, 0x38, 0xfa, 0x7e, 0x39, 0x01, - 0x6b, 0x05, 0x56, 0x5a, 0x94, 0x10, 0x98, 0x0c, 0xec, 0x2c, 0x46, 0xf0, 0xb9, 0xa8, 0x69, 0x43, - 0xd3, 0x94, 0xaf, 0x9c, 0xb2, 0xf8, 0x20, 0x4c, 0x18, 0x06, 0xc0, 0xac, 0xa9, 0x5e, 0xc9, 0x0b, - 0x30, 0x3f, 0x48, 0xbc, 0xe0, 0xd0, 0x4a, 0xec, 0xc0, 0x3d, 0x08, 0x9f, 0xa1, 0xbb, 0x67, 0xcd, - 0x16, 0x02, 0x1f, 0x0b, 0x18, 0xb9, 0x02, 0xad, 0xa3, 0x34, 0x8d, 0x2c, 0x1e, 0x87, 0xe1, 0x20, - 0x95, 0xde, 0x6d, 0x72, 0xd8, 0x13, 0x01, 0x22, 0x57, 0x61, 0x01, 0x51, 0x06, 0x09, 0x8b, 0xed, - 0x43, 0x16, 0xa4, 0xdd, 0x69, 0x44, 0x9a, 0xe7, 0xd0, 0x8f, 0x14, 0x90, 0x6c, 0x01, 0x20, 0x5a, - 0x14, 0x87, 0xcf, 0xce, 0xbb, 0x33, 0xc2, 0xb6, 0x1c, 0xb2, 0xcf, 0x01, 0xe4, 0x45, 0x68, 0x1f, - 0xd8, 0x09, 0x53, 0x71, 0xe4, 0xb1, 0xa4, 0x3b, 0x8b, 0x38, 0x0b, 0x1c, 0xbc, 0x97, 0x41, 0xc9, - 0x0d, 0xe8, 0x24, 0x83, 0x28, 0x0a, 0xe3, 0x94, 0xb9, 0x96, 0x9d, 0x24, 0x2c, 0x4d, 0xba, 0x73, - 0x88, 0xd9, 0xce, 0xe0, 0xbb, 0x08, 0xe6, 0x1a, 0xaa, 0x63, 0x10, 0xd9, 0x5e, 0x9c, 0x74, 0x01, - 0xf1, 0x5a, 0x12, 0xb8, 0xcf, 0x61, 0x9c, 0x71, 0x7e, 0xb8, 0x04, 0x5a, 0x53, 0x30, 0xce, 0xc0, - 0x02, 0xf1, 0x25, 0x58, 0xb4, 0x07, 0xe9, 0x11, 0x0b, 0x52, 0xcf, 0xb1, 0x91, 0x79, 0xe4, 0x75, - 0x5b, 0x68, 0xb3, 0x8e, 0xb6, 0xb0, 0x1b, 0x79, 0xf4, 0x0c, 0x3a, 0x0f, 0x58, 0xfa, 0xc4, 0x73, - 0x8e, 0x59, 0x3c, 0x86, 0xc3, 0xc9, 0x75, 0x98, 0xe4, 0xbc, 0xd1, 0x7b, 0xcd, 0xdb, 0xcb, 0xb7, - 0x44, 0x56, 0xb9, 0xa5, 0x8e, 0x0e, 0x97, 0xc0, 0x44, 0x0c, 0x6e, 0x47, 0xd4, 0xda, 0x4a, 0xcf, - 0x23, 0xe1, 0xd3, 0x39, 0x73, 0x0e, 0x21, 0x4f, 0xce, 0x23, 0x46, 0x9f, 0x42, 0xab, 0xb8, 0x89, - 0x47, 0xb4, 0xcb, 0x7c, 0xef, 0xc4, 0x4b, 0x59, 0xac, 0x22, 0x3a, 0x03, 0xf0, 0x58, 0xe2, 0xe6, - 0x45, 0xb6, 0x73, 0x26, 0x3e, 0x93, 0x65, 0x98, 0xfa, 0x6c, 0x10, 0xa6, 0x8a, 0xb6, 0x78, 0xa1, - 0xbf, 0x68, 0xc0, 0x82, 0x52, 0x47, 0x06, 0xa2, 0x92, 0xd9, 0xb8, 0x50, 0xe6, 0x2b, 0xd0, 0xf2, - 0xed, 0x24, 0xb5, 0x06, 0x91, 0xcb, 0x0d, 0x24, 0x33, 0x57, 0x93, 0xc3, 0x3e, 0x12, 0x20, 0xee, - 0x2b, 0x95, 0x42, 0xd0, 0x0b, 0x92, 0x7b, 0xcb, 0x29, 0x2a, 0x43, 0x60, 0x92, 0xef, 0xc1, 0x48, - 0x35, 0x4c, 0x7c, 0xe6, 0xb0, 0x23, 0xef, 0xf0, 0x08, 0x23, 0xd3, 0x30, 0xf1, 0x99, 0x74, 0x60, - 0xc2, 0x0f, 0xcf, 0x30, 0x0e, 0x0d, 0x93, 0x3f, 0x72, 0xc8, 0x81, 0xe7, 0x62, 0xd8, 0x19, 0x26, - 0x7f, 0xe4, 0x10, 0x3b, 0x39, 0xc6, 0x20, 0x33, 0x4c, 0xfe, 0xc8, 0xd3, 0xef, 0x69, 0xe8, 0x0f, - 0x4e, 0x18, 0xc6, 0x93, 0x61, 0xca, 0x37, 0xb2, 0x01, 0x73, 0x51, 0xec, 0x39, 0xcc, 0xb2, 0xd3, - 0x23, 0x0c, 0x21, 0xc3, 0x9c, 0x45, 0xc0, 0x6e, 0x7a, 0x44, 0x97, 0x60, 0x31, 0x73, 0xb4, 0x4a, - 0x3c, 0xf4, 0x63, 0x98, 0x91, 0x90, 0x91, 0x4e, 0x7f, 0x15, 0x66, 0x52, 0x81, 0xd6, 0x6d, 0x6c, - 0x4f, 0x5c, 0x6f, 0xde, 0x5e, 0x55, 0x36, 0xd4, 0x2d, 0x6d, 0x2a, 0x34, 0xfa, 0x5d, 0x20, 0x45, - 0x6e, 0xd2, 0x11, 0x37, 0x72, 0x3a, 0x06, 0xd2, 0x69, 0xeb, 0x74, 0x92, 0x9c, 0xc0, 0xe7, 0x98, - 0x29, 0x1f, 0xc5, 0x2e, 0x4f, 0x02, 0xe1, 0xf1, 0xd7, 0x1a, 0x9a, 0x1f, 0xc0, 0x7c, 0xc6, 0xf8, - 0x61, 0xca, 0x4e, 0xb8, 0xc1, 0xed, 0x93, 0x70, 0x10, 0xa4, 0xc8, 0xd3, 0x30, 0xe5, 0x1b, 0x8f, - 0x40, 0xb4, 0x2f, 0xb2, 0x34, 0x4c, 0xf1, 0x42, 0x16, 0xa0, 0xe1, 0xb9, 0xf2, 0x16, 0x6b, 0x78, - 0x2e, 0xfd, 0xb7, 0x01, 0x8b, 0x05, 0x45, 0x9e, 0x3b, 0x28, 0x2b, 0x11, 0xd7, 0xa8, 0x89, 0xb8, - 0x1b, 0x30, 0x79, 0xe0, 0xb9, 0xfc, 0xf2, 0xe4, 0x76, 0x5d, 0x51, 0xe4, 0x34, 0x3d, 0x4c, 0x44, - 0xe1, 0xa8, 0x76, 0x72, 0x9c, 0x74, 0x27, 0x47, 0xa2, 0x72, 0x94, 0xca, 0x79, 0x98, 0xaa, 0x9e, - 0x07, 0xdd, 0x96, 0xd3, 0x65, 0x5b, 0xae, 0xe2, 0x05, 0x96, 0xd1, 0xce, 0x22, 0xcf, 0x01, 0xc8, - 0x81, 0x23, 0xdd, 0xfa, 0x6d, 0x80, 0x30, 0xc3, 0x94, 0xf1, 0xb7, 0x5e, 0x11, 0x3a, 0x0b, 0xc1, - 0x02, 0x32, 0x7d, 0x1f, 0xef, 0xc1, 0x22, 0x73, 0x69, 0xfc, 0xdb, 0x1a, 0x4d, 0x11, 0x8b, 0xa4, - 0x42, 0x33, 0xd1, 0x88, 0xbd, 0x8e, 0xc4, 0x76, 0x1d, 0x87, 0xbb, 0xbe, 0x50, 0x21, 0x8d, 0xbc, - 0x1f, 0x9f, 0xc2, 0x8c, 0xdc, 0x21, 0xc3, 0x42, 0x20, 0x34, 0x3c, 0x97, 0xbc, 0x05, 0x50, 0xb8, - 0x43, 0x84, 0x5e, 0x1b, 0x4a, 0x06, 0xb9, 0x49, 0x45, 0x03, 0xb2, 0x2b, 0xa0, 0xd3, 0x3e, 0x2c, - 0xd5, 0xa0, 0x70, 0x51, 0xb2, 0xfa, 0x46, 0x8a, 0xa2, 0xde, 0xc9, 0x65, 0x68, 0xa6, 0x61, 0x6a, - 0xfb, 0xd6, 0xa9, 0xed, 0x0f, 0x54, 0xc8, 0x02, 0x82, 0x9e, 0x72, 0x08, 0x26, 0xa8, 0xd0, 0x17, - 0x91, 0xcb, 0x13, 0x54, 0xe8, 0xbb, 0xd4, 0x86, 0xd5, 0xb2, 0xd2, 0xd2, 0x84, 0xa3, 0x5c, 0xf6, - 0x12, 0xcc, 0xda, 0x62, 0x8b, 0x52, 0xac, 0x5d, 0x52, 0xcc, 0xcc, 0x10, 0x28, 0xc1, 0x1b, 0x68, - 0x2f, 0x0c, 0xfa, 0xde, 0xa1, 0x8a, 0x8e, 0x17, 0x31, 0x59, 0x29, 0x58, 0x5e, 0x4f, 0xb8, 0x76, - 0x6a, 0x23, 0xb7, 0x96, 0x89, 0xcf, 0xf4, 0x27, 0x06, 0x74, 0xf6, 0xc3, 0x38, 0xed, 0x87, 0xbe, - 0x17, 0xee, 0xba, 0x6e, 0xcc, 0x92, 0x84, 0x97, 0x12, 0xb6, 0x78, 0x54, 0x45, 0x8e, 0x7c, 0xe5, - 0x19, 0xd2, 0x09, 0xbd, 0x40, 0xc4, 0x6a, 0x43, 0x1a, 0x28, 0xf4, 0x02, 0x1e, 0xaa, 0x64, 0x1b, - 0x9a, 0x2e, 0x4b, 0x9c, 0xd8, 0x8b, 0x78, 0x45, 0x2c, 0xd3, 0x42, 0x11, 0xc4, 0x09, 0x1f, 0xd8, - 0xbe, 0x1d, 0x38, 0x4c, 0x66, 0x76, 0xf5, 0x4a, 0x57, 0x30, 0x5d, 0x65, 0x92, 0x28, 0x3d, 0x3e, - 0xc4, 0xe8, 0x2f, 0x80, 0xa5, 0x2a, 0xdf, 0x84, 0xb9, 0x48, 0x01, 0x65, 0xf8, 0x75, 0x95, 0x85, - 0xca, 0xea, 0x98, 0x39, 0x2a, 0xdd, 0xe4, 0x85, 0x69, 0x4e, 0xef, 0xf1, 0xe0, 0xe4, 0xc4, 0x8e, - 0xcf, 0x15, 0xb7, 0x00, 0x26, 0xf7, 0x42, 0x2f, 0xe0, 0x86, 0xe2, 0x4a, 0xa9, 0xc2, 0x8b, 0x3f, - 0x17, 0x45, 0x6f, 0x68, 0xa2, 0x17, 0xad, 0x35, 0xa1, 0x5b, 0xeb, 0x12, 0x40, 0xc4, 0x62, 0x87, - 0x05, 0xa9, 0x7d, 0xa8, 0x34, 0x2e, 0x40, 0xe8, 0x11, 0x90, 0x47, 0xfd, 0xbe, 0xef, 0x05, 0x8c, - 0xb3, 0x95, 0xc2, 0x8c, 0xb0, 0xfe, 0x70, 0x19, 0x74, 0x4e, 0x13, 0x15, 0x4e, 0x1f, 0xc0, 0xe2, - 0xa3, 0xa0, 0x86, 0x91, 0x22, 0x67, 0x8c, 0x22, 0xd7, 0xa8, 0x90, 0x7b, 0x0f, 0x5a, 0x05, 0xc1, - 0x13, 0xf2, 0x06, 0xcc, 0x49, 0x19, 0x99, 0xca, 0x06, 0xbd, 0x2c, 0x1b, 0x54, 0x34, 0x34, 0x73, - 0x64, 0xfa, 0x4b, 0x03, 0x9a, 0xb9, 0x64, 0xbc, 0x47, 0x99, 0xe2, 0xe6, 0x56, 0x54, 0x2e, 0x65, - 0x54, 0x72, 0x9c, 0x5b, 0xf8, 0xf7, 0x5e, 0x90, 0xc6, 0xe7, 0xa6, 0x40, 0xee, 0x3d, 0x06, 0xc8, - 0x81, 0xfc, 0xc2, 0x3f, 0x66, 0xea, 0xfc, 0xf2, 0x47, 0xb2, 0x03, 0x53, 0xf9, 0xa1, 0x2d, 0x66, - 0xbf, 0xb2, 0x4d, 0x4c, 0x81, 0xf7, 0x66, 0xe3, 0x0d, 0x83, 0xfe, 0x71, 0x92, 0xf7, 0x22, 0x35, - 0xc1, 0x22, 0x63, 0xf0, 0x15, 0x68, 0x8a, 0xb3, 0xc0, 0x33, 0x80, 0x12, 0xb8, 0x95, 0xdd, 0x43, - 0xa1, 0x17, 0x98, 0x80, 0x67, 0x03, 0xd7, 0xc9, 0x6b, 0x30, 0x8f, 0xc2, 0x5a, 0xa1, 0x30, 0x88, - 0x3c, 0xd8, 0xfa, 0x86, 0x16, 0xa2, 0x48, 0x93, 0x91, 0x08, 0x56, 0xb4, 0x2d, 0x56, 0x22, 0x44, - 0x90, 0x97, 0xd4, 0xdb, 0x6a, 0xeb, 0x08, 0x29, 0x85, 0xb1, 0x24, 0x41, 0xb9, 0x26, 0x4c, 0xb7, - 0xe4, 0x54, 0x57, 0xc8, 0x0e, 0xb4, 0x24, 0x47, 0xb4, 0x8c, 0xbc, 0xe2, 0x74, 0x19, 0x9b, 0x62, - 0x23, 0x22, 0x90, 0x13, 0x58, 0x2e, 0x6e, 0xc8, 0x24, 0x9c, 0xc2, 0x8d, 0x6f, 0x8d, 0x2f, 0x61, - 0x50, 0x11, 0x90, 0x38, 0x95, 0x85, 0xde, 0x0f, 0xa0, 0x3b, 0x4c, 0xa1, 0x1a, 0xb7, 0xdf, 0xd4, - 0xdd, 0xbe, 0x5c, 0x13, 0x92, 0x49, 0xc1, 0xe3, 0xbd, 0x4f, 0x60, 0x6d, 0x88, 0x30, 0x35, 0xc4, - 0x6f, 0xe8, 0xc4, 0x97, 0x6a, 0x22, 0xb5, 0x18, 0x4d, 0x3f, 0x33, 0xa0, 0xb7, 0xeb, 0xba, 0x95, - 0xe4, 0x94, 0x77, 0xb0, 0x5f, 0x77, 0xca, 0xdd, 0x82, 0x8d, 0x5a, 0x81, 0x64, 0xab, 0xfd, 0x0c, - 0xb6, 0x4c, 0x76, 0x12, 0x9e, 0xb2, 0xaf, 0x5b, 0x64, 0xba, 0x0d, 0x97, 0x86, 0x71, 0x96, 0xb2, - 0xf5, 0xa0, 0xfb, 0x80, 0xe9, 0x73, 0x8a, 0xac, 0x30, 0xfa, 0x9b, 0x01, 0xf3, 0xfa, 0x04, 0xe3, - 0x7f, 0xd5, 0x47, 0xbf, 0x0c, 0x24, 0x66, 0x49, 0x6a, 0xc5, 0xa1, 0xef, 0xf3, 0x76, 0xda, 0x65, - 0xbe, 0x7d, 0x2e, 0x67, 0x27, 0x1d, 0xbe, 0x62, 0x8a, 0x85, 0xbb, 0x1c, 0x4e, 0xd6, 0x60, 0xc6, - 0x8e, 0x3c, 0x8b, 0x47, 0x8d, 0xe8, 0xa5, 0xa7, 0xed, 0xc8, 0x7b, 0x9f, 0x9d, 0x13, 0x0a, 0xf3, - 0x72, 0xc1, 0xf2, 0xd9, 0x29, 0xf3, 0xb1, 0xe6, 0x9b, 0x30, 0x9b, 0x62, 0xf9, 0xfb, 0x1c, 0xc4, - 0x7b, 0xdf, 0x28, 0xf6, 0x78, 0xf8, 0xe5, 0x43, 0x9a, 0x19, 0x94, 0xa6, 0x2d, 0xe1, 0x4a, 0x3b, - 0xfa, 0x29, 0xac, 0xd7, 0xd8, 0x42, 0xe6, 0xa8, 0x77, 0xa0, 0xad, 0x8f, 0x7a, 0x54, 0x9e, 0xca, - 0xaa, 0x56, 0x6d, 0xa3, 0xb9, 0xd0, 0xd7, 0xe8, 0xc8, 0xea, 0x13, 0x71, 0x4c, 0x3b, 0xcd, 0x06, - 0x2e, 0xf4, 0x33, 0x58, 0xce, 0x81, 0x7b, 0x61, 0x70, 0xca, 0xe2, 0x84, 0x47, 0x1b, 0x81, 0xc9, - 0x7e, 0x1c, 0x9e, 0x28, 0x53, 0xf3, 0x67, 0x5e, 0xb7, 0xa5, 0xa1, 0x0c, 0x83, 0x46, 0x1a, 0x72, - 0x9c, 0xd8, 0x4e, 0xd5, 0x2d, 0x85, 0xcf, 0xbc, 0x4e, 0xf6, 0x90, 0x08, 0xb3, 0x70, 0x4d, 0x84, - 0x6a, 0x53, 0xc2, 0x38, 0x17, 0xfa, 0x14, 0xcb, 0xc7, 0xa2, 0x28, 0x52, 0xc7, 0xef, 0x40, 0x53, - 0xe8, 0xc8, 0x77, 0x2a, 0xfd, 0x36, 0x35, 0xfd, 0x4a, 0x62, 0x9a, 0xd0, 0xcf, 0xa0, 0xf4, 0x1f, - 0x0d, 0x68, 0x61, 0xc5, 0x7a, 0x97, 0xa5, 0xb6, 0xe7, 0x8f, 0xae, 0xa5, 0x45, 0x0d, 0xda, 0xc8, - 0x6a, 0xd0, 0x17, 0x60, 0xbe, 0x38, 0xcc, 0x38, 0x57, 0xcd, 0x6c, 0x61, 0x94, 0x71, 0x4e, 0xae, - 0xc2, 0x02, 0xb6, 0xd6, 0x39, 0x96, 0x88, 0x99, 0x79, 0x84, 0x66, 0x68, 0x7a, 0x23, 0x30, 0x55, - 0x6a, 0x04, 0xf8, 0x32, 0x16, 0xd3, 0x56, 0xe2, 0xb9, 0x59, 0x9f, 0x80, 0x90, 0xc7, 0x9e, 0x5b, - 0x58, 0xc6, 0xdd, 0x33, 0x85, 0x65, 0xdc, 0xcd, 0x7b, 0xa0, 0x98, 0xe1, 0xa8, 0x12, 0x47, 0x3c, - 0xd8, 0x0e, 0x4f, 0x98, 0x2d, 0x05, 0x7c, 0xe2, 0x9d, 0xe0, 0x58, 0x32, 0x49, 0xed, 0x74, 0xa0, - 0xe6, 0x2c, 0xf2, 0x2d, 0x6f, 0xd3, 0xa0, 0xd8, 0xa6, 0xe5, 0x4d, 0x5d, 0x53, 0x6b, 0xea, 0x2e, - 0x43, 0x33, 0x8c, 0x58, 0x60, 0xc9, 0x16, 0xbb, 0x25, 0xaa, 0x07, 0x0e, 0x7a, 0x8a, 0x10, 0x39, - 0x32, 0x41, 0x9b, 0x27, 0xe3, 0xf4, 0xa5, 0xba, 0x61, 0x1a, 0x65, 0xc3, 0xa8, 0x46, 0x70, 0xe2, - 0xa2, 0x46, 0x90, 0xee, 0x62, 0x55, 0xac, 0x18, 0xcb, 0xf0, 0x79, 0x19, 0xa6, 0xd1, 0x4c, 0x2a, - 0x72, 0x96, 0xb5, 0x36, 0x46, 0x06, 0x85, 0x29, 0x71, 0xe8, 0x7b, 0x38, 0xcc, 0xc5, 0xa5, 0x71, - 0x44, 0x5f, 0x87, 0x59, 0xe1, 0x95, 0x2c, 0x6a, 0x66, 0xf0, 0xfd, 0xa1, 0x4b, 0xff, 0x6c, 0x00, - 0x79, 0x3c, 0x38, 0x38, 0xf1, 0xc6, 0xa7, 0x36, 0x7e, 0x83, 0x4e, 0x60, 0x12, 0xc3, 0x44, 0x84, - 0x23, 0x3e, 0x97, 0x22, 0x64, 0xb2, 0x1c, 0x21, 0xb9, 0x3b, 0xa7, 0xea, 0x7b, 0xf4, 0xe9, 0xa2, - 0xf3, 0x79, 0x8a, 0xf7, 0x3d, 0x16, 0xa4, 0x96, 0x1c, 0xb6, 0xf0, 0x14, 0x8f, 0x80, 0x87, 0x2e, - 0x7d, 0x0c, 0x4b, 0x9a, 0x66, 0xd2, 0xd2, 0x57, 0xa0, 0x25, 0x04, 0x88, 0x7c, 0xdb, 0xc9, 0x46, - 0xb5, 0x4d, 0x84, 0xed, 0x23, 0x68, 0x94, 0xbd, 0xfe, 0x6e, 0x00, 0xd9, 0xe3, 0x17, 0x97, 0x3f, - 0xb6, 0xbd, 0x78, 0xe0, 0x88, 0x2e, 0x29, 0xa7, 0x37, 0x27, 0x21, 0x0f, 0x75, 0x66, 0x13, 0x1a, - 0xb3, 0xcc, 0xd2, 0x93, 0xcf, 0x39, 0x0a, 0xa9, 0x9c, 0xda, 0xab, 0xb0, 0x70, 0x66, 0xfb, 0x3e, - 0x4b, 0x2d, 0x75, 0x57, 0xca, 0x99, 0xa9, 0x80, 0xaa, 0x8e, 0x4b, 0xf9, 0x6b, 0x26, 0xf7, 0x17, - 0x6f, 0x89, 0x34, 0x7d, 0xe5, 0xdd, 0x77, 0x07, 0x56, 0x05, 0x78, 0xd7, 0xf7, 0xc7, 0x3e, 0x43, - 0xf4, 0x57, 0x0d, 0x58, 0xab, 0x6c, 0xcb, 0x2e, 0x09, 0xfd, 0x04, 0x5c, 0xcb, 0xd4, 0xad, 0xdf, - 0x70, 0x4b, 0xbe, 0xca, 0x5d, 0xbd, 0xdf, 0x1b, 0x30, 0x2d, 0x40, 0x23, 0xbd, 0xf1, 0x89, 0x72, - 0xbf, 0xcc, 0x31, 0xa2, 0xfe, 0xfd, 0xd6, 0x78, 0xcc, 0xc4, 0xbf, 0xc7, 0xb8, 0x53, 0x94, 0x87, - 0x22, 0x6e, 0x04, 0xa4, 0xf7, 0x0e, 0x74, 0xca, 0x08, 0x35, 0x25, 0xdb, 0x72, 0xb1, 0x64, 0x9b, - 0x2b, 0x56, 0x67, 0xa2, 0x87, 0xbe, 0x77, 0xca, 0x82, 0x34, 0xbb, 0xe3, 0xbe, 0x34, 0xa0, 0xbd, - 0x17, 0x06, 0xae, 0xc7, 0xf3, 0xe3, 0xbe, 0x1d, 0xdb, 0x27, 0x09, 0xd9, 0xe4, 0x95, 0x8d, 0x04, - 0xa9, 0x21, 0x6b, 0x06, 0x18, 0x32, 0xce, 0xda, 0x02, 0x70, 0x8e, 0x98, 0x73, 0x6c, 0xc9, 0xf9, - 0x12, 0x0f, 0xfa, 0x39, 0x84, 0xbc, 0xeb, 0xb9, 0x09, 0x79, 0x05, 0x96, 0xf2, 0x65, 0xcb, 0x0e, - 0x5c, 0x4b, 0x0e, 0x97, 0x70, 0xde, 0x9c, 0xe1, 0xed, 0x06, 0xee, 0x6e, 0x72, 0x8c, 0x53, 0xf1, - 0x6c, 0xa6, 0x62, 0x69, 0x07, 0xb6, 0x9d, 0xc1, 0x77, 0x11, 0x4c, 0xff, 0x65, 0x60, 0xbe, 0x53, - 0x5a, 0x49, 0x6f, 0xe7, 0x63, 0x14, 0x9c, 0xae, 0x69, 0x2e, 0x6b, 0x94, 0x5c, 0x46, 0x60, 0xd2, - 0x4b, 0xd9, 0x89, 0x4a, 0x23, 0xfc, 0x99, 0xbc, 0x0b, 0x9d, 0x4c, 0x63, 0x2b, 0x42, 0xb3, 0xc8, - 0x63, 0xb2, 0x96, 0xb7, 0x09, 0x9a, 0xd5, 0xcc, 0xb6, 0x53, 0x32, 0xa3, 0x3a, 0x5e, 0x53, 0x17, - 0x1e, 0x2f, 0x9e, 0x95, 0x1c, 0xb4, 0xf6, 0xb4, 0x2c, 0xa2, 0xf0, 0x4d, 0x48, 0xcd, 0x9c, 0x41, - 0xca, 0x5c, 0x59, 0x18, 0x65, 0xef, 0xf4, 0xaf, 0x06, 0xb4, 0x77, 0x5d, 0x17, 0xf5, 0x1e, 0x27, - 0x4d, 0x28, 0x2d, 0x1b, 0x17, 0x68, 0x39, 0xf1, 0x5f, 0x6a, 0xf9, 0x95, 0x93, 0xc8, 0x10, 0x23, - 0x50, 0x0a, 0x9d, 0x5c, 0xcf, 0x7a, 0xf7, 0xd2, 0x6f, 0x00, 0x11, 0xc5, 0xb4, 0x66, 0x8e, 0x32, - 0xd6, 0x0a, 0x2c, 0x69, 0x58, 0x32, 0xd7, 0xdc, 0x87, 0xeb, 0x0f, 0x58, 0xba, 0x17, 0x9f, 0x47, - 0x69, 0xa8, 0x8a, 0x97, 0xbb, 0x2c, 0x0a, 0x13, 0x4f, 0x65, 0x2e, 0x36, 0x56, 0xf6, 0xf9, 0x83, - 0x01, 0x37, 0xc6, 0x20, 0x24, 0x55, 0xf8, 0x61, 0x75, 0x9a, 0xf0, 0xbd, 0x42, 0x23, 0x39, 0x1e, - 0x95, 0x5b, 0x19, 0x44, 0xa4, 0x8b, 0x9c, 0x64, 0xef, 0x6d, 0x58, 0xd0, 0x17, 0x9f, 0x2b, 0x55, - 0xf8, 0x70, 0xed, 0x02, 0x21, 0xc6, 0x89, 0xb9, 0x6b, 0xb0, 0xe0, 0x68, 0x24, 0x24, 0xa3, 0x12, - 0x94, 0xee, 0xc1, 0x8b, 0x17, 0x72, 0x93, 0x66, 0x1b, 0xda, 0x8f, 0xd1, 0xdf, 0x4e, 0xc2, 0xda, - 0xc7, 0x5e, 0x7a, 0xe4, 0xc6, 0xf6, 0x99, 0x8a, 0xbe, 0x71, 0x84, 0x2c, 0xb5, 0x6a, 0x8d, 0x6a, - 0x77, 0x79, 0x13, 0x16, 0xc3, 0x80, 0x61, 0x45, 0x69, 0x45, 0x76, 0x92, 0x9c, 0x85, 0xb1, 0xba, - 0x4b, 0xdb, 0x61, 0xc0, 0x78, 0x55, 0xb9, 0x2f, 0xc1, 0xa5, 0xdb, 0x78, 0xb2, 0x7c, 0x1b, 0x77, - 0x60, 0x22, 0xf2, 0x02, 0x39, 0x21, 0xe7, 0x8f, 0xfc, 0xee, 0x4c, 0x63, 0xdb, 0x2d, 0x50, 0x96, - 0x77, 0x27, 0x42, 0x33, 0xba, 0xc5, 0x99, 0xed, 0x4c, 0x69, 0x66, 0x5b, 0xb0, 0xc9, 0xac, 0xde, - 0xa3, 0x5e, 0x86, 0xa6, 0x7c, 0xb4, 0x52, 0xfb, 0x50, 0x16, 0xbc, 0x20, 0x41, 0x4f, 0xec, 0xc3, - 0x42, 0x3d, 0x04, 0x5a, 0x3d, 0xb4, 0x05, 0xd0, 0x67, 0xcc, 0xd2, 0x4a, 0xdf, 0xb9, 0x3e, 0x63, - 0x22, 0xe9, 0xf2, 0xc2, 0xe8, 0xc0, 0x0e, 0x8e, 0x2d, 0xec, 0x38, 0x5b, 0x42, 0x1c, 0x0e, 0xf8, - 0x90, 0x77, 0x9d, 0x57, 0xa0, 0x85, 0x8b, 0x4a, 0xa6, 0x79, 0x61, 0x51, 0x0e, 0xdb, 0xcd, 0x7b, - 0x67, 0x44, 0x71, 0xbc, 0xf4, 0xbc, 0xbb, 0x90, 0xef, 0xdf, 0xf3, 0xd2, 0xf3, 0x6c, 0x3f, 0xda, - 0x2c, 0x3e, 0xef, 0xb6, 0xf3, 0xfd, 0x7b, 0x02, 0xc4, 0xc5, 0x4b, 0xce, 0xbc, 0x3e, 0x13, 0xdf, - 0xa8, 0x3b, 0xc2, 0xca, 0x08, 0xd9, 0x0b, 0x5d, 0xec, 0x03, 0xce, 0xbc, 0xb8, 0xd0, 0x8a, 0x2c, - 0x8a, 0x86, 0x85, 0x03, 0xb3, 0xcf, 0xf7, 0x37, 0xa1, 0xa3, 0xc2, 0xa5, 0xf8, 0x93, 0x85, 0x98, - 0x25, 0x03, 0x3f, 0x55, 0x3f, 0x59, 0x10, 0x6f, 0xb7, 0x7f, 0xdd, 0x83, 0x85, 0x07, 0xa1, 0x08, - 0xd0, 0x27, 0xdc, 0x2f, 0x31, 0x79, 0x04, 0x33, 0xf2, 0x07, 0x0f, 0x64, 0xb5, 0x70, 0x6e, 0x0b, - 0x23, 0xff, 0xde, 0x5a, 0x05, 0x2e, 0x33, 0xce, 0xd2, 0x17, 0x7f, 0xfa, 0xcb, 0xcf, 0x1b, 0xf3, - 0xa4, 0xb9, 0x73, 0xfa, 0xda, 0xce, 0x21, 0x4b, 0x3d, 0x4e, 0xc5, 0x81, 0x56, 0xf1, 0x23, 0x3e, - 0xd9, 0x28, 0xec, 0x2e, 0xff, 0x16, 0xa0, 0xb7, 0x59, 0xbf, 0x28, 0xe9, 0x77, 0x91, 0x3e, 0x21, - 0x1d, 0x49, 0x3f, 0xfb, 0xe6, 0x4f, 0x3e, 0x87, 0x76, 0xe9, 0xfb, 0x3d, 0xa1, 0x39, 0xa9, 0x61, - 0x3f, 0x66, 0xe8, 0xbd, 0x30, 0x12, 0x47, 0x72, 0xbd, 0x84, 0x5c, 0xbb, 0x74, 0x89, 0x73, 0x75, - 0x05, 0x17, 0xc5, 0xf9, 0x4d, 0xe3, 0x26, 0x49, 0xb0, 0xab, 0x28, 0xfe, 0x08, 0x60, 0x2c, 0xde, - 0x97, 0x6b, 0x54, 0xd5, 0xac, 0xb9, 0x81, 0x7c, 0x57, 0xc8, 0x52, 0x49, 0x5b, 0xb4, 0x6a, 0x82, - 0x9f, 0x18, 0x0b, 0x3f, 0x72, 0xc0, 0x00, 0x19, 0x87, 0xef, 0x56, 0x0d, 0xdf, 0xfc, 0x47, 0x12, - 0xb4, 0x87, 0x5c, 0x97, 0x09, 0x29, 0x71, 0x0d, 0xd3, 0x88, 0x3c, 0x83, 0x85, 0x7b, 0xc1, 0xff, - 0xc7, 0xc8, 0x5b, 0xc8, 0x76, 0x8d, 0x22, 0x5b, 0x31, 0xcd, 0x29, 0xda, 0xf8, 0x63, 0x98, 0xcb, - 0xbe, 0xa8, 0x92, 0x6e, 0x41, 0x03, 0xed, 0xdb, 0x7d, 0x6f, 0xc8, 0x97, 0x59, 0x15, 0x38, 0x74, - 0x5e, 0x2a, 0x25, 0xbe, 0xb3, 0x72, 0xc2, 0x9f, 0x02, 0xe4, 0x9f, 0x6a, 0xc9, 0x7a, 0x85, 0x72, - 0x16, 0x99, 0xbd, 0xba, 0x25, 0x49, 0x7e, 0x15, 0xc9, 0x77, 0xc8, 0x82, 0x46, 0x3e, 0x91, 0xa1, - 0x9f, 0x7d, 0x51, 0xd3, 0x42, 0xbf, 0xfc, 0x71, 0xb7, 0x37, 0xfc, 0xab, 0x9e, 0x8a, 0x04, 0xaa, - 0xe2, 0x3e, 0xab, 0x15, 0xb9, 0x06, 0x87, 0x30, 0xaf, 0x7d, 0xe6, 0x23, 0x9b, 0x75, 0x5c, 0x92, - 0x3a, 0xf7, 0x57, 0xbf, 0x0d, 0xd2, 0x75, 0x64, 0xb5, 0x44, 0x16, 0xcb, 0xac, 0x12, 0x72, 0x8c, - 0xbf, 0x8e, 0x2a, 0x7c, 0x0d, 0x23, 0x45, 0x5a, 0xd5, 0x4f, 0x83, 0xbd, 0x4b, 0xc3, 0x96, 0x93, - 0xfa, 0x50, 0x93, 0xd7, 0x09, 0xc6, 0xb7, 0x70, 0xb8, 0xf8, 0x06, 0xa6, 0x39, 0x5c, 0xfb, 0x54, - 0xd6, 0x5b, 0xaf, 0x59, 0x91, 0xd4, 0x57, 0x90, 0x7a, 0x9b, 0x28, 0x9f, 0x3b, 0x82, 0x96, 0xf0, - 0x49, 0x36, 0x9c, 0xd4, 0x7c, 0x52, 0xfe, 0x82, 0xa5, 0xa5, 0xa3, 0xca, 0x77, 0xac, 0x4a, 0x3a, - 0xca, 0xbe, 0x54, 0x91, 0x1f, 0xeb, 0x1f, 0xc4, 0xd4, 0x80, 0x9e, 0x8e, 0x9c, 0xa8, 0x57, 0x4e, - 0xcb, 0xd0, 0xa9, 0x3b, 0xbd, 0x8c, 0x9c, 0xd7, 0xc9, 0x5a, 0x99, 0xb3, 0x9c, 0xe0, 0x93, 0x2f, - 0x0c, 0x58, 0xaa, 0x99, 0x0f, 0xe7, 0x12, 0x0c, 0x9f, 0x66, 0xe7, 0x12, 0x8c, 0x1a, 0x30, 0x53, - 0x94, 0x60, 0x93, 0xa2, 0x04, 0xb6, 0xeb, 0x66, 0x12, 0xc8, 0xdb, 0x91, 0x47, 0xe6, 0x4f, 0x0d, - 0x58, 0xad, 0x9f, 0x05, 0x93, 0xab, 0x8a, 0xc7, 0xc8, 0x29, 0x75, 0xef, 0xda, 0x45, 0x68, 0x52, - 0x9a, 0xab, 0x28, 0xcd, 0x65, 0xda, 0xe3, 0xd2, 0xc4, 0x88, 0x5b, 0x27, 0xd0, 0x19, 0xb6, 0x54, - 0xfa, 0xb4, 0x95, 0x6c, 0x17, 0x0c, 0x5e, 0x3b, 0x94, 0xee, 0x5d, 0x19, 0x81, 0xa1, 0xa7, 0x2f, - 0xb2, 0x22, 0x1d, 0x82, 0x23, 0xca, 0x6c, 0x6c, 0x2b, 0xcf, 0x68, 0x3e, 0xcd, 0xd4, 0xce, 0x68, - 0x65, 0x40, 0xab, 0x9d, 0xd1, 0xea, 0xcc, 0xb4, 0x72, 0x46, 0x91, 0x19, 0xce, 0x4f, 0xc9, 0x27, - 0x78, 0x6c, 0x64, 0x3f, 0xdf, 0x2d, 0x1f, 0xf5, 0xa4, 0xee, 0xd8, 0xe8, 0x1d, 0x7b, 0x25, 0x55, - 0x8a, 0x31, 0x01, 0xb7, 0x9e, 0x09, 0xb3, 0x0a, 0x9d, 0xac, 0x95, 0x09, 0x28, 0xca, 0xb5, 0x03, - 0x38, 0xba, 0x86, 0x44, 0x17, 0x69, 0xab, 0x48, 0x94, 0xd3, 0x3c, 0x80, 0x66, 0x61, 0xd8, 0x44, - 0xb2, 0x24, 0x5b, 0x9d, 0xad, 0xf5, 0x36, 0x6a, 0xd7, 0xf4, 0x54, 0x42, 0xdb, 0x9c, 0x41, 0x82, - 0x08, 0x45, 0x1e, 0x85, 0x51, 0x4c, 0xce, 0xa3, 0x3a, 0x8f, 0xca, 0x79, 0xd4, 0xcd, 0x6e, 0x34, - 0x1e, 0x0e, 0x22, 0x64, 0x3c, 0x62, 0x68, 0x97, 0x46, 0x20, 0xe4, 0xd2, 0xd0, 0xd9, 0x48, 0xe9, - 0xfe, 0x1f, 0x32, 0x3b, 0xd1, 0xeb, 0x0e, 0xc1, 0xcf, 0xf6, 0xfd, 0xdc, 0x1f, 0x22, 0x45, 0x8a, - 0x01, 0x81, 0xe6, 0x6b, 0x6d, 0x12, 0xa2, 0xf9, 0x5a, 0x9f, 0x26, 0x54, 0x52, 0x24, 0x13, 0xb4, - 0x9e, 0xc2, 0xac, 0xea, 0x4c, 0x73, 0x47, 0x97, 0x7a, 0xf2, 0x5e, 0xb7, 0xba, 0x20, 0xa9, 0x6a, - 0xce, 0xb6, 0x5d, 0x17, 0xa9, 0x4a, 0x47, 0x14, 0xfa, 0xd4, 0xdc, 0x11, 0xd5, 0x16, 0x37, 0x77, - 0x44, 0x5d, 0x63, 0xab, 0x39, 0x42, 0x9c, 0xf6, 0x8c, 0xc7, 0xef, 0x0c, 0xb8, 0x72, 0x61, 0x9b, - 0x49, 0x5e, 0x7d, 0x8e, 0x8e, 0x54, 0x08, 0xf4, 0xda, 0x73, 0xf7, 0xb0, 0xf4, 0x3a, 0x8a, 0x49, - 0xe9, 0x96, 0xba, 0x80, 0x70, 0x9b, 0x2b, 0xd0, 0xb3, 0x86, 0x96, 0x0b, 0xfd, 0x1b, 0x03, 0x2e, - 0x5f, 0x40, 0x97, 0xdc, 0x1a, 0x53, 0x00, 0x25, 0xf0, 0xce, 0xd8, 0xf8, 0x52, 0xdc, 0x6b, 0x28, - 0xee, 0x36, 0xdd, 0x18, 0x21, 0x2e, 0x17, 0xf6, 0x47, 0xb0, 0x91, 0xb5, 0xa3, 0x1a, 0xdd, 0xfb, - 0x83, 0xc0, 0x4d, 0x48, 0x16, 0xd6, 0x43, 0x7a, 0xd6, 0x3c, 0x70, 0xca, 0x5d, 0x8a, 0x7e, 0xa7, - 0x9c, 0xc9, 0x55, 0x21, 0x46, 0x9f, 0xd3, 0xe6, 0xdc, 0x23, 0x58, 0x54, 0xfb, 0xee, 0x7b, 0x76, - 0xfa, 0x95, 0x79, 0x6e, 0x23, 0xcf, 0x1e, 0x5d, 0x29, 0xf2, 0xec, 0x7b, 0x76, 0xaa, 0x38, 0x1e, - 0x4c, 0xe3, 0x6f, 0xc3, 0x5f, 0xff, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6e, 0xa0, 0xe9, 0x5c, - 0x4e, 0x2e, 0x00, 0x00, + // 3585 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3a, 0x4b, 0x6f, 0xe4, 0xc6, + 0xd1, 0xe0, 0xe8, 0x5d, 0x33, 0xd2, 0x8c, 0x5a, 0xaf, 0xd1, 0x48, 0xda, 0x07, 0xfd, 0xed, 0x7a, + 0x77, 0x6d, 0x4b, 0xf6, 0x7a, 0xf1, 0x7d, 0xfe, 0x6c, 0xc7, 0x89, 0xac, 0x7d, 0x78, 0xe3, 0xd8, + 0x2b, 0x70, 0xd7, 0x6b, 0xc0, 0x0e, 0x32, 0xa0, 0xc8, 0x1e, 0x89, 0x10, 0x45, 0xd2, 0x64, 0x8f, + 0xb4, 0x32, 0x02, 0x04, 0x30, 0x90, 0x6b, 0x72, 0x08, 0x12, 0xe4, 0x90, 0x53, 0x8e, 0x01, 0x72, + 0xc9, 0x0f, 0x30, 0x72, 0x0d, 0x72, 0xcc, 0x25, 0x3f, 0x20, 0xc8, 0x2d, 0x09, 0x72, 0xc8, 0x25, + 0xa7, 0xa0, 0xab, 0x1f, 0x64, 0x0f, 0x39, 0xa3, 0xd9, 0x38, 0xf1, 0x45, 0x1a, 0x56, 0x57, 0xd7, + 0xbb, 0xab, 0xab, 0x8a, 0x84, 0xb9, 0x34, 0xf1, 0xb6, 0x93, 0x34, 0x66, 0x31, 0x99, 0x3e, 0xf4, + 0x58, 0x9a, 0x78, 0x9d, 0xcd, 0xc3, 0x38, 0x3e, 0x0c, 0xe9, 0x8e, 0x9b, 0x04, 0x3b, 0x6e, 0x14, + 0xc5, 0xcc, 0x65, 0x41, 0x1c, 0x65, 0x02, 0xcb, 0x6e, 0xc1, 0xc2, 0x03, 0xca, 0x1e, 0x46, 0xbd, + 0xd8, 0xa1, 0x9f, 0xf5, 0x69, 0xc6, 0xec, 0xbf, 0x5b, 0xd0, 0xd4, 0xa0, 0x2c, 0x89, 0xa3, 0x8c, + 0x92, 0x55, 0x98, 0xee, 0x27, 0x2c, 0x38, 0xa1, 0x6d, 0xeb, 0x8a, 0x75, 0x63, 0xce, 0x91, 0x4f, + 0x64, 0x07, 0x96, 0xdc, 0x53, 0x37, 0x08, 0xdd, 0x83, 0x90, 0x76, 0xe9, 0x33, 0xef, 0xc8, 0x8d, + 0x0e, 0x69, 0xd6, 0xae, 0x5d, 0xb1, 0x6e, 0x4c, 0x38, 0x44, 0x2f, 0xdd, 0x53, 0x2b, 0xe4, 0x25, + 0x58, 0xa4, 0x11, 0x07, 0xf9, 0x05, 0xf4, 0x09, 0x44, 0x6f, 0xc9, 0x85, 0x1c, 0xf9, 0x0e, 0xac, + 0xfa, 0xb4, 0xe7, 0xf6, 0x43, 0xd6, 0xed, 0xc5, 0x29, 0x7d, 0xd6, 0x4d, 0xd2, 0xf8, 0x34, 0xf0, + 0x69, 0xda, 0x9e, 0x44, 0x29, 0x96, 0xe5, 0xea, 0x7d, 0xbe, 0xb8, 0x2f, 0xd7, 0xc8, 0x6d, 0x58, + 0xd1, 0xbb, 0x02, 0x97, 0x75, 0xbd, 0x7e, 0x9a, 0xd2, 0xc8, 0x3b, 0x6f, 0x4f, 0xe1, 0xa6, 0x25, + 0xb5, 0x29, 0x70, 0xd9, 0x9e, 0x5c, 0xb2, 0xdf, 0x80, 0xce, 0x03, 0x1a, 0xd1, 0x34, 0xf0, 0x14, + 0xf7, 0x0f, 0xdd, 0x13, 0x2a, 0x2d, 0x42, 0x3a, 0x30, 0xab, 0x84, 0x95, 0xfa, 0xeb, 0x67, 0x7b, + 0x0b, 0x36, 0x2a, 0x77, 0x0a, 0xc3, 0xd9, 0x3b, 0xb0, 0xf4, 0x80, 0x32, 0xad, 0x92, 0xa2, 0xd8, + 0x86, 0x19, 0xa9, 0x2d, 0x12, 0x9c, 0x75, 0xd4, 0xa3, 0x7d, 0x07, 0x96, 0xcd, 0x0d, 0xd2, 0x03, + 0x9b, 0x30, 0x97, 0x1b, 0x4c, 0x08, 0x91, 0x03, 0xec, 0xdb, 0xb0, 0x52, 0xd8, 0xf5, 0xe8, 0xc9, + 0xbe, 0x43, 0xc5, 0xb6, 0x75, 0x98, 0x8d, 0x59, 0xd2, 0xf5, 0x62, 0x5f, 0x89, 0x3e, 0x13, 0xb3, + 0x64, 0x2f, 0xf6, 0xa9, 0xdd, 0x86, 0x55, 0x73, 0x8f, 0x92, 0xce, 0xfe, 0xa5, 0x05, 0x6b, 0xa5, + 0x25, 0x29, 0xc7, 0xb7, 0x61, 0x4e, 0x11, 0xe4, 0x72, 0x4c, 0xdc, 0xa8, 0xdf, 0x7e, 0x65, 0x5b, + 0x44, 0xda, 0xf6, 0x90, 0x3d, 0xdb, 0x8f, 0x04, 0xc7, 0xec, 0x5e, 0xc4, 0xd2, 0x73, 0x67, 0x56, + 0x0a, 0x90, 0x75, 0xde, 0x82, 0x79, 0x63, 0x89, 0xb4, 0x60, 0xe2, 0x98, 0x9e, 0x4b, 0x41, 0xf9, + 0x4f, 0xb2, 0x0c, 0x53, 0xa7, 0x6e, 0xd8, 0xa7, 0x18, 0x52, 0x73, 0x8e, 0x78, 0x78, 0xb3, 0xf6, + 0x86, 0x65, 0xdf, 0x81, 0xd5, 0xbb, 0x41, 0x56, 0x8c, 0xae, 0x71, 0xdc, 0xf5, 0xe5, 0x84, 0xa1, + 0x9a, 0x11, 0xe4, 0x04, 0x26, 0x23, 0x57, 0x87, 0x38, 0xfe, 0x2e, 0x3a, 0xaa, 0x66, 0x38, 0x8a, + 0xaf, 0x9c, 0xd2, 0xf4, 0x20, 0xce, 0x28, 0xc6, 0xef, 0xac, 0xa3, 0x1e, 0xc9, 0x0b, 0x30, 0xdf, + 0xcf, 0x82, 0xe8, 0xb0, 0x9b, 0xb9, 0x91, 0x7f, 0x10, 0x3f, 0xc3, 0x68, 0x9d, 0x75, 0x1a, 0x08, + 0x7c, 0x2c, 0x60, 0xe4, 0x2a, 0x34, 0x8e, 0x18, 0x4b, 0xba, 0xfc, 0x18, 0xc5, 0x7d, 0x26, 0x83, + 0xb3, 0xce, 0x61, 0x4f, 0x04, 0x88, 0x5c, 0x83, 0x05, 0x44, 0xe9, 0x67, 0x34, 0x75, 0x0f, 0x69, + 0xc4, 0xda, 0xd3, 0x88, 0x34, 0xcf, 0xa1, 0x1f, 0x29, 0x20, 0xd9, 0x02, 0x40, 0xb4, 0x24, 0x8d, + 0x9f, 0x9d, 0xb7, 0x67, 0x44, 0x68, 0x70, 0xc8, 0x3e, 0x07, 0x90, 0x17, 0xa1, 0x79, 0xe0, 0x66, + 0x54, 0x1d, 0x83, 0x80, 0x66, 0xed, 0x59, 0xc4, 0x59, 0xe0, 0xe0, 0x3d, 0x0d, 0x25, 0x37, 0xa1, + 0x95, 0xf5, 0x93, 0x24, 0x4e, 0x19, 0xf5, 0xbb, 0x6e, 0x96, 0x51, 0x96, 0xb5, 0xe7, 0x10, 0xb3, + 0xa9, 0xe1, 0xbb, 0x08, 0xe6, 0x1a, 0xaa, 0x53, 0x9c, 0xb8, 0x41, 0x9a, 0xb5, 0x01, 0xf1, 0x1a, + 0x12, 0xb8, 0xcf, 0x61, 0x9c, 0x71, 0x9e, 0x1b, 0x04, 0x5a, 0x5d, 0x30, 0xd6, 0x60, 0x81, 0xf8, + 0x12, 0x2c, 0xba, 0x7d, 0x76, 0x44, 0x23, 0x16, 0x78, 0x2e, 0x32, 0x4f, 0x82, 0x76, 0x03, 0x6d, + 0xd6, 0x32, 0x16, 0x76, 0x93, 0xc0, 0x3e, 0x83, 0xd6, 0x03, 0xca, 0x9e, 0x04, 0xde, 0x31, 0x4d, + 0xc7, 0x70, 0x38, 0xb9, 0x01, 0x93, 0x9c, 0x37, 0x7a, 0xaf, 0x7e, 0x7b, 0x59, 0x85, 0xaa, 0x3a, + 0xf9, 0x5c, 0x02, 0x07, 0x31, 0xb8, 0x1d, 0x51, 0xeb, 0x2e, 0x3b, 0x4f, 0x84, 0x4f, 0xe7, 0x9c, + 0x39, 0x84, 0x3c, 0x39, 0x4f, 0xa8, 0xfd, 0x14, 0x1a, 0xc5, 0x4d, 0xfc, 0x40, 0xfa, 0x34, 0x0c, + 0x4e, 0x02, 0x46, 0x53, 0x75, 0x20, 0x35, 0x80, 0xc7, 0x12, 0x37, 0xaf, 0x0c, 0x5b, 0xfc, 0xcd, + 0x63, 0xf9, 0xb3, 0x7e, 0xcc, 0x14, 0x6d, 0xf1, 0x60, 0xff, 0xb4, 0x06, 0x0b, 0x4a, 0x1d, 0x19, + 0x88, 0x4a, 0x66, 0xeb, 0x42, 0x99, 0xaf, 0x42, 0x23, 0x74, 0x33, 0xd6, 0xed, 0x27, 0x3e, 0x37, + 0x90, 0x4c, 0xbc, 0x75, 0x0e, 0xfb, 0x48, 0x80, 0xb8, 0xaf, 0x54, 0x06, 0x44, 0x2f, 0x48, 0xee, + 0x0d, 0xaf, 0xa8, 0x0c, 0x81, 0x49, 0xbe, 0x07, 0x23, 0xd5, 0x72, 0xf0, 0x37, 0x87, 0x1d, 0x05, + 0x87, 0x47, 0x18, 0x99, 0x96, 0x83, 0xbf, 0xf9, 0x01, 0x0d, 0xe3, 0x33, 0x8c, 0x43, 0xcb, 0xe1, + 0x3f, 0x39, 0xe4, 0x20, 0xf0, 0x31, 0xec, 0x2c, 0x87, 0xff, 0xe4, 0x10, 0x37, 0x3b, 0xc6, 0x20, + 0xb3, 0x1c, 0xfe, 0x93, 0xdf, 0x1e, 0xa7, 0x71, 0xd8, 0x3f, 0xa1, 0x18, 0x4f, 0x96, 0x23, 0x9f, + 0xc8, 0x06, 0xcc, 0x25, 0x69, 0xe0, 0xd1, 0xae, 0xcb, 0x8e, 0x30, 0x84, 0x2c, 0x67, 0x16, 0x01, + 0xbb, 0xec, 0xc8, 0x5e, 0x82, 0x45, 0xed, 0x68, 0x9d, 0x99, 0x3e, 0x86, 0x19, 0x09, 0x19, 0xe9, + 0xf4, 0x57, 0x61, 0x86, 0x09, 0xb4, 0x76, 0x0d, 0x53, 0xd4, 0xaa, 0xb2, 0xa1, 0x69, 0x69, 0x47, + 0xa1, 0xd9, 0xdf, 0x04, 0x52, 0xe4, 0x26, 0x1d, 0x71, 0x33, 0xa7, 0x23, 0x52, 0x5d, 0xd3, 0xa4, + 0x93, 0xe5, 0x04, 0x3e, 0xc7, 0x44, 0xff, 0x28, 0xf5, 0x79, 0x12, 0x88, 0x8f, 0xbf, 0xd6, 0xd0, + 0xfc, 0x00, 0xe6, 0x35, 0xe3, 0x87, 0x8c, 0x9e, 0x70, 0x83, 0xbb, 0x27, 0x71, 0x3f, 0x62, 0xc8, + 0xd3, 0x72, 0xe4, 0x13, 0x8f, 0x40, 0xb4, 0x2f, 0xb2, 0xb4, 0x1c, 0xf1, 0x40, 0x16, 0xa0, 0x16, + 0xf8, 0xf2, 0x12, 0xae, 0x05, 0xbe, 0xfd, 0x4f, 0x0b, 0x16, 0x0b, 0x8a, 0x3c, 0x77, 0x50, 0x96, + 0x22, 0xae, 0x56, 0x11, 0x71, 0x37, 0x61, 0xf2, 0x20, 0xf0, 0xf9, 0xdd, 0xcf, 0xed, 0xba, 0xa2, + 0xc8, 0x19, 0x7a, 0x38, 0x88, 0xc2, 0x51, 0xdd, 0xec, 0x38, 0x6b, 0x4f, 0x8e, 0x44, 0xe5, 0x28, + 0xa5, 0xf3, 0x30, 0x55, 0x3e, 0x0f, 0xa6, 0x2d, 0xa7, 0x07, 0x6d, 0xb9, 0x8a, 0xf7, 0xaf, 0xa6, + 0xad, 0x23, 0xcf, 0x03, 0xc8, 0x81, 0x23, 0xdd, 0xfa, 0xff, 0x00, 0xb1, 0xc6, 0x94, 0xf1, 0xb7, + 0x5e, 0x12, 0x5a, 0x87, 0x60, 0x01, 0xd9, 0x7e, 0x1f, 0xaf, 0xf1, 0x22, 0x73, 0x69, 0xfc, 0xdb, + 0x06, 0x4d, 0x11, 0x8b, 0xa4, 0x44, 0x33, 0x33, 0x88, 0xbd, 0x8e, 0xc4, 0x76, 0x3d, 0x8f, 0xbb, + 0xbe, 0x50, 0xe0, 0x8d, 0xbc, 0x1f, 0x9f, 0xc2, 0x8c, 0xdc, 0x21, 0xc3, 0x42, 0x20, 0xd4, 0x02, + 0x9f, 0xbc, 0x05, 0x50, 0xb8, 0x43, 0x84, 0x5e, 0x1b, 0x4a, 0x06, 0xb9, 0x49, 0x45, 0x03, 0xb2, + 0x2b, 0xa0, 0xdb, 0x3d, 0x58, 0xaa, 0x40, 0xe1, 0xa2, 0xe8, 0xf2, 0x4c, 0x8a, 0xa2, 0x9e, 0xc9, + 0x65, 0xa8, 0xb3, 0x98, 0xb9, 0x61, 0x37, 0x2f, 0x00, 0x2c, 0x07, 0x10, 0xf4, 0x94, 0x43, 0x30, + 0x41, 0xc5, 0xa1, 0x88, 0x5c, 0x9e, 0xa0, 0xe2, 0xd0, 0xb7, 0x5d, 0x2c, 0x6a, 0x0c, 0xa5, 0xa5, + 0x09, 0x47, 0xb9, 0xec, 0x25, 0x98, 0x75, 0xc5, 0x16, 0xa5, 0x58, 0x73, 0x40, 0x31, 0x47, 0x23, + 0xd8, 0x04, 0x6f, 0xa0, 0xbd, 0x38, 0xea, 0x05, 0x87, 0x2a, 0x3a, 0x5e, 0xc4, 0x64, 0xa5, 0x60, + 0x79, 0x3d, 0xe1, 0xbb, 0xcc, 0x45, 0x6e, 0x0d, 0x07, 0x7f, 0xdb, 0x3f, 0xb4, 0xa0, 0xb5, 0x1f, + 0xa7, 0xac, 0x17, 0x87, 0x41, 0xbc, 0xeb, 0xfb, 0x29, 0xcd, 0x32, 0x5e, 0x4a, 0xb8, 0xe2, 0xa7, + 0xaa, 0xd1, 0xe4, 0x23, 0xcf, 0x90, 0x5e, 0x1c, 0x44, 0x22, 0x56, 0x6b, 0xd2, 0x40, 0x71, 0x10, + 0xf1, 0x50, 0x25, 0x57, 0xa0, 0xee, 0xd3, 0xcc, 0x4b, 0x83, 0x84, 0x17, 0xf4, 0x32, 0x2d, 0x14, + 0x41, 0x9c, 0xf0, 0x81, 0x1b, 0xba, 0x91, 0x47, 0x65, 0x66, 0x57, 0x8f, 0xf6, 0x0a, 0xa6, 0x2b, + 0x2d, 0x89, 0xd2, 0xe3, 0x43, 0x8c, 0xfe, 0x02, 0x58, 0xaa, 0xf2, 0xbf, 0x30, 0x97, 0x28, 0xa0, + 0x0c, 0xbf, 0xb6, 0xb2, 0xd0, 0xa0, 0x3a, 0x4e, 0x8e, 0x6a, 0x6f, 0xf2, 0xba, 0x3a, 0xa7, 0xf7, + 0xb8, 0x7f, 0x72, 0xe2, 0xa6, 0xe7, 0x8a, 0x5b, 0x04, 0x93, 0x7b, 0x71, 0x10, 0x71, 0x43, 0x71, + 0xa5, 0x54, 0xe1, 0xc5, 0x7f, 0x17, 0x45, 0xaf, 0x19, 0xa2, 0x17, 0xad, 0x35, 0x61, 0x5a, 0xeb, + 0x12, 0x40, 0x42, 0x53, 0x8f, 0x46, 0xcc, 0x3d, 0x54, 0x1a, 0x17, 0x20, 0xf6, 0x11, 0x90, 0x47, + 0xbd, 0x5e, 0x18, 0x44, 0x94, 0xb3, 0x95, 0xc2, 0x8c, 0xb0, 0xfe, 0x70, 0x19, 0x4c, 0x4e, 0x13, + 0x25, 0x4e, 0x1f, 0xc0, 0xe2, 0xa3, 0xa8, 0x82, 0x91, 0x22, 0x67, 0x8d, 0x22, 0x57, 0x2b, 0x91, + 0x7b, 0x0f, 0x1a, 0x05, 0xc1, 0x33, 0xf2, 0x06, 0xcc, 0x49, 0x19, 0x75, 0x11, 0xde, 0xd1, 0xd9, + 0xa0, 0xa4, 0xa1, 0x93, 0x23, 0xdb, 0x3f, 0xb7, 0xa0, 0x9e, 0x4b, 0xc6, 0x5b, 0xac, 0x29, 0x6e, + 0x6e, 0x45, 0xe5, 0x92, 0xa6, 0x92, 0xe3, 0x6c, 0xe3, 0x5f, 0x51, 0xbb, 0x0b, 0xe4, 0xce, 0x63, + 0x80, 0x1c, 0x58, 0x51, 0xb5, 0xef, 0x14, 0xab, 0xf6, 0x62, 0xf6, 0x1b, 0xb4, 0x49, 0xb1, 0xa0, + 0xff, 0xfd, 0x24, 0x6f, 0xa5, 0x2a, 0x82, 0x45, 0xc6, 0xe0, 0x2b, 0x50, 0x17, 0x67, 0x81, 0x67, + 0x00, 0x25, 0x70, 0x43, 0xdf, 0x43, 0x71, 0x10, 0x39, 0x80, 0x67, 0x03, 0xd7, 0xc9, 0x6b, 0x30, + 0x8f, 0xc2, 0x76, 0x63, 0x61, 0x10, 0x79, 0xb0, 0xcd, 0x0d, 0x0d, 0x44, 0x91, 0x26, 0x23, 0x09, + 0xac, 0x18, 0x5b, 0xba, 0x99, 0x10, 0x41, 0x5e, 0x52, 0x6f, 0x17, 0xfa, 0x9c, 0x61, 0x52, 0x0a, + 0x63, 0x49, 0x82, 0x72, 0x4d, 0x98, 0x6e, 0xc9, 0x2b, 0xaf, 0x90, 0x1d, 0x68, 0x48, 0x8e, 0x68, + 0x19, 0x79, 0xc5, 0x99, 0x32, 0xd6, 0xc5, 0x46, 0x44, 0x20, 0x27, 0xb0, 0x5c, 0xdc, 0xa0, 0x25, + 0x9c, 0xc2, 0x8d, 0x6f, 0x8d, 0x2f, 0x61, 0x54, 0x12, 0x90, 0x78, 0xa5, 0x85, 0xce, 0x77, 0xa1, + 0x3d, 0x4c, 0xa1, 0x0a, 0xb7, 0xdf, 0x32, 0xdd, 0xbe, 0x5c, 0x11, 0x92, 0x59, 0xc1, 0xe3, 0x9d, + 0x4f, 0x60, 0x6d, 0x88, 0x30, 0x15, 0xc4, 0x6f, 0x9a, 0xc4, 0x97, 0x2a, 0x22, 0xb5, 0x18, 0x4d, + 0x3f, 0xb6, 0xa0, 0xb3, 0xeb, 0xfb, 0xa5, 0xe4, 0x94, 0x37, 0xe0, 0x5f, 0x77, 0xca, 0xdd, 0x82, + 0x8d, 0x4a, 0x81, 0xe4, 0xa4, 0xe0, 0x19, 0x6c, 0x39, 0xf4, 0x24, 0x3e, 0xa5, 0x5f, 0xb7, 0xc8, + 0xf6, 0x15, 0xb8, 0x34, 0x8c, 0xb3, 0x94, 0xad, 0x03, 0xed, 0x07, 0xd4, 0x1c, 0xb3, 0xe8, 0xc2, + 0xe8, 0x2f, 0x16, 0xcc, 0x9b, 0x03, 0x98, 0xff, 0x54, 0x1f, 0xfd, 0x32, 0x90, 0x94, 0x66, 0xac, + 0x9b, 0xc6, 0x61, 0xc8, 0xdb, 0x69, 0x9f, 0x86, 0xee, 0xb9, 0x1c, 0xfd, 0xb4, 0xf8, 0x8a, 0x23, + 0x16, 0xee, 0x72, 0x38, 0x59, 0x83, 0x19, 0x37, 0x09, 0xba, 0x3c, 0x6a, 0x44, 0x2f, 0x3d, 0xed, + 0x26, 0xc1, 0xfb, 0xf4, 0x9c, 0xd8, 0x30, 0x2f, 0x17, 0xba, 0x21, 0x3d, 0xa5, 0x21, 0xd6, 0x7c, + 0x13, 0x4e, 0x5d, 0x2c, 0x7f, 0x87, 0x83, 0x78, 0xef, 0x9b, 0xa4, 0x01, 0x0f, 0xbf, 0x7c, 0xc6, + 0x34, 0x83, 0xd2, 0x34, 0x25, 0x5c, 0x69, 0x67, 0x7f, 0x0a, 0xeb, 0x15, 0xb6, 0x90, 0x39, 0xea, + 0x1d, 0x68, 0x9a, 0x93, 0x2a, 0x95, 0xa7, 0x74, 0xd5, 0x6a, 0x6c, 0x74, 0x16, 0x7a, 0x06, 0x1d, + 0x59, 0x7d, 0x22, 0x8e, 0xe3, 0x32, 0x3d, 0x2f, 0xb2, 0x3f, 0x83, 0xe5, 0x1c, 0xb8, 0x17, 0x47, + 0xa7, 0x34, 0xcd, 0x78, 0xb4, 0x11, 0x98, 0xec, 0xa5, 0xf1, 0x89, 0x32, 0x35, 0xff, 0xcd, 0xeb, + 0x36, 0x16, 0xcb, 0x30, 0xa8, 0xb1, 0x98, 0xe3, 0xa4, 0x2e, 0x53, 0xb7, 0x14, 0xfe, 0xe6, 0x75, + 0x72, 0x80, 0x44, 0x68, 0x17, 0xd7, 0x44, 0xa8, 0xd6, 0x25, 0x8c, 0x73, 0xb1, 0x9f, 0x62, 0xf9, + 0x58, 0x14, 0x45, 0xea, 0xf8, 0x0d, 0xa8, 0x0b, 0x1d, 0xf9, 0x4e, 0xa5, 0xdf, 0xa6, 0xa1, 0xdf, + 0x80, 0x98, 0x0e, 0xf4, 0x34, 0xd4, 0xfe, 0x5b, 0x0d, 0x1a, 0x58, 0xb1, 0xde, 0xa5, 0xcc, 0x0d, + 0xc2, 0xd1, 0xb5, 0xb4, 0xa8, 0x41, 0x6b, 0xba, 0x06, 0x7d, 0x01, 0xe6, 0x8b, 0xc3, 0x8c, 0x73, + 0xd5, 0xcc, 0x16, 0x46, 0x19, 0xe7, 0xe4, 0x1a, 0x2c, 0x60, 0x6b, 0x9d, 0x63, 0x89, 0x98, 0x99, + 0x47, 0xa8, 0x46, 0x33, 0x1b, 0x81, 0xa9, 0x81, 0x46, 0x80, 0x2f, 0x63, 0x31, 0xdd, 0xcd, 0x02, + 0x5f, 0xf7, 0x09, 0x08, 0x79, 0x1c, 0xf8, 0x85, 0x65, 0xdc, 0x3d, 0x53, 0x58, 0xc6, 0xdd, 0xbc, + 0x07, 0x4a, 0x29, 0x4e, 0x5a, 0x71, 0xc4, 0x83, 0xed, 0xf0, 0x84, 0xd3, 0x50, 0xc0, 0x27, 0xc1, + 0x09, 0x4e, 0x55, 0x33, 0xe6, 0xb2, 0xbe, 0x9a, 0xb3, 0xc8, 0xa7, 0xbc, 0x4d, 0x83, 0x62, 0x9b, + 0x96, 0x37, 0x75, 0x75, 0xa3, 0xa9, 0xbb, 0x0c, 0xf5, 0x38, 0xa1, 0x51, 0x57, 0xb6, 0xd8, 0x0d, + 0x51, 0x3d, 0x70, 0xd0, 0x53, 0x84, 0xc8, 0x91, 0x09, 0xda, 0x3c, 0x1b, 0xa7, 0x2f, 0x35, 0x0d, + 0x53, 0x1b, 0x34, 0x8c, 0x6a, 0x04, 0x27, 0x2e, 0x6a, 0x04, 0xed, 0x5d, 0xac, 0x8a, 0x15, 0x63, + 0x19, 0x3e, 0x2f, 0xc3, 0x34, 0x9a, 0x49, 0x45, 0xce, 0xb2, 0xd1, 0xc6, 0xc8, 0xa0, 0x70, 0x24, + 0x8e, 0xfd, 0x1e, 0xce, 0xa2, 0x71, 0x69, 0x1c, 0xd1, 0xd7, 0x61, 0x56, 0x78, 0x45, 0x47, 0xcd, + 0x0c, 0x3e, 0x3f, 0xf4, 0xed, 0x3f, 0x5a, 0x40, 0x1e, 0xf7, 0x0f, 0x4e, 0x82, 0xf1, 0xa9, 0x8d, + 0xdf, 0xa0, 0x13, 0x98, 0xc4, 0x30, 0x11, 0xe1, 0x88, 0xbf, 0x07, 0x22, 0x64, 0x72, 0x30, 0x42, + 0x72, 0x77, 0x4e, 0x55, 0xf7, 0xe8, 0xd3, 0x45, 0xe7, 0xf3, 0x14, 0x1f, 0x06, 0x34, 0x62, 0x5d, + 0x39, 0x6c, 0xe1, 0x29, 0x1e, 0x01, 0x0f, 0x7d, 0xfb, 0x31, 0x2c, 0x19, 0x9a, 0x49, 0x4b, 0x5f, + 0x85, 0x86, 0x10, 0x20, 0x09, 0x5d, 0x4f, 0x4f, 0x9a, 0xeb, 0x08, 0xdb, 0x47, 0xd0, 0x28, 0x7b, + 0xfd, 0xd5, 0x02, 0xb2, 0xc7, 0x2f, 0xae, 0x70, 0x6c, 0x7b, 0xf1, 0xc0, 0x11, 0x5d, 0x52, 0x4e, + 0x6f, 0x4e, 0x42, 0x1e, 0x9a, 0xcc, 0x26, 0x0c, 0x66, 0xda, 0xd2, 0x93, 0xcf, 0x39, 0x0a, 0x29, + 0x9d, 0xda, 0x6b, 0xb0, 0x70, 0xe6, 0x86, 0x21, 0x65, 0x5d, 0x75, 0x57, 0xca, 0x99, 0xa9, 0x80, + 0xaa, 0x8e, 0x4b, 0xf9, 0x6b, 0x26, 0xf7, 0x17, 0x6f, 0x89, 0x0c, 0x7d, 0xe5, 0xdd, 0x77, 0x07, + 0x56, 0x05, 0x78, 0x37, 0x0c, 0xc7, 0x3e, 0x43, 0xf6, 0x2f, 0x6a, 0xb0, 0x56, 0xda, 0xa6, 0x2f, + 0x09, 0xf3, 0x04, 0x5c, 0xd7, 0xea, 0x56, 0x6f, 0xd8, 0x96, 0x8f, 0x72, 0x57, 0xe7, 0xb7, 0x16, + 0x4c, 0x0b, 0xd0, 0x48, 0x6f, 0x7c, 0xa2, 0xdc, 0x2f, 0x73, 0x8c, 0xa8, 0x7f, 0xff, 0x6f, 0x3c, + 0x66, 0xe2, 0xdf, 0x63, 0xdc, 0x29, 0xca, 0x43, 0x11, 0x37, 0x02, 0xd2, 0x79, 0x07, 0x5a, 0x83, + 0x08, 0xcf, 0x35, 0xbc, 0x17, 0x3d, 0xf4, 0xbd, 0x53, 0x1a, 0x31, 0x7d, 0xc7, 0x7d, 0x69, 0x41, + 0x73, 0x2f, 0x8e, 0xfc, 0x80, 0xe7, 0xc7, 0x7d, 0x37, 0x75, 0x4f, 0x32, 0xb2, 0xc9, 0x2b, 0x1b, + 0x09, 0x52, 0x43, 0x56, 0x0d, 0x18, 0x32, 0xce, 0xda, 0x02, 0xf0, 0x8e, 0xa8, 0x77, 0xdc, 0x95, + 0xf3, 0x25, 0x1e, 0xf4, 0x73, 0x08, 0x79, 0x37, 0xf0, 0x33, 0xf2, 0x0a, 0x2c, 0xe5, 0xcb, 0x5d, + 0x37, 0xf2, 0xbb, 0x72, 0xb8, 0x84, 0xf3, 0x66, 0x8d, 0xb7, 0x1b, 0xf9, 0xbb, 0xd9, 0x31, 0x4e, + 0xc5, 0xf5, 0x4c, 0xa5, 0x6b, 0x1c, 0xd8, 0xa6, 0x86, 0xef, 0x22, 0xd8, 0xfe, 0x87, 0x85, 0xf9, + 0x4e, 0x69, 0x25, 0xbd, 0x9d, 0x8f, 0x51, 0x70, 0xba, 0x66, 0xb8, 0xac, 0x36, 0xe0, 0x32, 0x02, + 0x93, 0x01, 0xa3, 0x27, 0x2a, 0x8d, 0xf0, 0xdf, 0xe4, 0x5d, 0x68, 0x69, 0x8d, 0xbb, 0x09, 0x9a, + 0x45, 0x1e, 0x93, 0xb5, 0xbc, 0x4d, 0x30, 0xac, 0xe6, 0x34, 0xbd, 0x01, 0x33, 0xaa, 0xe3, 0x35, + 0x75, 0xe1, 0xf1, 0xe2, 0x59, 0xc9, 0x43, 0x6b, 0x4f, 0xcb, 0x22, 0x0a, 0x9f, 0x84, 0xd4, 0xd4, + 0xeb, 0x33, 0xea, 0xcb, 0xc2, 0x48, 0x3f, 0xdb, 0x7f, 0xb6, 0xa0, 0xb9, 0xeb, 0xfb, 0xa8, 0xf7, + 0x38, 0x69, 0x42, 0x69, 0x59, 0xbb, 0x40, 0xcb, 0x89, 0x7f, 0x53, 0xcb, 0xaf, 0x9c, 0x44, 0x86, + 0x18, 0xc1, 0xb6, 0xa1, 0x95, 0xeb, 0x59, 0xed, 0x5e, 0xfb, 0x7f, 0x80, 0x88, 0x62, 0xda, 0x30, + 0xc7, 0x20, 0xd6, 0x0a, 0x2c, 0x19, 0x58, 0x32, 0xd7, 0xdc, 0x87, 0x1b, 0x0f, 0x28, 0xdb, 0x4b, + 0xcf, 0x13, 0x16, 0xab, 0xe2, 0xe5, 0x2e, 0x4d, 0xe2, 0x2c, 0x50, 0x99, 0x8b, 0x8e, 0x95, 0x7d, + 0x7e, 0x67, 0xc1, 0xcd, 0x31, 0x08, 0x49, 0x15, 0xbe, 0x57, 0x9e, 0x26, 0x7c, 0xab, 0xd0, 0x48, + 0x8e, 0x47, 0x65, 0x5b, 0x43, 0x44, 0xba, 0xc8, 0x49, 0x76, 0xde, 0x86, 0x05, 0x73, 0xf1, 0xb9, + 0x52, 0x45, 0x08, 0xd7, 0x2f, 0x10, 0x62, 0x9c, 0x98, 0xbb, 0x0e, 0x0b, 0x9e, 0x41, 0x42, 0x32, + 0x1a, 0x80, 0xda, 0x7b, 0xf0, 0xe2, 0x85, 0xdc, 0xa4, 0xd9, 0x86, 0xf6, 0x63, 0xf6, 0xaf, 0x27, + 0x61, 0xed, 0xe3, 0x80, 0x1d, 0xf9, 0xa9, 0x7b, 0xa6, 0xa2, 0x6f, 0x1c, 0x21, 0x07, 0x5a, 0xb5, + 0x5a, 0xb9, 0xbb, 0xbc, 0x05, 0x8b, 0x71, 0x44, 0xb1, 0xa2, 0xec, 0x26, 0x6e, 0x96, 0x9d, 0xc5, + 0xa9, 0xba, 0x4b, 0x9b, 0x71, 0x44, 0x79, 0x55, 0xb9, 0x2f, 0xc1, 0x03, 0xb7, 0xf1, 0xe4, 0xe0, + 0x6d, 0xdc, 0x82, 0x89, 0x24, 0x88, 0xe4, 0x84, 0x9c, 0xff, 0xe4, 0x77, 0x27, 0x4b, 0x5d, 0xbf, + 0x40, 0x59, 0xde, 0x9d, 0x08, 0xd5, 0x74, 0x8b, 0x33, 0xdb, 0x99, 0x81, 0x99, 0x6d, 0xc1, 0x26, + 0xb3, 0x66, 0x8f, 0x7a, 0x19, 0xea, 0xf2, 0x67, 0x97, 0xb9, 0x87, 0xb2, 0xe0, 0x05, 0x09, 0x7a, + 0xe2, 0x1e, 0x16, 0xea, 0x21, 0x30, 0xea, 0xa1, 0x2d, 0x80, 0x1e, 0xa5, 0x5d, 0xa3, 0xf4, 0x9d, + 0xeb, 0x51, 0x2a, 0x92, 0x2e, 0x2f, 0x8c, 0x0e, 0xdc, 0xe8, 0xb8, 0x8b, 0x1d, 0x67, 0x43, 0x88, + 0xc3, 0x01, 0x1f, 0xf2, 0xae, 0xf3, 0x2a, 0x34, 0x70, 0x51, 0xc9, 0x34, 0x2f, 0x2c, 0xca, 0x61, + 0xbb, 0x79, 0xef, 0x8c, 0x28, 0x5e, 0xc0, 0xce, 0xdb, 0x0b, 0xf9, 0xfe, 0xbd, 0x80, 0x9d, 0xeb, + 0xfd, 0x68, 0xb3, 0xf4, 0xbc, 0xdd, 0xcc, 0xf7, 0xef, 0x09, 0x10, 0x17, 0x2f, 0x3b, 0x0b, 0x7a, + 0x54, 0xbc, 0x62, 0x6f, 0x09, 0x2b, 0x23, 0x64, 0x2f, 0xf6, 0xb1, 0x0f, 0x38, 0x0b, 0xd2, 0x42, + 0x2b, 0xb2, 0x28, 0x1a, 0x16, 0x0e, 0xd4, 0x5f, 0x1f, 0xdc, 0x82, 0x96, 0x0a, 0x97, 0xe2, 0x17, + 0x17, 0x29, 0xcd, 0xfa, 0x21, 0x53, 0x5f, 0x5c, 0x88, 0xa7, 0xdb, 0x3f, 0xdb, 0x80, 0x85, 0x07, + 0xb1, 0x08, 0xd0, 0x27, 0xdc, 0x2f, 0x29, 0x79, 0x04, 0x33, 0xf2, 0x7b, 0x0d, 0xb2, 0x5a, 0x38, + 0xb7, 0x85, 0x91, 0x7f, 0x67, 0xad, 0x04, 0x97, 0x19, 0x67, 0xe9, 0x8b, 0x3f, 0xfc, 0xe9, 0x27, + 0xb5, 0x79, 0x52, 0xdf, 0x39, 0x7d, 0x6d, 0xe7, 0x90, 0xb2, 0x80, 0x53, 0xf1, 0xa0, 0x51, 0xfc, + 0x06, 0x81, 0x6c, 0x54, 0xbc, 0xe0, 0x57, 0xa7, 0xae, 0xb3, 0x59, 0xbd, 0x28, 0xe9, 0xb7, 0x91, + 0x3e, 0x21, 0x2d, 0x49, 0x5f, 0x7f, 0xb2, 0x40, 0x3e, 0x87, 0xe6, 0xc0, 0xfb, 0x7b, 0x62, 0xe7, + 0xa4, 0x86, 0x7d, 0x8b, 0xd1, 0x79, 0x61, 0x24, 0x8e, 0xe4, 0x7a, 0x09, 0xb9, 0xb6, 0xed, 0x25, + 0xce, 0xd5, 0x17, 0x5c, 0x14, 0xe7, 0x37, 0xad, 0x5b, 0x24, 0xc3, 0xae, 0xa2, 0xf8, 0x11, 0xc0, + 0x58, 0xbc, 0x2f, 0x57, 0xa8, 0x6a, 0x58, 0x73, 0x03, 0xf9, 0xae, 0x90, 0xa5, 0x01, 0x6d, 0xd1, + 0xaa, 0x19, 0xbe, 0x62, 0x2c, 0x7c, 0x20, 0x81, 0x01, 0x32, 0x0e, 0xdf, 0xad, 0xea, 0x0f, 0x2c, + 0xe4, 0x37, 0x1e, 0x76, 0x07, 0xb9, 0x2e, 0x13, 0x32, 0xc0, 0x35, 0x66, 0x09, 0xc9, 0x8c, 0xef, + 0x4f, 0x24, 0xd3, 0x8c, 0x5c, 0x1a, 0xfa, 0xc9, 0xc6, 0x70, 0x4d, 0x8b, 0x9f, 0x74, 0x0c, 0xd5, + 0x34, 0x66, 0x49, 0x46, 0x9e, 0xc1, 0xc2, 0xbd, 0xe8, 0xbf, 0xe3, 0xd9, 0x2d, 0xe4, 0xbb, 0x66, + 0xa3, 0xae, 0x62, 0x84, 0x54, 0x74, 0xec, 0xc7, 0x30, 0xa7, 0x5f, 0xe3, 0x92, 0x76, 0x41, 0x09, + 0xe3, 0x83, 0x81, 0xce, 0x90, 0xd7, 0xc1, 0x2a, 0x5a, 0xed, 0x79, 0xa9, 0x95, 0x78, 0xb9, 0xcb, + 0x09, 0x7f, 0x0a, 0x90, 0xbf, 0x1f, 0x26, 0xeb, 0x25, 0xca, 0xda, 0x72, 0x9d, 0xaa, 0x25, 0x49, + 0x7e, 0x15, 0xc9, 0xb7, 0xc8, 0x82, 0x41, 0x3e, 0x93, 0xe7, 0x4d, 0xbf, 0xc6, 0x33, 0xce, 0xdb, + 0xe0, 0x1b, 0xe5, 0xce, 0xf0, 0x57, 0x89, 0xca, 0x29, 0xb6, 0x3a, 0x6c, 0xba, 0x40, 0xe5, 0x1a, + 0x1c, 0xc2, 0xbc, 0xf1, 0x6e, 0x91, 0x6c, 0x56, 0x71, 0xc9, 0xaa, 0x62, 0xae, 0xfc, 0x42, 0xd2, + 0x5e, 0x47, 0x56, 0x4b, 0x64, 0x71, 0x90, 0x55, 0x46, 0x8e, 0xf1, 0x8b, 0xb2, 0xc2, 0x2b, 0x38, + 0x52, 0xa4, 0x55, 0x7e, 0x1f, 0xd9, 0xb9, 0x34, 0x6c, 0x39, 0xab, 0x8e, 0x6f, 0x79, 0x87, 0xe1, + 0xa1, 0x12, 0x0e, 0x17, 0x2f, 0xde, 0x0c, 0x87, 0x1b, 0xef, 0xe7, 0x3a, 0xeb, 0x15, 0x2b, 0x92, + 0xfa, 0x0a, 0x52, 0x6f, 0x12, 0xe5, 0x73, 0x4f, 0xd0, 0x12, 0x3e, 0xd1, 0x13, 0x51, 0xc3, 0x27, + 0x83, 0xaf, 0xcd, 0x8c, 0x1c, 0x58, 0x7a, 0x79, 0x56, 0xca, 0x81, 0xfa, 0xf5, 0x18, 0xf9, 0x81, + 0xf9, 0x16, 0x4e, 0xbd, 0x15, 0xb0, 0x47, 0x8e, 0xf1, 0x4b, 0xa7, 0x65, 0xe8, 0xa8, 0xdf, 0xbe, + 0x8c, 0x9c, 0xd7, 0xc9, 0xda, 0x20, 0x67, 0xf9, 0xda, 0x80, 0x7c, 0x61, 0xc1, 0x52, 0xc5, 0x50, + 0x3a, 0x97, 0x60, 0xf8, 0x08, 0x3d, 0x97, 0x60, 0xd4, 0x54, 0xdb, 0x46, 0x09, 0x36, 0x6d, 0x94, + 0xc0, 0xf5, 0x7d, 0x2d, 0x81, 0xbc, 0x92, 0x79, 0x64, 0xfe, 0xc8, 0x82, 0xd5, 0xea, 0x01, 0x34, + 0xb9, 0xa6, 0x78, 0x8c, 0x1c, 0x8d, 0x77, 0xae, 0x5f, 0x84, 0x26, 0xa5, 0xb9, 0x86, 0xd2, 0x5c, + 0xb6, 0x3b, 0x5c, 0x9a, 0x14, 0x71, 0xab, 0x04, 0x3a, 0xc3, 0x3e, 0xce, 0x1c, 0xf1, 0x92, 0x2b, + 0x05, 0x83, 0x57, 0x4e, 0xc2, 0x3b, 0x57, 0x47, 0x60, 0x98, 0xe9, 0x8b, 0xac, 0x48, 0x87, 0xe0, + 0x5c, 0x54, 0xcf, 0x8a, 0xe5, 0x19, 0xcd, 0x47, 0xa8, 0xc6, 0x19, 0x2d, 0x4d, 0x85, 0x8d, 0x33, + 0x5a, 0x1e, 0xd4, 0x96, 0xce, 0x28, 0x32, 0xc3, 0xa1, 0x2d, 0xf9, 0x04, 0x8f, 0x8d, 0x1c, 0x22, + 0xb4, 0x07, 0x8f, 0x7a, 0x56, 0x75, 0x6c, 0xcc, 0x31, 0x41, 0x29, 0x55, 0x8a, 0xd9, 0x04, 0xb7, + 0x9e, 0x03, 0xb3, 0x0a, 0x9d, 0xac, 0x0d, 0x12, 0x50, 0x94, 0x2b, 0xa7, 0x7e, 0xf6, 0x1a, 0x12, + 0x5d, 0xb4, 0x1b, 0x45, 0xa2, 0x9c, 0xe6, 0x01, 0xd4, 0x0b, 0x13, 0x2e, 0xa2, 0x93, 0x6c, 0x79, + 0xa0, 0xd7, 0xd9, 0xa8, 0x5c, 0x33, 0x53, 0x89, 0xdd, 0xe4, 0x0c, 0x32, 0x44, 0x28, 0xf2, 0x28, + 0xcc, 0x7f, 0x72, 0x1e, 0xe5, 0x21, 0x58, 0xce, 0xa3, 0x6a, 0x60, 0x64, 0xf0, 0xf0, 0x10, 0x41, + 0xf3, 0x48, 0xa1, 0x39, 0x30, 0x77, 0xc9, 0xaf, 0xe2, 0xea, 0x29, 0x53, 0x7e, 0x15, 0x0f, 0x19, + 0xd8, 0x98, 0xc5, 0x8e, 0xe0, 0xe7, 0x86, 0x61, 0xee, 0x0f, 0x91, 0x22, 0xc5, 0x54, 0xc2, 0xf0, + 0xb5, 0x31, 0x7e, 0x31, 0x7c, 0x6d, 0x8e, 0x30, 0x4a, 0x29, 0x92, 0x0a, 0x5a, 0x4f, 0x61, 0x56, + 0xb5, 0xc3, 0xb9, 0xa3, 0x07, 0x06, 0x01, 0x9d, 0x76, 0x79, 0x41, 0x52, 0x35, 0x9c, 0xed, 0xfa, + 0x3e, 0x52, 0x95, 0x8e, 0x28, 0x34, 0xc7, 0xb9, 0x23, 0xca, 0x7d, 0x75, 0xee, 0x88, 0xaa, 0x6e, + 0xda, 0x70, 0x84, 0x38, 0xed, 0x9a, 0xc7, 0x6f, 0x2c, 0xb8, 0x7a, 0x61, 0x6f, 0x4b, 0x5e, 0x7d, + 0x8e, 0x36, 0x58, 0x08, 0xf4, 0xda, 0x73, 0x37, 0xce, 0xf6, 0x0d, 0x14, 0xd3, 0xb6, 0xb7, 0xd4, + 0x05, 0x84, 0xdb, 0x7c, 0x81, 0xae, 0xbb, 0x68, 0x2e, 0xf4, 0xaf, 0x2c, 0xb8, 0x7c, 0x01, 0x5d, + 0xb2, 0x3d, 0xa6, 0x00, 0x4a, 0xe0, 0x9d, 0xb1, 0xf1, 0xa5, 0xb8, 0xd7, 0x51, 0xdc, 0x2b, 0xf6, + 0xc6, 0x08, 0x71, 0xb9, 0xb0, 0xdf, 0x87, 0x0d, 0xdd, 0x03, 0x1b, 0x74, 0xef, 0xf7, 0x23, 0x3f, + 0x23, 0x3a, 0xac, 0x87, 0x34, 0xca, 0x79, 0xe0, 0x0c, 0xb6, 0x46, 0xe6, 0x9d, 0x72, 0x26, 0x57, + 0x85, 0x18, 0x3d, 0x4e, 0x9b, 0x73, 0x4f, 0x60, 0x51, 0xed, 0xbb, 0x1f, 0xb8, 0xec, 0x2b, 0xf3, + 0xbc, 0x82, 0x3c, 0x3b, 0xf6, 0x4a, 0x91, 0x67, 0x2f, 0x70, 0x99, 0xe2, 0x78, 0x30, 0x8d, 0xdf, + 0xd3, 0xbf, 0xfe, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6e, 0x0a, 0xf2, 0x2b, 0x82, 0x2f, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4052,6 +4128,7 @@ type GoCryptoTraderClient interface { DisableExchange(ctx context.Context, in *GenericExchangeNameRequest, opts ...grpc.CallOption) (*GenericExchangeNameResponse, error) GetExchangeInfo(ctx context.Context, in *GenericExchangeNameRequest, opts ...grpc.CallOption) (*GetExchangeInfoResponse, error) GetExchangeOTPCode(ctx context.Context, in *GenericExchangeNameRequest, opts ...grpc.CallOption) (*GetExchangeOTPReponse, error) + GetExchangeOTPCodes(ctx context.Context, in *GetExchangeOTPsRequest, opts ...grpc.CallOption) (*GetExchangeOTPsResponse, error) EnableExchange(ctx context.Context, in *GenericExchangeNameRequest, opts ...grpc.CallOption) (*GenericExchangeNameResponse, error) GetTicker(ctx context.Context, in *GetTickerRequest, opts ...grpc.CallOption) (*TickerResponse, error) GetTickers(ctx context.Context, in *GetTickersRequest, opts ...grpc.CallOption) (*GetTickersResponse, error) @@ -4132,6 +4209,15 @@ func (c *goCryptoTraderClient) GetExchangeOTPCode(ctx context.Context, in *Gener return out, nil } +func (c *goCryptoTraderClient) GetExchangeOTPCodes(ctx context.Context, in *GetExchangeOTPsRequest, opts ...grpc.CallOption) (*GetExchangeOTPsResponse, error) { + out := new(GetExchangeOTPsResponse) + err := c.cc.Invoke(ctx, "/gctrpc.GoCryptoTrader/GetExchangeOTPCodes", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *goCryptoTraderClient) EnableExchange(ctx context.Context, in *GenericExchangeNameRequest, opts ...grpc.CallOption) (*GenericExchangeNameResponse, error) { out := new(GenericExchangeNameResponse) err := c.cc.Invoke(ctx, "/gctrpc.GoCryptoTrader/EnableExchange", in, out, opts...) @@ -4364,6 +4450,7 @@ type GoCryptoTraderServer interface { DisableExchange(context.Context, *GenericExchangeNameRequest) (*GenericExchangeNameResponse, error) GetExchangeInfo(context.Context, *GenericExchangeNameRequest) (*GetExchangeInfoResponse, error) GetExchangeOTPCode(context.Context, *GenericExchangeNameRequest) (*GetExchangeOTPReponse, error) + GetExchangeOTPCodes(context.Context, *GetExchangeOTPsRequest) (*GetExchangeOTPsResponse, error) EnableExchange(context.Context, *GenericExchangeNameRequest) (*GenericExchangeNameResponse, error) GetTicker(context.Context, *GetTickerRequest) (*TickerResponse, error) GetTickers(context.Context, *GetTickersRequest) (*GetTickersResponse, error) @@ -4391,101 +4478,6 @@ type GoCryptoTraderServer interface { WithdrawFiatFunds(context.Context, *WithdrawCurrencyRequest) (*WithdrawResponse, error) } -// UnimplementedGoCryptoTraderServer can be embedded to have forward compatible implementations. -type UnimplementedGoCryptoTraderServer struct { -} - -func (*UnimplementedGoCryptoTraderServer) GetInfo(ctx context.Context, req *GetInfoRequest) (*GetInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetInfo not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetExchanges(ctx context.Context, req *GetExchangesRequest) (*GetExchangesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetExchanges not implemented") -} -func (*UnimplementedGoCryptoTraderServer) DisableExchange(ctx context.Context, req *GenericExchangeNameRequest) (*GenericExchangeNameResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DisableExchange not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetExchangeInfo(ctx context.Context, req *GenericExchangeNameRequest) (*GetExchangeInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetExchangeInfo not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetExchangeOTPCode(ctx context.Context, req *GenericExchangeNameRequest) (*GetExchangeOTPReponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetExchangeOTPCode not implemented") -} -func (*UnimplementedGoCryptoTraderServer) EnableExchange(ctx context.Context, req *GenericExchangeNameRequest) (*GenericExchangeNameResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method EnableExchange not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetTicker(ctx context.Context, req *GetTickerRequest) (*TickerResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetTicker not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetTickers(ctx context.Context, req *GetTickersRequest) (*GetTickersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetTickers not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetOrderbook(ctx context.Context, req *GetOrderbookRequest) (*OrderbookResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetOrderbook not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetOrderbooks(ctx context.Context, req *GetOrderbooksRequest) (*GetOrderbooksResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetOrderbooks not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetAccountInfo(ctx context.Context, req *GetAccountInfoRequest) (*GetAccountInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetAccountInfo not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetConfig(ctx context.Context, req *GetConfigRequest) (*GetConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetConfig not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetPortfolio(ctx context.Context, req *GetPortfolioRequest) (*GetPortfolioResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetPortfolio not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetPortfolioSummary(ctx context.Context, req *GetPortfolioSummaryRequest) (*GetPortfolioSummaryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetPortfolioSummary not implemented") -} -func (*UnimplementedGoCryptoTraderServer) AddPortfolioAddress(ctx context.Context, req *AddPortfolioAddressRequest) (*AddPortfolioAddressResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AddPortfolioAddress not implemented") -} -func (*UnimplementedGoCryptoTraderServer) RemovePortfolioAddress(ctx context.Context, req *RemovePortfolioAddressRequest) (*RemovePortfolioAddressResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RemovePortfolioAddress not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetForexProviders(ctx context.Context, req *GetForexProvidersRequest) (*GetForexProvidersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetForexProviders not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetForexRates(ctx context.Context, req *GetForexRatesRequest) (*GetForexRatesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetForexRates not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetOrders(ctx context.Context, req *GetOrdersRequest) (*GetOrdersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetOrders not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetOrder(ctx context.Context, req *GetOrderRequest) (*OrderDetails, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetOrder not implemented") -} -func (*UnimplementedGoCryptoTraderServer) SubmitOrder(ctx context.Context, req *SubmitOrderRequest) (*SubmitOrderResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SubmitOrder not implemented") -} -func (*UnimplementedGoCryptoTraderServer) CancelOrder(ctx context.Context, req *CancelOrderRequest) (*CancelOrderResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CancelOrder not implemented") -} -func (*UnimplementedGoCryptoTraderServer) CancelAllOrders(ctx context.Context, req *CancelAllOrdersRequest) (*CancelAllOrdersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CancelAllOrders not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetEvents(ctx context.Context, req *GetEventsRequest) (*GetEventsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetEvents not implemented") -} -func (*UnimplementedGoCryptoTraderServer) AddEvent(ctx context.Context, req *AddEventRequest) (*AddEventResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AddEvent not implemented") -} -func (*UnimplementedGoCryptoTraderServer) RemoveEvent(ctx context.Context, req *RemoveEventRequest) (*RemoveEventResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RemoveEvent not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetCryptocurrencyDepositAddresses(ctx context.Context, req *GetCryptocurrencyDepositAddressesRequest) (*GetCryptocurrencyDepositAddressesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetCryptocurrencyDepositAddresses not implemented") -} -func (*UnimplementedGoCryptoTraderServer) GetCryptocurrencyDepositAddress(ctx context.Context, req *GetCryptocurrencyDepositAddressRequest) (*GetCryptocurrencyDepositAddressResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetCryptocurrencyDepositAddress not implemented") -} -func (*UnimplementedGoCryptoTraderServer) WithdrawCryptocurrencyFunds(ctx context.Context, req *WithdrawCurrencyRequest) (*WithdrawResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method WithdrawCryptocurrencyFunds not implemented") -} -func (*UnimplementedGoCryptoTraderServer) WithdrawFiatFunds(ctx context.Context, req *WithdrawCurrencyRequest) (*WithdrawResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method WithdrawFiatFunds not implemented") -} - func RegisterGoCryptoTraderServer(s *grpc.Server, srv GoCryptoTraderServer) { s.RegisterService(&_GoCryptoTrader_serviceDesc, srv) } @@ -4580,6 +4572,24 @@ func _GoCryptoTrader_GetExchangeOTPCode_Handler(srv interface{}, ctx context.Con return interceptor(ctx, in, info, handler) } +func _GoCryptoTrader_GetExchangeOTPCodes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetExchangeOTPsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GoCryptoTraderServer).GetExchangeOTPCodes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gctrpc.GoCryptoTrader/GetExchangeOTPCodes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GoCryptoTraderServer).GetExchangeOTPCodes(ctx, req.(*GetExchangeOTPsRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _GoCryptoTrader_EnableExchange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GenericExchangeNameRequest) if err := dec(in); err != nil { @@ -5054,6 +5064,10 @@ var _GoCryptoTrader_serviceDesc = grpc.ServiceDesc{ MethodName: "GetExchangeOTPCode", Handler: _GoCryptoTrader_GetExchangeOTPCode_Handler, }, + { + MethodName: "GetExchangeOTPCodes", + Handler: _GoCryptoTrader_GetExchangeOTPCodes_Handler, + }, { MethodName: "EnableExchange", Handler: _GoCryptoTrader_EnableExchange_Handler, diff --git a/gctrpc/rpc.pb.gw.go b/gctrpc/rpc.pb.gw.go index 8619468a..7844c2e3 100644 --- a/gctrpc/rpc.pb.gw.go +++ b/gctrpc/rpc.pb.gw.go @@ -9,13 +9,13 @@ It translates gRPC into RESTful JSON APIs. package gctrpc import ( - "context" "io" "net/http" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" + "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" @@ -45,10 +45,7 @@ func request_GoCryptoTrader_GetExchanges_0(ctx context.Context, marshaler runtim var protoReq GetExchangesRequest var metadata runtime.ServerMetadata - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_GoCryptoTrader_GetExchanges_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_GoCryptoTrader_GetExchanges_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -82,10 +79,7 @@ func request_GoCryptoTrader_GetExchangeInfo_0(ctx context.Context, marshaler run var protoReq GenericExchangeNameRequest var metadata runtime.ServerMetadata - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_GoCryptoTrader_GetExchangeInfo_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_GoCryptoTrader_GetExchangeInfo_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -102,10 +96,7 @@ func request_GoCryptoTrader_GetExchangeOTPCode_0(ctx context.Context, marshaler var protoReq GenericExchangeNameRequest var metadata runtime.ServerMetadata - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_GoCryptoTrader_GetExchangeOTPCode_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_GoCryptoTrader_GetExchangeOTPCode_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -114,6 +105,15 @@ func request_GoCryptoTrader_GetExchangeOTPCode_0(ctx context.Context, marshaler } +func request_GoCryptoTrader_GetExchangeOTPCodes_0(ctx context.Context, marshaler runtime.Marshaler, client GoCryptoTraderClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetExchangeOTPsRequest + var metadata runtime.ServerMetadata + + msg, err := client.GetExchangeOTPCodes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + func request_GoCryptoTrader_EnableExchange_0(ctx context.Context, marshaler runtime.Marshaler, client GoCryptoTraderClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq GenericExchangeNameRequest var metadata runtime.ServerMetadata @@ -191,10 +191,7 @@ func request_GoCryptoTrader_GetAccountInfo_0(ctx context.Context, marshaler runt var protoReq GetAccountInfoRequest var metadata runtime.ServerMetadata - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_GoCryptoTrader_GetAccountInfo_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_GoCryptoTrader_GetAccountInfo_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -616,6 +613,26 @@ func RegisterGoCryptoTraderHandlerClient(ctx context.Context, mux *runtime.Serve }) + mux.Handle("GET", pattern_GoCryptoTrader_GetExchangeOTPCodes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GoCryptoTrader_GetExchangeOTPCodes_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GoCryptoTrader_GetExchangeOTPCodes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_GoCryptoTrader_EnableExchange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1130,6 +1147,8 @@ var ( pattern_GoCryptoTrader_GetExchangeOTPCode_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "getexchangeotp"}, "")) + pattern_GoCryptoTrader_GetExchangeOTPCodes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "getexchangeotps"}, "")) + pattern_GoCryptoTrader_EnableExchange_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "enableexchange"}, "")) pattern_GoCryptoTrader_GetTicker_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "getticker"}, "")) @@ -1192,6 +1211,8 @@ var ( forward_GoCryptoTrader_GetExchangeOTPCode_0 = runtime.ForwardResponseMessage + forward_GoCryptoTrader_GetExchangeOTPCodes_0 = runtime.ForwardResponseMessage + forward_GoCryptoTrader_EnableExchange_0 = runtime.ForwardResponseMessage forward_GoCryptoTrader_GetTicker_0 = runtime.ForwardResponseMessage diff --git a/gctrpc/rpc.proto b/gctrpc/rpc.proto index e7552126..28552d80 100644 --- a/gctrpc/rpc.proto +++ b/gctrpc/rpc.proto @@ -32,6 +32,12 @@ message GetExchangeOTPReponse { string otp_code = 1; } +message GetExchangeOTPsRequest {} + +message GetExchangeOTPsResponse { + map otp_codes = 1; +} + message DisableExchangeRequest { string exchange = 1; } @@ -422,6 +428,12 @@ service GoCryptoTrader { }; } + rpc GetExchangeOTPCodes (GetExchangeOTPsRequest) returns (GetExchangeOTPsResponse) { + option (google.api.http) = { + get: "/v1/getexchangeotps" + }; + } + rpc EnableExchange (GenericExchangeNameRequest) returns (GenericExchangeNameResponse) { option (google.api.http) = { post: "/v1/enableexchange" diff --git a/gctrpc/rpc.swagger.json b/gctrpc/rpc.swagger.json index 85c7f706..b4fa444f 100644 --- a/gctrpc/rpc.swagger.json +++ b/gctrpc/rpc.swagger.json @@ -327,6 +327,22 @@ ] } }, + "/v1/getexchangeotps": { + "get": { + "operationId": "GetExchangeOTPCodes", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/gctrpcGetExchangeOTPsResponse" + } + } + }, + "tags": [ + "GoCryptoTrader" + ] + } + }, "/v1/getexchanges": { "get": { "operationId": "GetExchanges", @@ -1104,6 +1120,17 @@ } } }, + "gctrpcGetExchangeOTPsResponse": { + "type": "object", + "properties": { + "otp_codes": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, "gctrpcGetExchangesResponse": { "type": "object", "properties": {