lnrpc+proto: Modify WalletBalance to include detailed balance info

This commit is contained in:
Nalin Bhardwaj 2017-11-26 18:37:55 +05:30
parent 9c145d4071
commit a234e01c07
No known key found for this signature in database
GPG Key ID: B25133FC2745D499
5 changed files with 413 additions and 349 deletions

@ -2098,7 +2098,11 @@ func (m *WalletBalanceRequest) GetWitnessOnly() bool {
type WalletBalanceResponse struct { type WalletBalanceResponse struct {
// / The balance of the wallet // / The balance of the wallet
Balance int64 `protobuf:"varint,1,opt,name=balance" json:"balance,omitempty"` TotalBalance int64 `protobuf:"varint,1,opt,name=total_balance" json:"total_balance,omitempty"`
// / The confirmed balance of a wallet(with >= 1 confirmations)
ConfirmedBalance int64 `protobuf:"varint,2,opt,name=confirmed_balance" json:"confirmed_balance,omitempty"`
// / The unconfirmed balance of a wallet(with 0 confirmations)
UnconfirmedBalance int64 `protobuf:"varint,3,opt,name=unconfirmed_balance" json:"unconfirmed_balance,omitempty"`
} }
func (m *WalletBalanceResponse) Reset() { *m = WalletBalanceResponse{} } func (m *WalletBalanceResponse) Reset() { *m = WalletBalanceResponse{} }
@ -2106,9 +2110,23 @@ func (m *WalletBalanceResponse) String() string { return proto.Compac
func (*WalletBalanceResponse) ProtoMessage() {} func (*WalletBalanceResponse) ProtoMessage() {}
func (*WalletBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} } func (*WalletBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} }
func (m *WalletBalanceResponse) GetBalance() int64 { func (m *WalletBalanceResponse) GetTotalBalance() int64 {
if m != nil { if m != nil {
return m.Balance return m.TotalBalance
}
return 0
}
func (m *WalletBalanceResponse) GetConfirmedBalance() int64 {
if m != nil {
return m.ConfirmedBalance
}
return 0
}
func (m *WalletBalanceResponse) GetUnconfirmedBalance() int64 {
if m != nil {
return m.UnconfirmedBalance
} }
return 0 return 0
} }
@ -3818,7 +3836,7 @@ var _WalletUnlocker_serviceDesc = grpc.ServiceDesc{
type LightningClient interface { type LightningClient interface {
// * lncli: `walletbalance` // * lncli: `walletbalance`
// WalletBalance returns the sum of all confirmed unspent outputs under control // WalletBalance returns total unspent outputs(confirmed and unconfirmed), all confirmed unspent outputs and all unconfirmed unspent outputs under control
// by the wallet. This method can be modified by having the request specify // by the wallet. This method can be modified by having the request specify
// only witness outputs should be factored into the final output sum. // only witness outputs should be factored into the final output sum.
WalletBalance(ctx context.Context, in *WalletBalanceRequest, opts ...grpc.CallOption) (*WalletBalanceResponse, error) WalletBalance(ctx context.Context, in *WalletBalanceRequest, opts ...grpc.CallOption) (*WalletBalanceResponse, error)
@ -4516,7 +4534,7 @@ func (c *lightningClient) UpdateFees(ctx context.Context, in *FeeUpdateRequest,
type LightningServer interface { type LightningServer interface {
// * lncli: `walletbalance` // * lncli: `walletbalance`
// WalletBalance returns the sum of all confirmed unspent outputs under control // WalletBalance returns total unspent outputs(confirmed and unconfirmed), all confirmed unspent outputs and all unconfirmed unspent outputs under control
// by the wallet. This method can be modified by having the request specify // by the wallet. This method can be modified by having the request specify
// only witness outputs should be factored into the final output sum. // only witness outputs should be factored into the final output sum.
WalletBalance(context.Context, *WalletBalanceRequest) (*WalletBalanceResponse, error) WalletBalance(context.Context, *WalletBalanceRequest) (*WalletBalanceResponse, error)
@ -5619,307 +5637,309 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) } func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{ var fileDescriptor0 = []byte{
// 4831 bytes of a gzipped FileDescriptorProto // 4864 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5b, 0xdd, 0x6f, 0x1c, 0x4b, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7b, 0xcf, 0x8f, 0x1c, 0x49,
0x56, 0x4f, 0x8f, 0x67, 0xec, 0x99, 0x33, 0x33, 0xfe, 0x28, 0x7f, 0x4d, 0x26, 0xb9, 0xd9, 0xa4, 0x56, 0xbf, 0xb3, 0xba, 0xba, 0xbb, 0xea, 0x55, 0x55, 0xff, 0x88, 0x6e, 0xb7, 0xcb, 0x65, 0xcf,
0x36, 0xba, 0x31, 0xde, 0x2b, 0x3b, 0xf1, 0xb2, 0x97, 0x6c, 0x02, 0x5c, 0x39, 0x9f, 0xbe, 0xac, 0xac, 0x1d, 0x3b, 0x9a, 0xe9, 0xaf, 0x77, 0xe4, 0xf6, 0xf4, 0x7e, 0x77, 0x98, 0x1d, 0x03, 0x23,
0x6f, 0xae, 0xb7, 0x9d, 0xdc, 0xc0, 0xae, 0xd0, 0xd0, 0x9e, 0x2e, 0x8f, 0x7b, 0xd3, 0xd3, 0xdd, 0xff, 0x9c, 0x1e, 0xb6, 0xc7, 0xd3, 0x9b, 0xed, 0x19, 0xc3, 0xae, 0x50, 0x91, 0x5d, 0x15, 0x5d,
0xb7, 0xbb, 0xc6, 0xce, 0x6c, 0x14, 0x09, 0x16, 0xc4, 0x13, 0x68, 0x1f, 0x40, 0x20, 0x1e, 0x40, 0x9d, 0xeb, 0xac, 0xcc, 0x9c, 0xcc, 0xa8, 0x6e, 0xd7, 0x5a, 0x96, 0x60, 0x41, 0x9c, 0x40, 0x7b,
0x20, 0x84, 0x04, 0x0f, 0xf0, 0x0f, 0x20, 0xf1, 0x07, 0x20, 0x10, 0x48, 0xfb, 0x84, 0xc4, 0x1b, 0x00, 0x81, 0x38, 0x2c, 0x02, 0x21, 0x24, 0x38, 0xc0, 0x3f, 0x80, 0xc4, 0x1f, 0x80, 0x40, 0x20,
0x3c, 0xf1, 0x82, 0x78, 0xe0, 0x1d, 0xd5, 0x67, 0x57, 0x75, 0xb7, 0x13, 0x2f, 0xbb, 0xf0, 0xe4, 0xed, 0x09, 0x89, 0x1b, 0x9c, 0xb8, 0x20, 0x0e, 0xdc, 0xd1, 0x8b, 0x5f, 0x19, 0x91, 0x99, 0x6d,
0xa9, 0x5f, 0x55, 0x9f, 0xaa, 0x3a, 0x75, 0xea, 0x7c, 0xd5, 0x31, 0xb4, 0xd2, 0x64, 0xb8, 0x95, 0x7b, 0xd9, 0x85, 0x53, 0x57, 0x7c, 0x22, 0xf2, 0x45, 0xc4, 0x8b, 0x17, 0xef, 0x57, 0xbc, 0x86,
0xa4, 0x31, 0x8d, 0x51, 0x23, 0x8c, 0xd2, 0x64, 0xd8, 0xbf, 0x3a, 0x8a, 0xe3, 0x51, 0x48, 0xb6, 0x76, 0x96, 0x8e, 0x6e, 0xa6, 0x59, 0xc2, 0x13, 0xb2, 0x18, 0xc5, 0x59, 0x3a, 0x1a, 0x5c, 0x9d,
0xbd, 0x24, 0xd8, 0xf6, 0xa2, 0x28, 0xa6, 0x1e, 0x0d, 0xe2, 0x28, 0x13, 0x83, 0xf0, 0x1d, 0x58, 0x24, 0xc9, 0x24, 0x62, 0x3b, 0x41, 0x1a, 0xee, 0x04, 0x71, 0x9c, 0xf0, 0x80, 0x87, 0x49, 0x9c,
0x7e, 0x98, 0x12, 0x8f, 0x92, 0x97, 0x5e, 0x18, 0x12, 0xea, 0x92, 0x2f, 0x27, 0x24, 0xa3, 0xa8, 0xcb, 0x41, 0xf4, 0x3d, 0xd8, 0xb8, 0x97, 0xb1, 0x80, 0xb3, 0x27, 0x41, 0x14, 0x31, 0xee, 0xb3,
0x0f, 0xcd, 0xc4, 0xcb, 0xb2, 0xb3, 0x38, 0xf5, 0x7b, 0xce, 0x75, 0x67, 0xa3, 0xe3, 0xea, 0x36, 0x2f, 0x67, 0x2c, 0xe7, 0x64, 0x00, 0xad, 0x34, 0xc8, 0xf3, 0xb3, 0x24, 0x1b, 0xf7, 0xbd, 0x6b,
0x5e, 0x83, 0x15, 0xfb, 0x93, 0x2c, 0x89, 0xa3, 0x8c, 0x30, 0x52, 0x2f, 0xa2, 0x30, 0x1e, 0xbe, 0xde, 0x76, 0xd7, 0x37, 0x6d, 0xba, 0x05, 0x9b, 0xee, 0x27, 0x79, 0x9a, 0xc4, 0x39, 0x43, 0x52,
0xfa, 0xb1, 0x48, 0xd9, 0x9f, 0x48, 0x52, 0xff, 0xe5, 0x40, 0xfb, 0x79, 0xea, 0x45, 0x99, 0x37, 0x9f, 0xc7, 0x51, 0x32, 0x7a, 0xfa, 0x13, 0x91, 0x72, 0x3f, 0x51, 0xa4, 0xfe, 0xd3, 0x83, 0xce,
0x64, 0x8b, 0x45, 0x3d, 0x98, 0xa3, 0xaf, 0x07, 0x27, 0x5e, 0x76, 0xc2, 0x49, 0xb4, 0x5c, 0xd5, 0xe3, 0x2c, 0x88, 0xf3, 0x60, 0x84, 0x8b, 0x25, 0x7d, 0x58, 0xe6, 0xcf, 0x86, 0x27, 0x41, 0x7e,
0x44, 0x6b, 0x30, 0xeb, 0x8d, 0xe3, 0x49, 0x44, 0x7b, 0xb5, 0xeb, 0xce, 0xc6, 0x8c, 0x2b, 0x5b, 0x22, 0x48, 0xb4, 0x7d, 0xdd, 0x24, 0x5b, 0xb0, 0x14, 0x4c, 0x93, 0x59, 0xcc, 0xfb, 0x8d, 0x6b,
0xe8, 0x23, 0x58, 0x8a, 0x26, 0xe3, 0xc1, 0x30, 0x8e, 0x8e, 0x83, 0x74, 0x2c, 0xb6, 0xdc, 0x9b, 0xde, 0xf6, 0x82, 0xaf, 0x5a, 0xe4, 0x5d, 0x58, 0x8f, 0x67, 0xd3, 0xe1, 0x28, 0x89, 0x8f, 0xc3,
0xb9, 0xee, 0x6c, 0x34, 0xdc, 0x72, 0x07, 0xba, 0x06, 0x70, 0xc4, 0x96, 0x21, 0xa6, 0xa8, 0xf3, 0x6c, 0x2a, 0xb7, 0xdc, 0x5f, 0xb8, 0xe6, 0x6d, 0x2f, 0xfa, 0xd5, 0x0e, 0xf2, 0x26, 0xc0, 0x11,
0x29, 0x0c, 0x04, 0x61, 0xe8, 0xc8, 0x16, 0x09, 0x46, 0x27, 0xb4, 0xd7, 0xe0, 0x84, 0x2c, 0x8c, 0x2e, 0x43, 0x4e, 0xd1, 0x14, 0x53, 0x58, 0x08, 0xa1, 0xd0, 0x55, 0x2d, 0x16, 0x4e, 0x4e, 0x78,
0xd1, 0xa0, 0xc1, 0x98, 0x0c, 0x32, 0xea, 0x8d, 0x93, 0xde, 0x2c, 0x5f, 0x8d, 0x81, 0xf0, 0xfe, 0x7f, 0x51, 0x10, 0x72, 0x30, 0xa4, 0xc1, 0xc3, 0x29, 0x1b, 0xe6, 0x3c, 0x98, 0xa6, 0xfd, 0x25,
0x98, 0x7a, 0xe1, 0xe0, 0x98, 0x90, 0xac, 0x37, 0x27, 0xfb, 0x35, 0x82, 0x7b, 0xb0, 0xf6, 0x94, 0xb1, 0x1a, 0x0b, 0x11, 0xfd, 0x09, 0x0f, 0xa2, 0xe1, 0x31, 0x63, 0x79, 0x7f, 0x59, 0xf5, 0x1b,
0x50, 0x63, 0xd7, 0x99, 0xe4, 0x20, 0xde, 0x07, 0x64, 0xc0, 0x8f, 0x08, 0xf5, 0x82, 0x30, 0x43, 0x84, 0xf6, 0x61, 0xeb, 0x63, 0xc6, 0xad, 0x5d, 0xe7, 0x8a, 0x83, 0x74, 0x1f, 0x88, 0x05, 0xdf,
0x1f, 0x43, 0x87, 0x1a, 0x83, 0x7b, 0xce, 0xf5, 0x99, 0x8d, 0xf6, 0x0e, 0xda, 0xe2, 0xa7, 0xbe, 0x67, 0x3c, 0x08, 0xa3, 0x9c, 0xbc, 0x0f, 0x5d, 0x6e, 0x0d, 0xee, 0x7b, 0xd7, 0x16, 0xb6, 0x3b,
0x65, 0x7c, 0xe0, 0x5a, 0xe3, 0xf0, 0x3f, 0x3b, 0xd0, 0x3e, 0x24, 0x91, 0xaf, 0xce, 0x07, 0x41, 0xbb, 0xe4, 0xa6, 0x38, 0xf5, 0x9b, 0xd6, 0x07, 0xbe, 0x33, 0x8e, 0xfe, 0x93, 0x07, 0x9d, 0x43,
0xdd, 0x27, 0x19, 0x95, 0x67, 0xc3, 0x7f, 0xa3, 0xaf, 0x40, 0x9b, 0xfd, 0x1d, 0x64, 0x34, 0x0d, 0x16, 0x8f, 0xf5, 0xf9, 0x10, 0x68, 0x8e, 0x59, 0xce, 0xd5, 0xd9, 0x88, 0xdf, 0xe4, 0x2b, 0xd0,
0xa2, 0x11, 0x67, 0x6d, 0xcb, 0x05, 0x06, 0x1d, 0x72, 0x04, 0x2d, 0xc2, 0x8c, 0x37, 0xa6, 0x9c, 0xc1, 0xbf, 0xc3, 0x9c, 0x67, 0x61, 0x3c, 0x11, 0xac, 0x6d, 0xfb, 0x80, 0xd0, 0xa1, 0x40, 0xc8,
0xa1, 0x33, 0x2e, 0xfb, 0x89, 0x6e, 0x40, 0x27, 0xf1, 0xa6, 0x63, 0x12, 0xd1, 0x9c, 0x89, 0x1d, 0x1a, 0x2c, 0x04, 0x53, 0x2e, 0x18, 0xba, 0xe0, 0xe3, 0x4f, 0x72, 0x1d, 0xba, 0x69, 0x30, 0x9f,
0xb7, 0x2d, 0xb1, 0x3d, 0xc6, 0xc5, 0x2d, 0x58, 0x36, 0x87, 0x28, 0xea, 0x0d, 0x4e, 0x7d, 0xc9, 0xb2, 0x98, 0x17, 0x4c, 0xec, 0xfa, 0x1d, 0x85, 0xed, 0x21, 0x17, 0x6f, 0xc2, 0x86, 0x3d, 0x44,
0x18, 0x29, 0x27, 0xb9, 0x05, 0x0b, 0x6a, 0x7c, 0x2a, 0x16, 0xcb, 0xd9, 0xda, 0x72, 0xe7, 0x25, 0x53, 0x5f, 0x14, 0xd4, 0xd7, 0xad, 0x91, 0x6a, 0x92, 0x77, 0x60, 0x55, 0x8f, 0xcf, 0xe4, 0x62,
0xac, 0x18, 0xf4, 0xfb, 0x0e, 0x74, 0xc4, 0x96, 0x84, 0xfc, 0xa0, 0x9b, 0xd0, 0x55, 0x5f, 0x92, 0x05, 0x5b, 0xdb, 0xfe, 0x8a, 0x82, 0x35, 0x83, 0x7e, 0xdf, 0x83, 0xae, 0xdc, 0x92, 0x94, 0x1f,
0x34, 0x8d, 0x53, 0x29, 0x35, 0x36, 0x88, 0x36, 0x61, 0x51, 0x01, 0x49, 0x4a, 0x82, 0xb1, 0x37, 0xf2, 0x16, 0xf4, 0xf4, 0x97, 0x2c, 0xcb, 0x92, 0x4c, 0x49, 0x8d, 0x0b, 0x92, 0x1b, 0xb0, 0xa6,
0x22, 0x7c, 0xab, 0x1d, 0xb7, 0x84, 0xa3, 0x9d, 0x9c, 0x62, 0x1a, 0x4f, 0x28, 0xe1, 0x5b, 0x6f, 0x81, 0x34, 0x63, 0xe1, 0x34, 0x98, 0x30, 0xb1, 0xd5, 0xae, 0x5f, 0xc1, 0xc9, 0x6e, 0x41, 0x31,
0xef, 0x74, 0x24, 0xbb, 0x5d, 0x86, 0xb9, 0xf6, 0x10, 0xfc, 0x03, 0x07, 0x3a, 0x0f, 0x4f, 0xbc, 0x4b, 0x66, 0x9c, 0x89, 0xad, 0x77, 0x76, 0xbb, 0x8a, 0xdd, 0x3e, 0x62, 0xbe, 0x3b, 0x84, 0xfe,
0x28, 0x22, 0xe1, 0x41, 0x1c, 0x44, 0x94, 0x89, 0xd1, 0xf1, 0x24, 0xf2, 0x83, 0x68, 0x34, 0xa0, 0xc0, 0x83, 0xee, 0xbd, 0x93, 0x20, 0x8e, 0x59, 0x74, 0x90, 0x84, 0x31, 0x47, 0x31, 0x3a, 0x9e,
0xaf, 0x03, 0x75, 0x1d, 0x2c, 0x8c, 0x2d, 0xca, 0x6c, 0x33, 0x26, 0x49, 0xfe, 0x97, 0x70, 0x46, 0xc5, 0xe3, 0x30, 0x9e, 0x0c, 0xf9, 0xb3, 0x50, 0x5f, 0x07, 0x07, 0xc3, 0x45, 0xd9, 0x6d, 0x64,
0x2f, 0x9e, 0xd0, 0x64, 0x42, 0x07, 0x41, 0xe4, 0x93, 0xd7, 0x7c, 0x4d, 0x5d, 0xd7, 0xc2, 0xf0, 0x92, 0xe2, 0x7f, 0x05, 0x47, 0x7a, 0xc9, 0x8c, 0xa7, 0x33, 0x3e, 0x0c, 0xe3, 0x31, 0x7b, 0x26,
0x2f, 0xc2, 0xe2, 0x3e, 0x93, 0xcf, 0x28, 0x88, 0x46, 0xbb, 0xbe, 0x9f, 0x92, 0x2c, 0x63, 0x97, 0xd6, 0xd4, 0xf3, 0x1d, 0x8c, 0xfe, 0x22, 0xac, 0xed, 0xa3, 0x7c, 0xc6, 0x61, 0x3c, 0xb9, 0x33,
0x26, 0x99, 0x1c, 0xbd, 0x22, 0x53, 0xc9, 0x17, 0xd9, 0x62, 0xa2, 0x70, 0x12, 0x67, 0x54, 0xce, 0x1e, 0x67, 0x2c, 0xcf, 0xf1, 0xd2, 0xa4, 0xb3, 0xa3, 0xa7, 0x6c, 0xae, 0xf8, 0xa2, 0x5a, 0x28,
0xc7, 0x7f, 0xe3, 0x7f, 0x73, 0x60, 0x81, 0xf1, 0xf6, 0x33, 0x2f, 0x9a, 0x2a, 0x91, 0xd9, 0x87, 0x0a, 0x27, 0x49, 0xce, 0xd5, 0x7c, 0xe2, 0x37, 0xfd, 0x57, 0x0f, 0x56, 0x91, 0xb7, 0x9f, 0x06,
0x0e, 0x23, 0xf5, 0x3c, 0xde, 0x15, 0x57, 0x4f, 0x88, 0xde, 0x86, 0xe4, 0x45, 0x61, 0xf4, 0x96, 0xf1, 0x5c, 0x8b, 0xcc, 0x3e, 0x74, 0x91, 0xd4, 0xe3, 0xe4, 0x8e, 0xbc, 0x7a, 0x52, 0xf4, 0xb6,
0x39, 0xf4, 0x71, 0x44, 0xd3, 0xa9, 0x6b, 0x7d, 0xcd, 0x84, 0x8d, 0x7a, 0xe9, 0x88, 0x50, 0x7e, 0x15, 0x2f, 0x4a, 0xa3, 0x6f, 0xda, 0x43, 0x1f, 0xc4, 0x3c, 0x9b, 0xfb, 0xce, 0xd7, 0x28, 0x6c,
0x29, 0xe5, 0x25, 0x05, 0x01, 0x3d, 0x8c, 0xa3, 0x63, 0x74, 0x1d, 0x3a, 0x99, 0x47, 0x07, 0x09, 0x3c, 0xc8, 0x26, 0x8c, 0x8b, 0x4b, 0xa9, 0x2e, 0x29, 0x48, 0xe8, 0x5e, 0x12, 0x1f, 0x93, 0x6b,
0x49, 0x07, 0x47, 0x53, 0x4a, 0xb8, 0xc0, 0xcc, 0xb8, 0x90, 0x79, 0xf4, 0x80, 0xa4, 0x0f, 0xa6, 0xd0, 0xcd, 0x03, 0x3e, 0x4c, 0x59, 0x36, 0x3c, 0x9a, 0x73, 0x26, 0x04, 0x66, 0xc1, 0x87, 0x3c,
0x94, 0xf4, 0x3f, 0x81, 0xa5, 0xd2, 0x2c, 0x4c, 0x46, 0xf3, 0x2d, 0xb2, 0x9f, 0x68, 0x05, 0x1a, 0xe0, 0x07, 0x2c, 0xbb, 0x3b, 0xe7, 0x6c, 0xf0, 0x11, 0xac, 0x57, 0x66, 0x41, 0x19, 0x2d, 0xb6,
0xa7, 0x5e, 0x38, 0x21, 0x52, 0x57, 0x88, 0xc6, 0xbd, 0xda, 0x5d, 0x07, 0x7f, 0x08, 0x8b, 0xf9, 0x88, 0x3f, 0xc9, 0x26, 0x2c, 0x9e, 0x06, 0xd1, 0x8c, 0x29, 0x5d, 0x21, 0x1b, 0x1f, 0x36, 0x3e,
0xb2, 0xa5, 0x10, 0x21, 0xa8, 0xeb, 0x53, 0x6a, 0xb9, 0xfc, 0x37, 0xfe, 0x0d, 0x47, 0x0c, 0x7c, 0xf0, 0xe8, 0xdb, 0xb0, 0x56, 0x2c, 0x5b, 0x09, 0x11, 0x81, 0xa6, 0x39, 0xa5, 0xb6, 0x2f, 0x7e,
0x18, 0x07, 0xfa, 0x7e, 0xb2, 0x81, 0x9e, 0xef, 0x2b, 0x21, 0xe3, 0xbf, 0xcf, 0xd5, 0x4b, 0x3f, 0xd3, 0xdf, 0xf0, 0xe4, 0xc0, 0x7b, 0x49, 0x68, 0xee, 0x27, 0x0e, 0x0c, 0xc6, 0x63, 0x2d, 0x64,
0xf9, 0x66, 0xf1, 0x2d, 0x58, 0x32, 0x96, 0xf0, 0x8e, 0xc5, 0xfe, 0x89, 0x03, 0x4b, 0xcf, 0xc8, 0xe2, 0xf7, 0xb9, 0x7a, 0xe9, 0xa7, 0xdf, 0x2c, 0x7d, 0x07, 0xd6, 0xad, 0x25, 0xbc, 0x64, 0xb1,
0x99, 0x3c, 0x75, 0xb5, 0xda, 0xbb, 0x50, 0xa7, 0xd3, 0x84, 0xf0, 0x91, 0xf3, 0x3b, 0x37, 0xe5, 0x7f, 0xec, 0xc1, 0xfa, 0x23, 0x76, 0xa6, 0x4e, 0x5d, 0xaf, 0xf6, 0x03, 0x68, 0xf2, 0x79, 0xca,
0xa1, 0x95, 0xc6, 0x6d, 0xc9, 0xe6, 0xf3, 0x69, 0x42, 0x5c, 0xfe, 0x05, 0xfe, 0x1c, 0xda, 0x06, 0xc4, 0xc8, 0x95, 0xdd, 0xb7, 0xd4, 0xa1, 0x55, 0xc6, 0xdd, 0x54, 0xcd, 0xc7, 0xf3, 0x94, 0xf9,
0x88, 0xd6, 0x61, 0xf9, 0xe5, 0xa7, 0xcf, 0x9f, 0x3d, 0x3e, 0x3c, 0x1c, 0x1c, 0xbc, 0x78, 0xf0, 0xe2, 0x0b, 0xfa, 0x19, 0x74, 0x2c, 0x90, 0x5c, 0x82, 0x8d, 0x27, 0x9f, 0x3c, 0x7e, 0xf4, 0xe0,
0xad, 0xc7, 0xbf, 0x32, 0xd8, 0xdb, 0x3d, 0xdc, 0x5b, 0xbc, 0x84, 0xd6, 0x00, 0x3d, 0x7b, 0x7c, 0xf0, 0x70, 0x78, 0xf0, 0xf9, 0xdd, 0x6f, 0x3d, 0xf8, 0x95, 0xe1, 0xde, 0x9d, 0xc3, 0xbd, 0xb5,
0xf8, 0xfc, 0xf1, 0x23, 0x0b, 0x77, 0xd0, 0x02, 0xb4, 0x4d, 0xa0, 0x86, 0xfb, 0xd0, 0x7b, 0x46, 0x0b, 0x64, 0x0b, 0xc8, 0xa3, 0x07, 0x87, 0x8f, 0x1f, 0xdc, 0x77, 0x70, 0x8f, 0xac, 0x42, 0xc7,
0xce, 0x5e, 0x06, 0x34, 0x22, 0x59, 0x66, 0x4f, 0x8f, 0xb7, 0x00, 0x99, 0x6b, 0x92, 0xdb, 0xec, 0x06, 0x1a, 0x74, 0x00, 0xfd, 0x47, 0xec, 0xec, 0x49, 0xc8, 0x63, 0x96, 0xe7, 0xee, 0xf4, 0xf4,
0xc1, 0x9c, 0x27, 0x20, 0x65, 0x08, 0x64, 0x13, 0x7f, 0x08, 0xe8, 0x30, 0x18, 0x45, 0x9f, 0x91, 0x26, 0x10, 0x7b, 0x4d, 0x6a, 0x9b, 0x7d, 0x58, 0x0e, 0x24, 0xa4, 0x0d, 0x81, 0x6a, 0xd2, 0xb7,
0x2c, 0xf3, 0x46, 0x44, 0x6d, 0x76, 0x11, 0x66, 0xc6, 0xd9, 0x48, 0x5e, 0x34, 0xf6, 0x13, 0x7f, 0x81, 0x1c, 0x86, 0x93, 0xf8, 0x53, 0x96, 0xe7, 0xc1, 0x84, 0xe9, 0xcd, 0xae, 0xc1, 0xc2, 0x34,
0x1d, 0x96, 0xad, 0x71, 0x92, 0xf0, 0x55, 0x68, 0x65, 0xc1, 0x28, 0xf2, 0xe8, 0x24, 0x25, 0x92, 0x9f, 0xa8, 0x8b, 0x86, 0x3f, 0xe9, 0xd7, 0x61, 0xc3, 0x19, 0xa7, 0x08, 0x5f, 0x85, 0x76, 0x1e,
0x74, 0x0e, 0xe0, 0x27, 0xb0, 0xf2, 0x05, 0x49, 0x83, 0xe3, 0xe9, 0xfb, 0xc8, 0xdb, 0x74, 0x6a, 0x4e, 0xe2, 0x80, 0xcf, 0x32, 0xa6, 0x48, 0x17, 0x00, 0x7d, 0x08, 0x9b, 0x5f, 0xb0, 0x2c, 0x3c,
0x45, 0x3a, 0x8f, 0x61, 0xb5, 0x40, 0x47, 0x4e, 0x2f, 0x24, 0x53, 0x9e, 0x5f, 0xd3, 0x15, 0x0d, 0x9e, 0xbf, 0x8a, 0xbc, 0x4b, 0xa7, 0x51, 0xa6, 0xf3, 0x00, 0x2e, 0x96, 0xe8, 0xa8, 0xe9, 0xa5,
0xe3, 0x9e, 0xd6, 0xcc, 0x7b, 0x8a, 0x5f, 0x00, 0x7a, 0x18, 0x47, 0x11, 0x19, 0xd2, 0x03, 0x42, 0x64, 0xaa, 0xf3, 0x6b, 0xf9, 0xb2, 0x61, 0xdd, 0xd3, 0x86, 0x7d, 0x4f, 0xe9, 0xe7, 0x40, 0xee,
0x52, 0xb5, 0x98, 0xaf, 0x19, 0x62, 0xd8, 0xde, 0x59, 0x97, 0x07, 0x5b, 0xbc, 0xfc, 0x52, 0x3e, 0x25, 0x71, 0xcc, 0x46, 0xfc, 0x80, 0xb1, 0x4c, 0x2f, 0xe6, 0x6b, 0x96, 0x18, 0x76, 0x76, 0x2f,
0x11, 0xd4, 0x13, 0x92, 0x8e, 0x39, 0xe1, 0xa6, 0xcb, 0x7f, 0xe3, 0x6d, 0x58, 0xb6, 0xc8, 0xe6, 0xa9, 0x83, 0x2d, 0x5f, 0x7e, 0x25, 0x9f, 0x04, 0x9a, 0x29, 0xcb, 0xa6, 0x82, 0x70, 0xcb, 0x17,
0x3c, 0x4f, 0x08, 0x49, 0x07, 0x72, 0x75, 0x0d, 0x57, 0x35, 0xf1, 0x1d, 0x58, 0x7d, 0x14, 0x64, 0xbf, 0xe9, 0x0e, 0x6c, 0x38, 0x64, 0x0b, 0x9e, 0xa7, 0x8c, 0x65, 0x43, 0xb5, 0xba, 0x45, 0x5f,
0xc3, 0xf2, 0x52, 0xd8, 0x27, 0x93, 0xa3, 0x41, 0x7e, 0xfd, 0x54, 0x93, 0x59, 0xb9, 0xe2, 0x27, 0x37, 0xe9, 0x7b, 0x70, 0xf1, 0x7e, 0x98, 0x8f, 0xaa, 0x4b, 0xc1, 0x4f, 0x66, 0x47, 0xc3, 0xe2,
0xd2, 0xe6, 0xff, 0xb6, 0x03, 0xf5, 0xbd, 0xe7, 0xfb, 0x0f, 0x99, 0xc3, 0x10, 0x44, 0xc3, 0x78, 0xfa, 0xe9, 0x26, 0x5a, 0xb9, 0xf2, 0x27, 0xca, 0xe6, 0xff, 0xb6, 0x07, 0xcd, 0xbd, 0xc7, 0xfb,
0xcc, 0x6c, 0x83, 0x60, 0x87, 0x6e, 0x9f, 0x7b, 0xad, 0xae, 0x42, 0x8b, 0x9b, 0x14, 0x66, 0x90, 0xf7, 0xd0, 0x61, 0x08, 0xe3, 0x51, 0x32, 0x45, 0xdb, 0x20, 0xd9, 0x61, 0xda, 0xe7, 0x5e, 0xab,
0xf9, 0xa5, 0xea, 0xb8, 0x39, 0xc0, 0x9c, 0x01, 0xf2, 0x3a, 0x09, 0x52, 0x6e, 0xed, 0x95, 0x0d, 0xab, 0xd0, 0x16, 0x26, 0x05, 0x0d, 0xb2, 0xb8, 0x54, 0x5d, 0xbf, 0x00, 0xd0, 0x19, 0x60, 0xcf,
0xaf, 0x73, 0x65, 0x59, 0xee, 0xc0, 0xff, 0x50, 0x87, 0xee, 0xee, 0x90, 0x06, 0xa7, 0x44, 0x2a, 0xd2, 0x30, 0x13, 0xd6, 0x5e, 0xdb, 0xf0, 0xa6, 0x50, 0x96, 0xd5, 0x0e, 0xfa, 0xf7, 0x4d, 0xe8,
0x6f, 0x3e, 0x2b, 0x07, 0xe4, 0x7a, 0x64, 0x8b, 0x99, 0x99, 0x94, 0x8c, 0x63, 0x4a, 0x06, 0xd6, 0xdd, 0x19, 0xf1, 0xf0, 0x94, 0x29, 0xe5, 0x2d, 0x66, 0x15, 0x80, 0x5a, 0x8f, 0x6a, 0xa1, 0x99,
0x31, 0xd9, 0x20, 0x1b, 0x35, 0x14, 0x84, 0x06, 0x09, 0x33, 0x03, 0x7c, 0x7d, 0x2d, 0xd7, 0x06, 0xc9, 0xd8, 0x34, 0xe1, 0x6c, 0xe8, 0x1c, 0x93, 0x0b, 0xe2, 0xa8, 0x91, 0x24, 0x34, 0x4c, 0xd1,
0x19, 0xcb, 0x18, 0xc0, 0xb8, 0xcc, 0x56, 0x56, 0x77, 0x55, 0x93, 0xf1, 0x63, 0xe8, 0x25, 0xde, 0x0c, 0x88, 0xf5, 0xb5, 0x7d, 0x17, 0x44, 0x96, 0x21, 0x80, 0x5c, 0xc6, 0x95, 0x35, 0x7d, 0xdd,
0x30, 0xa0, 0x53, 0xa9, 0x0d, 0x74, 0x9b, 0xd1, 0x0e, 0xe3, 0xa1, 0x17, 0x0e, 0x8e, 0xbc, 0xd0, 0x44, 0x7e, 0x8c, 0x82, 0x34, 0x18, 0x85, 0x7c, 0xae, 0xb4, 0x81, 0x69, 0x23, 0xed, 0x28, 0x19,
0x8b, 0x86, 0x44, 0xfa, 0x1d, 0x36, 0x88, 0x3e, 0x84, 0x79, 0xb9, 0x24, 0x35, 0x4c, 0xb8, 0x1f, 0x05, 0xd1, 0xf0, 0x28, 0x88, 0x82, 0x78, 0xc4, 0x94, 0xdf, 0xe1, 0x82, 0xe4, 0x6d, 0x58, 0x51,
0x05, 0x94, 0xb9, 0x28, 0xc3, 0x78, 0x3c, 0x0e, 0x28, 0xf3, 0x48, 0x7a, 0x4d, 0xa1, 0x79, 0x72, 0x4b, 0xd2, 0xc3, 0xa4, 0xfb, 0x51, 0x42, 0xd1, 0x45, 0x19, 0x25, 0xd3, 0x69, 0xc8, 0xd1, 0x23,
0x84, 0xef, 0x44, 0xb4, 0xce, 0x04, 0x0f, 0x5b, 0x62, 0x36, 0x0b, 0x64, 0x54, 0x8e, 0x09, 0xe1, 0xe9, 0xb7, 0xa4, 0xe6, 0x29, 0x10, 0xb1, 0x13, 0xd9, 0x3a, 0x93, 0x3c, 0x6c, 0xcb, 0xd9, 0x1c,
0x1a, 0xec, 0xd5, 0x59, 0x0f, 0x04, 0x95, 0x1c, 0x61, 0xa7, 0x31, 0x89, 0x32, 0x42, 0x69, 0x48, 0x10, 0xa9, 0x1c, 0x33, 0x26, 0x34, 0xd8, 0xd3, 0xb3, 0x3e, 0x48, 0x2a, 0x05, 0x82, 0xa7, 0x31,
0x7c, 0xbd, 0xa0, 0x36, 0x1f, 0x56, 0xee, 0x40, 0xb7, 0x61, 0x59, 0x38, 0x49, 0x99, 0x47, 0xe3, 0x8b, 0x73, 0xc6, 0x79, 0xc4, 0xc6, 0x66, 0x41, 0x1d, 0x31, 0xac, 0xda, 0x41, 0x6e, 0xc1, 0x86,
0xec, 0x24, 0xc8, 0x06, 0x19, 0x89, 0x68, 0xaf, 0xc3, 0xc7, 0x57, 0x75, 0xa1, 0xbb, 0xb0, 0x5e, 0x74, 0x92, 0xf2, 0x80, 0x27, 0xf9, 0x49, 0x98, 0x0f, 0x73, 0x16, 0xf3, 0x7e, 0x57, 0x8c, 0xaf,
0x80, 0x53, 0x32, 0x24, 0xc1, 0x29, 0xf1, 0x7b, 0x5d, 0xfe, 0xd5, 0x79, 0xdd, 0xe8, 0x3a, 0xb4, 0xeb, 0x22, 0x1f, 0xc0, 0xa5, 0x12, 0x9c, 0xb1, 0x11, 0x0b, 0x4f, 0xd9, 0xb8, 0xdf, 0x13, 0x5f,
0x99, 0x6f, 0x38, 0x49, 0x7c, 0x8f, 0x92, 0xac, 0x37, 0xcf, 0xcf, 0xc1, 0x84, 0xd0, 0x1d, 0xe8, 0x9d, 0xd7, 0x4d, 0xae, 0x41, 0x07, 0x7d, 0xc3, 0x59, 0x3a, 0x0e, 0x38, 0xcb, 0xfb, 0x2b, 0xe2,
0x26, 0x44, 0x58, 0xe1, 0x13, 0x1a, 0x0e, 0xb3, 0xde, 0x02, 0x37, 0x7d, 0x6d, 0x79, 0xd9, 0x98, 0x1c, 0x6c, 0x88, 0xbc, 0x07, 0xbd, 0x94, 0x49, 0x2b, 0x7c, 0xc2, 0xa3, 0x51, 0xde, 0x5f, 0x15,
0xfc, 0xba, 0xf6, 0x08, 0xbc, 0x0a, 0xcb, 0xfb, 0x41, 0x46, 0xa5, 0x2c, 0x69, 0xfd, 0xb6, 0x07, 0xa6, 0xaf, 0xa3, 0x2e, 0x1b, 0xca, 0xaf, 0xef, 0x8e, 0xa0, 0x17, 0x61, 0x63, 0x3f, 0xcc, 0xb9,
0x2b, 0x36, 0x2c, 0x6f, 0xdb, 0x6d, 0x68, 0x4a, 0xc1, 0xc8, 0x7a, 0x6d, 0x4e, 0x7c, 0x45, 0x12, 0x92, 0x25, 0xa3, 0xdf, 0xf6, 0x60, 0xd3, 0x85, 0xd5, 0x6d, 0xbb, 0x05, 0x2d, 0x25, 0x18, 0x79,
0xb7, 0x64, 0xd2, 0xd5, 0xa3, 0xf0, 0x6f, 0xd5, 0xa0, 0xce, 0x6e, 0xd2, 0xf9, 0xb7, 0xce, 0xbc, 0xbf, 0x23, 0x88, 0x6f, 0x2a, 0xe2, 0x8e, 0x4c, 0xfa, 0x66, 0x14, 0xfd, 0xad, 0x06, 0x34, 0xf1,
0xc2, 0x35, 0xeb, 0x0a, 0x9b, 0x0a, 0x75, 0xc6, 0x52, 0xa8, 0xdc, 0x27, 0x9e, 0x52, 0x22, 0xf9, 0x26, 0x9d, 0x7f, 0xeb, 0xec, 0x2b, 0xdc, 0x70, 0xae, 0xb0, 0xad, 0x50, 0x17, 0x1c, 0x85, 0x2a,
0x2d, 0x64, 0xd2, 0x40, 0xf2, 0xfe, 0x94, 0x0c, 0x4f, 0xb9, 0x60, 0xea, 0x7e, 0x86, 0x30, 0xb1, 0x7c, 0xe2, 0x39, 0x67, 0x8a, 0xdf, 0x52, 0x26, 0x2d, 0xa4, 0xe8, 0xcf, 0xd8, 0xe8, 0x54, 0x08,
0x65, 0x86, 0x8c, 0x7f, 0x2d, 0xa4, 0x52, 0xb7, 0x55, 0x1f, 0xff, 0x72, 0x2e, 0xef, 0xe3, 0xdf, 0xa6, 0xe9, 0x47, 0x04, 0xc5, 0x16, 0x0d, 0x99, 0xf8, 0x5a, 0x4a, 0xa5, 0x69, 0xeb, 0x3e, 0xf1,
0xf5, 0x60, 0x2e, 0x88, 0x8e, 0xe2, 0x49, 0xe4, 0x73, 0x09, 0x6c, 0xba, 0xaa, 0xc9, 0x2e, 0x79, 0xe5, 0x72, 0xd1, 0x27, 0xbe, 0xeb, 0xc3, 0x72, 0x18, 0x1f, 0x25, 0xb3, 0x78, 0x2c, 0x24, 0xb0,
0xc2, 0xfd, 0x9f, 0x60, 0x4c, 0xa4, 0xe8, 0xe5, 0x00, 0x46, 0xcc, 0xd1, 0xc9, 0xb8, 0x4e, 0xd1, 0xe5, 0xeb, 0x26, 0x5e, 0xf2, 0x54, 0xf8, 0x3f, 0xe1, 0x94, 0x29, 0xd1, 0x2b, 0x00, 0x4a, 0xd0,
0x4c, 0xfe, 0x18, 0x96, 0x0c, 0x4c, 0x72, 0xf8, 0x06, 0x34, 0xd8, 0xee, 0x95, 0xc7, 0xac, 0xce, 0xd1, 0xc9, 0x85, 0x4e, 0x31, 0x4c, 0x7e, 0x1f, 0xd6, 0x2d, 0x4c, 0x71, 0xf8, 0x3a, 0x2c, 0xe2,
0x8e, 0x2b, 0x23, 0xd1, 0x83, 0x17, 0x61, 0xfe, 0x29, 0xa1, 0x9f, 0x46, 0xc7, 0xb1, 0xa2, 0xf4, 0xee, 0xb5, 0xc7, 0xac, 0xcf, 0x4e, 0x28, 0x23, 0xd9, 0x43, 0xd7, 0x60, 0xe5, 0x63, 0xc6, 0x3f,
0xdf, 0x35, 0x58, 0xd0, 0x90, 0x24, 0xb4, 0x01, 0x0b, 0x81, 0x4f, 0x22, 0x1a, 0xd0, 0xe9, 0xc0, 0x89, 0x8f, 0x13, 0x4d, 0xe9, 0xbf, 0x1a, 0xb0, 0x6a, 0x20, 0x45, 0x68, 0x1b, 0x56, 0xc3, 0x31,
0xf2, 0xa7, 0x8a, 0x30, 0x53, 0xef, 0x5e, 0x18, 0x78, 0x99, 0x54, 0x10, 0xa2, 0x81, 0x76, 0x60, 0x8b, 0x79, 0xc8, 0xe7, 0x43, 0xc7, 0x9f, 0x2a, 0xc3, 0xa8, 0xde, 0x83, 0x28, 0x0c, 0x72, 0xa5,
0x85, 0xc9, 0x96, 0x12, 0x17, 0x7d, 0xec, 0xc2, 0x8d, 0xab, 0xec, 0x63, 0xd7, 0x81, 0xe1, 0x42, 0x20, 0x64, 0x83, 0xec, 0xc2, 0x26, 0xca, 0x96, 0x16, 0x17, 0x73, 0xec, 0xd2, 0x8d, 0xab, 0xed,
0x01, 0xe5, 0x9f, 0x08, 0x65, 0x56, 0xd5, 0xc5, 0xb8, 0x26, 0x28, 0xb1, 0x2d, 0x37, 0xf8, 0xb8, 0xc3, 0xeb, 0x80, 0xb8, 0x54, 0x40, 0xc5, 0x27, 0x52, 0x99, 0xd5, 0x75, 0x21, 0xd7, 0x24, 0x25,
0x1c, 0x28, 0x45, 0x36, 0xb3, 0xc2, 0x85, 0x2c, 0x46, 0x36, 0x46, 0x74, 0xd4, 0x2c, 0x45, 0x47, 0xdc, 0xf2, 0xa2, 0x18, 0x57, 0x00, 0x95, 0xc8, 0x66, 0x49, 0xba, 0x90, 0xe5, 0xc8, 0xc6, 0x8a,
0x1b, 0xb0, 0x90, 0x4d, 0xa3, 0x21, 0xf1, 0x07, 0x34, 0x66, 0xf3, 0x06, 0x11, 0x3f, 0x9d, 0xa6, 0x8e, 0x5a, 0x95, 0xe8, 0x68, 0x1b, 0x56, 0xf3, 0x79, 0x3c, 0x62, 0xe3, 0x21, 0x4f, 0x70, 0xde,
0x5b, 0x84, 0x79, 0x1c, 0x47, 0x32, 0x1a, 0x11, 0xca, 0xf5, 0x42, 0xd3, 0x55, 0x4d, 0xa6, 0x62, 0x30, 0x16, 0xa7, 0xd3, 0xf2, 0xcb, 0xb0, 0x88, 0xe3, 0x58, 0xce, 0x63, 0xc6, 0x85, 0x5e, 0x68,
0xf9, 0x10, 0x21, 0xf4, 0x2d, 0x57, 0xb6, 0xf0, 0xf7, 0xb9, 0xa9, 0xd3, 0xa1, 0xda, 0x0b, 0x7e, 0xf9, 0xba, 0x89, 0x2a, 0x56, 0x0c, 0x91, 0x42, 0xdf, 0xf6, 0x55, 0x8b, 0x7e, 0x5f, 0x98, 0x3a,
0x0f, 0xd1, 0x15, 0x68, 0x89, 0xf9, 0xb3, 0x13, 0x4f, 0x05, 0x95, 0x1c, 0x38, 0x3c, 0xf1, 0x58, 0x13, 0xaa, 0x7d, 0x2e, 0xee, 0x21, 0xb9, 0x02, 0x6d, 0x39, 0x7f, 0x7e, 0x12, 0xe8, 0xa0, 0x52,
0x24, 0x62, 0x6d, 0x49, 0x48, 0x7c, 0x9b, 0x63, 0x7b, 0x62, 0x47, 0x37, 0x61, 0x5e, 0x05, 0x81, 0x00, 0x87, 0x27, 0x01, 0x46, 0x22, 0xce, 0x96, 0xa4, 0xc4, 0x77, 0x04, 0xb6, 0x27, 0x77, 0xf4,
0xd9, 0x20, 0x24, 0xc7, 0x54, 0xb9, 0xce, 0xd1, 0x64, 0xcc, 0xa6, 0xcb, 0xf6, 0xc9, 0x31, 0xc5, 0x16, 0xac, 0xe8, 0x20, 0x30, 0x1f, 0x46, 0xec, 0x98, 0x6b, 0xd7, 0x39, 0x9e, 0x4d, 0x71, 0xba,
0xcf, 0x60, 0x49, 0xde, 0xb6, 0xcf, 0x13, 0xa2, 0xa6, 0xfe, 0x66, 0x51, 0x9b, 0x0b, 0x73, 0xbb, 0x7c, 0x9f, 0x1d, 0x73, 0xfa, 0x08, 0xd6, 0xd5, 0x6d, 0xfb, 0x2c, 0x65, 0x7a, 0xea, 0x6f, 0x96,
0x2c, 0xa5, 0xc8, 0xf4, 0xf7, 0x0b, 0x2a, 0x1e, 0xbb, 0x80, 0x64, 0xf7, 0xc3, 0x30, 0xce, 0x88, 0xb5, 0xb9, 0x34, 0xb7, 0x1b, 0x4a, 0x8a, 0x6c, 0x7f, 0xbf, 0xa4, 0xe2, 0xa9, 0x0f, 0x44, 0x75,
0x24, 0x88, 0xa1, 0x33, 0x0c, 0xe3, 0xac, 0x18, 0x14, 0x98, 0x18, 0xe3, 0x5b, 0x36, 0x19, 0x0e, 0xdf, 0x8b, 0x92, 0x9c, 0x29, 0x82, 0x14, 0xba, 0xa3, 0x28, 0xc9, 0xcb, 0x41, 0x81, 0x8d, 0x21,
0xd9, 0x2d, 0x15, 0x06, 0x5b, 0x35, 0xf1, 0x5f, 0x3a, 0xb0, 0xcc, 0xa9, 0x29, 0xbd, 0xa0, 0xbd, 0xdf, 0xf2, 0xd9, 0x68, 0x84, 0xb7, 0x54, 0x1a, 0x6c, 0xdd, 0xa4, 0x7f, 0xe1, 0xc1, 0x86, 0xa0,
0xbc, 0x8b, 0x2f, 0xb3, 0x33, 0x34, 0x83, 0x94, 0x15, 0x68, 0x1c, 0xc7, 0xe9, 0x90, 0xc8, 0x99, 0xa6, 0xf5, 0x82, 0xf1, 0xf2, 0x5e, 0x7f, 0x99, 0xdd, 0x91, 0x1d, 0xa4, 0x6c, 0xc2, 0xe2, 0x71,
0x44, 0xe3, 0xa7, 0xe1, 0xb7, 0xfe, 0x8b, 0x03, 0x4b, 0x7c, 0xa9, 0x87, 0xd4, 0xa3, 0x93, 0x4c, 0x92, 0x8d, 0x98, 0x9a, 0x49, 0x36, 0x7e, 0x16, 0x7e, 0xeb, 0x3f, 0x7b, 0xb0, 0x2e, 0x96, 0x7a,
0x6e, 0xff, 0xe7, 0xa1, 0xcb, 0xb6, 0x4a, 0x94, 0xa8, 0xcb, 0x85, 0xae, 0xe8, 0x5b, 0xc9, 0x51, 0xc8, 0x03, 0x3e, 0xcb, 0xd5, 0xf6, 0x7f, 0x1e, 0x7a, 0xb8, 0x55, 0xa6, 0x45, 0x5d, 0x2d, 0x74,
0x31, 0x78, 0xef, 0x92, 0x6b, 0x0f, 0x46, 0x9f, 0x40, 0xc7, 0x8c, 0xe4, 0xf9, 0x9a, 0xdb, 0x3b, 0xd3, 0xdc, 0x4a, 0x81, 0xca, 0xc1, 0x7b, 0x17, 0x7c, 0x77, 0x30, 0xf9, 0x08, 0xba, 0x76, 0x24,
0x97, 0xd5, 0x2e, 0x4b, 0x92, 0xb3, 0x77, 0xc9, 0xb5, 0x3e, 0x40, 0xf7, 0x01, 0xb8, 0x9d, 0xe5, 0x2f, 0xd6, 0xdc, 0xd9, 0xbd, 0xac, 0x77, 0x59, 0x91, 0x9c, 0xbd, 0x0b, 0xbe, 0xf3, 0x01, 0xb9,
0x64, 0x65, 0x50, 0x77, 0xd9, 0x66, 0x92, 0x71, 0x58, 0x7b, 0x97, 0x5c, 0x63, 0xf8, 0x83, 0x26, 0x0d, 0x20, 0xec, 0xac, 0x20, 0xab, 0x82, 0xba, 0xcb, 0x2e, 0x93, 0xac, 0xc3, 0xda, 0xbb, 0xe0,
0xcc, 0x0a, 0xc3, 0x80, 0x9f, 0x42, 0xd7, 0x5a, 0xa9, 0xe5, 0x8f, 0x77, 0x84, 0x3f, 0x5e, 0x0a, 0x5b, 0xc3, 0xef, 0xb6, 0x60, 0x49, 0x1a, 0x06, 0xfa, 0x31, 0xf4, 0x9c, 0x95, 0x3a, 0xfe, 0x78,
0xd7, 0x6a, 0x15, 0xe1, 0xda, 0x9f, 0xd5, 0x00, 0x31, 0x69, 0x2b, 0x1c, 0xe7, 0x87, 0x30, 0x2f, 0x57, 0xfa, 0xe3, 0x95, 0x70, 0xad, 0x51, 0x13, 0xae, 0xfd, 0x69, 0x03, 0x08, 0x4a, 0x5b, 0xe9,
0xd9, 0x6f, 0xbb, 0x62, 0x05, 0x94, 0x5b, 0xb0, 0xd8, 0xb7, 0xfc, 0x91, 0x8e, 0x6b, 0x42, 0x68, 0x38, 0xdf, 0x86, 0x15, 0xc5, 0x7e, 0xd7, 0x15, 0x2b, 0xa1, 0xc2, 0x82, 0x25, 0x63, 0xc7, 0x1f,
0x0b, 0x90, 0xd1, 0x54, 0x31, 0xb8, 0xd0, 0xfd, 0x15, 0x3d, 0x4c, 0x49, 0x09, 0x67, 0x42, 0x45, 0xe9, 0xfa, 0x36, 0x44, 0x6e, 0x02, 0xb1, 0x9a, 0x3a, 0x06, 0x97, 0xba, 0xbf, 0xa6, 0x07, 0x95,
0x9f, 0xd2, 0xff, 0xaa, 0xf3, 0xf3, 0xad, 0xec, 0xe3, 0x29, 0x9f, 0x09, 0x0b, 0xf0, 0x3d, 0xaa, 0x94, 0x74, 0x26, 0x74, 0xf4, 0xa9, 0xfc, 0xaf, 0xa6, 0x38, 0xdf, 0xda, 0x3e, 0x91, 0xf2, 0x99,
0x3c, 0x16, 0xd5, 0x2e, 0x0a, 0xd2, 0xec, 0x7b, 0x05, 0x69, 0xae, 0x24, 0x48, 0x3f, 0x72, 0x60, 0x61, 0x80, 0x1f, 0x70, 0xed, 0xb1, 0xe8, 0x76, 0x59, 0x90, 0x96, 0x5e, 0x29, 0x48, 0xcb, 0x15,
0x91, 0xf1, 0xc8, 0x92, 0xa3, 0x7b, 0xc0, 0xc5, 0xf8, 0x82, 0x62, 0x64, 0x8d, 0xfd, 0xc9, 0xa5, 0x41, 0xfa, 0xb1, 0x07, 0x6b, 0xc8, 0x23, 0x47, 0x8e, 0x3e, 0x04, 0x21, 0xc6, 0xaf, 0x29, 0x46,
0xe8, 0x2e, 0xb4, 0x38, 0xc1, 0x38, 0x21, 0x91, 0x14, 0xa2, 0x9e, 0x2d, 0x44, 0xb9, 0x06, 0xd9, 0xce, 0xd8, 0x9f, 0x5e, 0x8a, 0x3e, 0x80, 0xb6, 0x20, 0x98, 0xa4, 0x2c, 0x56, 0x42, 0xd4, 0x77,
0xbb, 0xe4, 0xe6, 0x83, 0x0d, 0x11, 0xfa, 0x27, 0x07, 0xda, 0x72, 0x99, 0xff, 0x6b, 0x37, 0xb8, 0x85, 0xa8, 0xd0, 0x20, 0x7b, 0x17, 0xfc, 0x62, 0xb0, 0x25, 0x42, 0xff, 0xe8, 0x41, 0x47, 0x2d,
0x0f, 0x4d, 0x26, 0x4d, 0x86, 0x97, 0xa9, 0xdb, 0x4c, 0x4b, 0x8f, 0x59, 0x14, 0xc2, 0xcc, 0x92, 0xf3, 0x7f, 0xec, 0x06, 0x0f, 0xa0, 0x85, 0xd2, 0x64, 0x79, 0x99, 0xa6, 0x8d, 0x5a, 0x7a, 0x8a,
0xe5, 0x02, 0x17, 0x61, 0x66, 0x63, 0xb8, 0xb2, 0xcc, 0x06, 0x34, 0x08, 0x07, 0xaa, 0x57, 0x26, 0x51, 0x08, 0x9a, 0x25, 0xc7, 0x05, 0x2e, 0xc3, 0x68, 0x63, 0x84, 0xb2, 0xcc, 0x87, 0x3c, 0x8c,
0xbd, 0xaa, 0xba, 0x98, 0xce, 0xc8, 0xa8, 0x37, 0x22, 0xd2, 0x7c, 0x88, 0x06, 0x5e, 0x87, 0x55, 0x86, 0xba, 0x57, 0x25, 0xbd, 0xea, 0xba, 0x50, 0x67, 0xe4, 0x3c, 0x98, 0x30, 0x65, 0x3e, 0x64,
0xb9, 0x21, 0x5b, 0x9a, 0xf1, 0x7f, 0x02, 0xac, 0x15, 0x7b, 0xb4, 0xfb, 0x23, 0x7d, 0xba, 0x30, 0x83, 0x5e, 0x82, 0x8b, 0x6a, 0x43, 0xae, 0x34, 0xd3, 0xff, 0x00, 0xd8, 0x2a, 0xf7, 0x18, 0xf7,
0x18, 0x1f, 0xc5, 0xda, 0x3d, 0x74, 0x4c, 0x77, 0xcf, 0xea, 0x42, 0xc7, 0xb0, 0xaa, 0xac, 0x24, 0x47, 0xf9, 0x74, 0x51, 0x38, 0x3d, 0x4a, 0x8c, 0x7b, 0xe8, 0xd9, 0xee, 0x9e, 0xd3, 0x45, 0x8e,
0xe3, 0x68, 0x6e, 0x13, 0x6b, 0xdc, 0xbc, 0xdf, 0xb6, 0x25, 0xa0, 0x30, 0x9f, 0x82, 0xcd, 0x2b, 0xe1, 0xa2, 0xb6, 0x92, 0xc8, 0xd1, 0xc2, 0x26, 0x36, 0x84, 0x79, 0xbf, 0xe5, 0x4a, 0x40, 0x69,
0x57, 0x4d, 0x0e, 0x8d, 0xa0, 0xa7, 0xad, 0xb1, 0xd4, 0xcd, 0x86, 0xc5, 0x66, 0x53, 0x7d, 0xed, 0x3e, 0x0d, 0xdb, 0x57, 0xae, 0x9e, 0x1c, 0x99, 0x40, 0xdf, 0x58, 0x63, 0xa5, 0x9b, 0x2d, 0x8b,
0xdd, 0x53, 0x71, 0x3d, 0xe2, 0x2b, 0xf4, 0x5c, 0x62, 0xe8, 0x35, 0x5c, 0x53, 0x7d, 0x5c, 0xf7, 0x8d, 0x53, 0x7d, 0xed, 0xe5, 0x53, 0x09, 0x3d, 0x32, 0xd6, 0xe8, 0xb9, 0xc4, 0xc8, 0x33, 0x78,
0x96, 0xa7, 0xab, 0x5f, 0x64, 0x67, 0x4f, 0xd8, 0xb7, 0xf6, 0x9c, 0xef, 0xa1, 0xdb, 0xff, 0x7b, 0x53, 0xf7, 0x09, 0xdd, 0x5b, 0x9d, 0xae, 0xf9, 0x3a, 0x3b, 0x7b, 0x88, 0xdf, 0xba, 0x73, 0xbe,
0x07, 0xe6, 0x6d, 0x6a, 0x4c, 0x6a, 0x64, 0x90, 0xa0, 0x74, 0x83, 0xf2, 0x71, 0x0a, 0x70, 0x39, 0x82, 0xee, 0xe0, 0xef, 0x3c, 0x58, 0x71, 0xa9, 0xa1, 0xd4, 0xa8, 0x20, 0x41, 0xeb, 0x06, 0xed,
0xcc, 0xa9, 0x55, 0x85, 0x39, 0x66, 0x30, 0x33, 0xf3, 0xbe, 0x60, 0xa6, 0x7e, 0xb1, 0x60, 0xa6, 0xe3, 0x94, 0xe0, 0x6a, 0x98, 0xd3, 0xa8, 0x0b, 0x73, 0xec, 0x60, 0x66, 0xe1, 0x55, 0xc1, 0x4c,
0x51, 0x15, 0xcc, 0xf4, 0xff, 0xb4, 0x06, 0xa8, 0x7c, 0xba, 0xe8, 0x89, 0x88, 0xb3, 0x22, 0x12, 0xf3, 0xf5, 0x82, 0x99, 0xc5, 0xba, 0x60, 0x66, 0xf0, 0x27, 0x0d, 0x20, 0xd5, 0xd3, 0x25, 0x0f,
0x4a, 0x15, 0xf1, 0xd1, 0x85, 0x04, 0x44, 0xc1, 0xea, 0x63, 0x26, 0xa8, 0xa6, 0x0a, 0x30, 0x9d, 0x65, 0x9c, 0x15, 0xb3, 0x48, 0xa9, 0x88, 0x77, 0x5f, 0x4b, 0x40, 0x34, 0xac, 0x3f, 0x46, 0x41,
0x8d, 0xae, 0x5b, 0xd5, 0x85, 0x36, 0x61, 0x31, 0xbf, 0x3b, 0x61, 0xae, 0x2b, 0x1a, 0x6e, 0x09, 0xb5, 0x55, 0x80, 0xed, 0x6c, 0xf4, 0xfc, 0xba, 0x2e, 0x72, 0x03, 0xd6, 0x8a, 0xbb, 0x13, 0x15,
0x2f, 0x44, 0x62, 0xf5, 0xf7, 0x47, 0x62, 0x8d, 0xf7, 0x47, 0x62, 0xb3, 0xc5, 0x48, 0xac, 0xff, 0xba, 0x62, 0xd1, 0xaf, 0xe0, 0xa5, 0x48, 0xac, 0xf9, 0xea, 0x48, 0x6c, 0xf1, 0xd5, 0x91, 0xd8,
0x06, 0xba, 0x96, 0x80, 0xfc, 0xd4, 0x98, 0x53, 0xf4, 0x69, 0x84, 0x28, 0x58, 0x58, 0xff, 0x3f, 0x52, 0x39, 0x12, 0x1b, 0x3c, 0x87, 0x9e, 0x23, 0x20, 0x3f, 0x33, 0xe6, 0x94, 0x7d, 0x1a, 0x29,
0x6a, 0x80, 0xca, 0x32, 0xfa, 0xff, 0xb9, 0x04, 0x2e, 0x70, 0x96, 0x9a, 0x99, 0x91, 0x02, 0x67, 0x0a, 0x0e, 0x36, 0xf8, 0xf7, 0x06, 0x90, 0xaa, 0x8c, 0xfe, 0x5f, 0x2e, 0x41, 0x08, 0x9c, 0xa3,
0x29, 0x98, 0xff, 0x4b, 0xc5, 0xf9, 0x11, 0x2c, 0xa5, 0x64, 0x18, 0x9f, 0x92, 0xd4, 0x88, 0x85, 0x66, 0x16, 0x94, 0xc0, 0x39, 0x0a, 0xe6, 0x7f, 0x53, 0x71, 0xbe, 0x0b, 0xeb, 0x19, 0x1b, 0x25,
0xc5, 0x41, 0x95, 0x3b, 0x98, 0x53, 0x67, 0x47, 0x9f, 0x4d, 0x2b, 0xe7, 0x6f, 0x58, 0x8f, 0x62, 0xa7, 0x2c, 0xb3, 0x62, 0x61, 0x79, 0x50, 0xd5, 0x0e, 0x74, 0xea, 0xdc, 0xe8, 0xb3, 0xe5, 0xe4,
0x10, 0xfa, 0x4d, 0x58, 0x11, 0x4f, 0x2c, 0x0f, 0x04, 0x29, 0xe5, 0x57, 0xdc, 0x80, 0xce, 0x99, 0xfc, 0x2d, 0xeb, 0x51, 0x0e, 0x42, 0xbf, 0x09, 0x9b, 0xf2, 0x89, 0xe5, 0xae, 0x24, 0xa5, 0xfd,
0x48, 0xbf, 0x0d, 0xe2, 0x28, 0x9c, 0x4a, 0x43, 0xd3, 0x96, 0xd8, 0xe7, 0x51, 0x38, 0xc5, 0x77, 0x8a, 0xeb, 0xd0, 0x3d, 0x93, 0xe9, 0xb7, 0x61, 0x12, 0x47, 0x73, 0x65, 0x68, 0x3a, 0x0a, 0xfb,
0x60, 0xb5, 0xf0, 0x69, 0x9e, 0x17, 0xb2, 0xd5, 0xb3, 0x6a, 0x32, 0xc5, 0x2f, 0xcf, 0xc3, 0x9e, 0x2c, 0x8e, 0xe6, 0xf4, 0x47, 0x1e, 0x5c, 0x2c, 0x7d, 0x5b, 0x64, 0xd9, 0xa5, 0x42, 0x76, 0xb5,
0x0e, 0xef, 0xc0, 0x5a, 0xb1, 0xe3, 0xbd, 0xc4, 0x3e, 0x01, 0xf4, 0xed, 0x09, 0x49, 0xa7, 0x3c, 0xb4, 0x0b, 0xe2, 0x16, 0xd5, 0x6d, 0xb0, 0xb6, 0x28, 0xcd, 0x56, 0xb5, 0x03, 0x59, 0x38, 0x8b,
0xc5, 0xae, 0xb3, 0x98, 0xeb, 0xc5, 0x58, 0x77, 0x36, 0x99, 0x1c, 0x7d, 0x8b, 0x4c, 0xd5, 0xcb, 0xab, 0xe3, 0xe5, 0xc1, 0xd4, 0x75, 0xa1, 0x95, 0x51, 0x87, 0xef, 0xee, 0x8d, 0xee, 0xc2, 0x56,
0x44, 0x4d, 0xbf, 0x4c, 0xe0, 0xfb, 0xb0, 0x6c, 0x11, 0xd0, 0x6f, 0x04, 0xb3, 0x3c, 0x4d, 0xaf, 0xb9, 0xa3, 0xc8, 0x68, 0xb9, 0x4b, 0xd6, 0x4d, 0xfa, 0x11, 0x90, 0x6f, 0xcf, 0x58, 0x36, 0x17,
0xe2, 0x40, 0x3b, 0x95, 0x2f, 0xfb, 0xf0, 0x1f, 0x3a, 0x30, 0xb3, 0x17, 0x27, 0x66, 0x7a, 0xc6, 0xf9, 0x7c, 0x93, 0x32, 0xbd, 0x54, 0x0e, 0xac, 0x97, 0xd2, 0xd9, 0xd1, 0xb7, 0xd8, 0x5c, 0x3f,
0xb1, 0xd3, 0x33, 0x52, 0xef, 0x0d, 0xb4, 0x5a, 0xab, 0xc9, 0xab, 0x68, 0x82, 0x4c, 0x6b, 0x79, 0x83, 0x34, 0xcc, 0x33, 0x08, 0xbd, 0x0d, 0x1b, 0x0e, 0x01, 0xc3, 0xaa, 0x25, 0xf1, 0x26, 0xa0,
0x63, 0xca, 0x22, 0xa1, 0xe3, 0x38, 0x3d, 0xf3, 0x52, 0x5f, 0xca, 0x5a, 0x01, 0x65, 0xcb, 0xcf, 0x83, 0x4e, 0xf7, 0xdd, 0x40, 0xf5, 0xd1, 0x3f, 0xf4, 0x60, 0x61, 0x2f, 0x49, 0xed, 0x5c, 0x90,
0x6f, 0x3c, 0xfb, 0xc9, 0x6c, 0x3d, 0xcf, 0x51, 0x4d, 0x65, 0xf0, 0x26, 0x5b, 0xf8, 0x87, 0x0e, 0xe7, 0xe6, 0x82, 0x94, 0x92, 0x1d, 0x1a, 0x1d, 0xda, 0x50, 0xf7, 0xde, 0x06, 0x51, 0x45, 0x06,
0x34, 0xf8, 0x5a, 0x99, 0x80, 0x0a, 0xc3, 0xc8, 0x5f, 0x9b, 0x78, 0x0a, 0xcc, 0x11, 0x02, 0x5a, 0x53, 0x8e, 0x61, 0xd7, 0x71, 0x92, 0x9d, 0x05, 0xd9, 0x58, 0xf1, 0xaf, 0x84, 0xe2, 0xf2, 0x0b,
0x80, 0x0b, 0x6f, 0x50, 0xb5, 0xe2, 0x1b, 0x14, 0x8b, 0x15, 0x45, 0x2b, 0x7f, 0xdc, 0xc9, 0x01, 0xf5, 0x82, 0x3f, 0xd1, 0xb1, 0x10, 0x09, 0xb1, 0xb9, 0x8a, 0x14, 0x55, 0x8b, 0xfe, 0xd0, 0x83,
0x74, 0x0d, 0xea, 0x27, 0x71, 0xa2, 0xcc, 0x0f, 0xa8, 0x9c, 0x47, 0x9c, 0xb8, 0x1c, 0xc7, 0x9b, 0x45, 0xb1, 0x56, 0xbc, 0x0d, 0xf2, 0x7c, 0xc5, 0xd3, 0x96, 0xc8, 0xb7, 0x79, 0xf2, 0x36, 0x94,
0xb0, 0xf0, 0x2c, 0xf6, 0x89, 0x11, 0x36, 0x9f, 0x7b, 0x4c, 0xf8, 0xd7, 0x1d, 0x68, 0xaa, 0xc1, 0xe0, 0xd2, 0x83, 0x57, 0xa3, 0xfc, 0xe0, 0x85, 0x81, 0xa9, 0x6c, 0x15, 0x2f, 0x49, 0x05, 0x40,
0x68, 0x03, 0xea, 0xcc, 0x8c, 0x14, 0x7c, 0x36, 0x9d, 0xb9, 0x64, 0xe3, 0x5c, 0x3e, 0x82, 0xdd, 0xde, 0x84, 0xe6, 0x49, 0x92, 0x6a, 0x5b, 0x07, 0x3a, 0xc1, 0x92, 0xa4, 0xbe, 0xc0, 0xe9, 0x0d,
0x6a, 0x1e, 0xb8, 0xe5, 0x36, 0x5e, 0x85, 0x6d, 0xb9, 0xfd, 0x64, 0xbe, 0x32, 0x5f, 0x73, 0xc1, 0x58, 0x7d, 0x94, 0x8c, 0x99, 0x15, 0xa3, 0x9f, 0x7b, 0x4c, 0xf4, 0xd7, 0x3d, 0x68, 0xe9, 0xc1,
0xd0, 0x14, 0x50, 0xfc, 0x57, 0x0e, 0x74, 0xad, 0x39, 0x98, 0xf7, 0x1c, 0x7a, 0x19, 0x95, 0xd9, 0x64, 0x1b, 0x9a, 0x68, 0xb3, 0x4a, 0x0e, 0xa2, 0x49, 0x93, 0xe2, 0x38, 0x5f, 0x8c, 0x40, 0x15,
0x1e, 0xc9, 0x44, 0x13, 0x32, 0x53, 0x2c, 0x35, 0x3b, 0xc5, 0xa2, 0x43, 0xfc, 0x19, 0x33, 0xc4, 0x22, 0xa2, 0xc4, 0xc2, 0xa1, 0xd0, 0x31, 0x62, 0x61, 0xac, 0xd1, 0x31, 0x17, 0x6b, 0x2e, 0x59,
0xbf, 0x0d, 0x2d, 0x99, 0x4f, 0x21, 0x8a, 0x6f, 0xea, 0xb6, 0xb2, 0x19, 0x55, 0x4e, 0x36, 0x1f, 0xb5, 0x12, 0x4a, 0xff, 0xd2, 0x83, 0x9e, 0x33, 0x07, 0xba, 0xea, 0x51, 0x90, 0x73, 0x95, 0x5a,
0xc4, 0xe8, 0x0c, 0xe3, 0x30, 0x4e, 0xe5, 0xb3, 0x98, 0x68, 0xe0, 0xfb, 0xd0, 0x36, 0xc6, 0xb3, 0x52, 0x4c, 0xb4, 0x21, 0x3b, 0x9f, 0xd3, 0x70, 0xf3, 0x39, 0x26, 0x9f, 0xb0, 0x60, 0xe7, 0x13,
0x65, 0x44, 0x84, 0x9e, 0xc5, 0xe9, 0x2b, 0x95, 0xe9, 0x91, 0x4d, 0xfd, 0x16, 0x51, 0xcb, 0xdf, 0x6e, 0x41, 0x5b, 0x25, 0x6f, 0x98, 0xe6, 0x9b, 0x56, 0x0d, 0x38, 0xa3, 0x4e, 0x00, 0x17, 0x83,
0x22, 0xf0, 0x5f, 0x3b, 0xd0, 0x65, 0x92, 0x12, 0x44, 0xa3, 0x83, 0x38, 0x0c, 0x86, 0x53, 0x2e, 0x90, 0xce, 0x28, 0x89, 0x92, 0x4c, 0xbd, 0xc1, 0xc9, 0x06, 0xbd, 0x0d, 0x1d, 0x6b, 0x3c, 0x2e,
0x31, 0x4a, 0x28, 0x06, 0x3e, 0x09, 0xa9, 0xa7, 0x25, 0xc6, 0x86, 0x99, 0xbd, 0x1e, 0x07, 0x11, 0x23, 0x66, 0xfc, 0x2c, 0xc9, 0x9e, 0xea, 0xb4, 0x92, 0x6a, 0x9a, 0x87, 0x8f, 0x46, 0xf1, 0xf0,
0xd7, 0x22, 0x52, 0x5e, 0x74, 0x9b, 0x49, 0x3e, 0x33, 0x26, 0x47, 0x5e, 0x46, 0x06, 0x63, 0xe6, 0x41, 0xff, 0xca, 0x83, 0x1e, 0x4a, 0x4a, 0x18, 0x4f, 0x0e, 0x92, 0x28, 0x1c, 0xcd, 0x85, 0xc4,
0xeb, 0x4b, 0xf5, 0x69, 0x81, 0x4c, 0x29, 0x32, 0x20, 0xf5, 0x28, 0x19, 0x8c, 0x83, 0x30, 0x0c, 0x68, 0xa1, 0x18, 0x8e, 0x59, 0xc4, 0x03, 0x23, 0x31, 0x2e, 0x8c, 0xce, 0xc1, 0x34, 0x8c, 0x85,
0xc4, 0x58, 0x21, 0xe1, 0x55, 0x5d, 0xf8, 0x6f, 0x6b, 0xd0, 0x96, 0x6a, 0xe2, 0xb1, 0x3f, 0x12, 0xca, 0x52, 0xf2, 0x62, 0xda, 0x28, 0xf9, 0x68, 0xb9, 0x8e, 0x82, 0x9c, 0x0d, 0xa7, 0x18, 0x58,
0x69, 0x49, 0xe9, 0x44, 0xe8, 0xeb, 0x67, 0x20, 0xaa, 0xdf, 0x72, 0x3b, 0x0c, 0xa4, 0x78, 0xac, 0x28, 0x5d, 0xed, 0x80, 0xa8, 0x3e, 0x10, 0xc8, 0x02, 0xce, 0x86, 0xd3, 0x30, 0x8a, 0x42, 0x39,
0x33, 0xe5, 0x63, 0xbd, 0x0a, 0x2d, 0x26, 0x5e, 0x77, 0xb8, 0x7f, 0x23, 0x9e, 0x7f, 0x73, 0x40, 0x56, 0x4a, 0x78, 0x5d, 0x17, 0xfd, 0x9b, 0x06, 0x74, 0x94, 0x9a, 0x78, 0x30, 0x9e, 0xc8, 0x1c,
0xf5, 0xee, 0xf0, 0xde, 0x46, 0xde, 0xcb, 0x01, 0xcb, 0xa3, 0x99, 0x2d, 0x78, 0x34, 0x77, 0xa1, 0xa8, 0xf2, 0x58, 0xcc, 0xf5, 0xb3, 0x10, 0xdd, 0xef, 0xf8, 0x38, 0x16, 0x52, 0x3e, 0xd6, 0x85,
0x23, 0xc9, 0x70, 0xbe, 0xf3, 0x58, 0x26, 0x17, 0x70, 0xeb, 0x4c, 0x5c, 0x6b, 0xa4, 0xfa, 0x72, 0xea, 0xb1, 0x5e, 0x85, 0x36, 0x8a, 0xd7, 0x7b, 0xc2, 0x99, 0x92, 0x6f, 0xcd, 0x05, 0xa0, 0x7b,
0x47, 0x7d, 0xd9, 0x7c, 0xdf, 0x97, 0x6a, 0x24, 0x5e, 0x85, 0x65, 0xc9, 0xbc, 0xa7, 0xa9, 0x97, 0x77, 0x45, 0xef, 0x62, 0xd1, 0x2b, 0x00, 0xc7, 0x7d, 0x5a, 0x2a, 0xb9, 0x4f, 0x1f, 0x40, 0x57,
0x9c, 0x28, 0xd5, 0xeb, 0xeb, 0xb7, 0x48, 0x0e, 0xa3, 0x4d, 0x68, 0xb0, 0xcf, 0x94, 0xf6, 0xab, 0x91, 0x11, 0x7c, 0x17, 0x81, 0x53, 0x21, 0xe0, 0xce, 0x99, 0xf8, 0xce, 0x48, 0xfd, 0xe5, 0xae,
0xbe, 0x74, 0x62, 0x08, 0xda, 0x80, 0x06, 0xf1, 0x47, 0x44, 0xb9, 0xd4, 0xc8, 0x0e, 0x6d, 0xd8, 0xfe, 0xb2, 0xf5, 0xaa, 0x2f, 0xf5, 0x48, 0x7a, 0x11, 0x36, 0x14, 0xf3, 0x3e, 0xce, 0x82, 0xf4,
0x19, 0xb9, 0x62, 0x00, 0x53, 0x01, 0x0c, 0x2d, 0xa8, 0x00, 0x5b, 0x73, 0xce, 0xb2, 0xe6, 0xa7, 0x44, 0xab, 0xde, 0xb1, 0x79, 0xf8, 0x14, 0x30, 0xb9, 0x01, 0x8b, 0xf8, 0x99, 0xd6, 0x7e, 0xf5,
0x3e, 0x5e, 0x01, 0xf4, 0x4c, 0x48, 0xad, 0x99, 0x68, 0xfb, 0xcd, 0x19, 0x68, 0x1b, 0x30, 0xbb, 0x97, 0x4e, 0x0e, 0x21, 0xdb, 0xb0, 0xc8, 0xc6, 0x13, 0xa6, 0xfd, 0x77, 0xe2, 0xc6, 0x51, 0x78,
0xcd, 0x23, 0xb6, 0xe0, 0x81, 0x1f, 0x78, 0x63, 0x42, 0x49, 0x2a, 0x25, 0xb5, 0x80, 0x72, 0x05, 0x46, 0xbe, 0x1c, 0x80, 0x2a, 0x00, 0xd1, 0x92, 0x0a, 0x70, 0x35, 0xe7, 0x12, 0x36, 0x3f, 0x19,
0x7b, 0x3a, 0x1a, 0xc4, 0x13, 0x3a, 0xf0, 0xc9, 0x28, 0x25, 0x22, 0x7f, 0xe1, 0xb8, 0x05, 0x94, 0xd3, 0x4d, 0x20, 0x8f, 0xa4, 0xd4, 0xda, 0x59, 0xbd, 0xdf, 0x5c, 0x80, 0x8e, 0x05, 0xe3, 0x6d,
0x8d, 0x1b, 0x7b, 0xaf, 0xcd, 0x71, 0x42, 0x1e, 0x0a, 0xa8, 0x4a, 0x9b, 0x09, 0x1e, 0xd5, 0xf3, 0x9e, 0xe0, 0x82, 0x87, 0xe3, 0x30, 0x98, 0x32, 0xce, 0x32, 0x25, 0xa9, 0x25, 0x54, 0x28, 0xd8,
0xb4, 0x99, 0xe0, 0x48, 0x51, 0x0f, 0x35, 0x2a, 0xf4, 0xd0, 0xc7, 0xb0, 0x26, 0x34, 0x8e, 0xbc, 0xd3, 0xc9, 0x30, 0x99, 0xf1, 0xe1, 0x98, 0x4d, 0x32, 0x26, 0x0d, 0x9a, 0xe7, 0x97, 0x50, 0x1c,
0x9b, 0x83, 0x82, 0x98, 0x9c, 0xd3, 0xcb, 0xfc, 0x44, 0xb6, 0x66, 0x25, 0xe0, 0x59, 0xf0, 0x7d, 0x37, 0x0d, 0x9e, 0xd9, 0xe3, 0xa4, 0x3c, 0x94, 0x50, 0x9d, 0xa3, 0x93, 0x3c, 0x6a, 0x16, 0x39,
0x11, 0x04, 0x3b, 0x6e, 0x09, 0x67, 0x63, 0xd9, 0x75, 0xb4, 0xc6, 0x8a, 0xbc, 0x7d, 0x09, 0xe7, 0x3a, 0xc9, 0x91, 0xb2, 0x1e, 0x5a, 0xac, 0xd1, 0x43, 0xef, 0xc3, 0x96, 0xd4, 0x38, 0xea, 0x6e,
0x63, 0xbd, 0xd7, 0xf6, 0xd8, 0x96, 0x1c, 0x5b, 0xc0, 0x71, 0x17, 0xda, 0x87, 0x34, 0x4e, 0xd4, 0x0e, 0x4b, 0x62, 0x72, 0x4e, 0x2f, 0x3a, 0xa5, 0xb8, 0x66, 0x2d, 0xe0, 0x79, 0xf8, 0x7d, 0x19,
0xa1, 0xcc, 0x43, 0x47, 0x34, 0xe5, 0x5b, 0xcd, 0x15, 0xb8, 0xcc, 0xa5, 0xe8, 0x79, 0x9c, 0xc4, 0x71, 0x7b, 0x7e, 0x05, 0xc7, 0xb1, 0x78, 0x1d, 0x9d, 0xb1, 0xf2, 0x91, 0xa0, 0x82, 0x8b, 0xb1,
0x61, 0x3c, 0x9a, 0x1e, 0x4e, 0x8e, 0xb2, 0x61, 0x1a, 0x24, 0xcc, 0xdd, 0xc5, 0xff, 0xe8, 0xc0, 0xc1, 0x33, 0x77, 0x6c, 0x5b, 0x8d, 0x2d, 0xe1, 0xb4, 0x07, 0x9d, 0x43, 0x9e, 0xa4, 0xfa, 0x50,
0xb2, 0xd5, 0x2b, 0x23, 0xf4, 0x9f, 0x15, 0x22, 0xad, 0xd3, 0xeb, 0x42, 0xf0, 0x96, 0x0c, 0x75, 0x56, 0xa0, 0x2b, 0x9b, 0xea, 0x61, 0xe8, 0x0a, 0x5c, 0x16, 0x52, 0xf4, 0x38, 0x49, 0x93, 0x28,
0x28, 0x06, 0x8a, 0x7c, 0xc5, 0x0b, 0x99, 0x71, 0xdf, 0x85, 0x05, 0xb5, 0x32, 0xf5, 0xa1, 0x90, 0x99, 0xcc, 0x0f, 0x67, 0x47, 0xf9, 0x28, 0x0b, 0x53, 0xf4, 0xad, 0xe9, 0x3f, 0x78, 0xb0, 0xe1,
0xc2, 0x5e, 0x59, 0x0a, 0xe5, 0xf7, 0xf3, 0xf2, 0x03, 0x45, 0xe2, 0x17, 0x84, 0x2b, 0x48, 0x7c, 0xf4, 0xaa, 0x74, 0xc0, 0xff, 0x97, 0x22, 0x6d, 0x72, 0xf9, 0x52, 0xf0, 0xd6, 0x2d, 0x75, 0x28,
0xbe, 0x47, 0x15, 0xad, 0xf5, 0xd5, 0xf7, 0xa6, 0xfb, 0xa9, 0x56, 0x30, 0xd4, 0x60, 0x86, 0x7f, 0x07, 0xca, 0xe4, 0xc8, 0xe7, 0x2a, 0xbd, 0x7f, 0x07, 0x56, 0xf5, 0xca, 0xf4, 0x87, 0x52, 0x0a,
0xc7, 0x01, 0xc8, 0x57, 0xc7, 0x04, 0x23, 0x57, 0xe9, 0x0e, 0x4f, 0x56, 0x1a, 0xea, 0xfb, 0x06, 0xfb, 0x55, 0x29, 0x54, 0xdf, 0xaf, 0xa8, 0x0f, 0x34, 0x89, 0x5f, 0x90, 0x7e, 0x27, 0x1b, 0x8b,
0x74, 0x74, 0xf2, 0x37, 0xb7, 0x12, 0x6d, 0x85, 0x31, 0x0f, 0xe5, 0x16, 0x2c, 0x8c, 0xc2, 0xf8, 0x3d, 0xea, 0xd0, 0x70, 0xa0, 0xbf, 0xb7, 0x7d, 0x5d, 0xbd, 0x82, 0x91, 0x01, 0x73, 0xfa, 0x3b,
0x88, 0xdb, 0x5c, 0xfe, 0x2c, 0x98, 0xc9, 0x17, 0xab, 0x79, 0x01, 0x3f, 0x91, 0x68, 0x6e, 0x52, 0x1e, 0x40, 0xb1, 0x3a, 0x14, 0x8c, 0x42, 0xa5, 0x7b, 0x22, 0x33, 0x6a, 0xa9, 0xef, 0xeb, 0xd0,
0xea, 0x86, 0x49, 0xc1, 0xbf, 0x5b, 0xd3, 0x69, 0xc9, 0x7c, 0xcf, 0xe7, 0xde, 0x32, 0xb4, 0x53, 0x35, 0x99, 0xe6, 0xc2, 0x4a, 0x74, 0x34, 0x86, 0x1e, 0xca, 0x3b, 0xb0, 0x3a, 0x89, 0x92, 0x23,
0x52, 0x8e, 0xe7, 0x64, 0x01, 0x79, 0x52, 0xe2, 0xe0, 0xbd, 0x41, 0xda, 0x7d, 0x98, 0x4f, 0x85, 0x61, 0x73, 0xc5, 0x1b, 0x64, 0xae, 0x9e, 0xc7, 0x56, 0x24, 0xfc, 0x50, 0xa1, 0x85, 0x49, 0x69,
0xf6, 0x51, 0xaa, 0xa9, 0xfe, 0x0e, 0xd5, 0xd4, 0x4d, 0x2d, 0xbb, 0xf3, 0x33, 0xb0, 0xe8, 0xf9, 0x5a, 0x26, 0x85, 0xfe, 0x6e, 0xc3, 0xe4, 0x40, 0x8b, 0x3d, 0x9f, 0x7b, 0xcb, 0xc8, 0x6e, 0x45,
0xa7, 0x24, 0xa5, 0x01, 0x77, 0xc2, 0xb9, 0xd1, 0x17, 0x0a, 0x75, 0xc1, 0xc0, 0xb9, 0x2d, 0xbe, 0x39, 0x9e, 0x93, 0x72, 0x14, 0x19, 0x90, 0x83, 0x57, 0x46, 0x84, 0xb7, 0x61, 0x25, 0x93, 0xda,
0x05, 0x0b, 0xf2, 0x95, 0x50, 0x8f, 0x94, 0xc5, 0x1f, 0x39, 0xcc, 0x06, 0xe2, 0x3f, 0x57, 0x19, 0x47, 0xab, 0xa6, 0xe6, 0x4b, 0x54, 0x53, 0x2f, 0x73, 0xec, 0xce, 0xff, 0x83, 0xb5, 0x60, 0x7c,
0x50, 0xfb, 0x0c, 0xcf, 0xe7, 0x88, 0xb9, 0xbb, 0x5a, 0x61, 0x77, 0x5f, 0x95, 0xd9, 0x48, 0x5f, 0xca, 0x32, 0x1e, 0x0a, 0x8f, 0x5f, 0x18, 0x7d, 0xa9, 0x50, 0x57, 0x2d, 0x5c, 0xd8, 0xe2, 0x77,
0x79, 0xfa, 0x32, 0x2f, 0x2c, 0x40, 0x99, 0x3d, 0xb6, 0x59, 0x5a, 0xbf, 0x08, 0x4b, 0xf1, 0x16, 0x60, 0x55, 0x3d, 0x49, 0x9a, 0x91, 0xaa, 0xd2, 0xa4, 0x80, 0x71, 0x20, 0xfd, 0x33, 0x9d, 0x6e,
0x2c, 0x1c, 0x12, 0xba, 0xcb, 0x4e, 0x50, 0x29, 0xc6, 0x2b, 0xd0, 0x8a, 0xc8, 0xd9, 0x40, 0x1c, 0x75, 0xcf, 0xf0, 0x7c, 0x8e, 0xd8, 0xbb, 0x6b, 0x94, 0x76, 0xf7, 0x55, 0x95, 0xfa, 0x1c, 0xeb,
0xb1, 0x30, 0xe3, 0xcd, 0x88, 0x9c, 0xf1, 0x31, 0x18, 0xc1, 0x62, 0x3e, 0x5e, 0xde, 0xba, 0x3f, 0xb0, 0x42, 0x25, 0xa1, 0x25, 0xa8, 0x52, 0xd5, 0x2e, 0x4b, 0x9b, 0xaf, 0xc3, 0x52, 0x7a, 0x13,
0x9e, 0x81, 0xb9, 0x4f, 0xa3, 0xd3, 0x38, 0x18, 0xf2, 0xfc, 0xe2, 0x98, 0x8c, 0x63, 0xf5, 0xde, 0x56, 0x0f, 0x19, 0xbf, 0x83, 0x27, 0xa8, 0x15, 0xe3, 0x15, 0x68, 0xc7, 0xec, 0x6c, 0x28, 0x8f,
0xcf, 0x7e, 0x33, 0xaf, 0x80, 0x3f, 0x65, 0x25, 0x54, 0x26, 0xfe, 0x54, 0x93, 0x59, 0xc8, 0x34, 0x58, 0x9a, 0xf1, 0x56, 0xcc, 0xce, 0xc4, 0x18, 0x4a, 0x60, 0xad, 0x18, 0xaf, 0x6e, 0xdd, 0x8f,
0xaf, 0x71, 0x11, 0xd2, 0x66, 0x20, 0xcc, 0xc7, 0x4c, 0xcd, 0xb2, 0x1d, 0xd9, 0xca, 0x0b, 0x26, 0x16, 0x60, 0xf9, 0x93, 0xf8, 0x34, 0x09, 0x47, 0x22, 0x99, 0x39, 0x65, 0xd3, 0x44, 0x17, 0x17,
0x1a, 0x46, 0xc1, 0x04, 0xcf, 0x46, 0x8b, 0x57, 0x3a, 0x7e, 0x24, 0x4d, 0x57, 0x35, 0xb9, 0x2f, 0xe0, 0x6f, 0xf4, 0x0a, 0xc4, 0xbb, 0x59, 0xca, 0x55, 0x96, 0x51, 0x37, 0xd1, 0x42, 0x66, 0x45,
0x9c, 0x12, 0x11, 0xf5, 0x72, 0x5b, 0x3b, 0x27, 0x7d, 0x61, 0x13, 0x64, 0xf6, 0x58, 0x7c, 0x20, 0x41, 0x8d, 0x94, 0x36, 0x0b, 0x41, 0x1f, 0x33, 0xb3, 0x6b, 0x84, 0x54, 0xab, 0xa8, 0xce, 0x58,
0xc6, 0x08, 0x7d, 0x65, 0x42, 0xcc, 0x3f, 0x29, 0x56, 0xfe, 0xb4, 0x84, 0x98, 0x14, 0x60, 0xa6, 0xb4, 0xaa, 0x33, 0x44, 0xea, 0x5b, 0x3e, 0x09, 0x8a, 0x23, 0x69, 0xf9, 0xba, 0x29, 0x7c, 0xe1,
0xd4, 0x7c, 0xa2, 0x75, 0x8f, 0xd8, 0x03, 0x88, 0x1a, 0x9e, 0x22, 0x6e, 0x78, 0xd2, 0xe2, 0xb5, 0x8c, 0xc9, 0x10, 0x5b, 0xd8, 0xda, 0x65, 0xe5, 0x0b, 0xdb, 0x20, 0xda, 0x63, 0xf9, 0x81, 0x1c,
0x51, 0xb6, 0xb8, 0x1f, 0xe3, 0x85, 0xe1, 0x91, 0x37, 0x7c, 0x35, 0xe0, 0xce, 0x53, 0x47, 0x64, 0x23, 0xf5, 0x95, 0x0d, 0xa1, 0x7f, 0x52, 0x2e, 0x33, 0x6a, 0x4b, 0x31, 0x29, 0xc1, 0xa8, 0xd4,
0x2e, 0x2c, 0x90, 0xad, 0x7a, 0x18, 0xd2, 0xd3, 0x81, 0x24, 0xd1, 0x15, 0x8f, 0x83, 0x06, 0x84, 0xc6, 0xcc, 0xe8, 0x1e, 0xb9, 0x07, 0x90, 0x05, 0x43, 0x65, 0xdc, 0xf2, 0xa4, 0xe5, 0xd3, 0xa6,
0xbf, 0x00, 0xb4, 0xeb, 0xfb, 0xf2, 0x84, 0x74, 0x9c, 0x91, 0xf3, 0xd6, 0xb1, 0x78, 0x5b, 0xb1, 0x6a, 0x09, 0x3f, 0x26, 0x88, 0xa2, 0xa3, 0x60, 0xf4, 0x74, 0x28, 0x9c, 0xa7, 0xae, 0x4c, 0x93,
0xc7, 0x5a, 0xe5, 0x1e, 0xf1, 0x63, 0x68, 0x1f, 0x18, 0x65, 0x54, 0xfc, 0x30, 0x55, 0x01, 0x95, 0x38, 0x20, 0xae, 0x7a, 0x14, 0xf1, 0xd3, 0xa1, 0x22, 0xd1, 0x93, 0x2f, 0x91, 0x16, 0x44, 0xbf,
0x14, 0x00, 0x03, 0x31, 0x26, 0xac, 0x99, 0x13, 0xe2, 0x9f, 0x03, 0xb4, 0x1f, 0x64, 0x54, 0xaf, 0x00, 0x72, 0x67, 0x3c, 0x56, 0x27, 0x64, 0xe2, 0x8c, 0x82, 0xb7, 0x9e, 0xc3, 0xdb, 0x9a, 0x3d,
0x4f, 0x47, 0x80, 0x3a, 0xdf, 0x65, 0x44, 0x80, 0x12, 0xe3, 0x11, 0xe0, 0xae, 0x78, 0xc1, 0x2c, 0x36, 0x6a, 0xf7, 0x48, 0x1f, 0x40, 0xe7, 0xc0, 0xaa, 0xd9, 0x12, 0x87, 0xa9, 0xab, 0xb5, 0x94,
0x6e, 0x6c, 0x13, 0x9a, 0x81, 0x80, 0x94, 0x2e, 0x9f, 0x97, 0x97, 0x40, 0x8d, 0xd4, 0xfd, 0xcc, 0x00, 0x58, 0x88, 0x35, 0x61, 0xc3, 0x9e, 0x90, 0xfe, 0x1c, 0x90, 0xfd, 0x30, 0xe7, 0x66, 0x7d,
0x29, 0x91, 0xa0, 0x65, 0x2a, 0x7e, 0xe8, 0xc0, 0x9c, 0xdc, 0x1a, 0x33, 0xa9, 0x56, 0x01, 0x99, 0x26, 0xdc, 0x34, 0xc9, 0x35, 0x2b, 0xdc, 0x54, 0x98, 0x08, 0x37, 0xef, 0xc8, 0xe7, 0xd2, 0xf2,
0xd8, 0x98, 0x85, 0x55, 0x17, 0xf0, 0x94, 0xa5, 0x6e, 0xa6, 0x4a, 0xea, 0x10, 0xd4, 0x13, 0x8f, 0xc6, 0x6e, 0x40, 0x2b, 0x94, 0x90, 0xd6, 0xe5, 0x2b, 0xea, 0x12, 0xe8, 0x91, 0xa6, 0x1f, 0x9d,
0x9e, 0x70, 0x2f, 0xbc, 0xe5, 0xf2, 0xdf, 0x2a, 0xda, 0x6a, 0xe8, 0x68, 0x4b, 0xbd, 0xd6, 0xca, 0x12, 0x05, 0x3a, 0xa6, 0xe2, 0x87, 0x1e, 0x2c, 0xab, 0xad, 0xa1, 0x49, 0x75, 0xaa, 0xd5, 0xe4,
0x45, 0xe9, 0x87, 0xc4, 0x07, 0xe2, 0xb5, 0x36, 0x87, 0x73, 0x1e, 0xc8, 0x05, 0x16, 0x79, 0x20, 0xc6, 0x1c, 0xac, 0xbe, 0x5a, 0xa8, 0x2a, 0x75, 0x0b, 0x75, 0x52, 0x47, 0xa0, 0x99, 0x06, 0xfc,
0x87, 0xba, 0xba, 0x1f, 0xf7, 0xa1, 0xf7, 0x88, 0x84, 0x84, 0x92, 0xdd, 0x30, 0x2c, 0xd2, 0xbf, 0x44, 0x78, 0xe1, 0x6d, 0x5f, 0xfc, 0xd6, 0xd1, 0xd6, 0xa2, 0x89, 0xb6, 0xf4, 0xd3, 0xb0, 0x5a,
0x02, 0x97, 0x2b, 0xfa, 0xe4, 0xbd, 0x7f, 0x02, 0x4b, 0x8f, 0xc8, 0xd1, 0x64, 0xb4, 0x4f, 0x4e, 0x94, 0x79, 0xb5, 0xbc, 0x2b, 0x9f, 0x86, 0x0b, 0xb8, 0xe0, 0x81, 0x5a, 0x60, 0x99, 0x07, 0x6a,
0xf3, 0x17, 0x01, 0x04, 0xf5, 0xec, 0x24, 0x3e, 0x93, 0xe7, 0xc5, 0x7f, 0xa3, 0x0f, 0x00, 0x42, 0xa8, 0x6f, 0xfa, 0xe9, 0x00, 0xfa, 0xf7, 0x59, 0xc4, 0x38, 0xbb, 0x13, 0x45, 0x65, 0xfa, 0x57,
0x36, 0x66, 0x90, 0x25, 0x64, 0xa8, 0xaa, 0x4f, 0x38, 0x72, 0x98, 0x90, 0x21, 0xfe, 0x18, 0x90, 0xe0, 0x72, 0x4d, 0x9f, 0xba, 0xf7, 0x0f, 0x61, 0xfd, 0x3e, 0x3b, 0x9a, 0x4d, 0xf6, 0xd9, 0x69,
0x49, 0x47, 0x6e, 0x81, 0xdd, 0xc6, 0xc9, 0xd1, 0x20, 0x9b, 0x66, 0x94, 0x8c, 0x95, 0x22, 0x32, 0xf1, 0xfc, 0x40, 0xa0, 0x99, 0x9f, 0x24, 0x67, 0xea, 0xbc, 0xc4, 0x6f, 0xf2, 0x06, 0x40, 0x84,
0x21, 0x7c, 0x0b, 0x3a, 0x07, 0xde, 0xd4, 0x25, 0x5f, 0xca, 0xba, 0x3c, 0x16, 0xd4, 0x79, 0x53, 0x63, 0x86, 0x79, 0xca, 0x46, 0xba, 0xd4, 0x45, 0x20, 0x87, 0x29, 0x1b, 0xd1, 0xf7, 0x81, 0xd8,
0x26, 0x9e, 0x3a, 0xa8, 0xe3, 0xdd, 0xf8, 0xef, 0x6a, 0x30, 0x2b, 0x46, 0x32, 0xaa, 0x3e, 0xc9, 0x74, 0xd4, 0x16, 0xf0, 0x36, 0xce, 0x8e, 0x86, 0xf9, 0x3c, 0xe7, 0x6c, 0xaa, 0x15, 0x91, 0x0d,
0x68, 0x10, 0x89, 0x8c, 0xba, 0xa4, 0x6a, 0x40, 0xa5, 0xf3, 0xae, 0x55, 0x9c, 0xb7, 0x74, 0xb3, 0xd1, 0x77, 0xa0, 0x7b, 0x10, 0xcc, 0x7d, 0xf6, 0xa5, 0x2a, 0x02, 0xc4, 0xa0, 0x2e, 0x98, 0xa3,
0xd4, 0x4b, 0xbd, 0x3c, 0x58, 0x0b, 0xe3, 0x31, 0x6b, 0x30, 0x26, 0xa2, 0xec, 0xb2, 0x2e, 0x63, 0x78, 0x9a, 0xa0, 0x4e, 0x74, 0xd3, 0xbf, 0x6d, 0xc0, 0x92, 0x1c, 0x89, 0x54, 0xc7, 0x2c, 0xe7,
0x56, 0x05, 0x14, 0xa2, 0xe7, 0xfc, 0xce, 0x8b, 0xf5, 0x29, 0x41, 0x94, 0xa6, 0xc5, 0x84, 0x2a, 0x61, 0x2c, 0xd3, 0xf7, 0x8a, 0xaa, 0x05, 0x55, 0xce, 0xbb, 0x51, 0x73, 0xde, 0xca, 0xcd, 0xd2,
0x35, 0xcb, 0x9c, 0x28, 0xc4, 0x2b, 0x69, 0x96, 0x92, 0x06, 0x69, 0x5e, 0x40, 0x83, 0x08, 0xdf, 0x65, 0x01, 0xea, 0x60, 0x1d, 0x4c, 0xc4, 0xac, 0xe1, 0x94, 0xc9, 0x1a, 0xcf, 0xa6, 0x8a, 0x59,
0xcb, 0xd2, 0x20, 0x08, 0x16, 0x9f, 0x10, 0xe2, 0x92, 0x24, 0x4e, 0x75, 0x71, 0xe3, 0x1f, 0x39, 0x35, 0x50, 0x8a, 0x9e, 0x8b, 0x3b, 0x2f, 0xd7, 0xa7, 0x05, 0x51, 0x99, 0x16, 0x1b, 0xaa, 0xd5,
0xb0, 0x28, 0xad, 0x8a, 0xee, 0x43, 0x37, 0x2c, 0x13, 0xe4, 0x54, 0x65, 0x5a, 0x6f, 0x42, 0x97, 0x2c, 0xcb, 0xb2, 0xea, 0xaf, 0xa2, 0x59, 0x2a, 0x1a, 0xa4, 0xf5, 0x1a, 0x1a, 0x44, 0xfa, 0x5e,
0x07, 0x61, 0x2c, 0xc2, 0xe2, 0x11, 0x97, 0xcc, 0x4b, 0x58, 0x20, 0x5b, 0x93, 0x4a, 0x08, 0x8e, 0x8e, 0x06, 0x21, 0xb0, 0xf6, 0x90, 0x31, 0x9f, 0xa5, 0x49, 0x66, 0x2a, 0x29, 0xff, 0xc8, 0x83,
0x83, 0x50, 0x32, 0xd8, 0x84, 0x98, 0xb9, 0x54, 0x41, 0x1a, 0x67, 0xaf, 0xe3, 0xea, 0x36, 0x3e, 0x35, 0x65, 0x55, 0x4c, 0x1f, 0xb9, 0xee, 0x98, 0x20, 0xaf, 0x2e, 0xad, 0xfb, 0x16, 0xf4, 0x44,
0x80, 0x25, 0x63, 0xbd, 0x52, 0xa0, 0xee, 0x83, 0x7a, 0x50, 0x14, 0x69, 0x06, 0x71, 0x2f, 0xd6, 0x10, 0x86, 0x11, 0x96, 0x88, 0xb8, 0x54, 0x5e, 0xc2, 0x01, 0x71, 0x4d, 0x3a, 0xfb, 0x38, 0x0d,
0x6d, 0x03, 0x99, 0x7f, 0x66, 0x0d, 0xc6, 0x7f, 0xe3, 0x70, 0x16, 0x48, 0x3f, 0x4c, 0x97, 0x13, 0x23, 0xc5, 0x60, 0x1b, 0x42, 0x73, 0xa9, 0x83, 0x34, 0xc1, 0x5e, 0xcf, 0x37, 0x6d, 0x7a, 0x00,
0xcd, 0x0a, 0xd7, 0x48, 0x48, 0xfb, 0xde, 0x25, 0x57, 0xb6, 0xd1, 0x37, 0x2e, 0xe8, 0xdd, 0xe8, 0xeb, 0xd6, 0x7a, 0x95, 0x40, 0xdd, 0x06, 0xfd, 0x7a, 0x29, 0xd3, 0x0c, 0xf2, 0x5e, 0x5c, 0x72,
0x87, 0xbb, 0x73, 0x78, 0x33, 0x53, 0xc5, 0x9b, 0x77, 0xec, 0xfc, 0xc1, 0x1c, 0x34, 0xb2, 0x61, 0x0d, 0x64, 0xf1, 0x99, 0x33, 0x98, 0xfe, 0xb5, 0x27, 0x58, 0xa0, 0xfc, 0x30, 0x53, 0xbb, 0xb4,
0x9c, 0x10, 0xbc, 0xcc, 0x59, 0xa0, 0xd6, 0x2b, 0x58, 0xb0, 0xf3, 0xaf, 0x0e, 0xcc, 0x8b, 0xa4, 0x24, 0x5d, 0x23, 0x29, 0xed, 0x7b, 0x17, 0x7c, 0xd5, 0x26, 0xdf, 0x78, 0x4d, 0xef, 0xc6, 0xbc,
0x99, 0x28, 0x6f, 0x26, 0x29, 0x62, 0xf1, 0x97, 0x51, 0x35, 0x8d, 0xb4, 0xfb, 0x59, 0xae, 0xbe, 0x12, 0x9e, 0xc3, 0x9b, 0x85, 0x3a, 0xde, 0xbc, 0x64, 0xe7, 0x77, 0x97, 0x61, 0x31, 0x1f, 0x25,
0xee, 0x5f, 0xa9, 0xec, 0x53, 0xbe, 0xf7, 0x0f, 0x7e, 0xf4, 0xef, 0xbf, 0x57, 0x5b, 0xc5, 0x8b, 0x29, 0xa3, 0x1b, 0x82, 0x05, 0x7a, 0xbd, 0x92, 0x05, 0xbb, 0xff, 0xe2, 0xc1, 0x8a, 0x4c, 0xd0,
0xdb, 0xa7, 0x77, 0xb6, 0xb9, 0x8a, 0x23, 0x67, 0x7c, 0xc4, 0x3d, 0x67, 0x93, 0xcd, 0x62, 0x16, 0xc9, 0x5a, 0x6a, 0x96, 0x11, 0x8c, 0xbf, 0xac, 0x12, 0x6d, 0x62, 0xdc, 0xcf, 0x6a, 0xa9, 0xf7,
0x54, 0xeb, 0x59, 0x2a, 0x0a, 0xb3, 0xf5, 0x2c, 0x95, 0x15, 0xd8, 0xd6, 0x2c, 0x13, 0x3e, 0x42, 0xe0, 0x4a, 0x6d, 0x9f, 0xf6, 0xbd, 0x7f, 0xf0, 0xe3, 0x7f, 0xfb, 0xbd, 0xc6, 0x45, 0xba, 0xb6,
0xcf, 0xb2, 0xf3, 0x17, 0x57, 0xa0, 0xa5, 0x03, 0x45, 0xf4, 0x3d, 0xe8, 0x5a, 0x09, 0x42, 0xa4, 0x73, 0xfa, 0xde, 0x8e, 0x50, 0x71, 0xec, 0x4c, 0x8c, 0xf8, 0xd0, 0xbb, 0x81, 0xb3, 0xd8, 0xd5,
0x08, 0x57, 0x65, 0x1c, 0xfb, 0x57, 0xab, 0x3b, 0xe5, 0xb4, 0xd7, 0xf8, 0xb4, 0x3d, 0xb4, 0xc6, 0xdb, 0x66, 0x96, 0x9a, 0x2a, 0x70, 0x33, 0x4b, 0x6d, 0xb9, 0xb7, 0x33, 0xcb, 0x4c, 0x8c, 0x30,
0xa6, 0x95, 0x19, 0xc0, 0x6d, 0x9e, 0x38, 0x15, 0x05, 0x04, 0xaf, 0x60, 0xde, 0x4e, 0x20, 0xa2, 0xb3, 0xec, 0xfe, 0xf9, 0x15, 0x68, 0x9b, 0x40, 0x91, 0x7c, 0x0f, 0x7a, 0x4e, 0x32, 0x92, 0x68,
0xab, 0xf6, 0x69, 0x17, 0x66, 0xfb, 0xe0, 0x9c, 0x5e, 0x39, 0xdd, 0x55, 0x3e, 0xdd, 0x1a, 0x5a, 0xc2, 0x75, 0xe9, 0xcd, 0xc1, 0xd5, 0xfa, 0x4e, 0x35, 0xed, 0x9b, 0x62, 0xda, 0x3e, 0xd9, 0xc2,
0x31, 0xa7, 0xd3, 0x01, 0x1c, 0xe1, 0x25, 0x1f, 0x66, 0x45, 0x36, 0x52, 0xf4, 0xaa, 0x2b, 0xb5, 0x69, 0x55, 0x06, 0x70, 0x47, 0x64, 0x69, 0x65, 0xb5, 0xc2, 0x53, 0x58, 0x71, 0x13, 0x88, 0xe4,
0xfb, 0x97, 0xcb, 0xd5, 0xd7, 0xb2, 0x5c, 0x1b, 0xf7, 0xf8, 0x54, 0x08, 0x71, 0x86, 0x9a, 0x05, 0xaa, 0x7b, 0xda, 0xa5, 0xd9, 0xde, 0x38, 0xa7, 0x57, 0x4d, 0x77, 0x55, 0x4c, 0xb7, 0x45, 0x36,
0xd9, 0xe8, 0xbb, 0xd0, 0xd2, 0xf5, 0x9c, 0x68, 0xdd, 0x28, 0xa2, 0x35, 0x8b, 0x4c, 0xfb, 0xbd, 0xed, 0xe9, 0x4c, 0x00, 0xc7, 0x44, 0x7d, 0x89, 0x5d, 0xfe, 0x4d, 0x34, 0xbd, 0xfa, 0xb2, 0xf0,
0x72, 0x47, 0xd5, 0x51, 0x99, 0x94, 0x99, 0x40, 0xec, 0xc3, 0xaa, 0xb4, 0xb8, 0x47, 0xe4, 0xc7, 0xc1, 0xe5, 0x6a, 0xa9, 0xb7, 0xaa, 0x0d, 0xa7, 0x7d, 0x31, 0x15, 0x21, 0x82, 0xa1, 0x76, 0xf5,
0xd9, 0x49, 0x45, 0x1d, 0xf9, 0x6d, 0x07, 0xdd, 0x87, 0xa6, 0x2a, 0x93, 0x45, 0x6b, 0xd5, 0xe5, 0x37, 0xf9, 0x2e, 0xb4, 0x4d, 0xf1, 0x28, 0xb9, 0x64, 0x55, 0xec, 0xda, 0x15, 0xad, 0x83, 0x7e,
0xbe, 0xfd, 0xf5, 0x12, 0x2e, 0xf5, 0xc2, 0x2e, 0x40, 0x5e, 0xd1, 0x89, 0x7a, 0xe7, 0x15, 0x9e, 0xb5, 0xa3, 0xee, 0xa8, 0x6c, 0xca, 0x28, 0x10, 0xfb, 0x70, 0x51, 0x59, 0xdc, 0x23, 0xf6, 0x93,
0x6a, 0x26, 0x56, 0x94, 0x7f, 0x8e, 0x78, 0x41, 0xab, 0x5d, 0x30, 0x8a, 0xbe, 0x92, 0x8f, 0xaf, 0xec, 0xa4, 0xa6, 0x68, 0xfd, 0x96, 0x47, 0x6e, 0x43, 0x4b, 0xd7, 0xe4, 0x92, 0xad, 0xfa, 0xda,
0x2c, 0x25, 0x7d, 0x07, 0x41, 0xbc, 0xc6, 0x79, 0xb7, 0x88, 0xe6, 0x19, 0xef, 0x22, 0x72, 0xa6, 0xe2, 0xc1, 0xa5, 0x0a, 0xae, 0xf4, 0xc2, 0x1d, 0x80, 0xa2, 0x7c, 0x94, 0xf4, 0xcf, 0xab, 0x72,
0x8a, 0x9f, 0x1e, 0x41, 0xdb, 0xa8, 0x12, 0x45, 0x8a, 0x42, 0xb9, 0xc2, 0xb4, 0xdf, 0xaf, 0xea, 0x35, 0x4c, 0xac, 0xa9, 0x35, 0x9d, 0x88, 0xea, 0x59, 0xb7, 0x3a, 0x95, 0x7c, 0xa5, 0x18, 0x5f,
0x92, 0xcb, 0xfd, 0x25, 0xe8, 0x5a, 0xe5, 0x9e, 0xfa, 0x66, 0x54, 0x15, 0x93, 0xea, 0x9b, 0x51, 0x5b, 0xb7, 0xfa, 0x12, 0x82, 0x74, 0x4b, 0xf0, 0x6e, 0x8d, 0xac, 0x20, 0xef, 0x62, 0x76, 0xa6,
0x5d, 0x21, 0xfa, 0x1d, 0x68, 0x1b, 0xc5, 0x99, 0xc8, 0x78, 0x9c, 0x2e, 0x14, 0x5f, 0xea, 0x15, 0x2b, 0xad, 0xee, 0x43, 0xc7, 0x2a, 0x49, 0x25, 0x9a, 0x42, 0xb5, 0x9c, 0x75, 0x30, 0xa8, 0xeb,
0x55, 0xd4, 0x72, 0xe2, 0x15, 0xbe, 0xdf, 0x79, 0xdc, 0x62, 0xfb, 0xe5, 0x15, 0x40, 0x4c, 0x48, 0x52, 0xcb, 0xfd, 0x25, 0xe8, 0x39, 0xb5, 0xa5, 0xe6, 0x66, 0xd4, 0x55, 0xae, 0x9a, 0x9b, 0x51,
0xbe, 0x07, 0xf3, 0x76, 0x51, 0xa6, 0xbe, 0x55, 0x95, 0xe5, 0x9d, 0xfa, 0x56, 0x9d, 0x53, 0xc9, 0x5f, 0x8e, 0xfa, 0x1d, 0xe8, 0x58, 0x95, 0xa0, 0xc4, 0x7a, 0x09, 0x2f, 0x55, 0x7a, 0x9a, 0x15,
0x29, 0x05, 0x72, 0x73, 0x59, 0x4f, 0xb2, 0xfd, 0x46, 0xa6, 0x49, 0xdf, 0xa2, 0x6f, 0x33, 0xd5, 0xd5, 0x14, 0x8e, 0xd2, 0x4d, 0xb1, 0xdf, 0x15, 0xda, 0xc6, 0xfd, 0x8a, 0x72, 0x23, 0x14, 0x92,
0x21, 0x4b, 0xb2, 0x50, 0x5e, 0xa4, 0x6a, 0x17, 0x6e, 0x69, 0x69, 0x2f, 0x55, 0x6f, 0xe1, 0x25, 0xef, 0xc1, 0x8a, 0x5b, 0x01, 0x6a, 0x6e, 0x55, 0x6d, 0x2d, 0xa9, 0xb9, 0x55, 0xe7, 0x94, 0x8d,
0x4e, 0xbc, 0x8d, 0xf2, 0x1d, 0xa0, 0xcf, 0x60, 0x4e, 0x96, 0x66, 0xa1, 0xd5, 0x5c, 0xaa, 0x8d, 0x2a, 0x81, 0xbc, 0xb1, 0x61, 0x26, 0xd9, 0x79, 0xae, 0xd2, 0xa4, 0x2f, 0xc8, 0xb7, 0x51, 0x75,
0xa4, 0x52, 0x7f, 0xad, 0x08, 0x4b, 0x62, 0xcb, 0x9c, 0x58, 0x17, 0xb5, 0x19, 0xb1, 0x11, 0xa1, 0xa8, 0xfa, 0x2f, 0x52, 0x54, 0xc4, 0xba, 0x55, 0x62, 0x46, 0xda, 0x2b, 0xa5, 0x62, 0x74, 0x5d,
0x01, 0xa3, 0x11, 0xc2, 0x82, 0xfd, 0xa8, 0x94, 0x69, 0x76, 0x54, 0x3e, 0x67, 0x6b, 0x76, 0x54, 0x10, 0xef, 0x90, 0x62, 0x07, 0xe4, 0x53, 0x58, 0x56, 0x75, 0x60, 0xe4, 0x62, 0x21, 0xd5, 0x56,
0xbf, 0x50, 0xd9, 0x4a, 0x46, 0x29, 0x97, 0x6d, 0x55, 0x7b, 0xf0, 0xab, 0xd0, 0x31, 0xeb, 0x00, 0x52, 0x69, 0xb0, 0x55, 0x86, 0x15, 0xb1, 0x0d, 0x41, 0xac, 0x47, 0x3a, 0x48, 0x6c, 0xc2, 0x78,
0xb5, 0xc6, 0xae, 0xa8, 0x19, 0xd4, 0x1a, 0xbb, 0xaa, 0x70, 0x50, 0x1d, 0x2d, 0xea, 0x98, 0xd3, 0x88, 0x34, 0x22, 0x58, 0x75, 0x5f, 0xb0, 0x72, 0xc3, 0x8e, 0xda, 0xb7, 0x73, 0xc3, 0x8e, 0xfa,
0xa0, 0xef, 0xc0, 0x82, 0xf1, 0xfa, 0x79, 0x38, 0x8d, 0x86, 0x5a, 0x74, 0xca, 0x65, 0x26, 0xfd, 0xe7, 0x30, 0x57, 0xc9, 0x68, 0xe5, 0xb2, 0xa3, 0x0b, 0x1d, 0x7e, 0x15, 0xba, 0x76, 0xd1, 0xa1,
0x2a, 0xd3, 0x89, 0xd7, 0x39, 0xe1, 0x25, 0x6c, 0x11, 0x66, 0x62, 0xf3, 0x10, 0xda, 0xe6, 0xcb, 0xd1, 0xd8, 0x35, 0x05, 0x8a, 0x46, 0x63, 0xd7, 0x55, 0x29, 0xea, 0xa3, 0x25, 0x5d, 0x7b, 0x1a,
0xea, 0x3b, 0xe8, 0xae, 0x1b, 0x5d, 0x66, 0xd5, 0xc6, 0x6d, 0x07, 0xfd, 0x81, 0x03, 0x1d, 0xb3, 0xf2, 0x1d, 0x58, 0xb5, 0x9e, 0x5a, 0x0f, 0xe7, 0xf1, 0xc8, 0x88, 0x4e, 0xb5, 0xa6, 0x65, 0x50,
0x80, 0x09, 0x59, 0x79, 0x99, 0x02, 0x9d, 0x9e, 0xd9, 0x67, 0x12, 0xc2, 0xcf, 0xf8, 0x22, 0xf7, 0x67, 0x3a, 0xe9, 0x25, 0x41, 0x78, 0x9d, 0x3a, 0x84, 0x51, 0x6c, 0xee, 0x41, 0xc7, 0x7e, 0xc6,
0x36, 0x9f, 0x58, 0x4c, 0x7e, 0x63, 0xb9, 0x44, 0x5b, 0xe6, 0x3f, 0x50, 0xbc, 0x2d, 0x76, 0x9a, 0x7d, 0x09, 0xdd, 0x4b, 0x56, 0x97, 0x5d, 0x22, 0x72, 0xcb, 0x23, 0x7f, 0xe0, 0x41, 0xd7, 0xae,
0x65, 0x38, 0x6f, 0x6f, 0x3b, 0xe8, 0x9e, 0xf8, 0x37, 0x19, 0x15, 0x9e, 0x20, 0x43, 0xad, 0x15, 0x96, 0x22, 0x4e, 0x5e, 0xa6, 0x44, 0xa7, 0x6f, 0xf7, 0xd9, 0x84, 0xe8, 0x23, 0xb1, 0xc8, 0xbd,
0xd9, 0x65, 0xfe, 0xef, 0xc9, 0x86, 0x73, 0xdb, 0x41, 0xbf, 0x26, 0xfe, 0x67, 0x42, 0x7e, 0xcb, 0x1b, 0x0f, 0x1d, 0x26, 0x3f, 0x77, 0x5c, 0xa2, 0x9b, 0xf6, 0x7f, 0x6b, 0xbc, 0x28, 0x77, 0xda,
0xb9, 0x7e, 0xd1, 0xef, 0xf1, 0x4d, 0xbe, 0x93, 0x6b, 0xf8, 0xb2, 0xb5, 0x93, 0xa2, 0x5e, 0x3f, 0x35, 0x3f, 0x2f, 0x6e, 0x79, 0xe4, 0x43, 0xf9, 0x3f, 0x39, 0x3a, 0x3c, 0x21, 0x96, 0x5a, 0x2b,
0x00, 0xc8, 0x63, 0x4d, 0x54, 0x08, 0xbc, 0xb4, 0xc6, 0x2b, 0x87, 0xa3, 0xf6, 0x69, 0xaa, 0xf8, 0xb3, 0xcb, 0xfe, 0x47, 0x97, 0x6d, 0xef, 0x96, 0x47, 0x7e, 0x4d, 0xfe, 0x83, 0x86, 0xfa, 0x56,
0x4c, 0x28, 0x81, 0x8e, 0x11, 0xe5, 0x65, 0xfa, 0x38, 0xcb, 0x31, 0x63, 0xbf, 0x5f, 0xd5, 0x25, 0x70, 0xfd, 0x75, 0xbf, 0xa7, 0x6f, 0x89, 0x9d, 0xbc, 0x49, 0x2f, 0x3b, 0x3b, 0x29, 0xeb, 0xf5,
0xe9, 0x7f, 0x95, 0xd3, 0xff, 0x00, 0x5d, 0x31, 0xe9, 0x6f, 0xbf, 0x31, 0x63, 0xcc, 0xb7, 0xe8, 0x03, 0x80, 0x22, 0xd6, 0x24, 0xa5, 0xc0, 0xcb, 0x68, 0xbc, 0x6a, 0x38, 0xea, 0x9e, 0xa6, 0x8e,
0x0b, 0xe8, 0xee, 0xc7, 0xf1, 0xab, 0x49, 0xa2, 0xd3, 0x19, 0x76, 0xd4, 0xc4, 0xe2, 0xdc, 0x7e, 0xcf, 0xa4, 0x12, 0xe8, 0x5a, 0x51, 0x5e, 0x6e, 0x8e, 0xb3, 0x1a, 0x33, 0x0e, 0x06, 0x75, 0x5d,
0x61, 0x53, 0xf8, 0x06, 0xa7, 0x7c, 0x05, 0x5d, 0xb6, 0x29, 0xe7, 0x91, 0xef, 0x5b, 0xe4, 0xc1, 0x8a, 0xfe, 0x57, 0x05, 0xfd, 0x37, 0xc8, 0x15, 0x9b, 0xfe, 0xce, 0x73, 0x3b, 0xc6, 0x7c, 0x41,
0x92, 0xb6, 0x76, 0x7a, 0x23, 0x7d, 0x9b, 0x8e, 0x19, 0x80, 0x96, 0xe6, 0xb0, 0xfc, 0x0f, 0x3d, 0xbe, 0x80, 0xde, 0x7e, 0x92, 0x3c, 0x9d, 0xa5, 0x26, 0x9d, 0xe1, 0x46, 0x4d, 0x18, 0xe7, 0x0e,
0x47, 0xa6, 0x68, 0xde, 0x76, 0xd0, 0x01, 0x74, 0x1e, 0x91, 0x61, 0xec, 0x13, 0x19, 0xe8, 0x2c, 0x4a, 0x9b, 0xa2, 0xd7, 0x05, 0xe5, 0x2b, 0xe4, 0xb2, 0x4b, 0xb9, 0x88, 0x7c, 0x5f, 0x90, 0x00,
0xe7, 0x2b, 0xd7, 0x11, 0x52, 0xbf, 0x6b, 0x81, 0xb6, 0x06, 0x48, 0xbc, 0x69, 0x4a, 0xbe, 0xdc, 0xd6, 0x8d, 0xb5, 0x33, 0x1b, 0x19, 0xb8, 0x74, 0xec, 0x00, 0xb4, 0x32, 0x87, 0xe3, 0x7f, 0x98,
0x7e, 0x23, 0x43, 0xa8, 0xb7, 0x4a, 0x03, 0xa8, 0xb0, 0xcf, 0xd2, 0x00, 0x85, 0x38, 0xd1, 0xd2, 0x39, 0x72, 0x4d, 0xf3, 0x96, 0x47, 0x0e, 0xa0, 0x7b, 0x9f, 0x8d, 0x92, 0x31, 0x53, 0x81, 0xce,
0x00, 0xa5, 0x38, 0xd1, 0xd2, 0x00, 0x2a, 0xec, 0x44, 0x21, 0x8b, 0x1e, 0x0b, 0xa1, 0xa5, 0xb6, 0x46, 0xb1, 0x72, 0x13, 0x21, 0x0d, 0x7a, 0x0e, 0xe8, 0x6a, 0x80, 0x34, 0x98, 0x67, 0xec, 0xcb,
0x99, 0xe7, 0x05, 0xa4, 0xfd, 0xeb, 0xe7, 0x0f, 0xb0, 0x67, 0xdb, 0xb4, 0x67, 0x3b, 0x84, 0xee, 0x9d, 0xe7, 0x2a, 0x84, 0x7a, 0xa1, 0x35, 0x80, 0x0e, 0xfb, 0x1c, 0x0d, 0x50, 0x8a, 0x13, 0x1d,
0x23, 0x22, 0x98, 0x25, 0xde, 0x19, 0xfa, 0xb6, 0x4a, 0x31, 0xdf, 0x24, 0x8a, 0xea, 0x86, 0xf7, 0x0d, 0x50, 0x89, 0x13, 0x1d, 0x0d, 0xa0, 0xc3, 0x4e, 0x12, 0x61, 0xf4, 0x58, 0x0a, 0x2d, 0x8d,
0xd9, 0x0a, 0x9e, 0x27, 0xf9, 0xd1, 0x77, 0xa1, 0xfd, 0x94, 0x50, 0xf5, 0xb0, 0xa0, 0x3d, 0x8f, 0xcd, 0x3c, 0x2f, 0x20, 0x1d, 0x5c, 0x3b, 0x7f, 0x80, 0x3b, 0xdb, 0x0d, 0x77, 0xb6, 0x43, 0xe8,
0xc2, 0x4b, 0x43, 0xbf, 0xe2, 0x5d, 0x02, 0x5f, 0xe7, 0xd4, 0xfa, 0xa8, 0xa7, 0xa9, 0x6d, 0x13, 0xdd, 0x67, 0x92, 0x59, 0xf2, 0x9d, 0x61, 0xe0, 0xaa, 0x14, 0xfb, 0x4d, 0xa2, 0xac, 0x6e, 0x44,
0x7f, 0x44, 0xc4, 0xe5, 0x1f, 0x04, 0xfe, 0x5b, 0xf4, 0xcb, 0x9c, 0xb8, 0x7e, 0x8b, 0x5c, 0x33, 0x9f, 0xab, 0xe0, 0x45, 0x92, 0x9f, 0x7c, 0x17, 0x3a, 0x1f, 0x33, 0xae, 0x1f, 0x16, 0x8c, 0xe7,
0xf2, 0xd1, 0x26, 0xf1, 0x85, 0x02, 0x5e, 0x45, 0x39, 0x8a, 0x7d, 0x62, 0x98, 0xba, 0x08, 0xda, 0x51, 0x7a, 0x69, 0x18, 0xd4, 0xbc, 0x4b, 0xd0, 0x6b, 0x82, 0xda, 0x80, 0xf4, 0x0d, 0xb5, 0x1d,
0xc6, 0xc3, 0xb3, 0xbe, 0x50, 0xe5, 0xd7, 0x6c, 0x7d, 0xa1, 0x2a, 0xde, 0xa9, 0xf1, 0x06, 0x9f, 0x36, 0x9e, 0x30, 0x79, 0xf9, 0x87, 0xe1, 0xf8, 0x05, 0xf9, 0x65, 0x41, 0xdc, 0xbc, 0x45, 0x6e,
0x07, 0xa3, 0xeb, 0xf9, 0x3c, 0xe2, 0x6d, 0x3a, 0x9f, 0x69, 0xfb, 0x8d, 0x37, 0xa6, 0x6f, 0xd1, 0x59, 0xf9, 0x68, 0x9b, 0xf8, 0x6a, 0x09, 0xaf, 0xa3, 0x1c, 0x27, 0x63, 0x66, 0x99, 0xba, 0x18,
0x4b, 0x5e, 0xb5, 0x6c, 0x3e, 0x9e, 0xe4, 0x9e, 0x4f, 0xf1, 0x9d, 0x45, 0x33, 0xcb, 0xe8, 0xb2, 0x3a, 0xd6, 0xc3, 0xb3, 0xb9, 0x50, 0xd5, 0xd7, 0x6c, 0x73, 0xa1, 0x6a, 0xde, 0xa9, 0xe9, 0xb6,
0xbd, 0x21, 0x31, 0x15, 0xb7, 0x88, 0xdf, 0x00, 0x38, 0xa4, 0x71, 0xf2, 0xc8, 0x23, 0xe3, 0x38, 0x98, 0x87, 0x92, 0x6b, 0xc5, 0x3c, 0xf2, 0x6d, 0xba, 0x98, 0x69, 0xe7, 0x79, 0x30, 0xe5, 0x2f,
0xca, 0x35, 0x59, 0xfe, 0x40, 0x90, 0x6b, 0x32, 0xe3, 0x95, 0x00, 0xbd, 0x34, 0x7c, 0x4f, 0xeb, 0xc8, 0x13, 0x51, 0x22, 0x6d, 0x3f, 0x9e, 0x14, 0x9e, 0x4f, 0xf9, 0x9d, 0xc5, 0x30, 0xcb, 0xea,
0xed, 0x49, 0x09, 0xd7, 0xb9, 0x6f, 0x08, 0x9a, 0x21, 0x15, 0xef, 0x08, 0xca, 0x0d, 0x15, 0xc9, 0x72, 0xbd, 0x21, 0x39, 0x95, 0xb0, 0x88, 0xdf, 0x00, 0x38, 0xe4, 0x49, 0x7a, 0x3f, 0x60, 0xd3,
0x51, 0xc3, 0x0d, 0xb5, 0xb2, 0xab, 0x86, 0x1b, 0x6a, 0x67, 0x51, 0x99, 0x1b, 0x9a, 0x67, 0x41, 0x24, 0x2e, 0x34, 0x59, 0xf1, 0x40, 0x50, 0x68, 0x32, 0xeb, 0x95, 0x80, 0x3c, 0xb1, 0x7c, 0x4f,
0xb4, 0x1b, 0x5a, 0x4a, 0xb0, 0x68, 0x1d, 0x5a, 0x91, 0x32, 0x39, 0x80, 0x56, 0x1e, 0x8a, 0xab, 0xe7, 0xed, 0x49, 0x0b, 0xd7, 0xb9, 0x6f, 0x08, 0x86, 0x21, 0x35, 0xef, 0x08, 0xda, 0x0d, 0x95,
0x89, 0x8a, 0x81, 0xbb, 0x36, 0x56, 0xa5, 0x08, 0x19, 0x2f, 0x72, 0x3e, 0x03, 0x6a, 0x32, 0x3e, 0xc9, 0x51, 0xcb, 0x0d, 0x75, 0xb2, 0xab, 0x96, 0x1b, 0xea, 0x66, 0x51, 0xd1, 0x0d, 0x2d, 0xb2,
0xf3, 0x87, 0xf7, 0xe7, 0x00, 0x62, 0x77, 0x4f, 0x58, 0xcb, 0x20, 0x69, 0x05, 0xc2, 0x26, 0x49, 0x20, 0xc6, 0x0d, 0xad, 0x24, 0x58, 0x8c, 0x0e, 0xad, 0x49, 0x99, 0x1c, 0x40, 0xbb, 0x08, 0xc5,
0x3b, 0xe2, 0x54, 0x9e, 0x0c, 0xd6, 0x24, 0xef, 0x39, 0x9b, 0x47, 0xb3, 0xfc, 0x7f, 0x7c, 0xbf, 0xf5, 0x44, 0xe5, 0xc0, 0xdd, 0x18, 0xab, 0x4a, 0x84, 0x4c, 0xd7, 0x04, 0x9f, 0x81, 0xb4, 0x90,
0xfe, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x2f, 0x33, 0x18, 0x15, 0x3c, 0x00, 0x00, 0xcf, 0xe2, 0xe1, 0xfd, 0x31, 0x80, 0xdc, 0xdd, 0x43, 0x6c, 0x59, 0x24, 0x9d, 0x40, 0xd8, 0x26,
0xe9, 0x46, 0x9c, 0xda, 0x93, 0xa1, 0x86, 0xe4, 0x87, 0xde, 0x8d, 0xa3, 0x25, 0xf1, 0x0f, 0xc5,
0x5f, 0xff, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6f, 0x16, 0xda, 0x18, 0x82, 0x3c, 0x00, 0x00,
} }

@ -564,10 +564,18 @@ func RegisterWalletUnlockerHandlerFromEndpoint(ctx context.Context, mux *runtime
// RegisterWalletUnlockerHandler registers the http handlers for service WalletUnlocker to "mux". // RegisterWalletUnlockerHandler registers the http handlers for service WalletUnlocker to "mux".
// The handlers forward requests to the grpc endpoint over "conn". // The handlers forward requests to the grpc endpoint over "conn".
func RegisterWalletUnlockerHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { func RegisterWalletUnlockerHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
client := NewWalletUnlockerClient(conn) return RegisterWalletUnlockerHandlerClient(ctx, mux, NewWalletUnlockerClient(conn))
}
// RegisterWalletUnlockerHandler registers the http handlers for service WalletUnlocker to "mux".
// The handlers forward requests to the grpc endpoint over the given implementation of "WalletUnlockerClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "WalletUnlockerClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "WalletUnlockerClient" to call the correct interceptors.
func RegisterWalletUnlockerHandlerClient(ctx context.Context, mux *runtime.ServeMux, client WalletUnlockerClient) error {
mux.Handle("POST", pattern_WalletUnlocker_CreateWallet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_WalletUnlocker_CreateWallet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -596,7 +604,7 @@ func RegisterWalletUnlockerHandler(ctx context.Context, mux *runtime.ServeMux, c
}) })
mux.Handle("POST", pattern_WalletUnlocker_UnlockWallet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_WalletUnlocker_UnlockWallet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -667,10 +675,18 @@ func RegisterLightningHandlerFromEndpoint(ctx context.Context, mux *runtime.Serv
// RegisterLightningHandler registers the http handlers for service Lightning to "mux". // RegisterLightningHandler registers the http handlers for service Lightning to "mux".
// The handlers forward requests to the grpc endpoint over "conn". // The handlers forward requests to the grpc endpoint over "conn".
func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
client := NewLightningClient(conn) return RegisterLightningHandlerClient(ctx, mux, NewLightningClient(conn))
}
// RegisterLightningHandler registers the http handlers for service Lightning to "mux".
// The handlers forward requests to the grpc endpoint over the given implementation of "LightningClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "LightningClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "LightningClient" to call the correct interceptors.
func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux, client LightningClient) error {
mux.Handle("GET", pattern_Lightning_WalletBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_WalletBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -699,7 +715,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_ChannelBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_ChannelBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -728,7 +744,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_GetTransactions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_GetTransactions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -757,7 +773,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("POST", pattern_Lightning_SendCoins_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_SendCoins_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -786,7 +802,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_NewWitnessAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_NewWitnessAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -815,7 +831,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("POST", pattern_Lightning_ConnectPeer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_ConnectPeer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -844,7 +860,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("DELETE", pattern_Lightning_DisconnectPeer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("DELETE", pattern_Lightning_DisconnectPeer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -873,7 +889,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_ListPeers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_ListPeers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -902,7 +918,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_GetInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_GetInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -931,7 +947,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_PendingChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_PendingChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -960,7 +976,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_ListChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_ListChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -989,7 +1005,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("POST", pattern_Lightning_OpenChannelSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_OpenChannelSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1018,7 +1034,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("DELETE", pattern_Lightning_CloseChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("DELETE", pattern_Lightning_CloseChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1047,7 +1063,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("POST", pattern_Lightning_SendPaymentSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_SendPaymentSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1076,7 +1092,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("POST", pattern_Lightning_AddInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_AddInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1105,7 +1121,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_ListInvoices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_ListInvoices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1134,7 +1150,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_LookupInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_LookupInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1163,7 +1179,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_SubscribeInvoices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_SubscribeInvoices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1192,7 +1208,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_DecodePayReq_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_DecodePayReq_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1221,7 +1237,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_ListPayments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_ListPayments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1250,7 +1266,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("DELETE", pattern_Lightning_DeleteAllPayments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("DELETE", pattern_Lightning_DeleteAllPayments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1279,7 +1295,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_DescribeGraph_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_DescribeGraph_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1308,7 +1324,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_GetChanInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_GetChanInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1337,7 +1353,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_GetNodeInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_GetNodeInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1366,7 +1382,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_QueryRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_QueryRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1395,7 +1411,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_GetNetworkInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_GetNetworkInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1424,7 +1440,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("GET", pattern_Lightning_FeeReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_FeeReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {
@ -1453,7 +1469,7 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
}) })
mux.Handle("POST", pattern_Lightning_UpdateFees_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("POST", pattern_Lightning_UpdateFees_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
if cn, ok := w.(http.CloseNotifier); ok { if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) { go func(done <-chan struct{}, closed <-chan bool) {

@ -64,7 +64,7 @@ message UnlockWalletResponse {}
service Lightning { service Lightning {
/** lncli: `walletbalance` /** lncli: `walletbalance`
WalletBalance returns the sum of all confirmed unspent outputs under control WalletBalance returns total unspent outputs(confirmed and unconfirmed), all confirmed unspent outputs and all unconfirmed unspent outputs under control
by the wallet. This method can be modified by having the request specify by the wallet. This method can be modified by having the request specify
only witness outputs should be factored into the final output sum. only witness outputs should be factored into the final output sum.
*/ */
@ -995,7 +995,13 @@ message WalletBalanceRequest {
} }
message WalletBalanceResponse { message WalletBalanceResponse {
/// The balance of the wallet /// The balance of the wallet
int64 balance = 1 [json_name = "balance"]; int64 total_balance = 1 [json_name = "total_balance"];
/// The confirmed balance of a wallet(with >= 1 confirmations)
int64 confirmed_balance = 2 [json_name = "confirmed_balance"];
/// The unconfirmed balance of a wallet(with 0 confirmations)
int64 unconfirmed_balance = 3 [json_name = "unconfirmed_balance"];
} }
message ChannelBalanceRequest { message ChannelBalanceRequest {

@ -17,7 +17,7 @@
"paths": { "paths": {
"/v1/balance/blockchain": { "/v1/balance/blockchain": {
"get": { "get": {
"summary": "* lncli: `walletbalance`\nWalletBalance returns the sum of all confirmed unspent outputs under control\nby the wallet. This method can be modified by having the request specify\nonly witness outputs should be factored into the final output sum.", "summary": "* lncli: `walletbalance`\nWalletBalance returns total unspent outputs(confirmed and unconfirmed), all confirmed unspent outputs and all unconfirmed unspent outputs under control\nby the wallet. This method can be modified by having the request specify\nonly witness outputs should be factored into the final output sum.",
"operationId": "WalletBalance", "operationId": "WalletBalance",
"responses": { "responses": {
"200": { "200": {
@ -2057,10 +2057,20 @@
"lnrpcWalletBalanceResponse": { "lnrpcWalletBalanceResponse": {
"type": "object", "type": "object",
"properties": { "properties": {
"balance": { "total_balance": {
"type": "string", "type": "string",
"format": "int64", "format": "int64",
"title": "/ The balance of the wallet" "title": "/ The balance of the wallet"
},
"confirmed_balance": {
"type": "string",
"format": "int64",
"title": "/ The confirmed balance of a wallet(with \u003e= 1 confirmations)"
},
"unconfirmed_balance": {
"type": "string",
"format": "int64",
"title": "/ The unconfirmed balance of a wallet(with 0 confirmations)"
} }
} }
} }

@ -1175,10 +1175,10 @@ func (r *rpcServer) ListPeers(ctx context.Context,
return resp, nil return resp, nil
} }
// WalletBalance returns the sum of all confirmed unspent outputs under control // WalletBalance returns total unspent outputs(confirmed and unconfirmed), all
// confirmed unspent outputs and all unconfirmed unspent outputs under control
// by the wallet. This method can be modified by having the request specify // by the wallet. This method can be modified by having the request specify
// only witness outputs should be factored into the final output sum. // only witness outputs should be factored into the final output sum.
// TODO(roasbeef): split into total and confirmed/unconfirmed
// TODO(roasbeef): add async hooks into wallet balance changes // TODO(roasbeef): add async hooks into wallet balance changes
func (r *rpcServer) WalletBalance(ctx context.Context, func (r *rpcServer) WalletBalance(ctx context.Context,
in *lnrpc.WalletBalanceRequest) (*lnrpc.WalletBalanceResponse, error) { in *lnrpc.WalletBalanceRequest) (*lnrpc.WalletBalanceResponse, error) {
@ -1191,15 +1191,27 @@ func (r *rpcServer) WalletBalance(ctx context.Context,
} }
} }
balance, err := r.server.cc.wallet.ConfirmedBalance(1, in.WitnessOnly) // Get total balance, from txs that have >= 0 confirmations.
totalBal, err := r.server.cc.wallet.ConfirmedBalance(0, in.WitnessOnly)
if err != nil { if err != nil {
return nil, err return nil, err
} }
rpcsLog.Debugf("[walletbalance] balance=%v", balance) // Get confirmed balance, from txs that have >= 1 confirmations.
confirmedBal, err := r.server.cc.wallet.ConfirmedBalance(1, in.WitnessOnly)
if err != nil {
return nil, err
}
// Get uncomfirmed balance, from txs with 0 confirmations.
unconfirmedBal := totalBal - confirmedBal
rpcsLog.Debugf("[walletbalance] Total balance=%v", totalBal)
return &lnrpc.WalletBalanceResponse{ return &lnrpc.WalletBalanceResponse{
Balance: int64(balance), TotalBalance: int64(totalBal),
ConfirmedBalance: int64(confirmedBal),
UnconfirmedBalance: int64(unconfirmedBal),
}, nil }, nil
} }