From 537dac3c62e2b05629d91f3adcc83f9b1d677614 Mon Sep 17 00:00:00 2001 From: carla Date: Tue, 5 May 2020 21:10:06 +0200 Subject: [PATCH 1/4] multi: specify start and end height for ListTransactionDetails Add start and end height parameters to the rpc and cli GetTransactions endpoints. Default to returning all transactions from genesis to tip, including unconfirmed transactions to maintain backwards compatibility. --- cmd/lncli/commands.go | 46 +- lnrpc/rpc.pb.go | 1440 ++++++++++++++++--------------- lnrpc/rpc.pb.gw.go | 8 + lnrpc/rpc.proto | 15 + lnrpc/rpc.swagger.json | 18 + lnwallet/btcwallet/btcwallet.go | 20 +- lnwallet/interface.go | 10 +- lnwallet/interface_test.go | 72 +- mock.go | 2 +- rpcserver.go | 18 +- 10 files changed, 913 insertions(+), 736 deletions(-) diff --git a/cmd/lncli/commands.go b/cmd/lncli/commands.go index 14c1ac52..e327c977 100644 --- a/cmd/lncli/commands.go +++ b/cmd/lncli/commands.go @@ -2295,11 +2295,37 @@ func debugLevel(ctx *cli.Context) error { } var listChainTxnsCommand = cli.Command{ - Name: "listchaintxns", - Category: "On-chain", - Usage: "List transactions from the wallet.", - Description: "List all transactions an address of the wallet was involved in.", - Action: actionDecorator(listChainTxns), + Name: "listchaintxns", + Category: "On-chain", + Usage: "List transactions from the wallet.", + Flags: []cli.Flag{ + cli.Int64Flag{ + Name: "start_height", + Usage: "the block height from which to list " + + "transactions, inclusive", + }, + cli.Int64Flag{ + Name: "end_height", + Usage: "the block height until which to list " + + "transactions, inclusive, to get transactions " + + "until the chain tip, including unconfirmed, " + + "set this value to -1", + }, + }, + Description: ` + List all transactions an address of the wallet was involved in. + + This call will return a list of wallet related transactions that paid + to an address our wallet controls, or spent utxos that we held. The + start_height and end_height flags can be used to specify an inclusive + block range over which to query for transactions. If the end_height is + less than the start_height, transactions will be queried in reverse. + To get all transactions until the chain tip, including unconfirmed + transactions (identifiable with BlockHeight=0), set end_height to -1. + By default, this call will get all transactions our wallet was involved + in, including unconfirmed transactions. +`, + Action: actionDecorator(listChainTxns), } func listChainTxns(ctx *cli.Context) error { @@ -2307,8 +2333,16 @@ func listChainTxns(ctx *cli.Context) error { client, cleanUp := getClient(ctx) defer cleanUp() - resp, err := client.GetTransactions(ctxb, &lnrpc.GetTransactionsRequest{}) + req := &lnrpc.GetTransactionsRequest{} + if ctx.IsSet("start_height") { + req.StartHeight = int32(ctx.Int64("start_height")) + } + if ctx.IsSet("end_height") { + req.EndHeight = int32(ctx.Int64("end_height")) + } + + resp, err := client.GetTransactions(ctxb, req) if err != nil { return err } diff --git a/lnrpc/rpc.pb.go b/lnrpc/rpc.pb.go index 2c55f6b0..ce2db3eb 100644 --- a/lnrpc/rpc.pb.go +++ b/lnrpc/rpc.pb.go @@ -1292,6 +1292,17 @@ func (m *Transaction) GetRawTxHex() string { } type GetTransactionsRequest struct { + // + //The height from which to list transactions, inclusive. If this value is + //greater than end_height, transactions will be read in reverse. + StartHeight int32 `protobuf:"varint,1,opt,name=start_height,json=startHeight,proto3" json:"start_height,omitempty"` + // + //The height until which to list transactions, inclusive. To include + //unconfirmed transactions, this value should be set to -1, which will + //return transactions from start_height until the current chain tip and + //unconfirmed transactions. If no end_height is provided, the call will + //default to this option. + EndHeight int32 `protobuf:"varint,2,opt,name=end_height,json=endHeight,proto3" json:"end_height,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1322,6 +1333,20 @@ func (m *GetTransactionsRequest) XXX_DiscardUnknown() { var xxx_messageInfo_GetTransactionsRequest proto.InternalMessageInfo +func (m *GetTransactionsRequest) GetStartHeight() int32 { + if m != nil { + return m.StartHeight + } + return 0 +} + +func (m *GetTransactionsRequest) GetEndHeight() int32 { + if m != nil { + return m.EndHeight + } + return 0 +} + type TransactionDetails struct { /// The list of transactions relevant to the wallet. Transactions []*Transaction `protobuf:"bytes,1,rep,name=transactions,proto3" json:"transactions,omitempty"` @@ -12007,7 +12032,7 @@ func init() { func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) } var fileDescriptor_77a6da22d6a3feb1 = []byte{ - // 12049 bytes of a gzipped FileDescriptorProto + // 12074 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0xbd, 0x59, 0x6c, 0x24, 0x49, 0x7a, 0x18, 0xdc, 0x75, 0x91, 0x55, 0x5f, 0x1d, 0x2c, 0x06, 0xaf, 0x6a, 0xf6, 0xf4, 0x74, 0x4f, 0xce, 0xec, 0x74, 0x4f, 0xcf, 0x2c, 0xbb, 0xa7, 0x77, 0x7b, 0x66, 0x77, 0xe6, 0xd7, 0x6a, 0x8b, @@ -12056,712 +12081,713 @@ var fileDescriptor_77a6da22d6a3feb1 = []byte{ 0x8d, 0x79, 0x99, 0x2c, 0x20, 0x3b, 0x9c, 0x07, 0xec, 0x6b, 0x50, 0x1b, 0xf0, 0x20, 0xb4, 0xe4, 0x64, 0xf0, 0xa0, 0x51, 0xc4, 0x95, 0x5f, 0x15, 0xd0, 0xa6, 0x02, 0xb2, 0xd7, 0x00, 0x7c, 0xfb, 0xc2, 0x12, 0x03, 0xc1, 0x2f, 0x1b, 0x25, 0x9a, 0x05, 0xdf, 0xbe, 0xe8, 0x5d, 0xee, 0xf2, 0x4b, - 0x41, 0x35, 0x4f, 0x79, 0xa8, 0x0d, 0x5a, 0x20, 0xa9, 0xd3, 0xd8, 0x03, 0xa6, 0x81, 0xb7, 0x79, - 0x68, 0x3b, 0xc3, 0x80, 0x7d, 0x00, 0x95, 0x50, 0x43, 0x46, 0x36, 0x58, 0x8e, 0x48, 0x48, 0xcb, - 0x60, 0x26, 0xf0, 0x8c, 0x33, 0x28, 0xee, 0x70, 0xbe, 0xe7, 0x8c, 0x9c, 0x90, 0xad, 0x42, 0xe1, - 0xc4, 0xb9, 0xe4, 0x44, 0xec, 0xb9, 0xdd, 0x1b, 0x26, 0x7d, 0xb2, 0x3b, 0x00, 0xf8, 0xc3, 0x1a, - 0x45, 0xd4, 0xb4, 0x7b, 0xc3, 0x2c, 0x21, 0x6c, 0x3f, 0xb0, 0x43, 0xb6, 0x0e, 0xf3, 0x63, 0xee, - 0xf7, 0xb9, 0x9a, 0xb7, 0xdd, 0x1b, 0xa6, 0x02, 0x6c, 0xce, 0x43, 0x61, 0x28, 0x4a, 0x37, 0xfe, - 0xb8, 0x00, 0xe5, 0x2e, 0x77, 0xa3, 0x55, 0xc6, 0x20, 0x2f, 0x06, 0x44, 0xae, 0x2c, 0xfc, 0xcd, - 0xde, 0x84, 0x32, 0x0e, 0x5d, 0x10, 0xfa, 0x8e, 0x7b, 0x4a, 0x54, 0xbd, 0x99, 0x6d, 0x64, 0x4c, - 0x10, 0xe0, 0x2e, 0x42, 0x59, 0x1d, 0x72, 0xf6, 0x48, 0x51, 0xb5, 0xf8, 0xc9, 0x6e, 0x42, 0xd1, - 0x1e, 0x85, 0xd4, 0xbc, 0x0a, 0x82, 0xe7, 0xed, 0x51, 0x88, 0x4d, 0x7b, 0x03, 0x2a, 0x63, 0xfb, - 0x6a, 0x24, 0xd6, 0x72, 0x44, 0x0e, 0x15, 0xb3, 0x2c, 0x61, 0x48, 0x10, 0x8f, 0x61, 0x49, 0x47, - 0x51, 0x95, 0x17, 0xa2, 0xca, 0x17, 0x35, 0x6c, 0xd9, 0x86, 0x7b, 0xb0, 0xa0, 0xf2, 0xf8, 0xd4, - 0x1f, 0x24, 0x93, 0x92, 0x59, 0x93, 0x60, 0xd5, 0xcb, 0xfb, 0x50, 0x3f, 0x71, 0x5c, 0x7b, 0x68, - 0xf5, 0x87, 0xe1, 0xb9, 0x35, 0xe0, 0xc3, 0xd0, 0x46, 0x8a, 0x29, 0x98, 0x35, 0x84, 0x6f, 0x0d, - 0xc3, 0xf3, 0x6d, 0x01, 0x65, 0xef, 0x41, 0xe9, 0x84, 0x73, 0x0b, 0x07, 0xab, 0x51, 0x4c, 0x2c, - 0x3c, 0x35, 0x43, 0x66, 0xf1, 0x44, 0xcd, 0xd5, 0x7b, 0x50, 0xf7, 0x26, 0xe1, 0xa9, 0xe7, 0xb8, - 0xa7, 0x96, 0xe0, 0x77, 0x96, 0x33, 0x40, 0x1a, 0xca, 0x6f, 0x66, 0x1f, 0x65, 0xcc, 0x9a, 0x4a, - 0x13, 0x9c, 0xa7, 0x3d, 0x60, 0x6f, 0xc3, 0xc2, 0xd0, 0x0e, 0x42, 0xeb, 0xcc, 0x1b, 0x5b, 0xe3, - 0xc9, 0xf1, 0x73, 0x7e, 0xd5, 0xa8, 0xe2, 0x40, 0x54, 0x05, 0x78, 0xd7, 0x1b, 0x1f, 0x22, 0x50, - 0x50, 0x36, 0xb6, 0x93, 0x1a, 0x01, 0x77, 0x33, 0xf7, 0xab, 0x66, 0x49, 0x40, 0xa8, 0xd2, 0xcf, - 0x61, 0x09, 0xa7, 0xa7, 0x3f, 0x09, 0x42, 0x6f, 0x64, 0x09, 0x5e, 0xed, 0x0f, 0x82, 0x46, 0x19, - 0x69, 0xed, 0x1d, 0xd9, 0x58, 0x6d, 0x8e, 0x37, 0xb6, 0x79, 0x10, 0x6e, 0x21, 0xb2, 0x49, 0xb8, - 0x62, 0x43, 0xbf, 0x32, 0x17, 0x07, 0xd3, 0x70, 0xf6, 0x1e, 0x30, 0x7b, 0x38, 0xf4, 0x2e, 0xac, - 0x80, 0x0f, 0x4f, 0x2c, 0x39, 0x88, 0x8d, 0xda, 0xdd, 0xcc, 0xfd, 0xa2, 0x59, 0xc7, 0x94, 0x2e, - 0x1f, 0x9e, 0x1c, 0x12, 0x9c, 0x7d, 0x00, 0xb8, 0x98, 0xac, 0x13, 0x6e, 0x87, 0x13, 0x9f, 0x07, - 0x8d, 0x85, 0xbb, 0xb9, 0xfb, 0xb5, 0xc7, 0x8b, 0xd1, 0x78, 0x21, 0x78, 0xd3, 0x09, 0xcd, 0x8a, - 0xc0, 0x93, 0xdf, 0xc1, 0xfa, 0x36, 0xac, 0xa6, 0x37, 0x49, 0x10, 0x95, 0x18, 0x15, 0x41, 0x8c, - 0x79, 0x53, 0xfc, 0x64, 0xcb, 0x50, 0x38, 0xb7, 0x87, 0x13, 0x2e, 0x79, 0x3a, 0x7d, 0x7c, 0x94, - 0xfd, 0x56, 0xc6, 0xf8, 0xa3, 0x0c, 0x54, 0xa8, 0x97, 0x52, 0x16, 0x79, 0x13, 0xaa, 0x8a, 0x1a, - 0xb8, 0xef, 0x7b, 0xbe, 0xe4, 0x6a, 0x8a, 0xf2, 0x5a, 0x02, 0x26, 0x76, 0x15, 0x85, 0x34, 0xf6, - 0xb9, 0x33, 0xb2, 0x4f, 0x55, 0xd1, 0x8a, 0x94, 0x0e, 0x25, 0x98, 0xbd, 0x1f, 0x97, 0xe7, 0x7b, - 0x93, 0x90, 0xcb, 0x3d, 0xaf, 0x22, 0xbb, 0x67, 0x0a, 0x58, 0x54, 0x3a, 0x7e, 0xbd, 0x02, 0x9d, - 0x1b, 0xbf, 0x9d, 0x01, 0x26, 0x9a, 0xdd, 0xf3, 0xa8, 0x00, 0x49, 0xa1, 0xd3, 0x39, 0x33, 0xaf, - 0xbc, 0x42, 0xb2, 0x2f, 0x5a, 0x21, 0x06, 0x14, 0xa8, 0xed, 0xf9, 0x94, 0xb6, 0x53, 0xd2, 0xf7, - 0xf2, 0xc5, 0x5c, 0x3d, 0x6f, 0xfc, 0x97, 0x1c, 0x2c, 0x6f, 0xd1, 0x96, 0xdd, 0xec, 0xf7, 0xf9, - 0x38, 0x5a, 0x3b, 0x77, 0xa0, 0xec, 0x7a, 0x03, 0xae, 0x28, 0x96, 0x1a, 0x06, 0x02, 0xa4, 0x91, - 0xeb, 0x99, 0xed, 0xb8, 0xd4, 0x70, 0x1a, 0xcc, 0x12, 0x42, 0xb0, 0xd9, 0x6f, 0xc3, 0xc2, 0x98, - 0xbb, 0x03, 0x7d, 0x89, 0x90, 0x50, 0x55, 0x95, 0x60, 0xb9, 0x3a, 0xee, 0x40, 0xf9, 0x64, 0x42, - 0x78, 0x82, 0xb1, 0xe4, 0x91, 0x06, 0x40, 0x82, 0x9a, 0xc4, 0x5f, 0xc6, 0x93, 0xe0, 0x0c, 0x53, - 0x0b, 0x98, 0x3a, 0x2f, 0xbe, 0x45, 0xd2, 0x6d, 0x80, 0xc1, 0x24, 0x08, 0xe5, 0x8a, 0x99, 0xc3, - 0xc4, 0x92, 0x80, 0xd0, 0x8a, 0xf9, 0x3a, 0x2c, 0x8d, 0xec, 0x4b, 0x0b, 0x69, 0xc7, 0x72, 0x5c, - 0xeb, 0x64, 0x88, 0x7b, 0xce, 0x3c, 0xe2, 0xd5, 0x47, 0xf6, 0xe5, 0xa7, 0x22, 0xa5, 0xed, 0xee, - 0x20, 0x5c, 0xb0, 0x15, 0x25, 0xee, 0xf8, 0x3c, 0xe0, 0xfe, 0x39, 0x47, 0x4e, 0x90, 0x8f, 0x64, - 0x1a, 0x93, 0xa0, 0xa2, 0x45, 0x23, 0xd1, 0xef, 0x70, 0xd8, 0xa7, 0x65, 0x6f, 0xce, 0x8f, 0x1c, - 0x77, 0x37, 0x1c, 0xf6, 0xc5, 0xbe, 0x22, 0xf8, 0xc8, 0x98, 0xfb, 0xd6, 0xf3, 0x0b, 0x5c, 0xc3, - 0x79, 0xe4, 0x1b, 0x87, 0xdc, 0x7f, 0x76, 0x21, 0xb6, 0xfe, 0x7e, 0x80, 0x8c, 0xc8, 0xbe, 0x6a, - 0x94, 0x71, 0x81, 0x17, 0xfb, 0x81, 0x60, 0x41, 0xf6, 0x95, 0x58, 0x84, 0xa2, 0xb5, 0x36, 0xce, - 0x02, 0x1f, 0x60, 0xf1, 0x01, 0x72, 0xd4, 0x2a, 0x36, 0xb6, 0x29, 0x13, 0x44, 0x3d, 0x81, 0xa0, - 0x7a, 0xd5, 0xd8, 0x93, 0xa1, 0x7d, 0x1a, 0x20, 0x4b, 0xa9, 0x9a, 0x15, 0x09, 0xdc, 0x11, 0x30, - 0xe3, 0x33, 0x12, 0xb2, 0xb4, 0xb9, 0x95, 0x6b, 0x46, 0x6c, 0xf5, 0x08, 0xc1, 0x79, 0x2d, 0x9a, - 0xf2, 0x2b, 0x6d, 0xd2, 0xb2, 0x29, 0x93, 0x66, 0xfc, 0x5e, 0x06, 0x2a, 0xb2, 0x64, 0x14, 0x4a, - 0xd8, 0x06, 0x30, 0x35, 0x8b, 0xe1, 0xa5, 0x33, 0xb0, 0x8e, 0xaf, 0x42, 0x1e, 0x10, 0xd1, 0xec, - 0xde, 0x30, 0xeb, 0x32, 0xad, 0x77, 0xe9, 0x0c, 0x36, 0x45, 0x0a, 0x7b, 0x00, 0xf5, 0x04, 0x7e, - 0x10, 0xfa, 0x44, 0xd1, 0xbb, 0x37, 0xcc, 0x9a, 0x86, 0xdd, 0x0d, 0x7d, 0xb1, 0x46, 0x84, 0xc8, - 0x33, 0x09, 0x2d, 0xc7, 0x1d, 0xf0, 0x4b, 0x24, 0xa3, 0xaa, 0x59, 0x26, 0x58, 0x5b, 0x80, 0x36, - 0x6b, 0x50, 0xd1, 0x8b, 0x33, 0x4e, 0xa1, 0xa8, 0xe4, 0x25, 0x14, 0x18, 0xa6, 0x9a, 0x64, 0x96, - 0xc2, 0xa8, 0x25, 0x37, 0xa1, 0x98, 0x6c, 0x81, 0x39, 0x1f, 0xbe, 0x72, 0xc5, 0xc6, 0x77, 0xa0, - 0xbe, 0x27, 0x88, 0xc7, 0x15, 0xc4, 0x2a, 0xe5, 0xbf, 0x55, 0x98, 0xd3, 0x16, 0x4d, 0xc9, 0x94, - 0x5f, 0x62, 0xcf, 0x3d, 0xf3, 0x82, 0x50, 0xd6, 0x82, 0xbf, 0x8d, 0x3f, 0xce, 0x00, 0x6b, 0x05, - 0xa1, 0x33, 0xb2, 0x43, 0xbe, 0xc3, 0x23, 0xb6, 0x70, 0x00, 0x15, 0x51, 0x5a, 0xcf, 0x6b, 0x92, - 0x40, 0x46, 0x02, 0xc5, 0xbb, 0x72, 0x19, 0xcf, 0x66, 0xd8, 0xd0, 0xb1, 0x89, 0xcd, 0x27, 0x0a, - 0x10, 0xab, 0x2c, 0xb4, 0xfd, 0x53, 0x1e, 0xa2, 0x18, 0x27, 0xe5, 0x7d, 0x20, 0x90, 0x10, 0xe0, - 0xd6, 0x7f, 0x11, 0x16, 0x67, 0xca, 0xd0, 0xf9, 0x72, 0x29, 0x85, 0x2f, 0xe7, 0x74, 0xbe, 0x6c, - 0xc1, 0x52, 0xa2, 0x5d, 0x92, 0xd2, 0xd6, 0x60, 0x5e, 0x2c, 0x08, 0x21, 0x1c, 0x64, 0x48, 0xaa, - 0x3c, 0xe1, 0x5c, 0x88, 0xc1, 0x0f, 0x61, 0xf9, 0x84, 0x73, 0xdf, 0x0e, 0x31, 0x11, 0x57, 0x8c, - 0x98, 0x21, 0x59, 0xf0, 0xa2, 0x4c, 0xeb, 0xda, 0xe1, 0x21, 0xf7, 0xc5, 0x4c, 0x19, 0xff, 0x2d, - 0x03, 0x0b, 0x82, 0x83, 0xee, 0xdb, 0xee, 0x95, 0x1a, 0xa7, 0xbd, 0xd4, 0x71, 0xba, 0xaf, 0x6d, - 0x86, 0x1a, 0xf6, 0x57, 0x1d, 0xa4, 0xdc, 0xf4, 0x20, 0xb1, 0xbb, 0x50, 0x49, 0xb4, 0xb5, 0x80, - 0x6d, 0x85, 0x20, 0x6a, 0xe4, 0x4f, 0x3f, 0x8c, 0x6f, 0x43, 0x3d, 0x6e, 0xb6, 0x1c, 0x43, 0x06, - 0x79, 0x41, 0x92, 0xb2, 0x00, 0xfc, 0x6d, 0xfc, 0x6e, 0x86, 0x10, 0xb7, 0x3c, 0x27, 0x92, 0x4e, - 0x05, 0xa2, 0x90, 0x7b, 0x15, 0xa2, 0xf8, 0x7d, 0xad, 0x54, 0xff, 0xd3, 0x77, 0x56, 0x2c, 0x9d, - 0x80, 0xbb, 0x03, 0xcb, 0x1e, 0x0e, 0x91, 0xf9, 0x16, 0xcd, 0x79, 0xf1, 0xdd, 0x1c, 0x0e, 0x8d, - 0x7b, 0xb0, 0xa8, 0xb5, 0xee, 0x05, 0xfd, 0xe8, 0x00, 0xdb, 0x73, 0x82, 0xf0, 0xc8, 0x0d, 0xc6, - 0x9a, 0xe0, 0x76, 0x0b, 0x4a, 0x82, 0xc3, 0x8a, 0x96, 0xd1, 0x92, 0x2d, 0x98, 0x82, 0xe5, 0x8a, - 0x76, 0x05, 0x98, 0x68, 0x5f, 0xca, 0xc4, 0xac, 0x4c, 0xb4, 0x2f, 0x31, 0xd1, 0xf8, 0x16, 0x2c, - 0x25, 0xca, 0x93, 0x55, 0xbf, 0x01, 0x85, 0x49, 0x78, 0xe9, 0x29, 0xd1, 0xbc, 0x2c, 0x29, 0x44, - 0x28, 0x80, 0x26, 0xa5, 0x18, 0x1f, 0xc3, 0x62, 0x87, 0x5f, 0xc8, 0x45, 0xac, 0x1a, 0xf2, 0x36, - 0xe4, 0x5f, 0xa2, 0x14, 0x62, 0xba, 0xb1, 0x01, 0x4c, 0xcf, 0x2c, 0x6b, 0xd5, 0x74, 0xc4, 0x4c, - 0x42, 0x47, 0x34, 0xde, 0x06, 0xd6, 0x75, 0x4e, 0xdd, 0x7d, 0x1e, 0x04, 0xf6, 0x69, 0xb4, 0xec, - 0xeb, 0x90, 0x1b, 0x05, 0xa7, 0x92, 0x47, 0x89, 0x9f, 0xc6, 0x37, 0x60, 0x29, 0x81, 0x27, 0x0b, - 0x7e, 0x0d, 0x4a, 0x81, 0x73, 0xea, 0xa2, 0x60, 0x25, 0x8b, 0x8e, 0x01, 0xc6, 0x0e, 0x2c, 0x7f, - 0xca, 0x7d, 0xe7, 0xe4, 0xea, 0x65, 0xc5, 0x27, 0xcb, 0xc9, 0x4e, 0x97, 0xd3, 0x82, 0x95, 0xa9, - 0x72, 0x64, 0xf5, 0x44, 0xbe, 0x72, 0x26, 0x8b, 0x26, 0x7d, 0x68, 0x7c, 0x2f, 0xab, 0xf3, 0x3d, - 0xe3, 0x08, 0xd8, 0x96, 0xe7, 0xba, 0xbc, 0x1f, 0x1e, 0x72, 0xee, 0xc7, 0x56, 0xaa, 0x98, 0x56, - 0xcb, 0x8f, 0xd7, 0xe4, 0xc8, 0x4e, 0x33, 0x53, 0x49, 0xc4, 0x0c, 0xf2, 0x63, 0xee, 0x8f, 0xb0, - 0xe0, 0xa2, 0x89, 0xbf, 0x8d, 0x15, 0x58, 0x4a, 0x14, 0x2b, 0xf5, 0xfa, 0x47, 0xb0, 0xb2, 0xed, - 0x04, 0xfd, 0xd9, 0x0a, 0xd7, 0x60, 0x7e, 0x3c, 0x39, 0xb6, 0x92, 0x7c, 0xf9, 0x19, 0xbf, 0x12, - 0xda, 0xde, 0x74, 0x0e, 0x59, 0xd6, 0x5f, 0xcd, 0x40, 0x7e, 0xb7, 0xb7, 0xb7, 0xc5, 0xd6, 0xa1, - 0xe8, 0xb8, 0x7d, 0x6f, 0x24, 0x04, 0x2f, 0xea, 0x73, 0xf4, 0x7d, 0xed, 0x02, 0xbb, 0x05, 0x25, - 0x94, 0xd7, 0x84, 0x6a, 0x2b, 0x45, 0x9f, 0xa2, 0x00, 0xec, 0x79, 0xfd, 0xe7, 0x42, 0xa7, 0xe6, - 0x97, 0x63, 0xc7, 0x47, 0xad, 0x59, 0x29, 0xc3, 0x79, 0xda, 0xeb, 0xe3, 0x04, 0xd2, 0x88, 0x8d, - 0x7f, 0x5d, 0x84, 0x79, 0xb9, 0xdb, 0xd2, 0xce, 0x1d, 0x3a, 0xe7, 0x3c, 0xde, 0xb9, 0xc5, 0x97, - 0x90, 0x07, 0x7c, 0x3e, 0xf2, 0xc2, 0x48, 0x60, 0xa3, 0x39, 0xa8, 0x10, 0x50, 0x8a, 0x6c, 0x9a, - 0xd0, 0x40, 0x26, 0x86, 0x1c, 0x21, 0xf5, 0xf5, 0xad, 0xfc, 0x16, 0xcc, 0xab, 0xbd, 0x3f, 0x1f, - 0xe9, 0x34, 0x73, 0x7d, 0x92, 0xd6, 0xd6, 0xa1, 0xd8, 0xb7, 0xc7, 0x76, 0xdf, 0x09, 0xaf, 0x24, - 0x43, 0x88, 0xbe, 0x45, 0xe9, 0x43, 0xaf, 0x6f, 0x0f, 0xad, 0x63, 0x7b, 0x68, 0xbb, 0x7d, 0x2e, - 0x75, 0xf7, 0x0a, 0x02, 0x37, 0x09, 0x26, 0xf4, 0x73, 0xd9, 0x4e, 0x85, 0x45, 0x2a, 0xbc, 0x6c, - 0xbd, 0x42, 0x13, 0xc2, 0xa5, 0x37, 0x1a, 0x39, 0x42, 0xcb, 0x20, 0x31, 0x2c, 0x67, 0x96, 0x08, - 0xb2, 0xc3, 0xb1, 0xb7, 0x32, 0xf9, 0x82, 0x86, 0xae, 0x44, 0x55, 0x11, 0xf0, 0x33, 0x32, 0x24, - 0xcc, 0xca, 0x62, 0x39, 0x4d, 0x16, 0x7b, 0x17, 0x16, 0x27, 0x6e, 0xc0, 0xc3, 0x70, 0xc8, 0x07, - 0x51, 0x5b, 0xca, 0x88, 0x54, 0x8f, 0x12, 0x54, 0x73, 0x36, 0x60, 0x89, 0x8c, 0x0e, 0x81, 0x1d, - 0x7a, 0xc1, 0x99, 0x13, 0x58, 0x81, 0xd0, 0x90, 0x48, 0xdd, 0x5d, 0xc4, 0xa4, 0xae, 0x4c, 0xe9, - 0x92, 0x8a, 0xb4, 0x36, 0x85, 0xef, 0xf3, 0x3e, 0x77, 0xce, 0xf9, 0x00, 0xe5, 0xb4, 0x9c, 0xb9, - 0x92, 0xc8, 0x63, 0xca, 0x44, 0x14, 0xba, 0x27, 0x23, 0x6b, 0x32, 0x1e, 0xd8, 0x42, 0x58, 0xa9, - 0x91, 0x30, 0xec, 0x4e, 0x46, 0x47, 0x04, 0x61, 0x8f, 0x40, 0x49, 0x62, 0x52, 0x3e, 0x5c, 0x48, - 0xf0, 0x33, 0x41, 0xac, 0x66, 0x45, 0x62, 0x90, 0xa0, 0x98, 0x90, 0x39, 0xeb, 0x53, 0x32, 0x67, - 0x03, 0xe6, 0xc7, 0xbe, 0x73, 0x6e, 0x87, 0xbc, 0xb1, 0x48, 0x0c, 0x5c, 0x7e, 0x0a, 0xce, 0xe0, - 0xb8, 0x4e, 0xe8, 0xd8, 0xa1, 0xe7, 0x37, 0x18, 0xa6, 0xc5, 0x00, 0xf6, 0x00, 0x16, 0x91, 0x46, - 0x82, 0xd0, 0x0e, 0x27, 0x81, 0x94, 0x40, 0x97, 0x90, 0x98, 0x50, 0x86, 0xee, 0x22, 0x1c, 0x85, - 0x50, 0xf6, 0x0d, 0x58, 0x25, 0xb2, 0xc0, 0x1c, 0x52, 0xb2, 0x46, 0x81, 0x60, 0x19, 0x87, 0x62, - 0x09, 0x53, 0x05, 0x7d, 0x4b, 0xf9, 0x5a, 0x48, 0x07, 0x4f, 0x60, 0x4d, 0x92, 0xc9, 0x4c, 0xae, - 0x15, 0xcc, 0xb5, 0x4c, 0xc9, 0x53, 0xd9, 0x36, 0x60, 0x51, 0x34, 0xc9, 0xe9, 0x5b, 0x32, 0xb7, - 0x58, 0x09, 0xab, 0xa2, 0xf5, 0xa8, 0x29, 0x2d, 0x50, 0xa2, 0x89, 0x69, 0xcf, 0xf8, 0x15, 0xfb, - 0x0e, 0x2c, 0x10, 0xc9, 0xa0, 0x7a, 0x85, 0x9c, 0x7e, 0x1d, 0x39, 0xfd, 0x8a, 0xb2, 0x70, 0x46, - 0xa9, 0xc8, 0xec, 0x6b, 0xfd, 0xc4, 0xb7, 0x58, 0x0e, 0x43, 0xe7, 0x84, 0x87, 0xce, 0x88, 0x37, - 0xd6, 0x88, 0xc0, 0xd4, 0xb7, 0x58, 0xa9, 0x93, 0x31, 0xa6, 0x34, 0x88, 0x2f, 0xd0, 0x17, 0xd2, - 0xee, 0xd0, 0x0b, 0xb8, 0x32, 0x51, 0x35, 0x6e, 0xca, 0x45, 0x28, 0x80, 0x4a, 0x86, 0x14, 0x82, - 0x38, 0x29, 0x3d, 0x91, 0x21, 0xf1, 0x16, 0x12, 0x43, 0x95, 0x74, 0x1f, 0x65, 0x4c, 0x14, 0xbb, - 0xf8, 0x99, 0x7d, 0xa1, 0x38, 0xc8, 0x6b, 0x38, 0xbf, 0x20, 0x40, 0x92, 0x77, 0xfc, 0x38, 0x43, - 0x1b, 0xa2, 0xe4, 0x1f, 0x81, 0xa6, 0xde, 0x11, 0xe7, 0xb0, 0x3c, 0x77, 0x78, 0x25, 0x99, 0x09, - 0x10, 0xe8, 0xc0, 0x1d, 0xe2, 0x6a, 0x76, 0x5c, 0x1d, 0x85, 0x78, 0x6f, 0x45, 0x01, 0x11, 0xe9, - 0x0e, 0x94, 0xc7, 0x93, 0xe3, 0xa1, 0xd3, 0x27, 0x94, 0x1c, 0x95, 0x42, 0x20, 0x44, 0x10, 0xfa, - 0x2d, 0x51, 0x14, 0x61, 0xe4, 0x11, 0xa3, 0x2c, 0x61, 0x88, 0x82, 0xbc, 0x9d, 0xfb, 0xc8, 0x4e, - 0x2a, 0x26, 0xfe, 0x36, 0x36, 0x61, 0x39, 0xd9, 0x68, 0xb9, 0xf1, 0x3c, 0x80, 0xa2, 0xe4, 0x55, - 0xca, 0xf0, 0x51, 0xd3, 0x4c, 0xd1, 0x42, 0x45, 0x8b, 0xd2, 0x8d, 0xdf, 0x2f, 0xc0, 0x92, 0x84, - 0x6e, 0x89, 0xa1, 0xed, 0x4e, 0x46, 0x23, 0xdb, 0x4f, 0x61, 0x82, 0x99, 0x17, 0x33, 0xc1, 0xec, - 0x0c, 0x13, 0x4c, 0x6a, 0xbe, 0xc4, 0x43, 0x93, 0x9a, 0xaf, 0x98, 0x4b, 0x52, 0x46, 0x74, 0x3b, - 0x68, 0x55, 0x82, 0x7b, 0x64, 0x6f, 0x9d, 0x61, 0xd9, 0x85, 0x14, 0x96, 0xad, 0x33, 0xdc, 0xb9, - 0x29, 0x86, 0xfb, 0x06, 0x10, 0xd1, 0xa8, 0xd9, 0x9f, 0x27, 0xfd, 0x04, 0x61, 0xd2, 0x98, 0x7a, - 0x0f, 0x16, 0xa6, 0x79, 0x1c, 0x31, 0xd3, 0x5a, 0x0a, 0x87, 0x73, 0x46, 0x1c, 0x77, 0x2b, 0x0d, - 0xb9, 0x24, 0x39, 0x9c, 0x33, 0xe2, 0x7b, 0x98, 0xa2, 0xf0, 0x5b, 0x00, 0x54, 0x37, 0x2e, 0x1a, - 0xc0, 0x45, 0xf3, 0x76, 0x72, 0x2e, 0xf4, 0x51, 0xdf, 0x10, 0x1f, 0x13, 0x9f, 0xe3, 0x2a, 0x2a, - 0x61, 0x4e, 0x5c, 0x40, 0x1f, 0x42, 0xcd, 0x1b, 0x73, 0xd7, 0x8a, 0x79, 0x4d, 0x19, 0x8b, 0xaa, - 0xcb, 0xa2, 0xda, 0x0a, 0x6e, 0x56, 0x05, 0x5e, 0xf4, 0xc9, 0xbe, 0x4d, 0x83, 0xcc, 0xb5, 0x9c, - 0x95, 0x6b, 0x72, 0xd6, 0x10, 0x31, 0xfa, 0x36, 0x7e, 0x33, 0x03, 0x65, 0xad, 0x39, 0x6c, 0x05, - 0x16, 0xb7, 0x0e, 0x0e, 0x0e, 0x5b, 0x66, 0xb3, 0xd7, 0xfe, 0xb4, 0x65, 0x6d, 0xed, 0x1d, 0x74, - 0x5b, 0xf5, 0x1b, 0x02, 0xbc, 0x77, 0xb0, 0xd5, 0xdc, 0xb3, 0x76, 0x0e, 0xcc, 0x2d, 0x05, 0xce, - 0xb0, 0x55, 0x60, 0x66, 0x6b, 0xff, 0xa0, 0xd7, 0x4a, 0xc0, 0xb3, 0xac, 0x0e, 0x95, 0x4d, 0xb3, - 0xd5, 0xdc, 0xda, 0x95, 0x90, 0x1c, 0x5b, 0x86, 0xfa, 0xce, 0x51, 0x67, 0xbb, 0xdd, 0x79, 0x6a, - 0x6d, 0x35, 0x3b, 0x5b, 0xad, 0xbd, 0xd6, 0x76, 0x3d, 0xcf, 0xaa, 0x50, 0x6a, 0x6e, 0x36, 0x3b, - 0xdb, 0x07, 0x9d, 0xd6, 0x76, 0xbd, 0x60, 0xfc, 0x79, 0x06, 0x56, 0x70, 0xa0, 0x06, 0xd3, 0x2b, - 0xf4, 0x2e, 0x94, 0xfb, 0x9e, 0x37, 0x16, 0x6a, 0x50, 0xbc, 0xdd, 0xeb, 0x20, 0xb1, 0xfa, 0x88, - 0xb3, 0x9e, 0x78, 0x7e, 0x9f, 0xcb, 0x05, 0x0a, 0x08, 0xda, 0x11, 0x10, 0x41, 0x20, 0x92, 0xc2, - 0x08, 0x83, 0xd6, 0x67, 0x99, 0x60, 0x84, 0xb2, 0x0a, 0x73, 0xc7, 0x3e, 0xb7, 0xfb, 0x67, 0x72, - 0x69, 0xca, 0x2f, 0xf6, 0x4e, 0xac, 0xa0, 0xf7, 0xc5, 0x84, 0x0f, 0xf9, 0x00, 0xe9, 0xb3, 0x68, - 0x2e, 0x48, 0xf8, 0x96, 0x04, 0x8b, 0xad, 0xc2, 0x3e, 0xb6, 0xdd, 0x81, 0xe7, 0xf2, 0x81, 0xd4, - 0x03, 0x62, 0x80, 0x71, 0x08, 0xab, 0xd3, 0xfd, 0x93, 0x8b, 0xf9, 0x03, 0x6d, 0x31, 0x93, 0x58, - 0xbe, 0x7e, 0x3d, 0x01, 0x69, 0x0b, 0xfb, 0x6f, 0xe5, 0x21, 0x2f, 0xc4, 0xb4, 0x6b, 0x25, 0x3a, - 0x5d, 0xee, 0xce, 0xcd, 0xf8, 0x66, 0xd0, 0x0e, 0x40, 0xfb, 0x37, 0x19, 0x9b, 0x4a, 0x08, 0xc1, - 0x7d, 0x3b, 0x4a, 0xf6, 0x79, 0xff, 0x5c, 0x5a, 0x9b, 0x28, 0xd9, 0xe4, 0xfd, 0x73, 0x54, 0x78, - 0xec, 0x90, 0xf2, 0xd2, 0x62, 0x9c, 0x0f, 0xec, 0x10, 0x73, 0xca, 0x24, 0xcc, 0x37, 0x1f, 0x25, - 0x61, 0xae, 0x06, 0xcc, 0x3b, 0xee, 0xb1, 0x37, 0x71, 0x07, 0xb8, 0xf6, 0x8a, 0xa6, 0xfa, 0x44, - 0x57, 0x10, 0xb2, 0x09, 0xb1, 0x4b, 0xd0, 0x52, 0x2b, 0x0a, 0x40, 0x4f, 0xec, 0x13, 0xef, 0x43, - 0x29, 0xb8, 0x72, 0xfb, 0xfa, 0x02, 0x5b, 0x96, 0xe3, 0x23, 0x7a, 0xbf, 0xd1, 0xbd, 0x72, 0xfb, - 0xb8, 0x9c, 0x8a, 0x81, 0xfc, 0xc5, 0x9e, 0x40, 0x31, 0x32, 0xca, 0x12, 0x7b, 0xbc, 0xa9, 0xe7, - 0x50, 0x96, 0x58, 0xd2, 0x7d, 0x23, 0x54, 0xf6, 0x10, 0xe6, 0xd0, 0x72, 0x1a, 0x34, 0x2a, 0x98, - 0x49, 0x09, 0xe3, 0xa2, 0x19, 0xe8, 0x85, 0xe1, 0x03, 0xb4, 0xa2, 0x9a, 0x12, 0x6d, 0xfd, 0x19, - 0x54, 0x13, 0x65, 0xe9, 0x1a, 0x6e, 0x95, 0x34, 0xdc, 0xb7, 0x74, 0x0d, 0x37, 0x66, 0xd3, 0x32, - 0x9b, 0xae, 0xf1, 0xfe, 0x22, 0x14, 0x55, 0x57, 0xc4, 0x22, 0x3a, 0xea, 0x3c, 0xeb, 0x1c, 0x7c, - 0xd6, 0xb1, 0xba, 0x9f, 0x77, 0xb6, 0xea, 0x37, 0xd8, 0x02, 0x94, 0x9b, 0x5b, 0xb8, 0x2e, 0x11, - 0x90, 0x11, 0x28, 0x87, 0xcd, 0x6e, 0x37, 0x82, 0x64, 0x8d, 0x1d, 0xa8, 0x4f, 0xb7, 0x54, 0xd0, - 0x64, 0xa8, 0x60, 0xd2, 0xae, 0x1c, 0x03, 0x84, 0xfe, 0x42, 0xa6, 0x62, 0x12, 0x92, 0xe9, 0xc3, - 0x78, 0x02, 0x75, 0xb1, 0xe9, 0x88, 0xa1, 0x0a, 0x34, 0xfb, 0xec, 0x50, 0x08, 0x5e, 0xba, 0x6d, - 0xb9, 0x68, 0x96, 0x09, 0x86, 0x55, 0x19, 0x1f, 0xc0, 0xa2, 0x96, 0x2d, 0xd6, 0x37, 0xc5, 0x46, - 0x36, 0xad, 0x6f, 0xa2, 0x76, 0x41, 0x29, 0xc6, 0x1a, 0xac, 0x88, 0xcf, 0xd6, 0x39, 0x77, 0xc3, - 0xee, 0xe4, 0x98, 0x1c, 0x82, 0x8e, 0xe7, 0x0a, 0xad, 0xa3, 0x14, 0xa5, 0x5c, 0x4f, 0xe4, 0x1b, - 0x52, 0x35, 0xcd, 0x22, 0x69, 0xac, 0x6b, 0x35, 0x60, 0xc6, 0x0d, 0xfc, 0x9b, 0x50, 0x51, 0x4b, - 0x11, 0x48, 0x0c, 0xeb, 0x61, 0xab, 0x65, 0x5a, 0x07, 0x9d, 0xbd, 0x76, 0x47, 0x70, 0x3b, 0x31, - 0xac, 0x08, 0xd8, 0xd9, 0x41, 0x48, 0xc6, 0xa8, 0x43, 0xed, 0x29, 0x0f, 0xdb, 0xee, 0x89, 0xa7, - 0x9c, 0x5f, 0x7f, 0x63, 0x0e, 0x16, 0x22, 0x50, 0xac, 0xe2, 0x9e, 0x73, 0x3f, 0x70, 0x3c, 0x17, - 0xa5, 0xd5, 0x92, 0xa9, 0x3e, 0x05, 0x77, 0x92, 0x32, 0x3a, 0x6e, 0x81, 0xcb, 0x98, 0x2a, 0xa5, - 0x7a, 0xdc, 0xff, 0xee, 0xc1, 0x82, 0x33, 0xe0, 0x6e, 0xe8, 0x84, 0x57, 0x56, 0xc2, 0x60, 0x56, - 0x53, 0x60, 0xb9, 0x07, 0x2e, 0x43, 0xc1, 0x1e, 0x3a, 0xb6, 0x72, 0xb4, 0xd2, 0x87, 0x80, 0xf6, - 0xbd, 0xa1, 0xe7, 0xa3, 0xe4, 0x5a, 0x32, 0xe9, 0x83, 0x3d, 0x82, 0x65, 0x21, 0x41, 0xeb, 0x56, - 0x4c, 0x64, 0x30, 0x64, 0xbb, 0x63, 0xee, 0x64, 0x74, 0x18, 0x5b, 0x32, 0x45, 0x8a, 0xd8, 0xf9, - 0x44, 0x0e, 0x29, 0xea, 0x44, 0x19, 0x48, 0x19, 0x5b, 0x74, 0x27, 0xa3, 0x26, 0xa6, 0x44, 0xf8, - 0x8f, 0x61, 0x45, 0xe0, 0x47, 0xc2, 0x51, 0x94, 0x63, 0x01, 0x73, 0x88, 0xc2, 0xda, 0x32, 0x2d, - 0xca, 0x73, 0x0b, 0x4a, 0xd4, 0x2a, 0x41, 0x12, 0x05, 0x12, 0xc2, 0xb1, 0x29, 0xdc, 0x0f, 0x66, - 0x7c, 0xa2, 0x73, 0xb4, 0x8d, 0x4f, 0xf9, 0x44, 0x35, 0xaf, 0x6a, 0x71, 0xda, 0xab, 0xfa, 0x18, - 0x56, 0x8e, 0x05, 0x8d, 0x9e, 0x71, 0x7b, 0xc0, 0x7d, 0x2b, 0xa6, 0x7c, 0x52, 0x36, 0x96, 0x44, - 0xe2, 0x2e, 0xa6, 0x45, 0x0b, 0x45, 0x48, 0x29, 0x82, 0x6f, 0xf0, 0x81, 0x15, 0x7a, 0x16, 0x0a, - 0x2f, 0xc8, 0x81, 0x8a, 0x66, 0x95, 0xc0, 0x3d, 0x6f, 0x4b, 0x00, 0x93, 0x78, 0xa7, 0xbe, 0x3d, - 0x3e, 0x93, 0xea, 0x40, 0x84, 0xf7, 0x54, 0x00, 0xd9, 0x6b, 0x30, 0x2f, 0xd6, 0x84, 0xcb, 0xc9, - 0x75, 0x45, 0x02, 0xb7, 0x02, 0xb1, 0xb7, 0x60, 0x0e, 0xeb, 0x08, 0x1a, 0x75, 0x5c, 0x10, 0x95, - 0x98, 0xd3, 0x3b, 0xae, 0x29, 0xd3, 0x84, 0x28, 0x38, 0xf1, 0x1d, 0x62, 0x43, 0x25, 0x13, 0x7f, - 0xb3, 0xef, 0x6a, 0x3c, 0x6d, 0x09, 0xf3, 0xbe, 0x25, 0xf3, 0x4e, 0x91, 0xe2, 0x75, 0xec, 0xed, - 0x67, 0xca, 0xad, 0xbe, 0x97, 0x2f, 0x96, 0xeb, 0x15, 0xe3, 0x43, 0x28, 0xd0, 0xe8, 0x08, 0x22, - 0xc4, 0xb1, 0xcb, 0x48, 0x22, 0x44, 0x68, 0x03, 0xe6, 0x5d, 0x1e, 0x5e, 0x78, 0xfe, 0x73, 0x65, - 0x52, 0x96, 0x9f, 0xc6, 0x0f, 0xd1, 0x16, 0x12, 0xf9, 0xcb, 0x49, 0xad, 0x13, 0xe4, 0x41, 0xd3, - 0x1b, 0x9c, 0xd9, 0xd2, 0x3c, 0x53, 0x44, 0x40, 0xf7, 0xcc, 0x9e, 0x21, 0x8f, 0xec, 0xac, 0xcb, - 0xfc, 0x2d, 0xa8, 0x29, 0x0f, 0x7d, 0x60, 0x0d, 0xf9, 0x49, 0x28, 0xc9, 0xbd, 0x22, 0xdd, 0xf3, - 0xc1, 0x1e, 0x3f, 0x09, 0x8d, 0x7d, 0x58, 0x94, 0x04, 0x79, 0x30, 0xe6, 0xaa, 0xea, 0x6f, 0xa5, - 0x49, 0xc3, 0xe5, 0xc7, 0x4b, 0xc9, 0x9d, 0x98, 0x22, 0x0f, 0x12, 0x22, 0xb2, 0xf1, 0x09, 0x30, - 0x7d, 0x9f, 0x96, 0xe5, 0x49, 0x99, 0x54, 0x59, 0xe2, 0x95, 0x43, 0x2b, 0x92, 0x7c, 0x9d, 0x81, - 0x18, 0x9d, 0x60, 0xd2, 0xef, 0xab, 0xc8, 0x89, 0xa2, 0xa9, 0x3e, 0x8d, 0x3f, 0xc9, 0xc0, 0x12, - 0x16, 0xa6, 0xa4, 0x79, 0xc9, 0x85, 0x7f, 0xe2, 0x46, 0x8a, 0xf9, 0xd1, 0x85, 0x23, 0xfa, 0xf8, - 0xea, 0xb6, 0xcf, 0xfc, 0x8c, 0xed, 0xf3, 0x1d, 0xa8, 0x0f, 0xf8, 0xd0, 0xc1, 0x20, 0x1a, 0x25, - 0x6b, 0x90, 0xfc, 0xbe, 0xa0, 0xe0, 0x52, 0x97, 0x33, 0xfe, 0x5e, 0x06, 0x16, 0x49, 0x94, 0x41, - 0xad, 0x58, 0x0e, 0xd4, 0xc7, 0x4a, 0x0d, 0x94, 0xac, 0x4a, 0xf6, 0x29, 0xde, 0xe2, 0x11, 0x4a, - 0xc8, 0xbb, 0x37, 0xa4, 0x7a, 0x28, 0xa1, 0xec, 0x23, 0xd4, 0x40, 0x5c, 0x0b, 0x81, 0x29, 0x41, - 0x39, 0xc9, 0x49, 0xd9, 0xbd, 0x81, 0xea, 0x89, 0x8b, 0xa0, 0xcd, 0xa2, 0xd0, 0x4b, 0x05, 0xd8, - 0xd8, 0x81, 0x6a, 0xa2, 0x9a, 0x84, 0x81, 0xb6, 0x42, 0x06, 0xda, 0x19, 0x27, 0x48, 0x76, 0xd6, - 0x09, 0x72, 0x05, 0x4b, 0x26, 0xb7, 0x07, 0x57, 0x3b, 0x9e, 0x7f, 0x18, 0x1c, 0x87, 0x3b, 0x24, - 0x1f, 0x0a, 0xfe, 0x1e, 0x79, 0xf6, 0x12, 0x56, 0x50, 0xe5, 0xe0, 0x51, 0xca, 0xee, 0xd7, 0xa0, - 0x16, 0xbb, 0x00, 0x35, 0x4b, 0x5a, 0x35, 0xf2, 0x02, 0xa2, 0x41, 0x4d, 0x28, 0x8a, 0xc1, 0x71, - 0x28, 0x6d, 0x69, 0xf8, 0xdb, 0xf8, 0x6b, 0x79, 0x60, 0x82, 0x9a, 0xa7, 0x08, 0x66, 0xca, 0x79, - 0x99, 0x9d, 0x71, 0x5e, 0x3e, 0x02, 0xa6, 0x21, 0x28, 0x9f, 0x6a, 0x2e, 0xf2, 0xa9, 0xd6, 0x63, - 0x5c, 0xe9, 0x52, 0x7d, 0x04, 0xcb, 0x52, 0xd8, 0x4e, 0x36, 0x95, 0x48, 0x83, 0x91, 0xd4, 0x9d, - 0x68, 0xaf, 0x72, 0x5c, 0x0a, 0xe5, 0x9d, 0x6c, 0x65, 0xe8, 0xb8, 0x54, 0x6a, 0xbb, 0x46, 0x80, - 0x73, 0x2f, 0x25, 0xc0, 0xf9, 0x19, 0x02, 0xd4, 0x4c, 0x37, 0xc5, 0xa4, 0xe9, 0xc6, 0x80, 0xaa, - 0x72, 0x4f, 0x52, 0x54, 0x06, 0x49, 0x96, 0x65, 0xe9, 0xa3, 0xc4, 0xc8, 0x8c, 0xfb, 0x50, 0x57, - 0xf6, 0x95, 0xc8, 0x38, 0x44, 0x11, 0x07, 0xd2, 0x3c, 0xb7, 0xa5, 0x4c, 0x44, 0x09, 0x53, 0x7c, - 0x79, 0xca, 0x14, 0xff, 0x2e, 0x2c, 0x06, 0x82, 0x7e, 0xad, 0x89, 0x2b, 0xc3, 0x83, 0xf8, 0x00, - 0xf5, 0xb0, 0xa2, 0x59, 0xc7, 0x84, 0xa3, 0x18, 0x3e, 0x6b, 0xf8, 0xa8, 0xa6, 0x18, 0x3e, 0x9e, - 0xc4, 0x9e, 0xbc, 0xe0, 0xcc, 0x19, 0xa1, 0x50, 0x11, 0x87, 0xd2, 0xc8, 0x01, 0xee, 0x9e, 0x39, - 0x23, 0x53, 0xb9, 0x8d, 0xc5, 0x87, 0xf1, 0xbf, 0x33, 0x50, 0x17, 0x74, 0x90, 0x58, 0x62, 0xdf, - 0x06, 0x64, 0x06, 0xaf, 0xb8, 0xc2, 0xca, 0x02, 0x57, 0x2d, 0xb0, 0x0f, 0x01, 0x57, 0x8c, 0x25, - 0x94, 0x4e, 0xb9, 0xbe, 0x1a, 0xc9, 0xf5, 0x15, 0xf3, 0xd0, 0xdd, 0x1b, 0xa4, 0x9c, 0x08, 0x08, - 0xfb, 0x36, 0x94, 0x04, 0x61, 0x22, 0x95, 0xc8, 0x08, 0x2e, 0x25, 0x9a, 0xa5, 0xac, 0x11, 0x91, - 0x75, 0x2c, 0x3f, 0xd3, 0x9c, 0xaf, 0xf9, 0x14, 0xe7, 0xab, 0xb6, 0x80, 0x77, 0x01, 0x9e, 0xf1, - 0xab, 0x3d, 0xaf, 0x8f, 0x2a, 0xf1, 0x6d, 0x00, 0x41, 0xcb, 0x27, 0xf6, 0xc8, 0x91, 0x16, 0x9d, - 0x82, 0x59, 0x7a, 0xce, 0xaf, 0x76, 0x10, 0x20, 0x26, 0x52, 0x24, 0xc7, 0xab, 0xb8, 0x60, 0x16, - 0x9f, 0xf3, 0x2b, 0x5a, 0xc2, 0x16, 0x54, 0x9f, 0xf1, 0xab, 0x6d, 0x4e, 0x52, 0xa8, 0xe7, 0x0b, - 0x22, 0xf2, 0xed, 0x0b, 0x21, 0x76, 0x26, 0x1c, 0xa7, 0x65, 0xdf, 0xbe, 0x78, 0xc6, 0xaf, 0x94, - 0x13, 0x77, 0x5e, 0xa4, 0x0f, 0xbd, 0xbe, 0xdc, 0x37, 0x55, 0x08, 0x48, 0xdc, 0x28, 0x73, 0xee, - 0x39, 0xfe, 0x36, 0xfe, 0x32, 0x03, 0x55, 0xd1, 0x7e, 0x64, 0xcb, 0x62, 0xca, 0x54, 0x24, 0x51, - 0x26, 0x8e, 0x24, 0x7a, 0x2c, 0xb9, 0x1a, 0xf1, 0xf8, 0xec, 0xf5, 0x3c, 0x1e, 0xe7, 0x86, 0x18, - 0xfc, 0xfb, 0x50, 0xa2, 0x65, 0x29, 0xd6, 0x79, 0x2e, 0x31, 0xc1, 0x89, 0x0e, 0x99, 0x45, 0x44, - 0x7b, 0x46, 0x81, 0x0b, 0x9a, 0x75, 0x90, 0x86, 0xb8, 0xe4, 0x47, 0x36, 0xc1, 0x94, 0x69, 0x28, - 0x5c, 0x13, 0xb8, 0xa0, 0x9b, 0xde, 0xe6, 0x66, 0x4c, 0x6f, 0x07, 0x50, 0x14, 0x53, 0x8d, 0x9d, - 0x4d, 0x29, 0x34, 0x93, 0x56, 0xa8, 0x90, 0x04, 0x6c, 0xb1, 0x29, 0x08, 0x46, 0x97, 0x95, 0x92, - 0x80, 0x1d, 0xf0, 0x43, 0x64, 0x76, 0x19, 0x28, 0x6b, 0x2b, 0x00, 0xad, 0x97, 0xd1, 0x78, 0xd1, - 0x72, 0x49, 0x92, 0x78, 0x62, 0xc0, 0x77, 0x6f, 0x98, 0xd5, 0x7e, 0x62, 0x06, 0x36, 0x24, 0xad, - 0x62, 0xce, 0x6c, 0x22, 0xe8, 0x49, 0x35, 0x5c, 0x11, 0xa8, 0xf8, 0xbd, 0x39, 0x07, 0x79, 0x81, - 0x6a, 0x7c, 0x0c, 0x8b, 0x5a, 0x33, 0xc8, 0x0e, 0xf0, 0xaa, 0x3d, 0x34, 0x7e, 0x25, 0xca, 0x2c, - 0xea, 0x20, 0xff, 0x92, 0x0a, 0x02, 0xe1, 0x03, 0xea, 0xb8, 0x0c, 0x36, 0x21, 0x90, 0x40, 0x7b, - 0xe5, 0xc0, 0x84, 0x5f, 0x83, 0x25, 0xad, 0xf4, 0x1d, 0xc7, 0xb5, 0x87, 0xce, 0x0f, 0x71, 0xc3, - 0x0f, 0x9c, 0x53, 0x77, 0xaa, 0x7c, 0x02, 0x7d, 0xa5, 0xf2, 0xff, 0x7e, 0x16, 0x96, 0x65, 0x05, - 0x18, 0xd6, 0xe7, 0x08, 0x29, 0x6e, 0x3f, 0x38, 0x65, 0xdf, 0x86, 0xaa, 0x18, 0x1b, 0xcb, 0xe7, - 0xa7, 0x4e, 0x10, 0x72, 0xe5, 0xd7, 0x4a, 0x61, 0x5c, 0x62, 0x33, 0x17, 0xa8, 0xa6, 0xc4, 0x64, - 0x1f, 0x43, 0x19, 0xb3, 0x92, 0x9d, 0x45, 0x4e, 0x44, 0x63, 0x36, 0x23, 0x0d, 0xf4, 0xee, 0x0d, - 0x13, 0x82, 0x78, 0xd8, 0x3f, 0x86, 0x32, 0xce, 0xe1, 0x39, 0x0e, 0xe4, 0x14, 0xab, 0x9a, 0x19, - 0x68, 0x91, 0x79, 0x1c, 0x0f, 0x7b, 0x13, 0xaa, 0xc4, 0xac, 0xe4, 0x38, 0xc9, 0x70, 0xa1, 0xf5, - 0xd9, 0xec, 0x6a, 0x24, 0x45, 0xe3, 0xc7, 0xda, 0xf7, 0x66, 0x09, 0xe6, 0x43, 0xdf, 0x39, 0x3d, - 0xe5, 0xbe, 0xb1, 0x1a, 0x0d, 0x8d, 0xe0, 0xc2, 0xbc, 0x1b, 0xf2, 0xb1, 0x90, 0xcd, 0x8d, 0x7f, - 0x9b, 0x81, 0xb2, 0xe4, 0xab, 0x3f, 0xb1, 0x33, 0x6d, 0x5d, 0x8b, 0x8b, 0x25, 0x93, 0x4e, 0x1c, - 0x06, 0x7b, 0x0f, 0x16, 0x46, 0x42, 0x4e, 0x17, 0x7a, 0x64, 0xc2, 0x93, 0x56, 0x53, 0x60, 0x29, - 0x26, 0x6f, 0xc0, 0x12, 0x4a, 0xcd, 0x81, 0x15, 0x3a, 0x43, 0x4b, 0x25, 0xca, 0x18, 0xd4, 0x45, - 0x4a, 0xea, 0x39, 0xc3, 0x7d, 0x99, 0x20, 0x84, 0xc7, 0x20, 0xb4, 0x4f, 0xb9, 0x5c, 0xdb, 0xf4, - 0x61, 0x34, 0x60, 0x75, 0x4a, 0x85, 0x54, 0xfa, 0xf1, 0xff, 0x59, 0x84, 0xb5, 0x99, 0x24, 0xa9, - 0x27, 0x47, 0x1e, 0xa4, 0xa1, 0x33, 0x3a, 0xf6, 0x22, 0xfb, 0x6a, 0x46, 0xf3, 0x20, 0xed, 0x89, - 0x14, 0x65, 0x5f, 0xe5, 0xb0, 0xa2, 0x08, 0x12, 0x0d, 0xa4, 0x91, 0x96, 0x99, 0x45, 0x1d, 0xe8, - 0xfd, 0xe4, 0x26, 0x36, 0x5d, 0x9d, 0x82, 0xeb, 0xa2, 0xd1, 0xd2, 0x78, 0x06, 0x16, 0xb0, 0x5f, - 0x87, 0x46, 0x44, 0xf7, 0x52, 0x6c, 0xd7, 0x54, 0x66, 0x51, 0xd3, 0x7b, 0x2f, 0xa9, 0x29, 0x61, - 0xdc, 0x43, 0xd9, 0x69, 0x55, 0x2d, 0x19, 0x2a, 0x30, 0xaa, 0xeb, 0x1c, 0x5e, 0x57, 0x75, 0xa1, - 0x18, 0x3e, 0x5b, 0x63, 0xfe, 0x95, 0xfa, 0x86, 0x86, 0xcb, 0x44, 0xb5, 0xe6, 0x2d, 0x59, 0x70, - 0x94, 0xa4, 0xd7, 0x7b, 0x06, 0xab, 0x17, 0xb6, 0x13, 0xaa, 0x3e, 0x6a, 0x1a, 0x7b, 0x01, 0xeb, - 0x7b, 0xfc, 0x92, 0xfa, 0x3e, 0xa3, 0xcc, 0x09, 0xc5, 0x64, 0xf9, 0x62, 0x16, 0x18, 0xac, 0xff, - 0xe3, 0x1c, 0xd4, 0x92, 0xa5, 0x08, 0xc6, 0x22, 0x37, 0x1b, 0x25, 0x6f, 0x4a, 0x21, 0x58, 0xda, - 0xfe, 0x3b, 0x24, 0x67, 0xce, 0x7a, 0x25, 0xb2, 0x29, 0x5e, 0x09, 0xdd, 0x19, 0x90, 0x7b, 0x99, - 0xf7, 0x35, 0xff, 0x4a, 0xde, 0xd7, 0x42, 0x9a, 0xf7, 0xf5, 0x7a, 0x97, 0xdd, 0xdc, 0x4f, 0xe4, - 0xb2, 0x9b, 0x7f, 0xa1, 0xcb, 0x4e, 0x73, 0x34, 0x16, 0xaf, 0x31, 0xe1, 0x6b, 0xae, 0xc7, 0x14, - 0x97, 0x5d, 0xe9, 0x2b, 0xb8, 0xec, 0xd6, 0xff, 0x32, 0x03, 0x6c, 0x76, 0x75, 0xb0, 0xa7, 0xe4, - 0xf0, 0x71, 0xf9, 0x50, 0x72, 0xee, 0xaf, 0xbf, 0xda, 0x0a, 0x53, 0x04, 0xa1, 0x72, 0xb3, 0x87, - 0xb0, 0xa4, 0x47, 0xca, 0xeb, 0x5a, 0x7b, 0xd5, 0x64, 0x7a, 0x52, 0x6c, 0xdb, 0xd1, 0x5c, 0xdd, - 0xf9, 0x97, 0xba, 0xba, 0x0b, 0x2f, 0x75, 0x75, 0xcf, 0x25, 0x5d, 0xdd, 0xeb, 0xff, 0x31, 0x03, - 0x4b, 0x29, 0x44, 0xfc, 0xb3, 0xeb, 0xb3, 0xa0, 0xbd, 0x04, 0x5b, 0xcb, 0x4a, 0xda, 0xd3, 0x39, - 0xda, 0x9e, 0xb2, 0x07, 0x8a, 0xa9, 0x50, 0x27, 0x49, 0x1e, 0xbc, 0x8c, 0xbb, 0xc4, 0x39, 0x4c, - 0x3d, 0xfb, 0xfa, 0xef, 0x67, 0xa1, 0xac, 0x25, 0x8a, 0x51, 0x24, 0x92, 0xd5, 0x22, 0x8c, 0x48, - 0x32, 0x44, 0x9b, 0xc3, 0x1d, 0x90, 0x5e, 0x0f, 0x4a, 0xa7, 0xc5, 0x25, 0xc5, 0x40, 0x44, 0xd8, - 0x80, 0x25, 0xe5, 0x8c, 0xe3, 0x71, 0x20, 0xa1, 0xdc, 0x6b, 0x16, 0xa5, 0x4b, 0x8e, 0x47, 0x71, - 0x89, 0xec, 0xa1, 0x52, 0x07, 0xe3, 0xb9, 0x43, 0x52, 0x27, 0x97, 0xc2, 0x22, 0x2d, 0x10, 0x35, - 0x89, 0x82, 0xce, 0xdf, 0x87, 0x15, 0xb5, 0x3c, 0x92, 0x39, 0xc8, 0xcb, 0xc0, 0xe4, 0xe2, 0xd0, - 0xb3, 0x7c, 0x17, 0x6e, 0x4f, 0xb5, 0x69, 0x2a, 0x2b, 0x45, 0xbc, 0xde, 0x4c, 0xb4, 0x4e, 0x2f, - 0x61, 0xfd, 0x47, 0x50, 0x4d, 0x30, 0xca, 0x9f, 0xdd, 0x94, 0x4f, 0xdb, 0x79, 0x68, 0x44, 0x75, - 0x3b, 0xcf, 0xfa, 0xff, 0xca, 0x01, 0x9b, 0xe5, 0xd5, 0x3f, 0xcf, 0x26, 0xcc, 0x12, 0x66, 0x2e, - 0x85, 0x30, 0xff, 0x9f, 0xc9, 0x0f, 0xef, 0xc2, 0xa2, 0x3c, 0x51, 0xa5, 0x79, 0x54, 0x69, 0x71, - 0xd6, 0xa3, 0x04, 0xd5, 0x8a, 0x0f, 0xa7, 0x23, 0x3b, 0x8a, 0x89, 0x43, 0x24, 0x9a, 0x00, 0x35, - 0x15, 0xe0, 0x71, 0x04, 0x73, 0xb6, 0xdb, 0x3f, 0xf3, 0x7c, 0xc9, 0x07, 0x7f, 0xe1, 0x2b, 0x6f, - 0x9f, 0x1b, 0x4d, 0xcc, 0x8f, 0x52, 0x9b, 0x29, 0x0b, 0x33, 0xde, 0x87, 0xb2, 0x06, 0x66, 0x25, - 0x28, 0xec, 0xb5, 0xf7, 0x37, 0x0f, 0xea, 0x37, 0x58, 0x15, 0x4a, 0x66, 0x6b, 0xeb, 0xe0, 0xd3, - 0x96, 0xd9, 0xda, 0xae, 0x67, 0x58, 0x11, 0xf2, 0x7b, 0x07, 0xdd, 0x5e, 0x3d, 0x6b, 0xac, 0x43, - 0x43, 0x96, 0x38, 0xeb, 0xd4, 0xf8, 0xed, 0x7c, 0x64, 0x2e, 0xc4, 0x44, 0xa9, 0xa2, 0x7f, 0x03, - 0x2a, 0xba, 0x78, 0x23, 0x29, 0x62, 0xca, 0xa9, 0x2f, 0x94, 0x73, 0x4f, 0xe3, 0xd5, 0x5b, 0x40, - 0x2e, 0xdd, 0x41, 0x94, 0x2d, 0x9b, 0x90, 0x5b, 0x53, 0xdc, 0x87, 0xa8, 0xfc, 0x24, 0xc8, 0xf0, - 0xff, 0x83, 0x5a, 0xd2, 0x80, 0x2f, 0x39, 0x52, 0x9a, 0xc2, 0x29, 0x72, 0x27, 0x2c, 0xfa, 0xec, - 0xbb, 0x50, 0x9f, 0x76, 0x00, 0x48, 0xe1, 0xf9, 0x9a, 0xfc, 0x0b, 0x4e, 0xd2, 0x27, 0xc0, 0x76, - 0x61, 0x39, 0x4d, 0xc0, 0x43, 0xfa, 0xb8, 0xde, 0x48, 0xc1, 0x66, 0x85, 0x38, 0xf6, 0x2d, 0xe9, - 0x08, 0x2a, 0xe0, 0xf4, 0xbf, 0x95, 0xac, 0x5f, 0x1b, 0xec, 0x0d, 0xfa, 0xa7, 0xb9, 0x84, 0xce, - 0x01, 0x62, 0x18, 0xab, 0x43, 0xe5, 0xe0, 0xb0, 0xd5, 0xb1, 0xb6, 0x76, 0x9b, 0x9d, 0x4e, 0x6b, - 0xaf, 0x7e, 0x83, 0x31, 0xa8, 0xa1, 0x33, 0x7b, 0x3b, 0x82, 0x65, 0x04, 0x4c, 0x3a, 0xe4, 0x14, - 0x2c, 0xcb, 0x96, 0xa1, 0xde, 0xee, 0x4c, 0x41, 0x73, 0xac, 0x01, 0xcb, 0x87, 0x2d, 0xf2, 0x7f, - 0x27, 0xca, 0xcd, 0x0b, 0xa5, 0x41, 0x76, 0x57, 0x28, 0x0d, 0x74, 0x32, 0x50, 0xae, 0x03, 0x25, - 0x4b, 0xff, 0x4e, 0x06, 0x56, 0xa6, 0x12, 0xe2, 0xf3, 0x1e, 0x24, 0x49, 0x27, 0x65, 0xe8, 0x0a, - 0x02, 0xd5, 0x6a, 0x7a, 0x17, 0x16, 0x23, 0xc3, 0xd3, 0xd4, 0xae, 0x54, 0x8f, 0x12, 0x14, 0xf2, - 0x43, 0x58, 0xd2, 0xec, 0x57, 0x53, 0xbc, 0x82, 0x69, 0x49, 0x32, 0x83, 0xb1, 0x16, 0xc5, 0xd5, - 0x4f, 0xb5, 0x7a, 0x40, 0xc7, 0x0d, 0xf5, 0x84, 0xd8, 0x4f, 0x96, 0x6c, 0xaf, 0xfa, 0x64, 0x8f, - 0xa6, 0x08, 0x21, 0xd9, 0x5a, 0x7d, 0xc2, 0x55, 0xf5, 0x7f, 0x30, 0x07, 0xec, 0x93, 0x09, 0xf7, - 0xaf, 0xf0, 0x3c, 0x47, 0xf0, 0xb2, 0x00, 0x47, 0x65, 0x69, 0xc9, 0xbe, 0xd2, 0x99, 0xad, 0xb4, - 0x33, 0x53, 0xf9, 0x97, 0x9f, 0x99, 0x2a, 0xbc, 0xec, 0xcc, 0xd4, 0x9b, 0x50, 0x75, 0x4e, 0x5d, - 0x4f, 0xb0, 0x42, 0x21, 0x09, 0x07, 0x8d, 0xb9, 0xbb, 0xb9, 0xfb, 0x15, 0xb3, 0x22, 0x81, 0x42, - 0x0e, 0x0e, 0xd8, 0xc7, 0x31, 0x12, 0x1f, 0x9c, 0xe2, 0xf9, 0x3e, 0x9d, 0x09, 0xb6, 0x06, 0xa7, - 0x5c, 0x1a, 0x96, 0x50, 0xd3, 0x50, 0x99, 0x05, 0x3c, 0x60, 0x6f, 0x41, 0x2d, 0xf0, 0x26, 0x42, - 0xb1, 0x50, 0xc3, 0x40, 0x8e, 0xb2, 0x0a, 0x41, 0x0f, 0x95, 0xdb, 0x74, 0x69, 0x12, 0x70, 0x6b, - 0xe4, 0x04, 0x81, 0x10, 0xcf, 0xfa, 0x9e, 0x1b, 0xfa, 0xde, 0x50, 0xfa, 0xbe, 0x16, 0x27, 0x01, - 0xdf, 0xa7, 0x94, 0x2d, 0x4a, 0x60, 0xdf, 0x8c, 0x9b, 0x34, 0xb6, 0x1d, 0x3f, 0x68, 0x00, 0x36, - 0x49, 0xf5, 0x14, 0xe5, 0x77, 0xdb, 0xf1, 0xa3, 0xb6, 0x88, 0x8f, 0x60, 0xea, 0x2c, 0x57, 0x79, - 0xfa, 0x2c, 0xd7, 0x0f, 0xd2, 0xcf, 0x72, 0x55, 0xb1, 0xe8, 0x47, 0xb2, 0xe8, 0xd9, 0x29, 0xfe, - 0x4a, 0x47, 0xba, 0x66, 0x8f, 0xa8, 0xd5, 0xbe, 0xca, 0x11, 0xb5, 0x85, 0xb4, 0x23, 0x6a, 0xef, - 0x43, 0x19, 0x0f, 0x0f, 0x59, 0x67, 0x8e, 0x90, 0xe1, 0xc8, 0x97, 0x57, 0xd7, 0x4f, 0x17, 0xed, - 0x3a, 0x6e, 0x68, 0x82, 0xaf, 0x7e, 0x06, 0xb3, 0xa7, 0xc5, 0x16, 0x7f, 0x8e, 0xa7, 0xc5, 0xe4, - 0x21, 0xa7, 0x0d, 0x28, 0xaa, 0x79, 0x62, 0x0c, 0xf2, 0x27, 0xbe, 0x37, 0x52, 0x3e, 0x0e, 0xf1, - 0x9b, 0xd5, 0x20, 0x1b, 0x7a, 0x32, 0x73, 0x36, 0xf4, 0x8c, 0x5f, 0x85, 0xb2, 0x46, 0x6a, 0xec, - 0x0d, 0xb2, 0x4b, 0x0a, 0xdd, 0x4c, 0xca, 0x96, 0x34, 0x8a, 0x25, 0x09, 0x6d, 0x0f, 0x04, 0xbf, - 0x19, 0x38, 0x3e, 0xc7, 0x73, 0x9d, 0x96, 0xcf, 0xcf, 0xb9, 0x1f, 0x28, 0x9f, 0x53, 0x3d, 0x4a, - 0x30, 0x09, 0x6e, 0xfc, 0x1a, 0x2c, 0x25, 0xe6, 0x56, 0xb2, 0x88, 0xb7, 0x60, 0x0e, 0xc7, 0x4d, - 0x05, 0x0d, 0x24, 0x4f, 0x6d, 0xc9, 0x34, 0x3c, 0xb0, 0x4f, 0xee, 0x32, 0x6b, 0xec, 0x7b, 0xc7, - 0x58, 0x49, 0xc6, 0x2c, 0x4b, 0xd8, 0xa1, 0xef, 0x1d, 0x1b, 0x7f, 0x96, 0x83, 0xdc, 0xae, 0x37, - 0xd6, 0x83, 0xd8, 0x32, 0x33, 0x41, 0x6c, 0x52, 0xe1, 0xb4, 0x22, 0x85, 0x52, 0xca, 0xec, 0xe8, - 0x28, 0x52, 0x4a, 0xe5, 0x7d, 0xa8, 0x09, 0x3e, 0x11, 0x7a, 0x42, 0x63, 0xbf, 0xb0, 0x7d, 0x12, - 0x88, 0x73, 0xb4, 0xf8, 0xec, 0x51, 0xd8, 0xf3, 0x76, 0x08, 0xce, 0x96, 0x21, 0x17, 0xa9, 0x2f, - 0x98, 0x2c, 0x3e, 0xd9, 0x2a, 0xcc, 0x61, 0x34, 0xf3, 0x95, 0x74, 0x7a, 0xcb, 0x2f, 0xf6, 0x75, - 0x58, 0x4a, 0x96, 0x4b, 0xac, 0x48, 0xca, 0x46, 0x7a, 0xc1, 0xc8, 0x93, 0x6e, 0x82, 0xe0, 0x23, - 0x84, 0x23, 0x83, 0x6b, 0x4e, 0x38, 0xc7, 0x24, 0x8d, 0xe9, 0x15, 0x13, 0x4c, 0xef, 0x0e, 0x94, - 0xc3, 0xe1, 0xb9, 0x35, 0xb6, 0xaf, 0x86, 0x9e, 0x3d, 0x90, 0xeb, 0x1b, 0xc2, 0xe1, 0xf9, 0x21, - 0x41, 0xd8, 0x43, 0x80, 0xd1, 0x78, 0x2c, 0xd7, 0x1e, 0x3a, 0x3f, 0x62, 0x52, 0xde, 0x3f, 0x3c, - 0x24, 0x92, 0x33, 0x4b, 0xa3, 0xf1, 0x98, 0x7e, 0xb2, 0x6d, 0xa8, 0xa5, 0x9e, 0xbd, 0xbc, 0xad, - 0x82, 0x6f, 0xbd, 0xf1, 0x46, 0xca, 0xe2, 0xac, 0xf6, 0x75, 0xd8, 0xfa, 0x77, 0x81, 0xfd, 0x94, - 0x27, 0x20, 0x7b, 0x50, 0x8a, 0xda, 0xa7, 0x1f, 0x20, 0xc4, 0x70, 0xfa, 0x72, 0xe2, 0x00, 0x61, - 0x73, 0x30, 0xf0, 0x05, 0x5f, 0xa4, 0x0d, 0x33, 0x62, 0xf9, 0xa0, 0xed, 0x98, 0x4d, 0xe2, 0xfb, - 0xc6, 0x7f, 0xcd, 0x40, 0x81, 0x4e, 0x33, 0xbe, 0x0d, 0x0b, 0x84, 0x1f, 0x05, 0x04, 0x4a, 0x57, - 0x39, 0xed, 0xbb, 0x3d, 0x19, 0x0b, 0x28, 0x96, 0x85, 0x76, 0x12, 0x3b, 0x1b, 0xcd, 0xbc, 0x76, - 0x1a, 0xfb, 0x0e, 0x94, 0xa2, 0xaa, 0x35, 0xd2, 0x29, 0xaa, 0x9a, 0xd9, 0xeb, 0x90, 0x3f, 0xf3, - 0xc6, 0xca, 0xf2, 0x03, 0xf1, 0x48, 0x9a, 0x08, 0x8f, 0xdb, 0x22, 0xea, 0xa0, 0xc6, 0x4b, 0x8b, - 0x45, 0x54, 0x09, 0x92, 0xc1, 0x6c, 0x1f, 0xe7, 0x52, 0xfa, 0x78, 0x04, 0x0b, 0x82, 0x0f, 0x68, - 0x31, 0x2d, 0xd7, 0x6f, 0x9a, 0xef, 0x08, 0x09, 0xaf, 0x3f, 0x9c, 0x0c, 0xb8, 0x6e, 0x7b, 0xc3, - 0x00, 0x38, 0x09, 0x57, 0x92, 0xb5, 0xf1, 0x07, 0x19, 0xe2, 0x2f, 0xa2, 0x5c, 0x76, 0x1f, 0xf2, - 0x62, 0x7f, 0x9b, 0xb2, 0xc4, 0x47, 0xe7, 0x1a, 0x04, 0x9e, 0x89, 0x18, 0x78, 0x7d, 0xc1, 0x64, - 0x94, 0x2c, 0xbd, 0x6a, 0x96, 0xdd, 0xc9, 0x28, 0x32, 0x5d, 0x7d, 0x4d, 0x75, 0x6b, 0xca, 0xec, - 0x43, 0xbd, 0x8f, 0x96, 0xe9, 0x86, 0x16, 0x49, 0x97, 0x4f, 0xec, 0x98, 0x4a, 0x0a, 0x1c, 0x9c, - 0x72, 0x2d, 0x82, 0xee, 0x8f, 0xb2, 0x50, 0x4d, 0xb4, 0x08, 0x43, 0x09, 0xc5, 0x06, 0x40, 0x8e, - 0x25, 0x39, 0xdf, 0x20, 0x40, 0x52, 0x50, 0xd7, 0xc6, 0x29, 0x9b, 0x18, 0xa7, 0x28, 0x38, 0x27, - 0xa7, 0x07, 0xe7, 0x3c, 0x82, 0x52, 0x7c, 0x02, 0x3f, 0xd9, 0x24, 0x51, 0x9f, 0x3a, 0xdd, 0x11, - 0x23, 0xc5, 0xe1, 0x3c, 0x05, 0x3d, 0x9c, 0xe7, 0x3b, 0x5a, 0xf4, 0xc7, 0x1c, 0x16, 0x63, 0xa4, - 0x8d, 0xe8, 0xcf, 0x25, 0xf6, 0xc3, 0xf8, 0x18, 0xca, 0x5a, 0xe3, 0xf5, 0x28, 0x8f, 0x4c, 0x22, - 0xca, 0x23, 0x3a, 0x87, 0x95, 0x8d, 0xcf, 0x61, 0x19, 0x7f, 0x3d, 0x0b, 0x55, 0xb1, 0xbe, 0x1c, - 0xf7, 0xf4, 0xd0, 0x1b, 0x3a, 0x7d, 0x74, 0x34, 0x45, 0x2b, 0x4c, 0x0a, 0x5a, 0x6a, 0x9d, 0xc9, - 0x25, 0x46, 0x72, 0x96, 0x7e, 0xdc, 0x94, 0x98, 0x74, 0x74, 0xdc, 0xd4, 0x80, 0xaa, 0x60, 0x8c, - 0xe8, 0x32, 0x8a, 0xef, 0x07, 0x30, 0xcb, 0x27, 0x9c, 0x6f, 0xda, 0x01, 0x71, 0xc8, 0xaf, 0xc3, - 0x92, 0xc0, 0xc1, 0x93, 0x76, 0x23, 0x67, 0x38, 0x74, 0x08, 0x93, 0x0c, 0x4d, 0xf5, 0x13, 0xce, - 0x4d, 0x3b, 0xe4, 0xfb, 0x22, 0x41, 0x5e, 0x27, 0x50, 0x1c, 0x38, 0x81, 0x7d, 0x1c, 0x07, 0x7c, - 0x46, 0xdf, 0xe8, 0x59, 0xb6, 0x2f, 0x35, 0xcf, 0x32, 0x19, 0x20, 0xca, 0x23, 0xfb, 0x32, 0xf2, - 0x2c, 0x4f, 0x51, 0xd2, 0xfc, 0x34, 0x25, 0x19, 0xff, 0x26, 0x0b, 0x65, 0x8d, 0x2c, 0x5f, 0x65, - 0x77, 0xbd, 0x3d, 0xe3, 0x18, 0x2c, 0xe9, 0x3e, 0xc0, 0x37, 0x93, 0x55, 0x62, 0xec, 0x0b, 0x5d, - 0x5c, 0xa0, 0x11, 0xf0, 0x2d, 0x28, 0x89, 0x55, 0xf7, 0x3e, 0x9a, 0x60, 0xe5, 0xb5, 0x1b, 0x08, - 0x38, 0x9c, 0x1c, 0xab, 0xc4, 0xc7, 0x98, 0x58, 0x88, 0x13, 0x1f, 0x8b, 0xc4, 0x17, 0x85, 0x60, - 0x7f, 0x08, 0x15, 0x59, 0x2a, 0xce, 0x29, 0x76, 0x37, 0x5e, 0xf5, 0x89, 0xf9, 0x36, 0xcb, 0x54, - 0x1d, 0x4d, 0xbe, 0xcc, 0xf8, 0x58, 0x65, 0x2c, 0xbe, 0x2c, 0xe3, 0x63, 0xfa, 0x30, 0x76, 0xa2, - 0xa8, 0x76, 0x8c, 0xbb, 0x52, 0x7c, 0xec, 0x21, 0x2c, 0x29, 0x76, 0x35, 0x71, 0x6d, 0xd7, 0xf5, - 0x26, 0x6e, 0x9f, 0xab, 0x03, 0x5a, 0x4c, 0x26, 0x1d, 0xc5, 0x29, 0xc6, 0x20, 0x3a, 0xc1, 0x4b, - 0xf1, 0x5b, 0x0f, 0xa0, 0x40, 0x72, 0x39, 0x09, 0x1f, 0xe9, 0x8c, 0x8b, 0x50, 0xd8, 0x7d, 0x28, - 0x90, 0x78, 0x9e, 0xbd, 0x96, 0xd9, 0x10, 0x82, 0xd1, 0x04, 0x26, 0x32, 0xee, 0xf3, 0xd0, 0x77, - 0xfa, 0x41, 0x7c, 0xf6, 0xab, 0x20, 0xf4, 0x4f, 0xaa, 0x2b, 0xb6, 0xdc, 0xc6, 0x98, 0xa8, 0xa3, - 0x12, 0x8e, 0xd8, 0x98, 0x96, 0x12, 0x65, 0x48, 0x71, 0x69, 0x08, 0xab, 0xc7, 0x3c, 0xbc, 0xe0, - 0xdc, 0x75, 0x85, 0x30, 0xd4, 0xe7, 0x6e, 0xe8, 0xdb, 0x43, 0x31, 0x49, 0xd4, 0x83, 0x27, 0x33, - 0xa5, 0xc6, 0x36, 0x90, 0xcd, 0x38, 0xe3, 0x56, 0x94, 0x8f, 0x78, 0xc7, 0xca, 0x71, 0x5a, 0xda, - 0xfa, 0xaf, 0xc0, 0xfa, 0xf5, 0x99, 0x52, 0x4e, 0x78, 0xde, 0x4f, 0x72, 0x95, 0xc8, 0x0f, 0x38, - 0xf4, 0xec, 0x90, 0x5a, 0xa3, 0x73, 0x96, 0x0e, 0x94, 0xb5, 0x94, 0x78, 0xef, 0xcf, 0xa0, 0x70, - 0x47, 0x1f, 0x62, 0x47, 0x72, 0x3d, 0x7f, 0x84, 0x7e, 0xb7, 0x81, 0x15, 0x97, 0x9e, 0x31, 0x17, - 0x62, 0x38, 0x1e, 0x69, 0x37, 0x36, 0x60, 0x01, 0x25, 0x7b, 0x6d, 0xa3, 0x7b, 0x91, 0x30, 0x68, - 0x2c, 0x03, 0xeb, 0x10, 0xef, 0xd2, 0xe3, 0x3d, 0xff, 0x53, 0x0e, 0xca, 0x1a, 0x58, 0xec, 0x46, - 0x18, 0x00, 0x68, 0x0d, 0x1c, 0x7b, 0xc4, 0x95, 0x93, 0xb3, 0x6a, 0x56, 0x11, 0xba, 0x2d, 0x81, - 0x62, 0x2f, 0xb6, 0xcf, 0x4f, 0x2d, 0x6f, 0x12, 0x5a, 0x03, 0x7e, 0xea, 0x73, 0xd5, 0xca, 0x8a, - 0x7d, 0x7e, 0x7a, 0x30, 0x09, 0xb7, 0x11, 0x26, 0xb0, 0x04, 0x2f, 0xd1, 0xb0, 0x64, 0xcc, 0xda, - 0xc8, 0xbe, 0x8c, 0xb1, 0x64, 0xe0, 0x24, 0x51, 0x66, 0x3e, 0x0a, 0x9c, 0x24, 0x6d, 0x71, 0x7a, - 0x03, 0x2d, 0xcc, 0x6e, 0xa0, 0xdf, 0x84, 0x55, 0xda, 0x40, 0x25, 0x6b, 0xb6, 0xa6, 0x56, 0xf2, - 0x32, 0xa6, 0xca, 0x4e, 0x6a, 0x62, 0x6f, 0x5d, 0xf4, 0x40, 0xb1, 0xa5, 0xc0, 0xf9, 0x21, 0x31, - 0xb2, 0x8c, 0x29, 0x7a, 0x26, 0x0b, 0xef, 0x3a, 0x3f, 0xe4, 0x02, 0x13, 0xa3, 0x63, 0x74, 0x4c, - 0x79, 0xc0, 0x62, 0xe4, 0xb8, 0xd3, 0x98, 0xf6, 0x65, 0x12, 0xb3, 0x24, 0x31, 0xed, 0x4b, 0x1d, - 0xf3, 0x09, 0xac, 0x8d, 0xf8, 0xc0, 0xb1, 0x93, 0xc5, 0x5a, 0xb1, 0xe0, 0xb6, 0x4c, 0xc9, 0x5a, - 0x9e, 0x2e, 0x29, 0xee, 0x62, 0x34, 0x7e, 0xe8, 0x8d, 0x8e, 0x1d, 0x92, 0x59, 0x28, 0x5e, 0x27, - 0x6f, 0xd6, 0xdc, 0xc9, 0xe8, 0xfb, 0x08, 0x16, 0x59, 0x02, 0xa3, 0x0a, 0xe5, 0x6e, 0xe8, 0x8d, - 0xd5, 0x34, 0xd7, 0xa0, 0x42, 0x9f, 0xf2, 0xd4, 0xe3, 0x2d, 0xb8, 0x89, 0x2c, 0xa1, 0xe7, 0x8d, - 0xbd, 0xa1, 0x77, 0x7a, 0x95, 0xb0, 0xe3, 0xfd, 0xbb, 0x0c, 0x2c, 0x25, 0x52, 0x25, 0x7b, 0xfd, - 0x26, 0xf1, 0xb3, 0xe8, 0xe8, 0x1a, 0xad, 0xc1, 0x45, 0x6d, 0x0d, 0x12, 0x22, 0x31, 0x33, 0x75, - 0x9c, 0xad, 0x19, 0x5f, 0xb9, 0xa0, 0x32, 0x12, 0x4b, 0x69, 0xcc, 0xb2, 0x14, 0x99, 0x5f, 0x5d, - 0xc6, 0xa0, 0x8a, 0xf8, 0x05, 0x79, 0x08, 0x66, 0x20, 0xbb, 0x9c, 0x4b, 0x9e, 0x24, 0xd0, 0x6d, - 0x7e, 0xaa, 0x05, 0xb1, 0x21, 0x30, 0x30, 0xfe, 0x49, 0x06, 0x20, 0x6e, 0x1d, 0x9e, 0x65, 0x88, - 0xe4, 0x16, 0xba, 0xcd, 0x4c, 0x93, 0x51, 0xde, 0x80, 0x4a, 0x14, 0xb1, 0x1c, 0x4b, 0x42, 0x65, - 0x05, 0x13, 0xe2, 0xd0, 0x3d, 0x58, 0x38, 0x1d, 0x7a, 0xc7, 0x28, 0xb1, 0x4a, 0xb9, 0x85, 0xe2, - 0xd5, 0x6a, 0x04, 0x56, 0xd2, 0x48, 0x2c, 0x37, 0xe5, 0x53, 0x83, 0x9a, 0x75, 0x29, 0xc8, 0xf8, - 0xad, 0x6c, 0x14, 0xba, 0x19, 0x8f, 0xc4, 0x8b, 0xd5, 0xbb, 0x9f, 0x24, 0x96, 0xe6, 0x45, 0xee, - 0xc5, 0x8f, 0xa1, 0xe6, 0xd3, 0xa6, 0xa4, 0x76, 0xac, 0xfc, 0x0b, 0x76, 0xac, 0xaa, 0x9f, 0x90, - 0x74, 0xde, 0x81, 0xba, 0x3d, 0x38, 0xe7, 0x7e, 0xe8, 0xa0, 0xb5, 0x1e, 0xe5, 0x63, 0x19, 0x2c, - 0xa9, 0xc1, 0x51, 0x10, 0xbd, 0x07, 0x0b, 0xf2, 0x24, 0x6e, 0x84, 0x29, 0xef, 0xf6, 0x89, 0xc1, - 0x02, 0xd1, 0xf8, 0xe7, 0x2a, 0x56, 0x34, 0x39, 0xbb, 0x2f, 0x1e, 0x15, 0xbd, 0x87, 0xd9, 0x59, - 0x07, 0xaa, 0x24, 0x24, 0xe9, 0x04, 0x90, 0xfc, 0x88, 0x80, 0xd2, 0x05, 0x90, 0x1c, 0xd6, 0xfc, - 0xab, 0x0c, 0xab, 0xf1, 0x1f, 0x32, 0x30, 0xbf, 0xeb, 0x8d, 0x77, 0x1d, 0x8a, 0xe6, 0xc7, 0x65, - 0x12, 0xf9, 0xa8, 0xe6, 0xc4, 0x27, 0x06, 0xfe, 0xbc, 0xe0, 0xc0, 0x59, 0xaa, 0x98, 0x57, 0x4d, - 0x8a, 0x79, 0xdf, 0x81, 0x5b, 0xe8, 0x02, 0xf4, 0xbd, 0xb1, 0xe7, 0x8b, 0xa5, 0x6a, 0x0f, 0x49, - 0xdc, 0xf3, 0xdc, 0xf0, 0x4c, 0xf1, 0xce, 0x9b, 0x27, 0x9c, 0x1f, 0x6a, 0x18, 0xfb, 0x11, 0x02, - 0x1e, 0xe9, 0x1c, 0x86, 0xe7, 0x16, 0x69, 0xe8, 0x52, 0x1e, 0x25, 0x8e, 0xba, 0x20, 0x12, 0x5a, - 0x08, 0x47, 0x89, 0xd4, 0xf8, 0x16, 0x94, 0x22, 0x63, 0x0f, 0x7b, 0x17, 0x4a, 0x67, 0xde, 0x58, - 0x5a, 0x84, 0x32, 0x89, 0x43, 0x79, 0xb2, 0xd7, 0x66, 0xf1, 0x8c, 0x7e, 0x04, 0xc6, 0x9f, 0xcd, - 0xc3, 0x7c, 0xdb, 0x3d, 0xf7, 0x9c, 0x3e, 0x46, 0x9b, 0x8e, 0xf8, 0xc8, 0x53, 0xd7, 0x01, 0x88, - 0xdf, 0x18, 0x9b, 0x15, 0xdf, 0xd0, 0x93, 0x93, 0xb1, 0x59, 0xd1, 0xdd, 0x3c, 0x2b, 0x30, 0xe7, - 0xeb, 0x57, 0xec, 0x14, 0x7c, 0x8c, 0x7f, 0x8f, 0xf6, 0xcb, 0x82, 0x76, 0x9d, 0x82, 0x28, 0x8b, - 0xae, 0x7e, 0xc1, 0x21, 0xa3, 0xe3, 0x99, 0x25, 0x84, 0xe0, 0x80, 0xbd, 0x06, 0xf3, 0xf2, 0x0c, - 0x1c, 0x1d, 0x5a, 0xa2, 0x80, 0x75, 0x09, 0x42, 0x6a, 0xf0, 0x39, 0xb9, 0x70, 0x23, 0x41, 0x36, - 0x67, 0x56, 0x14, 0x70, 0x5b, 0xd0, 0xda, 0x1d, 0x28, 0x13, 0x3e, 0xa1, 0x14, 0x65, 0x90, 0x26, - 0x82, 0x10, 0x21, 0xe5, 0xa6, 0xaa, 0x52, 0xea, 0x4d, 0x55, 0x18, 0x4e, 0x1c, 0x71, 0x59, 0xea, - 0x22, 0xd0, 0xfd, 0x44, 0x1a, 0x5c, 0x5d, 0xd3, 0x26, 0x6d, 0x2a, 0x74, 0x5a, 0x59, 0xd9, 0x54, - 0xde, 0x84, 0xea, 0x89, 0x3d, 0x1c, 0x1e, 0xdb, 0xfd, 0xe7, 0x64, 0x0a, 0xa8, 0x90, 0xf5, 0x53, - 0x01, 0xd1, 0x16, 0x70, 0x07, 0xca, 0xda, 0x2c, 0x63, 0x04, 0x66, 0xde, 0x84, 0x78, 0x7e, 0xa7, - 0x2d, 0x7c, 0xb5, 0x57, 0xb0, 0xf0, 0x69, 0x91, 0xa8, 0x0b, 0xc9, 0x48, 0xd4, 0x5b, 0xc8, 0x4d, - 0x65, 0xc8, 0x61, 0x9d, 0x2e, 0xc3, 0xb1, 0x07, 0x03, 0x0c, 0x39, 0xa4, 0x9b, 0x27, 0x71, 0xf0, - 0x28, 0x7d, 0x91, 0x74, 0x09, 0x82, 0x11, 0xca, 0x6d, 0x32, 0x53, 0x8f, 0x6d, 0x67, 0x80, 0x87, - 0x0e, 0xc8, 0x7a, 0x30, 0x6f, 0x8f, 0xc2, 0x43, 0xdb, 0x19, 0xb0, 0xbb, 0x50, 0x51, 0xc9, 0xb8, - 0x3b, 0x2e, 0xd1, 0xf8, 0xcb, 0x64, 0xb1, 0x27, 0x1a, 0x50, 0x8d, 0x30, 0x46, 0xf1, 0x91, 0xe3, - 0xb2, 0x44, 0x41, 0x3a, 0x78, 0x1f, 0xa3, 0x7c, 0x42, 0x8e, 0x07, 0x8b, 0x6b, 0x8f, 0x6f, 0x45, - 0xc1, 0x07, 0x48, 0xa5, 0xea, 0x3f, 0x39, 0xc7, 0x08, 0x53, 0x08, 0x77, 0xe4, 0xa3, 0x5b, 0x4d, - 0xc8, 0xbf, 0x12, 0x15, 0x7d, 0x74, 0x84, 0xc0, 0xbe, 0xa5, 0xe9, 0xaf, 0x0d, 0x44, 0x7e, 0x6d, - 0xaa, 0xfc, 0xeb, 0x0e, 0x65, 0xdd, 0x06, 0x70, 0x02, 0xb1, 0xcb, 0x04, 0xdc, 0x1d, 0xe0, 0x19, - 0xe1, 0xa2, 0x59, 0x72, 0x82, 0x67, 0x04, 0xf8, 0xd9, 0x2a, 0xb6, 0x4d, 0xa8, 0xe8, 0xdd, 0x64, - 0x45, 0xc8, 0x1f, 0x1c, 0xb6, 0x3a, 0xf5, 0x1b, 0xac, 0x0c, 0xf3, 0xdd, 0x56, 0xaf, 0xb7, 0x87, - 0x9e, 0xbe, 0x0a, 0x14, 0xa3, 0x83, 0x8c, 0x59, 0xf1, 0xd5, 0xdc, 0xda, 0x6a, 0x1d, 0xf6, 0x5a, - 0xdb, 0xf5, 0xdc, 0xf7, 0xf2, 0xc5, 0x6c, 0x3d, 0x67, 0xfc, 0x79, 0x0e, 0xca, 0xda, 0x28, 0xbc, - 0x98, 0x19, 0xdf, 0x06, 0x40, 0x4d, 0x32, 0x8e, 0x48, 0xcd, 0x9b, 0x25, 0x01, 0xa1, 0xc9, 0xd7, - 0x7d, 0x14, 0x39, 0xba, 0x65, 0x49, 0xf9, 0x28, 0xde, 0x84, 0x2a, 0x5d, 0x58, 0xa4, 0xfb, 0x6b, - 0x0b, 0x66, 0x85, 0x80, 0x92, 0x55, 0xe3, 0x09, 0x67, 0x44, 0xc2, 0xe3, 0x75, 0xf2, 0xfa, 0x12, - 0x02, 0xe1, 0x01, 0x3b, 0x3c, 0x1d, 0x19, 0x78, 0xc3, 0x73, 0x4e, 0x18, 0x24, 0x11, 0x96, 0x25, - 0xac, 0x27, 0xcf, 0x6a, 0x4b, 0x7e, 0xa8, 0x1d, 0xb1, 0x2d, 0x98, 0x15, 0x02, 0xca, 0x8a, 0xbe, - 0xae, 0x08, 0x88, 0xa2, 0x57, 0xd6, 0x66, 0xa9, 0x21, 0x41, 0x3c, 0x7b, 0x33, 0x66, 0xc4, 0x12, - 0x12, 0xc6, 0xd7, 0x66, 0xf3, 0xbd, 0xdc, 0x9c, 0xc8, 0xde, 0x05, 0x36, 0x1a, 0x8f, 0xad, 0x14, - 0x03, 0x5f, 0xde, 0x5c, 0x18, 0x8d, 0xc7, 0x3d, 0xcd, 0xfe, 0xf5, 0x33, 0xb0, 0x3d, 0x7e, 0x01, - 0xac, 0x29, 0x16, 0x30, 0x36, 0x31, 0x52, 0xc5, 0x62, 0xb6, 0x9c, 0xd1, 0xd9, 0x72, 0x0a, 0xf7, - 0xcb, 0xa6, 0x72, 0xbf, 0x17, 0xf1, 0x09, 0x63, 0x07, 0xca, 0x87, 0xda, 0x75, 0x68, 0x77, 0xc5, - 0x0e, 0xa1, 0x2e, 0x42, 0xa3, 0xbd, 0x83, 0x6c, 0x8a, 0xbe, 0xbc, 0xff, 0x4c, 0x6b, 0x4d, 0x56, - 0x6b, 0x8d, 0xf1, 0x8f, 0x32, 0x74, 0xd5, 0x4c, 0xd4, 0xf8, 0xf8, 0x06, 0x36, 0xe5, 0x7e, 0x8b, - 0x4f, 0xc2, 0x97, 0x95, 0xdb, 0x4d, 0x1e, 0x62, 0xc7, 0xa6, 0x59, 0xde, 0xc9, 0x49, 0xc0, 0x55, - 0x8c, 0x47, 0x19, 0x61, 0x07, 0x08, 0x52, 0xc2, 0xb7, 0x90, 0xf0, 0x1d, 0x2a, 0x3f, 0x90, 0x81, - 0x1d, 0x42, 0xf8, 0xde, 0xb7, 0x2f, 0x65, 0xad, 0x81, 0x10, 0x41, 0xa4, 0x7f, 0x40, 0x1d, 0x96, - 0x8d, 0xbe, 0x8d, 0x7f, 0x20, 0x0f, 0xeb, 0x4f, 0x8f, 0xef, 0x03, 0x28, 0x46, 0xa5, 0x26, 0x77, - 0x58, 0x85, 0x19, 0xa5, 0x8b, 0x7d, 0x1c, 0x8d, 0x21, 0x89, 0x16, 0xd3, 0xe2, 0x42, 0x1f, 0x4f, - 0x5b, 0x6b, 0xf5, 0x7b, 0xc0, 0x4e, 0x1c, 0x7f, 0x1a, 0x99, 0x16, 0x5b, 0x1d, 0x53, 0x34, 0x6c, - 0xe3, 0x08, 0x96, 0x14, 0x97, 0xd0, 0x34, 0x82, 0xe4, 0xe4, 0x65, 0x5e, 0xc2, 0xe4, 0xb3, 0x33, - 0x4c, 0xde, 0xf8, 0xcd, 0x02, 0xcc, 0xab, 0xab, 0x05, 0xd3, 0xae, 0xc3, 0x2b, 0x25, 0xaf, 0xc3, - 0x6b, 0x24, 0xae, 0x4e, 0xc2, 0xa9, 0x97, 0xfb, 0xfd, 0xbd, 0xe9, 0x2d, 0x5b, 0xf3, 0x55, 0x24, - 0xb6, 0x6d, 0xe9, 0xab, 0x28, 0x24, 0x7d, 0x15, 0x69, 0x57, 0x04, 0x92, 0xe8, 0x39, 0x73, 0x45, - 0xe0, 0x2d, 0x20, 0x39, 0x42, 0x0b, 0x6e, 0x2b, 0x22, 0x40, 0xec, 0x39, 0x49, 0xb1, 0xa3, 0x38, - 0x2d, 0x76, 0xbc, 0xb2, 0x48, 0xf0, 0x4d, 0x98, 0xa3, 0xeb, 0x35, 0xe4, 0xe1, 0x5f, 0xb5, 0x71, - 0xc8, 0xb1, 0x52, 0xff, 0xe9, 0xc4, 0x83, 0x29, 0x71, 0xf5, 0xfb, 0xb6, 0xca, 0x89, 0xfb, 0xb6, - 0x74, 0x1f, 0x4a, 0x25, 0xe9, 0x43, 0xb9, 0x0f, 0xf5, 0x68, 0xe0, 0xd0, 0x22, 0xe9, 0x06, 0xf2, - 0xe4, 0x60, 0x4d, 0xc1, 0x05, 0x37, 0xec, 0x04, 0xf1, 0xc6, 0x57, 0x4b, 0x6c, 0x7c, 0x82, 0x57, - 0x35, 0xc3, 0x90, 0x8f, 0xc6, 0xa1, 0xda, 0xf8, 0xb4, 0x5b, 0x19, 0x69, 0xe6, 0x17, 0x70, 0xe6, - 0xd5, 0xf4, 0x12, 0x75, 0x6c, 0x42, 0xed, 0xc4, 0x76, 0x86, 0x13, 0x9f, 0x5b, 0x3e, 0xb7, 0x03, - 0xcf, 0xc5, 0xc5, 0x1f, 0xef, 0xc1, 0xb2, 0x8b, 0x3b, 0x84, 0x63, 0x22, 0x8a, 0x59, 0x3d, 0xd1, - 0x3f, 0xf1, 0x10, 0x93, 0x3e, 0x12, 0x62, 0xcb, 0x92, 0x67, 0x88, 0x29, 0x56, 0xa5, 0xdd, 0xb1, - 0x76, 0xf6, 0xda, 0x4f, 0x77, 0x7b, 0xf5, 0x8c, 0xf8, 0xec, 0x1e, 0x6d, 0x6d, 0xb5, 0x5a, 0xdb, - 0xb8, 0x85, 0x01, 0xcc, 0xed, 0x34, 0xdb, 0x7b, 0x72, 0x03, 0xcb, 0xd7, 0x0b, 0xc6, 0xef, 0x64, - 0xa1, 0xac, 0xf5, 0x86, 0x3d, 0x89, 0x26, 0x81, 0x6e, 0x80, 0xba, 0x3d, 0xdb, 0xe3, 0x0d, 0xc5, - 0xe1, 0xb5, 0x59, 0x88, 0xee, 0x5f, 0xcc, 0x5e, 0x7b, 0xff, 0x22, 0x7b, 0x1b, 0x16, 0x6c, 0x2a, - 0x21, 0x1a, 0x74, 0x69, 0xdc, 0x97, 0x60, 0x39, 0xe6, 0x18, 0x41, 0x1a, 0x6f, 0x53, 0x02, 0x2f, - 0xaf, 0x82, 0x36, 0xa3, 0x9d, 0x0a, 0xe7, 0x66, 0x5e, 0x8e, 0x8c, 0x74, 0xc6, 0x47, 0x1b, 0xbe, - 0x1c, 0x2f, 0x95, 0x6c, 0x7c, 0x00, 0x10, 0xb7, 0x39, 0x39, 0x44, 0x37, 0x92, 0x43, 0x94, 0xd1, - 0x86, 0x28, 0x6b, 0xfc, 0x33, 0xc9, 0x9e, 0xe4, 0x78, 0x47, 0xe6, 0xbc, 0xaf, 0x83, 0x32, 0x30, - 0x5a, 0x18, 0xc8, 0x3d, 0x1e, 0xf2, 0x50, 0x5d, 0x58, 0xb0, 0x28, 0x53, 0xda, 0x51, 0xc2, 0x0c, - 0x3b, 0xcd, 0xce, 0xb2, 0xd3, 0x37, 0xa0, 0x22, 0x58, 0xa9, 0x24, 0x96, 0x40, 0xb2, 0xa4, 0xf2, - 0xc8, 0xbe, 0x54, 0x75, 0x27, 0xf8, 0x68, 0x7e, 0x8a, 0x8f, 0xfe, 0x6e, 0x86, 0xee, 0x0f, 0x89, - 0x1b, 0x1a, 0x33, 0xd2, 0xa8, 0xcc, 0x24, 0x23, 0x95, 0xa8, 0x66, 0x94, 0x7e, 0x0d, 0x73, 0xcc, - 0xa6, 0x33, 0xc7, 0x74, 0xb6, 0x9b, 0x4b, 0x65, 0xbb, 0xc6, 0x3a, 0x34, 0xb6, 0xb9, 0x18, 0x8a, - 0xe6, 0x70, 0x38, 0x35, 0x96, 0xc6, 0x2d, 0xb8, 0x99, 0x92, 0x26, 0x2d, 0x33, 0x9f, 0xc0, 0x4a, - 0x93, 0x2e, 0x56, 0xf8, 0x59, 0x1d, 0x90, 0x34, 0x1a, 0xb0, 0x3a, 0x5d, 0xa4, 0xac, 0x6c, 0x07, - 0x16, 0xb7, 0xf9, 0xf1, 0xe4, 0x74, 0x8f, 0x9f, 0xc7, 0x15, 0x31, 0xc8, 0x07, 0x67, 0xde, 0x85, - 0x9c, 0x5c, 0xfc, 0x8d, 0xa1, 0x97, 0x02, 0xc7, 0x0a, 0xc6, 0xbc, 0xaf, 0xac, 0xf3, 0x08, 0xe9, - 0x8e, 0x79, 0xdf, 0x78, 0x02, 0x4c, 0x2f, 0x47, 0xce, 0x84, 0x50, 0x9d, 0x26, 0xc7, 0x56, 0x70, - 0x15, 0x84, 0x7c, 0xa4, 0x0e, 0x06, 0x42, 0x30, 0x39, 0xee, 0x12, 0xc4, 0xb8, 0x07, 0x95, 0x43, - 0xfb, 0xca, 0xe4, 0x5f, 0xc8, 0xf3, 0x77, 0x6b, 0x30, 0x3f, 0xb6, 0xaf, 0x04, 0xcf, 0x8c, 0x1c, - 0x75, 0x98, 0x6c, 0xfc, 0x61, 0x1e, 0xe6, 0x08, 0x93, 0xdd, 0xa5, 0x1b, 0x8c, 0x1d, 0x17, 0x79, - 0x96, 0xda, 0x3d, 0x34, 0xd0, 0xcc, 0x06, 0x93, 0x9d, 0xdd, 0x60, 0xa4, 0x55, 0x51, 0xdd, 0xdc, - 0xa4, 0x5c, 0x2a, 0xee, 0x64, 0xa4, 0xae, 0x6b, 0x4a, 0xde, 0x2e, 0x90, 0x8f, 0x6f, 0xa8, 0xa6, - 0x93, 0xd5, 0x49, 0xa7, 0x77, 0xac, 0xa0, 0x51, 0xeb, 0xd4, 0xbe, 0x29, 0xf7, 0x16, 0x1d, 0x94, - 0xaa, 0x05, 0xce, 0xab, 0x43, 0xa5, 0x49, 0x2d, 0x70, 0x46, 0xdb, 0x2b, 0xbe, 0x5c, 0xdb, 0x23, - 0x73, 0xe3, 0x0b, 0xb4, 0x3d, 0x78, 0x05, 0x6d, 0xef, 0x15, 0x1c, 0xce, 0x37, 0xa1, 0x88, 0xc2, - 0x90, 0xb6, 0xd5, 0x08, 0x21, 0x48, 0x6c, 0x35, 0x1f, 0x6a, 0xfa, 0x10, 0x45, 0xbb, 0x68, 0xbc, - 0xde, 0xe4, 0x5f, 0xfc, 0x7c, 0x1c, 0x79, 0x9f, 0xc3, 0xbc, 0x84, 0x0a, 0x82, 0x76, 0xed, 0x91, - 0xba, 0xfc, 0x0e, 0x7f, 0x8b, 0x61, 0xc3, 0x1b, 0xbb, 0xbe, 0x98, 0x38, 0x3e, 0x1f, 0xa8, 0x5b, - 0x8d, 0x1c, 0x5c, 0xa3, 0x02, 0x22, 0x3a, 0x28, 0x74, 0x33, 0xd7, 0xbb, 0x70, 0x25, 0xef, 0x99, - 0x77, 0x82, 0x67, 0xe2, 0xd3, 0x60, 0x50, 0xc7, 0xeb, 0x2f, 0xc7, 0x9e, 0xaf, 0x76, 0x72, 0xe3, - 0xc7, 0x19, 0xa8, 0xcb, 0xd5, 0x15, 0xa5, 0xe9, 0xaa, 0x51, 0xe1, 0xba, 0xe0, 0x8c, 0x17, 0xdf, - 0x51, 0x64, 0x40, 0x15, 0x2d, 0x42, 0xd1, 0xb6, 0x4e, 0x16, 0xad, 0xb2, 0x00, 0xee, 0xc8, 0xad, - 0xfd, 0x75, 0x28, 0xab, 0xc0, 0xf0, 0x91, 0x33, 0x54, 0x97, 0xd1, 0x53, 0x64, 0xf8, 0xbe, 0x33, - 0x54, 0x52, 0x81, 0x6f, 0xcb, 0x43, 0xce, 0x19, 0x94, 0x0a, 0x4c, 0x3b, 0xe4, 0xc6, 0xbf, 0xca, - 0xc0, 0xa2, 0xd6, 0x15, 0xb9, 0x6e, 0x3f, 0x82, 0x4a, 0x74, 0xef, 0x2c, 0x8f, 0xc4, 0xd1, 0xb5, - 0x24, 0xa3, 0x89, 0xb3, 0x95, 0xfb, 0x11, 0x24, 0x10, 0x8d, 0x19, 0xd8, 0x57, 0x14, 0xbd, 0x3c, - 0x19, 0x29, 0x8d, 0x6f, 0x60, 0x5f, 0xed, 0x70, 0xde, 0x9d, 0x8c, 0x84, 0x3e, 0x7f, 0xc1, 0xf9, - 0xf3, 0x08, 0x81, 0xd8, 0x27, 0x08, 0x98, 0xc4, 0x30, 0xa0, 0x3a, 0xf2, 0xdc, 0xf0, 0x2c, 0x42, - 0x91, 0xa2, 0x38, 0x02, 0x09, 0xc7, 0xf8, 0xd3, 0x2c, 0x2c, 0x91, 0xdd, 0x51, 0xda, 0x7b, 0x25, - 0xeb, 0x6a, 0xc0, 0x1c, 0x99, 0x60, 0x89, 0x79, 0xed, 0xde, 0x30, 0xe5, 0x37, 0xfb, 0xe6, 0x2b, - 0xda, 0x4a, 0xd5, 0x39, 0xea, 0x6b, 0x86, 0x3f, 0x37, 0x3b, 0xfc, 0xd7, 0x0f, 0x6f, 0x9a, 0xf7, - 0xb7, 0x90, 0xe6, 0xfd, 0x7d, 0x15, 0x9f, 0xeb, 0xcc, 0x89, 0xdf, 0x79, 0x89, 0xa3, 0x9d, 0xf8, - 0x7d, 0x02, 0x6b, 0x09, 0x1c, 0xe4, 0xd6, 0xce, 0x89, 0xc3, 0xd5, 0xad, 0x34, 0xcb, 0x1a, 0x76, - 0x57, 0xa5, 0x6d, 0xce, 0x43, 0x21, 0xe8, 0x7b, 0x63, 0x6e, 0xac, 0xc2, 0x72, 0x72, 0x54, 0xe5, - 0x36, 0xf1, 0x7b, 0x19, 0x68, 0xc8, 0x58, 0x1d, 0xc7, 0x3d, 0xdd, 0x75, 0x82, 0xd0, 0xf3, 0xa3, - 0xfb, 0x59, 0x6f, 0x03, 0x04, 0xa1, 0xed, 0x4b, 0x15, 0x5c, 0xde, 0xc3, 0x82, 0x10, 0x54, 0xaf, - 0x6f, 0x42, 0x91, 0xbb, 0x03, 0x4a, 0x24, 0x6a, 0x98, 0xe7, 0xee, 0x40, 0x29, 0xe7, 0x33, 0x5b, - 0x69, 0x35, 0x29, 0x24, 0xc8, 0x5b, 0x0f, 0xc4, 0xe8, 0xf0, 0x73, 0xdc, 0xd2, 0xf3, 0xd1, 0xad, - 0x07, 0xfb, 0xf6, 0x25, 0x46, 0xbe, 0x06, 0xc6, 0xdf, 0xcd, 0xc2, 0x42, 0xdc, 0x3e, 0xba, 0x53, - 0xe5, 0xc5, 0xb7, 0xc3, 0xdc, 0x95, 0xe4, 0xe0, 0x08, 0xa5, 0x46, 0xb3, 0xc6, 0x16, 0x69, 0x71, - 0xb6, 0x5d, 0x66, 0x40, 0x59, 0x61, 0x78, 0x93, 0x50, 0xbb, 0x26, 0xb1, 0x44, 0x28, 0x07, 0x93, - 0x50, 0x68, 0xa1, 0x42, 0x1d, 0x77, 0x5c, 0xa9, 0x07, 0x16, 0xec, 0x51, 0xd8, 0xc6, 0xd7, 0x17, - 0x04, 0x58, 0x64, 0xa3, 0x89, 0x14, 0x58, 0x02, 0xbf, 0x4e, 0x4a, 0x09, 0xcd, 0x1c, 0x2a, 0x24, - 0xba, 0xc4, 0x4e, 0x17, 0x51, 0x47, 0x12, 0xfb, 0xeb, 0x50, 0xa6, 0xc2, 0xe3, 0x03, 0xde, 0x79, - 0xb3, 0x84, 0x35, 0x60, 0xba, 0xb4, 0x8c, 0x79, 0x93, 0x84, 0x3d, 0x00, 0xa8, 0x2a, 0x0c, 0x85, - 0xf9, 0x9b, 0x19, 0xb8, 0x99, 0x32, 0x6d, 0x72, 0x95, 0x6f, 0xc1, 0xe2, 0x49, 0x94, 0xa8, 0x46, - 0x97, 0x96, 0xfa, 0xaa, 0x62, 0xab, 0xc9, 0x31, 0x35, 0xeb, 0x27, 0x49, 0x40, 0xac, 0x89, 0xd2, - 0x0c, 0x26, 0xae, 0x0f, 0x40, 0x91, 0x88, 0xa6, 0x91, 0x94, 0xc0, 0x43, 0x58, 0x6f, 0x5d, 0x0a, - 0x8e, 0xb1, 0xa5, 0x3f, 0x1f, 0xa2, 0xc8, 0x28, 0x69, 0x75, 0xcf, 0xbc, 0x92, 0xd5, 0x7d, 0x40, - 0xe7, 0x8d, 0xa3, 0xb2, 0x7e, 0x92, 0x42, 0x70, 0x03, 0x15, 0x79, 0xe8, 0xf9, 0x13, 0x75, 0x8f, - 0x40, 0x3f, 0x7a, 0xf6, 0xc4, 0x08, 0x60, 0x61, 0x7f, 0x32, 0x0c, 0x9d, 0xf8, 0x25, 0x14, 0xf6, - 0x4d, 0x99, 0x07, 0xeb, 0x51, 0xa3, 0x96, 0x5a, 0x11, 0x44, 0x15, 0xe1, 0x60, 0x8d, 0x44, 0x41, - 0xd6, 0x6c, 0x7d, 0x0b, 0xa3, 0x64, 0x0d, 0xc6, 0x4d, 0x58, 0x8b, 0xbf, 0x68, 0xd8, 0xd4, 0x56, - 0xf3, 0x0f, 0x33, 0x14, 0x66, 0x9f, 0x7c, 0x95, 0x85, 0xb5, 0x60, 0x29, 0x70, 0xdc, 0xd3, 0x21, - 0xd7, 0x8b, 0x0f, 0xe4, 0x20, 0xac, 0x24, 0xdb, 0x26, 0x5f, 0x6e, 0x31, 0x17, 0x29, 0x47, 0x5c, - 0x5a, 0xc0, 0x36, 0xaf, 0x6b, 0x64, 0x4c, 0x16, 0x53, 0xa3, 0x31, 0xdb, 0xf8, 0x36, 0xd4, 0x92, - 0x15, 0xb1, 0x0f, 0xe5, 0x31, 0xfd, 0xb8, 0x55, 0xb9, 0xa9, 0x33, 0xcc, 0x31, 0x41, 0x94, 0xe3, - 0xb1, 0x0f, 0x8c, 0xbf, 0x9d, 0x81, 0x86, 0xc9, 0x05, 0xe5, 0x6a, 0xad, 0x54, 0x34, 0xf3, 0xd1, - 0x4c, 0xa9, 0xd7, 0xf7, 0x55, 0x9d, 0xfe, 0x57, 0x2d, 0x7a, 0xef, 0xda, 0xc9, 0xd8, 0xbd, 0x31, - 0xd3, 0xa3, 0xcd, 0x22, 0xcc, 0x11, 0x8a, 0xb1, 0x06, 0x2b, 0xb2, 0x3d, 0xaa, 0x2d, 0xb1, 0x4b, - 0x35, 0x51, 0x63, 0xc2, 0xa5, 0xba, 0x0e, 0x0d, 0x3a, 0x8f, 0xab, 0x77, 0x42, 0x66, 0xdc, 0x06, - 0xb6, 0x6f, 0xf7, 0x6d, 0xdf, 0xf3, 0xdc, 0x43, 0xee, 0xcb, 0xa0, 0x65, 0x94, 0x30, 0xd1, 0xe3, - 0xa8, 0x44, 0x61, 0xfa, 0x52, 0x97, 0xc3, 0x7a, 0xae, 0x8a, 0xd1, 0xa2, 0x2f, 0xc3, 0x84, 0xa5, - 0x4d, 0xfb, 0x39, 0x57, 0x25, 0xa9, 0x21, 0xfa, 0x18, 0xca, 0xe3, 0xa8, 0x50, 0x35, 0xee, 0xea, - 0x1a, 0x91, 0xd9, 0x6a, 0x4d, 0x1d, 0xdb, 0x78, 0x0c, 0xcb, 0xc9, 0x32, 0x25, 0xeb, 0x58, 0x87, - 0xe2, 0x48, 0xc2, 0x64, 0xeb, 0xa2, 0x6f, 0xe3, 0xb7, 0x8b, 0x30, 0x2f, 0xb5, 0x51, 0xb6, 0x01, - 0xf9, 0xbe, 0x8a, 0x93, 0x8b, 0xaf, 0xaf, 0x92, 0xa9, 0xea, 0xff, 0x16, 0x46, 0xcb, 0x09, 0x3c, - 0xf6, 0x31, 0xd4, 0x92, 0xae, 0xe2, 0xa9, 0xd3, 0xfe, 0x49, 0x1f, 0x6f, 0xb5, 0x3f, 0xe5, 0x14, - 0x2c, 0xc5, 0x9b, 0x23, 0xc9, 0x0c, 0xc5, 0x33, 0x6d, 0xf7, 0xf4, 0x5c, 0x21, 0x6f, 0x07, 0x67, - 0xb6, 0xf5, 0xf8, 0xc9, 0x07, 0xf2, 0xb8, 0x7f, 0x19, 0x81, 0xdd, 0x33, 0xfb, 0xf1, 0x93, 0x0f, - 0xa6, 0x25, 0x69, 0x79, 0xd8, 0x5f, 0x93, 0xa4, 0x97, 0xa1, 0x40, 0xb7, 0xa0, 0x52, 0xc0, 0x13, - 0x7d, 0xb0, 0x47, 0xb0, 0xac, 0x0c, 0x1c, 0x32, 0x34, 0x9d, 0xb8, 0x60, 0x91, 0x4e, 0x03, 0xca, - 0xb4, 0x2e, 0x26, 0x91, 0x49, 0x64, 0x15, 0xe6, 0xce, 0xe2, 0x2b, 0x6d, 0xab, 0xa6, 0xfc, 0x32, - 0xfe, 0xb4, 0x00, 0x65, 0x6d, 0x50, 0x58, 0x05, 0x8a, 0x66, 0xab, 0xdb, 0x32, 0x3f, 0x6d, 0x6d, - 0xd7, 0x6f, 0xb0, 0xfb, 0xf0, 0x56, 0xbb, 0xb3, 0x75, 0x60, 0x9a, 0xad, 0xad, 0x9e, 0x75, 0x60, - 0x5a, 0xea, 0x12, 0xb5, 0xc3, 0xe6, 0xe7, 0xfb, 0xad, 0x4e, 0xcf, 0xda, 0x6e, 0xf5, 0x9a, 0xed, - 0xbd, 0x6e, 0x3d, 0xc3, 0x5e, 0x83, 0x46, 0x8c, 0xa9, 0x92, 0x9b, 0xfb, 0x07, 0x47, 0x9d, 0x5e, - 0x3d, 0xcb, 0xee, 0xc0, 0xad, 0x9d, 0x76, 0xa7, 0xb9, 0x67, 0xc5, 0x38, 0x5b, 0x7b, 0xbd, 0x4f, - 0xad, 0xd6, 0x2f, 0x1d, 0xb6, 0xcd, 0xcf, 0xeb, 0xb9, 0x34, 0x84, 0xdd, 0xde, 0xde, 0x96, 0x2a, - 0x21, 0xcf, 0x6e, 0xc2, 0x0a, 0x21, 0x50, 0x16, 0xab, 0x77, 0x70, 0x60, 0x75, 0x0f, 0x0e, 0x3a, - 0xf5, 0x02, 0x5b, 0x84, 0x6a, 0xbb, 0xf3, 0x69, 0x73, 0xaf, 0xbd, 0x6d, 0x99, 0xad, 0xe6, 0xde, - 0x7e, 0x7d, 0x8e, 0x2d, 0xc1, 0xc2, 0x34, 0xde, 0xbc, 0x28, 0x42, 0xe1, 0x1d, 0x74, 0xda, 0x07, - 0x1d, 0xeb, 0xd3, 0x96, 0xd9, 0x6d, 0x1f, 0x74, 0xea, 0x45, 0xb6, 0x0a, 0x2c, 0x99, 0xb4, 0xbb, - 0xdf, 0xdc, 0xaa, 0x97, 0xd8, 0x0a, 0x2c, 0x26, 0xe1, 0xcf, 0x5a, 0x9f, 0xd7, 0x81, 0x35, 0x60, - 0x99, 0x1a, 0x66, 0x6d, 0xb6, 0xf6, 0x0e, 0x3e, 0xb3, 0xf6, 0xdb, 0x9d, 0xf6, 0xfe, 0xd1, 0x7e, - 0xbd, 0x8c, 0x77, 0x33, 0xb6, 0x5a, 0x56, 0xbb, 0xd3, 0x3d, 0xda, 0xd9, 0x69, 0x6f, 0xb5, 0x5b, - 0x9d, 0x5e, 0xbd, 0x42, 0x35, 0xa7, 0x75, 0xbc, 0x2a, 0x32, 0xc8, 0xf3, 0x2b, 0xd6, 0x76, 0xbb, - 0xdb, 0xdc, 0xdc, 0x6b, 0x6d, 0xd7, 0x6b, 0xec, 0x36, 0xdc, 0xec, 0xb5, 0xf6, 0x0f, 0x0f, 0xcc, - 0xa6, 0xf9, 0xb9, 0x3a, 0xdf, 0x62, 0xed, 0x34, 0xdb, 0x7b, 0x47, 0x66, 0xab, 0xbe, 0xc0, 0xde, - 0x80, 0xdb, 0x66, 0xeb, 0x93, 0xa3, 0xb6, 0xd9, 0xda, 0xb6, 0x3a, 0x07, 0xdb, 0x2d, 0x6b, 0xa7, - 0xd5, 0xec, 0x1d, 0x99, 0x2d, 0x6b, 0xbf, 0xdd, 0xed, 0xb6, 0x3b, 0x4f, 0xeb, 0x75, 0xf6, 0x16, - 0xdc, 0x8d, 0x50, 0xa2, 0x02, 0xa6, 0xb0, 0x16, 0x45, 0xff, 0xd4, 0x94, 0x76, 0x5a, 0xbf, 0xd4, - 0xb3, 0x0e, 0x5b, 0x2d, 0xb3, 0xce, 0xd8, 0x3a, 0xac, 0xc6, 0xd5, 0x53, 0x05, 0xb2, 0xee, 0x25, - 0x91, 0x76, 0xd8, 0x32, 0xf7, 0x9b, 0x1d, 0x31, 0xc1, 0x89, 0xb4, 0x65, 0xd1, 0xec, 0x38, 0x6d, - 0xba, 0xd9, 0x2b, 0x8c, 0x41, 0x4d, 0x9b, 0x95, 0x9d, 0xa6, 0x59, 0x5f, 0x65, 0x0b, 0x50, 0xde, - 0x3f, 0x3c, 0xb4, 0x7a, 0xed, 0xfd, 0xd6, 0xc1, 0x51, 0xaf, 0xbe, 0xc6, 0x56, 0xa0, 0xde, 0xee, - 0xf4, 0x5a, 0xa6, 0x98, 0x6b, 0x95, 0xf5, 0x7f, 0xcc, 0xb3, 0x65, 0x58, 0x50, 0x2d, 0x55, 0xd0, - 0xbf, 0x98, 0x67, 0x6b, 0xc0, 0x8e, 0x3a, 0x66, 0xab, 0xb9, 0x2d, 0x06, 0x2e, 0x4a, 0xf8, 0x9f, - 0xf3, 0xd2, 0x6d, 0xf4, 0xe3, 0x5c, 0xb4, 0x59, 0xc7, 0x71, 0x18, 0xc9, 0x0b, 0xce, 0x2b, 0xda, - 0xc5, 0xe4, 0x2f, 0x7b, 0x7a, 0x44, 0x53, 0xad, 0x72, 0x33, 0xaa, 0xd5, 0x8c, 0xee, 0x5e, 0xd5, - 0x65, 0xbf, 0x37, 0xa1, 0x3a, 0xa2, 0xcb, 0xce, 0xe5, 0xa5, 0xc6, 0x20, 0x83, 0x92, 0x08, 0x48, - 0x37, 0x1a, 0xcf, 0xbc, 0xbd, 0x51, 0x98, 0x7d, 0x7b, 0x23, 0x4d, 0xbe, 0x9f, 0x4b, 0x93, 0xef, - 0x1f, 0xc0, 0x22, 0xb1, 0x26, 0xc7, 0x75, 0x46, 0x4a, 0x6b, 0x26, 0x29, 0x70, 0x01, 0x59, 0x14, - 0xc1, 0x95, 0x3a, 0xa1, 0x54, 0x0e, 0xc9, 0x42, 0xe6, 0xa5, 0xb6, 0x91, 0xd0, 0x34, 0x88, 0x73, - 0x44, 0x9a, 0x46, 0x54, 0x83, 0x7d, 0x19, 0xd7, 0x50, 0xd6, 0x6a, 0x20, 0x38, 0xd6, 0xf0, 0x00, - 0x16, 0xf9, 0x65, 0xe8, 0xdb, 0x96, 0x37, 0xb6, 0xbf, 0x98, 0xa0, 0x5f, 0xdb, 0x46, 0x1d, 0xbe, - 0x62, 0x2e, 0x60, 0xc2, 0x01, 0xc2, 0xb7, 0xed, 0xd0, 0x7e, 0xf0, 0x25, 0x94, 0xb5, 0x8b, 0xf0, - 0xd9, 0x1a, 0x2c, 0x7d, 0xd6, 0xee, 0x75, 0x5a, 0xdd, 0xae, 0x75, 0x78, 0xb4, 0xf9, 0xac, 0xf5, - 0xb9, 0xb5, 0xdb, 0xec, 0xee, 0xd6, 0x6f, 0x88, 0x45, 0xdb, 0x69, 0x75, 0x7b, 0xad, 0xed, 0x04, - 0x3c, 0xc3, 0x5e, 0x87, 0xf5, 0xa3, 0xce, 0x51, 0xb7, 0xb5, 0x6d, 0xa5, 0xe5, 0xcb, 0x0a, 0x2a, - 0x95, 0xe9, 0x29, 0xd9, 0x73, 0x0f, 0x7e, 0x0d, 0x6a, 0xc9, 0xa3, 0xde, 0x0c, 0x60, 0x6e, 0xaf, - 0xf5, 0xb4, 0xb9, 0xf5, 0x39, 0xdd, 0xde, 0xda, 0xed, 0x35, 0x7b, 0xed, 0x2d, 0x4b, 0xde, 0xd6, - 0x2a, 0x38, 0x42, 0x86, 0x95, 0x61, 0xbe, 0xd9, 0xd9, 0xda, 0x3d, 0x30, 0xbb, 0xf5, 0x2c, 0x7b, - 0x0d, 0xd6, 0x14, 0xad, 0x6e, 0x1d, 0xec, 0xef, 0xb7, 0x7b, 0xc8, 0x0c, 0x7b, 0x9f, 0x1f, 0x0a, - 0xd2, 0x7c, 0x60, 0x43, 0x29, 0xbe, 0x6e, 0x16, 0x19, 0x4c, 0xbb, 0xd7, 0x6e, 0xf6, 0x62, 0xee, - 0x5a, 0xbf, 0x21, 0xf8, 0x57, 0x0c, 0xc6, 0xdb, 0x62, 0xeb, 0x19, 0x3a, 0x0d, 0xa7, 0x80, 0x54, - 0x7b, 0x3d, 0x2b, 0x16, 0x55, 0x0c, 0xdd, 0x3c, 0xe8, 0x89, 0x2e, 0x7c, 0x1b, 0x6a, 0xc9, 0x98, - 0xc7, 0xa4, 0xf1, 0x7a, 0x1d, 0x56, 0x37, 0x5b, 0xbd, 0xcf, 0x5a, 0xad, 0x0e, 0x8e, 0xce, 0x56, - 0xab, 0xd3, 0x33, 0x9b, 0x7b, 0xed, 0xde, 0xe7, 0xf5, 0xcc, 0x83, 0x8f, 0xa1, 0x3e, 0xed, 0x60, - 0x4c, 0x78, 0x64, 0x5f, 0xe4, 0xba, 0x7d, 0xf0, 0x9f, 0x33, 0xb0, 0x9c, 0x66, 0x5b, 0x17, 0x73, - 0x28, 0x17, 0xa7, 0x60, 0xd1, 0xdd, 0x83, 0x8e, 0xd5, 0x39, 0xc0, 0xeb, 0x21, 0xd7, 0x61, 0x75, - 0x2a, 0x41, 0x71, 0x82, 0x0c, 0xbb, 0x05, 0x6b, 0x33, 0x99, 0x2c, 0xf3, 0xe0, 0x08, 0xbb, 0xdd, - 0x80, 0xe5, 0xa9, 0xc4, 0x96, 0x69, 0x1e, 0x98, 0xf5, 0x1c, 0x7b, 0x0f, 0xee, 0x4f, 0xa5, 0xcc, - 0x6e, 0x4c, 0x6a, 0xdf, 0xca, 0xb3, 0x7b, 0xf0, 0xe6, 0x0c, 0x76, 0xcc, 0xbb, 0xad, 0xcd, 0xe6, - 0x9e, 0xe8, 0x5e, 0xbd, 0xf0, 0xe0, 0x9f, 0xe6, 0x00, 0xe2, 0x43, 0x45, 0xa2, 0xfe, 0xed, 0x66, - 0xaf, 0xb9, 0x77, 0x20, 0xc8, 0xcb, 0x3c, 0xe8, 0x89, 0xd2, 0xcd, 0xd6, 0x27, 0xf5, 0x1b, 0xa9, - 0x29, 0x07, 0x87, 0xa2, 0x43, 0x6b, 0xb0, 0x44, 0x53, 0xb5, 0x27, 0xba, 0xd1, 0xee, 0x3c, 0xa5, - 0x9b, 0x46, 0x71, 0xf7, 0x3b, 0x3a, 0xdc, 0x31, 0x0f, 0x3a, 0x3d, 0xab, 0xbb, 0x7b, 0xd4, 0xdb, - 0xc6, 0x7b, 0x4a, 0xb7, 0xcc, 0xf6, 0x21, 0x95, 0x99, 0x7f, 0x11, 0x82, 0x28, 0xba, 0x20, 0xd6, - 0xc2, 0xd3, 0x83, 0x6e, 0xb7, 0x7d, 0x68, 0x7d, 0x72, 0xd4, 0x32, 0xdb, 0xad, 0x2e, 0x66, 0x9c, - 0x4b, 0x81, 0x0b, 0xfc, 0x79, 0xb1, 0x67, 0xf6, 0xf6, 0x3e, 0x95, 0x9b, 0x9a, 0x40, 0x2d, 0x26, - 0x41, 0x02, 0xab, 0x24, 0x66, 0x47, 0xec, 0x0a, 0x29, 0x25, 0xc3, 0x35, 0x69, 0x22, 0x5f, 0x59, - 0xec, 0x77, 0x33, 0x8b, 0x04, 0xb3, 0x55, 0xd2, 0x93, 0x44, 0x2e, 0xdc, 0x0a, 0x23, 0xc1, 0x61, - 0x7b, 0xdb, 0xc4, 0x0c, 0xb5, 0x19, 0xa8, 0xc0, 0x5d, 0x10, 0x44, 0x28, 0xb6, 0x0d, 0x81, 0x52, - 0x57, 0x1f, 0x22, 0x65, 0xf1, 0xf1, 0x6f, 0xe5, 0xa0, 0x46, 0x07, 0x3c, 0xe9, 0x7d, 0x48, 0xee, - 0xb3, 0x7d, 0x98, 0x97, 0x0f, 0x8d, 0xb2, 0x95, 0xe8, 0x8e, 0x47, 0xfd, 0x69, 0xd3, 0xf5, 0xd5, - 0x69, 0xb0, 0x14, 0x93, 0x97, 0xfe, 0xca, 0x9f, 0xfc, 0xf7, 0xbf, 0x93, 0xad, 0xb2, 0xf2, 0xc3, - 0xf3, 0xf7, 0x1f, 0x9e, 0x72, 0x37, 0x10, 0x65, 0xfc, 0x0a, 0x40, 0xfc, 0x7c, 0x26, 0x6b, 0x68, - 0x97, 0x4a, 0x24, 0x1e, 0xce, 0x5c, 0xbf, 0x99, 0x92, 0x22, 0xcb, 0xbd, 0x89, 0xe5, 0x2e, 0x19, - 0x35, 0x51, 0xae, 0xe3, 0x3a, 0x21, 0x3d, 0xa5, 0xf9, 0x51, 0xe6, 0x01, 0x1b, 0x40, 0x45, 0x7f, - 0xd8, 0x92, 0x29, 0x09, 0x36, 0xe5, 0x69, 0xce, 0xf5, 0x5b, 0xa9, 0x69, 0x4a, 0x37, 0xc0, 0x3a, - 0x56, 0x8c, 0xba, 0xa8, 0x63, 0x82, 0x18, 0x71, 0x2d, 0x43, 0xd2, 0x96, 0xe2, 0xf7, 0x2b, 0xd9, - 0x6b, 0x9a, 0xbc, 0x3b, 0xf3, 0x7a, 0xe6, 0xfa, 0xed, 0x6b, 0x52, 0x65, 0x5d, 0xb7, 0xb1, 0xae, - 0x35, 0x83, 0x89, 0xba, 0xfa, 0x88, 0xa3, 0x5e, 0xcf, 0xfc, 0x28, 0xf3, 0xe0, 0xf1, 0xbf, 0x7f, - 0x07, 0x4a, 0x51, 0xc0, 0x37, 0xfb, 0x75, 0xa8, 0x26, 0x4e, 0xe0, 0x32, 0xd5, 0x8d, 0xb4, 0x03, - 0xbb, 0xeb, 0xaf, 0xa5, 0x27, 0xca, 0x8a, 0x5f, 0xc7, 0x8a, 0x1b, 0x6c, 0x55, 0x54, 0x2c, 0x4f, - 0xb8, 0x3e, 0xc4, 0x13, 0xf3, 0x74, 0x63, 0xe6, 0x73, 0x4d, 0x2b, 0xa4, 0xca, 0x5e, 0x9b, 0xd6, - 0xd4, 0x12, 0xb5, 0xdd, 0xbe, 0x26, 0x55, 0x56, 0xf7, 0x1a, 0x56, 0xb7, 0xca, 0x96, 0xf5, 0xea, - 0x54, 0x9c, 0x30, 0xe3, 0x78, 0x8d, 0xad, 0xfe, 0xbc, 0x23, 0xbb, 0x1d, 0xdf, 0x29, 0x9a, 0xf2, - 0xec, 0x63, 0x44, 0x22, 0xb3, 0x6f, 0x3f, 0x1a, 0x0d, 0xac, 0x8a, 0x31, 0x9c, 0x3e, 0xfd, 0x75, - 0x47, 0x76, 0x0c, 0x65, 0xed, 0x45, 0x24, 0x76, 0xf3, 0xda, 0xd7, 0x9b, 0xd6, 0xd7, 0xd3, 0x92, - 0xd2, 0xba, 0xa2, 0x97, 0xff, 0xf0, 0x84, 0x73, 0xf6, 0xcb, 0x50, 0x8a, 0xde, 0xd9, 0x61, 0x6b, - 0xda, 0xbb, 0x47, 0xfa, 0xbb, 0x40, 0xeb, 0x8d, 0xd9, 0x84, 0x34, 0xe2, 0xd3, 0x4b, 0x17, 0xc4, - 0xf7, 0x19, 0x94, 0xb5, 0xb7, 0x74, 0xa2, 0x0e, 0xcc, 0xbe, 0xd7, 0x13, 0x75, 0x20, 0xe5, 0xe9, - 0x1d, 0x63, 0x11, 0xab, 0x28, 0xb3, 0x12, 0xd2, 0x77, 0x78, 0xe9, 0x05, 0x6c, 0x0f, 0x56, 0xa4, - 0x06, 0x7c, 0xcc, 0xbf, 0xca, 0x34, 0xa4, 0xbc, 0xa8, 0xf9, 0x28, 0xc3, 0x3e, 0x86, 0xa2, 0x7a, - 0x32, 0x89, 0xad, 0xa6, 0x3f, 0xfd, 0xb4, 0xbe, 0x36, 0x03, 0x97, 0xea, 0xea, 0xe7, 0x00, 0xf1, - 0xc3, 0x3d, 0x11, 0x93, 0x98, 0x79, 0x08, 0x28, 0xa2, 0x80, 0xd9, 0x57, 0x7e, 0x8c, 0x55, 0xec, - 0x60, 0x9d, 0x21, 0x93, 0x70, 0xf9, 0x85, 0xba, 0x6b, 0xfc, 0x07, 0x50, 0xd6, 0xde, 0xee, 0x89, - 0x86, 0x6f, 0xf6, 0xdd, 0x9f, 0x68, 0xf8, 0x52, 0x9e, 0xfa, 0x31, 0xd6, 0xb1, 0xf4, 0x65, 0x63, - 0x41, 0x94, 0x2e, 0x44, 0x60, 0x29, 0x8a, 0x8a, 0x09, 0x3a, 0x83, 0x6a, 0xe2, 0x81, 0x9e, 0x68, - 0x85, 0xa6, 0x3d, 0xff, 0x13, 0xad, 0xd0, 0xd4, 0x37, 0x7d, 0x14, 0x9d, 0x19, 0x8b, 0xa2, 0x1e, - 0xba, 0x4d, 0x4c, 0xab, 0xe9, 0xfb, 0x50, 0xd6, 0x1e, 0xdb, 0x89, 0xfa, 0x32, 0xfb, 0xae, 0x4f, - 0xd4, 0x97, 0xb4, 0xb7, 0x79, 0x96, 0xb1, 0x8e, 0x9a, 0x81, 0xa4, 0x80, 0x97, 0x21, 0x8b, 0xb2, - 0x7f, 0x1d, 0x6a, 0xc9, 0xf7, 0x77, 0xa2, 0xb5, 0x9f, 0xfa, 0x90, 0x4f, 0xb4, 0xf6, 0xaf, 0x79, - 0xb4, 0x47, 0x92, 0xf4, 0x83, 0xa5, 0xa8, 0x92, 0x87, 0x3f, 0x92, 0x47, 0xd7, 0xbe, 0x64, 0x9f, - 0x08, 0x06, 0x27, 0x2f, 0xeb, 0x66, 0x6b, 0x1a, 0xd5, 0xea, 0xb7, 0x7e, 0x47, 0xeb, 0x65, 0xe6, - 0x5e, 0xef, 0x24, 0x31, 0x63, 0xe1, 0xec, 0x29, 0x2c, 0x45, 0xc4, 0x1c, 0xdd, 0xbe, 0x1d, 0x44, - 0x7d, 0x48, 0xbd, 0xe3, 0x7b, 0xbd, 0x3e, 0x9d, 0xfa, 0x28, 0x43, 0xdb, 0x1f, 0x5e, 0x69, 0xac, - 0x6d, 0x7f, 0xfa, 0x05, 0xdc, 0xda, 0xf6, 0x97, 0xb8, 0xf9, 0x78, 0x7a, 0xfb, 0x0b, 0x1d, 0x51, - 0x86, 0x0b, 0x0b, 0xd3, 0x57, 0x5d, 0xdf, 0xbe, 0xee, 0x6a, 0x10, 0x2a, 0xfe, 0xf5, 0x17, 0xdf, - 0x1c, 0x92, 0x64, 0x45, 0x8a, 0x9b, 0x3e, 0x94, 0x91, 0x52, 0xec, 0x57, 0xa1, 0xa2, 0xbf, 0xd9, - 0xc1, 0x74, 0x9e, 0x30, 0x5d, 0xd3, 0xad, 0xd4, 0xb4, 0x24, 0x95, 0xb0, 0x8a, 0x5e, 0x0d, 0xfb, - 0x14, 0x56, 0xa3, 0x61, 0xd6, 0xef, 0xb6, 0x08, 0xd8, 0x9d, 0x94, 0x1b, 0x2f, 0x12, 0x83, 0x7d, - 0xf3, 0xda, 0x2b, 0x31, 0x1e, 0x65, 0x04, 0xf5, 0x25, 0xdf, 0x27, 0x88, 0x77, 0x9e, 0xb4, 0x67, - 0x19, 0xe2, 0x9d, 0x27, 0xf5, 0x51, 0x03, 0x45, 0x7d, 0x6c, 0x29, 0x31, 0x46, 0x14, 0x43, 0xce, - 0xbe, 0x0f, 0x0b, 0xda, 0xc5, 0x1d, 0xdd, 0x2b, 0xb7, 0x1f, 0xad, 0xa4, 0xd9, 0x4b, 0x6c, 0xd7, - 0xd3, 0x6c, 0xc6, 0xc6, 0x1a, 0x96, 0xbf, 0x68, 0x24, 0x06, 0x47, 0xac, 0xa2, 0x2d, 0x28, 0xeb, - 0x97, 0x82, 0xbc, 0xa0, 0xdc, 0x35, 0x2d, 0x49, 0xbf, 0x2f, 0xf5, 0x51, 0x86, 0xed, 0x41, 0x7d, - 0xfa, 0x0a, 0xbf, 0x88, 0xa7, 0xa4, 0x5d, 0x7b, 0xb8, 0x3e, 0x95, 0x98, 0xb8, 0xf8, 0x8f, 0x1d, - 0xd2, 0x29, 0xa4, 0xe8, 0xf9, 0x49, 0xcf, 0x9f, 0xde, 0xd5, 0x93, 0xcf, 0x52, 0x46, 0xa5, 0xa5, - 0x3d, 0x48, 0x7a, 0x3f, 0xf3, 0x28, 0xc3, 0x7e, 0x27, 0x03, 0x95, 0xc4, 0x15, 0x56, 0x89, 0x73, - 0x1e, 0x53, 0xfd, 0x6c, 0xe8, 0x69, 0x7a, 0x47, 0x0d, 0x13, 0x07, 0x71, 0xef, 0xc1, 0xf7, 0x12, - 0x93, 0xf4, 0xa3, 0x84, 0xcb, 0x75, 0x63, 0xfa, 0x7d, 0xca, 0x2f, 0xa7, 0x11, 0xf4, 0x6b, 0x91, - 0xbf, 0x7c, 0x94, 0x61, 0xff, 0x22, 0x03, 0xb5, 0x64, 0x2c, 0x45, 0xd4, 0xdd, 0xd4, 0xa8, 0x8d, - 0x88, 0x94, 0xae, 0x09, 0xc0, 0xf8, 0x3e, 0xb6, 0xb2, 0xf7, 0xc0, 0x4c, 0xb4, 0x52, 0xbe, 0xac, - 0xf1, 0xd3, 0xb5, 0x96, 0xfd, 0x22, 0x3d, 0x07, 0xad, 0xe2, 0xee, 0xd8, 0xec, 0xf3, 0xc1, 0x11, - 0xf9, 0xe9, 0x8f, 0xed, 0x1a, 0xb9, 0xdf, 0xc8, 0x66, 0x70, 0x26, 0x7e, 0x40, 0x8f, 0x31, 0xaa, - 0xd0, 0x2b, 0x41, 0xca, 0xaf, 0x5c, 0xc8, 0x5b, 0xd8, 0xb1, 0xd7, 0x8d, 0x9b, 0x89, 0x8e, 0x4d, - 0x4b, 0x1f, 0x4d, 0x6a, 0xa2, 0x7c, 0x30, 0x37, 0xde, 0x3e, 0x67, 0x1e, 0xd1, 0x4d, 0xad, 0x04, - 0x1b, 0x39, 0xa2, 0x46, 0x4a, 0xf4, 0xc4, 0x7a, 0x7b, 0xc5, 0x62, 0x8c, 0x07, 0xd8, 0xd6, 0xb7, - 0x8c, 0x3b, 0xd7, 0xb6, 0xf5, 0x21, 0x06, 0x47, 0x88, 0x16, 0x1f, 0x02, 0xc4, 0xc1, 0xb1, 0x6c, - 0x2a, 0x44, 0x33, 0xe2, 0x42, 0xb3, 0xf1, 0xb3, 0xc9, 0x45, 0xad, 0x22, 0x39, 0x45, 0x89, 0xbf, - 0x4c, 0x3c, 0x35, 0x0a, 0x1e, 0xd5, 0x45, 0xb0, 0x64, 0x1c, 0x6b, 0x42, 0x04, 0x9b, 0x2e, 0x3f, - 0xc1, 0x51, 0xa3, 0x48, 0xd1, 0x23, 0xa8, 0xee, 0x79, 0xde, 0xf3, 0xc9, 0x38, 0x3a, 0x90, 0x91, - 0x8c, 0x85, 0xda, 0xb5, 0x83, 0xb3, 0xf5, 0xa9, 0x5e, 0x18, 0x77, 0xb1, 0xa8, 0x75, 0xd6, 0xd0, - 0x8a, 0x7a, 0xf8, 0xa3, 0x38, 0x22, 0xf7, 0x4b, 0x66, 0xc3, 0x62, 0xc4, 0xa8, 0xe3, 0xa8, 0xd7, - 0x64, 0x31, 0x09, 0xf6, 0x3c, 0x5d, 0x45, 0x42, 0x57, 0x50, 0xad, 0x7d, 0x18, 0xa8, 0x32, 0x1f, - 0x65, 0xd8, 0x21, 0x54, 0xb6, 0x79, 0x1f, 0x6f, 0xf4, 0xc0, 0xb8, 0x9f, 0xa5, 0x44, 0x0c, 0x09, - 0x05, 0x0c, 0xad, 0x57, 0x13, 0xc0, 0xe4, 0xe6, 0x35, 0xb6, 0xaf, 0x7c, 0xfe, 0xc5, 0xc3, 0x1f, - 0xc9, 0x88, 0xa2, 0x2f, 0xd5, 0xe6, 0x15, 0x47, 0x97, 0xe9, 0x12, 0x40, 0x32, 0x44, 0x2b, 0xb1, - 0x79, 0xcd, 0x84, 0x68, 0x25, 0x86, 0x3a, 0x8a, 0x25, 0x1b, 0xc2, 0xe2, 0x4c, 0x54, 0x57, 0xb4, - 0x6f, 0x5d, 0x17, 0x0b, 0xb6, 0x7e, 0xf7, 0x7a, 0x84, 0x64, 0x6d, 0x0f, 0x92, 0xb5, 0x75, 0xa1, - 0x4a, 0x17, 0x1f, 0x1f, 0x73, 0x3a, 0xdb, 0x3b, 0x75, 0x31, 0x96, 0x7e, 0x70, 0x78, 0x7a, 0x97, - 0xc1, 0xb4, 0xa4, 0x98, 0x83, 0xa7, 0x3b, 0xd9, 0x09, 0x3e, 0x07, 0xa2, 0x1d, 0xa6, 0x8d, 0x88, - 0x71, 0xf6, 0x80, 0x6f, 0x44, 0x8c, 0x29, 0x67, 0x6f, 0x95, 0x0e, 0xca, 0x56, 0xa2, 0xb2, 0x1f, - 0xba, 0xde, 0x80, 0x8f, 0x64, 0xa9, 0xbf, 0x0c, 0xe5, 0xa7, 0x3c, 0x54, 0xa7, 0x57, 0x23, 0x81, - 0x7e, 0xea, 0x38, 0xeb, 0x7a, 0xca, 0x99, 0xe3, 0x24, 0x6d, 0x52, 0xc9, 0x7c, 0x70, 0xca, 0x89, - 0x13, 0x5a, 0xce, 0xe0, 0x4b, 0xf6, 0x4b, 0x58, 0x78, 0x74, 0x57, 0xc3, 0xaa, 0xd6, 0x4c, 0xbd, - 0xf0, 0x85, 0x29, 0x78, 0x5a, 0xc9, 0xa2, 0xcd, 0x9a, 0x60, 0xe9, 0x42, 0x59, 0xbb, 0xd3, 0x25, - 0x1a, 0x9b, 0xd9, 0x3b, 0x7c, 0xa2, 0xb1, 0x49, 0xb9, 0x02, 0xc6, 0xb8, 0x8f, 0xf5, 0x18, 0xec, - 0x6e, 0x5c, 0x0f, 0x5d, 0xfb, 0x12, 0xd7, 0xf4, 0xf0, 0x47, 0xf6, 0x28, 0xfc, 0x92, 0x7d, 0x46, - 0xd3, 0xa1, 0x9d, 0xce, 0x8d, 0x35, 0x94, 0xe9, 0x83, 0xbc, 0xd1, 0x60, 0x69, 0x49, 0x49, 0xad, - 0x85, 0xaa, 0x42, 0xb1, 0xf1, 0x09, 0x40, 0x37, 0xf4, 0xc6, 0xdb, 0x36, 0x1f, 0x79, 0x6e, 0xcc, - 0xd3, 0xe3, 0xf3, 0xa2, 0x31, 0x9f, 0xd4, 0x0e, 0x8d, 0xb2, 0xcf, 0x34, 0x95, 0x2e, 0x71, 0xae, - 0x5c, 0x11, 0xf1, 0xb5, 0x47, 0x4a, 0xa3, 0x01, 0x49, 0x39, 0x56, 0xfa, 0x28, 0xc3, 0x9a, 0x00, - 0x71, 0xf8, 0x60, 0xa4, 0xa0, 0xcd, 0x44, 0x26, 0x46, 0xec, 0x35, 0x25, 0xd6, 0xf0, 0x10, 0x4a, - 0x71, 0xdc, 0xd5, 0x5a, 0x7c, 0x45, 0x55, 0x22, 0x4a, 0x2b, 0x12, 0x17, 0x66, 0x62, 0x9e, 0x8c, - 0x3a, 0x0e, 0x15, 0xb0, 0xa2, 0x18, 0xaa, 0x13, 0xce, 0x03, 0xe6, 0xc0, 0x12, 0x35, 0x30, 0x92, - 0xcd, 0xf0, 0x9c, 0x63, 0xf4, 0x08, 0xcf, 0x6c, 0xf8, 0x51, 0xc4, 0x35, 0x52, 0x83, 0x68, 0x12, - 0x76, 0x26, 0x41, 0xad, 0x74, 0xc6, 0x52, 0x6c, 0x01, 0x23, 0x58, 0x9c, 0x89, 0xd3, 0x88, 0x58, - 0xc7, 0x75, 0x81, 0x37, 0x11, 0xeb, 0xb8, 0x36, 0xc4, 0xc3, 0x58, 0xc1, 0x2a, 0x17, 0x0c, 0x40, - 0xbd, 0xf2, 0xc2, 0x09, 0xfb, 0x67, 0xa2, 0xba, 0xdf, 0xcf, 0xc0, 0x52, 0x4a, 0x24, 0x06, 0x7b, - 0x43, 0x99, 0x28, 0xae, 0x8d, 0xd2, 0x58, 0x4f, 0xf5, 0xd8, 0x1b, 0x5d, 0xac, 0x67, 0x9f, 0x3d, - 0x4b, 0x6c, 0xa0, 0xe4, 0x30, 0x97, 0x2b, 0xf3, 0x85, 0x12, 0x4c, 0xaa, 0xf8, 0xf2, 0x05, 0xac, - 0x51, 0x43, 0x9a, 0xc3, 0xe1, 0x54, 0x34, 0xc1, 0xeb, 0x5a, 0x2b, 0x52, 0x22, 0x24, 0x12, 0xca, - 0x40, 0x32, 0x4a, 0xe2, 0x1a, 0xd9, 0x9d, 0x9a, 0xca, 0x26, 0x50, 0x9f, 0xf6, 0xd2, 0xb3, 0xeb, - 0xcb, 0x5a, 0xbf, 0x93, 0x50, 0xb6, 0x53, 0x3c, 0xfb, 0x5f, 0xc3, 0xca, 0xee, 0x18, 0xeb, 0x69, - 0xe3, 0x42, 0xfa, 0xb7, 0x98, 0x8f, 0xff, 0x3f, 0x0a, 0x29, 0x98, 0xea, 0xe7, 0x9d, 0xe8, 0x55, - 0x81, 0xf4, 0x00, 0x88, 0x48, 0xdd, 0x4f, 0x8f, 0x48, 0x78, 0x1b, 0xab, 0xbf, 0x6b, 0xdc, 0x4a, - 0xab, 0xde, 0xa7, 0x2c, 0xa4, 0xf8, 0xaf, 0x4d, 0xaf, 0x6b, 0xd5, 0x82, 0xbb, 0x69, 0xf3, 0x7d, - 0xad, 0xe2, 0x35, 0x35, 0xd6, 0x37, 0x50, 0x86, 0xac, 0xe8, 0x21, 0x04, 0xd1, 0xf2, 0x49, 0x89, - 0x55, 0x88, 0x96, 0x4f, 0x5a, 0xcc, 0x41, 0x52, 0x7e, 0x52, 0xd1, 0x06, 0x1f, 0x65, 0x1e, 0x6c, - 0xde, 0xfb, 0xfe, 0xd7, 0x4e, 0x9d, 0xf0, 0x6c, 0x72, 0xbc, 0xd1, 0xf7, 0x46, 0x0f, 0x87, 0xca, - 0xb4, 0x29, 0x2f, 0x03, 0x78, 0x38, 0x74, 0x07, 0x0f, 0xb1, 0xd8, 0xe3, 0xb9, 0xb1, 0xef, 0x85, - 0xde, 0x37, 0xfe, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x63, 0x6c, 0x5d, 0x30, 0x7e, 0x8b, 0x00, - 0x00, + 0xe3, 0xfb, 0xb0, 0xfa, 0x94, 0x87, 0xda, 0xa0, 0x05, 0x8a, 0x3a, 0x05, 0xbb, 0x0c, 0x6d, 0x3f, + 0x54, 0xed, 0xcf, 0x50, 0xfb, 0x11, 0x16, 0xb7, 0x9f, 0xbb, 0x03, 0x85, 0x40, 0x2b, 0xab, 0xc4, + 0xdd, 0x01, 0x25, 0x1b, 0x7b, 0xc0, 0xb4, 0x82, 0xb7, 0x79, 0x68, 0x3b, 0xc3, 0x80, 0x7d, 0x00, + 0x95, 0x50, 0xab, 0x0e, 0x19, 0x69, 0x39, 0x22, 0x42, 0x2d, 0x83, 0x99, 0xc0, 0x33, 0xce, 0xa0, + 0xb8, 0xc3, 0xf9, 0x9e, 0x33, 0x72, 0x42, 0xb6, 0x0a, 0x85, 0x13, 0xe7, 0x92, 0xd3, 0x72, 0xc9, + 0xed, 0xde, 0x30, 0xe9, 0x93, 0xdd, 0x01, 0xc0, 0x1f, 0xd6, 0x28, 0xa2, 0xc7, 0xdd, 0x1b, 0x66, + 0x09, 0x61, 0xfb, 0x81, 0x1d, 0xb2, 0x75, 0x98, 0x1f, 0x73, 0xbf, 0xcf, 0xd5, 0xcc, 0xef, 0xde, + 0x30, 0x15, 0x60, 0x73, 0x1e, 0x0a, 0x43, 0x51, 0xba, 0xf1, 0xc7, 0x05, 0x28, 0x77, 0xb9, 0x1b, + 0xad, 0x53, 0x06, 0x79, 0x31, 0xa4, 0x72, 0x6d, 0xe2, 0x6f, 0xf6, 0x26, 0x94, 0x71, 0xf0, 0x83, + 0xd0, 0x77, 0xdc, 0x53, 0x5a, 0x17, 0x9b, 0xd9, 0x46, 0xc6, 0x04, 0x01, 0xee, 0x22, 0x94, 0xd5, + 0x21, 0x67, 0x8f, 0xd4, 0xba, 0x10, 0x3f, 0xd9, 0x4d, 0x28, 0xda, 0xa3, 0x90, 0x9a, 0x57, 0x41, + 0xf0, 0xbc, 0x3d, 0x0a, 0xb1, 0x69, 0x6f, 0x40, 0x65, 0x6c, 0x5f, 0x8d, 0x04, 0x37, 0x88, 0x08, + 0xaa, 0x62, 0x96, 0x25, 0x0c, 0x49, 0xea, 0x31, 0x2c, 0xe9, 0x28, 0xaa, 0xf2, 0x42, 0x54, 0xf9, + 0xa2, 0x86, 0x2d, 0xdb, 0x70, 0x0f, 0x16, 0x54, 0x1e, 0x9f, 0xfa, 0x83, 0x84, 0x56, 0x32, 0x6b, + 0x12, 0xac, 0x7a, 0x79, 0x1f, 0xea, 0x27, 0x8e, 0x6b, 0x0f, 0xad, 0xfe, 0x30, 0x3c, 0xb7, 0x06, + 0x7c, 0x18, 0xda, 0x48, 0x73, 0x05, 0xb3, 0x86, 0xf0, 0xad, 0x61, 0x78, 0xbe, 0x2d, 0xa0, 0xec, + 0x3d, 0x28, 0x9d, 0x70, 0x6e, 0xe1, 0x60, 0x35, 0x8a, 0x89, 0xa5, 0xab, 0x66, 0xc8, 0x2c, 0x9e, + 0xa8, 0xb9, 0x7a, 0x0f, 0xea, 0xde, 0x24, 0x3c, 0xf5, 0x1c, 0xf7, 0xd4, 0x12, 0x1c, 0xd3, 0x72, + 0x06, 0x48, 0x85, 0xf9, 0xcd, 0xec, 0xa3, 0x8c, 0x59, 0x53, 0x69, 0x82, 0x77, 0xb5, 0x07, 0xec, + 0x6d, 0x58, 0x18, 0xda, 0x41, 0x68, 0x9d, 0x79, 0x63, 0x6b, 0x3c, 0x39, 0x7e, 0xce, 0xaf, 0x1a, + 0x55, 0x1c, 0x88, 0xaa, 0x00, 0xef, 0x7a, 0xe3, 0x43, 0x04, 0x0a, 0xd2, 0xc3, 0x76, 0x52, 0x23, + 0xe0, 0x6e, 0xe6, 0x7e, 0xd5, 0x2c, 0x09, 0x08, 0x55, 0xfa, 0x39, 0x2c, 0xe1, 0xf4, 0xf4, 0x27, + 0x41, 0xe8, 0x8d, 0x2c, 0xc1, 0xed, 0xfd, 0x41, 0xd0, 0x28, 0x23, 0xad, 0xbd, 0x23, 0x1b, 0xab, + 0xcd, 0xf1, 0xc6, 0x36, 0x0f, 0xc2, 0x2d, 0x44, 0x36, 0x09, 0x57, 0x88, 0x04, 0x57, 0xe6, 0xe2, + 0x60, 0x1a, 0xce, 0xde, 0x03, 0x66, 0x0f, 0x87, 0xde, 0x85, 0x15, 0xf0, 0xe1, 0x89, 0x25, 0x07, + 0xb1, 0x51, 0xbb, 0x9b, 0xb9, 0x5f, 0x34, 0xeb, 0x98, 0xd2, 0xe5, 0xc3, 0x93, 0x43, 0x82, 0xb3, + 0x0f, 0x00, 0x97, 0xa3, 0x75, 0xc2, 0xed, 0x70, 0xe2, 0xf3, 0xa0, 0xb1, 0x70, 0x37, 0x77, 0xbf, + 0xf6, 0x78, 0x31, 0x1a, 0x2f, 0x04, 0x6f, 0x3a, 0xa1, 0x59, 0x11, 0x78, 0xf2, 0x3b, 0x58, 0xdf, + 0x86, 0xd5, 0xf4, 0x26, 0x09, 0xa2, 0x12, 0xa3, 0x22, 0x88, 0x31, 0x6f, 0x8a, 0x9f, 0x6c, 0x19, + 0x0a, 0xe7, 0xf6, 0x70, 0xc2, 0xe5, 0xae, 0x40, 0x1f, 0x1f, 0x65, 0xbf, 0x95, 0x31, 0xfe, 0x28, + 0x03, 0x15, 0xea, 0xa5, 0x94, 0x66, 0xde, 0x84, 0xaa, 0xa2, 0x06, 0xee, 0xfb, 0x9e, 0x2f, 0xf9, + 0xa2, 0xa2, 0xbc, 0x96, 0x80, 0x89, 0x7d, 0x49, 0x21, 0x8d, 0x7d, 0xee, 0x8c, 0xec, 0x53, 0x55, + 0xb4, 0x22, 0xa5, 0x43, 0x09, 0x66, 0xef, 0xc7, 0xe5, 0xf9, 0xde, 0x24, 0xe4, 0x72, 0xd7, 0xac, + 0xc8, 0xee, 0x99, 0x02, 0x16, 0x95, 0x8e, 0x5f, 0xaf, 0x40, 0xe7, 0xc6, 0x6f, 0x67, 0x80, 0x89, + 0x66, 0xf7, 0x3c, 0x2a, 0x20, 0xe6, 0x48, 0x89, 0x9c, 0x99, 0x57, 0x5e, 0x21, 0xd9, 0x17, 0xad, + 0x10, 0x03, 0x0a, 0xd4, 0xf6, 0x7c, 0x4a, 0xdb, 0x29, 0xe9, 0x7b, 0xf9, 0x62, 0xae, 0x9e, 0x37, + 0xfe, 0x4b, 0x0e, 0x96, 0xb7, 0x68, 0xd3, 0x6f, 0xf6, 0xfb, 0x7c, 0x1c, 0xad, 0x9d, 0x3b, 0x50, + 0x76, 0xbd, 0x01, 0x57, 0x14, 0x4b, 0x0d, 0x03, 0x01, 0xd2, 0xc8, 0xf5, 0xcc, 0x76, 0x5c, 0x6a, + 0x38, 0x0d, 0x66, 0x09, 0x21, 0xd8, 0xec, 0xb7, 0x61, 0x61, 0xcc, 0xdd, 0x81, 0xbe, 0x44, 0x48, + 0x2c, 0xab, 0x4a, 0xb0, 0x5c, 0x1d, 0x77, 0xa0, 0x7c, 0x32, 0x21, 0x3c, 0xc1, 0x58, 0xf2, 0x48, + 0x03, 0x20, 0x41, 0x4d, 0xe2, 0x2f, 0xe3, 0x49, 0x70, 0x86, 0xa9, 0x05, 0x4c, 0x9d, 0x17, 0xdf, + 0x22, 0xe9, 0x36, 0xc0, 0x60, 0x12, 0x84, 0x72, 0xc5, 0xcc, 0x61, 0x62, 0x49, 0x40, 0x68, 0xc5, + 0x7c, 0x1d, 0x96, 0x46, 0xf6, 0xa5, 0x85, 0xb4, 0x63, 0x39, 0xae, 0x75, 0x32, 0x44, 0xa6, 0x3e, + 0x8f, 0x78, 0xf5, 0x91, 0x7d, 0xf9, 0xa9, 0x48, 0x69, 0xbb, 0x3b, 0x08, 0x17, 0x6c, 0x45, 0x09, + 0x4c, 0x3e, 0x0f, 0xb8, 0x7f, 0xce, 0x91, 0x13, 0xe4, 0x23, 0xa9, 0xc8, 0x24, 0xa8, 0x68, 0xd1, + 0x48, 0xf4, 0x3b, 0x1c, 0xf6, 0x69, 0xd9, 0x9b, 0xf3, 0x23, 0xc7, 0xdd, 0x0d, 0x87, 0x7d, 0xb1, + 0x33, 0x09, 0x3e, 0x32, 0xe6, 0xbe, 0xf5, 0xfc, 0x02, 0xd7, 0x70, 0x1e, 0xf9, 0xc6, 0x21, 0xf7, + 0x9f, 0x5d, 0x08, 0xe1, 0xa1, 0x1f, 0x20, 0x23, 0xb2, 0xaf, 0x1a, 0x65, 0x5c, 0xe0, 0xc5, 0x7e, + 0x20, 0x58, 0x90, 0x7d, 0x25, 0x16, 0xa1, 0x68, 0xad, 0x8d, 0xb3, 0xc0, 0x07, 0x58, 0x7c, 0x80, + 0x1c, 0xb5, 0x8a, 0x8d, 0x6d, 0xca, 0x04, 0x51, 0x4f, 0x20, 0xa8, 0x5e, 0x35, 0xf6, 0x64, 0x68, + 0x9f, 0x06, 0xc8, 0x52, 0xaa, 0x66, 0x45, 0x02, 0x77, 0x04, 0xcc, 0xf8, 0x8c, 0xc4, 0x34, 0x6d, + 0x6e, 0xe5, 0x9a, 0x11, 0xc2, 0x02, 0x42, 0x70, 0x5e, 0x8b, 0xa6, 0xfc, 0x4a, 0x9b, 0xb4, 0x6c, + 0xca, 0xa4, 0x19, 0xbf, 0x97, 0x81, 0x8a, 0x2c, 0x19, 0xc5, 0x1a, 0xb6, 0x01, 0x4c, 0xcd, 0x62, + 0x78, 0xe9, 0x0c, 0xac, 0xe3, 0xab, 0x90, 0x07, 0x44, 0x34, 0xbb, 0x37, 0xcc, 0xba, 0x4c, 0xeb, + 0x5d, 0x3a, 0x83, 0x4d, 0x91, 0xc2, 0x1e, 0x40, 0x3d, 0x81, 0x1f, 0x84, 0x3e, 0x51, 0xf4, 0xee, + 0x0d, 0xb3, 0xa6, 0x61, 0x77, 0x43, 0x5f, 0xac, 0x11, 0x21, 0x34, 0x4d, 0x42, 0xcb, 0x71, 0x07, + 0xfc, 0x12, 0xc9, 0xa8, 0x6a, 0x96, 0x09, 0xd6, 0x16, 0xa0, 0xcd, 0x1a, 0x54, 0xf4, 0xe2, 0x8c, + 0x53, 0x28, 0x2a, 0x89, 0x0b, 0x45, 0x8e, 0xa9, 0x26, 0x99, 0xa5, 0x30, 0x6a, 0xc9, 0x4d, 0x28, + 0x26, 0x5b, 0x60, 0xce, 0x87, 0xaf, 0x5c, 0xb1, 0xf1, 0x1d, 0xa8, 0xef, 0x09, 0xe2, 0x71, 0x05, + 0xb1, 0x4a, 0x09, 0x72, 0x15, 0xe6, 0xb4, 0x45, 0x53, 0x32, 0xe5, 0x97, 0xd8, 0x73, 0xcf, 0xbc, + 0x20, 0x94, 0xb5, 0xe0, 0x6f, 0xe3, 0x8f, 0x33, 0xc0, 0x5a, 0x41, 0xe8, 0x8c, 0xec, 0x90, 0xef, + 0xf0, 0x88, 0x2d, 0x1c, 0x40, 0x45, 0x94, 0xd6, 0xf3, 0x9a, 0x24, 0xd2, 0x91, 0x40, 0xf1, 0xae, + 0x5c, 0xc6, 0xb3, 0x19, 0x36, 0x74, 0x6c, 0x62, 0xf3, 0x89, 0x02, 0xc4, 0x2a, 0x0b, 0x6d, 0xff, + 0x94, 0x87, 0x28, 0x08, 0x4a, 0xb9, 0x06, 0x08, 0x24, 0x44, 0xc0, 0xf5, 0x5f, 0x84, 0xc5, 0x99, + 0x32, 0x74, 0xbe, 0x5c, 0x4a, 0xe1, 0xcb, 0x39, 0x9d, 0x2f, 0x5b, 0xb0, 0x94, 0x68, 0x97, 0xa4, + 0xb4, 0x35, 0x98, 0x17, 0x0b, 0x42, 0x08, 0x07, 0x19, 0x92, 0x4b, 0x4f, 0x38, 0x17, 0x82, 0xf4, + 0x43, 0x58, 0x3e, 0xe1, 0xdc, 0xb7, 0x43, 0x4c, 0xc4, 0x15, 0x23, 0x66, 0x48, 0x16, 0xbc, 0x28, + 0xd3, 0xba, 0x76, 0x78, 0xc8, 0x7d, 0x31, 0x53, 0xc6, 0x7f, 0xcb, 0xc0, 0x82, 0xe0, 0xa0, 0xfb, + 0xb6, 0x7b, 0xa5, 0xc6, 0x69, 0x2f, 0x75, 0x9c, 0xee, 0x6b, 0x9b, 0xa1, 0x86, 0xfd, 0x55, 0x07, + 0x29, 0x37, 0x3d, 0x48, 0xec, 0x2e, 0x54, 0x12, 0x6d, 0x2d, 0x60, 0x5b, 0x21, 0x88, 0x1a, 0xf9, + 0xd3, 0x0f, 0xe3, 0xdb, 0x50, 0x8f, 0x9b, 0x2d, 0xc7, 0x90, 0x41, 0x5e, 0x90, 0xa4, 0x2c, 0x00, + 0x7f, 0x1b, 0xbf, 0x9b, 0x21, 0xc4, 0x2d, 0xcf, 0x89, 0xe5, 0x5b, 0x06, 0x79, 0x21, 0x39, 0x2b, + 0x44, 0xf1, 0xfb, 0x5a, 0xbd, 0xe0, 0xa7, 0xef, 0xac, 0x58, 0x3a, 0x81, 0x10, 0x96, 0xed, 0xe1, + 0x10, 0x99, 0x6f, 0xd1, 0x9c, 0x17, 0xdf, 0xcd, 0xe1, 0xd0, 0xb8, 0x07, 0x8b, 0x5a, 0xeb, 0x5e, + 0xd0, 0x8f, 0x0e, 0xb0, 0x3d, 0x27, 0x08, 0x8f, 0xdc, 0x60, 0xac, 0x09, 0x6e, 0xb7, 0xa0, 0x24, + 0x38, 0xac, 0x68, 0x59, 0x20, 0xa5, 0x74, 0xc1, 0x72, 0x45, 0xbb, 0x02, 0x4c, 0xb4, 0x2f, 0x65, + 0x62, 0x56, 0x26, 0xda, 0x97, 0x98, 0x68, 0x7c, 0x0b, 0x96, 0x12, 0xe5, 0xc9, 0xaa, 0xdf, 0x80, + 0xc2, 0x24, 0xbc, 0xf4, 0x94, 0x68, 0x5e, 0x96, 0x14, 0x22, 0x54, 0x48, 0x93, 0x52, 0x8c, 0x8f, + 0x61, 0xb1, 0xc3, 0x2f, 0xe4, 0x22, 0x56, 0x0d, 0x79, 0x1b, 0xf2, 0x2f, 0x51, 0x2b, 0x31, 0xdd, + 0xd8, 0x00, 0xa6, 0x67, 0x96, 0xb5, 0x6a, 0x5a, 0x66, 0x26, 0xa1, 0x65, 0x1a, 0x6f, 0x03, 0xeb, + 0x3a, 0xa7, 0xee, 0x3e, 0x0f, 0x02, 0xfb, 0x34, 0x5a, 0xf6, 0x75, 0xc8, 0x8d, 0x82, 0x53, 0xc9, + 0xa3, 0xc4, 0x4f, 0xe3, 0x1b, 0xb0, 0x94, 0xc0, 0x93, 0x05, 0xbf, 0x06, 0xa5, 0xc0, 0x39, 0x75, + 0x51, 0xb0, 0x92, 0x45, 0xc7, 0x00, 0x63, 0x07, 0x96, 0x3f, 0xe5, 0xbe, 0x73, 0x72, 0xf5, 0xb2, + 0xe2, 0x93, 0xe5, 0x64, 0xa7, 0xcb, 0x69, 0xc1, 0xca, 0x54, 0x39, 0xb2, 0x7a, 0x22, 0x5f, 0x39, + 0x93, 0x45, 0x93, 0x3e, 0x34, 0xbe, 0x97, 0xd5, 0xf9, 0x9e, 0x71, 0x04, 0x6c, 0xcb, 0x73, 0x5d, + 0xde, 0x0f, 0x0f, 0x39, 0xf7, 0x63, 0x3b, 0x57, 0x4c, 0xab, 0xe5, 0xc7, 0x6b, 0x72, 0x64, 0xa7, + 0x99, 0xa9, 0x24, 0x62, 0x06, 0xf9, 0x31, 0xf7, 0x47, 0x58, 0x70, 0xd1, 0xc4, 0xdf, 0xc6, 0x0a, + 0x2c, 0x25, 0x8a, 0x95, 0x96, 0x81, 0x47, 0xb0, 0xb2, 0xed, 0x04, 0xfd, 0xd9, 0x0a, 0xd7, 0x60, + 0x7e, 0x3c, 0x39, 0xb6, 0x92, 0x7c, 0xf9, 0x19, 0xbf, 0x32, 0x1a, 0xb0, 0x3a, 0x9d, 0x43, 0x96, + 0xf5, 0x57, 0x33, 0x90, 0xdf, 0xed, 0xed, 0x6d, 0xb1, 0x75, 0x28, 0x3a, 0x6e, 0xdf, 0x1b, 0x09, + 0xc1, 0x8b, 0xfa, 0x1c, 0x7d, 0x5f, 0xbb, 0xc0, 0x6e, 0x41, 0x09, 0xe5, 0x35, 0xa1, 0x1c, 0x4b, + 0xd1, 0xa7, 0x28, 0x00, 0x7b, 0x5e, 0xff, 0xb9, 0xd0, 0xca, 0xf9, 0xe5, 0xd8, 0xf1, 0x51, 0xef, + 0x56, 0xda, 0x66, 0x9e, 0xf6, 0xfa, 0x38, 0x41, 0x2a, 0x9d, 0xff, 0xba, 0x08, 0xf3, 0x72, 0xb7, + 0xa5, 0x9d, 0x3b, 0x74, 0xce, 0x79, 0xbc, 0x73, 0x8b, 0x2f, 0x21, 0x0f, 0xf8, 0x7c, 0xe4, 0x85, + 0x91, 0xc0, 0x46, 0x73, 0x50, 0x21, 0xa0, 0x14, 0xd9, 0x34, 0xa1, 0x81, 0x8c, 0x14, 0x39, 0x42, + 0xea, 0xeb, 0x5b, 0xf9, 0x2d, 0x98, 0x57, 0x7b, 0x7f, 0x3e, 0xd2, 0x69, 0xe6, 0xfa, 0x24, 0xad, + 0xad, 0x43, 0xb1, 0x6f, 0x8f, 0xed, 0xbe, 0x13, 0x5e, 0x49, 0x86, 0x10, 0x7d, 0x8b, 0xd2, 0x87, + 0x5e, 0xdf, 0x1e, 0x5a, 0xc7, 0xf6, 0xd0, 0x76, 0xfb, 0x5c, 0x6a, 0xff, 0x15, 0x04, 0x6e, 0x12, + 0x4c, 0x68, 0xf8, 0xb2, 0x9d, 0x0a, 0x8b, 0x8c, 0x00, 0xb2, 0xf5, 0x0a, 0x4d, 0x08, 0x97, 0xde, + 0x68, 0xe4, 0x08, 0x2d, 0x83, 0xc4, 0xb0, 0x9c, 0x59, 0x22, 0xc8, 0x0e, 0xc7, 0xde, 0xca, 0xe4, + 0x0b, 0x1a, 0xba, 0x12, 0x55, 0x45, 0xc0, 0xcf, 0x48, 0x95, 0x9f, 0x95, 0xc5, 0x72, 0x9a, 0x2c, + 0xf6, 0x2e, 0x2c, 0x4e, 0xdc, 0x80, 0x87, 0xe1, 0x90, 0x0f, 0xa2, 0xb6, 0x94, 0x11, 0xa9, 0x1e, + 0x25, 0xa8, 0xe6, 0x6c, 0xc0, 0x12, 0x99, 0x2d, 0x02, 0x3b, 0xf4, 0x82, 0x33, 0x27, 0xb0, 0x02, + 0xa1, 0x21, 0x91, 0xba, 0xbb, 0x88, 0x49, 0x5d, 0x99, 0xd2, 0x25, 0x15, 0x69, 0x6d, 0x0a, 0xdf, + 0xe7, 0x7d, 0xee, 0x9c, 0xf3, 0x01, 0xca, 0x69, 0x39, 0x73, 0x25, 0x91, 0xc7, 0x94, 0x89, 0x28, + 0x74, 0x4f, 0x46, 0xd6, 0x64, 0x3c, 0xb0, 0x85, 0xb0, 0x52, 0x23, 0x61, 0xd8, 0x9d, 0x8c, 0x8e, + 0x08, 0xc2, 0x1e, 0x81, 0x92, 0xc4, 0xa4, 0x7c, 0xb8, 0x90, 0xe0, 0x67, 0x82, 0x58, 0xcd, 0x8a, + 0xc4, 0x20, 0x41, 0x31, 0x21, 0x73, 0xd6, 0xa7, 0x64, 0xce, 0x06, 0xcc, 0x8f, 0x7d, 0xe7, 0xdc, + 0x0e, 0x79, 0x63, 0x91, 0x18, 0xb8, 0xfc, 0x14, 0x9c, 0xc1, 0x71, 0x9d, 0xd0, 0xb1, 0x43, 0xcf, + 0x6f, 0x30, 0x4c, 0x8b, 0x01, 0xec, 0x01, 0x2c, 0x22, 0x8d, 0x04, 0xa1, 0x1d, 0x4e, 0x02, 0x29, + 0x81, 0x2e, 0x21, 0x31, 0xa1, 0x0c, 0xdd, 0x45, 0x38, 0x0a, 0xa1, 0xec, 0x1b, 0xb0, 0x4a, 0x64, + 0x81, 0x39, 0xa4, 0x64, 0x8d, 0x02, 0xc1, 0x32, 0x0e, 0xc5, 0x12, 0xa6, 0x0a, 0xfa, 0x96, 0xf2, + 0xb5, 0x90, 0x0e, 0x9e, 0xc0, 0x9a, 0x24, 0x93, 0x99, 0x5c, 0x2b, 0x98, 0x6b, 0x99, 0x92, 0xa7, + 0xb2, 0x6d, 0xc0, 0xa2, 0x68, 0x92, 0xd3, 0xb7, 0x64, 0x6e, 0xb1, 0x12, 0x56, 0x45, 0xeb, 0x51, + 0x53, 0x5a, 0xa0, 0x44, 0x13, 0xd3, 0x9e, 0xf1, 0x2b, 0xf6, 0x1d, 0x58, 0x20, 0x92, 0x41, 0xf5, + 0x0a, 0x39, 0xfd, 0x3a, 0x72, 0xfa, 0x15, 0x65, 0x23, 0x8d, 0x52, 0x91, 0xd9, 0xd7, 0xfa, 0x89, + 0x6f, 0xb1, 0x1c, 0x86, 0xce, 0x09, 0x0f, 0x9d, 0x11, 0x6f, 0xac, 0x11, 0x81, 0xa9, 0x6f, 0xb1, + 0x52, 0x27, 0x63, 0x4c, 0x69, 0x10, 0x5f, 0xa0, 0x2f, 0xa4, 0xdd, 0xa1, 0x17, 0x70, 0x65, 0xe4, + 0x6a, 0xdc, 0x94, 0x8b, 0x50, 0x00, 0x95, 0x0c, 0x29, 0x04, 0x71, 0x52, 0x7a, 0x22, 0x53, 0xe4, + 0x2d, 0x24, 0x86, 0x2a, 0xe9, 0x3e, 0xca, 0x1c, 0x29, 0x76, 0xf1, 0x33, 0xfb, 0x42, 0x71, 0x90, + 0xd7, 0x70, 0x7e, 0x41, 0x80, 0x24, 0xef, 0xf8, 0x71, 0x86, 0x36, 0x44, 0xc9, 0x3f, 0x02, 0x4d, + 0xbd, 0x23, 0xce, 0x61, 0x79, 0xee, 0xf0, 0x4a, 0x32, 0x13, 0x20, 0xd0, 0x81, 0x3b, 0xc4, 0xd5, + 0xec, 0xb8, 0x3a, 0x0a, 0xf1, 0xde, 0x8a, 0x02, 0x22, 0xd2, 0x1d, 0x28, 0x8f, 0x27, 0xc7, 0x43, + 0xa7, 0x4f, 0x28, 0x39, 0x2a, 0x85, 0x40, 0x88, 0x20, 0xf4, 0x5b, 0xa2, 0x28, 0xc2, 0xc8, 0x23, + 0x46, 0x59, 0xc2, 0x10, 0x05, 0x79, 0x3b, 0xf7, 0x91, 0x9d, 0x54, 0x4c, 0xfc, 0x6d, 0x6c, 0xc2, + 0x72, 0xb2, 0xd1, 0x72, 0xe3, 0x79, 0x00, 0x45, 0xc9, 0xab, 0x94, 0xe1, 0xa3, 0xa6, 0x19, 0xb3, + 0x85, 0x8a, 0x16, 0xa5, 0x1b, 0xbf, 0x5f, 0x80, 0x25, 0x09, 0xdd, 0x12, 0x43, 0xdb, 0x9d, 0x8c, + 0x46, 0xb6, 0x9f, 0xc2, 0x04, 0x33, 0x2f, 0x66, 0x82, 0xd9, 0x19, 0x26, 0x98, 0xd4, 0x7c, 0x89, + 0x87, 0x26, 0x35, 0x5f, 0x31, 0x97, 0xa4, 0x8c, 0xe8, 0x96, 0xd4, 0xaa, 0x04, 0xf7, 0xc8, 0x62, + 0x3b, 0xc3, 0xb2, 0x0b, 0x29, 0x2c, 0x5b, 0x67, 0xb8, 0x73, 0x53, 0x0c, 0xf7, 0x0d, 0x20, 0xa2, + 0x51, 0xb3, 0x3f, 0x4f, 0xfa, 0x09, 0xc2, 0xa4, 0x39, 0xf3, 0x1e, 0x2c, 0x4c, 0xf3, 0x38, 0x62, + 0xa6, 0xb5, 0x14, 0x0e, 0xe7, 0x8c, 0x38, 0xee, 0x56, 0x1a, 0x72, 0x49, 0x72, 0x38, 0x67, 0xc4, + 0xf7, 0x30, 0x45, 0xe1, 0xb7, 0x00, 0xa8, 0x6e, 0x5c, 0x34, 0x80, 0x8b, 0xe6, 0xed, 0xe4, 0x5c, + 0xe8, 0xa3, 0xbe, 0x21, 0x3e, 0x26, 0x3e, 0xc7, 0x55, 0x54, 0xc2, 0x9c, 0xb8, 0x80, 0x3e, 0x84, + 0x9a, 0x37, 0xe6, 0xae, 0x15, 0xf3, 0x9a, 0x32, 0x16, 0x55, 0x97, 0x45, 0xb5, 0x15, 0xdc, 0xac, + 0x0a, 0xbc, 0xe8, 0x93, 0x7d, 0x9b, 0x06, 0x99, 0x6b, 0x39, 0x2b, 0xd7, 0xe4, 0xac, 0x21, 0x62, + 0xf4, 0x6d, 0xfc, 0x66, 0x06, 0xca, 0x5a, 0x73, 0xd8, 0x0a, 0x2c, 0x6e, 0x1d, 0x1c, 0x1c, 0xb6, + 0xcc, 0x66, 0xaf, 0xfd, 0x69, 0xcb, 0xda, 0xda, 0x3b, 0xe8, 0xb6, 0xea, 0x37, 0x04, 0x78, 0xef, + 0x60, 0xab, 0xb9, 0x67, 0xed, 0x1c, 0x98, 0x5b, 0x0a, 0x9c, 0x61, 0xab, 0xc0, 0xcc, 0xd6, 0xfe, + 0x41, 0xaf, 0x95, 0x80, 0x67, 0x59, 0x1d, 0x2a, 0x9b, 0x66, 0xab, 0xb9, 0xb5, 0x2b, 0x21, 0x39, + 0xb6, 0x0c, 0xf5, 0x9d, 0xa3, 0xce, 0x76, 0xbb, 0xf3, 0xd4, 0xda, 0x6a, 0x76, 0xb6, 0x5a, 0x7b, + 0xad, 0xed, 0x7a, 0x9e, 0x55, 0xa1, 0xd4, 0xdc, 0x6c, 0x76, 0xb6, 0x0f, 0x3a, 0xad, 0xed, 0x7a, + 0xc1, 0xf8, 0xf3, 0x0c, 0xac, 0xe0, 0x40, 0x0d, 0xa6, 0x57, 0xe8, 0x5d, 0x28, 0xf7, 0x3d, 0x6f, + 0x2c, 0xd4, 0xa0, 0x78, 0xbb, 0xd7, 0x41, 0x62, 0xf5, 0x11, 0x67, 0x3d, 0xf1, 0xfc, 0x3e, 0x97, + 0x0b, 0x14, 0x10, 0xb4, 0x23, 0x20, 0x82, 0x40, 0x24, 0x85, 0x11, 0x06, 0xad, 0xcf, 0x32, 0xc1, + 0x08, 0x65, 0x15, 0xe6, 0x8e, 0x7d, 0x6e, 0xf7, 0xcf, 0xe4, 0xd2, 0x94, 0x5f, 0xec, 0x9d, 0x58, + 0x41, 0xef, 0x8b, 0x09, 0x1f, 0xf2, 0x01, 0xd2, 0x67, 0xd1, 0x5c, 0x90, 0xf0, 0x2d, 0x09, 0x16, + 0x5b, 0x85, 0x7d, 0x6c, 0xbb, 0x03, 0xcf, 0xe5, 0x03, 0xa9, 0x07, 0xc4, 0x00, 0xe3, 0x10, 0x56, + 0xa7, 0xfb, 0x27, 0x17, 0xf3, 0x07, 0xda, 0x62, 0x26, 0xb1, 0x7c, 0xfd, 0x7a, 0x02, 0xd2, 0x16, + 0xf6, 0xdf, 0xca, 0x43, 0x5e, 0x88, 0x69, 0xd7, 0x4a, 0x74, 0xba, 0xdc, 0x9d, 0x9b, 0xf1, 0xee, + 0xa0, 0x1d, 0x80, 0xf6, 0x6f, 0x32, 0x36, 0x95, 0x10, 0x82, 0xfb, 0x76, 0x94, 0xec, 0xf3, 0xfe, + 0xb9, 0xb4, 0x36, 0x51, 0xb2, 0xc9, 0xfb, 0xe7, 0xa8, 0xf0, 0xd8, 0x21, 0xe5, 0xa5, 0xc5, 0x38, + 0x1f, 0xd8, 0x21, 0xe6, 0x94, 0x49, 0x98, 0x6f, 0x3e, 0x4a, 0xc2, 0x5c, 0x0d, 0x98, 0x77, 0xdc, + 0x63, 0x6f, 0xe2, 0x0e, 0x70, 0xed, 0x15, 0x4d, 0xf5, 0x89, 0xce, 0x24, 0x64, 0x13, 0x62, 0x97, + 0xa0, 0xa5, 0x56, 0x14, 0x80, 0x9e, 0xd8, 0x27, 0xde, 0x87, 0x52, 0x70, 0xe5, 0xf6, 0xf5, 0x05, + 0xb6, 0x2c, 0xc7, 0x47, 0xf4, 0x7e, 0xa3, 0x7b, 0xe5, 0xf6, 0x71, 0x39, 0x15, 0x03, 0xf9, 0x8b, + 0x3d, 0x81, 0x62, 0x64, 0x94, 0x25, 0xf6, 0x78, 0x53, 0xcf, 0xa1, 0x2c, 0xb1, 0xa4, 0xfb, 0x46, + 0xa8, 0xec, 0x21, 0xcc, 0xa1, 0xe5, 0x34, 0x68, 0x54, 0x30, 0x93, 0x12, 0xc6, 0x45, 0x33, 0xd0, + 0x8f, 0xc3, 0x07, 0x68, 0x45, 0x35, 0x25, 0xda, 0xfa, 0x33, 0xa8, 0x26, 0xca, 0xd2, 0x35, 0xdc, + 0x2a, 0x69, 0xb8, 0x6f, 0xe9, 0x1a, 0x6e, 0xcc, 0xa6, 0x65, 0x36, 0x5d, 0xe3, 0xfd, 0x45, 0x28, + 0xaa, 0xae, 0x88, 0x45, 0x74, 0xd4, 0x79, 0xd6, 0x39, 0xf8, 0xac, 0x63, 0x75, 0x3f, 0xef, 0x6c, + 0xd5, 0x6f, 0xb0, 0x05, 0x28, 0x37, 0xb7, 0x70, 0x5d, 0x22, 0x20, 0x23, 0x50, 0x0e, 0x9b, 0xdd, + 0x6e, 0x04, 0xc9, 0x1a, 0x3b, 0x50, 0x9f, 0x6e, 0xa9, 0xa0, 0xc9, 0x50, 0xc1, 0xa4, 0x5d, 0x39, + 0x06, 0x08, 0xfd, 0x85, 0x4c, 0xc5, 0x24, 0x24, 0xd3, 0x87, 0xf1, 0x04, 0xea, 0x62, 0xd3, 0x11, + 0x43, 0xa5, 0x7b, 0x8c, 0x86, 0x42, 0xf0, 0xd2, 0x6d, 0xcb, 0x45, 0xb3, 0x4c, 0x30, 0xac, 0xca, + 0xf8, 0x00, 0x16, 0xb5, 0x6c, 0xb1, 0xbe, 0x29, 0x36, 0xb2, 0x69, 0x7d, 0x13, 0xb5, 0x0b, 0x4a, + 0x31, 0xd6, 0x60, 0x45, 0x7c, 0xb6, 0xce, 0xb9, 0x1b, 0x76, 0x27, 0xc7, 0xe4, 0x52, 0x74, 0x3c, + 0x57, 0x68, 0x1d, 0xa5, 0x28, 0xe5, 0x7a, 0x22, 0xdf, 0x90, 0xaa, 0x69, 0x16, 0x49, 0x63, 0x5d, + 0xab, 0x01, 0x33, 0x6e, 0xe0, 0xdf, 0x84, 0x8a, 0x5a, 0x8a, 0x40, 0x62, 0x58, 0x0f, 0x5b, 0x2d, + 0xd3, 0x3a, 0xe8, 0xec, 0xb5, 0x3b, 0x82, 0xdb, 0x89, 0x61, 0x45, 0xc0, 0xce, 0x0e, 0x42, 0x32, + 0x46, 0x1d, 0x6a, 0x4f, 0x79, 0xd8, 0x76, 0x4f, 0x3c, 0x39, 0x18, 0xc6, 0xdf, 0x98, 0x83, 0x85, + 0x08, 0x14, 0xab, 0xb8, 0xe7, 0xdc, 0x0f, 0x1c, 0xcf, 0x45, 0x69, 0xb5, 0x64, 0xaa, 0x4f, 0xc1, + 0x9d, 0xa4, 0x8c, 0x8e, 0x5b, 0xe0, 0x32, 0xa6, 0x4a, 0xa9, 0x1e, 0xf7, 0xbf, 0x7b, 0xb0, 0xe0, + 0x0c, 0xb8, 0x1b, 0x3a, 0xe1, 0x95, 0x95, 0x30, 0x98, 0xd5, 0x14, 0x58, 0xee, 0x81, 0xcb, 0x50, + 0xb0, 0x87, 0x8e, 0xad, 0x5c, 0xb5, 0xf4, 0x21, 0xa0, 0x7d, 0x6f, 0xe8, 0xf9, 0x28, 0xb9, 0x96, + 0x4c, 0xfa, 0x60, 0x8f, 0x60, 0x59, 0x48, 0xd0, 0xba, 0x15, 0x13, 0x19, 0x0c, 0xd9, 0xee, 0x98, + 0x3b, 0x19, 0x1d, 0xc6, 0x96, 0x4c, 0x91, 0x22, 0x76, 0x3e, 0x91, 0x43, 0x8a, 0x3a, 0x51, 0x06, + 0x52, 0xc6, 0x16, 0xdd, 0xc9, 0xa8, 0x89, 0x29, 0x11, 0xfe, 0x63, 0x58, 0x11, 0xf8, 0x91, 0x70, + 0x14, 0xe5, 0x58, 0xc0, 0x1c, 0xa2, 0xb0, 0xb6, 0x4c, 0x8b, 0xf2, 0xdc, 0x82, 0x12, 0xb5, 0x4a, + 0x90, 0x44, 0x81, 0x84, 0x70, 0x6c, 0x0a, 0xf7, 0x83, 0x19, 0xaf, 0xea, 0x1c, 0x6d, 0xe3, 0x53, + 0x5e, 0x55, 0xcd, 0x2f, 0x5b, 0x9c, 0xf6, 0xcb, 0x3e, 0x86, 0x95, 0x63, 0x41, 0xa3, 0x67, 0xdc, + 0x1e, 0x70, 0xdf, 0x8a, 0x29, 0x9f, 0x94, 0x8d, 0x25, 0x91, 0xb8, 0x8b, 0x69, 0xd1, 0x42, 0x11, + 0x52, 0x8a, 0xe0, 0x1b, 0x7c, 0x60, 0x85, 0x9e, 0x85, 0xc2, 0x0b, 0x72, 0xa0, 0xa2, 0x59, 0x25, + 0x70, 0xcf, 0xdb, 0x12, 0xc0, 0x24, 0xde, 0xa9, 0x6f, 0x8f, 0xcf, 0xa4, 0x3a, 0x10, 0xe1, 0x3d, + 0x15, 0x40, 0xf6, 0x1a, 0xcc, 0x8b, 0x35, 0xe1, 0x72, 0x72, 0x5d, 0x91, 0xc0, 0xad, 0x40, 0xec, + 0x2d, 0x98, 0xc3, 0x3a, 0x82, 0x46, 0x1d, 0x17, 0x44, 0x25, 0xe6, 0xf4, 0x8e, 0x6b, 0xca, 0x34, + 0x21, 0x0a, 0x4e, 0x7c, 0x87, 0xd8, 0x50, 0xc9, 0xc4, 0xdf, 0xec, 0xbb, 0x1a, 0x4f, 0x5b, 0xc2, + 0xbc, 0x6f, 0xc9, 0xbc, 0x53, 0xa4, 0x78, 0x1d, 0x7b, 0xfb, 0x99, 0x72, 0xab, 0xef, 0xe5, 0x8b, + 0xe5, 0x7a, 0xc5, 0xf8, 0x10, 0x0a, 0x34, 0x3a, 0x82, 0x08, 0x71, 0xec, 0x32, 0x92, 0x08, 0x11, + 0xda, 0x80, 0x79, 0x97, 0x87, 0x17, 0x9e, 0xff, 0x5c, 0x99, 0x94, 0xe5, 0xa7, 0xf1, 0x43, 0xb4, + 0x85, 0x44, 0x1e, 0x77, 0x52, 0xeb, 0x04, 0x79, 0xd0, 0xf4, 0x06, 0x67, 0xb6, 0x34, 0xcf, 0x14, + 0x11, 0xd0, 0x3d, 0xb3, 0x67, 0xc8, 0x23, 0x3b, 0xeb, 0x74, 0x7f, 0x0b, 0x6a, 0xca, 0xc7, 0x1f, + 0x58, 0x43, 0x7e, 0x12, 0x4a, 0x72, 0xaf, 0x48, 0x07, 0x7f, 0xb0, 0xc7, 0x4f, 0x42, 0x63, 0x1f, + 0x16, 0x25, 0x41, 0x1e, 0x8c, 0xb9, 0xaa, 0xfa, 0x5b, 0x69, 0xd2, 0x70, 0xf9, 0xf1, 0x52, 0x72, + 0x27, 0xa6, 0xd8, 0x85, 0x84, 0x88, 0x6c, 0x7c, 0x02, 0x4c, 0xdf, 0xa7, 0x65, 0x79, 0x52, 0x26, + 0x55, 0x96, 0x78, 0xe5, 0xd0, 0x8a, 0x24, 0x5f, 0x67, 0x20, 0x46, 0x27, 0x98, 0xf4, 0xfb, 0x2a, + 0xf6, 0xa2, 0x68, 0xaa, 0x4f, 0xe3, 0x4f, 0x32, 0xb0, 0x84, 0x85, 0x29, 0x69, 0x5e, 0x72, 0xe1, + 0x9f, 0xb8, 0x91, 0x62, 0x7e, 0x74, 0xe1, 0x88, 0x3e, 0xbe, 0xba, 0xed, 0x33, 0x3f, 0x63, 0xfb, + 0x7c, 0x07, 0xea, 0x03, 0x3e, 0x74, 0x30, 0x0c, 0x47, 0xc9, 0x1a, 0x24, 0xbf, 0x2f, 0x28, 0xb8, + 0xd4, 0xe5, 0x8c, 0xbf, 0x97, 0x81, 0x45, 0x12, 0x65, 0x50, 0x2b, 0x96, 0x03, 0xf5, 0xb1, 0x52, + 0x03, 0x25, 0xab, 0x92, 0x7d, 0x8a, 0xb7, 0x78, 0x84, 0x12, 0xf2, 0xee, 0x0d, 0xa9, 0x1e, 0x4a, + 0x28, 0xfb, 0x08, 0x35, 0x10, 0xd7, 0x42, 0x60, 0x4a, 0x58, 0x4f, 0x72, 0x52, 0x76, 0x6f, 0xa0, + 0x7a, 0xe2, 0x22, 0x68, 0xb3, 0x28, 0xf4, 0x52, 0x01, 0x36, 0x76, 0xa0, 0x9a, 0xa8, 0x26, 0x61, + 0xa0, 0xad, 0x90, 0x81, 0x76, 0xc6, 0x09, 0x92, 0x9d, 0x75, 0x82, 0x5c, 0xc1, 0x92, 0xc9, 0xed, + 0xc1, 0xd5, 0x8e, 0xe7, 0x1f, 0x06, 0xc7, 0xe1, 0x0e, 0xc9, 0x87, 0x82, 0xbf, 0x47, 0x9e, 0xbd, + 0x84, 0x15, 0x54, 0x39, 0x78, 0x94, 0xb2, 0xfb, 0x35, 0xa8, 0xc5, 0x2e, 0x40, 0xcd, 0x92, 0x56, + 0x8d, 0xbc, 0x80, 0x68, 0x50, 0x13, 0x8a, 0x62, 0x70, 0x1c, 0x4a, 0x5b, 0x1a, 0xfe, 0x36, 0xfe, + 0x5a, 0x1e, 0x98, 0xa0, 0xe6, 0x29, 0x82, 0x99, 0x72, 0x5e, 0x66, 0x67, 0x9c, 0x97, 0x8f, 0x80, + 0x69, 0x08, 0xca, 0xa7, 0x9a, 0x8b, 0x7c, 0xaa, 0xf5, 0x18, 0x57, 0xba, 0x54, 0x1f, 0xc1, 0xb2, + 0x14, 0xb6, 0x93, 0x4d, 0x25, 0xd2, 0x60, 0x24, 0x75, 0x27, 0xda, 0xab, 0x1c, 0x97, 0x42, 0x79, + 0x27, 0x5b, 0x19, 0x3a, 0x2e, 0x95, 0xda, 0xae, 0x11, 0xe0, 0xdc, 0x4b, 0x09, 0x70, 0x7e, 0x86, + 0x00, 0x35, 0xd3, 0x4d, 0x31, 0x69, 0xba, 0x31, 0xa0, 0xaa, 0xdc, 0x93, 0x14, 0x95, 0x41, 0x92, + 0x65, 0x59, 0xfa, 0x28, 0x31, 0x32, 0xe3, 0x3e, 0xd4, 0x95, 0x7d, 0x25, 0x32, 0x0e, 0x51, 0xc4, + 0x81, 0x34, 0xcf, 0x6d, 0x29, 0x13, 0x51, 0xc2, 0x14, 0x5f, 0x9e, 0x32, 0xc5, 0xbf, 0x0b, 0x8b, + 0x81, 0xa0, 0x5f, 0x6b, 0xe2, 0xca, 0x00, 0x23, 0x3e, 0x40, 0x3d, 0xac, 0x68, 0xd6, 0x31, 0xe1, + 0x28, 0x86, 0xcf, 0x1a, 0x3e, 0xaa, 0x29, 0x86, 0x8f, 0x27, 0xb1, 0x27, 0x2f, 0x38, 0x73, 0x46, + 0x28, 0x54, 0xc4, 0xa1, 0x34, 0x72, 0x80, 0xbb, 0x67, 0xce, 0xc8, 0x54, 0x6e, 0x63, 0xf1, 0x61, + 0xfc, 0xef, 0x0c, 0xd4, 0x05, 0x1d, 0x24, 0x96, 0xd8, 0xb7, 0x01, 0x99, 0xc1, 0x2b, 0xae, 0xb0, + 0xb2, 0xc0, 0x55, 0x0b, 0xec, 0x43, 0xc0, 0x15, 0x63, 0x09, 0xa5, 0x53, 0xae, 0xaf, 0x46, 0x72, + 0x7d, 0xc5, 0x3c, 0x74, 0xf7, 0x06, 0x29, 0x27, 0x02, 0xc2, 0xbe, 0x0d, 0x25, 0x41, 0x98, 0x48, + 0x25, 0x32, 0x06, 0x4c, 0x89, 0x66, 0x29, 0x6b, 0x44, 0x64, 0x1d, 0xcb, 0xcf, 0x34, 0xe7, 0x6b, + 0x3e, 0xc5, 0xf9, 0xaa, 0x2d, 0xe0, 0x5d, 0x80, 0x67, 0xfc, 0x6a, 0xcf, 0xeb, 0xa3, 0x4a, 0x7c, + 0x1b, 0x40, 0xd0, 0xf2, 0x89, 0x3d, 0x72, 0xa4, 0x45, 0xa7, 0x60, 0x96, 0x9e, 0xf3, 0xab, 0x1d, + 0x04, 0x88, 0x89, 0x14, 0xc9, 0xf1, 0x2a, 0x2e, 0x98, 0xc5, 0xe7, 0xfc, 0x8a, 0x96, 0xb0, 0x05, + 0xd5, 0x67, 0xfc, 0x6a, 0x9b, 0x93, 0x14, 0xea, 0xf9, 0x82, 0x88, 0x7c, 0xfb, 0x42, 0x88, 0x9d, + 0x09, 0xc7, 0x69, 0xd9, 0xb7, 0x2f, 0x9e, 0xf1, 0x2b, 0xe5, 0xc4, 0x9d, 0x17, 0xe9, 0x43, 0xaf, + 0x2f, 0xf7, 0x4d, 0x15, 0x02, 0x12, 0x37, 0xca, 0x9c, 0x7b, 0x8e, 0xbf, 0x8d, 0xbf, 0xcc, 0x40, + 0x55, 0xb4, 0x1f, 0xd9, 0xb2, 0x98, 0x32, 0x15, 0x49, 0x94, 0x89, 0x23, 0x89, 0x1e, 0x4b, 0xae, + 0x46, 0x3c, 0x3e, 0x7b, 0x3d, 0x8f, 0xc7, 0xb9, 0x21, 0x06, 0xff, 0x3e, 0x94, 0x68, 0x59, 0x8a, + 0x75, 0x9e, 0x4b, 0x4c, 0x70, 0xa2, 0x43, 0x66, 0x11, 0xd1, 0x9e, 0x51, 0xe0, 0x82, 0x66, 0x1d, + 0xa4, 0x21, 0x2e, 0xf9, 0x91, 0x4d, 0x30, 0x65, 0x1a, 0x0a, 0xd7, 0x04, 0x2e, 0xe8, 0xa6, 0xb7, + 0xb9, 0x19, 0xd3, 0xdb, 0x01, 0x14, 0xc5, 0x54, 0x63, 0x67, 0x53, 0x0a, 0xcd, 0xa4, 0x15, 0x2a, + 0x24, 0x01, 0x5b, 0x6c, 0x0a, 0x82, 0xd1, 0x65, 0xa5, 0x24, 0x60, 0x07, 0xfc, 0x10, 0x99, 0x5d, + 0x06, 0xca, 0xda, 0x0a, 0x40, 0xeb, 0x65, 0x34, 0x5e, 0xb4, 0x5c, 0x92, 0x24, 0x9e, 0x18, 0xf0, + 0xdd, 0x1b, 0x66, 0xb5, 0x9f, 0x98, 0x81, 0x0d, 0x49, 0xab, 0x98, 0x33, 0x9b, 0x08, 0x7a, 0x52, + 0x0d, 0x57, 0x04, 0x2a, 0x7e, 0x6f, 0xce, 0x41, 0x5e, 0xa0, 0x1a, 0x1f, 0xc3, 0xa2, 0xd6, 0x0c, + 0xb2, 0x03, 0xbc, 0x6a, 0x0f, 0x8d, 0x5f, 0x89, 0x32, 0x8b, 0x3a, 0xc8, 0xbf, 0xa4, 0x82, 0x40, + 0xf8, 0x80, 0x3a, 0x2e, 0x83, 0x4d, 0x08, 0x24, 0xd0, 0x5e, 0x39, 0x30, 0xe1, 0xd7, 0x60, 0x49, + 0x2b, 0x7d, 0xc7, 0x71, 0xed, 0xa1, 0xf3, 0x43, 0xdc, 0xf0, 0x03, 0xe7, 0xd4, 0x9d, 0x2a, 0x9f, + 0x40, 0x5f, 0xa9, 0xfc, 0xbf, 0x9f, 0x85, 0x65, 0x59, 0x01, 0x86, 0xf5, 0x39, 0x42, 0x8a, 0xdb, + 0x0f, 0x4e, 0xd9, 0xb7, 0xa1, 0x2a, 0xc6, 0xc6, 0xf2, 0xf9, 0xa9, 0x13, 0x84, 0x5c, 0xf9, 0xb5, + 0x52, 0x18, 0x97, 0xd8, 0xcc, 0x05, 0xaa, 0x29, 0x31, 0xd9, 0xc7, 0x50, 0xc6, 0xac, 0x64, 0x67, + 0x91, 0x13, 0xd1, 0x98, 0xcd, 0x48, 0x03, 0xbd, 0x7b, 0xc3, 0x84, 0x20, 0x1e, 0xf6, 0x8f, 0xa1, + 0x8c, 0x73, 0x78, 0x8e, 0x03, 0x39, 0xc5, 0xaa, 0x66, 0x06, 0x5a, 0x64, 0x1e, 0xc7, 0xc3, 0xde, + 0x84, 0x2a, 0x31, 0x2b, 0x39, 0x4e, 0x32, 0x5c, 0x68, 0x7d, 0x36, 0xbb, 0x1a, 0x49, 0xd1, 0xf8, + 0xb1, 0xf6, 0xbd, 0x59, 0x82, 0xf9, 0xd0, 0x77, 0x4e, 0x4f, 0xb9, 0x6f, 0xac, 0x46, 0x43, 0x23, + 0xb8, 0x30, 0xef, 0x86, 0x7c, 0x2c, 0x64, 0x73, 0xe3, 0xdf, 0x66, 0xa0, 0x2c, 0xf9, 0xea, 0x4f, + 0xec, 0x4c, 0x5b, 0xd7, 0x22, 0x6b, 0xc9, 0xa4, 0x13, 0x07, 0xd2, 0xde, 0x83, 0x85, 0x91, 0x90, + 0xd3, 0x85, 0x1e, 0x99, 0xf0, 0xa4, 0xd5, 0x14, 0x58, 0x8a, 0xc9, 0x1b, 0xb0, 0x84, 0x52, 0x73, + 0x60, 0x85, 0xce, 0xd0, 0x52, 0x89, 0x32, 0x8a, 0x75, 0x91, 0x92, 0x7a, 0xce, 0x70, 0x5f, 0x26, + 0x08, 0xe1, 0x31, 0x08, 0xed, 0x53, 0x2e, 0xd7, 0x36, 0x7d, 0x18, 0x0d, 0x58, 0x9d, 0x52, 0x21, + 0x95, 0x7e, 0xfc, 0x7f, 0x16, 0x61, 0x6d, 0x26, 0x49, 0xea, 0xc9, 0x91, 0x07, 0x69, 0xe8, 0x8c, + 0x8e, 0xbd, 0xc8, 0xbe, 0x9a, 0xd1, 0x3c, 0x48, 0x7b, 0x22, 0x45, 0xd9, 0x57, 0x39, 0xac, 0x28, + 0x82, 0x44, 0x03, 0x69, 0xa4, 0x65, 0x66, 0x51, 0x07, 0x7a, 0x3f, 0xb9, 0x89, 0x4d, 0x57, 0xa7, + 0xe0, 0xba, 0x68, 0xb4, 0x34, 0x9e, 0x81, 0x05, 0xec, 0xd7, 0xa1, 0x11, 0xd1, 0xbd, 0x14, 0xdb, + 0x35, 0x95, 0x59, 0xd4, 0xf4, 0xde, 0x4b, 0x6a, 0x4a, 0x18, 0xf7, 0x50, 0x76, 0x5a, 0x55, 0x4b, + 0x86, 0x0a, 0x8c, 0xea, 0x3a, 0x87, 0xd7, 0x55, 0x5d, 0x28, 0x86, 0xcf, 0xd6, 0x98, 0x7f, 0xa5, + 0xbe, 0xa1, 0xe1, 0x32, 0x51, 0xad, 0x79, 0x4b, 0x16, 0x1c, 0x25, 0xe9, 0xf5, 0x9e, 0xc1, 0xea, + 0x85, 0xed, 0x84, 0xaa, 0x8f, 0x9a, 0xc6, 0x5e, 0xc0, 0xfa, 0x1e, 0xbf, 0xa4, 0xbe, 0xcf, 0x28, + 0x73, 0x42, 0x31, 0x59, 0xbe, 0x98, 0x05, 0x06, 0xeb, 0xff, 0x38, 0x07, 0xb5, 0x64, 0x29, 0x82, + 0xb1, 0xc8, 0xcd, 0x46, 0xc9, 0x9b, 0x52, 0x08, 0x96, 0xb6, 0xff, 0x0e, 0xc9, 0x99, 0xb3, 0x5e, + 0x89, 0x6c, 0x8a, 0x57, 0x42, 0x77, 0x06, 0xe4, 0x5e, 0xe6, 0x7d, 0xcd, 0xbf, 0x92, 0xf7, 0xb5, + 0x90, 0xe6, 0x7d, 0xbd, 0xde, 0x65, 0x37, 0xf7, 0x13, 0xb9, 0xec, 0xe6, 0x5f, 0xe8, 0xb2, 0xd3, + 0x1c, 0x8d, 0xc5, 0x6b, 0x4c, 0xf8, 0x9a, 0xeb, 0x31, 0xc5, 0x65, 0x57, 0xfa, 0x0a, 0x2e, 0xbb, + 0xf5, 0xbf, 0xcc, 0x00, 0x9b, 0x5d, 0x1d, 0xec, 0x29, 0x39, 0x7c, 0x5c, 0x3e, 0x94, 0x9c, 0xfb, + 0xeb, 0xaf, 0xb6, 0xc2, 0x14, 0x41, 0xa8, 0xdc, 0xec, 0x21, 0x2c, 0xe9, 0xb1, 0xf6, 0xba, 0xd6, + 0x5e, 0x35, 0x99, 0x9e, 0x14, 0xdb, 0x76, 0x34, 0x57, 0x77, 0xfe, 0xa5, 0xae, 0xee, 0xc2, 0x4b, + 0x5d, 0xdd, 0x73, 0x49, 0x57, 0xf7, 0xfa, 0x7f, 0xcc, 0xc0, 0x52, 0x0a, 0x11, 0xff, 0xec, 0xfa, + 0x2c, 0x68, 0x2f, 0xc1, 0xd6, 0xb2, 0x92, 0xf6, 0x74, 0x8e, 0xb6, 0xa7, 0xec, 0x81, 0x62, 0x2a, + 0xd4, 0x59, 0x94, 0x07, 0x2f, 0xe3, 0x2e, 0x71, 0x0e, 0x53, 0xcf, 0xbe, 0xfe, 0xfb, 0x59, 0x28, + 0x6b, 0x89, 0x62, 0x14, 0x89, 0x64, 0xb5, 0x08, 0x23, 0x92, 0x0c, 0xd1, 0xe6, 0x70, 0x07, 0xa4, + 0xd7, 0x83, 0xd2, 0x69, 0x71, 0x49, 0x31, 0x10, 0x11, 0x36, 0x60, 0x49, 0x39, 0xe3, 0x78, 0x1c, + 0x48, 0x28, 0xf7, 0x9a, 0x45, 0xe9, 0x92, 0xe3, 0x51, 0x5c, 0x22, 0x7b, 0xa8, 0xd4, 0xc1, 0x78, + 0xee, 0x90, 0xd4, 0xc9, 0xa5, 0xb0, 0x48, 0x0b, 0x44, 0x4d, 0xa2, 0xa0, 0xf3, 0xf7, 0x61, 0x45, + 0x2d, 0x8f, 0x64, 0x0e, 0xf2, 0x32, 0x30, 0xb9, 0x38, 0xf4, 0x2c, 0xdf, 0x85, 0xdb, 0x53, 0x6d, + 0x9a, 0xca, 0x4a, 0x11, 0xaf, 0x37, 0x13, 0xad, 0xd3, 0x4b, 0x58, 0xff, 0x11, 0x54, 0x13, 0x8c, + 0xf2, 0x67, 0x37, 0xe5, 0xd3, 0x76, 0x1e, 0x1a, 0x51, 0xdd, 0xce, 0xb3, 0xfe, 0xbf, 0x72, 0xc0, + 0x66, 0x79, 0xf5, 0xcf, 0xb3, 0x09, 0xb3, 0x84, 0x99, 0x4b, 0x21, 0xcc, 0xff, 0x67, 0xf2, 0xc3, + 0xbb, 0xb0, 0x28, 0xcf, 0x64, 0x69, 0x1e, 0x55, 0x5a, 0x9c, 0xf5, 0x28, 0x41, 0xb5, 0xe2, 0xc3, + 0xe9, 0xc8, 0x8e, 0x62, 0xe2, 0x10, 0x89, 0x26, 0x40, 0x4d, 0x05, 0x78, 0x1c, 0xc1, 0x9c, 0xed, + 0xf6, 0xcf, 0x3c, 0x5f, 0xf2, 0xc1, 0x5f, 0xf8, 0xca, 0xdb, 0xe7, 0x46, 0x13, 0xf3, 0xa3, 0xd4, + 0x66, 0xca, 0xc2, 0x8c, 0xf7, 0xa1, 0xac, 0x81, 0x59, 0x09, 0x0a, 0x7b, 0xed, 0xfd, 0xcd, 0x83, + 0xfa, 0x0d, 0x56, 0x85, 0x92, 0xd9, 0xda, 0x3a, 0xf8, 0xb4, 0x65, 0xb6, 0xb6, 0xeb, 0x19, 0x56, + 0x84, 0xfc, 0xde, 0x41, 0xb7, 0x57, 0xcf, 0x1a, 0xeb, 0xd0, 0x90, 0x25, 0xce, 0x3a, 0x35, 0x7e, + 0x3b, 0x1f, 0x99, 0x0b, 0x31, 0x51, 0xaa, 0xe8, 0xdf, 0x80, 0x8a, 0x2e, 0xde, 0x48, 0x8a, 0x98, + 0x72, 0xea, 0x0b, 0xe5, 0xdc, 0xd3, 0x78, 0xf5, 0x16, 0x90, 0x4b, 0x77, 0x10, 0x65, 0xcb, 0x26, + 0xe4, 0xd6, 0x14, 0xf7, 0x21, 0x2a, 0x3f, 0x09, 0x32, 0xfc, 0xff, 0xa0, 0x96, 0x34, 0xe0, 0x4b, + 0x8e, 0x94, 0xa6, 0x70, 0x8a, 0xdc, 0x09, 0x8b, 0x3e, 0xfb, 0x2e, 0xd4, 0xa7, 0x1d, 0x00, 0x52, + 0x78, 0xbe, 0x26, 0xff, 0x82, 0x93, 0xf4, 0x09, 0xb0, 0x5d, 0x58, 0x4e, 0x13, 0xf0, 0x90, 0x3e, + 0xae, 0x37, 0x52, 0xb0, 0x59, 0x21, 0x8e, 0x7d, 0x4b, 0x3a, 0x82, 0x0a, 0x38, 0xfd, 0x6f, 0x25, + 0xeb, 0xd7, 0x06, 0x7b, 0x83, 0xfe, 0x69, 0x2e, 0xa1, 0x73, 0x80, 0x18, 0xc6, 0xea, 0x50, 0x39, + 0x38, 0x6c, 0x75, 0xac, 0xad, 0xdd, 0x66, 0xa7, 0xd3, 0xda, 0xab, 0xdf, 0x60, 0x0c, 0x6a, 0xe8, + 0xcc, 0xde, 0x8e, 0x60, 0x19, 0x01, 0x93, 0x0e, 0x39, 0x05, 0xcb, 0xb2, 0x65, 0xa8, 0xb7, 0x3b, + 0x53, 0xd0, 0x1c, 0x6b, 0xc0, 0xf2, 0x61, 0x8b, 0xfc, 0xdf, 0x89, 0x72, 0xf3, 0x42, 0x69, 0x90, + 0xdd, 0x15, 0x4a, 0x03, 0x9d, 0x2d, 0x94, 0xeb, 0x40, 0xc9, 0xd2, 0xbf, 0x93, 0x81, 0x95, 0xa9, + 0x84, 0xf8, 0xbc, 0x07, 0x49, 0xd2, 0x49, 0x19, 0xba, 0x82, 0x40, 0xb5, 0x9a, 0xde, 0x85, 0xc5, + 0xc8, 0xf0, 0x34, 0xb5, 0x2b, 0xd5, 0xa3, 0x04, 0x85, 0xfc, 0x10, 0x96, 0x34, 0xfb, 0xd5, 0x14, + 0xaf, 0x60, 0x5a, 0x92, 0xcc, 0x60, 0xac, 0x45, 0x71, 0xf5, 0x53, 0xad, 0x1e, 0xd0, 0x81, 0x45, + 0x3d, 0x21, 0xf6, 0x93, 0x25, 0xdb, 0xab, 0x3e, 0xd9, 0xa3, 0x29, 0x42, 0x48, 0xb6, 0x56, 0x9f, + 0x70, 0x55, 0xfd, 0x1f, 0xcc, 0x01, 0xfb, 0x64, 0xc2, 0xfd, 0x2b, 0x3c, 0xcf, 0x11, 0xbc, 0x2c, + 0xc0, 0x51, 0x59, 0x5a, 0xb2, 0xaf, 0x74, 0x66, 0x2b, 0xed, 0xcc, 0x54, 0xfe, 0xe5, 0x67, 0xa6, + 0x0a, 0x2f, 0x3b, 0x33, 0xf5, 0x26, 0x54, 0x9d, 0x53, 0xd7, 0x13, 0xac, 0x50, 0x48, 0xc2, 0x41, + 0x63, 0xee, 0x6e, 0xee, 0x7e, 0xc5, 0xac, 0x48, 0xa0, 0x90, 0x83, 0x03, 0xf6, 0x71, 0x8c, 0xc4, + 0x07, 0xa7, 0x78, 0x42, 0x50, 0x67, 0x82, 0xad, 0xc1, 0x29, 0x97, 0x86, 0x25, 0xd4, 0x34, 0x54, + 0x66, 0x01, 0x0f, 0xd8, 0x5b, 0x50, 0x0b, 0xbc, 0x89, 0x50, 0x2c, 0xd4, 0x30, 0x90, 0xa3, 0xac, + 0x42, 0xd0, 0x43, 0xe5, 0x36, 0x5d, 0x9a, 0x04, 0xdc, 0x1a, 0x39, 0x41, 0x20, 0xc4, 0xb3, 0xbe, + 0xe7, 0x86, 0xbe, 0x37, 0x94, 0xbe, 0xaf, 0xc5, 0x49, 0xc0, 0xf7, 0x29, 0x65, 0x8b, 0x12, 0xd8, + 0x37, 0xe3, 0x26, 0x8d, 0x6d, 0xc7, 0x0f, 0x1a, 0x80, 0x4d, 0x52, 0x3d, 0x45, 0xf9, 0xdd, 0x76, + 0xfc, 0xa8, 0x2d, 0xe2, 0x23, 0x98, 0x3a, 0xcb, 0x55, 0x9e, 0x3e, 0xcb, 0xf5, 0x83, 0xf4, 0xb3, + 0x5c, 0x55, 0x2c, 0xfa, 0x91, 0x2c, 0x7a, 0x76, 0x8a, 0xbf, 0xd2, 0x91, 0xae, 0xd9, 0x23, 0x6a, + 0xb5, 0xaf, 0x72, 0x44, 0x6d, 0x21, 0xed, 0x88, 0xda, 0xfb, 0x50, 0xc6, 0xc3, 0x43, 0xd6, 0x99, + 0x23, 0x64, 0x38, 0xf2, 0xe5, 0xd5, 0xf5, 0xd3, 0x45, 0xbb, 0x8e, 0x1b, 0x9a, 0xe0, 0xab, 0x9f, + 0xc1, 0xec, 0x69, 0xb1, 0xc5, 0x9f, 0xe3, 0x69, 0x31, 0x79, 0xc8, 0x69, 0x03, 0x8a, 0x6a, 0x9e, + 0x18, 0x83, 0xfc, 0x89, 0xef, 0x8d, 0x94, 0x8f, 0x43, 0xfc, 0x66, 0x35, 0xc8, 0x86, 0x9e, 0xcc, + 0x9c, 0x0d, 0x3d, 0xe3, 0x57, 0xa1, 0xac, 0x91, 0x1a, 0x7b, 0x83, 0xec, 0x92, 0x42, 0x37, 0x93, + 0xb2, 0x25, 0x8d, 0x62, 0x49, 0x42, 0xdb, 0x03, 0xc1, 0x6f, 0x06, 0x8e, 0xcf, 0xf1, 0x5c, 0xa7, + 0xe5, 0xf3, 0x73, 0xee, 0x07, 0xca, 0xe7, 0x54, 0x8f, 0x12, 0x4c, 0x82, 0x1b, 0xbf, 0x06, 0x4b, + 0x89, 0xb9, 0x95, 0x2c, 0xe2, 0x2d, 0x98, 0xc3, 0x71, 0x53, 0x41, 0x03, 0xc9, 0x53, 0x5b, 0x32, + 0x0d, 0xcf, 0xb0, 0x92, 0xbb, 0xcc, 0x1a, 0xfb, 0xde, 0x31, 0x56, 0x92, 0x31, 0xcb, 0x12, 0x76, + 0xe8, 0x7b, 0xc7, 0xc6, 0x9f, 0xe5, 0x20, 0xb7, 0xeb, 0x8d, 0xf5, 0x20, 0xb6, 0xcc, 0x4c, 0x10, + 0x9b, 0x54, 0x38, 0xad, 0x48, 0xa1, 0x94, 0x32, 0x3b, 0x3a, 0x8a, 0x94, 0x52, 0x79, 0x1f, 0x6a, + 0x82, 0x4f, 0x84, 0x9e, 0xd0, 0xd8, 0x2f, 0x6c, 0x9f, 0x04, 0xe2, 0x1c, 0x2d, 0x3e, 0x7b, 0x14, + 0xf6, 0xbc, 0x1d, 0x82, 0xb3, 0x65, 0xc8, 0x45, 0xea, 0x0b, 0x26, 0x8b, 0x4f, 0xb6, 0x0a, 0x73, + 0x18, 0xcd, 0x7c, 0x25, 0x9d, 0xde, 0xf2, 0x8b, 0x7d, 0x1d, 0x96, 0x92, 0xe5, 0x12, 0x2b, 0x92, + 0xb2, 0x91, 0x5e, 0x30, 0xf2, 0xa4, 0x9b, 0x20, 0xf8, 0x08, 0xe1, 0xc8, 0xe0, 0x9a, 0x13, 0xce, + 0x31, 0x49, 0x63, 0x7a, 0xc5, 0x04, 0xd3, 0xbb, 0x03, 0xe5, 0x70, 0x78, 0x6e, 0x8d, 0xed, 0xab, + 0xa1, 0x67, 0x0f, 0xe4, 0xfa, 0x86, 0x70, 0x78, 0x7e, 0x48, 0x10, 0xf6, 0x10, 0x60, 0x34, 0x1e, + 0xcb, 0xb5, 0x87, 0xce, 0x8f, 0x98, 0x94, 0xf7, 0x0f, 0x0f, 0x89, 0xe4, 0xcc, 0xd2, 0x68, 0x3c, + 0xa6, 0x9f, 0x6c, 0x1b, 0x6a, 0xa9, 0x67, 0x2f, 0x6f, 0xab, 0xe0, 0x5b, 0x6f, 0xbc, 0x91, 0xb2, + 0x38, 0xab, 0x7d, 0x1d, 0xb6, 0xfe, 0x5d, 0x60, 0x3f, 0xe5, 0x09, 0xc8, 0x1e, 0x94, 0xa2, 0xf6, + 0xe9, 0x07, 0x08, 0x31, 0x9c, 0xbe, 0x9c, 0x38, 0x40, 0xd8, 0x1c, 0x0c, 0x7c, 0xc1, 0x17, 0x69, + 0xc3, 0x8c, 0x58, 0x3e, 0x68, 0x3b, 0x66, 0x93, 0xf8, 0xbe, 0xf1, 0x5f, 0x33, 0x50, 0xa0, 0xd3, + 0x8c, 0x6f, 0xc3, 0x02, 0xe1, 0x47, 0x01, 0x81, 0xd2, 0x55, 0x4e, 0xfb, 0x6e, 0x4f, 0xc6, 0x02, + 0x8a, 0x65, 0xa1, 0x9d, 0xe5, 0xce, 0x46, 0x33, 0xaf, 0x9d, 0xe7, 0xbe, 0x03, 0xa5, 0xa8, 0x6a, + 0x8d, 0x74, 0x8a, 0xaa, 0x66, 0xf6, 0x3a, 0xe4, 0xcf, 0xbc, 0xb1, 0xb2, 0xfc, 0x40, 0x3c, 0x92, + 0x26, 0xc2, 0xe3, 0xb6, 0x88, 0x3a, 0xa8, 0xf1, 0xd2, 0x62, 0x11, 0x55, 0x82, 0x64, 0x30, 0xdb, + 0xc7, 0xb9, 0x94, 0x3e, 0x1e, 0xc1, 0x82, 0xe0, 0x03, 0x5a, 0x4c, 0xcb, 0xf5, 0x9b, 0xe6, 0x3b, + 0x42, 0xc2, 0xeb, 0x0f, 0x27, 0x03, 0xae, 0xdb, 0xde, 0x30, 0x00, 0x4e, 0xc2, 0x95, 0x64, 0x6d, + 0xfc, 0x41, 0x86, 0xf8, 0x8b, 0x28, 0x97, 0xdd, 0x87, 0xbc, 0xd8, 0xdf, 0xa6, 0x2c, 0xf1, 0xd1, + 0xb9, 0x06, 0x81, 0x67, 0x22, 0x06, 0x5e, 0x80, 0x30, 0x19, 0x25, 0x4b, 0xaf, 0x9a, 0x65, 0x77, + 0x32, 0x8a, 0x4c, 0x57, 0x5f, 0x53, 0xdd, 0x9a, 0x32, 0xfb, 0x50, 0xef, 0xa3, 0x65, 0xba, 0xa1, + 0x45, 0xd2, 0xe5, 0x13, 0x3b, 0xa6, 0x92, 0x02, 0x07, 0xa7, 0x5c, 0x8b, 0xa0, 0xfb, 0xa3, 0x2c, + 0x54, 0x13, 0x2d, 0xc2, 0x50, 0x42, 0xb1, 0x01, 0x90, 0x63, 0x49, 0xce, 0x37, 0x08, 0x90, 0x14, + 0xd4, 0xb5, 0x71, 0xca, 0x26, 0xc6, 0x29, 0x0a, 0xce, 0xc9, 0xe9, 0xc1, 0x39, 0x8f, 0xa0, 0x14, + 0x9f, 0xe1, 0x4f, 0x36, 0x49, 0xd4, 0xa7, 0x4e, 0x77, 0xc4, 0x48, 0x71, 0x38, 0x4f, 0x41, 0x0f, + 0xe7, 0xf9, 0x8e, 0x16, 0xfd, 0x31, 0x87, 0xc5, 0x18, 0x69, 0x23, 0xfa, 0x73, 0x89, 0xfd, 0x30, + 0x3e, 0x86, 0xb2, 0xd6, 0x78, 0x3d, 0xca, 0x23, 0x93, 0x88, 0xf2, 0x88, 0xce, 0x61, 0x65, 0xe3, + 0x73, 0x58, 0xc6, 0x5f, 0xcf, 0x42, 0x55, 0xac, 0x2f, 0xc7, 0x3d, 0x3d, 0xf4, 0x86, 0x4e, 0x1f, + 0x1d, 0x4d, 0xd1, 0x0a, 0x93, 0x82, 0x96, 0x5a, 0x67, 0x72, 0x89, 0x91, 0x9c, 0xa5, 0x1f, 0x37, + 0x25, 0x26, 0x1d, 0x1d, 0x37, 0x35, 0xa0, 0x2a, 0x18, 0x23, 0xba, 0x8c, 0xe2, 0xfb, 0x01, 0xcc, + 0xf2, 0x09, 0xe7, 0x9b, 0x76, 0x40, 0x1c, 0xf2, 0xeb, 0xb0, 0x24, 0x70, 0xf0, 0xa4, 0xdd, 0xc8, + 0x19, 0x0e, 0x1d, 0xc2, 0x24, 0x43, 0x53, 0xfd, 0x84, 0x73, 0xd3, 0x0e, 0xf9, 0xbe, 0x48, 0x90, + 0xd7, 0x09, 0x14, 0x07, 0x4e, 0x60, 0x1f, 0xc7, 0x01, 0x9f, 0xd1, 0x37, 0x7a, 0x96, 0xed, 0x4b, + 0xcd, 0xb3, 0x4c, 0x06, 0x88, 0xf2, 0xc8, 0xbe, 0x8c, 0x3c, 0xcb, 0x53, 0x94, 0x34, 0x3f, 0x4d, + 0x49, 0xc6, 0xbf, 0xc9, 0x42, 0x59, 0x23, 0xcb, 0x57, 0xd9, 0x5d, 0x6f, 0xcf, 0x38, 0x06, 0x4b, + 0xba, 0x0f, 0xf0, 0xcd, 0x64, 0x95, 0x18, 0xfb, 0x42, 0x17, 0x17, 0x68, 0x04, 0x7c, 0x0b, 0x4a, + 0x62, 0xd5, 0xbd, 0x8f, 0x26, 0x58, 0x79, 0x71, 0x07, 0x02, 0x0e, 0x27, 0xc7, 0x2a, 0xf1, 0x31, + 0x26, 0x16, 0xe2, 0xc4, 0xc7, 0x22, 0xf1, 0x45, 0x21, 0xd8, 0x1f, 0x42, 0x45, 0x96, 0x8a, 0x73, + 0x8a, 0xdd, 0x8d, 0x57, 0x7d, 0x62, 0xbe, 0xcd, 0x32, 0x55, 0x47, 0x93, 0x2f, 0x33, 0x3e, 0x56, + 0x19, 0x8b, 0x2f, 0xcb, 0xf8, 0x98, 0x3e, 0x8c, 0x9d, 0x28, 0xaa, 0x1d, 0xe3, 0xae, 0x14, 0x1f, + 0x7b, 0x08, 0x4b, 0x8a, 0x5d, 0x4d, 0x5c, 0xdb, 0x75, 0xbd, 0x89, 0xdb, 0xe7, 0xea, 0x80, 0x16, + 0x93, 0x49, 0x47, 0x71, 0x8a, 0x31, 0x88, 0x4e, 0xf0, 0x52, 0xfc, 0xd6, 0x03, 0x28, 0x90, 0x5c, + 0x4e, 0xc2, 0x47, 0x3a, 0xe3, 0x22, 0x14, 0x76, 0x1f, 0x0a, 0x24, 0x9e, 0x67, 0xaf, 0x65, 0x36, + 0x84, 0x60, 0x34, 0x81, 0x89, 0x8c, 0xfb, 0x3c, 0xf4, 0x9d, 0x7e, 0x10, 0x9f, 0xfd, 0x2a, 0x08, + 0xfd, 0x93, 0xea, 0x8a, 0x2d, 0xb7, 0x31, 0x26, 0xea, 0xa8, 0x84, 0x23, 0x36, 0xa6, 0xa5, 0x44, + 0x19, 0x52, 0x5c, 0x1a, 0xc2, 0xea, 0x31, 0x0f, 0x2f, 0x38, 0x77, 0x5d, 0x21, 0x0c, 0xf5, 0xb9, + 0x1b, 0xfa, 0xf6, 0x50, 0x4c, 0x12, 0xf5, 0xe0, 0xc9, 0x4c, 0xa9, 0xb1, 0x0d, 0x64, 0x33, 0xce, + 0xb8, 0x15, 0xe5, 0x23, 0xde, 0xb1, 0x72, 0x9c, 0x96, 0xb6, 0xfe, 0x2b, 0xb0, 0x7e, 0x7d, 0xa6, + 0x94, 0x13, 0x9e, 0xf7, 0x93, 0x5c, 0x25, 0xf2, 0x03, 0x0e, 0x3d, 0x3b, 0xa4, 0xd6, 0xe8, 0x9c, + 0xa5, 0x03, 0x65, 0x2d, 0x25, 0xde, 0xfb, 0x33, 0x28, 0xdc, 0xd1, 0x87, 0xd8, 0x91, 0x5c, 0xcf, + 0x1f, 0xa1, 0xdf, 0x6d, 0x60, 0xc5, 0xa5, 0x67, 0xcc, 0x85, 0x18, 0x8e, 0x47, 0xda, 0x8d, 0x0d, + 0x58, 0x40, 0xc9, 0x5e, 0xdb, 0xe8, 0x5e, 0x24, 0x0c, 0x1a, 0xcb, 0xc0, 0x3a, 0xc4, 0xbb, 0xf4, + 0x78, 0xcf, 0xff, 0x94, 0x83, 0xb2, 0x06, 0x16, 0xbb, 0x11, 0x06, 0x00, 0x5a, 0x03, 0xc7, 0x1e, + 0x71, 0xe5, 0xe4, 0xac, 0x9a, 0x55, 0x84, 0x6e, 0x4b, 0xa0, 0xd8, 0x8b, 0xed, 0xf3, 0x53, 0xcb, + 0x9b, 0x84, 0xd6, 0x80, 0x9f, 0xfa, 0x5c, 0xb5, 0xb2, 0x62, 0x9f, 0x9f, 0x1e, 0x4c, 0xc2, 0x6d, + 0x84, 0x09, 0x2c, 0xc1, 0x4b, 0x34, 0x2c, 0x19, 0xb3, 0x36, 0xb2, 0x2f, 0x63, 0x2c, 0x19, 0x38, + 0x49, 0x94, 0x99, 0x8f, 0x02, 0x27, 0x49, 0x5b, 0x9c, 0xde, 0x40, 0x0b, 0xb3, 0x1b, 0xe8, 0x37, + 0x61, 0x95, 0x36, 0x50, 0xc9, 0x9a, 0xad, 0xa9, 0x95, 0xbc, 0x8c, 0xa9, 0xb2, 0x93, 0x9a, 0xd8, + 0x5b, 0x17, 0x3d, 0x50, 0x6c, 0x29, 0x70, 0x7e, 0x48, 0x8c, 0x2c, 0x63, 0x8a, 0x9e, 0xc9, 0xc2, + 0xbb, 0xce, 0x0f, 0xb9, 0xc0, 0xc4, 0xe8, 0x18, 0x1d, 0x53, 0x1e, 0xb0, 0x18, 0x39, 0xee, 0x34, + 0xa6, 0x7d, 0x99, 0xc4, 0x2c, 0x49, 0x4c, 0xfb, 0x52, 0xc7, 0x7c, 0x02, 0x6b, 0x23, 0x3e, 0x70, + 0xec, 0x64, 0xb1, 0x56, 0x2c, 0xb8, 0x2d, 0x53, 0xb2, 0x96, 0xa7, 0x4b, 0x8a, 0xbb, 0x18, 0x8d, + 0x1f, 0x7a, 0xa3, 0x63, 0x87, 0x64, 0x16, 0x8a, 0xd7, 0xc9, 0x9b, 0x35, 0x77, 0x32, 0xfa, 0x3e, + 0x82, 0x45, 0x96, 0xc0, 0xa8, 0x42, 0xb9, 0x1b, 0x7a, 0x63, 0x35, 0xcd, 0x35, 0xa8, 0xd0, 0xa7, + 0x3c, 0xf5, 0x78, 0x0b, 0x6e, 0x22, 0x4b, 0xe8, 0x79, 0x63, 0x6f, 0xe8, 0x9d, 0x5e, 0x25, 0xec, + 0x78, 0xff, 0x2e, 0x03, 0x4b, 0x89, 0x54, 0xc9, 0x5e, 0xbf, 0x49, 0xfc, 0x2c, 0x3a, 0xba, 0x46, + 0x6b, 0x70, 0x51, 0x5b, 0x83, 0x84, 0x48, 0xcc, 0x4c, 0x1d, 0x67, 0x6b, 0xc6, 0x57, 0x2e, 0xa8, + 0x8c, 0xc4, 0x52, 0x1a, 0xb3, 0x2c, 0x45, 0xe6, 0x57, 0x97, 0x31, 0xa8, 0x22, 0x7e, 0x41, 0x1e, + 0x82, 0x19, 0xc8, 0x2e, 0xe7, 0x92, 0x27, 0x09, 0x74, 0x9b, 0x9f, 0x6a, 0x41, 0x6c, 0x08, 0x0c, + 0x8c, 0x7f, 0x92, 0x01, 0x88, 0x5b, 0x87, 0x67, 0x19, 0x22, 0xb9, 0x85, 0xee, 0x43, 0xd3, 0x64, + 0x94, 0x37, 0xa0, 0x12, 0x45, 0x2c, 0xc7, 0x92, 0x50, 0x59, 0xc1, 0x84, 0x38, 0x74, 0x0f, 0x16, + 0x4e, 0x87, 0xde, 0x31, 0x4a, 0xac, 0x52, 0x6e, 0xa1, 0x78, 0xb5, 0x1a, 0x81, 0x95, 0x34, 0x12, + 0xcb, 0x4d, 0xf9, 0xd4, 0xa0, 0x66, 0x5d, 0x0a, 0x32, 0x7e, 0x2b, 0x1b, 0x85, 0x6e, 0xc6, 0x23, + 0xf1, 0x62, 0xf5, 0xee, 0x27, 0x89, 0xa5, 0x79, 0x91, 0x7b, 0xf1, 0x63, 0xa8, 0xf9, 0xb4, 0x29, + 0xa9, 0x1d, 0x2b, 0xff, 0x82, 0x1d, 0xab, 0xea, 0x27, 0x24, 0x9d, 0x77, 0xa0, 0x6e, 0x0f, 0xce, + 0xb9, 0x1f, 0x3a, 0x68, 0xad, 0x47, 0xf9, 0x58, 0x06, 0x4b, 0x6a, 0x70, 0x14, 0x44, 0xef, 0xc1, + 0x82, 0x3c, 0x89, 0x1b, 0x61, 0xca, 0xbb, 0x7d, 0x62, 0xb0, 0x40, 0x34, 0xfe, 0xb9, 0x8a, 0x15, + 0x4d, 0xce, 0xee, 0x8b, 0x47, 0x45, 0xef, 0x61, 0x76, 0xd6, 0x81, 0x2a, 0x09, 0x49, 0x3a, 0x01, + 0x24, 0x3f, 0x22, 0xa0, 0x74, 0x01, 0x24, 0x87, 0x35, 0xff, 0x2a, 0xc3, 0x6a, 0xfc, 0x87, 0x0c, + 0xcc, 0xef, 0x7a, 0xe3, 0x5d, 0x87, 0xa2, 0xf9, 0x71, 0x99, 0x44, 0x3e, 0xaa, 0x39, 0xf1, 0x89, + 0x81, 0x3f, 0x2f, 0x38, 0x70, 0x96, 0x2a, 0xe6, 0x55, 0x93, 0x62, 0xde, 0x77, 0xe0, 0x16, 0xba, + 0x00, 0x7d, 0x6f, 0xec, 0xf9, 0x62, 0xa9, 0xda, 0x43, 0x12, 0xf7, 0x3c, 0x37, 0x3c, 0x53, 0xbc, + 0xf3, 0xe6, 0x09, 0xe7, 0x87, 0x1a, 0xc6, 0x7e, 0x84, 0x80, 0x47, 0x3a, 0x87, 0xe1, 0xb9, 0x45, + 0x1a, 0xba, 0x94, 0x47, 0x89, 0xa3, 0x2e, 0x88, 0x84, 0x16, 0xc2, 0x51, 0x22, 0x35, 0xbe, 0x05, + 0xa5, 0xc8, 0xd8, 0xc3, 0xde, 0x85, 0xd2, 0x99, 0x37, 0x96, 0x16, 0xa1, 0x4c, 0xe2, 0x50, 0x9e, + 0xec, 0xb5, 0x59, 0x3c, 0xa3, 0x1f, 0x81, 0xf1, 0x67, 0xf3, 0x30, 0xdf, 0x76, 0xcf, 0x3d, 0xa7, + 0x8f, 0xd1, 0xa6, 0x23, 0x3e, 0xf2, 0xd4, 0x75, 0x00, 0xe2, 0x37, 0xc6, 0x66, 0xc5, 0x37, 0xf4, + 0xe4, 0x64, 0x6c, 0x56, 0x74, 0x37, 0xcf, 0x0a, 0xcc, 0xf9, 0xfa, 0x15, 0x3b, 0x05, 0x1f, 0xe3, + 0xdf, 0xa3, 0xfd, 0xb2, 0xa0, 0x5d, 0xa7, 0x20, 0xca, 0xa2, 0xab, 0x5f, 0x70, 0xc8, 0xe8, 0x78, + 0x66, 0x09, 0x21, 0x38, 0x60, 0xaf, 0xc1, 0xbc, 0x3c, 0x03, 0x47, 0x87, 0x96, 0x28, 0x60, 0x5d, + 0x82, 0x90, 0x1a, 0x7c, 0x4e, 0x2e, 0xdc, 0x48, 0x90, 0xcd, 0x99, 0x15, 0x05, 0xdc, 0x16, 0xb4, + 0x76, 0x07, 0xca, 0x84, 0x4f, 0x28, 0x45, 0x19, 0xa4, 0x89, 0x20, 0x44, 0x48, 0xb9, 0xa9, 0xaa, + 0x94, 0x7a, 0x53, 0x15, 0x86, 0x13, 0x47, 0x5c, 0x96, 0xba, 0x08, 0x74, 0x3f, 0x91, 0x06, 0x57, + 0x17, 0xbd, 0x49, 0x9b, 0x0a, 0x9d, 0x56, 0x56, 0x36, 0x95, 0x37, 0xa1, 0x7a, 0x62, 0x0f, 0x87, + 0xc7, 0x76, 0xff, 0x39, 0x99, 0x02, 0x2a, 0x64, 0xfd, 0x54, 0x40, 0xb4, 0x05, 0xdc, 0x81, 0xb2, + 0x36, 0xcb, 0x18, 0x81, 0x99, 0x37, 0x21, 0x9e, 0xdf, 0x69, 0x0b, 0x5f, 0xed, 0x15, 0x2c, 0x7c, + 0x5a, 0x24, 0xea, 0x42, 0x32, 0x12, 0xf5, 0x16, 0x72, 0x53, 0x19, 0x72, 0x58, 0xa7, 0xcb, 0x70, + 0xec, 0xc1, 0x00, 0x43, 0x0e, 0xe9, 0xee, 0x4a, 0x1c, 0x3c, 0x4a, 0x5f, 0x24, 0x5d, 0x82, 0x60, + 0x84, 0x72, 0x9b, 0xcc, 0xd4, 0x63, 0xdb, 0x19, 0xe0, 0xa1, 0x03, 0xb2, 0x1e, 0xcc, 0xdb, 0xa3, + 0xf0, 0xd0, 0x76, 0x06, 0xec, 0x2e, 0x54, 0x54, 0x32, 0xee, 0x8e, 0x4b, 0x34, 0xfe, 0x32, 0x59, + 0xec, 0x89, 0x06, 0x54, 0x23, 0x8c, 0x51, 0x7c, 0xe4, 0xb8, 0x2c, 0x51, 0x90, 0x0e, 0xde, 0xc7, + 0x28, 0x9f, 0x90, 0xe3, 0xc1, 0xe2, 0xda, 0xe3, 0x5b, 0x51, 0xf0, 0x01, 0x52, 0xa9, 0xfa, 0x4f, + 0xce, 0x31, 0xc2, 0x14, 0xc2, 0x1d, 0xf9, 0xe8, 0x56, 0x13, 0xf2, 0xaf, 0x44, 0x45, 0x1f, 0x1d, + 0x21, 0xb0, 0x6f, 0x69, 0xfa, 0x6b, 0x03, 0x91, 0x5f, 0x9b, 0x2a, 0xff, 0xba, 0x43, 0x59, 0xb7, + 0x01, 0x9c, 0x40, 0xec, 0x32, 0x01, 0x77, 0x07, 0x78, 0x46, 0xb8, 0x68, 0x96, 0x9c, 0xe0, 0x19, + 0x01, 0x7e, 0xb6, 0x8a, 0x6d, 0x13, 0x2a, 0x7a, 0x37, 0x59, 0x11, 0xf2, 0x07, 0x87, 0xad, 0x4e, + 0xfd, 0x06, 0x2b, 0xc3, 0x7c, 0xb7, 0xd5, 0xeb, 0xed, 0xa1, 0xa7, 0xaf, 0x02, 0xc5, 0xe8, 0x20, + 0x63, 0x56, 0x7c, 0x35, 0xb7, 0xb6, 0x5a, 0x87, 0xbd, 0xd6, 0x76, 0x3d, 0xf7, 0xbd, 0x7c, 0x31, + 0x5b, 0xcf, 0x19, 0x7f, 0x9e, 0x83, 0xb2, 0x36, 0x0a, 0x2f, 0x66, 0xc6, 0xb7, 0x01, 0x50, 0x93, + 0x8c, 0x23, 0x52, 0xf3, 0x66, 0x49, 0x40, 0x68, 0xf2, 0x75, 0x1f, 0x45, 0x8e, 0x6e, 0x59, 0x52, + 0x3e, 0x8a, 0x37, 0xa1, 0x4a, 0x17, 0x16, 0xe9, 0xfe, 0xda, 0x82, 0x59, 0x21, 0xa0, 0x64, 0xd5, + 0x78, 0xc2, 0x19, 0x91, 0xf0, 0x78, 0x9d, 0xbc, 0xbe, 0x84, 0x40, 0x78, 0xc0, 0x0e, 0x4f, 0x47, + 0x06, 0xde, 0xf0, 0x9c, 0x13, 0x06, 0x49, 0x84, 0x65, 0x09, 0xeb, 0xc9, 0xb3, 0xda, 0x92, 0x1f, + 0x6a, 0x47, 0x6c, 0x0b, 0x66, 0x85, 0x80, 0xb2, 0xa2, 0xaf, 0x2b, 0x02, 0xa2, 0xe8, 0x95, 0xb5, + 0x59, 0x6a, 0x48, 0x10, 0xcf, 0xde, 0x8c, 0x19, 0xb1, 0x84, 0x84, 0xf1, 0xb5, 0xd9, 0x7c, 0x2f, + 0x37, 0x27, 0xb2, 0x77, 0x81, 0x8d, 0xc6, 0x63, 0x2b, 0xc5, 0xc0, 0x97, 0x37, 0x17, 0x46, 0xe3, + 0x71, 0x4f, 0xb3, 0x7f, 0xfd, 0x0c, 0x6c, 0x8f, 0x5f, 0x00, 0x6b, 0x8a, 0x05, 0x8c, 0x4d, 0x8c, + 0x54, 0xb1, 0x98, 0x2d, 0x67, 0x74, 0xb6, 0x9c, 0xc2, 0xfd, 0xb2, 0xa9, 0xdc, 0xef, 0x45, 0x7c, + 0xc2, 0xd8, 0x81, 0xf2, 0xa1, 0x76, 0x1d, 0xda, 0x5d, 0xb1, 0x43, 0xa8, 0x8b, 0xd0, 0x68, 0xef, + 0x20, 0x9b, 0xa2, 0x2f, 0xef, 0x3f, 0xd3, 0x5a, 0x93, 0xd5, 0x5a, 0x63, 0xfc, 0xa3, 0x0c, 0x5d, + 0x35, 0x13, 0x35, 0x3e, 0xbe, 0x81, 0x4d, 0xb9, 0xdf, 0xe2, 0x93, 0xf0, 0x65, 0xe5, 0x76, 0x93, + 0x87, 0xd8, 0xb1, 0x69, 0x96, 0x77, 0x72, 0x12, 0x70, 0x15, 0xe3, 0x51, 0x46, 0xd8, 0x01, 0x82, + 0x94, 0xf0, 0x2d, 0x24, 0x7c, 0x87, 0xca, 0x0f, 0x64, 0x60, 0x87, 0x10, 0xbe, 0xf7, 0xed, 0x4b, + 0x59, 0x6b, 0x20, 0x44, 0x10, 0xe9, 0x1f, 0x50, 0x87, 0x65, 0xa3, 0x6f, 0xe3, 0x1f, 0xc8, 0xc3, + 0xfa, 0xd3, 0xe3, 0xfb, 0x00, 0x8a, 0x51, 0xa9, 0xc9, 0x1d, 0x56, 0x61, 0x46, 0xe9, 0x62, 0x1f, + 0x47, 0x63, 0x48, 0xa2, 0xc5, 0xb4, 0xb8, 0xd0, 0xc7, 0xd3, 0xd6, 0x5a, 0xfd, 0x1e, 0xb0, 0x13, + 0xc7, 0x9f, 0x46, 0xa6, 0xc5, 0x56, 0xc7, 0x14, 0x0d, 0xdb, 0x38, 0x82, 0x25, 0xc5, 0x25, 0x34, + 0x8d, 0x20, 0x39, 0x79, 0x99, 0x97, 0x30, 0xf9, 0xec, 0x0c, 0x93, 0x37, 0x7e, 0xb3, 0x00, 0xf3, + 0xea, 0x6a, 0xc1, 0xb4, 0xeb, 0xf0, 0x4a, 0xc9, 0xeb, 0xf0, 0x1a, 0x89, 0xab, 0x93, 0x70, 0xea, + 0xe5, 0x7e, 0x7f, 0x6f, 0x7a, 0xcb, 0xd6, 0x7c, 0x15, 0x89, 0x6d, 0x5b, 0xfa, 0x2a, 0x0a, 0x49, + 0x5f, 0x45, 0xda, 0x15, 0x81, 0x24, 0x7a, 0xce, 0x5c, 0x11, 0x78, 0x0b, 0x48, 0x8e, 0xd0, 0x82, + 0xdb, 0x8a, 0x08, 0x10, 0x7b, 0x4e, 0x52, 0xec, 0x28, 0x4e, 0x8b, 0x1d, 0xaf, 0x2c, 0x12, 0x7c, + 0x13, 0xe6, 0xe8, 0x7a, 0x0d, 0x79, 0xf8, 0x57, 0x6d, 0x1c, 0x72, 0xac, 0xd4, 0x7f, 0x3a, 0xf1, + 0x60, 0x4a, 0x5c, 0xfd, 0xbe, 0xad, 0x72, 0xe2, 0xbe, 0x2d, 0xdd, 0x87, 0x52, 0x49, 0xfa, 0x50, + 0xee, 0x43, 0x3d, 0x1a, 0x38, 0xb4, 0x48, 0xba, 0x81, 0x3c, 0x39, 0x58, 0x53, 0x70, 0xc1, 0x0d, + 0x3b, 0x41, 0xbc, 0xf1, 0xd5, 0x12, 0x1b, 0x9f, 0xe0, 0x55, 0xcd, 0x30, 0xe4, 0xa3, 0x71, 0xa8, + 0x36, 0x3e, 0xed, 0x56, 0x46, 0x9a, 0xf9, 0x05, 0x9c, 0x79, 0x35, 0xbd, 0x44, 0x1d, 0x9b, 0x50, + 0x3b, 0xb1, 0x9d, 0xe1, 0xc4, 0xe7, 0x96, 0xcf, 0xed, 0xc0, 0x73, 0x71, 0xf1, 0xc7, 0x7b, 0xb0, + 0xec, 0xe2, 0x0e, 0xe1, 0x98, 0x88, 0x62, 0x56, 0x4f, 0xf4, 0x4f, 0x3c, 0xc4, 0xa4, 0x8f, 0x84, + 0xd8, 0xb2, 0xe4, 0x19, 0x62, 0x8a, 0x55, 0x69, 0x77, 0xac, 0x9d, 0xbd, 0xf6, 0xd3, 0xdd, 0x5e, + 0x3d, 0x23, 0x3e, 0xbb, 0x47, 0x5b, 0x5b, 0xad, 0xd6, 0x36, 0x6e, 0x61, 0x00, 0x73, 0x3b, 0xcd, + 0xf6, 0x9e, 0xdc, 0xc0, 0xf2, 0xf5, 0x82, 0xf1, 0x3b, 0x59, 0x28, 0x6b, 0xbd, 0x61, 0x4f, 0xa2, + 0x49, 0xa0, 0x1b, 0xa0, 0x6e, 0xcf, 0xf6, 0x78, 0x43, 0x71, 0x78, 0x6d, 0x16, 0xa2, 0xfb, 0x17, + 0xb3, 0xd7, 0xde, 0xbf, 0xc8, 0xde, 0x86, 0x05, 0x9b, 0x4a, 0x88, 0x06, 0x5d, 0x1a, 0xf7, 0x25, + 0x58, 0x8e, 0x39, 0x46, 0x90, 0xc6, 0xdb, 0x94, 0xc0, 0xcb, 0xab, 0xa0, 0xcd, 0x68, 0xa7, 0xc2, + 0xb9, 0x99, 0x97, 0x23, 0x23, 0x9d, 0xf1, 0xd1, 0x86, 0x2f, 0xc7, 0x4b, 0x25, 0x1b, 0x1f, 0x00, + 0xc4, 0x6d, 0x4e, 0x0e, 0xd1, 0x8d, 0xe4, 0x10, 0x65, 0xb4, 0x21, 0xca, 0x1a, 0xff, 0x4c, 0xb2, + 0x27, 0x39, 0xde, 0x91, 0x39, 0xef, 0xeb, 0xa0, 0x0c, 0x8c, 0x16, 0x06, 0x72, 0x8f, 0x87, 0x3c, + 0x54, 0x17, 0x16, 0x2c, 0xca, 0x94, 0x76, 0x94, 0x30, 0xc3, 0x4e, 0xb3, 0xb3, 0xec, 0xf4, 0x0d, + 0xa8, 0x08, 0x56, 0x2a, 0x89, 0x25, 0x90, 0x2c, 0xa9, 0x3c, 0xb2, 0x2f, 0x55, 0xdd, 0x09, 0x3e, + 0x9a, 0x9f, 0xe2, 0xa3, 0xbf, 0x9b, 0xa1, 0xfb, 0x43, 0xe2, 0x86, 0xc6, 0x8c, 0x34, 0x2a, 0x33, + 0xc9, 0x48, 0x25, 0xaa, 0x19, 0xa5, 0x5f, 0xc3, 0x1c, 0xb3, 0xe9, 0xcc, 0x31, 0x9d, 0xed, 0xe6, + 0x52, 0xd9, 0xae, 0xb1, 0x0e, 0x8d, 0x6d, 0x2e, 0x86, 0xa2, 0x39, 0x1c, 0x4e, 0x8d, 0xa5, 0x71, + 0x0b, 0x6e, 0xa6, 0xa4, 0x49, 0xcb, 0xcc, 0x27, 0xb0, 0xd2, 0xa4, 0x8b, 0x15, 0x7e, 0x56, 0x07, + 0x24, 0x8d, 0x06, 0xac, 0x4e, 0x17, 0x29, 0x2b, 0xdb, 0x81, 0xc5, 0x6d, 0x7e, 0x3c, 0x39, 0xdd, + 0xe3, 0xe7, 0x71, 0x45, 0x0c, 0xf2, 0xc1, 0x99, 0x77, 0x21, 0x27, 0x17, 0x7f, 0x63, 0xe8, 0xa5, + 0xc0, 0xb1, 0x82, 0x31, 0xef, 0x2b, 0xeb, 0x3c, 0x42, 0xba, 0x63, 0xde, 0x37, 0x9e, 0x00, 0xd3, + 0xcb, 0x91, 0x33, 0x21, 0x54, 0xa7, 0xc9, 0xb1, 0x15, 0x5c, 0x05, 0x21, 0x1f, 0xa9, 0x83, 0x81, + 0x10, 0x4c, 0x8e, 0xbb, 0x04, 0x31, 0xee, 0x41, 0xe5, 0xd0, 0xbe, 0x32, 0xf9, 0x17, 0xf2, 0xfc, + 0xdd, 0x1a, 0xcc, 0x8f, 0xed, 0x2b, 0xc1, 0x33, 0x23, 0x47, 0x1d, 0x26, 0x1b, 0x7f, 0x98, 0x87, + 0x39, 0xc2, 0x64, 0x77, 0xe9, 0x06, 0x63, 0xc7, 0x45, 0x9e, 0xa5, 0x76, 0x0f, 0x0d, 0x34, 0xb3, + 0xc1, 0x64, 0x67, 0x37, 0x18, 0x69, 0x55, 0x54, 0x37, 0x37, 0x29, 0x97, 0x8a, 0x3b, 0x19, 0xa9, + 0xeb, 0x9a, 0x92, 0xb7, 0x0b, 0xe4, 0xe3, 0x3b, 0xae, 0xe9, 0x64, 0x75, 0xd2, 0xe9, 0x1d, 0x2b, + 0x68, 0xd4, 0x3a, 0xb5, 0x6f, 0xca, 0xbd, 0x45, 0x07, 0xa5, 0x6a, 0x81, 0xf3, 0xea, 0x50, 0x69, + 0x52, 0x0b, 0x9c, 0xd1, 0xf6, 0x8a, 0x2f, 0xd7, 0xf6, 0xc8, 0xdc, 0xf8, 0x02, 0x6d, 0x0f, 0x5e, + 0x41, 0xdb, 0x7b, 0x05, 0x87, 0xf3, 0x4d, 0x28, 0xa2, 0x30, 0xa4, 0x6d, 0x35, 0x42, 0x08, 0x12, + 0x5b, 0xcd, 0x87, 0x9a, 0x3e, 0x44, 0xd1, 0x2e, 0x1a, 0xaf, 0x37, 0xf9, 0x17, 0x3f, 0x1f, 0x47, + 0xde, 0xe7, 0x30, 0x2f, 0xa1, 0x82, 0xa0, 0x5d, 0x7b, 0xa4, 0x2e, 0xbf, 0xc3, 0xdf, 0x62, 0xd8, + 0xf0, 0xc6, 0xae, 0x2f, 0x26, 0x8e, 0xcf, 0x07, 0xea, 0x56, 0x23, 0x07, 0xd7, 0xa8, 0x80, 0x88, + 0x0e, 0x0a, 0xdd, 0xcc, 0xf5, 0x2e, 0x5c, 0xc9, 0x7b, 0xe6, 0x9d, 0xe0, 0x99, 0xf8, 0x34, 0x18, + 0xd4, 0xf1, 0xfa, 0xcb, 0xb1, 0xe7, 0xab, 0x9d, 0xdc, 0xf8, 0x71, 0x06, 0xea, 0x72, 0x75, 0x45, + 0x69, 0xba, 0x6a, 0x54, 0xb8, 0x2e, 0x38, 0xe3, 0xc5, 0x77, 0x14, 0x19, 0x50, 0x45, 0x8b, 0x50, + 0xb4, 0xad, 0x93, 0x45, 0xab, 0x2c, 0x80, 0x3b, 0x72, 0x6b, 0x7f, 0x1d, 0xca, 0x2a, 0x30, 0x7c, + 0xe4, 0x0c, 0xd5, 0x75, 0xf6, 0x14, 0x19, 0xbe, 0xef, 0x0c, 0x95, 0x54, 0xe0, 0xdb, 0xf2, 0x90, + 0x73, 0x06, 0xa5, 0x02, 0xd3, 0x0e, 0xb9, 0xf1, 0xaf, 0x32, 0xb0, 0xa8, 0x75, 0x45, 0xae, 0xdb, + 0x8f, 0xa0, 0x12, 0xdd, 0x3b, 0xcb, 0x23, 0x71, 0x74, 0x2d, 0xc9, 0x68, 0xe2, 0x6c, 0xe5, 0x7e, + 0x04, 0x09, 0x44, 0x63, 0x06, 0xf6, 0x15, 0x45, 0x2f, 0x4f, 0x46, 0x4a, 0xe3, 0x1b, 0xd8, 0x57, + 0x3b, 0x9c, 0x77, 0x27, 0x23, 0xa1, 0xcf, 0x5f, 0x70, 0xfe, 0x3c, 0x42, 0x20, 0xf6, 0x09, 0x02, + 0x26, 0x31, 0x0c, 0xa8, 0x8e, 0x3c, 0x37, 0x3c, 0x8b, 0x50, 0xa4, 0x28, 0x8e, 0x40, 0xc2, 0x31, + 0xfe, 0x34, 0x0b, 0x4b, 0x64, 0x77, 0x94, 0xf6, 0x5e, 0xc9, 0xba, 0x1a, 0x30, 0x47, 0x26, 0x58, + 0x62, 0x5e, 0xbb, 0x37, 0x4c, 0xf9, 0xcd, 0xbe, 0xf9, 0x8a, 0xb6, 0x52, 0x75, 0x8e, 0xfa, 0x9a, + 0xe1, 0xcf, 0xcd, 0x0e, 0xff, 0xf5, 0xc3, 0x9b, 0xe6, 0xfd, 0x2d, 0xa4, 0x79, 0x7f, 0x5f, 0xc5, + 0xe7, 0x3a, 0x73, 0xe2, 0x77, 0x5e, 0xe2, 0x68, 0x27, 0x7e, 0x9f, 0xc0, 0x5a, 0x02, 0x07, 0xb9, + 0xb5, 0x73, 0xe2, 0x70, 0x75, 0x2b, 0xcd, 0xb2, 0x86, 0xdd, 0x55, 0x69, 0x9b, 0xf3, 0x50, 0x08, + 0xfa, 0xde, 0x98, 0x1b, 0xab, 0xb0, 0x9c, 0x1c, 0x55, 0xb9, 0x4d, 0xfc, 0x5e, 0x06, 0x1a, 0x32, + 0x56, 0xc7, 0x71, 0x4f, 0x77, 0x9d, 0x20, 0xf4, 0xfc, 0xe8, 0x7e, 0xd6, 0xdb, 0x00, 0x74, 0xe1, + 0x3e, 0x2a, 0xd8, 0xf2, 0x1e, 0x16, 0x84, 0xa0, 0x7a, 0x7d, 0x13, 0x8a, 0xdc, 0x1d, 0x50, 0x22, + 0x51, 0xc3, 0x3c, 0x77, 0x07, 0x4a, 0x39, 0x9f, 0xd9, 0x4a, 0xab, 0x49, 0x21, 0x41, 0xde, 0x7a, + 0x20, 0x46, 0x87, 0x9f, 0xe3, 0x96, 0x9e, 0x8f, 0x6e, 0x3d, 0xd8, 0xb7, 0x2f, 0x31, 0xf2, 0x35, + 0x30, 0xfe, 0x6e, 0x16, 0x16, 0xe2, 0xf6, 0xd1, 0x9d, 0x2a, 0x2f, 0xbe, 0x1d, 0xe6, 0xae, 0x24, + 0x07, 0x47, 0x28, 0x35, 0x9a, 0x35, 0xb6, 0x48, 0x8b, 0xb3, 0xed, 0x32, 0x03, 0xca, 0x0a, 0xc3, + 0x9b, 0x84, 0xda, 0x35, 0x89, 0x25, 0x42, 0x39, 0x98, 0x84, 0x42, 0x0b, 0x15, 0xea, 0xb8, 0xe3, + 0x4a, 0x3d, 0xb0, 0x60, 0x8f, 0xc2, 0x36, 0xbe, 0xdf, 0x20, 0xc0, 0x22, 0x1b, 0x4d, 0xa4, 0xc0, + 0x12, 0xf8, 0x75, 0x52, 0x4a, 0x68, 0xe6, 0x50, 0x21, 0xd1, 0x25, 0x76, 0xba, 0x88, 0x3a, 0x92, + 0xd8, 0x5f, 0x87, 0x32, 0x15, 0x1e, 0x1f, 0xf0, 0xce, 0x9b, 0x25, 0xac, 0x01, 0xd3, 0xa5, 0x65, + 0xcc, 0x9b, 0x24, 0xec, 0x01, 0x40, 0x55, 0x61, 0x28, 0xcc, 0xdf, 0xcc, 0xc0, 0xcd, 0x94, 0x69, + 0x93, 0xab, 0x7c, 0x0b, 0x16, 0x4f, 0xa2, 0x44, 0x35, 0xba, 0xb4, 0xd4, 0x57, 0x15, 0x5b, 0x4d, + 0x8e, 0xa9, 0x59, 0x3f, 0x49, 0x02, 0x62, 0x4d, 0x94, 0x66, 0x30, 0x71, 0x7d, 0x00, 0x8a, 0x44, + 0x34, 0x8d, 0xa4, 0x04, 0x1e, 0xc2, 0x7a, 0xeb, 0x52, 0x70, 0x8c, 0x2d, 0xfd, 0x01, 0x12, 0x45, + 0x46, 0x49, 0xab, 0x7b, 0xe6, 0x95, 0xac, 0xee, 0x03, 0x3a, 0x6f, 0x1c, 0x95, 0xf5, 0x93, 0x14, + 0x82, 0x1b, 0xa8, 0xc8, 0x43, 0x0f, 0xa8, 0xa8, 0x7b, 0x04, 0xfa, 0xd1, 0xc3, 0x29, 0x46, 0x00, + 0x0b, 0xfb, 0x93, 0x61, 0xe8, 0xc4, 0x6f, 0xa9, 0xb0, 0x6f, 0xca, 0x3c, 0x58, 0x8f, 0x1a, 0xb5, + 0xd4, 0x8a, 0x20, 0xaa, 0x08, 0x07, 0x6b, 0x24, 0x0a, 0xb2, 0x66, 0xeb, 0x5b, 0x18, 0x25, 0x6b, + 0x30, 0x6e, 0xc2, 0x5a, 0xfc, 0x45, 0xc3, 0xa6, 0xb6, 0x9a, 0x7f, 0x98, 0xa1, 0x30, 0xfb, 0xe4, + 0xbb, 0x2e, 0xac, 0x05, 0x4b, 0x81, 0xe3, 0x9e, 0x0e, 0xb9, 0x5e, 0x7c, 0x20, 0x07, 0x61, 0x25, + 0xd9, 0x36, 0xf9, 0xf6, 0x8b, 0xb9, 0x48, 0x39, 0xe2, 0xd2, 0x02, 0xb6, 0x79, 0x5d, 0x23, 0x63, + 0xb2, 0x98, 0x1a, 0x8d, 0xd9, 0xc6, 0xb7, 0xa1, 0x96, 0xac, 0x88, 0x7d, 0x28, 0x8f, 0xe9, 0xc7, + 0xad, 0xca, 0x4d, 0x9d, 0x61, 0x8e, 0x09, 0xa2, 0x1c, 0x8f, 0x7d, 0x60, 0xfc, 0xed, 0x0c, 0x34, + 0x4c, 0x2e, 0x28, 0x57, 0x6b, 0xa5, 0xa2, 0x99, 0x8f, 0x66, 0x4a, 0xbd, 0xbe, 0xaf, 0xea, 0xf4, + 0xbf, 0x6a, 0xd1, 0x7b, 0xd7, 0x4e, 0xc6, 0xee, 0x8d, 0x99, 0x1e, 0x6d, 0x16, 0x61, 0x8e, 0x50, + 0x8c, 0x35, 0x58, 0x91, 0xed, 0x51, 0x6d, 0x89, 0x5d, 0xaa, 0x89, 0x1a, 0x13, 0x2e, 0xd5, 0x75, + 0x68, 0xd0, 0x79, 0x5c, 0xbd, 0x13, 0x32, 0xe3, 0x36, 0xb0, 0x7d, 0xbb, 0x6f, 0xfb, 0x9e, 0xe7, + 0x1e, 0x72, 0x5f, 0x06, 0x2d, 0xa3, 0x84, 0x89, 0x1e, 0x47, 0x25, 0x0a, 0xd3, 0x97, 0xba, 0x1c, + 0xd6, 0x73, 0x55, 0x8c, 0x16, 0x7d, 0x19, 0x26, 0x2c, 0x6d, 0xda, 0xcf, 0xb9, 0x2a, 0x49, 0x0d, + 0xd1, 0xc7, 0x50, 0x1e, 0x47, 0x85, 0xaa, 0x71, 0x57, 0xd7, 0x88, 0xcc, 0x56, 0x6b, 0xea, 0xd8, + 0xc6, 0x63, 0x58, 0x4e, 0x96, 0x29, 0x59, 0xc7, 0x3a, 0x14, 0x47, 0x12, 0x26, 0x5b, 0x17, 0x7d, + 0x1b, 0xbf, 0x5d, 0x84, 0x79, 0xa9, 0x8d, 0xb2, 0x0d, 0xc8, 0xf7, 0x55, 0x9c, 0x5c, 0x7c, 0x7d, + 0x95, 0x4c, 0x55, 0xff, 0xb7, 0x30, 0x5a, 0x4e, 0xe0, 0xb1, 0x8f, 0xa1, 0x96, 0x74, 0x15, 0x4f, + 0x9d, 0xf6, 0x4f, 0xfa, 0x78, 0xab, 0xfd, 0x29, 0xa7, 0x60, 0x29, 0xde, 0x1c, 0x49, 0x66, 0x28, + 0x9e, 0x69, 0xbb, 0xa7, 0xe7, 0x0a, 0x79, 0x3b, 0x38, 0xb3, 0xad, 0xc7, 0x4f, 0x3e, 0x90, 0xc7, + 0xfd, 0xcb, 0x08, 0xec, 0x9e, 0xd9, 0x8f, 0x9f, 0x7c, 0x30, 0x2d, 0x49, 0xcb, 0xc3, 0xfe, 0x9a, + 0x24, 0xbd, 0x0c, 0x05, 0xba, 0x05, 0x95, 0x02, 0x9e, 0xe8, 0x83, 0x3d, 0x82, 0x65, 0x65, 0xe0, + 0x90, 0xa1, 0xe9, 0xc4, 0x05, 0x8b, 0x74, 0x1a, 0x50, 0xa6, 0x75, 0x31, 0x89, 0x4c, 0x22, 0xab, + 0x30, 0x77, 0x16, 0x5f, 0x69, 0x5b, 0x35, 0xe5, 0x97, 0xf1, 0xa7, 0x05, 0x28, 0x6b, 0x83, 0xc2, + 0x2a, 0x50, 0x34, 0x5b, 0xdd, 0x96, 0xf9, 0x69, 0x6b, 0xbb, 0x7e, 0x83, 0xdd, 0x87, 0xb7, 0xda, + 0x9d, 0xad, 0x03, 0xd3, 0x6c, 0x6d, 0xf5, 0xac, 0x03, 0xd3, 0x52, 0x97, 0xa8, 0x1d, 0x36, 0x3f, + 0xdf, 0x6f, 0x75, 0x7a, 0xd6, 0x76, 0xab, 0xd7, 0x6c, 0xef, 0x75, 0xeb, 0x19, 0xf6, 0x1a, 0x34, + 0x62, 0x4c, 0x95, 0xdc, 0xdc, 0x3f, 0x38, 0xea, 0xf4, 0xea, 0x59, 0x76, 0x07, 0x6e, 0xed, 0xb4, + 0x3b, 0xcd, 0x3d, 0x2b, 0xc6, 0xd9, 0xda, 0xeb, 0x7d, 0x6a, 0xb5, 0x7e, 0xe9, 0xb0, 0x6d, 0x7e, + 0x5e, 0xcf, 0xa5, 0x21, 0xec, 0xf6, 0xf6, 0xb6, 0x54, 0x09, 0x79, 0x76, 0x13, 0x56, 0x08, 0x81, + 0xb2, 0x58, 0xbd, 0x83, 0x03, 0xab, 0x7b, 0x70, 0xd0, 0xa9, 0x17, 0xd8, 0x22, 0x54, 0xdb, 0x9d, + 0x4f, 0x9b, 0x7b, 0xed, 0x6d, 0xcb, 0x6c, 0x35, 0xf7, 0xf6, 0xeb, 0x73, 0x6c, 0x09, 0x16, 0xa6, + 0xf1, 0xe6, 0x45, 0x11, 0x0a, 0xef, 0xa0, 0xd3, 0x3e, 0xe8, 0x58, 0x9f, 0xb6, 0xcc, 0x6e, 0xfb, + 0xa0, 0x53, 0x2f, 0xb2, 0x55, 0x60, 0xc9, 0xa4, 0xdd, 0xfd, 0xe6, 0x56, 0xbd, 0xc4, 0x56, 0x60, + 0x31, 0x09, 0x7f, 0xd6, 0xfa, 0xbc, 0x0e, 0xac, 0x01, 0xcb, 0xd4, 0x30, 0x6b, 0xb3, 0xb5, 0x77, + 0xf0, 0x99, 0xb5, 0xdf, 0xee, 0xb4, 0xf7, 0x8f, 0xf6, 0xeb, 0x65, 0xbc, 0x9b, 0xb1, 0xd5, 0xb2, + 0xda, 0x9d, 0xee, 0xd1, 0xce, 0x4e, 0x7b, 0xab, 0xdd, 0xea, 0xf4, 0xea, 0x15, 0xaa, 0x39, 0xad, + 0xe3, 0x55, 0x91, 0x41, 0x9e, 0x5f, 0xb1, 0xb6, 0xdb, 0xdd, 0xe6, 0xe6, 0x5e, 0x6b, 0xbb, 0x5e, + 0x63, 0xb7, 0xe1, 0x66, 0xaf, 0xb5, 0x7f, 0x78, 0x60, 0x36, 0xcd, 0xcf, 0xd5, 0xf9, 0x16, 0x6b, + 0xa7, 0xd9, 0xde, 0x3b, 0x32, 0x5b, 0xf5, 0x05, 0xf6, 0x06, 0xdc, 0x36, 0x5b, 0x9f, 0x1c, 0xb5, + 0xcd, 0xd6, 0xb6, 0xd5, 0x39, 0xd8, 0x6e, 0x59, 0x3b, 0xad, 0x66, 0xef, 0xc8, 0x6c, 0x59, 0xfb, + 0xed, 0x6e, 0xb7, 0xdd, 0x79, 0x5a, 0xaf, 0xb3, 0xb7, 0xe0, 0x6e, 0x84, 0x12, 0x15, 0x30, 0x85, + 0xb5, 0x28, 0xfa, 0xa7, 0xa6, 0xb4, 0xd3, 0xfa, 0xa5, 0x9e, 0x75, 0xd8, 0x6a, 0x99, 0x75, 0xc6, + 0xd6, 0x61, 0x35, 0xae, 0x9e, 0x2a, 0x90, 0x75, 0x2f, 0x89, 0xb4, 0xc3, 0x96, 0xb9, 0xdf, 0xec, + 0x88, 0x09, 0x4e, 0xa4, 0x2d, 0x8b, 0x66, 0xc7, 0x69, 0xd3, 0xcd, 0x5e, 0x61, 0x0c, 0x6a, 0xda, + 0xac, 0xec, 0x34, 0xcd, 0xfa, 0x2a, 0x5b, 0x80, 0xf2, 0xfe, 0xe1, 0xa1, 0xd5, 0x6b, 0xef, 0xb7, + 0x0e, 0x8e, 0x7a, 0xf5, 0x35, 0xb6, 0x02, 0xf5, 0x76, 0xa7, 0xd7, 0x32, 0xc5, 0x5c, 0xab, 0xac, + 0xff, 0x63, 0x9e, 0x2d, 0xc3, 0x82, 0x6a, 0xa9, 0x82, 0xfe, 0xc5, 0x3c, 0x5b, 0x03, 0x76, 0xd4, + 0x31, 0x5b, 0xcd, 0x6d, 0x31, 0x70, 0x51, 0xc2, 0xff, 0x9c, 0x97, 0x6e, 0xa3, 0x1f, 0xe7, 0xa2, + 0xcd, 0x3a, 0x8e, 0xc3, 0x48, 0x5e, 0x70, 0x5e, 0xd1, 0x2e, 0x26, 0x7f, 0xd9, 0xd3, 0x23, 0x9a, + 0x6a, 0x95, 0x9b, 0x51, 0xad, 0x66, 0x74, 0xf7, 0xaa, 0x2e, 0xfb, 0xbd, 0x09, 0xd5, 0x11, 0x5d, + 0x76, 0x2e, 0x2f, 0x35, 0x06, 0x19, 0x94, 0x44, 0x40, 0xba, 0xd1, 0x78, 0xe6, 0xed, 0x8d, 0xc2, + 0xec, 0xdb, 0x1b, 0x69, 0xf2, 0xfd, 0x5c, 0x9a, 0x7c, 0xff, 0x00, 0x16, 0x89, 0x35, 0x39, 0xae, + 0x33, 0x52, 0x5a, 0x33, 0x49, 0x81, 0x0b, 0xc8, 0xa2, 0x08, 0xae, 0xd4, 0x09, 0xa5, 0x72, 0x48, + 0x16, 0x32, 0x2f, 0xb5, 0x8d, 0x84, 0xa6, 0x41, 0x9c, 0x23, 0xd2, 0x34, 0xa2, 0x1a, 0xec, 0xcb, + 0xb8, 0x86, 0xb2, 0x56, 0x03, 0xc1, 0xb1, 0x86, 0x07, 0xb0, 0xc8, 0x2f, 0x43, 0xdf, 0xb6, 0xbc, + 0xb1, 0xfd, 0xc5, 0x04, 0xfd, 0xda, 0x36, 0xea, 0xf0, 0x15, 0x73, 0x01, 0x13, 0x0e, 0x10, 0xbe, + 0x6d, 0x87, 0xf6, 0x83, 0x2f, 0xa1, 0xac, 0x5d, 0x84, 0xcf, 0xd6, 0x60, 0xe9, 0xb3, 0x76, 0xaf, + 0xd3, 0xea, 0x76, 0xad, 0xc3, 0xa3, 0xcd, 0x67, 0xad, 0xcf, 0xad, 0xdd, 0x66, 0x77, 0xb7, 0x7e, + 0x43, 0x2c, 0xda, 0x4e, 0xab, 0xdb, 0x6b, 0x6d, 0x27, 0xe0, 0x19, 0xf6, 0x3a, 0xac, 0x1f, 0x75, + 0x8e, 0xba, 0xad, 0x6d, 0x2b, 0x2d, 0x5f, 0x56, 0x50, 0xa9, 0x4c, 0x4f, 0xc9, 0x9e, 0x7b, 0xf0, + 0x6b, 0x50, 0x4b, 0x1e, 0xf5, 0x66, 0x00, 0x73, 0x7b, 0xad, 0xa7, 0xcd, 0xad, 0xcf, 0xe9, 0xf6, + 0xd6, 0x6e, 0xaf, 0xd9, 0x6b, 0x6f, 0x59, 0xf2, 0xb6, 0x56, 0xc1, 0x11, 0x32, 0xac, 0x0c, 0xf3, + 0xcd, 0xce, 0xd6, 0xee, 0x81, 0xd9, 0xad, 0x67, 0xd9, 0x6b, 0xb0, 0xa6, 0x68, 0x75, 0xeb, 0x60, + 0x7f, 0xbf, 0xdd, 0x43, 0x66, 0xd8, 0xfb, 0xfc, 0x50, 0x90, 0xe6, 0x03, 0x1b, 0x4a, 0xf1, 0x75, + 0xb3, 0xc8, 0x60, 0xda, 0xbd, 0x76, 0xb3, 0x17, 0x73, 0xd7, 0xfa, 0x0d, 0xc1, 0xbf, 0x62, 0x30, + 0xde, 0x16, 0x5b, 0xcf, 0xd0, 0x69, 0x38, 0x05, 0xa4, 0xda, 0xeb, 0x59, 0xb1, 0xa8, 0x62, 0xe8, + 0xe6, 0x41, 0x4f, 0x74, 0xe1, 0xdb, 0x50, 0x4b, 0xc6, 0x3c, 0x26, 0x8d, 0xd7, 0xeb, 0xb0, 0xba, + 0xd9, 0xea, 0x7d, 0xd6, 0x6a, 0x75, 0x70, 0x74, 0xb6, 0x5a, 0x9d, 0x9e, 0xd9, 0xdc, 0x6b, 0xf7, + 0x3e, 0xaf, 0x67, 0x1e, 0x7c, 0x0c, 0xf5, 0x69, 0x07, 0x63, 0xc2, 0x23, 0xfb, 0x22, 0xd7, 0xed, + 0x83, 0xff, 0x9c, 0x81, 0xe5, 0x34, 0xdb, 0xba, 0x98, 0x43, 0xb9, 0x38, 0x05, 0x8b, 0xee, 0x1e, + 0x74, 0xac, 0xce, 0x01, 0x5e, 0x0f, 0xb9, 0x0e, 0xab, 0x53, 0x09, 0x8a, 0x13, 0x64, 0xd8, 0x2d, + 0x58, 0x9b, 0xc9, 0x64, 0x99, 0x07, 0x47, 0xd8, 0xed, 0x06, 0x2c, 0x4f, 0x25, 0xb6, 0x4c, 0xf3, + 0xc0, 0xac, 0xe7, 0xd8, 0x7b, 0x70, 0x7f, 0x2a, 0x65, 0x76, 0x63, 0x52, 0xfb, 0x56, 0x9e, 0xdd, + 0x83, 0x37, 0x67, 0xb0, 0x63, 0xde, 0x6d, 0x6d, 0x36, 0xf7, 0x44, 0xf7, 0xea, 0x85, 0x07, 0xff, + 0x34, 0x07, 0x10, 0x1f, 0x2a, 0x12, 0xf5, 0x6f, 0x37, 0x7b, 0xcd, 0xbd, 0x03, 0x41, 0x5e, 0xe6, + 0x41, 0x4f, 0x94, 0x6e, 0xb6, 0x3e, 0xa9, 0xdf, 0x48, 0x4d, 0x39, 0x38, 0x14, 0x1d, 0x5a, 0x83, + 0x25, 0x9a, 0xaa, 0x3d, 0xd1, 0x8d, 0x76, 0xe7, 0x29, 0xdd, 0x34, 0x8a, 0xbb, 0xdf, 0xd1, 0xe1, + 0x8e, 0x79, 0xd0, 0xe9, 0x59, 0xdd, 0xdd, 0xa3, 0xde, 0x36, 0xde, 0x53, 0xba, 0x65, 0xb6, 0x0f, + 0xa9, 0xcc, 0xfc, 0x8b, 0x10, 0x44, 0xd1, 0x05, 0xb1, 0x16, 0x9e, 0x1e, 0x74, 0xbb, 0xed, 0x43, + 0xeb, 0x93, 0xa3, 0x96, 0xd9, 0x6e, 0x75, 0x31, 0xe3, 0x5c, 0x0a, 0x5c, 0xe0, 0xcf, 0x8b, 0x3d, + 0xb3, 0xb7, 0xf7, 0xa9, 0xdc, 0xd4, 0x04, 0x6a, 0x31, 0x09, 0x12, 0x58, 0x25, 0x31, 0x3b, 0x62, + 0x57, 0x48, 0x29, 0x19, 0xae, 0x49, 0x13, 0xf9, 0xca, 0x62, 0xbf, 0x9b, 0x59, 0x24, 0x98, 0xad, + 0x92, 0x9e, 0x24, 0x72, 0xe1, 0x56, 0x18, 0x09, 0x0e, 0xdb, 0xdb, 0x26, 0x66, 0xa8, 0xcd, 0x40, + 0x05, 0xee, 0x82, 0x20, 0x42, 0xb1, 0x6d, 0x08, 0x94, 0xba, 0xfa, 0x10, 0x29, 0x8b, 0x8f, 0x7f, + 0x2b, 0x07, 0x35, 0x3a, 0xe0, 0x49, 0x2f, 0x4c, 0x72, 0x9f, 0xed, 0xc3, 0xbc, 0x7c, 0xaa, 0x94, + 0xad, 0x44, 0x77, 0x3c, 0xea, 0x8f, 0xa3, 0xae, 0xaf, 0x4e, 0x83, 0xa5, 0x98, 0xbc, 0xf4, 0x57, + 0xfe, 0xe4, 0xbf, 0xff, 0x9d, 0x6c, 0x95, 0x95, 0x1f, 0x9e, 0xbf, 0xff, 0xf0, 0x94, 0xbb, 0x81, + 0x28, 0xe3, 0x57, 0x00, 0xe2, 0x07, 0x38, 0x59, 0x43, 0xbb, 0x54, 0x22, 0xf1, 0xf4, 0xe6, 0xfa, + 0xcd, 0x94, 0x14, 0x59, 0xee, 0x4d, 0x2c, 0x77, 0xc9, 0xa8, 0x89, 0x72, 0x1d, 0xd7, 0x09, 0xe9, + 0x31, 0xce, 0x8f, 0x32, 0x0f, 0xd8, 0x00, 0x2a, 0xfa, 0xd3, 0x98, 0x4c, 0x49, 0xb0, 0x29, 0x8f, + 0x7b, 0xae, 0xdf, 0x4a, 0x4d, 0x53, 0xba, 0x01, 0xd6, 0xb1, 0x62, 0xd4, 0x45, 0x1d, 0x13, 0xc4, + 0x88, 0x6b, 0x19, 0x92, 0xb6, 0x14, 0xbf, 0x80, 0xc9, 0x5e, 0xd3, 0xe4, 0xdd, 0x99, 0xf7, 0x37, + 0xd7, 0x6f, 0x5f, 0x93, 0x2a, 0xeb, 0xba, 0x8d, 0x75, 0xad, 0x19, 0x4c, 0xd4, 0xd5, 0x47, 0x1c, + 0xf5, 0xfe, 0xe6, 0x47, 0x99, 0x07, 0x8f, 0xff, 0xfd, 0x3b, 0x50, 0x8a, 0x02, 0xbe, 0xd9, 0xaf, + 0x43, 0x35, 0x71, 0x02, 0x97, 0xa9, 0x6e, 0xa4, 0x1d, 0xd8, 0x5d, 0x7f, 0x2d, 0x3d, 0x51, 0x56, + 0xfc, 0x3a, 0x56, 0xdc, 0x60, 0xab, 0xa2, 0x62, 0x79, 0xc2, 0xf5, 0x21, 0x9e, 0x98, 0xa7, 0x1b, + 0x33, 0x9f, 0x6b, 0x5a, 0x21, 0x55, 0xf6, 0xda, 0xb4, 0xa6, 0x96, 0xa8, 0xed, 0xf6, 0x35, 0xa9, + 0xb2, 0xba, 0xd7, 0xb0, 0xba, 0x55, 0xb6, 0xac, 0x57, 0xa7, 0xe2, 0x84, 0x19, 0xc7, 0x6b, 0x6c, + 0xf5, 0x07, 0x22, 0xd9, 0xed, 0xf8, 0x4e, 0xd1, 0x94, 0x87, 0x23, 0x23, 0x12, 0x99, 0x7d, 0xfb, + 0xd1, 0x68, 0x60, 0x55, 0x8c, 0xe1, 0xf4, 0xe9, 0xaf, 0x3b, 0xb2, 0x63, 0x28, 0x6b, 0x2f, 0x22, + 0xb1, 0x9b, 0xd7, 0xbe, 0xde, 0xb4, 0xbe, 0x9e, 0x96, 0x94, 0xd6, 0x15, 0xbd, 0xfc, 0x87, 0x27, + 0x9c, 0xb3, 0x5f, 0x86, 0x52, 0xf4, 0xce, 0x0e, 0x5b, 0xd3, 0xde, 0x3d, 0xd2, 0xdf, 0x05, 0x5a, + 0x6f, 0xcc, 0x26, 0xa4, 0x11, 0x9f, 0x5e, 0xba, 0x20, 0xbe, 0xcf, 0xa0, 0xac, 0xbd, 0xa5, 0x13, + 0x75, 0x60, 0xf6, 0xbd, 0x9e, 0xa8, 0x03, 0x29, 0x4f, 0xef, 0x18, 0x8b, 0x58, 0x45, 0x99, 0x95, + 0x90, 0xbe, 0xc3, 0x4b, 0x2f, 0x60, 0x7b, 0xb0, 0x22, 0x35, 0xe0, 0x63, 0xfe, 0x55, 0xa6, 0x21, + 0xe5, 0x45, 0xcd, 0x47, 0x19, 0xf6, 0x31, 0x14, 0xd5, 0x93, 0x49, 0x6c, 0x35, 0xfd, 0xe9, 0xa7, + 0xf5, 0xb5, 0x19, 0xb8, 0x54, 0x57, 0x3f, 0x07, 0x88, 0x1f, 0xee, 0x89, 0x98, 0xc4, 0xcc, 0x43, + 0x40, 0x11, 0x05, 0xcc, 0xbe, 0xf2, 0x63, 0xac, 0x62, 0x07, 0xeb, 0x0c, 0x99, 0x84, 0xcb, 0x2f, + 0xd4, 0x5d, 0xe3, 0x3f, 0x80, 0xb2, 0xf6, 0x76, 0x4f, 0x34, 0x7c, 0xb3, 0xef, 0xfe, 0x44, 0xc3, + 0x97, 0xf2, 0xd4, 0x8f, 0xb1, 0x8e, 0xa5, 0x2f, 0x1b, 0x0b, 0xa2, 0x74, 0x21, 0x02, 0x4b, 0x51, + 0x54, 0x4c, 0xd0, 0x19, 0x54, 0x13, 0x0f, 0xf4, 0x44, 0x2b, 0x34, 0xed, 0xf9, 0x9f, 0x68, 0x85, + 0xa6, 0xbe, 0xe9, 0xa3, 0xe8, 0xcc, 0x58, 0x14, 0xf5, 0xd0, 0x6d, 0x62, 0x5a, 0x4d, 0xdf, 0x87, + 0xb2, 0xf6, 0xd8, 0x4e, 0xd4, 0x97, 0xd9, 0x77, 0x7d, 0xa2, 0xbe, 0xa4, 0xbd, 0xcd, 0xb3, 0x8c, + 0x75, 0xd4, 0x0c, 0x24, 0x05, 0xbc, 0x0c, 0x59, 0x94, 0xfd, 0xeb, 0x50, 0x4b, 0xbe, 0xbf, 0x13, + 0xad, 0xfd, 0xd4, 0x87, 0x7c, 0xa2, 0xb5, 0x7f, 0xcd, 0xa3, 0x3d, 0x92, 0xa4, 0x1f, 0x2c, 0x45, + 0x95, 0x3c, 0xfc, 0x91, 0x3c, 0xba, 0xf6, 0x25, 0xfb, 0x44, 0x30, 0x38, 0x79, 0x59, 0x37, 0x5b, + 0xd3, 0xa8, 0x56, 0xbf, 0xf5, 0x3b, 0x5a, 0x2f, 0x33, 0xf7, 0x7a, 0x27, 0x89, 0x19, 0x0b, 0x67, + 0x4f, 0x61, 0x29, 0x22, 0xe6, 0xe8, 0xf6, 0xed, 0x20, 0xea, 0x43, 0xea, 0x1d, 0xdf, 0xeb, 0xf5, + 0xe9, 0xd4, 0x47, 0x19, 0xda, 0xfe, 0xf0, 0x4a, 0x63, 0x6d, 0xfb, 0xd3, 0x2f, 0xe0, 0xd6, 0xb6, + 0xbf, 0xc4, 0xcd, 0xc7, 0xd3, 0xdb, 0x5f, 0xe8, 0x88, 0x32, 0x5c, 0x58, 0x98, 0xbe, 0xea, 0xfa, + 0xf6, 0x75, 0x57, 0x83, 0x50, 0xf1, 0xaf, 0xbf, 0xf8, 0xe6, 0x90, 0x24, 0x2b, 0x52, 0xdc, 0xf4, + 0xa1, 0x8c, 0x94, 0x62, 0xbf, 0x0a, 0x15, 0xfd, 0xcd, 0x0e, 0xa6, 0xf3, 0x84, 0xe9, 0x9a, 0x6e, + 0xa5, 0xa6, 0x25, 0xa9, 0x84, 0x55, 0xf4, 0x6a, 0xd8, 0xa7, 0xb0, 0x1a, 0x0d, 0xb3, 0x7e, 0xb7, + 0x45, 0xc0, 0xee, 0xa4, 0xdc, 0x78, 0x91, 0x18, 0xec, 0x9b, 0xd7, 0x5e, 0x89, 0xf1, 0x28, 0x23, + 0xa8, 0x2f, 0xf9, 0x3e, 0x41, 0xbc, 0xf3, 0xa4, 0x3d, 0xcb, 0x10, 0xef, 0x3c, 0xa9, 0x8f, 0x1a, + 0x28, 0xea, 0x63, 0x4b, 0x89, 0x31, 0xa2, 0x18, 0x72, 0xf6, 0x7d, 0x58, 0xd0, 0x2e, 0xee, 0xe8, + 0x5e, 0xb9, 0xfd, 0x68, 0x25, 0xcd, 0x5e, 0x62, 0xbb, 0x9e, 0x66, 0x33, 0x36, 0xd6, 0xb0, 0xfc, + 0x45, 0x23, 0x31, 0x38, 0x62, 0x15, 0x6d, 0x41, 0x59, 0xbf, 0x14, 0xe4, 0x05, 0xe5, 0xae, 0x69, + 0x49, 0xfa, 0x7d, 0xa9, 0x8f, 0x32, 0x6c, 0x0f, 0xea, 0xd3, 0x57, 0xf8, 0x45, 0x3c, 0x25, 0xed, + 0xda, 0xc3, 0xf5, 0xa9, 0xc4, 0xc4, 0xc5, 0x7f, 0xec, 0x90, 0x4e, 0x21, 0x45, 0xcf, 0x4f, 0x7a, + 0xfe, 0xf4, 0xae, 0x9e, 0x7c, 0x96, 0x32, 0x2a, 0x2d, 0xed, 0x41, 0xd2, 0xfb, 0x99, 0x47, 0x19, + 0xf6, 0x3b, 0x19, 0xa8, 0x24, 0xae, 0xb0, 0x4a, 0x9c, 0xf3, 0x98, 0xea, 0x67, 0x43, 0x4f, 0xd3, + 0x3b, 0x6a, 0x98, 0x38, 0x88, 0x7b, 0x0f, 0xbe, 0x97, 0x98, 0xa4, 0x1f, 0x25, 0x5c, 0xae, 0x1b, + 0xd3, 0xef, 0x53, 0x7e, 0x39, 0x8d, 0xa0, 0x5f, 0x8b, 0xfc, 0xe5, 0xa3, 0x0c, 0xfb, 0x17, 0x19, + 0xa8, 0x25, 0x63, 0x29, 0xa2, 0xee, 0xa6, 0x46, 0x6d, 0x44, 0xa4, 0x74, 0x4d, 0x00, 0xc6, 0xf7, + 0xb1, 0x95, 0xbd, 0x07, 0x66, 0xa2, 0x95, 0xf2, 0x65, 0x8d, 0x9f, 0xae, 0xb5, 0xec, 0x17, 0xe9, + 0x39, 0x68, 0x15, 0x77, 0xc7, 0x66, 0x9f, 0x0f, 0x8e, 0xc8, 0x4f, 0x7f, 0x6c, 0xd7, 0xc8, 0xfd, + 0x46, 0x36, 0x83, 0x33, 0xf1, 0x03, 0x7a, 0x8c, 0x51, 0x85, 0x5e, 0x09, 0x52, 0x7e, 0xe5, 0x42, + 0xde, 0xc2, 0x8e, 0xbd, 0x6e, 0xdc, 0x4c, 0x74, 0x6c, 0x5a, 0xfa, 0x68, 0x52, 0x13, 0xe5, 0x83, + 0xb9, 0xf1, 0xf6, 0x39, 0xf3, 0x88, 0x6e, 0x6a, 0x25, 0xd8, 0xc8, 0x11, 0x35, 0x52, 0xa2, 0x27, + 0xd6, 0xdb, 0x2b, 0x16, 0x63, 0x3c, 0xc0, 0xb6, 0xbe, 0x65, 0xdc, 0xb9, 0xb6, 0xad, 0x0f, 0x31, + 0x38, 0x42, 0xb4, 0xf8, 0x10, 0x20, 0x0e, 0x8e, 0x65, 0x53, 0x21, 0x9a, 0x11, 0x17, 0x9a, 0x8d, + 0x9f, 0x4d, 0x2e, 0x6a, 0x15, 0xc9, 0x29, 0x4a, 0xfc, 0x65, 0xe2, 0xa9, 0x51, 0xf0, 0xa8, 0x2e, + 0x82, 0x25, 0xe3, 0x58, 0x13, 0x22, 0xd8, 0x74, 0xf9, 0x09, 0x8e, 0x1a, 0x45, 0x8a, 0x1e, 0x41, + 0x75, 0xcf, 0xf3, 0x9e, 0x4f, 0xc6, 0xd1, 0x81, 0x8c, 0x64, 0x2c, 0xd4, 0xae, 0x1d, 0x9c, 0xad, + 0x4f, 0xf5, 0xc2, 0xb8, 0x8b, 0x45, 0xad, 0xb3, 0x86, 0x56, 0xd4, 0xc3, 0x1f, 0xc5, 0x11, 0xb9, + 0x5f, 0x32, 0x1b, 0x16, 0x23, 0x46, 0x1d, 0x47, 0xbd, 0x26, 0x8b, 0x49, 0xb0, 0xe7, 0xe9, 0x2a, + 0x12, 0xba, 0x82, 0x6a, 0xed, 0xc3, 0x40, 0x95, 0xf9, 0x28, 0xc3, 0x0e, 0xa1, 0xb2, 0xcd, 0xfb, + 0x78, 0xa3, 0x07, 0xc6, 0xfd, 0x2c, 0x25, 0x62, 0x48, 0x28, 0x60, 0x68, 0xbd, 0x9a, 0x00, 0x26, + 0x37, 0xaf, 0xb1, 0x7d, 0xe5, 0xf3, 0x2f, 0x1e, 0xfe, 0x48, 0x46, 0x14, 0x7d, 0xa9, 0x36, 0xaf, + 0x38, 0xba, 0x4c, 0x97, 0x00, 0x92, 0x21, 0x5a, 0x89, 0xcd, 0x6b, 0x26, 0x44, 0x2b, 0x31, 0xd4, + 0x51, 0x2c, 0xd9, 0x10, 0x16, 0x67, 0xa2, 0xba, 0xa2, 0x7d, 0xeb, 0xba, 0x58, 0xb0, 0xf5, 0xbb, + 0xd7, 0x23, 0x24, 0x6b, 0x7b, 0x90, 0xac, 0xad, 0x0b, 0x55, 0xba, 0xf8, 0xf8, 0x98, 0xd3, 0xd9, + 0xde, 0xa9, 0x8b, 0xb1, 0xf4, 0x83, 0xc3, 0xd3, 0xbb, 0x0c, 0xa6, 0x25, 0xc5, 0x1c, 0x3c, 0xdd, + 0xc9, 0x4e, 0xf0, 0x39, 0x10, 0xed, 0x30, 0x6d, 0x44, 0x8c, 0xb3, 0x07, 0x7c, 0x23, 0x62, 0x4c, + 0x39, 0x7b, 0xab, 0x74, 0x50, 0xb6, 0x12, 0x95, 0xfd, 0xd0, 0xf5, 0x06, 0x7c, 0x24, 0x4b, 0xfd, + 0x65, 0x28, 0x3f, 0xe5, 0xa1, 0x3a, 0xbd, 0x1a, 0x09, 0xf4, 0x53, 0xc7, 0x59, 0xd7, 0x53, 0xce, + 0x1c, 0x27, 0x69, 0x93, 0x4a, 0xe6, 0x83, 0x53, 0x4e, 0x9c, 0xd0, 0x72, 0x06, 0x5f, 0xb2, 0x5f, + 0xc2, 0xc2, 0xa3, 0xbb, 0x1a, 0x56, 0xb5, 0x66, 0xea, 0x85, 0x2f, 0x4c, 0xc1, 0xd3, 0x4a, 0x16, + 0x6d, 0xd6, 0x04, 0x4b, 0x17, 0xca, 0xda, 0x9d, 0x2e, 0xd1, 0xd8, 0xcc, 0xde, 0xe1, 0x13, 0x8d, + 0x4d, 0xca, 0x15, 0x30, 0xc6, 0x7d, 0xac, 0xc7, 0x60, 0x77, 0xe3, 0x7a, 0xe8, 0xda, 0x97, 0xb8, + 0xa6, 0x87, 0x3f, 0xb2, 0x47, 0xe1, 0x97, 0xec, 0x33, 0x9a, 0x0e, 0xed, 0x74, 0x6e, 0xac, 0xa1, + 0x4c, 0x1f, 0xe4, 0x8d, 0x06, 0x4b, 0x4b, 0x4a, 0x6a, 0x2d, 0x54, 0x15, 0x8a, 0x8d, 0x4f, 0x00, + 0xba, 0xa1, 0x37, 0xde, 0xb6, 0xf9, 0xc8, 0x73, 0x63, 0x9e, 0x1e, 0x9f, 0x17, 0x8d, 0xf9, 0xa4, + 0x76, 0x68, 0x94, 0x7d, 0xa6, 0xa9, 0x74, 0x89, 0x73, 0xe5, 0x8a, 0x88, 0xaf, 0x3d, 0x52, 0x1a, + 0x0d, 0x48, 0xca, 0xb1, 0xd2, 0x47, 0x19, 0xd6, 0x04, 0x88, 0xc3, 0x07, 0x23, 0x05, 0x6d, 0x26, + 0x32, 0x31, 0x62, 0xaf, 0x29, 0xb1, 0x86, 0x87, 0x50, 0x8a, 0xe3, 0xae, 0xd6, 0xe2, 0x2b, 0xaa, + 0x12, 0x51, 0x5a, 0x91, 0xb8, 0x30, 0x13, 0xf3, 0x64, 0xd4, 0x71, 0xa8, 0x80, 0x15, 0xc5, 0x50, + 0x9d, 0x70, 0x1e, 0x30, 0x07, 0x96, 0xa8, 0x81, 0x91, 0x6c, 0x86, 0xe7, 0x1c, 0xa3, 0x47, 0x78, + 0x66, 0xc3, 0x8f, 0x22, 0xae, 0x91, 0x1a, 0x44, 0x93, 0xb0, 0x33, 0x09, 0x6a, 0xa5, 0x33, 0x96, + 0x62, 0x0b, 0x18, 0xc1, 0xe2, 0x4c, 0x9c, 0x46, 0xc4, 0x3a, 0xae, 0x0b, 0xbc, 0x89, 0x58, 0xc7, + 0xb5, 0x21, 0x1e, 0xc6, 0x0a, 0x56, 0xb9, 0x60, 0x00, 0xea, 0x95, 0x17, 0x4e, 0xd8, 0x3f, 0x13, + 0xd5, 0xfd, 0x7e, 0x06, 0x96, 0x52, 0x22, 0x31, 0xd8, 0x1b, 0xca, 0x44, 0x71, 0x6d, 0x94, 0xc6, + 0x7a, 0xaa, 0xc7, 0xde, 0xe8, 0x62, 0x3d, 0xfb, 0xec, 0x59, 0x62, 0x03, 0x25, 0x87, 0xb9, 0x5c, + 0x99, 0x2f, 0x94, 0x60, 0x52, 0xc5, 0x97, 0x2f, 0x60, 0x8d, 0x1a, 0xd2, 0x1c, 0x0e, 0xa7, 0xa2, + 0x09, 0x5e, 0xd7, 0x5a, 0x91, 0x12, 0x21, 0x91, 0x50, 0x06, 0x92, 0x51, 0x12, 0xd7, 0xc8, 0xee, + 0xd4, 0x54, 0x36, 0x81, 0xfa, 0xb4, 0x97, 0x9e, 0x5d, 0x5f, 0xd6, 0xfa, 0x9d, 0x84, 0xb2, 0x9d, + 0xe2, 0xd9, 0xff, 0x1a, 0x56, 0x76, 0xc7, 0x58, 0x4f, 0x1b, 0x17, 0xd2, 0xbf, 0xc5, 0x7c, 0xfc, + 0xff, 0x51, 0x48, 0xc1, 0x54, 0x3f, 0xef, 0x44, 0xaf, 0x0a, 0xa4, 0x07, 0x40, 0x44, 0xea, 0x7e, + 0x7a, 0x44, 0xc2, 0xdb, 0x58, 0xfd, 0x5d, 0xe3, 0x56, 0x5a, 0xf5, 0x3e, 0x65, 0x21, 0xc5, 0x7f, + 0x6d, 0x7a, 0x5d, 0xab, 0x16, 0xdc, 0x4d, 0x9b, 0xef, 0x6b, 0x15, 0xaf, 0xa9, 0xb1, 0xbe, 0x81, + 0x32, 0x64, 0x45, 0x0f, 0x21, 0x88, 0x96, 0x4f, 0x4a, 0xac, 0x42, 0xb4, 0x7c, 0xd2, 0x62, 0x0e, + 0x92, 0xf2, 0x93, 0x8a, 0x36, 0xf8, 0x28, 0xf3, 0x60, 0xf3, 0xde, 0xf7, 0xbf, 0x76, 0xea, 0x84, + 0x67, 0x93, 0xe3, 0x8d, 0xbe, 0x37, 0x7a, 0x38, 0x54, 0xa6, 0x4d, 0x79, 0x19, 0xc0, 0xc3, 0xa1, + 0x3b, 0x78, 0x88, 0xc5, 0x1e, 0xcf, 0x8d, 0x7d, 0x2f, 0xf4, 0xbe, 0xf1, 0x7f, 0x03, 0x00, 0x00, + 0xff, 0xff, 0x7c, 0xf0, 0x8f, 0x49, 0xc0, 0x8b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/lnrpc/rpc.pb.gw.go b/lnrpc/rpc.pb.gw.go index 78aae3c1..c47a8e69 100644 --- a/lnrpc/rpc.pb.gw.go +++ b/lnrpc/rpc.pb.gw.go @@ -114,10 +114,18 @@ func request_Lightning_ChannelBalance_0(ctx context.Context, marshaler runtime.M } +var ( + filter_Lightning_GetTransactions_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + func request_Lightning_GetTransactions_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq GetTransactionsRequest var metadata runtime.ServerMetadata + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_GetTransactions_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := client.GetTransactions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err diff --git a/lnrpc/rpc.proto b/lnrpc/rpc.proto index 7f58e59e..0be24090 100644 --- a/lnrpc/rpc.proto +++ b/lnrpc/rpc.proto @@ -897,7 +897,22 @@ message Transaction { string raw_tx_hex = 9; } message GetTransactionsRequest { + /* + The height from which to list transactions, inclusive. If this value is + greater than end_height, transactions will be read in reverse. + */ + int32 start_height = 1; + + /* + The height until which to list transactions, inclusive. To include + unconfirmed transactions, this value should be set to -1, which will + return transactions from start_height until the current chain tip and + unconfirmed transactions. If no end_height is provided, the call will + default to this option. + */ + int32 end_height = 2; } + message TransactionDetails { /// The list of transactions relevant to the wallet. repeated Transaction transactions = 1; diff --git a/lnrpc/rpc.swagger.json b/lnrpc/rpc.swagger.json index 189fb6f0..e0066573 100644 --- a/lnrpc/rpc.swagger.json +++ b/lnrpc/rpc.swagger.json @@ -1377,6 +1377,24 @@ } } }, + "parameters": [ + { + "name": "start_height", + "description": "The height from which to list transactions, inclusive. If this value is\ngreater than end_height, transactions will be read in reverse.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "end_height", + "description": "The height until which to list transactions, inclusive. To include\nunconfirmed transactions, this value should be set to -1, which will\nreturn transactions from start_height until the current chain tip and\nunconfirmed transactions. If no end_height is provided, the call will\ndefault to this option.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], "tags": [ "Lightning" ] diff --git a/lnwallet/btcwallet/btcwallet.go b/lnwallet/btcwallet/btcwallet.go index 3e51605a..ba930314 100644 --- a/lnwallet/btcwallet/btcwallet.go +++ b/lnwallet/btcwallet/btcwallet.go @@ -26,6 +26,10 @@ import ( const ( defaultAccount = uint32(waddrmgr.DefaultAccountNum) + + // UnconfirmedHeight is the special case end height that is used to + // obtain unconfirmed transactions from ListTransactionDetails. + UnconfirmedHeight int32 = -1 ) var ( @@ -569,20 +573,22 @@ func unminedTransactionsToDetail( } // ListTransactionDetails returns a list of all transactions which are -// relevant to the wallet. +// relevant to the wallet. It takes inclusive start and end height to allow +// paginated queries. Unconfirmed transactions can be included in the query +// by providing endHeight = UnconfirmedHeight (= -1). // // This is a part of the WalletController interface. -func (b *BtcWallet) ListTransactionDetails() ([]*lnwallet.TransactionDetail, error) { +func (b *BtcWallet) ListTransactionDetails(startHeight, + endHeight int32) ([]*lnwallet.TransactionDetail, error) { + // Grab the best block the wallet knows of, we'll use this to calculate // # of confirmations shortly below. bestBlock := b.wallet.Manager.SyncedTo() currentHeight := bestBlock.Height - // We'll attempt to find all unconfirmed transactions (height of -1), - // as well as all transactions that are known to have confirmed at this - // height. - start := base.NewBlockIdentifierFromHeight(0) - stop := base.NewBlockIdentifierFromHeight(-1) + // We'll attempt to find all transactions from start to end height. + start := base.NewBlockIdentifierFromHeight(startHeight) + stop := base.NewBlockIdentifierFromHeight(endHeight) txns, err := b.wallet.GetTransactions(start, stop, nil) if err != nil { return nil, err diff --git a/lnwallet/interface.go b/lnwallet/interface.go index cf36ff80..11ed6dc2 100644 --- a/lnwallet/interface.go +++ b/lnwallet/interface.go @@ -199,8 +199,14 @@ type WalletController interface { ListUnspentWitness(minconfirms, maxconfirms int32) ([]*Utxo, error) // ListTransactionDetails returns a list of all transactions which are - // relevant to the wallet. - ListTransactionDetails() ([]*TransactionDetail, error) + // relevant to the wallet over [startHeight;endHeight]. If start height + // is greater than end height, the transactions will be retrieved in + // reverse order. To include unconfirmed transactions, endHeight should + // be set to the special value -1. This will return transactions from + // the tip of the chain until the start height (inclusive) and + // unconfirmed transactions. + ListTransactionDetails(startHeight, + endHeight int32) ([]*TransactionDetail, error) // LockOutpoint marks an outpoint as locked meaning it will no longer // be deemed as eligible for coin selection. Locking outputs are diff --git a/lnwallet/interface_test.go b/lnwallet/interface_test.go index 94e34a45..20ff5282 100644 --- a/lnwallet/interface_test.go +++ b/lnwallet/interface_test.go @@ -206,7 +206,7 @@ func assertTxInWallet(t *testing.T, w *lnwallet.LightningWallet, // We'll fetch all of our transaction and go through each one until // finding the expected transaction with its expected confirmation // status. - txs, err := w.ListTransactionDetails() + txs, err := w.ListTransactionDetails(0, btcwallet.UnconfirmedHeight) if err != nil { t.Fatalf("unable to retrieve transactions: %v", err) } @@ -1101,6 +1101,12 @@ func testListTransactionDetails(miner *rpctest.Harness, txids[*txid] = struct{}{} } + // Get the miner's current best block height before we mine blocks. + _, startHeight, err := miner.Node.GetBestBlock() + if err != nil { + t.Fatalf("cannot get best block: %v", err) + } + // Generate 10 blocks to mine all the transactions created above. const numBlocksMined = 10 blocks, err := miner.Node.Generate(numBlocksMined) @@ -1108,12 +1114,22 @@ func testListTransactionDetails(miner *rpctest.Harness, t.Fatalf("unable to mine blocks: %v", err) } - // Next, fetch all the current transaction details. + // Our new best block height should be our start height + the number of + // blocks we just mined. + chainTip := startHeight + numBlocksMined + + // Next, fetch all the current transaction details. We should find all + // of our transactions between our start height before we generated + // blocks, and our end height, which is the chain tip. This query does + // not include unconfirmed transactions, since all of our transactions + // should be confirmed. err = waitForWalletSync(miner, alice) if err != nil { t.Fatalf("Couldn't sync Alice's wallet: %v", err) } - txDetails, err := alice.ListTransactionDetails() + txDetails, err := alice.ListTransactionDetails( + startHeight, chainTip, + ) if err != nil { t.Fatalf("unable to fetch tx details: %v", err) } @@ -1219,10 +1235,13 @@ func testListTransactionDetails(miner *rpctest.Harness, t.Fatalf("Couldn't sync Alice's wallet: %v", err) } - // We should be able to find the transaction above in the set of - // returned transactions, and it should have a confirmation of -1, - // indicating that it's not yet mined. - txDetails, err = alice.ListTransactionDetails() + // Query our wallet for transactions from the chain tip, including + // unconfirmed transactions. The transaction above should be included + // with a confirmation height of 0, indicating that it has not been + // mined yet. + txDetails, err = alice.ListTransactionDetails( + chainTip, btcwallet.UnconfirmedHeight, + ) if err != nil { t.Fatalf("unable to fetch tx details: %v", err) } @@ -1259,18 +1278,27 @@ func testListTransactionDetails(miner *rpctest.Harness, t.Fatalf("unable to find mempool tx in tx details!") } - burnBlock, err := miner.Node.Generate(1) + // Generate one block for our transaction to confirm in. + var numBlocks int32 = 1 + burnBlock, err := miner.Node.Generate(uint32(numBlocks)) if err != nil { t.Fatalf("unable to mine block: %v", err) } + // Progress our chain tip by the number of blocks we have just mined. + chainTip += numBlocks + // Fetch the transaction details again, the new transaction should be - // shown as debiting from the wallet's balance. + // shown as debiting from the wallet's balance. Start and end height + // are inclusive, so we use chainTip for both parameters to get only + // transactions from the last block. err = waitForWalletSync(miner, alice) if err != nil { t.Fatalf("Couldn't sync Alice's wallet: %v", err) } - txDetails, err = alice.ListTransactionDetails() + txDetails, err = alice.ListTransactionDetails( + chainTip, chainTip, + ) if err != nil { t.Fatalf("unable to fetch tx details: %v", err) } @@ -1302,6 +1330,30 @@ func testListTransactionDetails(miner *rpctest.Harness, if !burnTxFound { t.Fatal("tx burning btc not found") } + + // Generate a block which has no wallet transactions in it. + chainTip += numBlocks + _, err = miner.Node.Generate(uint32(numBlocks)) + if err != nil { + t.Fatalf("unable to mine block: %v", err) + } + + err = waitForWalletSync(miner, alice) + if err != nil { + t.Fatalf("Couldn't sync Alice's wallet: %v", err) + } + + // Query for transactions only in the latest block. We do not expect + // any transactions to be returned. + txDetails, err = alice.ListTransactionDetails( + chainTip, chainTip, + ) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if len(txDetails) != 0 { + t.Fatalf("expected 0 transactions, got: %v", len(txDetails)) + } } func testTransactionSubscriptions(miner *rpctest.Harness, diff --git a/mock.go b/mock.go index 0b71a6dc..0a7306c4 100644 --- a/mock.go +++ b/mock.go @@ -313,7 +313,7 @@ func (m *mockWalletController) ListUnspentWitness(minconfirms, ret = append(ret, utxo) return ret, nil } -func (*mockWalletController) ListTransactionDetails() ([]*lnwallet.TransactionDetail, error) { +func (*mockWalletController) ListTransactionDetails(_, _ int32) ([]*lnwallet.TransactionDetail, error) { return nil, nil } func (*mockWalletController) LockOutpoint(o wire.OutPoint) {} diff --git a/rpcserver.go b/rpcserver.go index 05c9fa88..bb287321 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -50,6 +50,7 @@ import ( "github.com/lightningnetwork/lnd/lnrpc/routerrpc" "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwallet" + "github.com/lightningnetwork/lnd/lnwallet/btcwallet" "github.com/lightningnetwork/lnd/lnwallet/chainfee" "github.com/lightningnetwork/lnd/lnwallet/chanfunding" "github.com/lightningnetwork/lnd/lnwire" @@ -4548,10 +4549,21 @@ func (r *rpcServer) SubscribeTransactions(req *lnrpc.GetTransactionsRequest, // GetTransactions returns a list of describing all the known transactions // relevant to the wallet. func (r *rpcServer) GetTransactions(ctx context.Context, - _ *lnrpc.GetTransactionsRequest) (*lnrpc.TransactionDetails, error) { + req *lnrpc.GetTransactionsRequest) (*lnrpc.TransactionDetails, error) { - // TODO(roasbeef): add pagination support - transactions, err := r.server.cc.wallet.ListTransactionDetails() + // To remain backwards compatible with the old api, default to the + // special case end height which will return transactions from the start + // height until the chain tip, including unconfirmed transactions. + var endHeight int32 = btcwallet.UnconfirmedHeight + + // If the user has provided an end height, we overwrite our default. + if req.EndHeight != 0 { + endHeight = req.EndHeight + } + + transactions, err := r.server.cc.wallet.ListTransactionDetails( + req.StartHeight, endHeight, + ) if err != nil { return nil, err } From 99a45e968afca7dee7d55cb1a2f29b8f8f4f3099 Mon Sep 17 00:00:00 2001 From: carla Date: Tue, 5 May 2020 21:10:11 +0200 Subject: [PATCH 2/4] sweep: add list sweeps function --- sweep/store.go | 36 ++++++++++++++++++++++++++++++++++-- sweep/store_mock.go | 10 ++++++++++ sweep/store_test.go | 24 ++++++++++++++++++++++++ sweep/sweeper.go | 6 ++++++ 4 files changed, 74 insertions(+), 2 deletions(-) diff --git a/sweep/store.go b/sweep/store.go index 287646a7..6d74dfe5 100644 --- a/sweep/store.go +++ b/sweep/store.go @@ -39,6 +39,8 @@ var ( utxnFinalizedKndrTxnKey = []byte("finalized-kndr-txn") byteOrder = binary.BigEndian + + errNoTxHashesBucket = errors.New("tx hashes bucket does not exist") ) // SweeperStore stores published txes. @@ -53,6 +55,9 @@ type SweeperStore interface { // GetLastPublishedTx returns the last tx that we called NotifyPublishTx // for. GetLastPublishedTx() (*wire.MsgTx, error) + + // ListSweeps lists all the sweeps we have successfully published. + ListSweeps() ([]chainhash.Hash, error) } type sweeperStore struct { @@ -173,7 +178,7 @@ func (s *sweeperStore) NotifyPublishTx(sweepTx *wire.MsgTx) error { txHashesBucket := tx.ReadWriteBucket(txHashesBucketKey) if txHashesBucket == nil { - return errors.New("tx hashes bucket does not exist") + return errNoTxHashesBucket } var b bytes.Buffer @@ -230,7 +235,7 @@ func (s *sweeperStore) IsOurTx(hash chainhash.Hash) (bool, error) { err := kvdb.View(s.db, func(tx kvdb.ReadTx) error { txHashesBucket := tx.ReadBucket(txHashesBucketKey) if txHashesBucket == nil { - return errors.New("tx hashes bucket does not exist") + return errNoTxHashesBucket } ours = txHashesBucket.Get(hash[:]) != nil @@ -244,5 +249,32 @@ func (s *sweeperStore) IsOurTx(hash chainhash.Hash) (bool, error) { return ours, nil } +// ListSweeps lists all the sweep transactions we have in the sweeper store. +func (s *sweeperStore) ListSweeps() ([]chainhash.Hash, error) { + var sweepTxns []chainhash.Hash + + if err := kvdb.View(s.db, func(tx kvdb.ReadTx) error { + txHashesBucket := tx.ReadBucket(txHashesBucketKey) + if txHashesBucket == nil { + return errNoTxHashesBucket + } + + return txHashesBucket.ForEach(func(resKey, _ []byte) error { + txid, err := chainhash.NewHash(resKey) + if err != nil { + return err + } + + sweepTxns = append(sweepTxns, *txid) + + return nil + }) + }); err != nil { + return nil, err + } + + return sweepTxns, nil +} + // Compile-time constraint to ensure sweeperStore implements SweeperStore. var _ SweeperStore = (*sweeperStore)(nil) diff --git a/sweep/store_mock.go b/sweep/store_mock.go index ba8b2f2b..ba6d5d67 100644 --- a/sweep/store_mock.go +++ b/sweep/store_mock.go @@ -41,5 +41,15 @@ func (s *MockSweeperStore) GetLastPublishedTx() (*wire.MsgTx, error) { return s.lastTx, nil } +// ListSweeps lists all the sweeps we have successfully published. +func (s *MockSweeperStore) ListSweeps() ([]chainhash.Hash, error) { + var txns []chainhash.Hash + for tx := range s.ourTxes { + txns = append(txns, tx) + } + + return txns, nil +} + // Compile-time constraint to ensure MockSweeperStore implements SweeperStore. var _ SweeperStore = (*MockSweeperStore)(nil) diff --git a/sweep/store_test.go b/sweep/store_test.go index 8d83e1fa..3738f6c9 100644 --- a/sweep/store_test.go +++ b/sweep/store_test.go @@ -150,4 +150,28 @@ func testStore(t *testing.T, createStore func() (SweeperStore, error)) { if ours { t.Fatal("expected tx to be not ours") } + + txns, err := store.ListSweeps() + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + // Create a map containing the sweeps we expect to be returned by list + // sweeps. + expected := map[chainhash.Hash]bool{ + tx1.TxHash(): true, + tx2.TxHash(): true, + } + + if len(txns) != len(expected) { + t.Fatalf("expected: %v sweeps, got: %v", len(expected), + len(txns)) + } + + for _, tx := range txns { + _, ok := expected[tx] + if !ok { + t.Fatalf("unexpected tx: %v", tx) + } + } } diff --git a/sweep/sweeper.go b/sweep/sweeper.go index cd93a121..9ff9b92b 100644 --- a/sweep/sweeper.go +++ b/sweep/sweeper.go @@ -9,6 +9,7 @@ import ( "sync/atomic" "time" + "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcutil" "github.com/davecgh/go-spew/spew" @@ -1262,6 +1263,11 @@ func DefaultNextAttemptDeltaFunc(attempts int) int32 { return 1 + rand.Int31n(1< Date: Tue, 5 May 2020 21:34:38 +0200 Subject: [PATCH 3/4] walletrpc: add list sweeps to rpc and cli --- cmd/lncli/walletrpc_active.go | 40 ++++ lnrpc/rpc_utils.go | 53 +++++ lnrpc/walletrpc/walletkit.pb.go | 351 ++++++++++++++++++++++------ lnrpc/walletrpc/walletkit.proto | 34 +++ lnrpc/walletrpc/walletkit_server.go | 69 ++++++ rpcserver.go | 31 +-- 6 files changed, 481 insertions(+), 97 deletions(-) create mode 100644 lnrpc/rpc_utils.go diff --git a/cmd/lncli/walletrpc_active.go b/cmd/lncli/walletrpc_active.go index c1849e1b..b50a76a0 100644 --- a/cmd/lncli/walletrpc_active.go +++ b/cmd/lncli/walletrpc_active.go @@ -27,6 +27,7 @@ func walletCommands() []cli.Command { pendingSweepsCommand, bumpFeeCommand, bumpCloseFeeCommand, + listSweepsCommand, }, }, } @@ -300,3 +301,42 @@ func getWaitingCloseCommitments(client lnrpc.LightningClient, return nil, errors.New("channel not found") } + +var listSweepsCommand = cli.Command{ + Name: "listsweeps", + Category: "On-chain", + Usage: "Lists all sweeps that have been published by our node.", + Flags: []cli.Flag{ + cli.BoolFlag{ + Name: "verbose", + Usage: "lookup full transaction", + }, + }, + Description: ` + Get a list of the hex-encoded transaction ids of every sweep that our + node has published. Note that these sweeps may not be confirmed on chain + yet, as we store them on transaction broadcast, not confirmation. + + If the verbose flag is set, the full set of transactions will be + returned, otherwise only the sweep transaction ids will be returned. + `, + Action: actionDecorator(listSweeps), +} + +func listSweeps(ctx *cli.Context) error { + client, cleanUp := getWalletClient(ctx) + defer cleanUp() + + resp, err := client.ListSweeps( + context.Background(), &walletrpc.ListSweepsRequest{ + Verbose: ctx.IsSet("verbose"), + }, + ) + if err != nil { + return err + } + + printJSON(resp) + + return nil +} diff --git a/lnrpc/rpc_utils.go b/lnrpc/rpc_utils.go new file mode 100644 index 00000000..764c888b --- /dev/null +++ b/lnrpc/rpc_utils.go @@ -0,0 +1,53 @@ +package lnrpc + +import ( + "encoding/hex" + "sort" + + "github.com/lightningnetwork/lnd/lnwallet" +) + +// RPCTransactionDetails returns a set of rpc transaction details. +func RPCTransactionDetails(txns []*lnwallet.TransactionDetail) *TransactionDetails { + txDetails := &TransactionDetails{ + Transactions: make([]*Transaction, len(txns)), + } + + for i, tx := range txns { + var destAddresses []string + for _, destAddress := range tx.DestAddresses { + destAddresses = append(destAddresses, destAddress.EncodeAddress()) + } + + // We also get unconfirmed transactions, so BlockHash can be + // nil. + blockHash := "" + if tx.BlockHash != nil { + blockHash = tx.BlockHash.String() + } + + txDetails.Transactions[i] = &Transaction{ + TxHash: tx.Hash.String(), + Amount: int64(tx.Value), + NumConfirmations: tx.NumConfirmations, + BlockHash: blockHash, + BlockHeight: tx.BlockHeight, + TimeStamp: tx.Timestamp, + TotalFees: tx.TotalFees, + DestAddresses: destAddresses, + RawTxHex: hex.EncodeToString(tx.RawTx), + } + } + + // Sort transactions by number of confirmations rather than height so + // that unconfirmed transactions (height =0; confirmations =-1) will + // follow the most recently set of confirmed transactions. If we sort + // by height, unconfirmed transactions will follow our oldest + // transactions, because they have lower block heights. + sort.Slice(txDetails.Transactions, func(i, j int) bool { + return txDetails.Transactions[i].NumConfirmations < + txDetails.Transactions[j].NumConfirmations + }) + + return txDetails +} diff --git a/lnrpc/walletrpc/walletkit.pb.go b/lnrpc/walletrpc/walletkit.pb.go index ce1e0813..865f5e08 100644 --- a/lnrpc/walletrpc/walletkit.pb.go +++ b/lnrpc/walletrpc/walletkit.pb.go @@ -813,6 +813,171 @@ func (m *BumpFeeResponse) XXX_DiscardUnknown() { var xxx_messageInfo_BumpFeeResponse proto.InternalMessageInfo +type ListSweepsRequest struct { + // + //Retrieve the full sweep transaction details. If false, only the sweep txids + //will be returned. + Verbose bool `protobuf:"varint,1,opt,name=verbose,proto3" json:"verbose,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListSweepsRequest) Reset() { *m = ListSweepsRequest{} } +func (m *ListSweepsRequest) String() string { return proto.CompactTextString(m) } +func (*ListSweepsRequest) ProtoMessage() {} +func (*ListSweepsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_6cc6942ac78249e5, []int{14} +} + +func (m *ListSweepsRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListSweepsRequest.Unmarshal(m, b) +} +func (m *ListSweepsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListSweepsRequest.Marshal(b, m, deterministic) +} +func (m *ListSweepsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListSweepsRequest.Merge(m, src) +} +func (m *ListSweepsRequest) XXX_Size() int { + return xxx_messageInfo_ListSweepsRequest.Size(m) +} +func (m *ListSweepsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ListSweepsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ListSweepsRequest proto.InternalMessageInfo + +func (m *ListSweepsRequest) GetVerbose() bool { + if m != nil { + return m.Verbose + } + return false +} + +type ListSweepsResponse struct { + // Types that are valid to be assigned to Sweeps: + // *ListSweepsResponse_TransactionDetails + // *ListSweepsResponse_TransactionIds + Sweeps isListSweepsResponse_Sweeps `protobuf_oneof:"sweeps"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListSweepsResponse) Reset() { *m = ListSweepsResponse{} } +func (m *ListSweepsResponse) String() string { return proto.CompactTextString(m) } +func (*ListSweepsResponse) ProtoMessage() {} +func (*ListSweepsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_6cc6942ac78249e5, []int{15} +} + +func (m *ListSweepsResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListSweepsResponse.Unmarshal(m, b) +} +func (m *ListSweepsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListSweepsResponse.Marshal(b, m, deterministic) +} +func (m *ListSweepsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListSweepsResponse.Merge(m, src) +} +func (m *ListSweepsResponse) XXX_Size() int { + return xxx_messageInfo_ListSweepsResponse.Size(m) +} +func (m *ListSweepsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ListSweepsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ListSweepsResponse proto.InternalMessageInfo + +type isListSweepsResponse_Sweeps interface { + isListSweepsResponse_Sweeps() +} + +type ListSweepsResponse_TransactionDetails struct { + TransactionDetails *lnrpc.TransactionDetails `protobuf:"bytes,1,opt,name=transaction_details,json=transactionDetails,proto3,oneof"` +} + +type ListSweepsResponse_TransactionIds struct { + TransactionIds *ListSweepsResponse_TransactionIDs `protobuf:"bytes,2,opt,name=transaction_ids,json=transactionIds,proto3,oneof"` +} + +func (*ListSweepsResponse_TransactionDetails) isListSweepsResponse_Sweeps() {} + +func (*ListSweepsResponse_TransactionIds) isListSweepsResponse_Sweeps() {} + +func (m *ListSweepsResponse) GetSweeps() isListSweepsResponse_Sweeps { + if m != nil { + return m.Sweeps + } + return nil +} + +func (m *ListSweepsResponse) GetTransactionDetails() *lnrpc.TransactionDetails { + if x, ok := m.GetSweeps().(*ListSweepsResponse_TransactionDetails); ok { + return x.TransactionDetails + } + return nil +} + +func (m *ListSweepsResponse) GetTransactionIds() *ListSweepsResponse_TransactionIDs { + if x, ok := m.GetSweeps().(*ListSweepsResponse_TransactionIds); ok { + return x.TransactionIds + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*ListSweepsResponse) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*ListSweepsResponse_TransactionDetails)(nil), + (*ListSweepsResponse_TransactionIds)(nil), + } +} + +type ListSweepsResponse_TransactionIDs struct { + // + //Reversed, hex-encoded string representing the transaction ids of the + //sweeps that our node has broadcast. Note that these transactions may + //not have confirmed yet, we record sweeps on broadcast, not confirmation. + TransactionIds []string `protobuf:"bytes,1,rep,name=transaction_ids,json=transactionIds,proto3" json:"transaction_ids,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListSweepsResponse_TransactionIDs) Reset() { *m = ListSweepsResponse_TransactionIDs{} } +func (m *ListSweepsResponse_TransactionIDs) String() string { return proto.CompactTextString(m) } +func (*ListSweepsResponse_TransactionIDs) ProtoMessage() {} +func (*ListSweepsResponse_TransactionIDs) Descriptor() ([]byte, []int) { + return fileDescriptor_6cc6942ac78249e5, []int{15, 0} +} + +func (m *ListSweepsResponse_TransactionIDs) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListSweepsResponse_TransactionIDs.Unmarshal(m, b) +} +func (m *ListSweepsResponse_TransactionIDs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListSweepsResponse_TransactionIDs.Marshal(b, m, deterministic) +} +func (m *ListSweepsResponse_TransactionIDs) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListSweepsResponse_TransactionIDs.Merge(m, src) +} +func (m *ListSweepsResponse_TransactionIDs) XXX_Size() int { + return xxx_messageInfo_ListSweepsResponse_TransactionIDs.Size(m) +} +func (m *ListSweepsResponse_TransactionIDs) XXX_DiscardUnknown() { + xxx_messageInfo_ListSweepsResponse_TransactionIDs.DiscardUnknown(m) +} + +var xxx_messageInfo_ListSweepsResponse_TransactionIDs proto.InternalMessageInfo + +func (m *ListSweepsResponse_TransactionIDs) GetTransactionIds() []string { + if m != nil { + return m.TransactionIds + } + return nil +} + func init() { proto.RegisterEnum("walletrpc.WitnessType", WitnessType_name, WitnessType_value) proto.RegisterType((*KeyReq)(nil), "walletrpc.KeyReq") @@ -829,78 +994,89 @@ func init() { proto.RegisterType((*PendingSweepsResponse)(nil), "walletrpc.PendingSweepsResponse") proto.RegisterType((*BumpFeeRequest)(nil), "walletrpc.BumpFeeRequest") proto.RegisterType((*BumpFeeResponse)(nil), "walletrpc.BumpFeeResponse") + proto.RegisterType((*ListSweepsRequest)(nil), "walletrpc.ListSweepsRequest") + proto.RegisterType((*ListSweepsResponse)(nil), "walletrpc.ListSweepsResponse") + proto.RegisterType((*ListSweepsResponse_TransactionIDs)(nil), "walletrpc.ListSweepsResponse.TransactionIDs") } func init() { proto.RegisterFile("walletrpc/walletkit.proto", fileDescriptor_6cc6942ac78249e5) } var fileDescriptor_6cc6942ac78249e5 = []byte{ - // 1055 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0x6b, 0x6f, 0xe2, 0x46, - 0x14, 0x2d, 0x21, 0x21, 0x70, 0x81, 0xc4, 0x19, 0xf2, 0xf0, 0xb2, 0xd9, 0x86, 0xba, 0x0f, 0xa1, - 0x3e, 0x40, 0x4d, 0xd4, 0xaa, 0x0f, 0xa9, 0x2a, 0x21, 0x8e, 0x88, 0x20, 0x98, 0xda, 0xce, 0x46, - 0x5b, 0x55, 0x1a, 0x39, 0x30, 0x21, 0x56, 0xc0, 0xf6, 0x8e, 0x87, 0x02, 0x7f, 0xa4, 0xd2, 0xfe, - 0x95, 0xfe, 0xba, 0xca, 0xe3, 0x07, 0x63, 0x68, 0x2a, 0xf5, 0x53, 0xf0, 0x39, 0xe7, 0x1e, 0xdf, - 0xb9, 0x73, 0x7d, 0x6f, 0xe0, 0xd5, 0xdc, 0x9a, 0x4c, 0x08, 0xa3, 0xde, 0xb0, 0x19, 0xfe, 0x7a, - 0xb6, 0x59, 0xc3, 0xa3, 0x2e, 0x73, 0x51, 0x21, 0xa1, 0xaa, 0x05, 0xea, 0x0d, 0x43, 0xb4, 0x7a, - 0xe8, 0xdb, 0x63, 0x27, 0x90, 0x07, 0x7f, 0x09, 0x0d, 0x51, 0xe5, 0x37, 0xc8, 0x75, 0xc9, 0x52, - 0x27, 0xef, 0x51, 0x1d, 0xa4, 0x67, 0xb2, 0xc4, 0x8f, 0xb6, 0x33, 0x26, 0x14, 0x7b, 0xd4, 0x76, - 0x98, 0x9c, 0xa9, 0x65, 0xea, 0x3b, 0xfa, 0xde, 0x33, 0x59, 0x5e, 0x73, 0x78, 0x10, 0xa0, 0xe8, - 0x0d, 0x00, 0x57, 0x5a, 0x53, 0x7b, 0xb2, 0x94, 0xb7, 0xb8, 0xa6, 0x10, 0x68, 0x38, 0xa0, 0x94, - 0xa1, 0xd8, 0x1a, 0x8d, 0xa8, 0x4e, 0xde, 0xcf, 0x88, 0xcf, 0x14, 0x05, 0x4a, 0xe1, 0xa3, 0xef, - 0xb9, 0x8e, 0x4f, 0x10, 0x82, 0x6d, 0x6b, 0x34, 0xa2, 0xdc, 0xbb, 0xa0, 0xf3, 0xdf, 0xca, 0x67, - 0x50, 0x34, 0xa9, 0xe5, 0xf8, 0xd6, 0x90, 0xd9, 0xae, 0x83, 0x8e, 0x20, 0xc7, 0x16, 0xf8, 0x89, - 0x2c, 0xb8, 0xa8, 0xa4, 0xef, 0xb0, 0x45, 0x87, 0x2c, 0x94, 0xef, 0x61, 0x7f, 0x30, 0x7b, 0x98, - 0xd8, 0xfe, 0x53, 0x62, 0xf6, 0x29, 0x94, 0xbd, 0x10, 0xc2, 0x84, 0x52, 0x37, 0x76, 0x2d, 0x45, - 0xa0, 0x1a, 0x60, 0xca, 0x1f, 0x80, 0x0c, 0xe2, 0x8c, 0xb4, 0x19, 0xf3, 0x66, 0xcc, 0x8f, 0xf2, - 0x42, 0xa7, 0x00, 0xbe, 0xc5, 0xb0, 0x47, 0x28, 0x7e, 0x9e, 0xf3, 0xb8, 0xac, 0x9e, 0xf7, 0x2d, - 0x36, 0x20, 0xb4, 0x3b, 0x47, 0x75, 0xd8, 0x75, 0x43, 0xbd, 0xbc, 0x55, 0xcb, 0xd6, 0x8b, 0xe7, - 0x7b, 0x8d, 0xa8, 0x7e, 0x0d, 0x73, 0xa1, 0xcd, 0x98, 0x1e, 0xd3, 0xca, 0xd7, 0x50, 0x49, 0xb9, - 0x47, 0x99, 0x1d, 0x41, 0x8e, 0x5a, 0x73, 0xcc, 0x92, 0x33, 0x50, 0x6b, 0x6e, 0x2e, 0x94, 0xef, - 0x00, 0xa9, 0x3e, 0xb3, 0xa7, 0x16, 0x23, 0xd7, 0x84, 0xc4, 0xb9, 0x9c, 0x41, 0x71, 0xe8, 0x3a, - 0x8f, 0x98, 0x59, 0x74, 0x4c, 0xe2, 0xb2, 0x43, 0x00, 0x99, 0x1c, 0x51, 0x2e, 0xa0, 0x92, 0x0a, - 0x8b, 0x5e, 0xf2, 0x9f, 0x67, 0x50, 0x3e, 0x64, 0xa1, 0x34, 0x20, 0xce, 0xc8, 0x76, 0xc6, 0xc6, - 0x9c, 0x10, 0x0f, 0x7d, 0x05, 0xf9, 0x20, 0x6b, 0x37, 0xbe, 0xda, 0xe2, 0xf9, 0x7e, 0x63, 0xc2, - 0xcf, 0xa4, 0xcd, 0xd8, 0x20, 0x80, 0xf5, 0x44, 0x80, 0x7e, 0x84, 0xd2, 0xdc, 0x66, 0x0e, 0xf1, - 0x7d, 0xcc, 0x96, 0x1e, 0xe1, 0xf7, 0xbc, 0x77, 0x7e, 0xdc, 0x48, 0x9a, 0xab, 0x71, 0x1f, 0xd2, - 0xe6, 0xd2, 0x23, 0x7a, 0x71, 0xbe, 0x7a, 0x08, 0x1a, 0xc4, 0x9a, 0xba, 0x33, 0x87, 0x61, 0xdf, - 0x62, 0x72, 0xb6, 0x96, 0xa9, 0x97, 0xf5, 0x42, 0x88, 0x18, 0x16, 0x43, 0x35, 0x28, 0xc5, 0x59, - 0x3f, 0x2c, 0x19, 0x91, 0xb7, 0xb9, 0x00, 0xc2, 0xbc, 0x2f, 0x97, 0x8c, 0xa0, 0x6f, 0x00, 0x3d, - 0x50, 0xd7, 0x1a, 0x0d, 0x2d, 0x9f, 0x61, 0x8b, 0x31, 0x32, 0xf5, 0x98, 0x2f, 0xef, 0x70, 0xdd, - 0x41, 0xc2, 0xb4, 0x22, 0x02, 0x9d, 0xc3, 0x91, 0x43, 0x16, 0x0c, 0xaf, 0x62, 0x9e, 0x88, 0x3d, - 0x7e, 0x62, 0x72, 0x8e, 0x47, 0x54, 0x02, 0xf2, 0x32, 0xe6, 0x3a, 0x9c, 0x0a, 0x62, 0x68, 0x58, - 0x7d, 0x32, 0xc2, 0x62, 0xf1, 0xf3, 0x61, 0x4c, 0x42, 0xb6, 0x93, 0x5b, 0x40, 0x17, 0x70, 0xbc, - 0x8a, 0x49, 0x1d, 0xa1, 0xb0, 0x16, 0x64, 0xac, 0xce, 0x72, 0x08, 0x3b, 0x8f, 0x2e, 0x1d, 0x12, - 0x79, 0xb7, 0x96, 0xa9, 0xe7, 0xf5, 0xf0, 0x41, 0x39, 0x86, 0x43, 0xf1, 0x6a, 0xe2, 0xae, 0x54, - 0xee, 0xe1, 0x68, 0x0d, 0x8f, 0xae, 0xfa, 0x17, 0xd8, 0xf3, 0x42, 0x02, 0xfb, 0x9c, 0x91, 0x33, - 0xbc, 0x2f, 0x4f, 0x84, 0x0b, 0x11, 0x23, 0xf5, 0xb2, 0x27, 0xfa, 0x28, 0x7f, 0x65, 0x60, 0xef, - 0x72, 0x36, 0xf5, 0x84, 0xae, 0xfb, 0x5f, 0xed, 0x70, 0x06, 0xc5, 0xb0, 0x40, 0xbc, 0x58, 0xbc, - 0x1b, 0xca, 0x3a, 0x84, 0x50, 0x50, 0xa2, 0x8d, 0x5b, 0xcd, 0x6e, 0xdc, 0x6a, 0x52, 0x89, 0x6d, - 0xb1, 0x12, 0x07, 0xb0, 0x9f, 0xe4, 0x15, 0x9e, 0xf5, 0xcb, 0x0f, 0x59, 0x28, 0x0a, 0xcd, 0x85, - 0x2a, 0xb0, 0x7f, 0xd7, 0xef, 0xf6, 0xb5, 0xfb, 0x3e, 0xbe, 0xbf, 0x31, 0xfb, 0xaa, 0x61, 0x48, - 0x1f, 0x21, 0x19, 0x0e, 0xdb, 0xda, 0xed, 0xed, 0x8d, 0x79, 0xab, 0xf6, 0x4d, 0x6c, 0xde, 0xdc, - 0xaa, 0xb8, 0xa7, 0xb5, 0xbb, 0x52, 0x06, 0x9d, 0x40, 0x45, 0x60, 0xfa, 0x1a, 0xbe, 0x52, 0x7b, - 0xad, 0x77, 0xd2, 0x16, 0x3a, 0x82, 0x03, 0x81, 0xd0, 0xd5, 0xb7, 0x5a, 0x57, 0x95, 0xb2, 0x81, - 0xbe, 0x63, 0xf6, 0xda, 0x58, 0xbb, 0xbe, 0x56, 0x75, 0xf5, 0x2a, 0x26, 0xb6, 0x83, 0x57, 0x70, - 0xa2, 0xd5, 0x6e, 0xab, 0x03, 0x73, 0xc5, 0xec, 0xa0, 0xcf, 0xe1, 0x93, 0x54, 0x48, 0xf0, 0x7a, - 0xed, 0xce, 0xc4, 0x86, 0xda, 0xd6, 0xfa, 0x57, 0xb8, 0xa7, 0xbe, 0x55, 0x7b, 0x52, 0x0e, 0x7d, - 0x01, 0x4a, 0xda, 0xc0, 0xb8, 0x6b, 0xb7, 0x55, 0xc3, 0x48, 0xeb, 0x76, 0xd1, 0x19, 0xbc, 0x5e, - 0xcb, 0xe0, 0x56, 0x33, 0xd5, 0xd8, 0x55, 0xca, 0xa3, 0x1a, 0x9c, 0xae, 0x67, 0xc2, 0x15, 0x91, - 0x9f, 0x54, 0x40, 0xa7, 0x20, 0x73, 0x85, 0xe8, 0x1c, 0xe7, 0x0b, 0xe8, 0x10, 0xa4, 0xa8, 0x72, - 0xb8, 0xab, 0xbe, 0xc3, 0x9d, 0x96, 0xd1, 0x91, 0x8a, 0xe8, 0x35, 0x9c, 0xf4, 0x55, 0x23, 0xb0, - 0xdb, 0x20, 0x4b, 0x6b, 0xc5, 0x6a, 0xf5, 0xdb, 0x1d, 0x4d, 0x97, 0xca, 0xe7, 0x7f, 0x6f, 0x43, - 0xe1, 0x9e, 0x77, 0x5c, 0xd7, 0x66, 0xe8, 0x27, 0x28, 0x5f, 0x11, 0x6a, 0xff, 0x49, 0xfa, 0x64, - 0xc1, 0xba, 0x64, 0x89, 0x0e, 0x84, 0x76, 0x0c, 0x17, 0x4b, 0xf5, 0x38, 0x99, 0x9c, 0x5d, 0xb2, - 0xbc, 0x22, 0xfe, 0x90, 0xda, 0x1e, 0x73, 0x29, 0xfa, 0x01, 0x0a, 0x61, 0x6c, 0x10, 0x57, 0x11, - 0x45, 0x3d, 0x77, 0x68, 0x31, 0x97, 0xbe, 0x18, 0xf9, 0x33, 0xe4, 0x83, 0xf7, 0x05, 0x6b, 0x05, - 0x89, 0x03, 0x49, 0x58, 0x3b, 0xd5, 0x93, 0x0d, 0x3c, 0xfa, 0x90, 0x3a, 0x80, 0xa2, 0x2d, 0x22, - 0xae, 0x1c, 0xd1, 0x46, 0xc0, 0xab, 0x55, 0xf1, 0xf3, 0x5a, 0x5b, 0x3e, 0x3d, 0x28, 0x0a, 0x93, - 0x1f, 0xbd, 0x11, 0xa4, 0x9b, 0xfb, 0xa6, 0xfa, 0xf1, 0x4b, 0xf4, 0xca, 0x4d, 0x18, 0xf1, 0x29, - 0xb7, 0xcd, 0x8d, 0x91, 0x72, 0xfb, 0xb7, 0xcd, 0xa0, 0x43, 0x39, 0x35, 0x47, 0xd0, 0xd9, 0x0b, - 0x73, 0x22, 0xc9, 0xaf, 0xf6, 0xb2, 0x20, 0xf2, 0xfc, 0x15, 0x76, 0xa3, 0x2f, 0x15, 0xbd, 0x12, - 0xc4, 0xe9, 0xa9, 0x92, 0xaa, 0xd8, 0xda, 0x87, 0x7d, 0xf9, 0xed, 0xef, 0xcd, 0xb1, 0xcd, 0x9e, - 0x66, 0x0f, 0x8d, 0xa1, 0x3b, 0x6d, 0x4e, 0x82, 0x41, 0xec, 0xd8, 0xce, 0xd8, 0x21, 0x6c, 0xee, - 0xd2, 0xe7, 0xe6, 0xc4, 0x19, 0x35, 0xf9, 0x00, 0x6a, 0x26, 0x16, 0x0f, 0x39, 0xfe, 0x7f, 0xca, - 0xc5, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf1, 0x3f, 0xcd, 0xa5, 0xf0, 0x08, 0x00, 0x00, + // 1180 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0x6d, 0x6f, 0xe2, 0x46, + 0x10, 0x3e, 0x42, 0x42, 0x60, 0x78, 0x09, 0x59, 0xf2, 0xe2, 0xe3, 0x72, 0x0d, 0x75, 0xdf, 0xa2, + 0xf6, 0x8e, 0xa8, 0x39, 0xb5, 0xea, 0xb5, 0x52, 0xd5, 0x04, 0x1c, 0x11, 0x41, 0x70, 0x6a, 0xfb, + 0x2e, 0xba, 0xaa, 0xd2, 0xca, 0xe0, 0x0d, 0xb1, 0x02, 0xb6, 0x6f, 0xbd, 0x1c, 0xf0, 0xad, 0xdf, + 0xfa, 0x0f, 0x2a, 0xdd, 0xbf, 0xad, 0xbc, 0x7e, 0x61, 0x0d, 0xcd, 0x49, 0xfd, 0x14, 0x76, 0x9e, + 0x67, 0x9e, 0x9d, 0x9d, 0x19, 0xcf, 0x04, 0x9e, 0xce, 0xcc, 0xf1, 0x98, 0x30, 0xea, 0x0d, 0x4f, + 0xc3, 0x5f, 0x0f, 0x36, 0x6b, 0x7a, 0xd4, 0x65, 0x2e, 0x2a, 0x24, 0x50, 0xbd, 0x40, 0xbd, 0x61, + 0x68, 0xad, 0xef, 0xf9, 0xf6, 0xc8, 0x09, 0xe8, 0xc1, 0x5f, 0x42, 0x43, 0xab, 0xfc, 0x3b, 0xe4, + 0xba, 0x64, 0xa1, 0x91, 0xf7, 0xe8, 0x04, 0xaa, 0x0f, 0x64, 0x81, 0xef, 0x6c, 0x67, 0x44, 0x28, + 0xf6, 0xa8, 0xed, 0x30, 0x29, 0xd3, 0xc8, 0x9c, 0x6c, 0x69, 0x95, 0x07, 0xb2, 0xb8, 0xe4, 0xe6, + 0x9b, 0xc0, 0x8a, 0x9e, 0x03, 0x70, 0xa6, 0x39, 0xb1, 0xc7, 0x0b, 0x69, 0x83, 0x73, 0x0a, 0x01, + 0x87, 0x1b, 0xe4, 0x32, 0x14, 0xcf, 0x2d, 0x8b, 0x6a, 0xe4, 0xfd, 0x94, 0xf8, 0x4c, 0x96, 0xa1, + 0x14, 0x1e, 0x7d, 0xcf, 0x75, 0x7c, 0x82, 0x10, 0x6c, 0x9a, 0x96, 0x45, 0xb9, 0x76, 0x41, 0xe3, + 0xbf, 0xe5, 0x2f, 0xa1, 0x68, 0x50, 0xd3, 0xf1, 0xcd, 0x21, 0xb3, 0x5d, 0x07, 0xed, 0x43, 0x8e, + 0xcd, 0xf1, 0x3d, 0x99, 0x73, 0x52, 0x49, 0xdb, 0x62, 0xf3, 0x0e, 0x99, 0xcb, 0x3f, 0xc2, 0xce, + 0xcd, 0x74, 0x30, 0xb6, 0xfd, 0xfb, 0x44, 0xec, 0x0b, 0x28, 0x7b, 0xa1, 0x09, 0x13, 0x4a, 0xdd, + 0x58, 0xb5, 0x14, 0x19, 0x95, 0xc0, 0x26, 0xff, 0x09, 0x48, 0x27, 0x8e, 0xa5, 0x4e, 0x99, 0x37, + 0x65, 0x7e, 0x14, 0x17, 0x3a, 0x02, 0xf0, 0x4d, 0x86, 0x3d, 0x42, 0xf1, 0xc3, 0x8c, 0xfb, 0x65, + 0xb5, 0xbc, 0x6f, 0xb2, 0x1b, 0x42, 0xbb, 0x33, 0x74, 0x02, 0xdb, 0x6e, 0xc8, 0x97, 0x36, 0x1a, + 0xd9, 0x93, 0xe2, 0x59, 0xa5, 0x19, 0xe5, 0xaf, 0x69, 0xcc, 0xd5, 0x29, 0xd3, 0x62, 0x58, 0x7e, + 0x01, 0xb5, 0x94, 0x7a, 0x14, 0xd9, 0x3e, 0xe4, 0xa8, 0x39, 0xc3, 0x2c, 0x79, 0x03, 0x35, 0x67, + 0xc6, 0x5c, 0xfe, 0x01, 0x90, 0xe2, 0x33, 0x7b, 0x62, 0x32, 0x72, 0x49, 0x48, 0x1c, 0xcb, 0x31, + 0x14, 0x87, 0xae, 0x73, 0x87, 0x99, 0x49, 0x47, 0x24, 0x4e, 0x3b, 0x04, 0x26, 0x83, 0x5b, 0xe4, + 0x57, 0x50, 0x4b, 0xb9, 0x45, 0x97, 0x7c, 0xf2, 0x0d, 0xf2, 0xc7, 0x2c, 0x94, 0x6e, 0x88, 0x63, + 0xd9, 0xce, 0x48, 0x9f, 0x11, 0xe2, 0xa1, 0xef, 0x20, 0x1f, 0x44, 0xed, 0xc6, 0xa5, 0x2d, 0x9e, + 0xed, 0x34, 0xc7, 0xfc, 0x4d, 0xea, 0x94, 0xdd, 0x04, 0x66, 0x2d, 0x21, 0xa0, 0xd7, 0x50, 0x9a, + 0xd9, 0xcc, 0x21, 0xbe, 0x8f, 0xd9, 0xc2, 0x23, 0xbc, 0xce, 0x95, 0xb3, 0x83, 0x66, 0xd2, 0x5c, + 0xcd, 0xdb, 0x10, 0x36, 0x16, 0x1e, 0xd1, 0x8a, 0xb3, 0xe5, 0x21, 0x68, 0x10, 0x73, 0xe2, 0x4e, + 0x1d, 0x86, 0x7d, 0x93, 0x49, 0xd9, 0x46, 0xe6, 0xa4, 0xac, 0x15, 0x42, 0x8b, 0x6e, 0x32, 0xd4, + 0x80, 0x52, 0x1c, 0xf5, 0x60, 0xc1, 0x88, 0xb4, 0xc9, 0x09, 0x10, 0xc6, 0x7d, 0xb1, 0x60, 0x04, + 0xbd, 0x04, 0x34, 0xa0, 0xae, 0x69, 0x0d, 0x4d, 0x9f, 0x61, 0x93, 0x31, 0x32, 0xf1, 0x98, 0x2f, + 0x6d, 0x71, 0xde, 0x6e, 0x82, 0x9c, 0x47, 0x00, 0x3a, 0x83, 0x7d, 0x87, 0xcc, 0x19, 0x5e, 0xfa, + 0xdc, 0x13, 0x7b, 0x74, 0xcf, 0xa4, 0x1c, 0xf7, 0xa8, 0x05, 0xe0, 0x45, 0x8c, 0x75, 0x38, 0x14, + 0xf8, 0xd0, 0x30, 0xfb, 0xc4, 0xc2, 0x62, 0xf2, 0xf3, 0xa1, 0x4f, 0x02, 0xb6, 0x92, 0x2a, 0xa0, + 0x57, 0x70, 0xb0, 0xf4, 0x49, 0x3d, 0xa1, 0xb0, 0xe2, 0xa4, 0x2f, 0xdf, 0xb2, 0x07, 0x5b, 0x77, + 0x2e, 0x1d, 0x12, 0x69, 0xbb, 0x91, 0x39, 0xc9, 0x6b, 0xe1, 0x41, 0x3e, 0x80, 0x3d, 0xb1, 0x34, + 0x71, 0x57, 0xca, 0xb7, 0xb0, 0xbf, 0x62, 0x8f, 0x4a, 0xfd, 0x2b, 0x54, 0xbc, 0x10, 0xc0, 0x3e, + 0x47, 0xa4, 0x0c, 0xef, 0xcb, 0x43, 0xa1, 0x20, 0xa2, 0xa7, 0x56, 0xf6, 0x44, 0x1d, 0xf9, 0x9f, + 0x0c, 0x54, 0x2e, 0xa6, 0x13, 0x4f, 0xe8, 0xba, 0xff, 0xd5, 0x0e, 0xc7, 0x50, 0x0c, 0x13, 0xc4, + 0x93, 0xc5, 0xbb, 0xa1, 0xac, 0x41, 0x68, 0x0a, 0x52, 0xb4, 0x56, 0xd5, 0xec, 0x5a, 0x55, 0x93, + 0x4c, 0x6c, 0x8a, 0x99, 0xd8, 0x85, 0x9d, 0x24, 0xae, 0xf0, 0xad, 0xf2, 0x4b, 0xd8, 0xed, 0xd9, + 0x3e, 0x4b, 0x65, 0x06, 0x49, 0xb0, 0xfd, 0x81, 0xd0, 0x81, 0xeb, 0x13, 0x1e, 0x6c, 0x5e, 0x8b, + 0x8f, 0xf2, 0x5f, 0x1b, 0x80, 0x44, 0x7e, 0x94, 0xb1, 0x1e, 0xd4, 0xd8, 0x72, 0xa8, 0x60, 0x8b, + 0x30, 0xd3, 0x1e, 0xfb, 0xd1, 0x4b, 0x9f, 0x46, 0x2f, 0x15, 0xc6, 0x4e, 0x3b, 0x24, 0x74, 0x9e, + 0x68, 0x88, 0xad, 0x59, 0xd1, 0x2d, 0xec, 0x88, 0x6a, 0xb6, 0xe5, 0xf3, 0x1c, 0x14, 0xcf, 0x5e, + 0x08, 0x05, 0x58, 0x8f, 0x42, 0xbc, 0xe0, 0xaa, 0x1d, 0x88, 0x57, 0x04, 0x99, 0x2b, 0xcb, 0xaf, + 0xbf, 0x86, 0x4a, 0x9a, 0x83, 0xbe, 0x59, 0xbf, 0x2a, 0xa8, 0x75, 0x61, 0xd5, 0xf5, 0x22, 0x0f, + 0xb9, 0xb0, 0x17, 0xbe, 0xfd, 0x98, 0x85, 0xa2, 0xf0, 0x39, 0xa2, 0x1a, 0xec, 0xbc, 0xe9, 0x77, + 0xfb, 0xea, 0x6d, 0x1f, 0xdf, 0x5e, 0x19, 0x7d, 0x45, 0xd7, 0xab, 0x4f, 0x90, 0x04, 0x7b, 0x2d, + 0xf5, 0xfa, 0xfa, 0xca, 0xb8, 0x56, 0xfa, 0x06, 0x36, 0xae, 0xae, 0x15, 0xdc, 0x53, 0x5b, 0xdd, + 0x6a, 0x06, 0x1d, 0x42, 0x4d, 0x40, 0xfa, 0x2a, 0x6e, 0x2b, 0xbd, 0xf3, 0x77, 0xd5, 0x0d, 0xb4, + 0x0f, 0xbb, 0x02, 0xa0, 0x29, 0x6f, 0xd5, 0xae, 0x52, 0xcd, 0x06, 0xfc, 0x8e, 0xd1, 0x6b, 0x61, + 0xf5, 0xf2, 0x52, 0xd1, 0x94, 0x76, 0x0c, 0x6c, 0x06, 0x57, 0x70, 0xe0, 0xbc, 0xd5, 0x52, 0x6e, + 0x8c, 0x25, 0xb2, 0x85, 0xbe, 0x82, 0xcf, 0x53, 0x2e, 0xc1, 0xf5, 0xea, 0x1b, 0x03, 0xeb, 0x4a, + 0x4b, 0xed, 0xb7, 0x71, 0x4f, 0x79, 0xab, 0xf4, 0xaa, 0x39, 0xf4, 0x35, 0xc8, 0x69, 0x01, 0xfd, + 0x4d, 0xab, 0xa5, 0xe8, 0x7a, 0x9a, 0xb7, 0x8d, 0x8e, 0xe1, 0xd9, 0x4a, 0x04, 0xd7, 0xaa, 0xa1, + 0xc4, 0xaa, 0xd5, 0x3c, 0x6a, 0xc0, 0xd1, 0x6a, 0x24, 0x9c, 0x11, 0xe9, 0x55, 0x0b, 0xe8, 0x08, + 0x24, 0xce, 0x10, 0x95, 0xe3, 0x78, 0x01, 0xed, 0x41, 0x35, 0xca, 0x1c, 0xee, 0x2a, 0xef, 0x70, + 0xe7, 0x5c, 0xef, 0x54, 0x8b, 0xe8, 0x19, 0x1c, 0xf6, 0x15, 0x3d, 0x90, 0x5b, 0x03, 0x4b, 0x2b, + 0xc9, 0x3a, 0xef, 0xb7, 0x3a, 0xaa, 0x56, 0x2d, 0x9f, 0xfd, 0xbd, 0x05, 0x85, 0x5b, 0xde, 0x22, + 0x5d, 0x9b, 0xa1, 0x9f, 0xa1, 0xdc, 0x26, 0xd4, 0xfe, 0x40, 0xfa, 0x64, 0xce, 0xba, 0x64, 0x81, + 0x76, 0x85, 0xfe, 0x09, 0x57, 0x71, 0xfd, 0x20, 0xd9, 0x35, 0x5d, 0xb2, 0x68, 0x13, 0x7f, 0x48, + 0x6d, 0x8f, 0xb9, 0x14, 0xfd, 0x04, 0x85, 0xd0, 0x37, 0xf0, 0xab, 0x89, 0xa4, 0x9e, 0x3b, 0x34, + 0x99, 0x4b, 0x1f, 0xf5, 0xfc, 0x05, 0xf2, 0xc1, 0x7d, 0xc1, 0x22, 0x46, 0xe2, 0x08, 0x17, 0x16, + 0x75, 0xfd, 0x70, 0xcd, 0x1e, 0x7d, 0x48, 0x1d, 0x40, 0xd1, 0xde, 0x15, 0x97, 0xb4, 0x28, 0x23, + 0xd8, 0xeb, 0x75, 0x71, 0x20, 0xad, 0xac, 0xeb, 0x1e, 0x14, 0x85, 0x5d, 0x89, 0x9e, 0x0b, 0xd4, + 0xf5, 0x0d, 0x5d, 0xff, 0xec, 0x31, 0x78, 0xa9, 0x26, 0x2c, 0xc5, 0x94, 0xda, 0xfa, 0x8e, 0x4d, + 0xa9, 0xfd, 0xd7, 0x2e, 0xd5, 0xa0, 0x9c, 0x9a, 0xbc, 0xe8, 0xf8, 0x91, 0xc9, 0x9a, 0xc4, 0xd7, + 0x78, 0x9c, 0x10, 0x69, 0xfe, 0x06, 0xdb, 0xd1, 0x6c, 0x43, 0x4f, 0x05, 0x72, 0x7a, 0x0e, 0xa7, + 0x32, 0xb6, 0x32, 0x0a, 0x51, 0x17, 0x60, 0x39, 0x54, 0xd0, 0xd1, 0x23, 0xb3, 0x26, 0xd4, 0x79, + 0xfe, 0xc9, 0x49, 0x24, 0x3f, 0xb9, 0xf8, 0xfe, 0x8f, 0xd3, 0x91, 0xcd, 0xee, 0xa7, 0x83, 0xe6, + 0xd0, 0x9d, 0x9c, 0x8e, 0x83, 0x3d, 0xe8, 0xd8, 0xce, 0xc8, 0x21, 0x6c, 0xe6, 0xd2, 0x87, 0xd3, + 0xb1, 0x63, 0x9d, 0xf2, 0xa9, 0x78, 0x9a, 0xe8, 0x0c, 0x72, 0xfc, 0xdf, 0xc4, 0x57, 0xff, 0x06, + 0x00, 0x00, 0xff, 0xff, 0xe6, 0xc9, 0x1c, 0x56, 0x6f, 0x0a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -980,6 +1156,11 @@ type WalletKitClient interface { //fee preference being provided. For now, the responsibility of ensuring that //the new fee preference is sufficient is delegated to the user. BumpFee(ctx context.Context, in *BumpFeeRequest, opts ...grpc.CallOption) (*BumpFeeResponse, error) + //* + //ListSweeps returns a list of the sweep transactions our node has produced. + //Note that these sweeps may not be confirmed yet, as we record sweeps on + //broadcast, not confirmation. + ListSweeps(ctx context.Context, in *ListSweepsRequest, opts ...grpc.CallOption) (*ListSweepsResponse, error) } type walletKitClient struct { @@ -1062,6 +1243,15 @@ func (c *walletKitClient) BumpFee(ctx context.Context, in *BumpFeeRequest, opts return out, nil } +func (c *walletKitClient) ListSweeps(ctx context.Context, in *ListSweepsRequest, opts ...grpc.CallOption) (*ListSweepsResponse, error) { + out := new(ListSweepsResponse) + err := c.cc.Invoke(ctx, "/walletrpc.WalletKit/ListSweeps", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // WalletKitServer is the server API for WalletKit service. type WalletKitServer interface { //* @@ -1129,6 +1319,11 @@ type WalletKitServer interface { //fee preference being provided. For now, the responsibility of ensuring that //the new fee preference is sufficient is delegated to the user. BumpFee(context.Context, *BumpFeeRequest) (*BumpFeeResponse, error) + //* + //ListSweeps returns a list of the sweep transactions our node has produced. + //Note that these sweeps may not be confirmed yet, as we record sweeps on + //broadcast, not confirmation. + ListSweeps(context.Context, *ListSweepsRequest) (*ListSweepsResponse, error) } func RegisterWalletKitServer(s *grpc.Server, srv WalletKitServer) { @@ -1279,6 +1474,24 @@ func _WalletKit_BumpFee_Handler(srv interface{}, ctx context.Context, dec func(i return interceptor(ctx, in, info, handler) } +func _WalletKit_ListSweeps_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListSweepsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletKitServer).ListSweeps(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/walletrpc.WalletKit/ListSweeps", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletKitServer).ListSweeps(ctx, req.(*ListSweepsRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _WalletKit_serviceDesc = grpc.ServiceDesc{ ServiceName: "walletrpc.WalletKit", HandlerType: (*WalletKitServer)(nil), @@ -1315,6 +1528,10 @@ var _WalletKit_serviceDesc = grpc.ServiceDesc{ MethodName: "BumpFee", Handler: _WalletKit_BumpFee_Handler, }, + { + MethodName: "ListSweeps", + Handler: _WalletKit_ListSweeps_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "walletrpc/walletkit.proto", diff --git a/lnrpc/walletrpc/walletkit.proto b/lnrpc/walletrpc/walletkit.proto index 96f2ce06..3911f064 100644 --- a/lnrpc/walletrpc/walletkit.proto +++ b/lnrpc/walletrpc/walletkit.proto @@ -244,6 +244,31 @@ message BumpFeeRequest { message BumpFeeResponse { } + +message ListSweepsRequest { + /* + Retrieve the full sweep transaction details. If false, only the sweep txids + will be returned. + */ + bool verbose = 1; +} + +message ListSweepsResponse { + message TransactionIDs { + /* + Reversed, hex-encoded string representing the transaction ids of the + sweeps that our node has broadcast. Note that these transactions may + not have confirmed yet, we record sweeps on broadcast, not confirmation. + */ + repeated string transaction_ids = 1; + } + + oneof sweeps { + lnrpc.TransactionDetails transaction_details = 1; + TransactionIDs transaction_ids = 2; + } +} + service WalletKit { /** DeriveNextKey attempts to derive the *next* key within the key family @@ -325,4 +350,13 @@ service WalletKit { the new fee preference is sufficient is delegated to the user. */ rpc BumpFee (BumpFeeRequest) returns (BumpFeeResponse); + + + /** + ListSweeps returns a list of the sweep transactions our node has produced. + Note that these sweeps may not be confirmed yet, as we record sweeps on + broadcast, not confirmation. + */ + rpc ListSweeps (ListSweepsRequest) returns (ListSweepsResponse) {} } + diff --git a/lnrpc/walletrpc/walletkit_server.go b/lnrpc/walletrpc/walletkit_server.go index edfeb35c..12634f03 100644 --- a/lnrpc/walletrpc/walletkit_server.go +++ b/lnrpc/walletrpc/walletkit_server.go @@ -19,6 +19,7 @@ import ( "github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lnrpc/signrpc" "github.com/lightningnetwork/lnd/lnwallet" + "github.com/lightningnetwork/lnd/lnwallet/btcwallet" "github.com/lightningnetwork/lnd/lnwallet/chainfee" "github.com/lightningnetwork/lnd/sweep" "google.golang.org/grpc" @@ -88,6 +89,10 @@ var ( Entity: "onchain", Action: "write", }}, + "/walletrpc.WalletKit/ListSweeps": {{ + Entity: "onchain", + Action: "read", + }}, } // DefaultWalletKitMacFilename is the default name of the wallet kit @@ -555,3 +560,67 @@ func (w *WalletKit) BumpFee(ctx context.Context, return &BumpFeeResponse{}, nil } + +// ListSweeps returns a list of the sweeps that our node has published. +func (w *WalletKit) ListSweeps(ctx context.Context, + in *ListSweepsRequest) (*ListSweepsResponse, error) { + + sweeps, err := w.cfg.Sweeper.ListSweeps() + if err != nil { + return nil, err + } + + sweepTxns := make(map[string]bool) + + txids := make([]string, len(sweeps)) + for i, sweep := range sweeps { + sweepTxns[sweep.String()] = true + txids[i] = sweep.String() + } + + // If the caller does not want verbose output, just return the set of + // sweep txids. + if !in.Verbose { + txidResp := &ListSweepsResponse_TransactionIDs{ + TransactionIds: txids, + } + + return &ListSweepsResponse{ + Sweeps: &ListSweepsResponse_TransactionIds{ + TransactionIds: txidResp, + }, + }, nil + } + + // If the caller does want full transaction lookups, query our wallet + // for all transactions, including unconfirmed transactions. + transactions, err := w.cfg.Wallet.ListTransactionDetails( + 0, btcwallet.UnconfirmedHeight, + ) + if err != nil { + return nil, err + } + + var sweepTxDetails []*lnwallet.TransactionDetail + for _, tx := range transactions { + _, ok := sweepTxns[tx.Hash.String()] + if !ok { + continue + } + + sweepTxDetails = append(sweepTxDetails, tx) + } + + // Fail if we have not retrieved all of our sweep transactions from the + // wallet. + if len(sweepTxDetails) != len(txids) { + return nil, fmt.Errorf("not all sweeps found by list "+ + "transactions: %v, %v", len(sweepTxDetails), len(txids)) + } + + return &ListSweepsResponse{ + Sweeps: &ListSweepsResponse_TransactionDetails{ + TransactionDetails: lnrpc.RPCTransactionDetails(transactions), + }, + }, nil +} diff --git a/rpcserver.go b/rpcserver.go index bb287321..a2cf6133 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -4568,36 +4568,7 @@ func (r *rpcServer) GetTransactions(ctx context.Context, return nil, err } - txDetails := &lnrpc.TransactionDetails{ - Transactions: make([]*lnrpc.Transaction, len(transactions)), - } - for i, tx := range transactions { - var destAddresses []string - for _, destAddress := range tx.DestAddresses { - destAddresses = append(destAddresses, destAddress.EncodeAddress()) - } - - // We also get unconfirmed transactions, so BlockHash can be - // nil. - blockHash := "" - if tx.BlockHash != nil { - blockHash = tx.BlockHash.String() - } - - txDetails.Transactions[i] = &lnrpc.Transaction{ - TxHash: tx.Hash.String(), - Amount: int64(tx.Value), - NumConfirmations: tx.NumConfirmations, - BlockHash: blockHash, - BlockHeight: tx.BlockHeight, - TimeStamp: tx.Timestamp, - TotalFees: tx.TotalFees, - DestAddresses: destAddresses, - RawTxHex: hex.EncodeToString(tx.RawTx), - } - } - - return txDetails, nil + return lnrpc.RPCTransactionDetails(transactions), nil } // DescribeGraph returns a description of the latest graph state from the PoV From 18b0049e5e2cb1b8912e3c62d4340e0723fc0c6c Mon Sep 17 00:00:00 2001 From: carla Date: Tue, 5 May 2020 21:46:26 +0200 Subject: [PATCH 4/4] lntest/test: add check for sweeps in ListSweeps for force close test --- lntest/itest/lnd_test.go | 48 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/lntest/itest/lnd_test.go b/lntest/itest/lnd_test.go index b5e1eade..7e9c0185 100644 --- a/lntest/itest/lnd_test.go +++ b/lntest/itest/lnd_test.go @@ -38,6 +38,7 @@ import ( "github.com/lightningnetwork/lnd/lnrpc/invoicesrpc" "github.com/lightningnetwork/lnd/lnrpc/routerrpc" "github.com/lightningnetwork/lnd/lnrpc/signrpc" + "github.com/lightningnetwork/lnd/lnrpc/walletrpc" "github.com/lightningnetwork/lnd/lnrpc/watchtowerrpc" "github.com/lightningnetwork/lnd/lnrpc/wtclientrpc" "github.com/lightningnetwork/lnd/lntest" @@ -3586,6 +3587,13 @@ func channelForceClosureTest(net *lntest.NetworkHarness, t *harnessTest, } } + // Check that we can find the commitment sweep in our set of known + // sweeps. + err = findSweep(ctxb, alice, sweepingTXID) + if err != nil { + t.Fatalf("csv sweep not found: %v", err) + } + // Restart Alice to ensure that she resumes watching the finalized // commitment sweep txid. if err := net.RestartNode(alice, nil); err != nil { @@ -3753,7 +3761,10 @@ func channelForceClosureTest(net *lntest.NetworkHarness, t *harnessTest, // Retrieve each htlc timeout txn from the mempool, and ensure it is // well-formed. This entails verifying that each only spends from - // output, and that that output is from the commitment txn. + // output, and that that output is from the commitment txn. We do not + // the sweeper check for these timeout transactions because they are + // not swept by the sweeper; the nursery broadcasts the pre-signed + // transaction. for _, htlcTxID := range htlcTxIDs { // Fetch the sweep transaction, all input it's spending should // be from the commitment transaction which was broadcast @@ -3904,6 +3915,12 @@ func channelForceClosureTest(net *lntest.NetworkHarness, t *harnessTest, } } + // Check that we can find the htlc sweep in our set of sweeps. + err = findSweep(ctxb, alice, htlcSweepTx.Hash()) + if err != nil { + t.Fatalf("htlc sweep not found: %v", err) + } + // The following restart checks to ensure that the nursery store is // storing the txid of the previously broadcast htlc sweep txn, and that // it begins watching that txid after restarting. @@ -4010,6 +4027,35 @@ func channelForceClosureTest(net *lntest.NetworkHarness, t *harnessTest, } } +// findSweep looks up a sweep in a nodes list of broadcast sweeps. +func findSweep(ctx context.Context, node *lntest.HarnessNode, + sweep *chainhash.Hash) error { + + // List all sweeps that alice's node had broadcast. + ctx, _ = context.WithTimeout(ctx, defaultTimeout) + sweepResp, err := node.WalletKitClient.ListSweeps( + ctx, &walletrpc.ListSweepsRequest{ + Verbose: false, + }) + if err != nil { + return fmt.Errorf("list sweeps error: %v", err) + } + + sweepTxIDs, ok := sweepResp.Sweeps.(*walletrpc.ListSweepsResponse_TransactionIds) + if !ok { + return errors.New("expected sweep txids in response") + } + + // Check that the sweep tx we have just produced is present. + for _, tx := range sweepTxIDs.TransactionIds.TransactionIds { + if tx == sweep.String() { + return nil + } + } + + return fmt.Errorf("sweep: %v not found", sweep.String()) +} + // assertAmountSent generates a closure which queries listchannels for sndr and // rcvr, and asserts that sndr sent amt satoshis, and that rcvr received amt // satoshis.