2
0
mirror of https://github.com/lightninglabs/loop synced 2024-11-09 19:10:47 +00:00

looprpc: split terms message

This commit is contained in:
Joost Jager 2020-07-14 15:13:55 +02:00
parent 57374efd46
commit 24099aa4f9
No known key found for this signature in database
GPG Key ID: A61B9D4C393C59C7
5 changed files with 252 additions and 164 deletions

View File

@ -4,10 +4,9 @@ import (
"context" "context"
"fmt" "fmt"
"github.com/urfave/cli"
"github.com/btcsuite/btcutil" "github.com/btcsuite/btcutil"
"github.com/lightninglabs/loop/looprpc" "github.com/lightninglabs/loop/looprpc"
"github.com/urfave/cli"
) )
var termsCommand = cli.Command{ var termsCommand = cli.Command{
@ -23,10 +22,9 @@ func terms(ctx *cli.Context) error {
} }
defer cleanup() defer cleanup()
printTerms := func(terms *looprpc.TermsResponse) { printAmountRange := func(min, max int64) {
fmt.Printf("Amount: %d - %d\n", fmt.Printf("Amount: %d - %d\n",
btcutil.Amount(terms.MinSwapAmount), btcutil.Amount(min), btcutil.Amount(max),
btcutil.Amount(terms.MaxSwapAmount),
) )
} }
@ -37,7 +35,10 @@ func terms(ctx *cli.Context) error {
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} else { } else {
printTerms(loopOutTerms) printAmountRange(
loopOutTerms.MinSwapAmount,
loopOutTerms.MaxSwapAmount,
)
} }
fmt.Println() fmt.Println()
@ -50,7 +51,10 @@ func terms(ctx *cli.Context) error {
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} else { } else {
printTerms(loopInTerms) printAmountRange(
loopInTerms.MinSwapAmount,
loopInTerms.MaxSwapAmount,
)
} }
return nil return nil

View File

@ -328,7 +328,7 @@ func (s *swapClientServer) SwapInfo(_ context.Context,
// LoopOutTerms returns the terms that the server enforces for loop out swaps. // LoopOutTerms returns the terms that the server enforces for loop out swaps.
func (s *swapClientServer) LoopOutTerms(ctx context.Context, func (s *swapClientServer) LoopOutTerms(ctx context.Context,
req *looprpc.TermsRequest) (*looprpc.TermsResponse, error) { req *looprpc.TermsRequest) (*looprpc.OutTermsResponse, error) {
log.Infof("Loop out terms request received") log.Infof("Loop out terms request received")
@ -338,7 +338,7 @@ func (s *swapClientServer) LoopOutTerms(ctx context.Context,
return nil, err return nil, err
} }
return &looprpc.TermsResponse{ return &looprpc.OutTermsResponse{
MinSwapAmount: int64(terms.MinSwapAmount), MinSwapAmount: int64(terms.MinSwapAmount),
MaxSwapAmount: int64(terms.MaxSwapAmount), MaxSwapAmount: int64(terms.MaxSwapAmount),
}, nil }, nil
@ -376,8 +376,8 @@ func (s *swapClientServer) LoopOutQuote(ctx context.Context,
} }
// GetTerms returns the terms that the server enforces for swaps. // GetTerms returns the terms that the server enforces for swaps.
func (s *swapClientServer) GetLoopInTerms(ctx context.Context, req *looprpc.TermsRequest) ( func (s *swapClientServer) GetLoopInTerms(ctx context.Context,
*looprpc.TermsResponse, error) { req *looprpc.TermsRequest) (*looprpc.InTermsResponse, error) {
log.Infof("Loop in terms request received") log.Infof("Loop in terms request received")
@ -387,7 +387,7 @@ func (s *swapClientServer) GetLoopInTerms(ctx context.Context, req *looprpc.Term
return nil, err return nil, err
} }
return &looprpc.TermsResponse{ return &looprpc.InTermsResponse{
MinSwapAmount: int64(terms.MinSwapAmount), MinSwapAmount: int64(terms.MinSwapAmount),
MaxSwapAmount: int64(terms.MaxSwapAmount), MaxSwapAmount: int64(terms.MaxSwapAmount),
}, nil }, nil

View File

@ -833,7 +833,7 @@ func (m *TermsRequest) XXX_DiscardUnknown() {
var xxx_messageInfo_TermsRequest proto.InternalMessageInfo var xxx_messageInfo_TermsRequest proto.InternalMessageInfo
type TermsResponse struct { type InTermsResponse struct {
//* //*
//Minimum swap amount (sat) //Minimum swap amount (sat)
MinSwapAmount int64 `protobuf:"varint,5,opt,name=min_swap_amount,json=minSwapAmount,proto3" json:"min_swap_amount,omitempty"` MinSwapAmount int64 `protobuf:"varint,5,opt,name=min_swap_amount,json=minSwapAmount,proto3" json:"min_swap_amount,omitempty"`
@ -845,39 +845,90 @@ type TermsResponse struct {
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
} }
func (m *TermsResponse) Reset() { *m = TermsResponse{} } func (m *InTermsResponse) Reset() { *m = InTermsResponse{} }
func (m *TermsResponse) String() string { return proto.CompactTextString(m) } func (m *InTermsResponse) String() string { return proto.CompactTextString(m) }
func (*TermsResponse) ProtoMessage() {} func (*InTermsResponse) ProtoMessage() {}
func (*TermsResponse) Descriptor() ([]byte, []int) { func (*InTermsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_014de31d7ac8c57c, []int{9} return fileDescriptor_014de31d7ac8c57c, []int{9}
} }
func (m *TermsResponse) XXX_Unmarshal(b []byte) error { func (m *InTermsResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TermsResponse.Unmarshal(m, b) return xxx_messageInfo_InTermsResponse.Unmarshal(m, b)
} }
func (m *TermsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { func (m *InTermsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TermsResponse.Marshal(b, m, deterministic) return xxx_messageInfo_InTermsResponse.Marshal(b, m, deterministic)
} }
func (m *TermsResponse) XXX_Merge(src proto.Message) { func (m *InTermsResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_TermsResponse.Merge(m, src) xxx_messageInfo_InTermsResponse.Merge(m, src)
} }
func (m *TermsResponse) XXX_Size() int { func (m *InTermsResponse) XXX_Size() int {
return xxx_messageInfo_TermsResponse.Size(m) return xxx_messageInfo_InTermsResponse.Size(m)
} }
func (m *TermsResponse) XXX_DiscardUnknown() { func (m *InTermsResponse) XXX_DiscardUnknown() {
xxx_messageInfo_TermsResponse.DiscardUnknown(m) xxx_messageInfo_InTermsResponse.DiscardUnknown(m)
} }
var xxx_messageInfo_TermsResponse proto.InternalMessageInfo var xxx_messageInfo_InTermsResponse proto.InternalMessageInfo
func (m *TermsResponse) GetMinSwapAmount() int64 { func (m *InTermsResponse) GetMinSwapAmount() int64 {
if m != nil { if m != nil {
return m.MinSwapAmount return m.MinSwapAmount
} }
return 0 return 0
} }
func (m *TermsResponse) GetMaxSwapAmount() int64 { func (m *InTermsResponse) GetMaxSwapAmount() int64 {
if m != nil {
return m.MaxSwapAmount
}
return 0
}
type OutTermsResponse struct {
//*
//Minimum swap amount (sat)
MinSwapAmount int64 `protobuf:"varint,5,opt,name=min_swap_amount,json=minSwapAmount,proto3" json:"min_swap_amount,omitempty"`
//*
//Maximum swap amount (sat)
MaxSwapAmount int64 `protobuf:"varint,6,opt,name=max_swap_amount,json=maxSwapAmount,proto3" json:"max_swap_amount,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *OutTermsResponse) Reset() { *m = OutTermsResponse{} }
func (m *OutTermsResponse) String() string { return proto.CompactTextString(m) }
func (*OutTermsResponse) ProtoMessage() {}
func (*OutTermsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_014de31d7ac8c57c, []int{10}
}
func (m *OutTermsResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_OutTermsResponse.Unmarshal(m, b)
}
func (m *OutTermsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_OutTermsResponse.Marshal(b, m, deterministic)
}
func (m *OutTermsResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_OutTermsResponse.Merge(m, src)
}
func (m *OutTermsResponse) XXX_Size() int {
return xxx_messageInfo_OutTermsResponse.Size(m)
}
func (m *OutTermsResponse) XXX_DiscardUnknown() {
xxx_messageInfo_OutTermsResponse.DiscardUnknown(m)
}
var xxx_messageInfo_OutTermsResponse proto.InternalMessageInfo
func (m *OutTermsResponse) GetMinSwapAmount() int64 {
if m != nil {
return m.MinSwapAmount
}
return 0
}
func (m *OutTermsResponse) GetMaxSwapAmount() int64 {
if m != nil { if m != nil {
return m.MaxSwapAmount return m.MaxSwapAmount
} }
@ -914,7 +965,7 @@ func (m *QuoteRequest) Reset() { *m = QuoteRequest{} }
func (m *QuoteRequest) String() string { return proto.CompactTextString(m) } func (m *QuoteRequest) String() string { return proto.CompactTextString(m) }
func (*QuoteRequest) ProtoMessage() {} func (*QuoteRequest) ProtoMessage() {}
func (*QuoteRequest) Descriptor() ([]byte, []int) { func (*QuoteRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_014de31d7ac8c57c, []int{10} return fileDescriptor_014de31d7ac8c57c, []int{11}
} }
func (m *QuoteRequest) XXX_Unmarshal(b []byte) error { func (m *QuoteRequest) XXX_Unmarshal(b []byte) error {
@ -995,7 +1046,7 @@ func (m *QuoteResponse) Reset() { *m = QuoteResponse{} }
func (m *QuoteResponse) String() string { return proto.CompactTextString(m) } func (m *QuoteResponse) String() string { return proto.CompactTextString(m) }
func (*QuoteResponse) ProtoMessage() {} func (*QuoteResponse) ProtoMessage() {}
func (*QuoteResponse) Descriptor() ([]byte, []int) { func (*QuoteResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_014de31d7ac8c57c, []int{11} return fileDescriptor_014de31d7ac8c57c, []int{12}
} }
func (m *QuoteResponse) XXX_Unmarshal(b []byte) error { func (m *QuoteResponse) XXX_Unmarshal(b []byte) error {
@ -1061,7 +1112,7 @@ func (m *TokensRequest) Reset() { *m = TokensRequest{} }
func (m *TokensRequest) String() string { return proto.CompactTextString(m) } func (m *TokensRequest) String() string { return proto.CompactTextString(m) }
func (*TokensRequest) ProtoMessage() {} func (*TokensRequest) ProtoMessage() {}
func (*TokensRequest) Descriptor() ([]byte, []int) { func (*TokensRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_014de31d7ac8c57c, []int{12} return fileDescriptor_014de31d7ac8c57c, []int{13}
} }
func (m *TokensRequest) XXX_Unmarshal(b []byte) error { func (m *TokensRequest) XXX_Unmarshal(b []byte) error {
@ -1095,7 +1146,7 @@ func (m *TokensResponse) Reset() { *m = TokensResponse{} }
func (m *TokensResponse) String() string { return proto.CompactTextString(m) } func (m *TokensResponse) String() string { return proto.CompactTextString(m) }
func (*TokensResponse) ProtoMessage() {} func (*TokensResponse) ProtoMessage() {}
func (*TokensResponse) Descriptor() ([]byte, []int) { func (*TokensResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_014de31d7ac8c57c, []int{13} return fileDescriptor_014de31d7ac8c57c, []int{14}
} }
func (m *TokensResponse) XXX_Unmarshal(b []byte) error { func (m *TokensResponse) XXX_Unmarshal(b []byte) error {
@ -1160,7 +1211,7 @@ func (m *LsatToken) Reset() { *m = LsatToken{} }
func (m *LsatToken) String() string { return proto.CompactTextString(m) } func (m *LsatToken) String() string { return proto.CompactTextString(m) }
func (*LsatToken) ProtoMessage() {} func (*LsatToken) ProtoMessage() {}
func (*LsatToken) Descriptor() ([]byte, []int) { func (*LsatToken) Descriptor() ([]byte, []int) {
return fileDescriptor_014de31d7ac8c57c, []int{14} return fileDescriptor_014de31d7ac8c57c, []int{15}
} }
func (m *LsatToken) XXX_Unmarshal(b []byte) error { func (m *LsatToken) XXX_Unmarshal(b []byte) error {
@ -1249,7 +1300,8 @@ func init() {
proto.RegisterType((*ListSwapsResponse)(nil), "looprpc.ListSwapsResponse") proto.RegisterType((*ListSwapsResponse)(nil), "looprpc.ListSwapsResponse")
proto.RegisterType((*SwapInfoRequest)(nil), "looprpc.SwapInfoRequest") proto.RegisterType((*SwapInfoRequest)(nil), "looprpc.SwapInfoRequest")
proto.RegisterType((*TermsRequest)(nil), "looprpc.TermsRequest") proto.RegisterType((*TermsRequest)(nil), "looprpc.TermsRequest")
proto.RegisterType((*TermsResponse)(nil), "looprpc.TermsResponse") proto.RegisterType((*InTermsResponse)(nil), "looprpc.InTermsResponse")
proto.RegisterType((*OutTermsResponse)(nil), "looprpc.OutTermsResponse")
proto.RegisterType((*QuoteRequest)(nil), "looprpc.QuoteRequest") proto.RegisterType((*QuoteRequest)(nil), "looprpc.QuoteRequest")
proto.RegisterType((*QuoteResponse)(nil), "looprpc.QuoteResponse") proto.RegisterType((*QuoteResponse)(nil), "looprpc.QuoteResponse")
proto.RegisterType((*TokensRequest)(nil), "looprpc.TokensRequest") proto.RegisterType((*TokensRequest)(nil), "looprpc.TokensRequest")
@ -1260,104 +1312,106 @@ func init() {
func init() { proto.RegisterFile("client.proto", fileDescriptor_014de31d7ac8c57c) } func init() { proto.RegisterFile("client.proto", fileDescriptor_014de31d7ac8c57c) }
var fileDescriptor_014de31d7ac8c57c = []byte{ var fileDescriptor_014de31d7ac8c57c = []byte{
// 1549 bytes of a gzipped FileDescriptorProto // 1570 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0xcd, 0x72, 0xdb, 0xb6, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0xcd, 0x6e, 0xdb, 0xca,
0x16, 0x0e, 0xf5, 0xaf, 0x23, 0x8a, 0xa2, 0xe0, 0xc4, 0x96, 0x75, 0x6f, 0x26, 0x0a, 0xef, 0x4d, 0x15, 0x0e, 0xf5, 0xaf, 0x23, 0x8a, 0xa2, 0xc6, 0x89, 0x2d, 0xab, 0x0d, 0xa2, 0xb0, 0x4d, 0xab,
0xab, 0x78, 0x32, 0x56, 0xe3, 0xac, 0x9a, 0xe9, 0x74, 0xc6, 0x91, 0x95, 0x58, 0x1e, 0xff, 0xa8, 0x18, 0x81, 0xd5, 0x38, 0xab, 0x06, 0x45, 0x01, 0x47, 0x56, 0x62, 0x19, 0xb6, 0xa5, 0x52, 0x72,
0x94, 0x9c, 0x99, 0x64, 0xc3, 0xc2, 0x22, 0x6c, 0x71, 0x2a, 0x12, 0x0c, 0x01, 0xc5, 0xf6, 0x64, 0x80, 0x16, 0x05, 0xd8, 0xb1, 0x38, 0xb6, 0x88, 0x8a, 0x1c, 0x86, 0x33, 0x8a, 0x6d, 0x04, 0x45,
0xb2, 0xe9, 0x2b, 0xf4, 0x0d, 0xfa, 0x06, 0x5d, 0xf7, 0x0d, 0xba, 0xeb, 0xf4, 0x01, 0xba, 0xe9, 0x8b, 0xbe, 0x42, 0xdf, 0xa0, 0x6f, 0xd0, 0x75, 0xdf, 0xa0, 0xbb, 0xa2, 0x0f, 0xd0, 0xcd, 0xdd,
0xa6, 0xfb, 0x3e, 0x40, 0x07, 0x00, 0x45, 0x51, 0xfe, 0xc9, 0x22, 0x3b, 0xf1, 0xc3, 0x87, 0x0f, 0xdc, 0x47, 0xb8, 0xbb, 0x8b, 0x99, 0xa1, 0x28, 0x4a, 0x96, 0xb3, 0xb8, 0x9b, 0xbb, 0x13, 0xbf,
0x07, 0xe7, 0x1c, 0x7c, 0x80, 0x40, 0x1f, 0x4f, 0x3d, 0x12, 0xf0, 0xcd, 0x30, 0xa2, 0x9c, 0xa2, 0xf9, 0xe6, 0x9b, 0x33, 0xe7, 0x9c, 0xf9, 0x66, 0x04, 0xfa, 0x64, 0xe6, 0x91, 0x80, 0xef, 0x87,
0xe2, 0x94, 0xd2, 0x30, 0x0a, 0xc7, 0xcd, 0xff, 0x9e, 0x51, 0x7a, 0x36, 0x25, 0x1d, 0x1c, 0x7a, 0x11, 0xe5, 0x14, 0x15, 0x67, 0x94, 0x86, 0x51, 0x38, 0x69, 0xfe, 0xf4, 0x9a, 0xd2, 0xeb, 0x19,
0x1d, 0x1c, 0x04, 0x94, 0x63, 0xee, 0xd1, 0x80, 0x29, 0x9a, 0xf5, 0x5b, 0x16, 0x8c, 0x7d, 0x4a, 0xe9, 0xe0, 0xd0, 0xeb, 0xe0, 0x20, 0xa0, 0x1c, 0x73, 0x8f, 0x06, 0x4c, 0xd1, 0xac, 0xff, 0x64,
0xc3, 0xa3, 0x19, 0xb7, 0xc9, 0xbb, 0x19, 0x61, 0x1c, 0x99, 0x90, 0xc5, 0x3e, 0x6f, 0x68, 0x2d, 0xc1, 0x38, 0xa5, 0x34, 0x1c, 0xcc, 0xb9, 0x4d, 0x3e, 0xcd, 0x09, 0xe3, 0xc8, 0x84, 0x2c, 0xf6,
0xad, 0x9d, 0xb5, 0xc5, 0x4f, 0x84, 0x20, 0xe7, 0x12, 0xc6, 0x1b, 0x99, 0x96, 0xd6, 0x2e, 0xdb, 0x79, 0x43, 0x6b, 0x69, 0xed, 0xac, 0x2d, 0x7e, 0x22, 0x04, 0x39, 0x97, 0x30, 0xde, 0xc8, 0xb4,
0xf2, 0x37, 0xea, 0xc0, 0x5d, 0x1f, 0x5f, 0x38, 0xec, 0x1c, 0x87, 0x4e, 0x44, 0x67, 0xdc, 0x0b, 0xb4, 0x76, 0xd9, 0x96, 0xbf, 0x51, 0x07, 0x1e, 0xfb, 0xf8, 0xd6, 0x61, 0x37, 0x38, 0x74, 0x22,
0xce, 0x9c, 0x53, 0x42, 0x1a, 0x59, 0x39, 0xad, 0xee, 0xe3, 0x8b, 0xe1, 0x39, 0x0e, 0x6d, 0x35, 0x3a, 0xe7, 0x5e, 0x70, 0xed, 0x5c, 0x11, 0xd2, 0xc8, 0xca, 0x69, 0x75, 0x1f, 0xdf, 0x8e, 0x6e,
0xf2, 0x92, 0x10, 0xf4, 0x0c, 0x56, 0xc5, 0x84, 0x30, 0x22, 0x21, 0xbe, 0x5c, 0x9a, 0x92, 0x93, 0x70, 0x68, 0xab, 0x91, 0xf7, 0x84, 0xa0, 0x37, 0xb0, 0x2d, 0x26, 0x84, 0x11, 0x09, 0xf1, 0xdd,
0x53, 0x56, 0x7c, 0x7c, 0x31, 0x90, 0x83, 0xa9, 0x49, 0x2d, 0xd0, 0x93, 0x55, 0x04, 0x35, 0x2f, 0xca, 0x94, 0x9c, 0x9c, 0xb2, 0xe5, 0xe3, 0xdb, 0xa1, 0x1c, 0x4c, 0x4d, 0x6a, 0x81, 0x9e, 0xac,
0xa9, 0x10, 0xab, 0x0b, 0xc6, 0xff, 0xc1, 0x48, 0xc9, 0x8a, 0xc0, 0x0b, 0x92, 0xa3, 0x27, 0x72, 0x22, 0xa8, 0x79, 0x49, 0x85, 0x58, 0x5d, 0x30, 0x7e, 0x0e, 0x46, 0x4a, 0x56, 0x04, 0x5e, 0x90,
0xdb, 0x3e, 0x47, 0x16, 0x54, 0x05, 0xcb, 0xf7, 0x02, 0x12, 0x49, 0xa1, 0xa2, 0x24, 0x55, 0x7c, 0x1c, 0x3d, 0x91, 0x3b, 0xf4, 0x39, 0xb2, 0xa0, 0x2a, 0x58, 0xbe, 0x17, 0x90, 0x48, 0x0a, 0x15,
0x7c, 0x71, 0x20, 0x30, 0xa1, 0xf4, 0x04, 0x4c, 0x91, 0x33, 0x87, 0xce, 0xb8, 0x33, 0x9e, 0xe0, 0x25, 0xa9, 0xe2, 0xe3, 0xdb, 0x33, 0x81, 0x09, 0xa5, 0x57, 0x60, 0x8a, 0x9c, 0x39, 0x74, 0xce,
0x20, 0x20, 0xd3, 0x46, 0xa9, 0xa5, 0xb5, 0x73, 0x2f, 0x32, 0x0d, 0xcd, 0x36, 0xa6, 0x2a, 0x4b, 0x9d, 0xc9, 0x14, 0x07, 0x01, 0x99, 0x35, 0x4a, 0x2d, 0xad, 0x9d, 0x7b, 0x97, 0x69, 0x68, 0xb6,
0x5d, 0x35, 0x82, 0x36, 0xa0, 0x4e, 0x67, 0xfc, 0x8c, 0x8a, 0x4d, 0x08, 0xb6, 0xc3, 0x08, 0x6f, 0x31, 0x53, 0x59, 0xea, 0xaa, 0x11, 0xb4, 0x07, 0x75, 0x3a, 0xe7, 0xd7, 0x54, 0x6c, 0x42, 0xb0,
0x54, 0x5a, 0xd9, 0x76, 0xce, 0xae, 0xcd, 0x07, 0x04, 0x77, 0x48, 0xb8, 0xe0, 0xb2, 0x73, 0x42, 0x1d, 0x46, 0x78, 0xa3, 0xd2, 0xca, 0xb6, 0x73, 0x76, 0x6d, 0x31, 0x20, 0xb8, 0x23, 0xc2, 0x05,
0x42, 0x67, 0x4c, 0x83, 0x53, 0x87, 0xe3, 0xe8, 0x8c, 0xf0, 0x46, 0xb9, 0xa5, 0xb5, 0xf3, 0x76, 0x97, 0xdd, 0x10, 0x12, 0x3a, 0x13, 0x1a, 0x5c, 0x39, 0x1c, 0x47, 0xd7, 0x84, 0x37, 0xca, 0x2d,
0x4d, 0x0e, 0x74, 0x69, 0x70, 0x3a, 0x92, 0x30, 0x7a, 0x0e, 0xeb, 0x72, 0xb7, 0xe1, 0xec, 0x64, 0xad, 0x9d, 0xb7, 0x6b, 0x72, 0xa0, 0x4b, 0x83, 0xab, 0xb1, 0x84, 0xd1, 0x5b, 0xd8, 0x95, 0xbb,
0xea, 0x8d, 0x65, 0xad, 0x1c, 0x97, 0x60, 0x77, 0xea, 0x05, 0xa4, 0x01, 0x22, 0x1c, 0x7b, 0x4d, 0x0d, 0xe7, 0x97, 0x33, 0x6f, 0x22, 0x6b, 0xe5, 0xb8, 0x04, 0xbb, 0x33, 0x2f, 0x20, 0x0d, 0x10,
0x10, 0x06, 0x8b, 0xf1, 0x9d, 0x78, 0xd8, 0xfa, 0x5d, 0x83, 0xaa, 0x28, 0x66, 0x3f, 0xb8, 0xbd, 0xe1, 0xd8, 0x3b, 0x82, 0x30, 0x5c, 0x8e, 0x1f, 0xc5, 0xc3, 0xd6, 0x7f, 0x35, 0xa8, 0x8a, 0x62,
0x96, 0x57, 0x33, 0x9a, 0xb9, 0x96, 0xd1, 0x6b, 0xb9, 0xca, 0x5e, 0xcf, 0xd5, 0x3a, 0x94, 0xa6, 0xf6, 0x83, 0x87, 0x6b, 0xb9, 0x9e, 0xd1, 0xcc, 0xbd, 0x8c, 0xde, 0xcb, 0x55, 0xf6, 0x7e, 0xae,
0x98, 0x71, 0x67, 0x42, 0x43, 0x59, 0x3e, 0xdd, 0x2e, 0x8a, 0xef, 0x5d, 0x1a, 0xa2, 0xff, 0x41, 0x76, 0xa1, 0x34, 0xc3, 0x8c, 0x3b, 0x53, 0x1a, 0xca, 0xf2, 0xe9, 0x76, 0x51, 0x7c, 0x1f, 0xd3,
0x95, 0x5c, 0x70, 0x12, 0x05, 0x78, 0xea, 0x4c, 0xf8, 0x74, 0x2c, 0x6b, 0x56, 0xb2, 0xf5, 0x39, 0x10, 0xfd, 0x0c, 0xaa, 0xe4, 0x96, 0x93, 0x28, 0xc0, 0x33, 0x67, 0xca, 0x67, 0x13, 0x59, 0xb3,
0xb8, 0xcb, 0xa7, 0x63, 0xd4, 0x06, 0x53, 0x8c, 0x2d, 0x25, 0xa4, 0x20, 0x13, 0x62, 0x08, 0x7c, 0x92, 0xad, 0x2f, 0xc0, 0x63, 0x3e, 0x9b, 0xa0, 0x36, 0x98, 0x62, 0x6c, 0x25, 0x21, 0x05, 0x99,
0x91, 0x0f, 0xeb, 0x6f, 0x0d, 0x74, 0xd9, 0x49, 0x84, 0x85, 0x34, 0x60, 0x04, 0x21, 0xc8, 0x78, 0x10, 0x43, 0xe0, 0xcb, 0x7c, 0x58, 0xdf, 0x6a, 0xa0, 0xcb, 0x4e, 0x22, 0x2c, 0xa4, 0x01, 0x23,
0xae, 0xdc, 0x51, 0x59, 0x16, 0x26, 0xe3, 0xb9, 0x22, 0x1c, 0xcf, 0x75, 0x4e, 0x2e, 0x39, 0x61, 0x08, 0x41, 0xc6, 0x73, 0xe5, 0x8e, 0xca, 0xb2, 0x30, 0x19, 0xcf, 0x15, 0xe1, 0x78, 0xae, 0x73,
0x32, 0x5a, 0xdd, 0x2e, 0x7a, 0xee, 0x0b, 0xf1, 0x89, 0x1e, 0x81, 0x2e, 0x57, 0xc2, 0xae, 0x1b, 0x79, 0xc7, 0x09, 0x93, 0xd1, 0xea, 0x76, 0xd1, 0x73, 0xdf, 0x89, 0x4f, 0xf4, 0x02, 0x74, 0xb9,
0x11, 0xc6, 0x54, 0x0f, 0xcb, 0x89, 0x15, 0x81, 0x6f, 0x2b, 0x18, 0x6d, 0xc2, 0x4a, 0x9a, 0xe6, 0x12, 0x76, 0xdd, 0x88, 0x30, 0xa6, 0x7a, 0x58, 0x4e, 0xac, 0x08, 0xfc, 0x50, 0xc1, 0x68, 0x1f,
0x04, 0xe1, 0xd6, 0x39, 0x9b, 0xc8, 0xbd, 0x95, 0xed, 0x7a, 0x8a, 0x79, 0x28, 0x07, 0xd0, 0x13, 0xb6, 0xd2, 0x34, 0x27, 0x08, 0x0f, 0x6e, 0xd8, 0x54, 0xee, 0xad, 0x6c, 0xd7, 0x53, 0xcc, 0x73,
0x40, 0x4b, 0x7c, 0x45, 0xcf, 0x4b, 0xba, 0x99, 0xa2, 0x0f, 0x24, 0xfb, 0x11, 0x18, 0x8c, 0x44, 0x39, 0x80, 0x5e, 0x01, 0x5a, 0xe1, 0x2b, 0x7a, 0x5e, 0xd2, 0xcd, 0x14, 0x7d, 0x28, 0xd9, 0x2f,
0xef, 0x49, 0xe4, 0xf8, 0x84, 0x31, 0x7c, 0x46, 0xe4, 0x66, 0xcb, 0x76, 0x55, 0xa1, 0x07, 0x0a, 0xc0, 0x60, 0x24, 0xfa, 0x4c, 0x22, 0xc7, 0x27, 0x8c, 0xe1, 0x6b, 0x22, 0x37, 0x5b, 0xb6, 0xab,
0xb4, 0x4c, 0x30, 0x0e, 0x68, 0xe0, 0x71, 0x1a, 0xc5, 0xf5, 0xb3, 0xfe, 0xcc, 0x02, 0x88, 0xdd, 0x0a, 0x3d, 0x53, 0xa0, 0x65, 0x82, 0x71, 0x46, 0x03, 0x8f, 0xd3, 0x28, 0xae, 0x9f, 0xf5, 0xff,
0x0f, 0x39, 0xe6, 0x33, 0x76, 0xe3, 0xd1, 0x14, 0xd9, 0xc8, 0xdc, 0x9a, 0x8d, 0xca, 0xd5, 0x6c, 0x2c, 0x80, 0xd8, 0xfd, 0x88, 0x63, 0x3e, 0x67, 0x1b, 0x8f, 0xa6, 0xc8, 0x46, 0xe6, 0xc1, 0x6c,
0xe4, 0xf8, 0x65, 0xa8, 0x4a, 0x6a, 0x6c, 0xd5, 0x37, 0x63, 0x93, 0xd8, 0x14, 0x6b, 0x8c, 0x2e, 0x54, 0xd6, 0xb3, 0x91, 0xe3, 0x77, 0xa1, 0x2a, 0xa9, 0x71, 0x50, 0xdf, 0x8f, 0x4d, 0x62, 0x5f,
0x43, 0x62, 0xcb, 0x61, 0xd4, 0x86, 0x3c, 0xe3, 0x98, 0xab, 0xa3, 0x69, 0x6c, 0xa1, 0x25, 0x9e, 0xac, 0x31, 0xbe, 0x0b, 0x89, 0x2d, 0x87, 0x51, 0x1b, 0xf2, 0x8c, 0x63, 0xae, 0x8e, 0xa6, 0x71,
0x88, 0x85, 0xd8, 0x8a, 0x80, 0xbe, 0x84, 0x9a, 0x17, 0x78, 0xdc, 0x53, 0x8d, 0xca, 0x3d, 0x7f, 0x80, 0x56, 0x78, 0x22, 0x16, 0x62, 0x2b, 0x02, 0xfa, 0x25, 0xd4, 0xbc, 0xc0, 0xe3, 0x9e, 0x6a,
0x7e, 0x46, 0x8d, 0x05, 0x3c, 0xf2, 0x7c, 0x21, 0x69, 0xca, 0x8e, 0x99, 0x85, 0x2e, 0xe6, 0x44, 0x54, 0xee, 0xf9, 0x8b, 0x33, 0x6a, 0x2c, 0xe1, 0xb1, 0xe7, 0x0b, 0x49, 0x53, 0x76, 0xcc, 0x3c,
0x31, 0xd5, 0x49, 0x35, 0x04, 0x7e, 0x2c, 0x61, 0xc9, 0xbc, 0x5a, 0xb1, 0xe2, 0xcd, 0x15, 0xbb, 0x74, 0x31, 0x27, 0x8a, 0xa9, 0x4e, 0xaa, 0x21, 0xf0, 0x0b, 0x09, 0x4b, 0xe6, 0x7a, 0xc5, 0x8a,
0xb9, 0x02, 0xfa, 0x2d, 0x15, 0xb8, 0xa5, 0xbe, 0xd5, 0xdb, 0xea, 0xfb, 0x00, 0x2a, 0x63, 0xca, 0x9b, 0x2b, 0xb6, 0xb9, 0x02, 0xfa, 0x03, 0x15, 0x78, 0xa0, 0xbe, 0xd5, 0x87, 0xea, 0xfb, 0x0c,
0xb8, 0xa3, 0x0a, 0x24, 0x7d, 0x20, 0x6b, 0x83, 0x80, 0x86, 0x12, 0x41, 0x0f, 0x41, 0x97, 0x04, 0x2a, 0x13, 0xca, 0xb8, 0xa3, 0x0a, 0x24, 0x7d, 0x20, 0x6b, 0x83, 0x80, 0x46, 0x12, 0x41, 0xcf,
0x1a, 0x8c, 0x27, 0xd8, 0x0b, 0xe4, 0x71, 0xce, 0xda, 0x72, 0xd2, 0x91, 0x82, 0xc4, 0x49, 0x50, 0x41, 0x97, 0x04, 0x1a, 0x4c, 0xa6, 0xd8, 0x0b, 0xe4, 0x71, 0xce, 0xda, 0x72, 0xd2, 0x40, 0x41,
0x94, 0xd3, 0x53, 0xc5, 0x01, 0xe5, 0x4c, 0x92, 0x13, 0x63, 0x16, 0x02, 0x73, 0xdf, 0x63, 0x5c, 0xe2, 0x24, 0x28, 0xca, 0xd5, 0x95, 0xe2, 0x80, 0x72, 0x26, 0xc9, 0x89, 0x31, 0x0b, 0x81, 0x79,
0x24, 0x96, 0xcd, 0xab, 0xfe, 0x2d, 0xd4, 0x53, 0x58, 0xdc, 0xf7, 0x8f, 0x21, 0x2f, 0x0e, 0x2d, 0xea, 0x31, 0x2e, 0x12, 0xcb, 0x16, 0x55, 0xff, 0x2d, 0xd4, 0x53, 0x58, 0xdc, 0xf7, 0x2f, 0x21,
0x6b, 0x68, 0xad, 0x6c, 0xbb, 0xb2, 0xb5, 0x72, 0xad, 0x26, 0x33, 0x66, 0x2b, 0x86, 0xf5, 0x10, 0x2f, 0x0e, 0x2d, 0x6b, 0x68, 0xad, 0x6c, 0xbb, 0x72, 0xb0, 0x75, 0xaf, 0x26, 0x73, 0x66, 0x2b,
0x6a, 0x02, 0xec, 0x07, 0xa7, 0x74, 0x6e, 0x04, 0x46, 0x72, 0x6a, 0x74, 0xd1, 0x23, 0x96, 0x01, 0x86, 0xf5, 0x1c, 0x6a, 0x02, 0xec, 0x07, 0x57, 0x74, 0x61, 0x04, 0x46, 0x72, 0x6a, 0x74, 0xd1,
0xfa, 0x88, 0x44, 0x7e, 0xb2, 0xe4, 0x47, 0xa8, 0xc6, 0xdf, 0xf1, 0x72, 0x5f, 0x40, 0xcd, 0xf7, 0x23, 0x96, 0x01, 0xfa, 0x98, 0x44, 0x7e, 0xb2, 0xe4, 0x5f, 0xa1, 0xd6, 0x0f, 0x62, 0x24, 0x5e,
0x02, 0xe5, 0x13, 0xd8, 0xa7, 0xb3, 0x80, 0xc7, 0x85, 0xad, 0xfa, 0x5e, 0x20, 0xd4, 0xb7, 0x25, 0xf0, 0x17, 0x50, 0xf3, 0xbd, 0x40, 0x39, 0x05, 0xf6, 0xe9, 0x3c, 0xe0, 0x71, 0x69, 0xab, 0xbe,
0x28, 0x79, 0x73, 0x3f, 0x89, 0x79, 0x85, 0x98, 0xa7, 0x2c, 0x45, 0xf1, 0xf6, 0x72, 0x25, 0xcd, 0x17, 0x08, 0xfd, 0x43, 0x09, 0x4a, 0xde, 0xc2, 0x51, 0x62, 0x5e, 0x21, 0xe6, 0x29, 0x53, 0x51,
0xcc, 0xec, 0xe5, 0x4a, 0x19, 0x33, 0xbb, 0x97, 0x2b, 0x65, 0xcd, 0xdc, 0x5e, 0xae, 0x94, 0x33, 0xbc, 0x93, 0x5c, 0x49, 0x33, 0x33, 0x27, 0xb9, 0x52, 0xc6, 0xcc, 0x9e, 0xe4, 0x4a, 0x59, 0x33,
0xf3, 0x7b, 0xb9, 0x52, 0xd1, 0x2c, 0x59, 0x3f, 0x6b, 0xa0, 0x7f, 0x37, 0xa3, 0x9c, 0xdc, 0x6e, 0x77, 0x92, 0x2b, 0xe5, 0xcc, 0xfc, 0x49, 0xae, 0x54, 0x34, 0x4b, 0xd6, 0xdf, 0x34, 0x30, 0x07,
0x5c, 0xb2, 0x22, 0x0b, 0xb7, 0xc8, 0x48, 0xb7, 0x80, 0xf1, 0xc2, 0x39, 0xaf, 0x19, 0x4f, 0xf6, 0x73, 0xfe, 0x63, 0x86, 0xf0, 0x4f, 0x0d, 0xf4, 0xdf, 0xcd, 0x29, 0x27, 0x0f, 0xbb, 0xa7, 0x6c,
0x06, 0xe3, 0xf9, 0xa4, 0xbd, 0xe6, 0x3e, 0x6d, 0xaf, 0xbf, 0x68, 0x50, 0x8d, 0x83, 0x8c, 0x93, 0x8b, 0xa5, 0x65, 0x65, 0xa4, 0x65, 0xc1, 0x64, 0x69, 0xdf, 0xf7, 0xdc, 0x2f, 0xbb, 0xc1, 0xfd,
0xb4, 0x0e, 0xa5, 0xc4, 0x48, 0x55, 0xa8, 0x45, 0x16, 0xbb, 0xe8, 0x7d, 0x80, 0xd4, 0x9d, 0xa4, 0xbe, 0xea, 0xf1, 0xb9, 0xaf, 0x7b, 0xfc, 0xbf, 0x34, 0xa8, 0xc6, 0x41, 0xc6, 0x49, 0xda, 0x85,
0x5c, 0xb6, 0x1c, 0x26, 0x17, 0xd2, 0x7f, 0xa0, 0x7c, 0xd5, 0x60, 0x4b, 0xfe, 0xdc, 0x5d, 0xe5, 0x52, 0xe2, 0xe6, 0x2a, 0xd4, 0x22, 0x8b, 0xad, 0xfc, 0x29, 0x40, 0xea, 0x62, 0x54, 0x56, 0x5f,
0x7d, 0x21, 0x82, 0xc4, 0x97, 0x3e, 0x09, 0xb8, 0x23, 0x2f, 0x5f, 0x65, 0xb3, 0x35, 0x19, 0x9c, 0x0e, 0x93, 0x5b, 0xf1, 0x27, 0x50, 0x5e, 0x77, 0xf9, 0x92, 0xbf, 0xb0, 0x78, 0x79, 0x69, 0x89,
0xc2, 0x77, 0x44, 0xa2, 0xee, 0x03, 0x8c, 0xa7, 0xfc, 0xbd, 0xe3, 0x92, 0x29, 0xc7, 0xb2, 0x44, 0x20, 0xf1, 0x9d, 0x4f, 0x02, 0xee, 0xc8, 0x17, 0x80, 0xf2, 0xfa, 0x9a, 0x0c, 0x4e, 0xe1, 0x47,
0x79, 0xbb, 0x2c, 0x90, 0x1d, 0x01, 0x58, 0x35, 0xa8, 0x8e, 0xe8, 0x0f, 0x24, 0x48, 0x0a, 0xfd, 0x22, 0x51, 0x4f, 0x01, 0x26, 0x33, 0xfe, 0xd9, 0x71, 0xc9, 0x8c, 0x63, 0x59, 0xa2, 0xbc, 0x5d,
0x0d, 0x18, 0x73, 0x20, 0xde, 0xc4, 0x06, 0x14, 0xb8, 0x44, 0xe2, 0xce, 0x5a, 0x9c, 0xf6, 0x7d, 0x16, 0xc8, 0x91, 0x00, 0xac, 0x1a, 0x54, 0xc7, 0xf4, 0xcf, 0x24, 0x48, 0xba, 0xed, 0x37, 0x60,
0x86, 0xb9, 0x24, 0xdb, 0x31, 0xc3, 0xfa, 0x35, 0x03, 0xe5, 0x04, 0x15, 0x19, 0x3f, 0xc1, 0x8c, 0x2c, 0x80, 0x78, 0x13, 0x7b, 0x50, 0xe0, 0x12, 0x89, 0xdb, 0x7b, 0x69, 0x39, 0xa7, 0x0c, 0x73,
0x38, 0x3e, 0x1e, 0xe3, 0x88, 0xd2, 0x20, 0xee, 0x2f, 0x5d, 0x80, 0x07, 0x31, 0x26, 0x0e, 0xca, 0x49, 0xb6, 0x63, 0x86, 0xf5, 0xef, 0x0c, 0x94, 0x13, 0x54, 0x64, 0xfc, 0x12, 0x33, 0xe2, 0xf8,
0x7c, 0x1f, 0x13, 0xcc, 0x26, 0x32, 0x15, 0xba, 0x5d, 0x89, 0xb1, 0x5d, 0xcc, 0x26, 0xe8, 0x31, 0x78, 0x82, 0x23, 0x4a, 0x83, 0xb8, 0xc9, 0x75, 0x01, 0x9e, 0xc5, 0x98, 0x38, 0xad, 0x8b, 0x7d,
0x98, 0x73, 0x4a, 0x18, 0x11, 0xcf, 0x17, 0x06, 0xa9, 0x6c, 0xbc, 0x16, 0xe3, 0x83, 0x18, 0x16, 0x4c, 0x31, 0x9b, 0xca, 0x54, 0xe8, 0x76, 0x25, 0xc6, 0x8e, 0x31, 0x9b, 0xa2, 0x97, 0x60, 0x2e,
0x36, 0xa2, 0xba, 0xcc, 0x09, 0xb1, 0xe7, 0x3a, 0x3e, 0xc3, 0x3c, 0x7e, 0x3f, 0x18, 0x0a, 0x1f, 0x28, 0x61, 0x44, 0x3c, 0x5f, 0xb8, 0xb4, 0xba, 0x4b, 0x6a, 0x31, 0x3e, 0x8c, 0x61, 0xe1, 0x65,
0x60, 0xcf, 0x3d, 0x60, 0x98, 0xa3, 0xa7, 0x70, 0x2f, 0xf5, 0xc8, 0x48, 0xd1, 0x55, 0x1b, 0xa3, 0xaa, 0xcb, 0x9c, 0x10, 0x7b, 0xae, 0xe3, 0x33, 0xcc, 0xe3, 0x47, 0x8c, 0xa1, 0xf0, 0x21, 0xf6,
0x28, 0x79, 0x65, 0x24, 0x53, 0x1e, 0x82, 0x2e, 0x7c, 0xc9, 0x19, 0x47, 0x04, 0x73, 0xe2, 0xc6, 0xdc, 0x33, 0x86, 0x39, 0x7a, 0x0d, 0x4f, 0x52, 0x2f, 0x9d, 0x14, 0x5d, 0xb5, 0x31, 0x8a, 0x92,
0x8d, 0x5c, 0x11, 0x58, 0x57, 0x41, 0xa8, 0x01, 0x45, 0x72, 0x11, 0x7a, 0x11, 0x71, 0xa5, 0x2f, 0xa7, 0x4e, 0x32, 0xe5, 0x39, 0xe8, 0xc2, 0x1c, 0x9d, 0x49, 0x44, 0x30, 0x27, 0x6e, 0xdc, 0xc8,
0x95, 0xec, 0xf9, 0xa7, 0x98, 0xcc, 0x38, 0x8d, 0xf0, 0x19, 0x71, 0x02, 0xec, 0x13, 0x69, 0x19, 0x15, 0x81, 0x75, 0x15, 0x84, 0x1a, 0x50, 0x24, 0xb7, 0xa1, 0x17, 0x11, 0x57, 0x9a, 0x63, 0xc9,
0x65, 0xbb, 0x12, 0x63, 0x87, 0xd8, 0x27, 0x1b, 0x8f, 0xa0, 0x34, 0x37, 0x5a, 0xa4, 0x43, 0x69, 0x5e, 0x7c, 0x8a, 0xc9, 0x8c, 0xd3, 0x08, 0x5f, 0x13, 0x27, 0xc0, 0x3e, 0x91, 0xbe, 0x55, 0xb6,
0xff, 0xe8, 0x68, 0xe0, 0x1c, 0x1d, 0x8f, 0xcc, 0x3b, 0xa8, 0x02, 0x45, 0xf9, 0xd5, 0x3f, 0x34, 0x2b, 0x31, 0x76, 0x8e, 0x7d, 0xb2, 0xf7, 0x02, 0x4a, 0x0b, 0xb7, 0x47, 0x3a, 0x94, 0x4e, 0x07,
0xb5, 0x0d, 0x06, 0xe5, 0xc4, 0x67, 0x51, 0x15, 0xca, 0xfd, 0xc3, 0xfe, 0xa8, 0xbf, 0x3d, 0xea, 0x83, 0xa1, 0x33, 0xb8, 0x18, 0x9b, 0x8f, 0x50, 0x05, 0x8a, 0xf2, 0xab, 0x7f, 0x6e, 0x6a, 0x7b,
0xed, 0x98, 0x77, 0xd0, 0x3d, 0xa8, 0x0f, 0xec, 0x5e, 0xff, 0x60, 0xfb, 0x55, 0xcf, 0xb1, 0x7b, 0x0c, 0xca, 0x89, 0xd9, 0xa3, 0x2a, 0x94, 0xfb, 0xe7, 0xfd, 0x71, 0xff, 0x70, 0xdc, 0x3b, 0x32,
0xaf, 0x7b, 0xdb, 0xfb, 0xbd, 0x1d, 0x53, 0x43, 0x08, 0x8c, 0xdd, 0xd1, 0x7e, 0xd7, 0x19, 0x1c, 0x1f, 0xa1, 0x27, 0x50, 0x1f, 0xda, 0xbd, 0xfe, 0xd9, 0xe1, 0x87, 0x9e, 0x63, 0xf7, 0x3e, 0xf6,
0xbf, 0xd8, 0xef, 0x0f, 0x77, 0x7b, 0x3b, 0x66, 0x46, 0x68, 0x0e, 0x8f, 0xbb, 0xdd, 0xde, 0x70, 0x0e, 0x4f, 0x7b, 0x47, 0xa6, 0x86, 0x10, 0x18, 0xc7, 0xe3, 0xd3, 0xae, 0x33, 0xbc, 0x78, 0x77,
0x68, 0x66, 0x11, 0x40, 0xe1, 0xe5, 0x76, 0x5f, 0x90, 0x73, 0x68, 0x05, 0x6a, 0xfd, 0xc3, 0xd7, 0xda, 0x1f, 0x1d, 0xf7, 0x8e, 0xcc, 0x8c, 0xd0, 0x1c, 0x5d, 0x74, 0xbb, 0xbd, 0xd1, 0xc8, 0xcc,
0x47, 0xfd, 0x6e, 0xcf, 0x19, 0xf6, 0x46, 0x23, 0x01, 0xe6, 0xb7, 0xfe, 0x29, 0xa8, 0x9b, 0xa6, 0x22, 0x80, 0xc2, 0xfb, 0xc3, 0xbe, 0x20, 0xe7, 0xd0, 0x16, 0xd4, 0xfa, 0xe7, 0x1f, 0x07, 0xfd,
0x2b, 0x1f, 0x91, 0xc8, 0x86, 0x62, 0xfc, 0x2c, 0x44, 0x6b, 0x8b, 0x7e, 0x58, 0x7a, 0x28, 0x36, 0x6e, 0xcf, 0x19, 0xf5, 0xc6, 0x63, 0x01, 0xe6, 0x0f, 0xbe, 0x2b, 0xa8, 0xeb, 0xae, 0x2b, 0x5f,
0xef, 0x2d, 0x59, 0xd0, 0xbc, 0x9f, 0xac, 0xb5, 0x1f, 0xff, 0xf8, 0xeb, 0xa7, 0x4c, 0xdd, 0xd2, 0xb2, 0xc8, 0x86, 0x62, 0xfc, 0x36, 0x45, 0x3b, 0xcb, 0x7e, 0x58, 0x79, 0xad, 0x36, 0x9f, 0xac,
0x3b, 0xef, 0x9f, 0x76, 0x04, 0xa3, 0x43, 0x67, 0xfc, 0xb9, 0xb6, 0x81, 0x8e, 0xa0, 0xa0, 0x5e, 0xf8, 0xe0, 0xa2, 0x9f, 0xac, 0x9d, 0xbf, 0xff, 0xef, 0x9b, 0x7f, 0x64, 0xea, 0x96, 0xde, 0xf9,
0x27, 0x68, 0x75, 0x49, 0x32, 0x79, 0xae, 0xdc, 0xa6, 0xb8, 0x2a, 0x15, 0x4d, 0xab, 0x92, 0x28, 0xfc, 0xba, 0x23, 0x18, 0x1d, 0x3a, 0xe7, 0x6f, 0xb5, 0x3d, 0x34, 0x80, 0x82, 0x7a, 0x22, 0xa1,
0x7a, 0x81, 0x10, 0xfc, 0x1a, 0x8a, 0xf1, 0x7d, 0x99, 0x0a, 0x72, 0xf9, 0x06, 0x6d, 0xde, 0xe4, 0xed, 0x15, 0xc9, 0xe4, 0xcd, 0xf4, 0x90, 0xe2, 0xb6, 0x54, 0x34, 0xad, 0x4a, 0xa2, 0xe8, 0x05,
0x93, 0x5f, 0x69, 0xe8, 0x2d, 0x94, 0x13, 0x8b, 0x45, 0xeb, 0x8b, 0x70, 0xae, 0x58, 0x71, 0xb3, 0x42, 0xf0, 0xd7, 0x50, 0x8c, 0x2f, 0xed, 0x54, 0x90, 0xab, 0xd7, 0x78, 0x73, 0x93, 0x59, 0xff,
0x79, 0xd3, 0xd0, 0x72, 0x58, 0xc8, 0x48, 0xc2, 0x92, 0xf6, 0x8b, 0x8e, 0x55, 0x99, 0x85, 0xfd, 0x4a, 0x43, 0x7f, 0x80, 0x72, 0xe2, 0xf3, 0x68, 0x77, 0x19, 0xce, 0xda, 0x7d, 0xd0, 0x6c, 0x6e,
0xa2, 0xc6, 0xd2, 0xf2, 0x29, 0x47, 0xbe, 0x31, 0x30, 0xab, 0x29, 0x25, 0xef, 0x22, 0xb4, 0x24, 0x1a, 0x5a, 0x0d, 0x0b, 0x19, 0x49, 0x58, 0xf2, 0x0e, 0x40, 0x17, 0xaa, 0xcc, 0xe2, 0x0e, 0x40,
0xd9, 0xf9, 0xe0, 0xb9, 0x1f, 0xd1, 0x1b, 0xd0, 0xe3, 0x02, 0x48, 0xa7, 0x46, 0x8b, 0x64, 0xa5, 0x8d, 0x95, 0xe5, 0x53, 0xd7, 0xc2, 0xc6, 0xc0, 0xac, 0xa6, 0x94, 0x7c, 0x8c, 0xd0, 0x8a, 0x64,
0x9d, 0xbc, 0xb9, 0x7a, 0x15, 0x8e, 0xa3, 0xbd, 0x2e, 0x4d, 0x67, 0xbc, 0xc3, 0xa5, 0x94, 0x93, 0xe7, 0x8b, 0xe7, 0xfe, 0x05, 0xfd, 0x11, 0xf4, 0xb8, 0x00, 0xd2, 0xa9, 0xd1, 0x32, 0x59, 0xe9,
0x48, 0x4b, 0x7f, 0x4b, 0x49, 0xa7, 0x4d, 0x39, 0x25, 0xbd, 0x64, 0x83, 0x56, 0x4b, 0x4a, 0x37, 0xeb, 0xa4, 0xb9, 0xdc, 0xcc, 0xba, 0xa7, 0x6f, 0x50, 0xa7, 0x73, 0xde, 0xe1, 0x52, 0xcd, 0x49,
0x51, 0x63, 0x49, 0xfa, 0x9d, 0xe0, 0x74, 0x3e, 0x60, 0x9f, 0x7f, 0x44, 0x6f, 0xc1, 0x78, 0x45, 0xd4, 0xa5, 0xc5, 0xa5, 0xd4, 0xd3, 0xbe, 0xdc, 0xdc, 0x5e, 0x87, 0x63, 0xe9, 0x96, 0x94, 0x6e,
0xb8, 0x2a, 0xf6, 0x67, 0x45, 0xbf, 0x2e, 0x97, 0x58, 0x41, 0xf5, 0x54, 0x0b, 0xc4, 0xc1, 0x7f, 0xa2, 0xc6, 0x8a, 0xf4, 0x27, 0xc1, 0xe9, 0x7c, 0xc1, 0x3e, 0x17, 0xe1, 0x1b, 0x1f, 0x08, 0x57,
0x9f, 0xd2, 0xfe, 0xac, 0xf0, 0x1f, 0x48, 0xed, 0x75, 0xb4, 0x96, 0xd6, 0x4e, 0x47, 0xff, 0x06, 0xf5, 0xfe, 0xea, 0x06, 0x96, 0x29, 0x5b, 0xbb, 0x16, 0xad, 0x5d, 0xb9, 0xc8, 0x16, 0xaa, 0xa7,
0xaa, 0x62, 0x85, 0xb9, 0xef, 0xb1, 0x54, 0xff, 0x2e, 0x99, 0x6b, 0x73, 0xed, 0x1a, 0xbe, 0x7c, 0xfa, 0x20, 0x0e, 0xff, 0x4f, 0x29, 0xf5, 0x1f, 0xb4, 0x81, 0x67, 0x52, 0x7b, 0x17, 0xed, 0xa4,
0x26, 0x50, 0x4d, 0x2e, 0xc1, 0x30, 0xef, 0x28, 0x43, 0x3d, 0x29, 0xc8, 0xbf, 0x61, 0xcf, 0xfe, 0xb5, 0xd3, 0xf1, 0xff, 0x1e, 0xaa, 0x62, 0x85, 0x85, 0xf9, 0xb1, 0x54, 0x13, 0xaf, 0x38, 0x6c,
0x0d, 0x00, 0x00, 0xff, 0xff, 0xba, 0x8f, 0xd4, 0xd8, 0xbd, 0x0d, 0x00, 0x00, 0x73, 0xe7, 0x1e, 0xbe, 0x7a, 0x30, 0x50, 0x4d, 0x2e, 0xc1, 0x30, 0xef, 0x28, 0x57, 0xbd, 0x2c,
0xc8, 0x3f, 0x84, 0x6f, 0xbe, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x3d, 0x7d, 0xf8, 0x47, 0x0e,
0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -1396,14 +1450,14 @@ type SwapClientClient interface {
SwapInfo(ctx context.Context, in *SwapInfoRequest, opts ...grpc.CallOption) (*SwapStatus, error) SwapInfo(ctx context.Context, in *SwapInfoRequest, opts ...grpc.CallOption) (*SwapStatus, error)
//* loop: `terms` //* loop: `terms`
//LoopOutTerms returns the terms that the server enforces for a loop out swap. //LoopOutTerms returns the terms that the server enforces for a loop out swap.
LoopOutTerms(ctx context.Context, in *TermsRequest, opts ...grpc.CallOption) (*TermsResponse, error) LoopOutTerms(ctx context.Context, in *TermsRequest, opts ...grpc.CallOption) (*OutTermsResponse, error)
//* loop: `quote` //* loop: `quote`
//LoopOutQuote returns a quote for a loop out swap with the provided //LoopOutQuote returns a quote for a loop out swap with the provided
//parameters. //parameters.
LoopOutQuote(ctx context.Context, in *QuoteRequest, opts ...grpc.CallOption) (*QuoteResponse, error) LoopOutQuote(ctx context.Context, in *QuoteRequest, opts ...grpc.CallOption) (*QuoteResponse, error)
//* loop: `terms` //* loop: `terms`
//GetTerms returns the terms that the server enforces for swaps. //GetTerms returns the terms that the server enforces for swaps.
GetLoopInTerms(ctx context.Context, in *TermsRequest, opts ...grpc.CallOption) (*TermsResponse, error) GetLoopInTerms(ctx context.Context, in *TermsRequest, opts ...grpc.CallOption) (*InTermsResponse, error)
//* loop: `quote` //* loop: `quote`
//GetQuote returns a quote for a swap with the provided parameters. //GetQuote returns a quote for a swap with the provided parameters.
GetLoopInQuote(ctx context.Context, in *QuoteRequest, opts ...grpc.CallOption) (*QuoteResponse, error) GetLoopInQuote(ctx context.Context, in *QuoteRequest, opts ...grpc.CallOption) (*QuoteResponse, error)
@ -1488,8 +1542,8 @@ func (c *swapClientClient) SwapInfo(ctx context.Context, in *SwapInfoRequest, op
return out, nil return out, nil
} }
func (c *swapClientClient) LoopOutTerms(ctx context.Context, in *TermsRequest, opts ...grpc.CallOption) (*TermsResponse, error) { func (c *swapClientClient) LoopOutTerms(ctx context.Context, in *TermsRequest, opts ...grpc.CallOption) (*OutTermsResponse, error) {
out := new(TermsResponse) out := new(OutTermsResponse)
err := c.cc.Invoke(ctx, "/looprpc.SwapClient/LoopOutTerms", in, out, opts...) err := c.cc.Invoke(ctx, "/looprpc.SwapClient/LoopOutTerms", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
@ -1506,8 +1560,8 @@ func (c *swapClientClient) LoopOutQuote(ctx context.Context, in *QuoteRequest, o
return out, nil return out, nil
} }
func (c *swapClientClient) GetLoopInTerms(ctx context.Context, in *TermsRequest, opts ...grpc.CallOption) (*TermsResponse, error) { func (c *swapClientClient) GetLoopInTerms(ctx context.Context, in *TermsRequest, opts ...grpc.CallOption) (*InTermsResponse, error) {
out := new(TermsResponse) out := new(InTermsResponse)
err := c.cc.Invoke(ctx, "/looprpc.SwapClient/GetLoopInTerms", in, out, opts...) err := c.cc.Invoke(ctx, "/looprpc.SwapClient/GetLoopInTerms", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
@ -1559,14 +1613,14 @@ type SwapClientServer interface {
SwapInfo(context.Context, *SwapInfoRequest) (*SwapStatus, error) SwapInfo(context.Context, *SwapInfoRequest) (*SwapStatus, error)
//* loop: `terms` //* loop: `terms`
//LoopOutTerms returns the terms that the server enforces for a loop out swap. //LoopOutTerms returns the terms that the server enforces for a loop out swap.
LoopOutTerms(context.Context, *TermsRequest) (*TermsResponse, error) LoopOutTerms(context.Context, *TermsRequest) (*OutTermsResponse, error)
//* loop: `quote` //* loop: `quote`
//LoopOutQuote returns a quote for a loop out swap with the provided //LoopOutQuote returns a quote for a loop out swap with the provided
//parameters. //parameters.
LoopOutQuote(context.Context, *QuoteRequest) (*QuoteResponse, error) LoopOutQuote(context.Context, *QuoteRequest) (*QuoteResponse, error)
//* loop: `terms` //* loop: `terms`
//GetTerms returns the terms that the server enforces for swaps. //GetTerms returns the terms that the server enforces for swaps.
GetLoopInTerms(context.Context, *TermsRequest) (*TermsResponse, error) GetLoopInTerms(context.Context, *TermsRequest) (*InTermsResponse, error)
//* loop: `quote` //* loop: `quote`
//GetQuote returns a quote for a swap with the provided parameters. //GetQuote returns a quote for a swap with the provided parameters.
GetLoopInQuote(context.Context, *QuoteRequest) (*QuoteResponse, error) GetLoopInQuote(context.Context, *QuoteRequest) (*QuoteResponse, error)
@ -1594,13 +1648,13 @@ func (*UnimplementedSwapClientServer) ListSwaps(ctx context.Context, req *ListSw
func (*UnimplementedSwapClientServer) SwapInfo(ctx context.Context, req *SwapInfoRequest) (*SwapStatus, error) { func (*UnimplementedSwapClientServer) SwapInfo(ctx context.Context, req *SwapInfoRequest) (*SwapStatus, error) {
return nil, status.Errorf(codes.Unimplemented, "method SwapInfo not implemented") return nil, status.Errorf(codes.Unimplemented, "method SwapInfo not implemented")
} }
func (*UnimplementedSwapClientServer) LoopOutTerms(ctx context.Context, req *TermsRequest) (*TermsResponse, error) { func (*UnimplementedSwapClientServer) LoopOutTerms(ctx context.Context, req *TermsRequest) (*OutTermsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method LoopOutTerms not implemented") return nil, status.Errorf(codes.Unimplemented, "method LoopOutTerms not implemented")
} }
func (*UnimplementedSwapClientServer) LoopOutQuote(ctx context.Context, req *QuoteRequest) (*QuoteResponse, error) { func (*UnimplementedSwapClientServer) LoopOutQuote(ctx context.Context, req *QuoteRequest) (*QuoteResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method LoopOutQuote not implemented") return nil, status.Errorf(codes.Unimplemented, "method LoopOutQuote not implemented")
} }
func (*UnimplementedSwapClientServer) GetLoopInTerms(ctx context.Context, req *TermsRequest) (*TermsResponse, error) { func (*UnimplementedSwapClientServer) GetLoopInTerms(ctx context.Context, req *TermsRequest) (*InTermsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetLoopInTerms not implemented") return nil, status.Errorf(codes.Unimplemented, "method GetLoopInTerms not implemented")
} }
func (*UnimplementedSwapClientServer) GetLoopInQuote(ctx context.Context, req *QuoteRequest) (*QuoteResponse, error) { func (*UnimplementedSwapClientServer) GetLoopInQuote(ctx context.Context, req *QuoteRequest) (*QuoteResponse, error) {

View File

@ -62,7 +62,7 @@ service SwapClient {
/** loop: `terms` /** loop: `terms`
LoopOutTerms returns the terms that the server enforces for a loop out swap. LoopOutTerms returns the terms that the server enforces for a loop out swap.
*/ */
rpc LoopOutTerms (TermsRequest) returns (TermsResponse) { rpc LoopOutTerms (TermsRequest) returns (OutTermsResponse) {
option (google.api.http) = { option (google.api.http) = {
get: "/v1/loop/out/terms" get: "/v1/loop/out/terms"
}; };
@ -81,7 +81,7 @@ service SwapClient {
/** loop: `terms` /** loop: `terms`
GetTerms returns the terms that the server enforces for swaps. GetTerms returns the terms that the server enforces for swaps.
*/ */
rpc GetLoopInTerms (TermsRequest) returns (TermsResponse) { rpc GetLoopInTerms (TermsRequest) returns (InTermsResponse) {
option (google.api.http) = { option (google.api.http) = {
get: "/v1/loop/in/terms" get: "/v1/loop/in/terms"
}; };
@ -419,7 +419,22 @@ message SwapInfoRequest {
message TermsRequest { message TermsRequest {
} }
message TermsResponse { message InTermsResponse {
reserved 1, 2, 3, 4, 7;
/**
Minimum swap amount (sat)
*/
int64 min_swap_amount = 5;
/**
Maximum swap amount (sat)
*/
int64 max_swap_amount = 6;
}
message OutTermsResponse {
reserved 1, 2, 3, 4, 7; reserved 1, 2, 3, 4, 7;

View File

@ -109,7 +109,7 @@
"200": { "200": {
"description": "A successful response.", "description": "A successful response.",
"schema": { "schema": {
"$ref": "#/definitions/looprpcTermsResponse" "$ref": "#/definitions/looprpcInTermsResponse"
} }
}, },
"default": { "default": {
@ -222,7 +222,7 @@
"200": { "200": {
"description": "A successful response.", "description": "A successful response.",
"schema": { "schema": {
"$ref": "#/definitions/looprpcTermsResponse" "$ref": "#/definitions/looprpcOutTermsResponse"
} }
}, },
"default": { "default": {
@ -318,6 +318,21 @@
} }
}, },
"definitions": { "definitions": {
"looprpcInTermsResponse": {
"type": "object",
"properties": {
"min_swap_amount": {
"type": "string",
"format": "int64",
"title": "*\nMinimum swap amount (sat)"
},
"max_swap_amount": {
"type": "string",
"format": "int64",
"title": "*\nMaximum swap amount (sat)"
}
}
},
"looprpcListSwapsResponse": { "looprpcListSwapsResponse": {
"type": "object", "type": "object",
"properties": { "properties": {
@ -471,6 +486,21 @@
} }
} }
}, },
"looprpcOutTermsResponse": {
"type": "object",
"properties": {
"min_swap_amount": {
"type": "string",
"format": "int64",
"title": "*\nMinimum swap amount (sat)"
},
"max_swap_amount": {
"type": "string",
"format": "int64",
"title": "*\nMaximum swap amount (sat)"
}
}
},
"looprpcQuoteResponse": { "looprpcQuoteResponse": {
"type": "object", "type": "object",
"properties": { "properties": {
@ -617,21 +647,6 @@
"default": "LOOP_OUT", "default": "LOOP_OUT",
"title": "- LOOP_OUT: LOOP_OUT indicates an loop out swap (off-chain to on-chain)\n - LOOP_IN: LOOP_IN indicates a loop in swap (on-chain to off-chain)" "title": "- LOOP_OUT: LOOP_OUT indicates an loop out swap (off-chain to on-chain)\n - LOOP_IN: LOOP_IN indicates a loop in swap (on-chain to off-chain)"
}, },
"looprpcTermsResponse": {
"type": "object",
"properties": {
"min_swap_amount": {
"type": "string",
"format": "int64",
"title": "*\nMinimum swap amount (sat)"
},
"max_swap_amount": {
"type": "string",
"format": "int64",
"title": "*\nMaximum swap amount (sat)"
}
}
},
"looprpcTokensResponse": { "looprpcTokensResponse": {
"type": "object", "type": "object",
"properties": { "properties": {