diff --git a/cmd/gctcli/commands.go b/cmd/gctcli/commands.go index 5ce218e2677..5dc0c4eb699 100644 --- a/cmd/gctcli/commands.go +++ b/cmd/gctcli/commands.go @@ -183,6 +183,32 @@ func getRPCEndpoints(_ *cli.Context) error { return nil } +var getCommunicationRelayersCommand = cli.Command{ + Name: "getcommsrelayers", + Usage: "gets GoCryptoTrader communication relayers", + Action: getCommunicationRelayers, +} + +func getCommunicationRelayers(_ *cli.Context) error { + conn, err := setupClient() + if err != nil { + return err + } + defer conn.Close() + + client := gctrpc.NewGoCryptoTraderClient(conn) + result, err := client.GetCommunicationRelayers(context.Background(), + &gctrpc.GetCommunicationRelayersRequest{}, + ) + + if err != nil { + return err + } + + jsonOutput(result) + return nil +} + var getExchangesCommand = cli.Command{ Name: "getexchanges", Usage: "gets a list of enabled or available exchanges", diff --git a/cmd/gctcli/main.go b/cmd/gctcli/main.go index 92c4d77d663..8267fa67dbb 100644 --- a/cmd/gctcli/main.go +++ b/cmd/gctcli/main.go @@ -89,6 +89,7 @@ func main() { enableSubsystemCommand, disableSubsystemCommand, getRPCEndpointsCommand, + getCommunicationRelayersCommand, getExchangesCommand, enableExchangeCommand, disableExchangeCommand, diff --git a/communications/base/base.go b/communications/base/base.go index a4ee6b09d74..4090eaa114d 100644 --- a/communications/base/base.go +++ b/communications/base/base.go @@ -24,6 +24,12 @@ type Event struct { Message string } +// CommsStatus stores the status of a comms relayer +type CommsStatus struct { + Enabled bool `json:"enabled"` + Connected bool `json:"connected"` +} + // IsEnabled returns if the comms package has been enabled in the configuration func (b *Base) IsEnabled() bool { return b.Enabled diff --git a/communications/base/base_interface.go b/communications/base/base_interface.go index a45f486f86b..cb5635c2ac9 100644 --- a/communications/base/base_interface.go +++ b/communications/base/base_interface.go @@ -30,7 +30,9 @@ func (c IComm) Setup() { err := c[i].Connect() if err != nil { log.Errorf("Communications: %s failed to connect. Err: %s", c[i].GetName(), err) + continue } + log.Debugf("Communications: %v is enabled and online.", c[i].GetName()) } } } @@ -48,6 +50,18 @@ func (c IComm) PushEvent(event Event) { } } +// GetStatus returns the status of the comms relayers +func (c IComm) GetStatus() map[string]CommsStatus { + result := make(map[string]CommsStatus) + for x := range c { + result[c[x].GetName()] = CommsStatus{ + Enabled: c[x].IsEnabled(), + Connected: c[x].IsConnected(), + } + } + return result +} + // GetEnabledCommunicationMediums prints out enabled and connected communication // packages // (#debug output only) diff --git a/communications/smtpservice/smtpservice.go b/communications/smtpservice/smtpservice.go index 042ae6f8696..90fe0fd4c9c 100644 --- a/communications/smtpservice/smtpservice.go +++ b/communications/smtpservice/smtpservice.go @@ -6,9 +6,9 @@ import ( "net/smtp" "strings" - "github.com/thrasher-/gocryptotrader/common" "github.com/thrasher-/gocryptotrader/communications/base" "github.com/thrasher-/gocryptotrader/config" + log "github.com/thrasher-/gocryptotrader/logger" ) const ( @@ -23,6 +23,7 @@ type SMTPservice struct { Port string AccountName string AccountPassword string + From string RecipientList string } @@ -36,7 +37,9 @@ func (s *SMTPservice) Setup(cfg *config.CommunicationsConfig) { s.Port = cfg.SMTPConfig.Port s.AccountName = cfg.SMTPConfig.AccountName s.AccountPassword = cfg.SMTPConfig.AccountPassword + s.From = cfg.SMTPConfig.From s.RecipientList = cfg.SMTPConfig.RecipientList + log.Debugf("SMTP: Setup - From: %v. To: %s. Server: %s.", s.From, s.RecipientList, s.Host) } // IsConnected returns whether or not the connection is connected @@ -51,36 +54,34 @@ func (s *SMTPservice) Connect() error { } // PushEvent sends an event to supplied recipient list via SMTP -func (s *SMTPservice) PushEvent(base.Event) error { - return common.ErrNotYetImplemented +func (s *SMTPservice) PushEvent(e base.Event) error { + return s.Send(e.Type, e.Message) } // Send sends an email template to the recipient list via your SMTP host when // an internal event is triggered by GoCryptoTrader -func (s *SMTPservice) Send(subject, alert string) error { - if subject == "" || alert == "" { +func (s *SMTPservice) Send(subject, msg string) error { + if subject == "" || msg == "" { return errors.New("STMPservice Send() please add subject and alert") } - list := strings.Split(s.RecipientList, ",") + log.Debugf("SMTP: Sending email to %v. Subject: %s Message: %s [From: %s]", s.RecipientList, + subject, msg, s.From) + messageToSend := fmt.Sprintf( + msgSMTP, + s.RecipientList, + subject, + mime, + msg) - for i := range list { - messageToSend := fmt.Sprintf( - msgSMTP, - list[i], - subject, - mime, - alert) - - err := smtp.SendMail( - s.Host+":"+s.Port, - smtp.PlainAuth("", s.AccountName, s.AccountPassword, s.Host), - s.AccountName, - []string{list[i]}, - []byte(messageToSend)) - if err != nil { - return err - } + err := smtp.SendMail( + s.Host+":"+s.Port, + smtp.PlainAuth("", s.AccountName, s.AccountPassword, s.Host), + s.From, + strings.Split(s.RecipientList, ","), + []byte(messageToSend)) + if err != nil { + return err } return nil } diff --git a/config/config_types.go b/config/config_types.go index 1a535839124..4f506a23e01 100644 --- a/config/config_types.go +++ b/config/config_types.go @@ -251,6 +251,7 @@ type SMTPConfig struct { Port string `json:"port"` AccountName string `json:"accountName"` AccountPassword string `json:"accountPassword"` + From string `json:"from"` RecipientList string `json:"recipientList"` } diff --git a/engine/comms_relayer.go b/engine/comms_relayer.go index d1a842a1e80..d1a94309543 100644 --- a/engine/comms_relayer.go +++ b/engine/comms_relayer.go @@ -47,6 +47,13 @@ func (c *commsManager) Start() (err error) { return nil } +func (c *commsManager) GetStatus() (map[string]base.CommsStatus, error) { + if !c.Started() { + return nil, errors.New("communications manager not started") + } + return c.comms.GetStatus(), nil +} + func (c *commsManager) Stop() error { if atomic.LoadInt32(&c.started) == 0 { return errors.New("communications manager not started") diff --git a/engine/events.go b/engine/events.go index b2fa5d760fb..d8d225b1893 100644 --- a/engine/events.go +++ b/engine/events.go @@ -143,14 +143,12 @@ func (e *Event) ExecuteAction() bool { // String turns the structure event into a string func (e *Event) String() string { return fmt.Sprintf( - "If the %s%s [%s] %s on %s meets the following %v then %s.", e.Pair.Base.String(), - e.Pair.Quote.String(), e.Asset, e.Item, e.Exchange, e.Condition, e.Action, + "If the %s [%s] %s on %s meets the following %v then %s.", e.Pair.String(), + strings.ToUpper(e.Asset.String()), e.Item, e.Exchange, e.Condition, e.Action, ) } func (e *Event) processTicker() bool { - targetPrice := e.Condition.Price - t, err := ticker.GetTicker(e.Exchange, e.Pair, e.Asset) if err != nil { if Bot.Settings.Verbose { @@ -159,16 +157,13 @@ func (e *Event) processTicker() bool { return false } - lastPrice := t.Last - - if lastPrice == 0 { + if t.Last == 0 { if Bot.Settings.Verbose { log.Debugln("Events: ticker last price is 0") } return false } - - return e.processCondition(lastPrice, targetPrice) + return e.processCondition(t.Last, e.Condition.Price) } func (e *Event) processCondition(actual, threshold float64) bool { @@ -259,14 +254,14 @@ func IsValidEvent(exchange, item string, condition EventConditionParams, action } if item == ItemPrice { - if condition.Price == 0 { + if condition.Price <= 0 { return errInvalidCondition } } if item == ItemOrderbook { - if condition.OrderbookAmount == 0 { - return errInvalidAction + if condition.OrderbookAmount <= 0 { + return errInvalidCondition } } @@ -276,10 +271,6 @@ func IsValidEvent(exchange, item string, condition EventConditionParams, action if a[0] != ActionSMSNotify { return errInvalidAction } - - if a[1] != "ALL" { - Bot.CommsManager.PushEvent(base.Event{Type: a[1]}) - } } else if action != ActionConsolePrint && action != ActionTest { return errInvalidAction } @@ -302,10 +293,12 @@ func EventManger() { } success := event.CheckEventCondition() if success { - log.Debugf( - "Events: ID: %d triggered on %s successfully.\n", event.ID, - event.Exchange, + msg := fmt.Sprintf( + "Events: ID: %d triggered on %s successfully [%v]\n", event.ID, + event.Exchange, event.String(), ) + log.Info(msg) + Bot.CommsManager.PushEvent(base.Event{Type: "event", Message: msg}) event.Executed = true } } diff --git a/engine/events_test.go b/engine/events_test.go index 966fd2c41fc..661e2e8762b 100644 --- a/engine/events_test.go +++ b/engine/events_test.go @@ -1,369 +1,358 @@ package engine -// -// import ( -// "testing" -// -// "github.com/thrasher-/gocryptotrader/config" -// "github.com/thrasher-/gocryptotrader/currency/pair" -// "github.com/thrasher-/gocryptotrader/exchanges/ticker" -// "github.com/thrasher-/gocryptotrader/smsglobal" -// ) -// -// var ( -// loaded = false -// ) -// -// func testSetup(t *testing.T) { -// if !loaded { -// cfg := config.GetConfig() -// err := cfg.LoadConfig("") -// if err != nil { -// t.Fatalf("Test failed. Failed to load config %s", err) -// } -// smsglobal.New(cfg.SMS.Username, cfg.SMS.Password, cfg.Name, cfg.SMS.Contacts) -// loaded = true -// } -// } -// -// func TestAddEvent(t *testing.T) { -// testSetup(t) -// -// pair := currency.NewPairFromStrings("BTC", "USD") -// eventID, err := AddEvent("ANX", "price", ">,==", pair, assets.AssetTypeSpot, actionTest) -// if err != nil && eventID != 0 { -// t.Errorf("Test Failed. AddEvent: Error, %s", err) -// } -// eventID, err = AddEvent("ANXX", "price", ">,==", pair, assets.AssetTypeSpot, actionTest) -// if err == nil && eventID == 0 { -// t.Error("Test Failed. AddEvent: Error, error not captured in Exchange") -// } -// eventID, err = AddEvent("ANX", "prices", ">,==", pair, assets.AssetTypeSpot, actionTest) -// if err == nil && eventID == 0 { -// t.Error("Test Failed. AddEvent: Error, error not captured in Item") -// } -// eventID, err = AddEvent("ANX", "price", "3===D", pair, assets.AssetTypeSpot, actionTest) -// if err == nil && eventID == 0 { -// t.Error("Test Failed. AddEvent: Error, error not captured in Condition") -// } -// eventID, err = AddEvent("ANX", "price", ">,==", pair, assets.AssetTypeSpot, "console_prints") -// if err == nil && eventID == 0 { -// t.Error("Test Failed. AddEvent: Error, error not captured in Action") -// } -// -// if !RemoveEvent(eventID) { -// t.Error("Test Failed. RemoveEvent: Error, error removing event") -// } -// } -// -// func TestRemoveEvent(t *testing.T) { -// testSetup(t) -// -// pair := currency.NewPairFromStrings("BTC", "USD") -// eventID, err := AddEvent("ANX", "price", ">,==", pair, assets.AssetTypeSpot, actionTest) -// if err != nil && eventID != 0 { -// t.Errorf("Test Failed. RemoveEvent: Error, %s", err) -// } -// if !RemoveEvent(eventID) { -// t.Error("Test Failed. RemoveEvent: Error, error removing event") -// } -// if RemoveEvent(1234) { -// t.Error("Test Failed. RemoveEvent: Error, error removing event") -// } -// } -// -// func TestGetEventCounter(t *testing.T) { -// testSetup(t) -// -// pair := currency.NewPairFromStrings("BTC", "USD") -// one, err := AddEvent("ANX", "price", ">,==", pair, assets.AssetTypeSpot, actionTest) -// if err != nil { -// t.Errorf("Test Failed. GetEventCounter: Error, %s", err) -// } -// two, err := AddEvent("ANX", "price", ">,==", pair, assets.AssetTypeSpot, actionTest) -// if err != nil { -// t.Errorf("Test Failed. GetEventCounter: Error, %s", err) -// } -// three, err := AddEvent("ANX", "price", ">,==", pair, assets.AssetTypeSpot, actionTest) -// if err != nil { -// t.Errorf("Test Failed. GetEventCounter: Error, %s", err) -// } -// -// Events[three-1].Executed = true -// -// total, _ := GetEventCounter() -// if total <= 0 { -// t.Errorf("Test Failed. GetEventCounter: Total = %d", total) -// } -// if !RemoveEvent(one) { -// t.Error("Test Failed. GetEventCounter: Error, error removing event") -// } -// if !RemoveEvent(two) { -// t.Error("Test Failed. GetEventCounter: Error, error removing event") -// } -// if !RemoveEvent(three) { -// t.Error("Test Failed. GetEventCounter: Error, error removing event") -// } -// -// total2, _ := GetEventCounter() -// if total2 != 0 { -// t.Errorf("Test Failed. GetEventCounter: Total = %d", total2) -// } -// } -// -// func TestExecuteAction(t *testing.T) { -// testSetup(t) -// -// pair := currency.NewPairFromStrings("BTC", "USD") -// one, err := AddEvent("ANX", "price", ">,==", pair, assets.AssetTypeSpot, actionTest) -// if err != nil { -// t.Fatalf("Test Failed. ExecuteAction: Error, %s", err) -// } -// isExecuted := Events[one].ExecuteAction() -// if !isExecuted { -// t.Error("Test Failed. ExecuteAction: Error, error removing event") -// } -// if !RemoveEvent(one) { -// t.Error("Test Failed. ExecuteAction: Error, error removing event") -// } -// -// action := actionSMSNotify + "," + "ALL" -// one, err = AddEvent("ANX", "price", ">,==", pair, assets.AssetTypeSpot, action) -// if err != nil { -// t.Fatalf("Test Failed. ExecuteAction: Error, %s", err) -// } -// -// isExecuted = Events[one].ExecuteAction() -// if !isExecuted { -// t.Error("Test Failed. ExecuteAction: Error, error removing event") -// } -// if !RemoveEvent(one) { -// t.Error("Test Failed. ExecuteAction: Error, error removing event") -// } -// -// action = actionSMSNotify + "," + "StyleGherkin" -// one, err = AddEvent("ANX", "price", ">,==", pair, assets.AssetTypeSpot, action) -// if err != nil { -// t.Fatalf("Test Failed. ExecuteAction: Error, %s", err) -// } -// -// isExecuted = Events[one].ExecuteAction() -// if !isExecuted { -// t.Error("Test Failed. ExecuteAction: Error, error removing event") -// } -// if !RemoveEvent(one) { -// t.Error("Test Failed. ExecuteAction: Error, error removing event") -// } -// // More tests when ExecuteAction is expanded -// } -// -// func TestEventToString(t *testing.T) { -// testSetup(t) -// -// pair := currency.NewPairFromStrings("BTC", "USD") -// one, err := AddEvent("ANX", "price", ">,==", pair, assets.AssetTypeSpot, actionTest) -// if err != nil { -// t.Errorf("Test Failed. EventToString: Error, %s", err) -// } -// -// eventString := Events[one].String() -// if eventString != "If the BTCUSD [SPOT] price on ANX is > == then ACTION_TEST." { -// t.Error("Test Failed. EventToString: Error, incorrect return string") -// } -// -// if !RemoveEvent(one) { -// t.Error("Test Failed. EventToString: Error, error removing event") -// } -// } -// -// func TestCheckCondition(t *testing.T) { -// testSetup(t) -// -// // Test invalid currency pair -// newPair := currency.NewPairFromStrings("A", "B") -// one, err := AddEvent("ANX", "price", ">=,10", newPair, assets.AssetTypeSpot, actionTest) -// if err != nil { -// t.Errorf("Test Failed. CheckCondition: Error, %s", err) -// } -// conditionBool := Events[one].CheckCondition() -// if conditionBool { -// t.Error("Test Failed. CheckCondition: Error, wrong conditional.") -// } -// -// // Test last price == 0 -// var tickerNew ticker.Price -// tickerNew.Last = 0 -// newPair = currency.NewPairFromStrings("BTC", "USD") -// ticker.ProcessTicker("ANX", newPair, tickerNew, exchange.AssetTypeSpot) -// Events[one].Pair = newPair -// conditionBool = Events[one].CheckCondition() -// if conditionBool { -// t.Error("Test Failed. CheckCondition: Error, wrong conditional.") -// } -// -// // Test last pricce > 0 and conditional logic -// tickerNew.Last = 11 -// ticker.ProcessTicker("ANX", newPair, tickerNew, exchange.AssetTypeSpot) -// Events[one].Condition = ">,10" -// conditionBool = Events[one].CheckCondition() -// if !conditionBool { -// t.Error("Test Failed. CheckCondition: Error, wrong conditional.") -// } -// -// // Test last price >= 10 -// Events[one].Condition = ">=,10" -// conditionBool = Events[one].CheckCondition() -// if !conditionBool { -// t.Error("Test Failed. CheckCondition: Error, wrong conditional.") -// } -// -// // Test last price <= 10 -// Events[one].Condition = "<,100" -// conditionBool = Events[one].CheckCondition() -// if !conditionBool { -// t.Error("Test Failed. CheckCondition: Error, wrong conditional.") -// } -// -// // Test last price <= 10 -// Events[one].Condition = "<=,100" -// conditionBool = Events[one].CheckCondition() -// if !conditionBool { -// t.Error("Test Failed. CheckCondition: Error, wrong conditional.") -// } -// -// Events[one].Condition = "==,11" -// conditionBool = Events[one].CheckCondition() -// if !conditionBool { -// t.Error("Test Failed. CheckCondition: Error, wrong conditional.") -// } -// -// Events[one].Condition = "^,11" -// conditionBool = Events[one].CheckCondition() -// if conditionBool { -// t.Error("Test Failed. CheckCondition: Error, wrong conditional.") -// } -// -// if !RemoveEvent(one) { -// t.Error("Test Failed. CheckCondition: Error, error removing event") -// } -// } -// -// func TestIsValidEvent(t *testing.T) { -// testSetup(t) -// -// err := IsValidEvent("ANX", "price", ">,==", actionTest) -// if err != nil { -// t.Errorf("Test Failed. IsValidEvent: %s", err) -// } -// err = IsValidEvent("ANX", "price", ">,", actionTest) -// if err == nil { -// t.Errorf("Test Failed. IsValidEvent: %s", err) -// } -// err = IsValidEvent("ANX", "Testy", ">,==", actionTest) -// if err == nil { -// t.Errorf("Test Failed. IsValidEvent: %s", err) -// } -// err = IsValidEvent("Testys", "price", ">,==", actionTest) -// if err == nil { -// t.Errorf("Test Failed. IsValidEvent: %s", err) -// } -// -// action := "blah,blah" -// err = IsValidEvent("ANX", "price", ">=,10", action) -// if err == nil { -// t.Errorf("Test Failed. IsValidEvent: %s", err) -// } -// -// action = "SMS,blah" -// err = IsValidEvent("ANX", "price", ">=,10", action) -// if err == nil { -// t.Errorf("Test Failed. IsValidEvent: %s", err) -// } -// -// //Function tests need to appended to this function when more actions are -// //implemented -// } -// -// func TestCheckEvents(t *testing.T) { -// testSetup(t) -// -// pair := currency.NewPairFromStrings("BTC", "USD") -// _, err := AddEvent("ANX", "price", ">=,10", pair, assets.AssetTypeSpot, actionTest) -// if err != nil { -// t.Fatal("Test failed. TestChcheckEvents add event") -// } -// -// go CheckEvents() -// } -// -// func TestIsValidExchange(t *testing.T) { -// testSetup(t) -// -// boolean := IsValidExchange("ANX") -// if !boolean { -// t.Error("Test Failed. IsValidExchange: Error, incorrect Exchange") -// } -// boolean = IsValidExchange("OBTUSE") -// if boolean { -// t.Error("Test Failed. IsValidExchange: Error, incorrect return") -// } -// } -// -// func TestIsValidCondition(t *testing.T) { -// testSetup(t) -// -// boolean := IsValidCondition(">") -// if !boolean { -// t.Error("Test Failed. IsValidCondition: Error, incorrect Condition") -// } -// boolean = IsValidCondition(">=") -// if !boolean { -// t.Error("Test Failed. IsValidCondition: Error, incorrect Condition") -// } -// boolean = IsValidCondition("<") -// if !boolean { -// t.Error("Test Failed. IsValidCondition: Error, incorrect Condition") -// } -// boolean = IsValidCondition("<=") -// if !boolean { -// t.Error("Test Failed. IsValidCondition: Error, incorrect Condition") -// } -// boolean = IsValidCondition("==") -// if !boolean { -// t.Error("Test Failed. IsValidCondition: Error, incorrect Condition") -// } -// boolean = IsValidCondition("**********") -// if boolean { -// t.Error("Test Failed. IsValidCondition: Error, incorrect return") -// } -// } -// -// func TestIsValidAction(t *testing.T) { -// testSetup(t) -// -// boolean := IsValidAction("sms") -// if !boolean { -// t.Error("Test Failed. IsValidAction: Error, incorrect Action") -// } -// boolean = IsValidAction(actionTest) -// if !boolean { -// t.Error("Test Failed. IsValidAction: Error, incorrect Action") -// } -// boolean = IsValidAction("randomstring") -// if boolean { -// t.Error("Test Failed. IsValidAction: Error, incorrect return") -// } -// } -// -// func TestIsValidItem(t *testing.T) { -// testSetup(t) -// -// boolean := IsValidItem("price") -// if !boolean { -// t.Error("Test Failed. IsValidItem: Error, incorrect Item") -// } -// boolean = IsValidItem("obtuse") -// if boolean { -// t.Error("Test Failed. IsValidItem: Error, incorrect return") -// } -// } +import ( + "testing" + + "github.com/thrasher-/gocryptotrader/currency" + "github.com/thrasher-/gocryptotrader/exchanges/assets" + "github.com/thrasher-/gocryptotrader/exchanges/orderbook" + "github.com/thrasher-/gocryptotrader/exchanges/ticker" +) + +const ( + testExchange = "Bitstamp" +) + +var ( + configLoaded = false +) + +func addValidEvent() (int64, error) { + return Add(testExchange, + ItemPrice, + EventConditionParams{Condition: ConditionGreaterThan, Price: 1}, + currency.NewPair(currency.BTC, currency.USD), + assets.AssetTypeSpot, + "SMS,test") +} + +func TestAdd(t *testing.T) { + if !configLoaded { + loadConfig(t) + } + + _, err := Add("", "", EventConditionParams{}, currency.Pair{}, "", "") + if err == nil { + t.Error("should err on invalid params") + } + + _, err = addValidEvent() + if err != nil { + t.Error("unexpected result", err) + } + + _, err = addValidEvent() + if err != nil { + t.Error("unexpected result", err) + } + + if len(Events) != 2 { + t.Error("2 events should be stored") + } +} + +func TestRemove(t *testing.T) { + if !configLoaded { + loadConfig(t) + } + + id, err := addValidEvent() + if err != nil { + t.Error("unexpected result", err) + } + + if s := Remove(id); !s { + t.Error("unexpected result") + } + + if s := Remove(id); s { + t.Error("unexpected result") + } +} + +func TestGetEventCounter(t *testing.T) { + if !configLoaded { + loadConfig(t) + } + + _, err := addValidEvent() + if err != nil { + t.Error("unexpected result", err) + } + + n, e := GetEventCounter() + if n == 0 || e > 0 { + t.Error("unexpected result") + } + + Events[0].Executed = true + n, e = GetEventCounter() + if n == 0 || e == 0 { + t.Error("unexpected result") + } +} + +func TestExecuteAction(t *testing.T) { + t.Parallel() + if Bot == nil { + Bot = new(Engine) + } + + var e Event + if r := e.ExecuteAction(); !r { + t.Error("unexpected result") + } + + e.Action = "SMS,test" + if r := e.ExecuteAction(); !r { + t.Error("unexpected result") + } + + e.Action = "SMS,ALL" + if r := e.ExecuteAction(); !r { + t.Error("unexpected result") + } +} + +func TestString(t *testing.T) { + t.Parallel() + e := Event{ + Exchange: testExchange, + Item: ItemPrice, + Condition: EventConditionParams{ + Condition: ConditionGreaterThan, + Price: 1, + }, + Pair: currency.NewPair(currency.BTC, currency.USD), + Asset: assets.AssetTypeSpot, + Action: "SMS,ALL", + } + + if r := e.String(); r != "If the BTCUSD [SPOT] PRICE on Bitstamp meets the following {> 1 false false 0} then SMS,ALL." { + t.Error("unexpected result") + } +} + +func TestProcessTicker(t *testing.T) { + if Bot == nil { + Bot = new(Engine) + } + Bot.Settings.Verbose = true + + e := Event{ + Exchange: testExchange, + Pair: currency.NewPair(currency.BTC, currency.USD), + Asset: assets.AssetTypeSpot, + Condition: EventConditionParams{ + Condition: ConditionGreaterThan, + Price: 1, + }, + } + + // this will throw an err with an unpopulated ticker + ticker.Tickers = nil + if r := e.processTicker(); r { + t.Error("unexpected result") + } + + // now populate it with a 0 entry + tick := ticker.Price{ + Pair: currency.NewPair(currency.BTC, currency.USD), + Last: 0, + } + if err := ticker.ProcessTicker(e.Exchange, &tick, e.Asset); err != nil { + t.Fatal("unexpected result:", err) + } + if r := e.processTicker(); r { + t.Error("unexpected result") + } + + // now populate it with a number > 0 + tick.Last = 1337 + if err := ticker.ProcessTicker(e.Exchange, &tick, e.Asset); err != nil { + t.Fatal("unexpected result:", err) + } + if r := e.processTicker(); !r { + t.Error("unexpected result") + } +} + +func TestProcessCondition(t *testing.T) { + t.Parallel() + var e Event + tester := []struct { + Condition string + Actual float64 + Threshold float64 + ExpectedResult bool + }{ + {ConditionGreaterThan, 1, 2, false}, + {ConditionGreaterThan, 2, 1, true}, + {ConditionGreaterThanOrEqual, 1, 2, false}, + {ConditionGreaterThanOrEqual, 2, 1, true}, + {ConditionIsEqual, 1, 1, true}, + {ConditionIsEqual, 1, 2, false}, + {ConditionLessThan, 1, 2, true}, + {ConditionLessThan, 2, 1, false}, + {ConditionLessThanOrEqual, 1, 2, true}, + {ConditionLessThanOrEqual, 2, 1, false}, + } + for x := range tester { + e.Condition.Condition = tester[x].Condition + if r := e.processCondition(tester[x].Actual, tester[x].Threshold); r != tester[x].ExpectedResult { + t.Error("unexpected result") + } + } +} + +func TestProcessOrderbook(t *testing.T) { + if Bot == nil { + Bot = new(Engine) + } + Bot.Settings.Verbose = true + + e := Event{ + Exchange: testExchange, + Pair: currency.NewPair(currency.BTC, currency.USD), + Asset: assets.AssetTypeSpot, + Condition: EventConditionParams{ + Condition: ConditionGreaterThan, + CheckBidsAndAsks: true, + OrderbookAmount: 100, + }, + } + + // this will throw an err with an unpopulated orderbook + orderbook.Orderbooks = nil + if r := e.processOrderbook(); r { + t.Error("unexpected result") + } + + // now populate it with a 0 entry + o := orderbook.Base{ + Pair: currency.NewPair(currency.BTC, currency.USD), + Bids: []orderbook.Item{{Amount: 24, Price: 23}}, + Asks: []orderbook.Item{{Amount: 24, Price: 23}}, + ExchangeName: e.Exchange, + AssetType: e.Asset, + } + if err := o.Process(); err != nil { + t.Fatal("unexpected result:", err) + } + + if r := e.processOrderbook(); !r { + t.Error("unexpected result") + } +} + +func TestCheckEventCondition(t *testing.T) { + t.Parallel() + if Bot == nil { + Bot = new(Engine) + } + Bot.Settings.Verbose = true + + e := Event{ + Item: ItemPrice, + } + if r := e.CheckEventCondition(); r { + t.Error("unexpected result") + } + + e.Item = ItemOrderbook + if r := e.CheckEventCondition(); r { + t.Error("unexpected result") + } +} + +func TestIsValidEvent(t *testing.T) { + if !configLoaded { + loadConfig(t) + } + + // invalid exchange name + if err := IsValidEvent("meow", "", EventConditionParams{}, ""); err != errExchangeDisabled { + t.Error("unexpected result:", err) + } + + // invalid item + if err := IsValidEvent(testExchange, "", EventConditionParams{}, ""); err != errInvalidItem { + t.Error("unexpected result:", err) + } + + // invalid condition + if err := IsValidEvent(testExchange, ItemPrice, EventConditionParams{}, ""); err != errInvalidCondition { + t.Error("unexpected result:", err) + } + + // valid condition but empty price which will still throw an errInvalidCondition + c := EventConditionParams{ + Condition: ConditionGreaterThan, + } + if err := IsValidEvent(testExchange, ItemPrice, c, ""); err != errInvalidCondition { + t.Error("unexpected result:", err) + } + + // valid condition but empty orderbook amount will still still throw an errInvalidCondition + if err := IsValidEvent(testExchange, ItemOrderbook, c, ""); err != errInvalidCondition { + t.Error("unexpected result:", err) + } + + // test action splitting, but invalid + c.OrderbookAmount = 1337 + if err := IsValidEvent(testExchange, ItemOrderbook, c, "a,meow"); err != errInvalidAction { + t.Error("unexpected result:", err) + } + + // check for invalid action without splitting + if err := IsValidEvent(testExchange, ItemOrderbook, c, "hi"); err != errInvalidAction { + t.Error("unexpected result:", err) + } + + // valid event + if err := IsValidEvent(testExchange, ItemOrderbook, c, "SMS,test"); err != nil { + t.Error("unexpected result:", err) + } +} + +func TestIsValidExchange(t *testing.T) { + t.Parallel() + if s := IsValidExchange("invalidexchangerino"); s { + t.Error("unexpected result") + } + + loadConfig(t) + if s := IsValidExchange(testExchange); !s { + t.Error("unexpected result") + } +} + +func TestIsValidCondition(t *testing.T) { + t.Parallel() + if s := IsValidCondition("invalidconditionerino"); s { + t.Error("unexpected result") + } + if s := IsValidCondition(ConditionGreaterThan); !s { + t.Error("unexpected result") + } +} + +func TestIsValidAction(t *testing.T) { + t.Parallel() + if s := IsValidAction("invalidactionerino"); s { + t.Error("unexpected result") + } + if s := IsValidAction(ActionSMSNotify); !s { + t.Error("unexpected result") + } +} + +func TestIsValidItem(t *testing.T) { + t.Parallel() + if s := IsValidItem("invaliditemerino"); s { + t.Error("unexpected result") + } + if s := IsValidItem(ItemPrice); !s { + t.Error("unexpected result") + } +} diff --git a/engine/rpcserver.go b/engine/rpcserver.go index 958e21943f5..8f5237a5f08 100644 --- a/engine/rpcserver.go +++ b/engine/rpcserver.go @@ -195,6 +195,24 @@ func (s *RPCServer) GetRPCEndpoints(ctx context.Context, r *gctrpc.GetRPCEndpoin return &resp, nil } +// GetCommunicationRelayers returns the status of the engines communication relayers +func (s *RPCServer) GetCommunicationRelayers(ctx context.Context, r *gctrpc.GetCommunicationRelayersRequest) (*gctrpc.GetCommunicationRelayersResponse, error) { + relayers, err := Bot.CommsManager.GetStatus() + if err != nil { + return nil, err + } + + var resp gctrpc.GetCommunicationRelayersResponse + resp.CommunicationRelayers = make(map[string]*gctrpc.CommunicationRelayer) + for k, v := range relayers { + resp.CommunicationRelayers[k] = &gctrpc.CommunicationRelayer{ + Enabled: v.Enabled, + Connected: v.Connected, + } + } + return &resp, nil +} + // GetExchanges returns a list of exchanges // Param is whether or not you wish to list enabled exchanges func (s *RPCServer) GetExchanges(ctx context.Context, r *gctrpc.GetExchangesRequest) (*gctrpc.GetExchangesResponse, error) { diff --git a/gctrpc/rpc.pb.go b/gctrpc/rpc.pb.go index 64af67facd3..a889663ecbb 100644 --- a/gctrpc/rpc.pb.go +++ b/gctrpc/rpc.pb.go @@ -141,7 +141,6 @@ func (m *GetInfoResponse) GetRpcEndpoints() map[string]*RPCEndpoint { return nil } -// TO-DO comms APIs type GetCommunicationRelayersRequest struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -173,17 +172,65 @@ func (m *GetCommunicationRelayersRequest) XXX_DiscardUnknown() { var xxx_messageInfo_GetCommunicationRelayersRequest proto.InternalMessageInfo -type GetCommunicationRelayersResponse struct { +type CommunicationRelayer struct { + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` + Connected bool `protobuf:"varint,2,opt,name=connected,proto3" json:"connected,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } +func (m *CommunicationRelayer) Reset() { *m = CommunicationRelayer{} } +func (m *CommunicationRelayer) String() string { return proto.CompactTextString(m) } +func (*CommunicationRelayer) ProtoMessage() {} +func (*CommunicationRelayer) Descriptor() ([]byte, []int) { + return fileDescriptor_77a6da22d6a3feb1, []int{3} +} + +func (m *CommunicationRelayer) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CommunicationRelayer.Unmarshal(m, b) +} +func (m *CommunicationRelayer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CommunicationRelayer.Marshal(b, m, deterministic) +} +func (m *CommunicationRelayer) XXX_Merge(src proto.Message) { + xxx_messageInfo_CommunicationRelayer.Merge(m, src) +} +func (m *CommunicationRelayer) XXX_Size() int { + return xxx_messageInfo_CommunicationRelayer.Size(m) +} +func (m *CommunicationRelayer) XXX_DiscardUnknown() { + xxx_messageInfo_CommunicationRelayer.DiscardUnknown(m) +} + +var xxx_messageInfo_CommunicationRelayer proto.InternalMessageInfo + +func (m *CommunicationRelayer) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +func (m *CommunicationRelayer) GetConnected() bool { + if m != nil { + return m.Connected + } + return false +} + +type GetCommunicationRelayersResponse struct { + CommunicationRelayers map[string]*CommunicationRelayer `protobuf:"bytes,1,rep,name=communication_relayers,json=communicationRelayers,proto3" json:"communication_relayers,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 *GetCommunicationRelayersResponse) Reset() { *m = GetCommunicationRelayersResponse{} } func (m *GetCommunicationRelayersResponse) String() string { return proto.CompactTextString(m) } func (*GetCommunicationRelayersResponse) ProtoMessage() {} func (*GetCommunicationRelayersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{3} + return fileDescriptor_77a6da22d6a3feb1, []int{4} } func (m *GetCommunicationRelayersResponse) XXX_Unmarshal(b []byte) error { @@ -204,6 +251,13 @@ func (m *GetCommunicationRelayersResponse) XXX_DiscardUnknown() { var xxx_messageInfo_GetCommunicationRelayersResponse proto.InternalMessageInfo +func (m *GetCommunicationRelayersResponse) GetCommunicationRelayers() map[string]*CommunicationRelayer { + if m != nil { + return m.CommunicationRelayers + } + return nil +} + type GenericSubsystemRequest struct { Subsystem string `protobuf:"bytes,1,opt,name=subsystem,proto3" json:"subsystem,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -215,7 +269,7 @@ func (m *GenericSubsystemRequest) Reset() { *m = GenericSubsystemRequest func (m *GenericSubsystemRequest) String() string { return proto.CompactTextString(m) } func (*GenericSubsystemRequest) ProtoMessage() {} func (*GenericSubsystemRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{4} + return fileDescriptor_77a6da22d6a3feb1, []int{5} } func (m *GenericSubsystemRequest) XXX_Unmarshal(b []byte) error { @@ -253,7 +307,7 @@ func (m *GenericSubsystemResponse) Reset() { *m = GenericSubsystemRespon func (m *GenericSubsystemResponse) String() string { return proto.CompactTextString(m) } func (*GenericSubsystemResponse) ProtoMessage() {} func (*GenericSubsystemResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{5} + return fileDescriptor_77a6da22d6a3feb1, []int{6} } func (m *GenericSubsystemResponse) XXX_Unmarshal(b []byte) error { @@ -284,7 +338,7 @@ func (m *GetSubsystemsRequest) Reset() { *m = GetSubsystemsRequest{} } func (m *GetSubsystemsRequest) String() string { return proto.CompactTextString(m) } func (*GetSubsystemsRequest) ProtoMessage() {} func (*GetSubsystemsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{6} + return fileDescriptor_77a6da22d6a3feb1, []int{7} } func (m *GetSubsystemsRequest) XXX_Unmarshal(b []byte) error { @@ -316,7 +370,7 @@ func (m *GetSusbsytemsResponse) Reset() { *m = GetSusbsytemsResponse{} } func (m *GetSusbsytemsResponse) String() string { return proto.CompactTextString(m) } func (*GetSusbsytemsResponse) ProtoMessage() {} func (*GetSusbsytemsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{7} + return fileDescriptor_77a6da22d6a3feb1, []int{8} } func (m *GetSusbsytemsResponse) XXX_Unmarshal(b []byte) error { @@ -354,7 +408,7 @@ func (m *GetRPCEndpointsRequest) Reset() { *m = GetRPCEndpointsRequest{} func (m *GetRPCEndpointsRequest) String() string { return proto.CompactTextString(m) } func (*GetRPCEndpointsRequest) ProtoMessage() {} func (*GetRPCEndpointsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{8} + return fileDescriptor_77a6da22d6a3feb1, []int{9} } func (m *GetRPCEndpointsRequest) XXX_Unmarshal(b []byte) error { @@ -387,7 +441,7 @@ func (m *RPCEndpoint) Reset() { *m = RPCEndpoint{} } func (m *RPCEndpoint) String() string { return proto.CompactTextString(m) } func (*RPCEndpoint) ProtoMessage() {} func (*RPCEndpoint) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{9} + return fileDescriptor_77a6da22d6a3feb1, []int{10} } func (m *RPCEndpoint) XXX_Unmarshal(b []byte) error { @@ -433,7 +487,7 @@ func (m *GetRPCEndpointsResponse) Reset() { *m = GetRPCEndpointsResponse func (m *GetRPCEndpointsResponse) String() string { return proto.CompactTextString(m) } func (*GetRPCEndpointsResponse) ProtoMessage() {} func (*GetRPCEndpointsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{10} + return fileDescriptor_77a6da22d6a3feb1, []int{11} } func (m *GetRPCEndpointsResponse) XXX_Unmarshal(b []byte) error { @@ -472,7 +526,7 @@ func (m *GenericExchangeNameRequest) Reset() { *m = GenericExchangeNameR func (m *GenericExchangeNameRequest) String() string { return proto.CompactTextString(m) } func (*GenericExchangeNameRequest) ProtoMessage() {} func (*GenericExchangeNameRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{11} + return fileDescriptor_77a6da22d6a3feb1, []int{12} } func (m *GenericExchangeNameRequest) XXX_Unmarshal(b []byte) error { @@ -510,7 +564,7 @@ func (m *GenericExchangeNameResponse) Reset() { *m = GenericExchangeName func (m *GenericExchangeNameResponse) String() string { return proto.CompactTextString(m) } func (*GenericExchangeNameResponse) ProtoMessage() {} func (*GenericExchangeNameResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{12} + return fileDescriptor_77a6da22d6a3feb1, []int{13} } func (m *GenericExchangeNameResponse) XXX_Unmarshal(b []byte) error { @@ -542,7 +596,7 @@ func (m *GetExchangesRequest) Reset() { *m = GetExchangesRequest{} } func (m *GetExchangesRequest) String() string { return proto.CompactTextString(m) } func (*GetExchangesRequest) ProtoMessage() {} func (*GetExchangesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{13} + return fileDescriptor_77a6da22d6a3feb1, []int{14} } func (m *GetExchangesRequest) XXX_Unmarshal(b []byte) error { @@ -581,7 +635,7 @@ func (m *GetExchangesResponse) Reset() { *m = GetExchangesResponse{} } func (m *GetExchangesResponse) String() string { return proto.CompactTextString(m) } func (*GetExchangesResponse) ProtoMessage() {} func (*GetExchangesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{14} + return fileDescriptor_77a6da22d6a3feb1, []int{15} } func (m *GetExchangesResponse) XXX_Unmarshal(b []byte) error { @@ -620,7 +674,7 @@ func (m *GetExchangeOTPReponse) Reset() { *m = GetExchangeOTPReponse{} } func (m *GetExchangeOTPReponse) String() string { return proto.CompactTextString(m) } func (*GetExchangeOTPReponse) ProtoMessage() {} func (*GetExchangeOTPReponse) Descriptor() ([]byte, []int) { - return fileDescriptor_77a6da22d6a3feb1, []int{15} + return fileDescriptor_77a6da22d6a3feb1, []int{16} } func (m *GetExchangeOTPReponse) XXX_Unmarshal(b []byte) error { @@ -658,7 +712,7 @@ 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{16} + return fileDescriptor_77a6da22d6a3feb1, []int{17} } func (m *GetExchangeOTPsRequest) XXX_Unmarshal(b []byte) error { @@ -690,7 +744,7 @@ 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{17} + return fileDescriptor_77a6da22d6a3feb1, []int{18} } func (m *GetExchangeOTPsResponse) XXX_Unmarshal(b []byte) error { @@ -729,7 +783,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{18} + return fileDescriptor_77a6da22d6a3feb1, []int{19} } func (m *DisableExchangeRequest) XXX_Unmarshal(b []byte) error { @@ -779,7 +833,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{19} + return fileDescriptor_77a6da22d6a3feb1, []int{20} } func (m *GetExchangeInfoResponse) XXX_Unmarshal(b []byte) error { @@ -897,7 +951,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{20} + return fileDescriptor_77a6da22d6a3feb1, []int{21} } func (m *GetTickerRequest) XXX_Unmarshal(b []byte) error { @@ -952,7 +1006,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{21} + return fileDescriptor_77a6da22d6a3feb1, []int{22} } func (m *CurrencyPair) XXX_Unmarshal(b []byte) error { @@ -1014,7 +1068,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{22} + return fileDescriptor_77a6da22d6a3feb1, []int{23} } func (m *TickerResponse) XXX_Unmarshal(b []byte) error { @@ -1115,7 +1169,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{23} + return fileDescriptor_77a6da22d6a3feb1, []int{24} } func (m *GetTickersRequest) XXX_Unmarshal(b []byte) error { @@ -1148,7 +1202,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{24} + return fileDescriptor_77a6da22d6a3feb1, []int{25} } func (m *Tickers) XXX_Unmarshal(b []byte) error { @@ -1194,7 +1248,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{25} + return fileDescriptor_77a6da22d6a3feb1, []int{26} } func (m *GetTickersResponse) XXX_Unmarshal(b []byte) error { @@ -1235,7 +1289,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{26} + return fileDescriptor_77a6da22d6a3feb1, []int{27} } func (m *GetOrderbookRequest) XXX_Unmarshal(b []byte) error { @@ -1290,7 +1344,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{27} + return fileDescriptor_77a6da22d6a3feb1, []int{28} } func (m *OrderbookItem) XXX_Unmarshal(b []byte) error { @@ -1348,7 +1402,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{28} + return fileDescriptor_77a6da22d6a3feb1, []int{29} } func (m *OrderbookResponse) XXX_Unmarshal(b []byte) error { @@ -1421,7 +1475,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{29} + return fileDescriptor_77a6da22d6a3feb1, []int{30} } func (m *GetOrderbooksRequest) XXX_Unmarshal(b []byte) error { @@ -1454,7 +1508,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{30} + return fileDescriptor_77a6da22d6a3feb1, []int{31} } func (m *Orderbooks) XXX_Unmarshal(b []byte) error { @@ -1500,7 +1554,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{31} + return fileDescriptor_77a6da22d6a3feb1, []int{32} } func (m *GetOrderbooksResponse) XXX_Unmarshal(b []byte) error { @@ -1539,7 +1593,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{32} + return fileDescriptor_77a6da22d6a3feb1, []int{33} } func (m *GetAccountInfoRequest) XXX_Unmarshal(b []byte) error { @@ -1579,7 +1633,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{33} + return fileDescriptor_77a6da22d6a3feb1, []int{34} } func (m *Account) XXX_Unmarshal(b []byte) error { @@ -1627,7 +1681,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{34} + return fileDescriptor_77a6da22d6a3feb1, []int{35} } func (m *AccountCurrencyInfo) XXX_Unmarshal(b []byte) error { @@ -1681,7 +1735,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{35} + return fileDescriptor_77a6da22d6a3feb1, []int{36} } func (m *GetAccountInfoResponse) XXX_Unmarshal(b []byte) error { @@ -1726,7 +1780,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{36} + return fileDescriptor_77a6da22d6a3feb1, []int{37} } func (m *GetConfigRequest) XXX_Unmarshal(b []byte) error { @@ -1758,7 +1812,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{37} + return fileDescriptor_77a6da22d6a3feb1, []int{38} } func (m *GetConfigResponse) XXX_Unmarshal(b []byte) error { @@ -1800,7 +1854,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{38} + return fileDescriptor_77a6da22d6a3feb1, []int{39} } func (m *PortfolioAddress) XXX_Unmarshal(b []byte) error { @@ -1859,7 +1913,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{39} + return fileDescriptor_77a6da22d6a3feb1, []int{40} } func (m *GetPortfolioRequest) XXX_Unmarshal(b []byte) error { @@ -1891,7 +1945,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{40} + return fileDescriptor_77a6da22d6a3feb1, []int{41} } func (m *GetPortfolioResponse) XXX_Unmarshal(b []byte) error { @@ -1929,7 +1983,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{41} + return fileDescriptor_77a6da22d6a3feb1, []int{42} } func (m *GetPortfolioSummaryRequest) XXX_Unmarshal(b []byte) error { @@ -1964,7 +2018,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{42} + return fileDescriptor_77a6da22d6a3feb1, []int{43} } func (m *Coin) XXX_Unmarshal(b []byte) error { @@ -2026,7 +2080,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{43} + return fileDescriptor_77a6da22d6a3feb1, []int{44} } func (m *OfflineCoinSummary) XXX_Unmarshal(b []byte) error { @@ -2080,7 +2134,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{44} + return fileDescriptor_77a6da22d6a3feb1, []int{45} } func (m *OnlineCoinSummary) XXX_Unmarshal(b []byte) error { @@ -2126,7 +2180,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{45} + return fileDescriptor_77a6da22d6a3feb1, []int{46} } func (m *OfflineCoins) XXX_Unmarshal(b []byte) error { @@ -2165,7 +2219,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{46} + return fileDescriptor_77a6da22d6a3feb1, []int{47} } func (m *OnlineCoins) XXX_Unmarshal(b []byte) error { @@ -2208,7 +2262,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{47} + return fileDescriptor_77a6da22d6a3feb1, []int{48} } func (m *GetPortfolioSummaryResponse) XXX_Unmarshal(b []byte) error { @@ -2278,7 +2332,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{48} + return fileDescriptor_77a6da22d6a3feb1, []int{49} } func (m *AddPortfolioAddressRequest) XXX_Unmarshal(b []byte) error { @@ -2337,7 +2391,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{49} + return fileDescriptor_77a6da22d6a3feb1, []int{50} } func (m *AddPortfolioAddressResponse) XXX_Unmarshal(b []byte) error { @@ -2371,7 +2425,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{50} + return fileDescriptor_77a6da22d6a3feb1, []int{51} } func (m *RemovePortfolioAddressRequest) XXX_Unmarshal(b []byte) error { @@ -2423,7 +2477,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{51} + return fileDescriptor_77a6da22d6a3feb1, []int{52} } func (m *RemovePortfolioAddressResponse) XXX_Unmarshal(b []byte) error { @@ -2454,7 +2508,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{52} + return fileDescriptor_77a6da22d6a3feb1, []int{53} } func (m *GetForexProvidersRequest) XXX_Unmarshal(b []byte) error { @@ -2492,7 +2546,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{53} + return fileDescriptor_77a6da22d6a3feb1, []int{54} } func (m *ForexProvider) XXX_Unmarshal(b []byte) error { @@ -2573,7 +2627,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{54} + return fileDescriptor_77a6da22d6a3feb1, []int{55} } func (m *GetForexProvidersResponse) XXX_Unmarshal(b []byte) error { @@ -2611,7 +2665,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{55} + return fileDescriptor_77a6da22d6a3feb1, []int{56} } func (m *GetForexRatesRequest) XXX_Unmarshal(b []byte) error { @@ -2646,7 +2700,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{56} + return fileDescriptor_77a6da22d6a3feb1, []int{57} } func (m *ForexRatesConversion) XXX_Unmarshal(b []byte) error { @@ -2706,7 +2760,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{57} + return fileDescriptor_77a6da22d6a3feb1, []int{58} } func (m *GetForexRatesResponse) XXX_Unmarshal(b []byte) error { @@ -2756,7 +2810,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{58} + return fileDescriptor_77a6da22d6a3feb1, []int{59} } func (m *OrderDetails) XXX_Unmarshal(b []byte) error { @@ -2874,7 +2928,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{59} + return fileDescriptor_77a6da22d6a3feb1, []int{60} } func (m *GetOrdersRequest) XXX_Unmarshal(b []byte) error { @@ -2927,7 +2981,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{60} + return fileDescriptor_77a6da22d6a3feb1, []int{61} } func (m *GetOrdersResponse) XXX_Unmarshal(b []byte) error { @@ -2967,7 +3021,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{61} + return fileDescriptor_77a6da22d6a3feb1, []int{62} } func (m *GetOrderRequest) XXX_Unmarshal(b []byte) error { @@ -3019,7 +3073,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{62} + return fileDescriptor_77a6da22d6a3feb1, []int{63} } func (m *SubmitOrderRequest) XXX_Unmarshal(b []byte) error { @@ -3101,7 +3155,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{63} + return fileDescriptor_77a6da22d6a3feb1, []int{64} } func (m *SubmitOrderResponse) XXX_Unmarshal(b []byte) error { @@ -3153,7 +3207,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{64} + return fileDescriptor_77a6da22d6a3feb1, []int{65} } func (m *CancelOrderRequest) XXX_Unmarshal(b []byte) error { @@ -3233,7 +3287,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{65} + return fileDescriptor_77a6da22d6a3feb1, []int{66} } func (m *CancelOrderResponse) XXX_Unmarshal(b []byte) error { @@ -3265,7 +3319,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{66} + return fileDescriptor_77a6da22d6a3feb1, []int{67} } func (m *CancelAllOrdersRequest) XXX_Unmarshal(b []byte) error { @@ -3304,7 +3358,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{67} + return fileDescriptor_77a6da22d6a3feb1, []int{68} } func (m *CancelAllOrdersResponse) XXX_Unmarshal(b []byte) error { @@ -3344,7 +3398,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{67, 0} + return fileDescriptor_77a6da22d6a3feb1, []int{68, 0} } func (m *CancelAllOrdersResponse_Orders) XXX_Unmarshal(b []byte) error { @@ -3389,7 +3443,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{68} + return fileDescriptor_77a6da22d6a3feb1, []int{69} } func (m *GetEventsRequest) XXX_Unmarshal(b []byte) error { @@ -3425,7 +3479,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{69} + return fileDescriptor_77a6da22d6a3feb1, []int{70} } func (m *ConditionParams) XXX_Unmarshal(b []byte) error { @@ -3498,7 +3552,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{70} + return fileDescriptor_77a6da22d6a3feb1, []int{71} } func (m *GetEventsResponse) XXX_Unmarshal(b []byte) error { @@ -3584,7 +3638,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{71} + return fileDescriptor_77a6da22d6a3feb1, []int{72} } func (m *AddEventRequest) XXX_Unmarshal(b []byte) error { @@ -3658,7 +3712,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{72} + return fileDescriptor_77a6da22d6a3feb1, []int{73} } func (m *AddEventResponse) XXX_Unmarshal(b []byte) error { @@ -3697,7 +3751,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{73} + return fileDescriptor_77a6da22d6a3feb1, []int{74} } func (m *RemoveEventRequest) XXX_Unmarshal(b []byte) error { @@ -3735,7 +3789,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{74} + return fileDescriptor_77a6da22d6a3feb1, []int{75} } func (m *RemoveEventResponse) XXX_Unmarshal(b []byte) error { @@ -3769,7 +3823,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{75} + return fileDescriptor_77a6da22d6a3feb1, []int{76} } func (m *GetCryptocurrencyDepositAddressesRequest) XXX_Unmarshal(b []byte) error { @@ -3810,7 +3864,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{76} + return fileDescriptor_77a6da22d6a3feb1, []int{77} } func (m *GetCryptocurrencyDepositAddressesResponse) XXX_Unmarshal(b []byte) error { @@ -3852,7 +3906,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{77} + return fileDescriptor_77a6da22d6a3feb1, []int{78} } func (m *GetCryptocurrencyDepositAddressRequest) XXX_Unmarshal(b []byte) error { @@ -3900,7 +3954,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{78} + return fileDescriptor_77a6da22d6a3feb1, []int{79} } func (m *GetCryptocurrencyDepositAddressResponse) XXX_Unmarshal(b []byte) error { @@ -3955,7 +4009,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{79} + return fileDescriptor_77a6da22d6a3feb1, []int{80} } func (m *WithdrawCurrencyRequest) XXX_Unmarshal(b []byte) error { @@ -4106,7 +4160,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{80} + return fileDescriptor_77a6da22d6a3feb1, []int{81} } func (m *WithdrawResponse) XXX_Unmarshal(b []byte) error { @@ -4140,7 +4194,9 @@ func init() { proto.RegisterMapType((map[string]*RPCEndpoint)(nil), "gctrpc.GetInfoResponse.RpcEndpointsEntry") proto.RegisterMapType((map[string]bool)(nil), "gctrpc.GetInfoResponse.SubsystemStatusEntry") proto.RegisterType((*GetCommunicationRelayersRequest)(nil), "gctrpc.GetCommunicationRelayersRequest") + proto.RegisterType((*CommunicationRelayer)(nil), "gctrpc.CommunicationRelayer") proto.RegisterType((*GetCommunicationRelayersResponse)(nil), "gctrpc.GetCommunicationRelayersResponse") + proto.RegisterMapType((map[string]*CommunicationRelayer)(nil), "gctrpc.GetCommunicationRelayersResponse.CommunicationRelayersEntry") proto.RegisterType((*GenericSubsystemRequest)(nil), "gctrpc.GenericSubsystemRequest") proto.RegisterType((*GenericSubsystemResponse)(nil), "gctrpc.GenericSubsystemResponse") proto.RegisterType((*GetSubsystemsRequest)(nil), "gctrpc.GetSubsystemsRequest") @@ -4232,255 +4288,261 @@ func init() { func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) } var fileDescriptor_77a6da22d6a3feb1 = []byte{ - // 3962 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3b, 0x4b, 0x6c, 0x24, 0x49, - 0x56, 0xca, 0xb2, 0xdb, 0x76, 0xbd, 0x2a, 0xbb, 0xec, 0xf0, 0xaf, 0x5c, 0xb6, 0xdb, 0xee, 0x1c, - 0xba, 0xa7, 0x7b, 0x3e, 0xf6, 0x4e, 0x4f, 0x8b, 0x1d, 0x76, 0x96, 0x05, 0x8f, 0xa7, 0xc7, 0xdb, - 0xec, 0xee, 0xb4, 0xc9, 0xee, 0xed, 0x91, 0x66, 0x11, 0x45, 0xba, 0x32, 0x6c, 0xa7, 0x9c, 0x95, - 0x99, 0x93, 0x19, 0x65, 0x77, 0xad, 0x90, 0x90, 0x56, 0xe2, 0x0a, 0x07, 0x84, 0xc4, 0x81, 0x13, - 0x47, 0x24, 0x2e, 0x88, 0x13, 0x87, 0x11, 0x57, 0xc4, 0x91, 0x0b, 0xdc, 0x11, 0x37, 0xe0, 0xc4, - 0x85, 0x13, 0x8a, 0x17, 0x9f, 0x8c, 0xa8, 0xcc, 0x2a, 0x57, 0xef, 0x8c, 0xe6, 0xd2, 0x5d, 0xf9, - 0xe2, 0xc5, 0x7b, 0x2f, 0xde, 0x7b, 0xf1, 0xe2, 0xbd, 0x17, 0x61, 0xa8, 0x67, 0x69, 0xef, 0x20, - 0xcd, 0x12, 0x96, 0x90, 0xb9, 0x8b, 0x1e, 0xcb, 0xd2, 0x5e, 0x67, 0xe7, 0x22, 0x49, 0x2e, 0x22, - 0x7a, 0xe8, 0xa7, 0xe1, 0xa1, 0x1f, 0xc7, 0x09, 0xf3, 0x59, 0x98, 0xc4, 0xb9, 0xc0, 0x72, 0x97, - 0x61, 0xe9, 0x84, 0xb2, 0x67, 0xf1, 0x79, 0xe2, 0xd1, 0xaf, 0x06, 0x34, 0x67, 0xee, 0x3f, 0xcc, - 0x42, 0x4b, 0x83, 0xf2, 0x34, 0x89, 0x73, 0x4a, 0x36, 0x60, 0x6e, 0x90, 0xb2, 0xb0, 0x4f, 0xdb, - 0xce, 0xbe, 0xf3, 0xb0, 0xee, 0xc9, 0x2f, 0x72, 0x08, 0xab, 0xfe, 0xb5, 0x1f, 0x46, 0xfe, 0x59, - 0x44, 0xbb, 0xf4, 0x75, 0xef, 0xd2, 0x8f, 0x2f, 0x68, 0xde, 0xae, 0xed, 0x3b, 0x0f, 0x67, 0x3c, - 0xa2, 0x87, 0x9e, 0xaa, 0x11, 0xf2, 0x2e, 0xac, 0xd0, 0x98, 0x83, 0x02, 0x03, 0x7d, 0x06, 0xd1, - 0x97, 0xe5, 0x40, 0x81, 0xfc, 0x04, 0x36, 0x02, 0x7a, 0xee, 0x0f, 0x22, 0xd6, 0x3d, 0x4f, 0x32, - 0xfa, 0xba, 0x9b, 0x66, 0xc9, 0x75, 0x18, 0xd0, 0xac, 0x3d, 0x8b, 0x52, 0xac, 0xc9, 0xd1, 0xcf, - 0xf8, 0xe0, 0xa9, 0x1c, 0x23, 0x8f, 0x61, 0x5d, 0xcf, 0x0a, 0x7d, 0xd6, 0xed, 0x0d, 0xb2, 0x8c, - 0xc6, 0xbd, 0x61, 0xfb, 0x0e, 0x4e, 0x5a, 0x55, 0x93, 0x42, 0x9f, 0x1d, 0xcb, 0x21, 0xf2, 0x05, - 0x2c, 0xe7, 0x83, 0xb3, 0x7c, 0x98, 0x33, 0xda, 0xef, 0xe6, 0xcc, 0x67, 0x83, 0xbc, 0x3d, 0xb7, - 0x3f, 0xf3, 0xb0, 0xf1, 0xf8, 0xbd, 0x03, 0xa1, 0xc6, 0x83, 0x11, 0x95, 0x1c, 0xbc, 0x50, 0xf8, - 0x2f, 0x10, 0xfd, 0x69, 0xcc, 0xb2, 0xa1, 0xd7, 0xca, 0x6d, 0x28, 0xf9, 0x1c, 0x16, 0xb3, 0xb4, - 0xd7, 0xa5, 0x71, 0x90, 0x26, 0x61, 0xcc, 0xf2, 0xf6, 0x3c, 0x52, 0x7d, 0x34, 0x8e, 0xaa, 0x97, - 0xf6, 0x9e, 0x2a, 0x5c, 0x41, 0xb2, 0x99, 0x19, 0xa0, 0xce, 0x27, 0xb0, 0x56, 0xc5, 0x98, 0x2c, - 0xc3, 0xcc, 0x15, 0x1d, 0x4a, 0xeb, 0xf0, 0x9f, 0x64, 0x0d, 0xee, 0x5c, 0xfb, 0xd1, 0x80, 0xa2, - 0x31, 0x16, 0x3c, 0xf1, 0xf1, 0x83, 0xda, 0x47, 0x4e, 0xe7, 0x25, 0xac, 0x94, 0xd8, 0x54, 0x10, - 0x78, 0x64, 0x12, 0x68, 0x3c, 0x5e, 0x55, 0x22, 0x7b, 0xa7, 0xc7, 0x6a, 0xae, 0x41, 0xd5, 0xbd, - 0x07, 0x7b, 0x27, 0x94, 0x1d, 0x27, 0xfd, 0xfe, 0x20, 0x0e, 0x7b, 0xe8, 0x63, 0x1e, 0x8d, 0xfc, - 0x21, 0xcd, 0x72, 0xe5, 0x59, 0x2e, 0xec, 0x8f, 0x47, 0x11, 0x0a, 0x70, 0xbf, 0x0f, 0x9b, 0x27, - 0x34, 0xa6, 0x59, 0xd8, 0xd3, 0xeb, 0x94, 0xd3, 0xc9, 0x0e, 0xd4, 0xb5, 0x7a, 0xa5, 0xa0, 0x05, - 0xc0, 0xed, 0x40, 0xbb, 0x3c, 0x51, 0x12, 0xdd, 0x80, 0xb5, 0x13, 0xca, 0x34, 0x5c, 0x0b, 0xf4, - 0xb5, 0x03, 0xeb, 0x38, 0x90, 0x9f, 0xe5, 0x43, 0x31, 0x20, 0x1d, 0xfe, 0x8f, 0x60, 0x45, 0x93, - 0xce, 0x95, 0x47, 0x38, 0x68, 0xbb, 0x0f, 0x0d, 0xdb, 0x95, 0x67, 0x16, 0x7e, 0x91, 0x9b, 0x8e, - 0x51, 0xb8, 0x97, 0x04, 0x77, 0x8e, 0x61, 0xbd, 0x12, 0xf5, 0x4d, 0x4c, 0xe9, 0xb6, 0x61, 0xe3, - 0x84, 0x32, 0xc3, 0x22, 0x7a, 0x69, 0x9f, 0x43, 0xc3, 0x00, 0x93, 0x36, 0xcc, 0xe7, 0xcc, 0xcf, - 0x18, 0x0d, 0x90, 0xf0, 0x82, 0xa7, 0x3e, 0xc9, 0x7d, 0x58, 0x8a, 0xc2, 0x9c, 0xd1, 0xb8, 0xeb, - 0x07, 0x41, 0x46, 0x73, 0xb1, 0x7b, 0xeb, 0xde, 0xa2, 0x80, 0x1e, 0x09, 0xa0, 0xfb, 0x8f, 0x0e, - 0x37, 0xcc, 0x08, 0x2b, 0xa9, 0xac, 0x9f, 0x42, 0xbd, 0x70, 0x70, 0xa1, 0xa4, 0x03, 0x43, 0x49, - 0x55, 0x73, 0x0e, 0x46, 0xbc, 0xbc, 0x20, 0xd0, 0xf9, 0x7d, 0x58, 0xfa, 0xb6, 0x7d, 0xf3, 0x23, - 0xe8, 0x48, 0xdf, 0x50, 0xc1, 0xe5, 0x73, 0xbf, 0x4f, 0x95, 0x5f, 0x75, 0x60, 0x41, 0xc5, 0x22, - 0xc9, 0x43, 0x7f, 0xbb, 0xbb, 0xb0, 0x5d, 0x39, 0x53, 0x3a, 0xd6, 0x21, 0xac, 0x9e, 0x50, 0xa6, - 0x23, 0x96, 0xa2, 0xd8, 0x86, 0x79, 0x19, 0xcc, 0x94, 0xb6, 0xe5, 0xa7, 0xfb, 0x04, 0x3d, 0xd1, - 0x98, 0x20, 0x55, 0xb8, 0x03, 0xf5, 0x22, 0x1e, 0x4a, 0xdf, 0xd6, 0x00, 0xf7, 0x31, 0xba, 0xa9, - 0x9a, 0xf5, 0xfc, 0xe5, 0xa9, 0x47, 0xc5, 0xb4, 0x2d, 0x58, 0x48, 0x58, 0xda, 0xed, 0x25, 0x81, - 0x12, 0x7d, 0x3e, 0x61, 0xe9, 0x71, 0x12, 0x50, 0xe9, 0x1a, 0xc6, 0x1c, 0xed, 0x1a, 0x7f, 0x23, - 0x4c, 0x69, 0x0f, 0x49, 0x39, 0x7e, 0x0f, 0xea, 0x8a, 0xa0, 0x32, 0xe5, 0xfb, 0x86, 0x29, 0xab, - 0xe6, 0x1c, 0x3c, 0x17, 0x1c, 0xa5, 0x25, 0x17, 0xa4, 0x00, 0x79, 0xe7, 0x63, 0x58, 0xb4, 0x86, - 0x6e, 0xf3, 0xec, 0xba, 0x69, 0xb2, 0x27, 0xb0, 0xf1, 0x69, 0x98, 0x9b, 0x87, 0xc7, 0x34, 0xe6, - 0xfa, 0x7a, 0xc6, 0x5a, 0x9a, 0x75, 0x86, 0x11, 0x98, 0x8d, 0x7d, 0x7d, 0x82, 0xe1, 0x6f, 0xd3, - 0x50, 0x35, 0xcb, 0x50, 0x7c, 0xe4, 0x9a, 0x66, 0x67, 0x49, 0x4e, 0xf1, 0x78, 0x5a, 0xf0, 0xd4, - 0x27, 0x79, 0x0b, 0x16, 0x07, 0x79, 0x18, 0x5f, 0x74, 0x73, 0x3f, 0x0e, 0xce, 0x92, 0xd7, 0x78, - 0x18, 0x2d, 0x78, 0x4d, 0x04, 0xbe, 0x10, 0x30, 0x72, 0x0f, 0x9a, 0x97, 0x8c, 0xa5, 0x5d, 0x7e, - 0x4a, 0x26, 0x03, 0x26, 0xcf, 0x9e, 0x06, 0x87, 0xbd, 0x14, 0x20, 0xbe, 0xf1, 0x10, 0x65, 0x90, - 0xd3, 0xcc, 0xbf, 0xa0, 0x31, 0x6b, 0xcf, 0x89, 0x8d, 0xc7, 0xa1, 0x3f, 0x57, 0x40, 0xb2, 0x0b, - 0x80, 0x68, 0x69, 0x96, 0xbc, 0x1e, 0xb6, 0xe7, 0x85, 0x6b, 0x70, 0xc8, 0x29, 0x07, 0x90, 0xb7, - 0xa1, 0x75, 0xe6, 0xe7, 0x54, 0x9d, 0x72, 0x21, 0xcd, 0xdb, 0x0b, 0x88, 0xb3, 0xc4, 0xc1, 0xc7, - 0x1a, 0x4a, 0x1e, 0xf1, 0x23, 0x2e, 0x4d, 0x13, 0xbe, 0xe9, 0xbb, 0x7e, 0x9e, 0x53, 0x96, 0xb7, - 0xeb, 0x88, 0xd9, 0xd2, 0xf0, 0x23, 0x04, 0xf3, 0x15, 0xaa, 0x43, 0x3a, 0xf5, 0xc3, 0x2c, 0x6f, - 0x03, 0xe2, 0x35, 0x25, 0xf0, 0x94, 0xc3, 0x38, 0xe3, 0xe2, 0xe8, 0x17, 0x68, 0x0d, 0xc1, 0x58, - 0x83, 0x05, 0xe2, 0xbb, 0xb0, 0xe2, 0x0f, 0xd8, 0x25, 0x8d, 0x19, 0x8f, 0xf9, 0x9c, 0x79, 0x1a, - 0xb6, 0x9b, 0xa8, 0xb3, 0x65, 0x6b, 0xe0, 0x28, 0x0d, 0xdd, 0x1b, 0x58, 0x3e, 0xa1, 0xec, 0x65, - 0xd8, 0xbb, 0xa2, 0xd9, 0x14, 0x06, 0x27, 0x0f, 0x61, 0x96, 0xf3, 0x96, 0x71, 0x60, 0x4d, 0xb9, - 0xaa, 0x3a, 0xd8, 0xb9, 0x04, 0x1e, 0x62, 0x70, 0x3d, 0xe2, 0xaa, 0xbb, 0x6c, 0x98, 0x0a, 0x9b, - 0xd6, 0xbd, 0x3a, 0x42, 0x5e, 0x0e, 0x53, 0xea, 0xbe, 0x82, 0xa6, 0x39, 0x89, 0x6f, 0xc8, 0x80, - 0x46, 0x61, 0x3f, 0x64, 0x34, 0x53, 0x1b, 0x52, 0x03, 0xb8, 0x2f, 0x71, 0xf5, 0x4a, 0xb7, 0xc5, - 0xdf, 0xdc, 0x97, 0xbf, 0x1a, 0x24, 0x4c, 0xd1, 0x16, 0x1f, 0xee, 0x5f, 0xd6, 0x60, 0x49, 0x2d, - 0x47, 0x3a, 0xa2, 0x92, 0xd9, 0xb9, 0x55, 0xe6, 0x7b, 0xd0, 0x8c, 0xfc, 0x9c, 0x75, 0x07, 0x69, - 0xc0, 0x15, 0x24, 0xf3, 0xaa, 0x06, 0x87, 0xfd, 0x5c, 0x80, 0xb8, 0xad, 0x54, 0x82, 0x83, 0x56, - 0x90, 0xdc, 0x9b, 0x3d, 0x73, 0x31, 0x04, 0x66, 0xf9, 0x1c, 0xf4, 0x54, 0xc7, 0xc3, 0xdf, 0x1c, - 0x76, 0x19, 0x5e, 0x5c, 0xa2, 0x67, 0x3a, 0x1e, 0xfe, 0xe6, 0x1b, 0x34, 0x4a, 0x6e, 0xd0, 0x0f, - 0x1d, 0x8f, 0xff, 0xe4, 0x90, 0xb3, 0x30, 0x40, 0xb7, 0x73, 0x3c, 0xfe, 0x93, 0x43, 0xfc, 0xfc, - 0x0a, 0x9d, 0xcc, 0xf1, 0xf8, 0x4f, 0x9e, 0x1c, 0x5e, 0x27, 0xd1, 0xa0, 0x4f, 0xd1, 0x9f, 0x1c, - 0x4f, 0x7e, 0x91, 0x6d, 0xa8, 0xa7, 0x59, 0xd8, 0xa3, 0x5d, 0x9f, 0x5d, 0xa2, 0x0b, 0x39, 0xde, - 0x02, 0x02, 0x8e, 0xd8, 0xa5, 0xbb, 0x0a, 0x2b, 0xda, 0xd0, 0x3a, 0x32, 0x7d, 0x01, 0xf3, 0x12, - 0x32, 0xd1, 0xe8, 0xdf, 0x83, 0x79, 0x26, 0xd0, 0xda, 0x35, 0x0c, 0x51, 0x1b, 0x4a, 0x87, 0xb6, - 0xa6, 0x3d, 0x85, 0xe6, 0xfe, 0x0e, 0x10, 0x93, 0x9b, 0x34, 0xc4, 0xa3, 0x82, 0x8e, 0x08, 0x75, - 0x2d, 0x9b, 0x4e, 0x5e, 0x10, 0xf8, 0x25, 0x06, 0xfa, 0xe7, 0x59, 0xc0, 0x83, 0x40, 0x72, 0xf5, - 0x9d, 0xba, 0xe6, 0xcf, 0x60, 0x51, 0x33, 0x7e, 0xc6, 0x68, 0x9f, 0x2b, 0xdc, 0xef, 0x27, 0x83, - 0x98, 0x21, 0x4f, 0xc7, 0x93, 0x5f, 0xdc, 0x03, 0x51, 0xbf, 0xc8, 0xd2, 0xf1, 0xc4, 0x07, 0x59, - 0x82, 0x5a, 0x18, 0xc8, 0x1c, 0xbb, 0x16, 0x06, 0xee, 0xff, 0x39, 0xb0, 0x62, 0x2c, 0xe4, 0x8d, - 0x9d, 0xb2, 0xe4, 0x71, 0xb5, 0x0a, 0x8f, 0x7b, 0x04, 0xb3, 0x67, 0x61, 0xc0, 0x53, 0x7b, 0xae, - 0xd7, 0x75, 0x45, 0xce, 0x5a, 0x87, 0x87, 0x28, 0x1c, 0xd5, 0xcf, 0xaf, 0xf2, 0xf6, 0xec, 0x44, - 0x54, 0x8e, 0x52, 0xda, 0x0f, 0x77, 0xca, 0xfb, 0xc1, 0xd6, 0xe5, 0xdc, 0xa8, 0x2e, 0x45, 0x26, - 0xa8, 0x69, 0x6b, 0xcf, 0xeb, 0x01, 0x14, 0xc0, 0x89, 0x66, 0xfd, 0x2d, 0x80, 0x44, 0x63, 0x4a, - 0xff, 0xdb, 0x2a, 0x09, 0xad, 0x5d, 0xd0, 0x40, 0x76, 0x7f, 0x82, 0xc7, 0xb8, 0xc9, 0x5c, 0x2a, - 0xff, 0xb1, 0x45, 0x53, 0xf8, 0x22, 0x29, 0xd1, 0xcc, 0x2d, 0x62, 0x1f, 0x22, 0xb1, 0xa3, 0x5e, - 0x8f, 0x9b, 0xde, 0xa8, 0xdf, 0x26, 0x9e, 0x8f, 0xaf, 0x60, 0x5e, 0xce, 0x90, 0x6e, 0x21, 0x10, - 0x6a, 0x61, 0x40, 0x3e, 0x06, 0x30, 0xce, 0x10, 0xb1, 0xae, 0x6d, 0x25, 0x83, 0x9c, 0xa4, 0xbc, - 0x01, 0xd9, 0x19, 0xe8, 0xee, 0x39, 0xac, 0x56, 0xa0, 0x70, 0x51, 0x74, 0xf5, 0x25, 0x45, 0x51, - 0xdf, 0x64, 0x0f, 0x1a, 0x2c, 0x61, 0x7e, 0xd4, 0x2d, 0x12, 0x00, 0xc7, 0x03, 0x04, 0xbd, 0xe2, - 0x10, 0x0c, 0x50, 0x49, 0x24, 0x3c, 0x97, 0x07, 0xa8, 0x24, 0x0a, 0x5c, 0x1f, 0x93, 0x1a, 0x6b, - 0xd1, 0x52, 0x85, 0x93, 0x4c, 0xf6, 0x2e, 0x2c, 0xf8, 0x62, 0x8a, 0x5a, 0x58, 0x6b, 0x64, 0x61, - 0x9e, 0x46, 0x70, 0x09, 0x9e, 0x40, 0xc7, 0x49, 0x7c, 0x1e, 0x5e, 0x28, 0xef, 0x78, 0x1b, 0x83, - 0x95, 0x82, 0x15, 0xf9, 0x44, 0xe0, 0x33, 0x1f, 0xb9, 0x35, 0x3d, 0xfc, 0xed, 0xfe, 0xa9, 0x03, - 0xcb, 0xa7, 0x49, 0xc6, 0xce, 0x93, 0x28, 0x4c, 0x64, 0xea, 0xcc, 0x53, 0x09, 0x95, 0x5a, 0xcb, - 0x1c, 0x4d, 0x7e, 0xf2, 0x08, 0xd9, 0x4b, 0xc2, 0x58, 0xf8, 0x6a, 0x4d, 0x2a, 0x28, 0x09, 0x63, - 0xee, 0xaa, 0x64, 0x1f, 0x1a, 0x01, 0xcd, 0x7b, 0x59, 0x98, 0xf2, 0x42, 0x49, 0x86, 0x05, 0x13, - 0xc4, 0x09, 0x9f, 0xf9, 0x91, 0x1f, 0xf7, 0xa8, 0x8c, 0xec, 0xea, 0xd3, 0x5d, 0xc7, 0x70, 0xa5, - 0x25, 0x29, 0x8a, 0x82, 0x35, 0x1b, 0x2c, 0x97, 0xf2, 0x9b, 0x50, 0x4f, 0x15, 0x50, 0xba, 0x5f, - 0x5b, 0x69, 0x68, 0x74, 0x39, 0x5e, 0x81, 0xea, 0xee, 0xf0, 0xbc, 0xba, 0xa0, 0xf7, 0x62, 0xd0, - 0xef, 0xfb, 0xd9, 0x50, 0x71, 0x8b, 0x61, 0xf6, 0x38, 0x09, 0x63, 0xae, 0x28, 0xbe, 0x28, 0x95, - 0x78, 0xf1, 0xdf, 0xa6, 0xe8, 0x35, 0x4b, 0x74, 0x53, 0x5b, 0x33, 0xb6, 0xb6, 0xee, 0x02, 0xa4, - 0x34, 0xeb, 0xd1, 0x98, 0xf9, 0x17, 0x6a, 0xc5, 0x06, 0xc4, 0xbd, 0x04, 0xf2, 0xfc, 0xfc, 0x3c, - 0x0a, 0x63, 0xca, 0xd9, 0x4a, 0x61, 0x26, 0x68, 0x7f, 0xbc, 0x0c, 0x36, 0xa7, 0x99, 0x12, 0xa7, - 0x9f, 0xc1, 0xca, 0xf3, 0xb8, 0x82, 0x91, 0x22, 0xe7, 0x4c, 0x22, 0x57, 0x2b, 0x91, 0xfb, 0x31, - 0x34, 0x0d, 0xc1, 0x73, 0xf2, 0x11, 0xd4, 0xa5, 0x8c, 0x3a, 0x09, 0xef, 0xe8, 0x68, 0x50, 0x5a, - 0xa1, 0x57, 0x20, 0xbb, 0x7f, 0xe5, 0x40, 0xa3, 0x90, 0x2c, 0x27, 0x4f, 0xe0, 0x0e, 0x57, 0xb7, - 0xa2, 0x72, 0x57, 0x53, 0x29, 0x70, 0x0e, 0xf0, 0x5f, 0x91, 0xbb, 0x0b, 0xe4, 0xce, 0x0b, 0x80, - 0x02, 0x58, 0x91, 0xb5, 0x1f, 0xda, 0xd5, 0xd7, 0x56, 0x99, 0xaa, 0x12, 0xcd, 0x48, 0xe8, 0xff, - 0x65, 0x96, 0x97, 0x52, 0x15, 0xce, 0x22, 0x7d, 0xf0, 0x7d, 0x68, 0x88, 0xbd, 0xc0, 0x23, 0x80, - 0x12, 0xb8, 0xa9, 0xcf, 0xa1, 0x24, 0x8c, 0x3d, 0xc0, 0xbd, 0x81, 0xe3, 0xe4, 0x03, 0x58, 0x44, - 0x61, 0xbb, 0x89, 0x50, 0x88, 0xdc, 0xd8, 0xf6, 0x84, 0x26, 0xa2, 0x48, 0x95, 0x91, 0x14, 0xd6, - 0xad, 0x29, 0xdd, 0x5c, 0x88, 0x20, 0x0f, 0xa9, 0x1f, 0x1a, 0x75, 0xce, 0x38, 0x29, 0x85, 0xb2, - 0x24, 0x41, 0x39, 0x26, 0x54, 0xb7, 0xda, 0x2b, 0x8f, 0x90, 0x43, 0x68, 0x4a, 0x8e, 0xa8, 0x19, - 0x79, 0xc4, 0xd9, 0x32, 0x36, 0xc4, 0x44, 0x44, 0x20, 0x7d, 0x58, 0x33, 0x27, 0x68, 0x09, 0xef, - 0xe0, 0xc4, 0x8f, 0xa7, 0x97, 0x30, 0x2e, 0x09, 0x48, 0x7a, 0xa5, 0x81, 0xce, 0x1f, 0x40, 0x7b, - 0xdc, 0x82, 0x2a, 0xcc, 0xfe, 0x8e, 0x6d, 0xf6, 0xb5, 0x0a, 0x97, 0xcc, 0xcd, 0x3e, 0xd3, 0x97, - 0xb0, 0x39, 0x46, 0x98, 0x37, 0xa8, 0xe8, 0x0d, 0x4f, 0x35, 0xbd, 0xe9, 0xcf, 0x1d, 0xe8, 0x1c, - 0x05, 0x41, 0x29, 0x38, 0x15, 0x05, 0xf8, 0x77, 0x1d, 0x72, 0x77, 0x61, 0xbb, 0x52, 0x20, 0xd9, - 0x29, 0x78, 0x0d, 0xbb, 0x1e, 0xed, 0x27, 0xd7, 0xf4, 0xbb, 0x16, 0xd9, 0xdd, 0x87, 0xbb, 0xe3, - 0x38, 0x4b, 0xd9, 0xb0, 0x75, 0x66, 0x77, 0x51, 0x75, 0x62, 0xf4, 0x5f, 0x0e, 0x2c, 0xda, 0xfd, - 0xd5, 0x6f, 0xab, 0x8e, 0x7e, 0x0f, 0x48, 0x46, 0x73, 0xd6, 0xcd, 0x92, 0x28, 0xe2, 0xe5, 0x74, - 0x40, 0x23, 0x7f, 0x28, 0x3b, 0xbb, 0xcb, 0x7c, 0xc4, 0x13, 0x03, 0x9f, 0x72, 0x38, 0xd9, 0x84, - 0x79, 0x3f, 0x0d, 0xbb, 0xdc, 0x6b, 0x44, 0x2d, 0x3d, 0xe7, 0xa7, 0xe1, 0x4f, 0xe8, 0x90, 0xb8, - 0xb0, 0x28, 0x07, 0xba, 0x11, 0xbd, 0xa6, 0x11, 0xe6, 0x7c, 0x33, 0x5e, 0x43, 0x0c, 0xff, 0x94, - 0x83, 0x78, 0xed, 0x9b, 0x66, 0x21, 0x77, 0xbf, 0xa2, 0x85, 0x3c, 0x8f, 0xd2, 0xb4, 0x24, 0x5c, - 0xad, 0xce, 0xfd, 0x05, 0x6c, 0x55, 0xe8, 0x42, 0xc6, 0xa8, 0x1f, 0x41, 0xcb, 0x6e, 0x44, 0xab, - 0x38, 0xa5, 0xb3, 0x56, 0x6b, 0xa2, 0xb7, 0x74, 0x6e, 0xd1, 0x91, 0xd9, 0x27, 0xe2, 0x78, 0x3e, - 0xd3, 0xfd, 0x22, 0xf7, 0x2b, 0x58, 0x2b, 0x80, 0xc7, 0x49, 0x7c, 0x4d, 0xb3, 0x9c, 0x7b, 0x1b, - 0x81, 0xd9, 0xf3, 0x2c, 0x51, 0xcd, 0x4e, 0xfc, 0xcd, 0xf3, 0x36, 0x96, 0x48, 0x37, 0xa8, 0xb1, - 0x84, 0xe3, 0x64, 0x3e, 0x53, 0xa7, 0x14, 0xfe, 0xe6, 0x79, 0x72, 0x88, 0x44, 0x68, 0x17, 0xc7, - 0x84, 0xab, 0x36, 0x24, 0x8c, 0x73, 0x71, 0x5f, 0x61, 0xfa, 0x68, 0x8a, 0x22, 0xd7, 0xf8, 0xdb, - 0xd0, 0x10, 0x6b, 0xe4, 0x33, 0xd5, 0xfa, 0x76, 0xac, 0xf5, 0x8d, 0x88, 0xe9, 0xc1, 0xb9, 0x86, - 0xba, 0xff, 0x53, 0x83, 0x26, 0x66, 0xac, 0x9f, 0x52, 0xe6, 0x87, 0xd1, 0xe4, 0x5c, 0x5a, 0xe4, - 0xa0, 0x35, 0x9d, 0x83, 0xbe, 0x05, 0x8b, 0x66, 0x33, 0x63, 0xa8, 0x8a, 0x59, 0xa3, 0x95, 0x31, - 0x24, 0xf7, 0x61, 0x09, 0x4b, 0xeb, 0x02, 0x4b, 0xf8, 0xcc, 0x22, 0x42, 0x35, 0x9a, 0x5d, 0x08, - 0xdc, 0x19, 0x29, 0x04, 0xf8, 0x30, 0x26, 0xd3, 0xdd, 0x3c, 0x0c, 0x74, 0x9d, 0x80, 0x90, 0x17, - 0x61, 0x60, 0x0c, 0xe3, 0xec, 0x79, 0x63, 0x18, 0x67, 0xf3, 0x1a, 0x28, 0xa3, 0xd8, 0xc1, 0xc6, - 0x16, 0x0f, 0x96, 0xc3, 0x33, 0x5e, 0x53, 0x01, 0x5f, 0x86, 0x7d, 0xbc, 0x34, 0x91, 0x8d, 0x63, - 0xd1, 0x67, 0x91, 0x5f, 0x45, 0x99, 0x06, 0x66, 0x99, 0x56, 0x14, 0x75, 0x0d, 0xab, 0xa8, 0xdb, - 0x83, 0x46, 0x92, 0xd2, 0xb8, 0x2b, 0x4b, 0xec, 0xa6, 0xc8, 0x1e, 0x38, 0xe8, 0x15, 0x42, 0x64, - 0xcb, 0x04, 0x75, 0x9e, 0x4f, 0x53, 0x97, 0xda, 0x8a, 0xa9, 0x8d, 0x2a, 0x46, 0x15, 0x82, 0x33, - 0xb7, 0x15, 0x82, 0xee, 0x11, 0x66, 0xc5, 0x8a, 0xb1, 0x74, 0x9f, 0xf7, 0x60, 0x0e, 0xd5, 0xa4, - 0x3c, 0x67, 0xcd, 0x2a, 0x63, 0xa4, 0x53, 0x78, 0x12, 0xc7, 0xfd, 0x31, 0x5e, 0x35, 0xe1, 0xd0, - 0x34, 0xa2, 0x6f, 0xc1, 0x82, 0xb0, 0x8a, 0xf6, 0x9a, 0x79, 0xfc, 0x7e, 0x16, 0xb8, 0xff, 0xe6, - 0x00, 0x79, 0x31, 0x38, 0xeb, 0x87, 0xd3, 0x53, 0x9b, 0xbe, 0x40, 0x27, 0x30, 0x8b, 0x6e, 0x22, - 0xdc, 0x11, 0x7f, 0x8f, 0x78, 0xc8, 0xec, 0xa8, 0x87, 0x14, 0xe6, 0xbc, 0x53, 0x5d, 0xa3, 0xcf, - 0x99, 0xc6, 0xe7, 0x21, 0x3e, 0x0a, 0x69, 0xcc, 0xba, 0xb2, 0xd9, 0xc2, 0x43, 0x3c, 0x02, 0x9e, - 0x05, 0xee, 0x0b, 0x58, 0xb5, 0x56, 0x26, 0x35, 0x7d, 0x0f, 0x9a, 0x42, 0x80, 0x34, 0xf2, 0x7b, - 0xba, 0xd3, 0xdc, 0x40, 0xd8, 0x29, 0x82, 0x26, 0xe9, 0xeb, 0xbf, 0x1d, 0x20, 0xc7, 0xfc, 0xe0, - 0x8a, 0xa6, 0xd6, 0x17, 0x77, 0x1c, 0x51, 0x25, 0x15, 0xf4, 0xea, 0x12, 0xf2, 0xcc, 0x66, 0x36, - 0x63, 0x31, 0xd3, 0x9a, 0x9e, 0x7d, 0xc3, 0x56, 0x48, 0x69, 0xd7, 0xde, 0x87, 0xa5, 0x1b, 0x3f, - 0x8a, 0x28, 0xd3, 0x97, 0x15, 0xb2, 0x67, 0x2a, 0xa0, 0xaa, 0xe2, 0x52, 0xf6, 0x9a, 0x2f, 0xec, - 0xc5, 0x4b, 0x22, 0x6b, 0xbd, 0xf2, 0xec, 0x7b, 0x02, 0x1b, 0x02, 0x7c, 0x14, 0x45, 0x53, 0xef, - 0x21, 0xf7, 0xaf, 0x6b, 0xb0, 0x59, 0x9a, 0xa6, 0x0f, 0x09, 0x7b, 0x07, 0x3c, 0xd0, 0xcb, 0xad, - 0x9e, 0x70, 0x20, 0x3f, 0xe5, 0xac, 0xce, 0x3f, 0x39, 0x30, 0x27, 0x40, 0x13, 0xad, 0xf1, 0xa5, - 0x32, 0xbf, 0x8c, 0x31, 0x22, 0xff, 0xfd, 0xfe, 0x74, 0xcc, 0xc4, 0x7f, 0xe6, 0x05, 0x95, 0xf0, - 0x1b, 0x79, 0x37, 0xf5, 0x23, 0x58, 0x1e, 0x45, 0x78, 0xa3, 0xe6, 0xbd, 0xa8, 0xa1, 0x9f, 0x5e, - 0x53, 0xe3, 0x42, 0xea, 0x6b, 0x07, 0x5a, 0xc7, 0x49, 0x1c, 0x84, 0x3c, 0x3e, 0x9e, 0xfa, 0x99, - 0xdf, 0xcf, 0xc9, 0x0e, 0xcf, 0x6c, 0x24, 0x48, 0x35, 0x59, 0x35, 0x60, 0x4c, 0x3b, 0x6b, 0x17, - 0xa0, 0x77, 0x49, 0x7b, 0x57, 0x5d, 0xd9, 0x5f, 0xe2, 0x4e, 0x5f, 0x47, 0xc8, 0x27, 0x61, 0x90, - 0x93, 0xf7, 0x61, 0xb5, 0x18, 0xee, 0xfa, 0x71, 0xd0, 0x95, 0xcd, 0x25, 0xec, 0x37, 0x6b, 0xbc, - 0xa3, 0x38, 0x38, 0xca, 0xaf, 0xb0, 0x2b, 0xae, 0x7b, 0x2a, 0x5d, 0x6b, 0xc3, 0xb6, 0x34, 0xfc, - 0x08, 0xc1, 0xee, 0xff, 0x3a, 0x18, 0xef, 0xd4, 0xaa, 0xa4, 0xb5, 0x8b, 0x36, 0x0a, 0x76, 0xd7, - 0x2c, 0x93, 0xd5, 0x46, 0x4c, 0x46, 0x60, 0x36, 0x64, 0xb4, 0xaf, 0xc2, 0x08, 0xff, 0x4d, 0x3e, - 0x81, 0x65, 0xbd, 0xe2, 0x6e, 0x8a, 0x6a, 0x91, 0xdb, 0x64, 0xb3, 0x28, 0x13, 0x2c, 0xad, 0x79, - 0xad, 0xde, 0x88, 0x1a, 0xd5, 0xf6, 0xba, 0x73, 0xeb, 0xf6, 0xe2, 0x51, 0xa9, 0x87, 0xda, 0x9e, - 0x93, 0x49, 0x14, 0x7e, 0x09, 0xa9, 0x69, 0x6f, 0xc0, 0x68, 0x20, 0x13, 0x23, 0xfd, 0xed, 0xfe, - 0xa7, 0x03, 0xad, 0xa3, 0x20, 0xc0, 0x75, 0x4f, 0x13, 0x26, 0xd4, 0x2a, 0x6b, 0xb7, 0xac, 0x72, - 0xe6, 0xd7, 0x5c, 0xe5, 0x37, 0x0e, 0x22, 0x63, 0x94, 0xe0, 0xba, 0xb0, 0x5c, 0xac, 0xb3, 0xda, - 0xbc, 0xee, 0x6f, 0x00, 0x11, 0xc9, 0xb4, 0xa5, 0x8e, 0x51, 0xac, 0x75, 0x58, 0xb5, 0xb0, 0x64, - 0xac, 0xf9, 0x0c, 0x1e, 0x9e, 0x50, 0x76, 0x9c, 0x0d, 0x53, 0x96, 0xa8, 0xe4, 0xe5, 0x53, 0x9a, - 0x26, 0x79, 0xa8, 0x22, 0x17, 0x9d, 0x2a, 0xfa, 0xfc, 0xb3, 0x03, 0x8f, 0xa6, 0x20, 0x24, 0x97, - 0xf0, 0x87, 0xe5, 0x6e, 0xc2, 0xef, 0x1a, 0x85, 0xe4, 0x74, 0x54, 0x0e, 0x34, 0x44, 0xde, 0xd7, - 0x6a, 0x92, 0x9d, 0x1f, 0xc2, 0x92, 0x3d, 0xf8, 0x46, 0xa1, 0x22, 0x82, 0x07, 0xb7, 0x08, 0x31, - 0x8d, 0xcf, 0x3d, 0x80, 0xa5, 0x9e, 0x45, 0x42, 0x32, 0x1a, 0x81, 0xba, 0xc7, 0xf0, 0xf6, 0xad, - 0xdc, 0xa4, 0xda, 0xc6, 0xd6, 0x63, 0xee, 0xdf, 0xcd, 0xc2, 0xe6, 0x17, 0x21, 0xbb, 0x0c, 0x32, - 0xff, 0x46, 0x79, 0xdf, 0x34, 0x42, 0x8e, 0x94, 0x6a, 0xb5, 0x72, 0x75, 0xf9, 0x0e, 0xac, 0x24, - 0x31, 0xc5, 0x8c, 0xb2, 0x9b, 0xfa, 0x79, 0x7e, 0x93, 0x64, 0xea, 0x2c, 0x6d, 0x25, 0x31, 0xe5, - 0x59, 0xe5, 0xa9, 0x04, 0x8f, 0x9c, 0xc6, 0xb3, 0xa3, 0xa7, 0xf1, 0x32, 0xcc, 0xa4, 0x61, 0x2c, - 0x3b, 0xe4, 0xfc, 0x27, 0x3f, 0x3b, 0x59, 0xe6, 0x07, 0x06, 0x65, 0x79, 0x76, 0x22, 0x54, 0xd3, - 0x35, 0x7b, 0xb6, 0xf3, 0x23, 0x3d, 0x5b, 0x43, 0x27, 0x0b, 0x76, 0x8d, 0xba, 0x07, 0x0d, 0xf9, - 0xb3, 0xcb, 0xfc, 0x0b, 0x99, 0xf0, 0x82, 0x04, 0xbd, 0xf4, 0x2f, 0x8c, 0x7c, 0x08, 0xac, 0x7c, - 0x68, 0x17, 0xe0, 0x9c, 0xd2, 0xae, 0x95, 0xfa, 0xd6, 0xcf, 0x29, 0x15, 0x41, 0x97, 0x27, 0x46, - 0x67, 0x7e, 0x7c, 0xd5, 0xc5, 0x8a, 0xb3, 0x29, 0xc4, 0xe1, 0x80, 0xcf, 0x79, 0xd5, 0x79, 0x0f, - 0x9a, 0x38, 0xa8, 0x64, 0x5a, 0x14, 0x1a, 0xe5, 0xb0, 0xa3, 0xa2, 0x76, 0x46, 0x94, 0x5e, 0xc8, - 0x86, 0xed, 0xa5, 0x62, 0xfe, 0x71, 0xc8, 0x86, 0x7a, 0x3e, 0xea, 0x2c, 0x1b, 0xb6, 0x5b, 0xc5, - 0xfc, 0x63, 0x01, 0xe2, 0xe2, 0xe5, 0x37, 0xe1, 0x39, 0x15, 0x57, 0xec, 0xcb, 0xf2, 0xd1, 0x09, - 0x87, 0x1c, 0x27, 0x01, 0xd6, 0x01, 0x37, 0x61, 0x66, 0x94, 0x22, 0x2b, 0xa2, 0x60, 0xe1, 0x40, - 0xe5, 0x1a, 0xee, 0x3b, 0xb0, 0xac, 0xdc, 0xc5, 0x7c, 0x50, 0x95, 0xd1, 0x7c, 0x10, 0x31, 0xf5, - 0xa0, 0x4a, 0x7c, 0x3d, 0xfe, 0xf7, 0xbb, 0xb0, 0x74, 0x92, 0x08, 0x07, 0x7d, 0xc9, 0xed, 0x92, - 0x91, 0xe7, 0x30, 0x2f, 0x5f, 0x09, 0x91, 0x8d, 0xd2, 0xb3, 0x21, 0xf4, 0xba, 0xce, 0xe6, 0x98, - 0xe7, 0x44, 0xee, 0xea, 0xaf, 0xfe, 0xf5, 0x3f, 0xfe, 0xa2, 0xb6, 0x48, 0x1a, 0x87, 0xd7, 0x1f, - 0x1c, 0x5e, 0x50, 0x16, 0x72, 0x2a, 0x97, 0xb0, 0x68, 0xbd, 0x86, 0x21, 0x3b, 0xd6, 0x8b, 0x96, - 0x91, 0x47, 0x32, 0x9d, 0xdd, 0x89, 0xef, 0x5d, 0xdc, 0x0e, 0xb2, 0x58, 0x23, 0x44, 0xb2, 0xc8, - 0x11, 0x45, 0x10, 0xfe, 0x0a, 0x5a, 0x4f, 0xb1, 0x0f, 0xa0, 0xa9, 0x92, 0xbd, 0x82, 0x5a, 0xe5, - 0x2b, 0x9f, 0xce, 0xfe, 0x78, 0x04, 0xc9, 0x71, 0x1b, 0x39, 0xae, 0x93, 0x55, 0xce, 0x51, 0xf4, - 0x19, 0xf4, 0xeb, 0x1a, 0x92, 0xc3, 0xb2, 0x7c, 0x37, 0xf0, 0xad, 0xf2, 0xdc, 0x41, 0x9e, 0x1b, - 0x64, 0x8d, 0xf3, 0x0c, 0x04, 0x83, 0x82, 0x69, 0x82, 0x65, 0x8c, 0xf9, 0xce, 0x85, 0xdc, 0x1d, - 0xfb, 0x00, 0x46, 0xb0, 0xdc, 0xbb, 0xe5, 0x81, 0x8c, 0xbd, 0xca, 0x0b, 0xca, 0x71, 0xf5, 0x1b, - 0x19, 0xd2, 0x83, 0xa6, 0xf9, 0x8c, 0x84, 0x6c, 0x57, 0xbc, 0xd1, 0xd0, 0xac, 0x76, 0xaa, 0x07, - 0x25, 0x9f, 0x36, 0xf2, 0x21, 0x64, 0x59, 0xf2, 0xd1, 0xaf, 0x4e, 0xc8, 0x2f, 0xa1, 0x35, 0xf2, - 0x04, 0x83, 0xb8, 0x23, 0x8a, 0xaa, 0x78, 0x4e, 0xd3, 0x79, 0x6b, 0x22, 0x8e, 0xe4, 0x7a, 0x17, - 0xb9, 0xb6, 0xdd, 0x55, 0x43, 0x9f, 0x8a, 0xf3, 0x0f, 0x9c, 0x77, 0x48, 0x8e, 0x1a, 0x35, 0xdf, - 0x71, 0x4c, 0xc5, 0x7b, 0xaf, 0x62, 0xa9, 0xd6, 0x86, 0x18, 0xd5, 0xaa, 0xe2, 0x89, 0x1b, 0x23, - 0xc7, 0x5b, 0x62, 0xe3, 0x8d, 0x0b, 0xee, 0xf1, 0x69, 0xf8, 0xee, 0x56, 0xbf, 0x91, 0x91, 0xcf, - 0x74, 0x4a, 0x7b, 0x44, 0x71, 0x4d, 0x58, 0x4a, 0x72, 0xeb, 0x09, 0x91, 0x64, 0x6a, 0xfb, 0x4f, - 0xc5, 0x23, 0x9e, 0xca, 0x95, 0x9a, 0xaf, 0x72, 0xc6, 0xae, 0x34, 0x61, 0x69, 0x4e, 0x5e, 0xc3, - 0x92, 0xd8, 0x98, 0xdf, 0xbe, 0x65, 0x77, 0x91, 0xef, 0xa6, 0x4b, 0x8a, 0xdd, 0x69, 0x1a, 0xf6, - 0x0b, 0xa8, 0xeb, 0x9b, 0x78, 0xd2, 0x36, 0x16, 0x61, 0xbd, 0xf9, 0xe8, 0x8c, 0xb9, 0xd1, 0x57, - 0xde, 0xea, 0x2e, 0xca, 0x55, 0x89, 0xfb, 0x79, 0x4e, 0xf8, 0x17, 0x00, 0xc5, 0x15, 0x3f, 0xd9, - 0x2a, 0x51, 0xd6, 0x9a, 0xeb, 0x54, 0x0d, 0xa9, 0x87, 0x82, 0x48, 0x7e, 0x99, 0x2c, 0x59, 0xe4, - 0xd5, 0x7e, 0xd3, 0x37, 0xb1, 0xd6, 0x7e, 0x1b, 0x7d, 0x14, 0xd0, 0x19, 0x7f, 0x1b, 0xac, 0x8c, - 0xe2, 0xaa, 0xcd, 0xa6, 0x6b, 0x0c, 0xbe, 0x82, 0x0b, 0x8c, 0xcb, 0xc6, 0x35, 0xf4, 0x4e, 0x15, - 0x97, 0xca, 0xb8, 0x5c, 0xbe, 0x53, 0x76, 0xb7, 0x90, 0xd5, 0x2a, 0x59, 0x19, 0x65, 0x95, 0x93, - 0x2b, 0x7c, 0xf3, 0x6b, 0xdc, 0xa2, 0x12, 0x93, 0x56, 0xf9, 0x4a, 0xb9, 0x73, 0x77, 0xdc, 0xf0, - 0x98, 0x33, 0x40, 0xa6, 0x21, 0xb8, 0xa9, 0x84, 0xc1, 0xc5, 0xdd, 0xa9, 0x65, 0x70, 0xeb, 0x8a, - 0xb5, 0xb3, 0x55, 0x31, 0x22, 0xa9, 0xaf, 0x23, 0xf5, 0x16, 0x51, 0x36, 0xef, 0x09, 0x5a, 0xc2, - 0x26, 0xba, 0xa9, 0x6d, 0xd9, 0x64, 0xf4, 0xe6, 0xd3, 0x8a, 0x81, 0xa5, 0xfb, 0xcf, 0x52, 0x0c, - 0xd4, 0x37, 0x9c, 0xe4, 0x4f, 0xec, 0x8b, 0x54, 0x75, 0xb1, 0xe3, 0x4e, 0xbc, 0x89, 0x29, 0xed, - 0x96, 0xb1, 0xb7, 0x35, 0xee, 0x1e, 0x72, 0xde, 0x22, 0x9b, 0xa3, 0x9c, 0xe5, 0xcd, 0x0f, 0xf9, - 0x95, 0x03, 0xab, 0x15, 0xf7, 0x0a, 0x85, 0x04, 0xe3, 0x6f, 0x41, 0x0a, 0x09, 0x26, 0x5d, 0x4c, - 0xb8, 0x28, 0xc1, 0x8e, 0x8b, 0x12, 0xf8, 0x41, 0xa0, 0x25, 0x90, 0x59, 0x15, 0xf7, 0xcc, 0x3f, - 0x73, 0x60, 0xa3, 0xfa, 0x0e, 0x81, 0xdc, 0xd7, 0x4f, 0x2f, 0x27, 0xdd, 0x6e, 0x74, 0x1e, 0xdc, - 0x86, 0x26, 0xa5, 0xb9, 0x8f, 0xd2, 0xec, 0xb9, 0x1d, 0x2e, 0x4d, 0x86, 0xb8, 0x55, 0x02, 0xdd, - 0x60, 0x29, 0x6e, 0x77, 0xe9, 0x89, 0x71, 0x8a, 0x57, 0x5f, 0x66, 0x74, 0xee, 0x4d, 0xc0, 0xb0, - 0xc3, 0x17, 0x59, 0x97, 0x06, 0xc1, 0xd6, 0xb6, 0x6e, 0xf7, 0xcb, 0x3d, 0x5a, 0x74, 0xc1, 0xad, - 0x3d, 0x5a, 0x6a, 0xec, 0x5b, 0x7b, 0xb4, 0xdc, 0x6b, 0x2f, 0xed, 0x51, 0x64, 0x86, 0x7d, 0x77, - 0xf2, 0x25, 0x6e, 0x1b, 0xd9, 0x07, 0x6a, 0x8f, 0x6e, 0xf5, 0xbc, 0x6a, 0xdb, 0xd8, 0x9d, 0x9e, - 0x52, 0xa8, 0x14, 0xed, 0x25, 0xae, 0x3d, 0x0f, 0x16, 0x14, 0x3a, 0xd9, 0x1c, 0x25, 0xa0, 0x28, - 0x57, 0x36, 0x6e, 0xdd, 0x4d, 0x24, 0xba, 0xe2, 0x36, 0x4d, 0xa2, 0x9c, 0xe6, 0x19, 0x34, 0x8c, - 0x26, 0x25, 0xd1, 0x41, 0xb6, 0xdc, 0x93, 0xed, 0x6c, 0x57, 0x8e, 0xd9, 0xa1, 0xc4, 0x6d, 0x71, - 0x06, 0x39, 0x22, 0x98, 0x3c, 0x8c, 0x16, 0x5e, 0xc1, 0xa3, 0xdc, 0xc7, 0x2c, 0x78, 0x54, 0xf5, - 0xfc, 0x2c, 0x1e, 0x3d, 0x44, 0xd0, 0x3c, 0x32, 0x68, 0x8d, 0xb4, 0xce, 0x8a, 0xa3, 0xb8, 0xba, - 0x51, 0x58, 0x1c, 0xc5, 0x63, 0x7a, 0x6e, 0x76, 0xb2, 0x23, 0xf8, 0xf9, 0x51, 0x54, 0xd8, 0x43, - 0x84, 0x48, 0xd1, 0x58, 0xb2, 0x6c, 0x6d, 0x75, 0xd0, 0x2c, 0x5b, 0xdb, 0x5d, 0xa8, 0x52, 0x88, - 0xa4, 0x82, 0xd6, 0x2b, 0x58, 0x50, 0x1d, 0x8d, 0xc2, 0xd0, 0x23, 0xbd, 0x9c, 0x4e, 0xbb, 0x3c, - 0x20, 0xa9, 0x5a, 0xc6, 0xf6, 0x83, 0x00, 0xa9, 0x4a, 0x43, 0x18, 0xfd, 0x8d, 0xc2, 0x10, 0xe5, - 0xd6, 0x48, 0x61, 0x88, 0xaa, 0x86, 0x88, 0x65, 0x08, 0xb1, 0xdb, 0x35, 0x8f, 0xbf, 0x77, 0xe0, - 0xde, 0xad, 0xed, 0x09, 0xf2, 0xbd, 0x37, 0xe8, 0x64, 0x08, 0x81, 0x3e, 0x78, 0xe3, 0xde, 0x87, - 0xfb, 0x10, 0xc5, 0x74, 0xdd, 0x5d, 0x75, 0x00, 0xe1, 0xb4, 0x40, 0xa0, 0xeb, 0x46, 0x08, 0x17, - 0xfa, 0x6f, 0x1d, 0xf1, 0x57, 0x10, 0x13, 0xe8, 0x92, 0x83, 0x29, 0x05, 0x50, 0x02, 0x1f, 0x4e, - 0x8d, 0x2f, 0xc5, 0x7d, 0x80, 0xe2, 0xee, 0xbb, 0xdb, 0x13, 0xc4, 0xe5, 0xc2, 0xfe, 0x31, 0x6c, - 0xeb, 0x36, 0x86, 0x45, 0xf7, 0xb3, 0x41, 0x1c, 0xe4, 0x45, 0xd5, 0x34, 0xa6, 0xd7, 0x51, 0x38, - 0xce, 0x68, 0x75, 0x6b, 0x9f, 0x29, 0x37, 0x72, 0x54, 0x88, 0x71, 0xce, 0x69, 0x73, 0xee, 0x29, - 0xac, 0xa8, 0x79, 0x9f, 0x85, 0x3e, 0xfb, 0xc6, 0x3c, 0xf7, 0x91, 0x67, 0xc7, 0x5d, 0x37, 0x79, - 0x9e, 0x87, 0x3e, 0x53, 0x1c, 0xcf, 0xe6, 0xf0, 0x2f, 0x9e, 0x3e, 0xfc, 0xff, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xe9, 0x97, 0xa2, 0x2a, 0x24, 0x35, 0x00, 0x00, + // 4062 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3b, 0x4d, 0x6f, 0x24, 0x49, + 0x56, 0xca, 0xb2, 0xdb, 0x1f, 0xaf, 0xca, 0x2e, 0x3b, 0xfc, 0x55, 0x2e, 0xdb, 0x6d, 0x77, 0xee, + 0x76, 0x4f, 0xf7, 0x7c, 0xd8, 0x3b, 0x3d, 0x2d, 0x76, 0xd8, 0x59, 0x16, 0x3c, 0x9e, 0x1e, 0x6f, + 0xb3, 0xbb, 0xd3, 0x26, 0xbb, 0xb7, 0x47, 0x9a, 0x45, 0x14, 0xe9, 0xcc, 0xb0, 0x9d, 0x72, 0x3a, + 0x33, 0x27, 0x33, 0xca, 0xee, 0x1a, 0x21, 0x21, 0xad, 0x04, 0x47, 0x38, 0xac, 0x90, 0x38, 0x70, + 0xe2, 0x88, 0xc4, 0x05, 0x71, 0xe2, 0x30, 0xe2, 0x8a, 0x38, 0x72, 0xe1, 0x07, 0x20, 0x6e, 0xb0, + 0x27, 0x2e, 0x9c, 0x50, 0xbc, 0xf8, 0xc8, 0x88, 0xca, 0xac, 0x72, 0x35, 0x3b, 0x9a, 0x4b, 0x77, + 0xe5, 0x8b, 0x17, 0xef, 0xbd, 0x78, 0xef, 0xc5, 0x8b, 0xf7, 0x5e, 0x84, 0x61, 0x3e, 0xcf, 0x82, + 0xfd, 0x2c, 0x4f, 0x59, 0x4a, 0x66, 0xce, 0x03, 0x96, 0x67, 0x41, 0x77, 0xfb, 0x3c, 0x4d, 0xcf, + 0x63, 0x7a, 0xe0, 0x67, 0xd1, 0x81, 0x9f, 0x24, 0x29, 0xf3, 0x59, 0x94, 0x26, 0x85, 0xc0, 0x72, + 0x97, 0x60, 0xf1, 0x98, 0xb2, 0x67, 0xc9, 0x59, 0xea, 0xd1, 0x2f, 0xfb, 0xb4, 0x60, 0xee, 0x3f, + 0x4e, 0x43, 0x5b, 0x83, 0x8a, 0x2c, 0x4d, 0x0a, 0x4a, 0xd6, 0x61, 0xa6, 0x9f, 0xb1, 0xe8, 0x8a, + 0x76, 0x9c, 0x3d, 0xe7, 0xe1, 0xbc, 0x27, 0xbf, 0xc8, 0x01, 0xac, 0xf8, 0xd7, 0x7e, 0x14, 0xfb, + 0xa7, 0x31, 0xed, 0xd1, 0xd7, 0xc1, 0x85, 0x9f, 0x9c, 0xd3, 0xa2, 0xd3, 0xd8, 0x73, 0x1e, 0x4e, + 0x79, 0x44, 0x0f, 0x3d, 0x55, 0x23, 0xe4, 0x1d, 0x58, 0xa6, 0x09, 0x07, 0x85, 0x06, 0xfa, 0x14, + 0xa2, 0x2f, 0xc9, 0x81, 0x12, 0xf9, 0x09, 0xac, 0x87, 0xf4, 0xcc, 0xef, 0xc7, 0xac, 0x77, 0x96, + 0xe6, 0xf4, 0x75, 0x2f, 0xcb, 0xd3, 0xeb, 0x28, 0xa4, 0x79, 0x67, 0x1a, 0xa5, 0x58, 0x95, 0xa3, + 0x9f, 0xf2, 0xc1, 0x13, 0x39, 0x46, 0x1e, 0xc3, 0x9a, 0x9e, 0x15, 0xf9, 0xac, 0x17, 0xf4, 0xf3, + 0x9c, 0x26, 0xc1, 0xa0, 0x73, 0x07, 0x27, 0xad, 0xa8, 0x49, 0x91, 0xcf, 0x8e, 0xe4, 0x10, 0xf9, + 0x1c, 0x96, 0x8a, 0xfe, 0x69, 0x31, 0x28, 0x18, 0xbd, 0xea, 0x15, 0xcc, 0x67, 0xfd, 0xa2, 0x33, + 0xb3, 0x37, 0xf5, 0xb0, 0xf9, 0xf8, 0xdd, 0x7d, 0xa1, 0xc6, 0xfd, 0x21, 0x95, 0xec, 0xbf, 0x50, + 0xf8, 0x2f, 0x10, 0xfd, 0x69, 0xc2, 0xf2, 0x81, 0xd7, 0x2e, 0x6c, 0x28, 0xf9, 0x0c, 0x16, 0xf2, + 0x2c, 0xe8, 0xd1, 0x24, 0xcc, 0xd2, 0x28, 0x61, 0x45, 0x67, 0x16, 0xa9, 0x3e, 0x1a, 0x45, 0xd5, + 0xcb, 0x82, 0xa7, 0x0a, 0x57, 0x90, 0x6c, 0xe5, 0x06, 0xa8, 0xfb, 0x31, 0xac, 0xd6, 0x31, 0x26, + 0x4b, 0x30, 0x75, 0x49, 0x07, 0xd2, 0x3a, 0xfc, 0x27, 0x59, 0x85, 0x3b, 0xd7, 0x7e, 0xdc, 0xa7, + 0x68, 0x8c, 0x39, 0x4f, 0x7c, 0xfc, 0xa0, 0xf1, 0xa1, 0xd3, 0x7d, 0x09, 0xcb, 0x15, 0x36, 0x35, + 0x04, 0x1e, 0x99, 0x04, 0x9a, 0x8f, 0x57, 0x94, 0xc8, 0xde, 0xc9, 0x91, 0x9a, 0x6b, 0x50, 0x75, + 0xef, 0xc1, 0xee, 0x31, 0x65, 0x47, 0xe9, 0xd5, 0x55, 0x3f, 0x89, 0x02, 0xf4, 0x31, 0x8f, 0xc6, + 0xfe, 0x80, 0xe6, 0x85, 0xf2, 0xac, 0xcf, 0x60, 0xb5, 0x6e, 0x9c, 0x74, 0x60, 0x56, 0xda, 0x1e, + 0xf9, 0xcf, 0x79, 0xea, 0x93, 0x6c, 0xc3, 0x7c, 0x90, 0x26, 0x09, 0x0d, 0x18, 0x0d, 0xe5, 0x42, + 0x4a, 0x80, 0xfb, 0xe7, 0x0d, 0xd8, 0x1b, 0xcd, 0x53, 0xba, 0xee, 0x57, 0xb0, 0x1e, 0x98, 0x08, + 0xbd, 0x5c, 0x62, 0x74, 0x1c, 0x34, 0xc5, 0x91, 0x61, 0x8a, 0xb1, 0x94, 0xf6, 0x6b, 0x47, 0x85, + 0x91, 0xd6, 0x82, 0xba, 0xb1, 0xee, 0x19, 0x74, 0x47, 0x4f, 0xaa, 0x51, 0xf9, 0x63, 0x5b, 0xe5, + 0xdb, 0x4a, 0xb4, 0x3a, 0x22, 0xa6, 0xee, 0xbf, 0x0f, 0x1b, 0xc7, 0x34, 0xa1, 0x79, 0x14, 0x68, + 0xe7, 0x90, 0x3a, 0xe7, 0x1a, 0xd4, 0x3e, 0x29, 0x59, 0x95, 0x00, 0xb7, 0x0b, 0x9d, 0xea, 0x44, + 0xb1, 0x5c, 0x77, 0x1d, 0x56, 0x8f, 0x29, 0xd3, 0x70, 0x6d, 0xc5, 0xaf, 0x1d, 0x58, 0xc3, 0x81, + 0xe2, 0xb4, 0x18, 0x88, 0x01, 0xa9, 0xea, 0x3f, 0x86, 0x65, 0x4d, 0xba, 0x50, 0xdb, 0x48, 0x68, + 0xf9, 0x03, 0x43, 0xcb, 0xd5, 0x99, 0xe5, 0x66, 0x2a, 0xcc, 0xdd, 0x54, 0xee, 0x49, 0x09, 0xee, + 0x1e, 0xc1, 0x5a, 0x2d, 0xea, 0x9b, 0xf8, 0xbf, 0xdb, 0x81, 0xf5, 0x63, 0xca, 0x0c, 0x37, 0x36, + 0x1c, 0xb4, 0x69, 0x80, 0xb9, 0x5f, 0x16, 0xcc, 0xcf, 0x59, 0xe9, 0x97, 0xf2, 0x93, 0xdc, 0x87, + 0xc5, 0x38, 0x2a, 0x18, 0x4d, 0x7a, 0x7e, 0x18, 0xe6, 0xb4, 0x10, 0x21, 0x6f, 0xde, 0x5b, 0x10, + 0xd0, 0x43, 0x01, 0x74, 0xff, 0xc9, 0xe1, 0x86, 0x19, 0x62, 0x25, 0x95, 0xf5, 0x53, 0x98, 0x2f, + 0xa3, 0x82, 0x50, 0xd2, 0xbe, 0xa1, 0xa4, 0xba, 0x39, 0xfb, 0x43, 0xa1, 0xa1, 0x24, 0xd0, 0xfd, + 0x03, 0x58, 0xfc, 0xa6, 0x37, 0xf4, 0x87, 0xd0, 0x95, 0xbe, 0xa1, 0x22, 0xf2, 0x67, 0xfe, 0x15, + 0x55, 0x7e, 0xd5, 0x85, 0x39, 0x15, 0xc0, 0x25, 0x0f, 0xfd, 0xed, 0xee, 0xc0, 0x56, 0xed, 0x4c, + 0xe9, 0x58, 0x07, 0xb0, 0x72, 0x4c, 0x99, 0x0e, 0xf3, 0x8a, 0xe2, 0xc8, 0x28, 0xe0, 0x3e, 0x41, + 0x4f, 0x34, 0x26, 0x48, 0x15, 0x6e, 0xc3, 0x7c, 0x79, 0x88, 0x48, 0xdf, 0xd6, 0x00, 0xf7, 0x31, + 0xba, 0xa9, 0x9a, 0xf5, 0xfc, 0xe5, 0x89, 0x47, 0xc5, 0xb4, 0x4d, 0x98, 0x4b, 0x59, 0xd6, 0x0b, + 0xd2, 0x50, 0x89, 0x3e, 0x9b, 0xb2, 0xec, 0x28, 0x0d, 0xa9, 0x74, 0x0d, 0x63, 0x8e, 0x76, 0x8d, + 0xbf, 0x15, 0xa6, 0xb4, 0x87, 0xa4, 0x1c, 0xbf, 0x0f, 0xf3, 0x8a, 0xa0, 0x32, 0xe5, 0x7b, 0x86, + 0x29, 0xeb, 0xe6, 0xec, 0x3f, 0x17, 0x1c, 0xa5, 0x25, 0xe7, 0xa4, 0x00, 0x45, 0xf7, 0x23, 0x58, + 0xb0, 0x86, 0x6e, 0xf3, 0xec, 0x79, 0xd3, 0x64, 0x4f, 0x60, 0xfd, 0x93, 0xa8, 0x30, 0x4f, 0xdc, + 0x49, 0xcc, 0xf5, 0xf5, 0x94, 0xb5, 0x34, 0xeb, 0xe0, 0x27, 0x30, 0x9d, 0xf8, 0xfa, 0xd8, 0xc7, + 0xdf, 0xa6, 0xa1, 0x1a, 0x76, 0xb8, 0xee, 0xc0, 0xec, 0x35, 0xcd, 0x4f, 0xd3, 0x82, 0xe2, 0x99, + 0x3e, 0xe7, 0xa9, 0x4f, 0xf2, 0x1d, 0x58, 0xe8, 0x17, 0x51, 0x72, 0xde, 0x2b, 0xfc, 0x24, 0x3c, + 0x4d, 0x5f, 0xe3, 0x09, 0x3e, 0xe7, 0xb5, 0x10, 0xf8, 0x42, 0xc0, 0xc8, 0x3d, 0x68, 0x5d, 0x30, + 0x96, 0xf5, 0x78, 0x6a, 0x91, 0xf6, 0x99, 0x3c, 0xb0, 0x9b, 0x1c, 0xf6, 0x52, 0x80, 0xf8, 0xc6, + 0x43, 0x94, 0x7e, 0x41, 0x73, 0xff, 0x9c, 0x26, 0xac, 0x33, 0x23, 0x36, 0x1e, 0x87, 0xfe, 0x5c, + 0x01, 0xc9, 0x0e, 0x00, 0xa2, 0x65, 0x79, 0xfa, 0x7a, 0xd0, 0x99, 0x15, 0xae, 0xc1, 0x21, 0x27, + 0x1c, 0x40, 0xde, 0x82, 0xf6, 0xa9, 0x5f, 0x50, 0x95, 0x1a, 0x44, 0xb4, 0xe8, 0xcc, 0x21, 0xce, + 0x22, 0x07, 0x1f, 0x69, 0x28, 0x79, 0xc4, 0xf3, 0x82, 0x2c, 0x4b, 0xf9, 0xa6, 0xef, 0xf9, 0x45, + 0x41, 0x59, 0xd1, 0x99, 0x47, 0xcc, 0xb6, 0x86, 0x1f, 0x22, 0x98, 0xaf, 0x50, 0x65, 0x36, 0x99, + 0x1f, 0xe5, 0x45, 0x07, 0x10, 0xaf, 0x25, 0x81, 0x27, 0x1c, 0xc6, 0x19, 0x97, 0xf9, 0x92, 0x40, + 0x6b, 0x0a, 0xc6, 0x1a, 0x2c, 0x10, 0xdf, 0x81, 0x65, 0xbf, 0xcf, 0x2e, 0x68, 0xc2, 0x78, 0xd4, + 0xe7, 0xcc, 0xb3, 0xa8, 0xd3, 0x42, 0x9d, 0x2d, 0x59, 0x03, 0x87, 0x59, 0xe4, 0xde, 0xc0, 0xd2, + 0x31, 0x65, 0x2f, 0xa3, 0xe0, 0x92, 0xe6, 0x13, 0x18, 0x9c, 0x3c, 0x84, 0x69, 0xce, 0x5b, 0xc6, + 0x81, 0x55, 0x7d, 0xca, 0xc8, 0x6c, 0x88, 0x4b, 0xe0, 0x21, 0x06, 0xd7, 0x23, 0xae, 0xba, 0xc7, + 0x06, 0x99, 0xb0, 0xe9, 0xbc, 0x37, 0x8f, 0x90, 0x97, 0x83, 0x8c, 0xba, 0xaf, 0xa0, 0x65, 0x4e, + 0xe2, 0x1b, 0x32, 0xa4, 0x71, 0x74, 0x15, 0x31, 0x9a, 0xab, 0x0d, 0xa9, 0x01, 0xdc, 0x97, 0xb8, + 0x7a, 0xa5, 0xdb, 0xe2, 0x6f, 0xee, 0xcb, 0x5f, 0xf6, 0x53, 0xa6, 0x68, 0x8b, 0x0f, 0xf7, 0xaf, + 0x1a, 0xb0, 0xa8, 0x96, 0x23, 0x1d, 0x51, 0xc9, 0xec, 0xdc, 0x2a, 0xf3, 0x3d, 0x68, 0xc5, 0x7e, + 0xc1, 0x7a, 0xfd, 0x2c, 0xf4, 0x55, 0xda, 0x30, 0xe5, 0x35, 0x39, 0xec, 0xe7, 0x02, 0xc4, 0x6d, + 0xa5, 0xb2, 0x42, 0xb4, 0x82, 0xe4, 0xde, 0x0a, 0xcc, 0xc5, 0x10, 0x98, 0xe6, 0x73, 0xd0, 0x53, + 0x1d, 0x0f, 0x7f, 0x73, 0xd8, 0x45, 0x74, 0x7e, 0x81, 0x9e, 0xe9, 0x78, 0xf8, 0x9b, 0x6f, 0xd0, + 0x38, 0xbd, 0x41, 0x3f, 0x74, 0x3c, 0xfe, 0x93, 0x43, 0x4e, 0xa3, 0x10, 0xdd, 0xce, 0xf1, 0xf8, + 0x4f, 0x0e, 0xf1, 0x8b, 0x4b, 0x74, 0x32, 0xc7, 0xe3, 0x3f, 0x79, 0x46, 0x7d, 0x9d, 0xc6, 0xfd, + 0x2b, 0x8a, 0xfe, 0xe4, 0x78, 0xf2, 0x8b, 0x6c, 0xc1, 0x7c, 0x96, 0x47, 0x01, 0xed, 0xf9, 0xec, + 0x02, 0x5d, 0xc8, 0xf1, 0xe6, 0x10, 0x70, 0xc8, 0x2e, 0xdc, 0x15, 0x58, 0xd6, 0x86, 0xd6, 0x91, + 0xe9, 0x73, 0x98, 0x95, 0x90, 0xb1, 0x46, 0xff, 0x1e, 0xcc, 0x32, 0x81, 0xd6, 0x69, 0x60, 0x88, + 0x5a, 0x57, 0x3a, 0xb4, 0x35, 0xed, 0x29, 0x34, 0xf7, 0x77, 0x81, 0x98, 0xdc, 0xa4, 0x21, 0x1e, + 0x95, 0x74, 0x44, 0xa8, 0x6b, 0xdb, 0x74, 0x8a, 0x92, 0xc0, 0x57, 0x18, 0xe8, 0x9f, 0xe7, 0x21, + 0x0f, 0x02, 0xe9, 0xe5, 0xb7, 0xea, 0x9a, 0x3f, 0x83, 0x05, 0xcd, 0xf8, 0x19, 0xa3, 0x57, 0x5c, + 0xe1, 0xfe, 0x55, 0xda, 0x4f, 0x18, 0xf2, 0x74, 0x3c, 0xf9, 0xc5, 0x3d, 0x10, 0xf5, 0x8b, 0x2c, + 0x1d, 0x4f, 0x7c, 0x90, 0x45, 0x68, 0x44, 0xa1, 0x2c, 0x4c, 0x1a, 0x51, 0xe8, 0xfe, 0xaf, 0x03, + 0xcb, 0xc6, 0x42, 0xde, 0xd8, 0x29, 0x2b, 0x1e, 0xd7, 0xa8, 0xf1, 0xb8, 0x47, 0x30, 0x7d, 0x1a, + 0x85, 0xbc, 0x1e, 0xe2, 0x7a, 0x5d, 0x53, 0xe4, 0xac, 0x75, 0x78, 0x88, 0xc2, 0x51, 0xfd, 0xe2, + 0xb2, 0xe8, 0x4c, 0x8f, 0x45, 0xe5, 0x28, 0x95, 0xfd, 0x70, 0xa7, 0xba, 0x1f, 0x6c, 0x5d, 0xce, + 0x0c, 0xeb, 0x52, 0x64, 0x82, 0x9a, 0xb6, 0xf6, 0xbc, 0x00, 0xa0, 0x04, 0x8e, 0x35, 0xeb, 0x6f, + 0x03, 0xa4, 0x1a, 0x53, 0xfa, 0xdf, 0x66, 0x45, 0x68, 0xed, 0x82, 0x06, 0xb2, 0xfb, 0x13, 0x3c, + 0xc6, 0x4d, 0xe6, 0x52, 0xf9, 0x8f, 0x2d, 0x9a, 0xc2, 0x17, 0x49, 0x85, 0x66, 0x61, 0x11, 0xfb, + 0x00, 0x89, 0x1d, 0x06, 0x01, 0x37, 0xbd, 0x51, 0xf4, 0x8e, 0x3d, 0x1f, 0x5f, 0xc1, 0xac, 0x9c, + 0x21, 0xdd, 0x42, 0x20, 0x34, 0xa2, 0x90, 0x7c, 0x04, 0x60, 0x9c, 0x21, 0x62, 0x5d, 0x5b, 0x4a, + 0x06, 0x39, 0x49, 0x79, 0x03, 0xb2, 0x33, 0xd0, 0xdd, 0x33, 0x58, 0xa9, 0x41, 0xe1, 0xa2, 0xe8, + 0x92, 0x55, 0x8a, 0xa2, 0xbe, 0xc9, 0x2e, 0x34, 0x59, 0xca, 0xfc, 0xb8, 0x57, 0x26, 0x00, 0x8e, + 0x07, 0x08, 0x7a, 0xc5, 0x21, 0x18, 0xa0, 0xd2, 0x58, 0x78, 0x2e, 0x0f, 0x50, 0x69, 0x1c, 0xba, + 0x3e, 0x26, 0x35, 0xd6, 0xa2, 0xa5, 0x0a, 0xc7, 0x99, 0xec, 0x1d, 0x98, 0xf3, 0xc5, 0x14, 0xb5, + 0xb0, 0xf6, 0xd0, 0xc2, 0x3c, 0x8d, 0xe0, 0x12, 0x3c, 0x81, 0x8e, 0xd2, 0xe4, 0x2c, 0x3a, 0x57, + 0xde, 0xf1, 0x16, 0x06, 0x2b, 0x05, 0x2b, 0xf3, 0x89, 0xd0, 0x67, 0x3e, 0x72, 0x6b, 0x79, 0xf8, + 0xdb, 0xfd, 0x33, 0x07, 0x96, 0x4e, 0xd2, 0x9c, 0x9d, 0xa5, 0x71, 0x94, 0xca, 0xd4, 0x99, 0xa7, + 0x12, 0x2a, 0xb5, 0x96, 0x39, 0x9a, 0xfc, 0xe4, 0x11, 0x32, 0x48, 0xa3, 0x44, 0xf8, 0x6a, 0x43, + 0x2a, 0x28, 0x8d, 0x12, 0xee, 0xaa, 0x64, 0x0f, 0x9a, 0x21, 0x2d, 0x82, 0x3c, 0xca, 0x78, 0xa9, + 0x24, 0xc3, 0x82, 0x09, 0xe2, 0x84, 0x4f, 0xfd, 0xd8, 0x4f, 0x02, 0x2a, 0x23, 0xbb, 0xfa, 0x74, + 0xd7, 0x30, 0x5c, 0x69, 0x49, 0x8c, 0xaa, 0xd5, 0x06, 0xcb, 0xa5, 0xfc, 0x16, 0xcc, 0x67, 0x0a, + 0x28, 0xdd, 0xaf, 0xa3, 0x34, 0x34, 0xbc, 0x1c, 0xaf, 0x44, 0x75, 0xb7, 0x79, 0x5e, 0x5d, 0xd2, + 0x7b, 0xd1, 0xbf, 0xba, 0xf2, 0xf3, 0x81, 0xe2, 0x96, 0xc0, 0xf4, 0x51, 0x1a, 0x25, 0x5c, 0x51, + 0x7c, 0x51, 0x2a, 0xf1, 0xe2, 0xbf, 0x4d, 0xd1, 0x1b, 0x96, 0xe8, 0xa6, 0xb6, 0xa6, 0x6c, 0x6d, + 0xdd, 0x05, 0xc8, 0x68, 0x1e, 0xd0, 0x84, 0xf9, 0xe7, 0x6a, 0xc5, 0x06, 0xc4, 0xbd, 0x00, 0xf2, + 0xfc, 0xec, 0x2c, 0x8e, 0x12, 0xca, 0xd9, 0x4a, 0x61, 0xc6, 0x68, 0x7f, 0xb4, 0x0c, 0x36, 0xa7, + 0xa9, 0x0a, 0xa7, 0x9f, 0xc1, 0xf2, 0xf3, 0xa4, 0x86, 0x91, 0x22, 0xe7, 0x8c, 0x23, 0xd7, 0xa8, + 0x90, 0xfb, 0x31, 0xb4, 0x0c, 0xc1, 0x0b, 0xf2, 0x21, 0xcc, 0x4b, 0x19, 0x75, 0x12, 0xde, 0xd5, + 0xd1, 0xa0, 0xb2, 0x42, 0xaf, 0x44, 0x76, 0xff, 0xda, 0x81, 0x66, 0x29, 0x59, 0x41, 0x9e, 0xc0, + 0x1d, 0xae, 0x6e, 0x45, 0xe5, 0xae, 0xa6, 0x52, 0xe2, 0xec, 0xe3, 0xbf, 0x22, 0x77, 0x17, 0xc8, + 0xdd, 0x17, 0x00, 0x25, 0xb0, 0x26, 0x6b, 0x3f, 0xb0, 0xab, 0xaf, 0xcd, 0x2a, 0x55, 0x25, 0x9a, + 0x91, 0xd0, 0xff, 0xeb, 0x34, 0x2f, 0xa5, 0x6a, 0x9c, 0x45, 0xfa, 0xe0, 0x7b, 0xd0, 0x14, 0x7b, + 0x81, 0x47, 0x00, 0x25, 0x70, 0xab, 0x6c, 0x1b, 0x44, 0x89, 0x07, 0xb8, 0x37, 0x70, 0x9c, 0xbc, + 0x0f, 0x0b, 0x28, 0x6c, 0x2f, 0x15, 0x0a, 0x91, 0x1b, 0xdb, 0x9e, 0xd0, 0x42, 0x14, 0xa9, 0x32, + 0x92, 0xc1, 0x9a, 0x35, 0xa5, 0x57, 0x08, 0x11, 0xe4, 0x21, 0xf5, 0x43, 0xa3, 0xce, 0x19, 0x25, + 0xa5, 0x50, 0x96, 0x24, 0x28, 0xc7, 0x84, 0xea, 0x56, 0x82, 0xea, 0x08, 0x39, 0x80, 0x96, 0xe4, + 0x88, 0x9a, 0x91, 0x47, 0x9c, 0x2d, 0x63, 0x53, 0x4c, 0x44, 0x04, 0x72, 0x05, 0xab, 0xe6, 0x04, + 0x2d, 0xe1, 0x1d, 0x9c, 0xf8, 0xd1, 0xe4, 0x12, 0x26, 0x15, 0x01, 0x49, 0x50, 0x19, 0xe8, 0xfe, + 0x21, 0x74, 0x46, 0x2d, 0xa8, 0xc6, 0xec, 0x6f, 0xdb, 0x66, 0x5f, 0xad, 0x71, 0xc9, 0xc2, 0x6c, + 0xce, 0x7d, 0x01, 0x1b, 0x23, 0x84, 0x79, 0x83, 0x8a, 0xde, 0xf0, 0x54, 0xd3, 0x9b, 0xfe, 0xd2, + 0x81, 0xee, 0x61, 0x18, 0x56, 0x82, 0x53, 0x59, 0x80, 0x7f, 0xdb, 0x21, 0x77, 0x07, 0xb6, 0x6a, + 0x05, 0x92, 0x9d, 0x82, 0xd7, 0xb0, 0xe3, 0xd1, 0xab, 0xf4, 0x9a, 0x7e, 0xdb, 0x22, 0xbb, 0x7b, + 0x70, 0x77, 0x14, 0x67, 0x29, 0x1b, 0xb6, 0xce, 0xec, 0xd6, 0xb3, 0x4e, 0x8c, 0xfe, 0xcb, 0x81, + 0x05, 0xbb, 0x29, 0xfd, 0x4d, 0xd5, 0xd1, 0xef, 0x02, 0xc9, 0x69, 0xc1, 0x7a, 0x79, 0x1a, 0xc7, + 0xbc, 0x9c, 0x0e, 0x69, 0xec, 0x0f, 0x64, 0x3b, 0x7c, 0x89, 0x8f, 0x78, 0x62, 0xe0, 0x13, 0x0e, + 0x27, 0x1b, 0x30, 0xeb, 0x67, 0x51, 0x8f, 0x7b, 0x8d, 0xa8, 0xa5, 0x67, 0xfc, 0x2c, 0xfa, 0x09, + 0x1d, 0x10, 0x17, 0x16, 0xe4, 0x40, 0x2f, 0xa6, 0xd7, 0x34, 0xc6, 0x9c, 0x6f, 0xca, 0x6b, 0x8a, + 0xe1, 0x9f, 0x72, 0x10, 0xaf, 0x7d, 0xb3, 0x3c, 0xe2, 0xee, 0x57, 0xf6, 0xdd, 0x67, 0x51, 0x9a, + 0xb6, 0x84, 0xab, 0xd5, 0xb9, 0xbf, 0x80, 0xcd, 0x1a, 0x5d, 0xc8, 0x18, 0xf5, 0x23, 0x68, 0xdb, + 0xdd, 0x7b, 0x15, 0xa7, 0x74, 0xd6, 0x6a, 0x4d, 0xf4, 0x16, 0xcf, 0x2c, 0x3a, 0x32, 0xfb, 0x44, + 0x1c, 0xcf, 0x67, 0xba, 0x5f, 0xe4, 0x7e, 0x09, 0xab, 0x25, 0xf0, 0x28, 0x4d, 0xae, 0x69, 0x5e, + 0x70, 0x6f, 0x23, 0x30, 0x7d, 0x96, 0xa7, 0xaa, 0xd9, 0x89, 0xbf, 0x79, 0xde, 0xc6, 0x52, 0xe9, + 0x06, 0x0d, 0x96, 0x72, 0x9c, 0xdc, 0x67, 0xea, 0x94, 0xc2, 0xdf, 0x3c, 0x4f, 0x8e, 0x90, 0x08, + 0xed, 0xe1, 0x98, 0x70, 0xd5, 0xa6, 0x84, 0x71, 0x2e, 0xee, 0x2b, 0x4c, 0x1f, 0x4d, 0x51, 0xe4, + 0x1a, 0x7f, 0x07, 0x9a, 0x62, 0x8d, 0x7c, 0xa6, 0x5a, 0xdf, 0xb6, 0xb5, 0xbe, 0x21, 0x31, 0x3d, + 0x38, 0xd3, 0x50, 0xf7, 0xd7, 0x0d, 0x68, 0x61, 0xc6, 0xfa, 0x09, 0x65, 0x7e, 0x14, 0x8f, 0xcf, + 0xa5, 0x45, 0x0e, 0xda, 0xd0, 0x39, 0xe8, 0x77, 0x60, 0xc1, 0x6c, 0x66, 0x0c, 0x54, 0x31, 0x6b, + 0xb4, 0x32, 0x06, 0xe4, 0x3e, 0x2c, 0x62, 0x69, 0x5d, 0x62, 0x09, 0x9f, 0x59, 0x40, 0xa8, 0x46, + 0xb3, 0x0b, 0x81, 0x3b, 0x43, 0x85, 0x00, 0x1f, 0xc6, 0x64, 0xba, 0x57, 0x44, 0xa1, 0xae, 0x13, + 0x10, 0xf2, 0x22, 0x0a, 0x8d, 0x61, 0x9c, 0x3d, 0x6b, 0x0c, 0xe3, 0x6c, 0x5e, 0x03, 0xe5, 0x54, + 0x34, 0xe1, 0xf1, 0x2e, 0x69, 0x0e, 0x9d, 0xae, 0xa5, 0x80, 0x2f, 0xa3, 0x2b, 0xbc, 0x69, 0x92, + 0x8d, 0x63, 0xd1, 0x67, 0x91, 0x5f, 0x65, 0x99, 0x06, 0x66, 0x99, 0x56, 0x16, 0x75, 0x4d, 0xab, + 0xa8, 0xdb, 0x85, 0x66, 0x9a, 0xd1, 0xa4, 0x27, 0x4b, 0xec, 0x96, 0xc8, 0x1e, 0x38, 0xe8, 0x15, + 0x42, 0x64, 0xcb, 0x04, 0x75, 0x5e, 0x4c, 0x52, 0x97, 0xda, 0x8a, 0x69, 0x0c, 0x2b, 0x46, 0x15, + 0x82, 0x53, 0xb7, 0x15, 0x82, 0xee, 0x21, 0x66, 0xc5, 0x8a, 0xb1, 0x74, 0x9f, 0x77, 0x61, 0x06, + 0xd5, 0xa4, 0x3c, 0x67, 0xd5, 0x2a, 0x63, 0xa4, 0x53, 0x78, 0x12, 0xc7, 0xfd, 0x31, 0xde, 0xcf, + 0xe1, 0xd0, 0x24, 0xa2, 0x6f, 0xc2, 0x9c, 0xb0, 0x8a, 0xf6, 0x9a, 0x59, 0xfc, 0x7e, 0x16, 0xba, + 0xff, 0xee, 0x00, 0x79, 0xd1, 0x3f, 0xbd, 0x8a, 0x26, 0xa7, 0x36, 0x79, 0x81, 0x4e, 0x60, 0x1a, + 0xdd, 0x44, 0xb8, 0x23, 0xfe, 0x1e, 0xf2, 0x90, 0xe9, 0x61, 0x0f, 0x29, 0xcd, 0x79, 0xa7, 0xbe, + 0x46, 0x9f, 0x31, 0x8d, 0xcf, 0x43, 0x7c, 0x1c, 0xd1, 0x84, 0xf5, 0x64, 0xb3, 0x85, 0x87, 0x78, + 0x04, 0x3c, 0x0b, 0xdd, 0x17, 0xb0, 0x62, 0xad, 0x4c, 0x6a, 0xfa, 0x1e, 0xb4, 0x84, 0x00, 0x59, + 0xec, 0x07, 0xba, 0xd3, 0xdc, 0x44, 0xd8, 0x09, 0x82, 0xc6, 0xe9, 0xeb, 0xbf, 0x1d, 0x20, 0x47, + 0xfc, 0xe0, 0x8a, 0x27, 0xd6, 0x17, 0x77, 0x1c, 0x51, 0x25, 0x95, 0xf4, 0xe6, 0x25, 0xe4, 0x99, + 0xcd, 0x6c, 0xca, 0x62, 0xa6, 0x35, 0x3d, 0xfd, 0x86, 0xad, 0x90, 0xca, 0xae, 0xbd, 0x0f, 0x8b, + 0x37, 0x7e, 0x1c, 0x53, 0xa6, 0x2f, 0x2b, 0x64, 0xcf, 0x54, 0x40, 0x55, 0xc5, 0xa5, 0xec, 0x35, + 0x5b, 0xda, 0x8b, 0x97, 0x44, 0xd6, 0x7a, 0xe5, 0xd9, 0xf7, 0x04, 0xd6, 0x05, 0xf8, 0x30, 0x8e, + 0x27, 0xde, 0x43, 0xee, 0xdf, 0x34, 0x60, 0xa3, 0x32, 0x4d, 0x1f, 0x12, 0xf6, 0x0e, 0x78, 0xa0, + 0x97, 0x5b, 0x3f, 0x61, 0x5f, 0x7e, 0xca, 0x59, 0xdd, 0x7f, 0x76, 0x60, 0x46, 0x80, 0xc6, 0x5a, + 0xe3, 0x0b, 0x65, 0x7e, 0x19, 0x63, 0x44, 0xfe, 0xfb, 0xfd, 0xc9, 0x98, 0x89, 0xff, 0xcc, 0x0b, + 0x2a, 0xe1, 0x37, 0xf2, 0x6e, 0xea, 0x47, 0xb0, 0x34, 0x8c, 0xf0, 0x46, 0xcd, 0x7b, 0x51, 0x43, + 0x3f, 0xbd, 0xa6, 0xc6, 0x85, 0xd4, 0xd7, 0x0e, 0xb4, 0x8f, 0xd2, 0x24, 0x8c, 0x78, 0x7c, 0x3c, + 0xf1, 0x73, 0xff, 0xaa, 0x90, 0x77, 0xa2, 0x02, 0xa4, 0x9a, 0xac, 0x1a, 0x30, 0xa2, 0x9d, 0xb5, + 0x03, 0x10, 0x5c, 0xd0, 0xe0, 0xb2, 0x27, 0xfb, 0x4b, 0xe2, 0x22, 0x95, 0x43, 0x3e, 0x8e, 0xc2, + 0x82, 0xbc, 0x07, 0x2b, 0xe5, 0x70, 0xcf, 0x4f, 0xc2, 0x9e, 0x6c, 0x2e, 0x61, 0xbf, 0x59, 0xe3, + 0x1d, 0x26, 0xe1, 0x61, 0x71, 0x89, 0x5d, 0x71, 0xdd, 0x53, 0xe9, 0x59, 0x1b, 0xb6, 0xad, 0xe1, + 0x87, 0x08, 0x76, 0xff, 0xc7, 0xc1, 0x78, 0xa7, 0x56, 0x25, 0xad, 0x5d, 0xb6, 0x51, 0xb0, 0xbb, + 0x66, 0x99, 0xac, 0x31, 0x64, 0x32, 0x02, 0xd3, 0x11, 0xa3, 0x57, 0x2a, 0x8c, 0xf0, 0xdf, 0xe4, + 0x63, 0x58, 0xd2, 0x2b, 0xee, 0x65, 0xa8, 0x16, 0xb9, 0x4d, 0x36, 0xca, 0x32, 0xc1, 0xd2, 0x9a, + 0xd7, 0x0e, 0x86, 0xd4, 0xa8, 0xb6, 0xd7, 0x9d, 0x5b, 0xb7, 0x17, 0x8f, 0x4a, 0x01, 0x6a, 0x7b, + 0x46, 0x26, 0x51, 0xf8, 0x25, 0xa4, 0xa6, 0x41, 0x9f, 0xd1, 0x50, 0x26, 0x46, 0xfa, 0xdb, 0xfd, + 0x4f, 0x07, 0xda, 0x87, 0x61, 0x88, 0xeb, 0x9e, 0x24, 0x4c, 0xa8, 0x55, 0x36, 0x6e, 0x59, 0xe5, + 0xd4, 0xff, 0x73, 0x95, 0xbf, 0x71, 0x10, 0x19, 0xa1, 0x04, 0xd7, 0x85, 0xa5, 0x72, 0x9d, 0xf5, + 0xe6, 0x75, 0xbf, 0x0b, 0x44, 0x24, 0xd3, 0x96, 0x3a, 0x86, 0xb1, 0xd6, 0x60, 0xc5, 0xc2, 0x92, + 0xb1, 0xe6, 0x53, 0x78, 0x78, 0x4c, 0xd9, 0x51, 0x3e, 0xc8, 0x58, 0xaa, 0x92, 0x97, 0x4f, 0x68, + 0x96, 0x16, 0x91, 0x8a, 0x5c, 0x74, 0xa2, 0xe8, 0xf3, 0x2f, 0x0e, 0x3c, 0x9a, 0x80, 0x90, 0x5c, + 0xc2, 0x1f, 0x55, 0xbb, 0x09, 0xbf, 0x67, 0x3e, 0x14, 0x98, 0x88, 0xca, 0xbe, 0x86, 0xc8, 0xfb, + 0x5a, 0x4d, 0xb2, 0xfb, 0x43, 0x58, 0xb4, 0x07, 0xdf, 0x28, 0x54, 0xc4, 0xf0, 0xe0, 0x16, 0x21, + 0x26, 0xf1, 0xb9, 0x07, 0xb0, 0x18, 0x58, 0x24, 0x24, 0xa3, 0x21, 0xa8, 0x7b, 0x04, 0x6f, 0xdd, + 0xca, 0x4d, 0xaa, 0x6d, 0x64, 0x3d, 0xe6, 0xfe, 0xfd, 0x34, 0x6c, 0x7c, 0x1e, 0xb1, 0x8b, 0x30, + 0xf7, 0x6f, 0x94, 0xf7, 0x4d, 0x22, 0xe4, 0x50, 0xa9, 0xd6, 0xa8, 0x56, 0x97, 0x6f, 0xc3, 0x72, + 0x9a, 0x50, 0xcc, 0x28, 0x7b, 0x99, 0x5f, 0x14, 0x37, 0x69, 0xae, 0xce, 0xd2, 0x76, 0x9a, 0x50, + 0x9e, 0x55, 0x9e, 0x48, 0xf0, 0xd0, 0x69, 0x3c, 0x3d, 0x7c, 0x1a, 0x2f, 0xc1, 0x54, 0x16, 0x25, + 0xb2, 0x43, 0xce, 0x7f, 0xf2, 0xb3, 0x93, 0xe5, 0x7e, 0x68, 0x50, 0x96, 0x67, 0x27, 0x42, 0x35, + 0x5d, 0xb3, 0x67, 0x3b, 0x3b, 0xd4, 0xb3, 0x35, 0x74, 0x32, 0x67, 0xd7, 0xa8, 0xbb, 0xd0, 0x94, + 0x3f, 0x7b, 0xcc, 0x3f, 0x97, 0x09, 0x2f, 0x48, 0xd0, 0x4b, 0xff, 0xdc, 0xc8, 0x87, 0xc0, 0xca, + 0x87, 0x76, 0x00, 0xce, 0x28, 0xed, 0x59, 0xa9, 0xef, 0xfc, 0x19, 0xa5, 0x22, 0xe8, 0xf2, 0xc4, + 0xe8, 0xd4, 0x4f, 0x2e, 0x7b, 0x58, 0x71, 0xb6, 0x84, 0x38, 0x1c, 0xf0, 0x19, 0xaf, 0x3a, 0xef, + 0x41, 0x0b, 0x07, 0x95, 0x4c, 0x0b, 0x42, 0xa3, 0x1c, 0x76, 0x58, 0xd6, 0xce, 0x88, 0x12, 0x44, + 0x6c, 0xd0, 0x59, 0x2c, 0xe7, 0x1f, 0x45, 0x6c, 0xa0, 0xe7, 0xa3, 0xce, 0xf2, 0x41, 0xa7, 0x5d, + 0xce, 0x3f, 0x12, 0x20, 0x2e, 0x5e, 0x71, 0x13, 0x9d, 0x51, 0x71, 0xc5, 0xbe, 0x24, 0x1f, 0x9d, + 0x70, 0xc8, 0x51, 0x1a, 0x62, 0x1d, 0x70, 0x13, 0xe5, 0x46, 0x29, 0xb2, 0x2c, 0x0a, 0x16, 0x0e, + 0x54, 0xae, 0xe1, 0xbe, 0x0d, 0x4b, 0xca, 0x5d, 0xcc, 0x57, 0x68, 0x39, 0x2d, 0xfa, 0x31, 0x53, + 0xaf, 0xd0, 0xc4, 0xd7, 0xe3, 0x5f, 0xef, 0xc2, 0xe2, 0x71, 0x2a, 0x1c, 0xf4, 0x25, 0xb7, 0x4b, + 0x4e, 0x9e, 0xc3, 0xac, 0x7c, 0x5a, 0x45, 0xd6, 0x2b, 0x6f, 0xad, 0xd0, 0xeb, 0xba, 0x1b, 0x23, + 0xde, 0x60, 0xb9, 0x2b, 0xbf, 0xfc, 0xb7, 0xff, 0xf8, 0x55, 0x63, 0x81, 0x34, 0x0f, 0xae, 0xdf, + 0x3f, 0x38, 0xa7, 0x2c, 0xe2, 0x54, 0x2e, 0x60, 0xc1, 0x7a, 0x0d, 0x43, 0xb6, 0xad, 0x17, 0x2d, + 0x43, 0x8f, 0x64, 0xba, 0x3b, 0x63, 0xdf, 0xbb, 0xb8, 0x5d, 0x64, 0xb1, 0x4a, 0x88, 0x64, 0x51, + 0x20, 0x8a, 0x20, 0xfc, 0x25, 0xb4, 0x9f, 0x62, 0x1f, 0x40, 0x53, 0x25, 0xbb, 0x25, 0xb5, 0xda, + 0x57, 0x3e, 0xdd, 0xbd, 0xd1, 0x08, 0x92, 0xe3, 0x16, 0x72, 0x5c, 0x23, 0x2b, 0x9c, 0xa3, 0xe8, + 0x33, 0xe8, 0xd7, 0x35, 0xa4, 0x80, 0x25, 0xf9, 0x6e, 0xe0, 0x1b, 0xe5, 0xb9, 0x8d, 0x3c, 0xd7, + 0xc9, 0x2a, 0xe7, 0x19, 0x0a, 0x06, 0x25, 0xd3, 0x14, 0xcb, 0x18, 0xf3, 0x9d, 0x0b, 0xb9, 0x3b, + 0xf2, 0x01, 0x8c, 0x60, 0xb9, 0x7b, 0xcb, 0x03, 0x19, 0x7b, 0x95, 0xe7, 0x94, 0xe3, 0xea, 0x37, + 0x32, 0xe4, 0x57, 0x0e, 0xb6, 0x6c, 0x6a, 0x5f, 0x64, 0x91, 0xb7, 0x6e, 0x7f, 0x06, 0x26, 0x64, + 0x78, 0x38, 0xe9, 0x7b, 0x31, 0xf7, 0xbb, 0x28, 0xcc, 0x5d, 0xb2, 0x2d, 0x85, 0xb1, 0xde, 0x88, + 0xa9, 0x57, 0x68, 0x24, 0x80, 0x96, 0xf9, 0xb8, 0x85, 0x6c, 0xd5, 0xbc, 0x1c, 0xd1, 0xcc, 0xb7, + 0xeb, 0x07, 0x25, 0xc3, 0x0e, 0x32, 0x24, 0x64, 0x49, 0x32, 0xd4, 0x6f, 0x61, 0xc8, 0x57, 0xd0, + 0x1e, 0x7a, 0x18, 0x42, 0xdc, 0x21, 0xf3, 0xd5, 0x3c, 0xf2, 0xe9, 0x7e, 0x67, 0x2c, 0x8e, 0xe4, + 0x7a, 0x17, 0xb9, 0x76, 0xdc, 0x15, 0xc3, 0xca, 0x8a, 0xf3, 0x0f, 0x9c, 0xb7, 0x49, 0x81, 0x76, + 0x36, 0x5f, 0x97, 0x4c, 0xc4, 0x7b, 0xb7, 0x66, 0xa9, 0xd6, 0x36, 0x1d, 0xb6, 0xb5, 0xe2, 0x89, + 0xdb, 0xb5, 0xc0, 0xbb, 0x6b, 0xe3, 0xe5, 0x0d, 0x46, 0x9e, 0x49, 0xf8, 0xee, 0xd4, 0xbf, 0xdc, + 0x91, 0x8f, 0x87, 0x2a, 0x3b, 0x57, 0x71, 0x4d, 0x59, 0x46, 0x0a, 0xeb, 0x61, 0x93, 0x64, 0x6a, + 0x7b, 0x75, 0xcd, 0xd3, 0xa2, 0xda, 0x95, 0x9a, 0x6f, 0x85, 0x46, 0xae, 0x34, 0x65, 0x59, 0x41, + 0x5e, 0xc3, 0xa2, 0x08, 0x17, 0xdf, 0xbc, 0x65, 0x77, 0x90, 0xef, 0x86, 0x4b, 0xca, 0x98, 0x61, + 0x1a, 0xf6, 0x73, 0x98, 0xd7, 0xef, 0x03, 0x48, 0xc7, 0x58, 0x84, 0xf5, 0x12, 0xa5, 0x3b, 0xe2, + 0x9d, 0x81, 0xf2, 0x56, 0x77, 0x41, 0xae, 0x4a, 0xbc, 0x1a, 0xe0, 0x84, 0x7f, 0x01, 0x50, 0x3e, + 0x3c, 0x20, 0x9b, 0x15, 0xca, 0x5a, 0x73, 0xdd, 0xba, 0x21, 0xf5, 0x7c, 0x11, 0xc9, 0x2f, 0x91, + 0x45, 0x8b, 0xbc, 0xda, 0x6f, 0xfa, 0x7e, 0xd8, 0xda, 0x6f, 0xc3, 0x4f, 0x15, 0xba, 0xa3, 0xef, + 0xa8, 0x95, 0x51, 0x5c, 0xb5, 0xd9, 0x74, 0xe5, 0xc3, 0x57, 0x70, 0x8e, 0xa7, 0x85, 0x71, 0x39, + 0xbe, 0x5d, 0xc7, 0xa5, 0xf6, 0xb4, 0xa8, 0xde, 0x74, 0xbb, 0x9b, 0xc8, 0x6a, 0x85, 0x2c, 0x0f, + 0xb3, 0x2a, 0xc8, 0x25, 0x3e, 0xdf, 0x36, 0xee, 0x76, 0x89, 0x49, 0xab, 0x7a, 0xd1, 0xdd, 0xbd, + 0x3b, 0x6a, 0x78, 0xc4, 0xc9, 0x24, 0x93, 0x23, 0xdc, 0x54, 0xc2, 0xe0, 0xe2, 0x46, 0xd7, 0x32, + 0xb8, 0x75, 0xf1, 0xdb, 0xdd, 0xac, 0x19, 0x91, 0xd4, 0xd7, 0x90, 0x7a, 0x9b, 0x2c, 0xe8, 0x90, + 0x88, 0xb4, 0x84, 0x4d, 0x74, 0xab, 0xdd, 0xb2, 0xc9, 0xf0, 0x7d, 0xac, 0x15, 0x03, 0x2b, 0xb7, + 0xb2, 0x95, 0x18, 0xa8, 0xef, 0x5d, 0xc9, 0x9f, 0xda, 0xd7, 0xbb, 0xea, 0xba, 0xc9, 0x1d, 0x7b, + 0x3f, 0x54, 0xd9, 0x2d, 0x23, 0xef, 0x90, 0xdc, 0x5d, 0xe4, 0xbc, 0x49, 0x36, 0x86, 0x39, 0xcb, + 0xfb, 0x28, 0xf2, 0x4b, 0x07, 0x56, 0x6a, 0x6e, 0x3b, 0x4a, 0x09, 0x46, 0xdf, 0xcd, 0x94, 0x12, + 0x8c, 0xbb, 0x2e, 0x71, 0x51, 0x82, 0x6d, 0x17, 0x25, 0xf0, 0xc3, 0x50, 0x4b, 0x20, 0x73, 0x3d, + 0xee, 0x99, 0x7f, 0xe1, 0xc0, 0x7a, 0xfd, 0xcd, 0x06, 0xb9, 0xaf, 0x1f, 0x84, 0x8e, 0xbb, 0x73, + 0xe9, 0x3e, 0xb8, 0x0d, 0x4d, 0x4a, 0x73, 0x1f, 0xa5, 0xd9, 0x75, 0xbb, 0x5c, 0x9a, 0x1c, 0x71, + 0xeb, 0x04, 0xba, 0xc1, 0x06, 0x81, 0x7d, 0x77, 0x40, 0x8c, 0xdc, 0xa2, 0xfe, 0x8a, 0xa5, 0x7b, + 0x6f, 0x0c, 0x86, 0x1d, 0xbe, 0xc8, 0x9a, 0x34, 0x08, 0x36, 0xdc, 0xf5, 0x25, 0x84, 0xdc, 0xa3, + 0x65, 0x6f, 0xde, 0xda, 0xa3, 0x95, 0xeb, 0x06, 0x6b, 0x8f, 0x56, 0x6f, 0x00, 0x2a, 0x7b, 0x14, + 0x99, 0xe1, 0x6d, 0x00, 0xf9, 0x02, 0xb7, 0x8d, 0xec, 0x4e, 0x75, 0x86, 0xb7, 0x7a, 0x51, 0xb7, + 0x6d, 0xec, 0xfe, 0x53, 0x25, 0x54, 0x8a, 0xa6, 0x17, 0xd7, 0x9e, 0x07, 0x73, 0x0a, 0x9d, 0x6c, + 0x0c, 0x13, 0x50, 0x94, 0x6b, 0xdb, 0xc9, 0xee, 0x06, 0x12, 0x5d, 0x76, 0x5b, 0x26, 0x51, 0x4e, + 0xf3, 0x14, 0x9a, 0x46, 0xeb, 0x94, 0xe8, 0x20, 0x5b, 0xed, 0x14, 0x77, 0xb7, 0x6a, 0xc7, 0xec, + 0x50, 0xe2, 0xb6, 0x39, 0x83, 0x02, 0x11, 0x4c, 0x1e, 0x46, 0x63, 0xb1, 0xe4, 0x51, 0xed, 0xae, + 0x96, 0x3c, 0xea, 0x3a, 0x91, 0x16, 0x8f, 0x00, 0x11, 0x34, 0x8f, 0x1c, 0xda, 0x43, 0x0d, 0xbd, + 0xf2, 0x28, 0xae, 0x6f, 0x5f, 0x96, 0x47, 0xf1, 0x88, 0x4e, 0xa0, 0x9d, 0xec, 0x08, 0x7e, 0x7e, + 0x1c, 0x97, 0xf6, 0x10, 0x21, 0x52, 0xb4, 0xbb, 0x2c, 0x5b, 0x5b, 0x7d, 0x3d, 0xcb, 0xd6, 0x76, + 0x6f, 0xac, 0x12, 0x22, 0xa9, 0xa0, 0xf5, 0x0a, 0xe6, 0x54, 0x9f, 0xa5, 0x34, 0xf4, 0x50, 0x87, + 0xa9, 0xdb, 0xa9, 0x0e, 0x48, 0xaa, 0x96, 0xb1, 0xfd, 0x30, 0x44, 0xaa, 0xd2, 0x10, 0x46, 0xd7, + 0xa5, 0x34, 0x44, 0xb5, 0x61, 0x53, 0x1a, 0xa2, 0xae, 0x4d, 0x63, 0x19, 0x42, 0xec, 0x76, 0xcd, + 0xe3, 0x1f, 0x1c, 0xb8, 0x77, 0x6b, 0xd3, 0x84, 0x7c, 0xef, 0x0d, 0xfa, 0x2b, 0x42, 0xa0, 0xf7, + 0xdf, 0xb8, 0x23, 0xe3, 0x3e, 0x44, 0x31, 0x5d, 0x77, 0x47, 0x1d, 0x40, 0x38, 0x2d, 0x14, 0xe8, + 0xba, 0x3d, 0xc3, 0x85, 0xfe, 0x3b, 0x47, 0xfc, 0x41, 0xcb, 0x18, 0xba, 0x64, 0x7f, 0x42, 0x01, + 0x94, 0xc0, 0x07, 0x13, 0xe3, 0x4b, 0x71, 0x1f, 0xa0, 0xb8, 0x7b, 0xee, 0xd6, 0x18, 0x71, 0xb9, + 0xb0, 0x7f, 0x02, 0x5b, 0xba, 0xb9, 0x62, 0xd1, 0xfd, 0xb4, 0x9f, 0x84, 0x45, 0x59, 0xcb, 0x8d, + 0xe8, 0xc0, 0x94, 0x8e, 0x33, 0x5c, 0x73, 0xdb, 0x67, 0xca, 0x8d, 0x1c, 0x15, 0x62, 0x9c, 0x71, + 0xda, 0x9c, 0x7b, 0x06, 0xcb, 0x6a, 0xde, 0xa7, 0x91, 0xcf, 0x7e, 0x63, 0x9e, 0x7b, 0xc8, 0xb3, + 0xeb, 0xae, 0x99, 0x3c, 0xcf, 0x22, 0x9f, 0x29, 0x8e, 0xa7, 0x33, 0xf8, 0xc7, 0x6b, 0x1f, 0xfc, + 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4b, 0x08, 0xf6, 0x2c, 0xef, 0x36, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4500,6 +4562,7 @@ type GoCryptoTraderClient interface { EnableSubsystem(ctx context.Context, in *GenericSubsystemRequest, opts ...grpc.CallOption) (*GenericSubsystemResponse, error) DisableSubsystem(ctx context.Context, in *GenericSubsystemRequest, opts ...grpc.CallOption) (*GenericSubsystemResponse, error) GetRPCEndpoints(ctx context.Context, in *GetRPCEndpointsRequest, opts ...grpc.CallOption) (*GetRPCEndpointsResponse, error) + GetCommunicationRelayers(ctx context.Context, in *GetCommunicationRelayersRequest, opts ...grpc.CallOption) (*GetCommunicationRelayersResponse, error) GetExchanges(ctx context.Context, in *GetExchangesRequest, opts ...grpc.CallOption) (*GetExchangesResponse, error) DisableExchange(ctx context.Context, in *GenericExchangeNameRequest, opts ...grpc.CallOption) (*GenericExchangeNameResponse, error) GetExchangeInfo(ctx context.Context, in *GenericExchangeNameRequest, opts ...grpc.CallOption) (*GetExchangeInfoResponse, error) @@ -4585,6 +4648,15 @@ func (c *goCryptoTraderClient) GetRPCEndpoints(ctx context.Context, in *GetRPCEn return out, nil } +func (c *goCryptoTraderClient) GetCommunicationRelayers(ctx context.Context, in *GetCommunicationRelayersRequest, opts ...grpc.CallOption) (*GetCommunicationRelayersResponse, error) { + out := new(GetCommunicationRelayersResponse) + err := c.cc.Invoke(ctx, "/gctrpc.GoCryptoTrader/GetCommunicationRelayers", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *goCryptoTraderClient) GetExchanges(ctx context.Context, in *GetExchangesRequest, opts ...grpc.CallOption) (*GetExchangesResponse, error) { out := new(GetExchangesResponse) err := c.cc.Invoke(ctx, "/gctrpc.GoCryptoTrader/GetExchanges", in, out, opts...) @@ -4862,6 +4934,7 @@ type GoCryptoTraderServer interface { EnableSubsystem(context.Context, *GenericSubsystemRequest) (*GenericSubsystemResponse, error) DisableSubsystem(context.Context, *GenericSubsystemRequest) (*GenericSubsystemResponse, error) GetRPCEndpoints(context.Context, *GetRPCEndpointsRequest) (*GetRPCEndpointsResponse, error) + GetCommunicationRelayers(context.Context, *GetCommunicationRelayersRequest) (*GetCommunicationRelayersResponse, error) GetExchanges(context.Context, *GetExchangesRequest) (*GetExchangesResponse, error) DisableExchange(context.Context, *GenericExchangeNameRequest) (*GenericExchangeNameResponse, error) GetExchangeInfo(context.Context, *GenericExchangeNameRequest) (*GetExchangeInfoResponse, error) @@ -4988,6 +5061,24 @@ func _GoCryptoTrader_GetRPCEndpoints_Handler(srv interface{}, ctx context.Contex return interceptor(ctx, in, info, handler) } +func _GoCryptoTrader_GetCommunicationRelayers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetCommunicationRelayersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GoCryptoTraderServer).GetCommunicationRelayers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gctrpc.GoCryptoTrader/GetCommunicationRelayers", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GoCryptoTraderServer).GetCommunicationRelayers(ctx, req.(*GetCommunicationRelayersRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _GoCryptoTrader_GetExchanges_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetExchangesRequest) if err := dec(in); err != nil { @@ -5552,6 +5643,10 @@ var _GoCryptoTrader_serviceDesc = grpc.ServiceDesc{ MethodName: "GetRPCEndpoints", Handler: _GoCryptoTrader_GetRPCEndpoints_Handler, }, + { + MethodName: "GetCommunicationRelayers", + Handler: _GoCryptoTrader_GetCommunicationRelayers_Handler, + }, { MethodName: "GetExchanges", Handler: _GoCryptoTrader_GetExchanges_Handler, diff --git a/gctrpc/rpc.pb.gw.go b/gctrpc/rpc.pb.gw.go index 18bf861646a..b76ff411429 100644 --- a/gctrpc/rpc.pb.gw.go +++ b/gctrpc/rpc.pb.gw.go @@ -89,6 +89,15 @@ func request_GoCryptoTrader_GetRPCEndpoints_0(ctx context.Context, marshaler run } +func request_GoCryptoTrader_GetCommunicationRelayers_0(ctx context.Context, marshaler runtime.Marshaler, client GoCryptoTraderClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetCommunicationRelayersRequest + var metadata runtime.ServerMetadata + + msg, err := client.GetCommunicationRelayers(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + var ( filter_GoCryptoTrader_GetExchanges_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) @@ -665,6 +674,26 @@ func RegisterGoCryptoTraderHandlerClient(ctx context.Context, mux *runtime.Serve }) + mux.Handle("GET", pattern_GoCryptoTrader_GetCommunicationRelayers_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_GetCommunicationRelayers_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_GetCommunicationRelayers_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_GoCryptoTrader_GetExchanges_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1279,6 +1308,8 @@ var ( pattern_GoCryptoTrader_GetRPCEndpoints_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "getrpcendpoints"}, "")) + pattern_GoCryptoTrader_GetCommunicationRelayers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "getcommunicationrelayers"}, "")) + pattern_GoCryptoTrader_GetExchanges_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "getexchanges"}, "")) pattern_GoCryptoTrader_DisableExchange_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "disableexchange"}, "")) @@ -1351,6 +1382,8 @@ var ( forward_GoCryptoTrader_GetRPCEndpoints_0 = runtime.ForwardResponseMessage + forward_GoCryptoTrader_GetCommunicationRelayers_0 = runtime.ForwardResponseMessage + forward_GoCryptoTrader_GetExchanges_0 = runtime.ForwardResponseMessage forward_GoCryptoTrader_DisableExchange_0 = runtime.ForwardResponseMessage diff --git a/gctrpc/rpc.proto b/gctrpc/rpc.proto index 58a3271dec5..7c2d88b3d7c 100644 --- a/gctrpc/rpc.proto +++ b/gctrpc/rpc.proto @@ -16,9 +16,16 @@ message GetInfoResponse { map rpc_endpoints = 7; } -// TO-DO comms APIs message GetCommunicationRelayersRequest {} -message GetCommunicationRelayersResponse {} + +message CommunicationRelayer { + bool enabled = 1; + bool connected = 2; +} + +message GetCommunicationRelayersResponse { + map communication_relayers = 1; +} message GenericSubsystemRequest { string subsystem = 1; @@ -456,6 +463,12 @@ service GoCryptoTrader { }; } + rpc GetCommunicationRelayers (GetCommunicationRelayersRequest) returns (GetCommunicationRelayersResponse) { + option (google.api.http) = { + get: "/v1/getcommunicationrelayers" + }; + } + rpc GetExchanges (GetExchangesRequest) returns (GetExchangesResponse) { option (google.api.http) = { get: "/v1/getexchanges" diff --git a/gctrpc/rpc.swagger.json b/gctrpc/rpc.swagger.json index 7a6cedd9074..a19f07a03fa 100644 --- a/gctrpc/rpc.swagger.json +++ b/gctrpc/rpc.swagger.json @@ -243,6 +243,22 @@ ] } }, + "/v1/getcommunicationrelayers": { + "get": { + "operationId": "GetCommunicationRelayers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/gctrpcGetCommunicationRelayersResponse" + } + } + }, + "tags": [ + "GoCryptoTrader" + ] + } + }, "/v1/getconfig": { "get": { "operationId": "GetConfig", @@ -960,6 +976,19 @@ } } }, + "gctrpcCommunicationRelayer": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "format": "boolean" + }, + "connected": { + "type": "boolean", + "format": "boolean" + } + } + }, "gctrpcConditionParams": { "type": "object", "properties": { @@ -1075,6 +1104,17 @@ } } }, + "gctrpcGetCommunicationRelayersResponse": { + "type": "object", + "properties": { + "communication_relayers": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/gctrpcCommunicationRelayer" + } + } + } + }, "gctrpcGetConfigResponse": { "type": "object", "properties": {