From 6d937443b24b1bc79a57bde7ccce02fa56f063b8 Mon Sep 17 00:00:00 2001 From: Aaron Craelius Date: Mon, 3 Aug 2020 15:47:25 -0400 Subject: [PATCH] Reject unknown fields in TxDecoder and sign mode handlers (#6883) * WIP on unknown field rejection in TxDecoder * WIP on unknown field rejection in TxDecoder * WIP * WIP * WIP * WIP * Fix bugs with RejectUnknownFields * Fix tests * Fix bug and update docs * Lint * Add tests * Add unknown field tests * Lint * Address review comments --- client/tx/legacy_test.go | 2 +- client/{tx_generator.go => tx_config.go} | 0 codec/unknownproto/benchmarks_test.go | 6 +- codec/unknownproto/doc.go | 12 +- codec/unknownproto/unknown_fields.go | 76 +- codec/unknownproto/unknown_fields_test.go | 31 +- go.mod | 1 - go.sum | 4 - simapp/params/proto.go | 2 +- store/cachekv/memiterator.go | 3 +- testutil/testdata/proto.pb.go | 1460 +++++++++++++++-- testutil/testdata/proto.proto | 26 + x/auth/signing/direct/direct.go | 66 - x/auth/signing/handler_map_test.go | 4 +- x/auth/tx/builder.go | 8 +- x/auth/tx/builder_test.go | 45 +- x/auth/tx/{generator.go => config.go} | 27 +- .../tx/{generator_test.go => config_test.go} | 3 +- x/auth/tx/decoder.go | 63 +- x/auth/tx/direct.go | 56 + x/auth/{signing/direct => tx}/direct_test.go | 26 +- x/auth/tx/encode_decode_test.go | 165 ++ x/auth/tx/encoder.go | 4 +- x/auth/tx/legacy_amino_json.go | 61 + x/auth/tx/legacy_amino_json_test.go | 101 ++ x/auth/tx/mode_handler.go | 40 +- x/auth/tx/sigs.go | 4 +- x/auth/types/amino_signing.go | 27 +- x/auth/types/amino_signing_test.go | 26 +- x/auth/types/client_tx.go | 2 +- x/staking/types/staking.pb.go | 1215 +++++++------- 31 files changed, 2598 insertions(+), 968 deletions(-) rename client/{tx_generator.go => tx_config.go} (100%) delete mode 100644 x/auth/signing/direct/direct.go rename x/auth/tx/{generator.go => config.go} (62%) rename x/auth/tx/{generator_test.go => config_test.go} (89%) create mode 100644 x/auth/tx/direct.go rename x/auth/{signing/direct => tx}/direct_test.go (84%) create mode 100644 x/auth/tx/encode_decode_test.go create mode 100644 x/auth/tx/legacy_amino_json.go create mode 100644 x/auth/tx/legacy_amino_json_test.go diff --git a/client/tx/legacy_test.go b/client/tx/legacy_test.go index 69aa088c0e..a2d4ec7de6 100644 --- a/client/tx/legacy_test.go +++ b/client/tx/legacy_test.go @@ -65,7 +65,7 @@ type TestSuite struct { func (s *TestSuite) SetupSuite() { encCfg := simapp.MakeEncodingConfig() s.encCfg = encCfg - s.protoCfg = tx.NewTxConfig(codec.NewProtoCodec(encCfg.InterfaceRegistry), std.DefaultPublicKeyCodec{}, tx.DefaultSignModeHandler()) + s.protoCfg = tx.NewTxConfig(codec.NewProtoCodec(encCfg.InterfaceRegistry), std.DefaultPublicKeyCodec{}, tx.DefaultSignModes) s.aminoCfg = types3.StdTxConfig{Cdc: encCfg.Amino} } diff --git a/client/tx_generator.go b/client/tx_config.go similarity index 100% rename from client/tx_generator.go rename to client/tx_config.go diff --git a/codec/unknownproto/benchmarks_test.go b/codec/unknownproto/benchmarks_test.go index 93c5158e7d..e2c4b2c196 100644 --- a/codec/unknownproto/benchmarks_test.go +++ b/codec/unknownproto/benchmarks_test.go @@ -53,11 +53,10 @@ func benchmarkRejectUnknownFields(b *testing.B, parallel bool) { b.ReportAllocs() if !parallel { - ckr := new(unknownproto.Checker) b.ResetTimer() for i := 0; i < b.N; i++ { n1A := new(testdata.Nested1A) - if err := ckr.RejectUnknownFields(n1BBlob, n1A); err == nil { + if err := unknownproto.RejectUnknownFieldsStrict(n1BBlob, n1A); err == nil { b.Fatal("expected an error") } b.SetBytes(int64(len(n1BBlob))) @@ -66,11 +65,10 @@ func benchmarkRejectUnknownFields(b *testing.B, parallel bool) { var mu sync.Mutex b.ResetTimer() b.RunParallel(func(pb *testing.PB) { - ckr := new(unknownproto.Checker) for pb.Next() { // To simulate the conditions of multiple transactions being processed in parallel. n1A := new(testdata.Nested1A) - if err := ckr.RejectUnknownFields(n1BBlob, n1A); err == nil { + if err := unknownproto.RejectUnknownFieldsStrict(n1BBlob, n1A); err == nil { b.Fatal("expected an error") } mu.Lock() diff --git a/codec/unknownproto/doc.go b/codec/unknownproto/doc.go index 7e6ae80807..0e0a463422 100644 --- a/codec/unknownproto/doc.go +++ b/codec/unknownproto/doc.go @@ -6,22 +6,18 @@ a) Unknown fields in the stream -- this is indicative of mismatched services, pe b) Mismatched wire types for a field -- this is indicative of mismatched services -Its API signature is similar to proto.Unmarshal([]byte, proto.Message) as +Its API signature is similar to proto.Unmarshal([]byte, proto.Message) in the strict case - ckr := new(unknownproto.Checker) - if err := ckr.RejectUnknownFields(protoBlob, protoMessage); err != nil { + if err := RejectUnknownFieldsStrict(protoBlob, protoMessage, false); err != nil { // Handle the error. } and ideally should be added before invoking proto.Unmarshal, if you'd like to enforce the features mentioned above. By default, for security we report every single field that's unknown, whether a non-critical field or not. To customize -this behavior, please create a Checker and set the AllowUnknownNonCriticals to true, for example: +this behavior, please set the boolean parameter allowUnknownNonCriticals to true to RejectUnknownFields: - ckr := &unknownproto.Checker{ - AllowUnknownNonCriticals: true, - } - if err := ckr.RejectUnknownFields(protoBlob, protoMessage); err != nil { + if err := RejectUnknownFields(protoBlob, protoMessage, true); err != nil { // Handle the error. } */ diff --git a/codec/unknownproto/unknown_fields.go b/codec/unknownproto/unknown_fields.go index 1e37c96e09..2a7d096070 100644 --- a/codec/unknownproto/unknown_fields.go +++ b/codec/unknownproto/unknown_fields.go @@ -22,30 +22,37 @@ type descriptorIface interface { Descriptor() ([]byte, []int) } -type Checker struct { - // AllowUnknownNonCriticals when set will skip over non-critical fields that are unknown. - AllowUnknownNonCriticals bool +// RejectUnknownFieldsStrict rejects any bytes bz with an error that has unknown fields for the provided proto.Message type. +// This function traverses inside of messages nested via google.protobuf.Any. It does not do any deserialization of the proto.Message. +func RejectUnknownFieldsStrict(bz []byte, msg proto.Message) error { + _, err := RejectUnknownFields(bz, msg, false) + return err } -func (ckr *Checker) RejectUnknownFields(b []byte, msg proto.Message) error { - if len(b) == 0 { - return nil +// RejectUnknownFields rejects any bytes bz with an error that has unknown fields for the provided proto.Message type with an +// option to allow non-critical fields (specified as those fields with bit 11) to pass through. In either case, the +// hasUnknownNonCriticals will be set to true if non-critical fields were encountered during traversal. This flag can be +// used to treat a message with non-critical field different in different security contexts (such as transaction signing). +// This function traverses inside of messages nested via google.protobuf.Any. It does not do any deserialization of the proto.Message. +func RejectUnknownFields(bz []byte, msg proto.Message, allowUnknownNonCriticals bool) (hasUnknownNonCriticals bool, err error) { + if len(bz) == 0 { + return hasUnknownNonCriticals, nil } desc, ok := msg.(descriptorIface) if !ok { - return fmt.Errorf("%T does not have a Descriptor() method", msg) + return hasUnknownNonCriticals, fmt.Errorf("%T does not have a Descriptor() method", msg) } fieldDescProtoFromTagNum, _, err := getDescriptorInfo(desc, msg) if err != nil { - return err + return hasUnknownNonCriticals, err } - for len(b) > 0 { - tagNum, wireType, n := protowire.ConsumeField(b) - if n < 0 { - return errors.New("invalid length") + for len(bz) > 0 { + tagNum, wireType, m := protowire.ConsumeTag(bz) + if m < 0 { + return hasUnknownNonCriticals, errors.New("invalid length") } fieldDescProto, ok := fieldDescProtoFromTagNum[int32(tagNum)] @@ -53,7 +60,7 @@ func (ckr *Checker) RejectUnknownFields(b []byte, msg proto.Message) error { case ok: // Assert that the wireTypes match. if !canEncodeType(wireType, fieldDescProto.GetType()) { - return &errMismatchedWireType{ + return hasUnknownNonCriticals, &errMismatchedWireType{ Type: reflect.ValueOf(msg).Type().String(), TagNum: tagNum, GotWireType: wireType, @@ -62,9 +69,15 @@ func (ckr *Checker) RejectUnknownFields(b []byte, msg proto.Message) error { } default: - if !ckr.AllowUnknownNonCriticals || tagNum&bit11NonCritical == 0 { + isCriticalField := tagNum&bit11NonCritical == 0 + + if !isCriticalField { + hasUnknownNonCriticals = true + } + + if isCriticalField || !allowUnknownNonCriticals { // The tag is critical, so report it. - return &errUnknownField{ + return hasUnknownNonCriticals, &errUnknownField{ Type: reflect.ValueOf(msg).Type().String(), TagNum: tagNum, WireType: wireType, @@ -72,9 +85,11 @@ func (ckr *Checker) RejectUnknownFields(b []byte, msg proto.Message) error { } } - // Skip over the 2 bytes that store fieldNumber and wireType bytes. - fieldBytes := b[2:n] - b = b[n:] + // Skip over the bytes that store fieldNumber and wireType bytes. + bz = bz[m:] + n := protowire.ConsumeFieldValue(tagNum, wireType, bz) + fieldBytes := bz[:n] + bz = bz[n:] // An unknown but non-critical field or just a scalar type (aka *INT and BYTES like). if fieldDescProto == nil || fieldDescProto.IsScalar() { @@ -89,22 +104,28 @@ func (ckr *Checker) RejectUnknownFields(b []byte, msg proto.Message) error { // TYPE_BYTES and TYPE_STRING as per // https://github.com/gogo/protobuf/blob/5628607bb4c51c3157aacc3a50f0ab707582b805/protoc-gen-gogo/descriptor/descriptor.go#L95-L118 default: - return fmt.Errorf("failed to get typename for message of type %v, can only be TYPE_STRING or TYPE_BYTES", typ) + return hasUnknownNonCriticals, fmt.Errorf("failed to get typename for message of type %v, can only be TYPE_STRING or TYPE_BYTES", typ) } continue } // Let's recursively traverse and typecheck the field. + // consume length prefix of nested message + _, o := protowire.ConsumeVarint(fieldBytes) + fieldBytes = fieldBytes[o:] + if protoMessageName == ".google.protobuf.Any" { // Firstly typecheck types.Any to ensure nothing snuck in. - if err := ckr.RejectUnknownFields(fieldBytes, (*types.Any)(nil)); err != nil { - return err + hasUnknownNonCriticalsChild, err := RejectUnknownFields(fieldBytes, (*types.Any)(nil), allowUnknownNonCriticals) + hasUnknownNonCriticals = hasUnknownNonCriticals || hasUnknownNonCriticalsChild + if err != nil { + return hasUnknownNonCriticals, err } // And finally we can extract the TypeURL containing the protoMessageName. any := new(types.Any) if err := proto.Unmarshal(fieldBytes, any); err != nil { - return err + return hasUnknownNonCriticals, err } protoMessageName = any.TypeUrl fieldBytes = any.Value @@ -112,14 +133,17 @@ func (ckr *Checker) RejectUnknownFields(b []byte, msg proto.Message) error { msg, err := protoMessageForTypeName(protoMessageName[1:]) if err != nil { - return err + return hasUnknownNonCriticals, err } - if err := ckr.RejectUnknownFields(fieldBytes, msg); err != nil { - return err + + hasUnknownNonCriticalsChild, err := RejectUnknownFields(fieldBytes, msg, allowUnknownNonCriticals) + hasUnknownNonCriticals = hasUnknownNonCriticals || hasUnknownNonCriticalsChild + if err != nil { + return hasUnknownNonCriticals, err } } - return nil + return hasUnknownNonCriticals, nil } var protoMessageForTypeNameMu sync.RWMutex diff --git a/codec/unknownproto/unknown_fields_test.go b/codec/unknownproto/unknown_fields_test.go index d09e25e757..1969a0ba25 100644 --- a/codec/unknownproto/unknown_fields_test.go +++ b/codec/unknownproto/unknown_fields_test.go @@ -4,6 +4,8 @@ import ( "reflect" "testing" + "github.com/stretchr/testify/require" + "github.com/gogo/protobuf/proto" "github.com/cosmos/cosmos-sdk/codec/types" @@ -17,6 +19,7 @@ func TestRejectUnknownFieldsRepeated(t *testing.T) { recv proto.Message wantErr error allowUnknownNonCriticals bool + hasUnknownNonCriticals bool }{ { name: "Unknown field in midst of repeated values", @@ -172,6 +175,7 @@ func TestRejectUnknownFieldsRepeated(t *testing.T) { TagNum: 1031, WireType: 2, }, + hasUnknownNonCriticals: true, }, { name: "Unknown field in midst of repeated values, non-critical field ignored", @@ -213,8 +217,9 @@ func TestRejectUnknownFieldsRepeated(t *testing.T) { }, }, }, - recv: new(testdata.TestVersion1), - wantErr: nil, + recv: new(testdata.TestVersion1), + wantErr: nil, + hasUnknownNonCriticals: true, }, } @@ -225,11 +230,9 @@ func TestRejectUnknownFieldsRepeated(t *testing.T) { if err != nil { t.Fatal(err) } - ckr := &Checker{AllowUnknownNonCriticals: tt.allowUnknownNonCriticals} - gotErr := ckr.RejectUnknownFields(protoBlob, tt.recv) - if !reflect.DeepEqual(gotErr, tt.wantErr) { - t.Fatalf("Error mismatch\nGot:\n%v\n\nWant:\n%v", gotErr, tt.wantErr) - } + hasUnknownNonCriticals, gotErr := RejectUnknownFields(protoBlob, tt.recv, tt.allowUnknownNonCriticals) + require.Equal(t, tt.wantErr, gotErr) + require.Equal(t, tt.hasUnknownNonCriticals, hasUnknownNonCriticals) }) } } @@ -263,7 +266,7 @@ func TestRejectUnknownFields_allowUnknownNonCriticals(t *testing.T) { wantErr: nil, }, { - name: "Unkown fields that are critical, but with allowUnknownNonCriticals set", + name: "Unknown fields that are critical, but with allowUnknownNonCriticals set", allowUnknownNonCriticals: true, in: &testdata.Customer2{ Id: 289, @@ -285,9 +288,8 @@ func TestRejectUnknownFields_allowUnknownNonCriticals(t *testing.T) { t.Fatalf("Failed to marshal input: %v", err) } - ckr := &Checker{AllowUnknownNonCriticals: tt.allowUnknownNonCriticals} c1 := new(testdata.Customer1) - gotErr := ckr.RejectUnknownFields(blob, c1) + _, gotErr := RejectUnknownFields(blob, c1, tt.allowUnknownNonCriticals) if !reflect.DeepEqual(gotErr, tt.wantErr) { t.Fatalf("Error mismatch\nGot:\n%s\n\nWant:\n%s", gotErr, tt.wantErr) } @@ -498,8 +500,7 @@ func TestRejectUnknownFieldsNested(t *testing.T) { if err != nil { t.Fatal(err) } - ckr := new(Checker) - gotErr := ckr.RejectUnknownFields(protoBlob, tt.recv) + gotErr := RejectUnknownFieldsStrict(protoBlob, tt.recv) if !reflect.DeepEqual(gotErr, tt.wantErr) { t.Fatalf("Error mismatch\nGot:\n%s\n\nWant:\n%s", gotErr, tt.wantErr) } @@ -652,8 +653,7 @@ func TestRejectUnknownFieldsFlat(t *testing.T) { } c1 := new(testdata.Customer1) - ckr := new(Checker) - gotErr := ckr.RejectUnknownFields(blob, c1) + gotErr := RejectUnknownFieldsStrict(blob, c1) if !reflect.DeepEqual(gotErr, tt.wantErr) { t.Fatalf("Error mismatch\nGot:\n%s\n\nWant:\n%s", gotErr, tt.wantErr) } @@ -738,8 +738,7 @@ func TestMismatchedTypes_Nested(t *testing.T) { if err != nil { t.Fatal(err) } - ckr := new(Checker) - gotErr := ckr.RejectUnknownFields(protoBlob, tt.recv) + _, gotErr := RejectUnknownFields(protoBlob, tt.recv, false) if !reflect.DeepEqual(gotErr, tt.wantErr) { t.Fatalf("Error mismatch\nGot:\n%s\n\nWant:\n%s", gotErr, tt.wantErr) } diff --git a/go.mod b/go.mod index 960794df24..8aec1c24bf 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,6 @@ require ( github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d github.com/cosmos/ledger-cosmos-go v0.11.1 github.com/enigmampc/btcutil v1.0.3-0.20200723161021-e2fb6adb2a25 - github.com/gibson042/canonicaljson-go v1.0.3 github.com/gogo/protobuf v1.3.1 github.com/golang/mock v1.4.4 github.com/golang/protobuf v1.4.2 diff --git a/go.sum b/go.sum index a83ed880d4..2edc823736 100644 --- a/go.sum +++ b/go.sum @@ -144,8 +144,6 @@ github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2 github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gibson042/canonicaljson-go v1.0.3 h1:EAyF8L74AWabkyUmrvEFHEt/AGFQeD6RfwbAuf0j1bI= -github.com/gibson042/canonicaljson-go v1.0.3/go.mod h1:DsLpJTThXyGNO+KZlI85C1/KDcImpP67k/RKVjcaEqo= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -480,8 +478,6 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= github.com/spf13/viper v1.6.3/go.mod h1:jUMtyi0/lB5yZH/FjyGAoH7IMNrIhlBf6pXZmbMDvzw= -github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= diff --git a/simapp/params/proto.go b/simapp/params/proto.go index 066bdd7b7a..e0842511c4 100644 --- a/simapp/params/proto.go +++ b/simapp/params/proto.go @@ -14,7 +14,7 @@ func MakeEncodingConfig() EncodingConfig { amino := codec.New() interfaceRegistry := types.NewInterfaceRegistry() marshaler := codec.NewHybridCodec(amino, interfaceRegistry) - txGen := tx.NewTxConfig(codec.NewProtoCodec(interfaceRegistry), std.DefaultPublicKeyCodec{}, tx.DefaultSignModeHandler()) + txGen := tx.NewTxConfig(codec.NewProtoCodec(interfaceRegistry), std.DefaultPublicKeyCodec{}, tx.DefaultSignModes) return EncodingConfig{ InterfaceRegistry: interfaceRegistry, diff --git a/store/cachekv/memiterator.go b/store/cachekv/memiterator.go index de03f298b8..4dca2bdb7c 100644 --- a/store/cachekv/memiterator.go +++ b/store/cachekv/memiterator.go @@ -4,8 +4,9 @@ import ( "container/list" "errors" - "github.com/cosmos/cosmos-sdk/types/kv" dbm "github.com/tendermint/tm-db" + + "github.com/cosmos/cosmos-sdk/types/kv" ) // Iterates over iterKVCache items. diff --git a/testutil/testdata/proto.pb.go b/testutil/testdata/proto.pb.go index 0edda11fcf..04a4672b96 100644 --- a/testutil/testdata/proto.pb.go +++ b/testutil/testdata/proto.pb.go @@ -9,6 +9,7 @@ import ( fmt "fmt" types "github.com/cosmos/cosmos-sdk/codec/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + tx "github.com/cosmos/cosmos-sdk/types/tx" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" @@ -3101,6 +3102,242 @@ func (m *AnyWithExtra) GetC() int64 { return 0 } +type TestUpdatedTxRaw struct { + BodyBytes []byte `protobuf:"bytes,1,opt,name=body_bytes,json=bodyBytes,proto3" json:"body_bytes,omitempty"` + AuthInfoBytes []byte `protobuf:"bytes,2,opt,name=auth_info_bytes,json=authInfoBytes,proto3" json:"auth_info_bytes,omitempty"` + Signatures [][]byte `protobuf:"bytes,3,rep,name=signatures,proto3" json:"signatures,omitempty"` + NewField_5 []byte `protobuf:"bytes,5,opt,name=new_field_5,json=newField5,proto3" json:"new_field_5,omitempty"` + NewField_1024 []byte `protobuf:"bytes,1024,opt,name=new_field_1024,json=newField1024,proto3" json:"new_field_1024,omitempty"` +} + +func (m *TestUpdatedTxRaw) Reset() { *m = TestUpdatedTxRaw{} } +func (m *TestUpdatedTxRaw) String() string { return proto.CompactTextString(m) } +func (*TestUpdatedTxRaw) ProtoMessage() {} +func (*TestUpdatedTxRaw) Descriptor() ([]byte, []int) { + return fileDescriptor_2fcc84b9998d60d8, []int{33} +} +func (m *TestUpdatedTxRaw) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TestUpdatedTxRaw) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TestUpdatedTxRaw.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TestUpdatedTxRaw) XXX_Merge(src proto.Message) { + xxx_messageInfo_TestUpdatedTxRaw.Merge(m, src) +} +func (m *TestUpdatedTxRaw) XXX_Size() int { + return m.Size() +} +func (m *TestUpdatedTxRaw) XXX_DiscardUnknown() { + xxx_messageInfo_TestUpdatedTxRaw.DiscardUnknown(m) +} + +var xxx_messageInfo_TestUpdatedTxRaw proto.InternalMessageInfo + +func (m *TestUpdatedTxRaw) GetBodyBytes() []byte { + if m != nil { + return m.BodyBytes + } + return nil +} + +func (m *TestUpdatedTxRaw) GetAuthInfoBytes() []byte { + if m != nil { + return m.AuthInfoBytes + } + return nil +} + +func (m *TestUpdatedTxRaw) GetSignatures() [][]byte { + if m != nil { + return m.Signatures + } + return nil +} + +func (m *TestUpdatedTxRaw) GetNewField_5() []byte { + if m != nil { + return m.NewField_5 + } + return nil +} + +func (m *TestUpdatedTxRaw) GetNewField_1024() []byte { + if m != nil { + return m.NewField_1024 + } + return nil +} + +type TestUpdatedTxBody struct { + Messages []*types.Any `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages,omitempty"` + Memo string `protobuf:"bytes,2,opt,name=memo,proto3" json:"memo,omitempty"` + TimeoutHeight int64 `protobuf:"varint,3,opt,name=timeout_height,json=timeoutHeight,proto3" json:"timeout_height,omitempty"` + SomeNewField uint64 `protobuf:"varint,4,opt,name=some_new_field,json=someNewField,proto3" json:"some_new_field,omitempty"` + SomeNewFieldNonCriticalField string `protobuf:"bytes,1050,opt,name=some_new_field_non_critical_field,json=someNewFieldNonCriticalField,proto3" json:"some_new_field_non_critical_field,omitempty"` + ExtensionOptions []*types.Any `protobuf:"bytes,1023,rep,name=extension_options,json=extensionOptions,proto3" json:"extension_options,omitempty"` + NonCriticalExtensionOptions []*types.Any `protobuf:"bytes,2047,rep,name=non_critical_extension_options,json=nonCriticalExtensionOptions,proto3" json:"non_critical_extension_options,omitempty"` +} + +func (m *TestUpdatedTxBody) Reset() { *m = TestUpdatedTxBody{} } +func (m *TestUpdatedTxBody) String() string { return proto.CompactTextString(m) } +func (*TestUpdatedTxBody) ProtoMessage() {} +func (*TestUpdatedTxBody) Descriptor() ([]byte, []int) { + return fileDescriptor_2fcc84b9998d60d8, []int{34} +} +func (m *TestUpdatedTxBody) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TestUpdatedTxBody) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TestUpdatedTxBody.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TestUpdatedTxBody) XXX_Merge(src proto.Message) { + xxx_messageInfo_TestUpdatedTxBody.Merge(m, src) +} +func (m *TestUpdatedTxBody) XXX_Size() int { + return m.Size() +} +func (m *TestUpdatedTxBody) XXX_DiscardUnknown() { + xxx_messageInfo_TestUpdatedTxBody.DiscardUnknown(m) +} + +var xxx_messageInfo_TestUpdatedTxBody proto.InternalMessageInfo + +func (m *TestUpdatedTxBody) GetMessages() []*types.Any { + if m != nil { + return m.Messages + } + return nil +} + +func (m *TestUpdatedTxBody) GetMemo() string { + if m != nil { + return m.Memo + } + return "" +} + +func (m *TestUpdatedTxBody) GetTimeoutHeight() int64 { + if m != nil { + return m.TimeoutHeight + } + return 0 +} + +func (m *TestUpdatedTxBody) GetSomeNewField() uint64 { + if m != nil { + return m.SomeNewField + } + return 0 +} + +func (m *TestUpdatedTxBody) GetSomeNewFieldNonCriticalField() string { + if m != nil { + return m.SomeNewFieldNonCriticalField + } + return "" +} + +func (m *TestUpdatedTxBody) GetExtensionOptions() []*types.Any { + if m != nil { + return m.ExtensionOptions + } + return nil +} + +func (m *TestUpdatedTxBody) GetNonCriticalExtensionOptions() []*types.Any { + if m != nil { + return m.NonCriticalExtensionOptions + } + return nil +} + +type TestUpdatedAuthInfo struct { + SignerInfos []*tx.SignerInfo `protobuf:"bytes,1,rep,name=signer_infos,json=signerInfos,proto3" json:"signer_infos,omitempty"` + Fee *tx.Fee `protobuf:"bytes,2,opt,name=fee,proto3" json:"fee,omitempty"` + NewField_3 []byte `protobuf:"bytes,3,opt,name=new_field_3,json=newField3,proto3" json:"new_field_3,omitempty"` + NewField_1024 []byte `protobuf:"bytes,1024,opt,name=new_field_1024,json=newField1024,proto3" json:"new_field_1024,omitempty"` +} + +func (m *TestUpdatedAuthInfo) Reset() { *m = TestUpdatedAuthInfo{} } +func (m *TestUpdatedAuthInfo) String() string { return proto.CompactTextString(m) } +func (*TestUpdatedAuthInfo) ProtoMessage() {} +func (*TestUpdatedAuthInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_2fcc84b9998d60d8, []int{35} +} +func (m *TestUpdatedAuthInfo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TestUpdatedAuthInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TestUpdatedAuthInfo.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TestUpdatedAuthInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_TestUpdatedAuthInfo.Merge(m, src) +} +func (m *TestUpdatedAuthInfo) XXX_Size() int { + return m.Size() +} +func (m *TestUpdatedAuthInfo) XXX_DiscardUnknown() { + xxx_messageInfo_TestUpdatedAuthInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_TestUpdatedAuthInfo proto.InternalMessageInfo + +func (m *TestUpdatedAuthInfo) GetSignerInfos() []*tx.SignerInfo { + if m != nil { + return m.SignerInfos + } + return nil +} + +func (m *TestUpdatedAuthInfo) GetFee() *tx.Fee { + if m != nil { + return m.Fee + } + return nil +} + +func (m *TestUpdatedAuthInfo) GetNewField_3() []byte { + if m != nil { + return m.NewField_3 + } + return nil +} + +func (m *TestUpdatedAuthInfo) GetNewField_1024() []byte { + if m != nil { + return m.NewField_1024 + } + return nil +} + func init() { proto.RegisterEnum("testdata.Customer2_City", Customer2_City_name, Customer2_City_value) proto.RegisterType((*Dog)(nil), "testdata.Dog") @@ -3145,116 +3382,139 @@ func init() { proto.RegisterType((*TestVersionFD1)(nil), "testdata.TestVersionFD1") proto.RegisterType((*TestVersionFD1WithExtraAny)(nil), "testdata.TestVersionFD1WithExtraAny") proto.RegisterType((*AnyWithExtra)(nil), "testdata.AnyWithExtra") + proto.RegisterType((*TestUpdatedTxRaw)(nil), "testdata.TestUpdatedTxRaw") + proto.RegisterType((*TestUpdatedTxBody)(nil), "testdata.TestUpdatedTxBody") + proto.RegisterType((*TestUpdatedAuthInfo)(nil), "testdata.TestUpdatedAuthInfo") } func init() { proto.RegisterFile("proto.proto", fileDescriptor_2fcc84b9998d60d8) } var fileDescriptor_2fcc84b9998d60d8 = []byte{ - // 1664 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0xcf, 0x6f, 0x23, 0x49, - 0x15, 0x4e, 0xb9, 0xed, 0xc4, 0x7e, 0x31, 0x8e, 0x29, 0xc2, 0xd2, 0xe3, 0x65, 0x33, 0xa1, 0x35, - 0xec, 0x98, 0xd5, 0x8e, 0x43, 0xda, 0x5e, 0x09, 0xcd, 0x01, 0xad, 0x9d, 0x49, 0x36, 0x23, 0x66, - 0xb2, 0xa8, 0x67, 0x35, 0xa0, 0xbd, 0x44, 0xe5, 0xee, 0x72, 0xbb, 0x94, 0x76, 0x55, 0xe8, 0x6a, - 0xcf, 0x8c, 0x39, 0xc2, 0x81, 0x2b, 0x17, 0xc4, 0x99, 0x23, 0x27, 0xb4, 0x7f, 0x05, 0x7b, 0x41, - 0x9a, 0x0b, 0x12, 0x12, 0xd2, 0x08, 0xcd, 0x5c, 0xf9, 0x0b, 0x40, 0x08, 0x54, 0xdd, 0xd5, 0x3f, - 0x92, 0xb1, 0xb3, 0x4e, 0x16, 0x76, 0x14, 0x89, 0x8b, 0x5d, 0xf5, 0xfa, 0xab, 0xaf, 0x5e, 0x7d, - 0xaf, 0xde, 0xeb, 0xea, 0x82, 0xf5, 0xd3, 0x50, 0x44, 0xa2, 0x13, 0xff, 0xe2, 0x6a, 0x44, 0x65, - 0xe4, 0x91, 0x88, 0xb4, 0x36, 0x7d, 0xe1, 0x8b, 0xd8, 0xb8, 0xa3, 0x5a, 0xc9, 0xf3, 0xd6, 0x0d, - 0x5f, 0x08, 0x3f, 0xa0, 0x3b, 0x71, 0x6f, 0x38, 0x1d, 0xed, 0x10, 0x3e, 0x4b, 0x1e, 0x59, 0x77, - 0xc0, 0xb8, 0x27, 0x7c, 0x8c, 0xa1, 0x2c, 0xd9, 0xcf, 0xa9, 0x89, 0xb6, 0x51, 0xbb, 0xe6, 0xc4, - 0x6d, 0x65, 0xe3, 0x64, 0x42, 0xcd, 0x52, 0x62, 0x53, 0x6d, 0xeb, 0x03, 0x30, 0xf6, 0x48, 0x84, - 0x4d, 0x58, 0x9b, 0x08, 0xce, 0x4e, 0x68, 0xa8, 0x47, 0xa4, 0x5d, 0xbc, 0x09, 0x95, 0x80, 0x3d, - 0xa1, 0x32, 0x1e, 0x55, 0x71, 0x92, 0x8e, 0xf5, 0x11, 0xd4, 0x0e, 0x89, 0xec, 0x73, 0x36, 0x21, - 0x01, 0x7e, 0x1f, 0x56, 0x49, 0xdc, 0x8a, 0xc7, 0xae, 0xdb, 0x9b, 0x9d, 0xc4, 0xbd, 0x4e, 0xea, - 0x5e, 0xa7, 0xcf, 0x67, 0x8e, 0xc6, 0xe0, 0x3a, 0xa0, 0x67, 0x31, 0x99, 0xe1, 0xa0, 0x67, 0xd6, - 0x1e, 0xd4, 0x0f, 0x89, 0xcc, 0xb9, 0xba, 0x00, 0x63, 0x22, 0x8f, 0x97, 0xe0, 0xab, 0x8d, 0xd3, - 0x41, 0xd6, 0x43, 0xd8, 0x48, 0x48, 0x72, 0x9e, 0xbb, 0xd0, 0x50, 0x3c, 0x4b, 0x72, 0xd5, 0xc7, - 0x85, 0xb1, 0xd6, 0x6d, 0x58, 0xdf, 0x77, 0xc7, 0xc2, 0xa1, 0x3f, 0x9b, 0x52, 0x99, 0x68, 0x43, - 0xa5, 0x24, 0x3e, 0xcd, 0xb4, 0x49, 0xba, 0x56, 0x1b, 0xea, 0x09, 0x50, 0x9e, 0x0a, 0x2e, 0xe9, - 0x05, 0xc8, 0xef, 0xc2, 0xc6, 0x23, 0x32, 0x3b, 0xa4, 0x41, 0x90, 0xd1, 0xa6, 0xd1, 0x40, 0x85, - 0x68, 0x74, 0xa0, 0x99, 0xc3, 0x34, 0x69, 0x0b, 0xaa, 0x7e, 0x48, 0x69, 0xc4, 0xb8, 0xaf, 0xb1, - 0x59, 0xdf, 0xda, 0x87, 0xc6, 0x27, 0x54, 0x46, 0x6a, 0x09, 0x9a, 0xb5, 0x0b, 0x40, 0xf8, 0x6c, - 0x29, 0xfd, 0x08, 0x9f, 0xe9, 0x05, 0xef, 0xc3, 0x46, 0x46, 0xa3, 0x67, 0xb5, 0xe7, 0xc4, 0xe1, - 0x1b, 0x9d, 0x74, 0x5b, 0x76, 0x32, 0xb1, 0x8a, 0x61, 0x78, 0x0c, 0x6b, 0x8a, 0xe6, 0xa1, 0xf4, - 0xf1, 0x8f, 0x60, 0x4d, 0x32, 0x9f, 0xd3, 0x50, 0x9a, 0x68, 0xdb, 0x68, 0xd7, 0x07, 0xbb, 0xff, - 0x78, 0x71, 0xf3, 0x8e, 0xcf, 0xa2, 0xf1, 0x74, 0xd8, 0x71, 0xc5, 0x64, 0xc7, 0x15, 0x72, 0x22, - 0xa4, 0xfe, 0xbb, 0x23, 0xbd, 0x93, 0x9d, 0x68, 0x76, 0x4a, 0x65, 0xa7, 0xef, 0xba, 0x7d, 0xcf, - 0x0b, 0xa9, 0x94, 0x4e, 0xca, 0x60, 0x0d, 0xe1, 0xeb, 0x03, 0xe2, 0x3d, 0x9c, 0x06, 0x11, 0x7b, - 0xc4, 0x7c, 0x4e, 0xa2, 0x69, 0x48, 0xf1, 0x16, 0x80, 0x4c, 0x3b, 0x7a, 0x12, 0xa7, 0x60, 0xc1, - 0xb7, 0x61, 0x63, 0x42, 0x02, 0xe6, 0x32, 0x31, 0x95, 0xc7, 0x23, 0x46, 0x03, 0xcf, 0xac, 0x6c, - 0xa3, 0x76, 0xdd, 0x69, 0x64, 0xe6, 0x03, 0x65, 0xbd, 0x5b, 0x7e, 0xfe, 0xbb, 0x9b, 0xc8, 0x8a, - 0xa0, 0xb6, 0x37, 0x95, 0x91, 0x98, 0xd0, 0x70, 0x17, 0x37, 0xa0, 0xc4, 0xbc, 0x78, 0xd1, 0x15, - 0xa7, 0xc4, 0xbc, 0x79, 0x89, 0x83, 0xbf, 0x07, 0x4d, 0x39, 0x1d, 0x4a, 0x37, 0x64, 0xa7, 0x11, - 0x13, 0xfc, 0x78, 0x44, 0xa9, 0x69, 0x6c, 0xa3, 0x76, 0xc9, 0xd9, 0x28, 0xda, 0x0f, 0x68, 0xbc, - 0x2d, 0x4e, 0xc9, 0x6c, 0x42, 0x79, 0x64, 0xae, 0x25, 0xdb, 0x42, 0x77, 0xad, 0xcf, 0x4a, 0xf9, - 0xb4, 0xf6, 0x6b, 0xd3, 0xb6, 0xa0, 0xca, 0xb8, 0x37, 0x95, 0x51, 0x38, 0xd3, 0xd9, 0x97, 0xf5, - 0x33, 0x97, 0x8c, 0x82, 0x4b, 0x9b, 0x50, 0x19, 0xd1, 0xa7, 0x34, 0x34, 0xcb, 0xb1, 0x1f, 0x49, - 0x07, 0xbf, 0x0d, 0xd5, 0x90, 0x4a, 0x1a, 0x3e, 0xa1, 0x9e, 0xf9, 0xdb, 0x6a, 0x9c, 0x77, 0x99, - 0x01, 0xbf, 0x0f, 0x65, 0x97, 0x45, 0x33, 0x73, 0x75, 0x1b, 0xb5, 0x1b, 0xb6, 0x99, 0x07, 0x38, - 0xf3, 0xaa, 0xb3, 0xc7, 0xa2, 0x99, 0x13, 0xa3, 0xf0, 0x5d, 0xf8, 0xda, 0x84, 0x49, 0x97, 0x06, - 0x01, 0xe1, 0x54, 0x4c, 0xa5, 0x09, 0x17, 0xec, 0xaf, 0xb3, 0x50, 0xeb, 0x23, 0x28, 0x2b, 0x26, - 0x5c, 0x85, 0xf2, 0x03, 0x22, 0x64, 0x73, 0x05, 0x37, 0x00, 0x1e, 0x08, 0xd9, 0xe7, 0x3e, 0x0d, - 0xa8, 0x6c, 0x22, 0x5c, 0x87, 0xea, 0x8f, 0x49, 0x20, 0xfa, 0x41, 0x24, 0x9a, 0x25, 0x0c, 0xb0, - 0xfa, 0x50, 0x48, 0x57, 0x3c, 0x6d, 0x1a, 0x78, 0x1d, 0xd6, 0x8e, 0x08, 0x0b, 0xc5, 0x90, 0x35, - 0xcb, 0x56, 0x07, 0xaa, 0x47, 0x54, 0x46, 0xd4, 0xeb, 0xf5, 0x97, 0x09, 0x94, 0xf5, 0x67, 0x94, - 0x0e, 0xe8, 0x2e, 0x35, 0x00, 0x5b, 0x50, 0x22, 0x3d, 0xb3, 0xbc, 0x6d, 0xb4, 0xd7, 0x6d, 0x9c, - 0x2b, 0x92, 0x4e, 0xea, 0x94, 0x48, 0x0f, 0x77, 0xa1, 0xc2, 0xb8, 0x47, 0x9f, 0x99, 0x95, 0x18, - 0xf6, 0xce, 0x79, 0x58, 0xb7, 0xdf, 0xb9, 0xaf, 0x9e, 0xef, 0xf3, 0x28, 0x9c, 0x39, 0x09, 0xb6, - 0xf5, 0x00, 0x20, 0x37, 0xe2, 0x26, 0x18, 0x27, 0x74, 0x16, 0xfb, 0x62, 0x38, 0xaa, 0x89, 0xdb, - 0x50, 0x79, 0x42, 0x82, 0x69, 0xe2, 0xcd, 0xfc, 0xb9, 0x13, 0xc0, 0xdd, 0xd2, 0x0f, 0x90, 0xf5, - 0x69, 0xba, 0x2c, 0x7b, 0xb9, 0x65, 0xbd, 0x07, 0xab, 0x3c, 0xc6, 0xc7, 0x7b, 0x66, 0x0e, 0x7d, - 0xb7, 0xef, 0x68, 0x84, 0x75, 0x90, 0x72, 0xef, 0xbe, 0xce, 0x9d, 0xf3, 0x2c, 0x70, 0xd3, 0xce, - 0x79, 0x3e, 0xcc, 0x62, 0x35, 0x78, 0x8d, 0xa7, 0x09, 0x86, 0x2a, 0x94, 0xc9, 0xc6, 0x56, 0xcd, - 0x79, 0x7b, 0xda, 0xf2, 0xb2, 0xe0, 0x5d, 0x91, 0x41, 0x85, 0x73, 0xb8, 0x38, 0x9c, 0x03, 0xa7, - 0x34, 0xec, 0x59, 0x3c, 0xd3, 0x72, 0xee, 0x2c, 0x2a, 0xb7, 0xd5, 0x2c, 0xc8, 0x51, 0xcd, 0x25, - 0x94, 0x1c, 0xa4, 0x0a, 0xa8, 0x9c, 0x0c, 0xc5, 0x34, 0xa2, 0x71, 0x4e, 0xd6, 0x9c, 0xa4, 0x63, - 0xfd, 0x34, 0xd3, 0x77, 0x70, 0x05, 0x7d, 0x73, 0x76, 0xad, 0x80, 0x91, 0x29, 0x60, 0xfd, 0xa2, - 0x50, 0x51, 0xba, 0x4b, 0xed, 0x8b, 0x06, 0x94, 0xe4, 0x48, 0x97, 0xae, 0x92, 0x1c, 0xe1, 0x6f, - 0x43, 0x4d, 0x4e, 0x43, 0x77, 0x4c, 0x42, 0x9f, 0xea, 0x4a, 0x92, 0x1b, 0xf0, 0x36, 0xac, 0x7b, - 0x54, 0x46, 0x8c, 0x13, 0x55, 0xdd, 0xe2, 0x92, 0x5a, 0x73, 0x8a, 0x26, 0xfc, 0x2e, 0x34, 0xdc, - 0x90, 0x7a, 0x2c, 0x3a, 0x76, 0x49, 0xe8, 0x1d, 0x73, 0x91, 0x14, 0xbd, 0xc3, 0x15, 0xa7, 0x9e, - 0xd8, 0xf7, 0x48, 0xe8, 0x1d, 0x09, 0xfc, 0x0e, 0xd4, 0xdc, 0xb1, 0x7a, 0x6b, 0x29, 0x48, 0x55, - 0x43, 0xaa, 0x89, 0xe9, 0x48, 0xe0, 0x1d, 0xa8, 0x8a, 0x90, 0xf9, 0x8c, 0x93, 0xc0, 0xac, 0x9d, - 0x7f, 0xfd, 0x64, 0xa5, 0xda, 0xc9, 0x40, 0x83, 0x5a, 0x56, 0x65, 0xad, 0xbf, 0x97, 0xa0, 0xae, - 0xde, 0x44, 0x8f, 0x69, 0x28, 0x99, 0xe0, 0xbb, 0xc9, 0x99, 0x03, 0xe9, 0x33, 0x07, 0xbe, 0x05, - 0x88, 0x68, 0x71, 0xdf, 0xca, 0x39, 0x8b, 0x03, 0x1c, 0x44, 0x14, 0x6a, 0xa8, 0x03, 0xbc, 0x10, - 0x35, 0x54, 0x28, 0x57, 0x6f, 0xae, 0x85, 0x28, 0x17, 0xbf, 0x07, 0xc8, 0xd3, 0xa5, 0x62, 0x01, - 0x6a, 0x50, 0xfe, 0xfc, 0xc5, 0xcd, 0x15, 0x07, 0x79, 0xb8, 0x01, 0x88, 0xc6, 0xf5, 0xb8, 0x72, - 0xb8, 0xe2, 0x20, 0x8a, 0xdf, 0x05, 0x34, 0x8a, 0x25, 0x5c, 0x38, 0x56, 0xe1, 0x46, 0xd8, 0x02, - 0xe4, 0xc7, 0x3a, 0x2e, 0x2a, 0xc8, 0xc8, 0x57, 0xde, 0x8e, 0xcd, 0xda, 0xc5, 0xde, 0x8e, 0xf1, - 0x6d, 0x40, 0x27, 0x66, 0x7d, 0xa1, 0xe6, 0x83, 0xf2, 0xf3, 0x17, 0x37, 0x91, 0x83, 0x4e, 0x06, - 0x15, 0x30, 0xe4, 0x74, 0x62, 0xfd, 0xd2, 0x38, 0x23, 0xb7, 0x7d, 0x59, 0xb9, 0xed, 0xa5, 0xe4, - 0xb6, 0x97, 0x92, 0xdb, 0x56, 0x72, 0xdf, 0xfa, 0x22, 0xb9, 0xed, 0x2b, 0x09, 0x6d, 0xbf, 0x29, - 0xa1, 0xf1, 0xdb, 0x50, 0xe3, 0xf4, 0xa9, 0x3e, 0xc6, 0xdc, 0xd8, 0x46, 0xed, 0xb2, 0x53, 0xe5, - 0xf4, 0x69, 0x7c, 0x80, 0x49, 0xa3, 0xf0, 0x9b, 0xb3, 0x51, 0xe8, 0x5e, 0x36, 0x0a, 0xdd, 0xa5, - 0xa2, 0xd0, 0x5d, 0x2a, 0x0a, 0xdd, 0xa5, 0xa2, 0xd0, 0xbd, 0x52, 0x14, 0xba, 0x6f, 0x2c, 0x0a, - 0x77, 0x00, 0x73, 0xc1, 0x8f, 0xdd, 0x90, 0x45, 0xcc, 0x25, 0x81, 0x0e, 0xc7, 0xaf, 0xe2, 0xda, - 0xe5, 0x34, 0xb9, 0xe0, 0x7b, 0xfa, 0xc9, 0x99, 0xb8, 0xfc, 0xb3, 0x04, 0xad, 0xa2, 0xfb, 0x0f, - 0x04, 0xa7, 0x1f, 0x73, 0xfa, 0xf1, 0xe8, 0xb1, 0x7a, 0x95, 0x5f, 0xd3, 0x28, 0x5d, 0x1b, 0xf5, - 0xff, 0xb5, 0x0a, 0xdf, 0x3a, 0xaf, 0xfe, 0x51, 0xfc, 0xb6, 0xf2, 0xaf, 0x89, 0xf4, 0xbb, 0x79, - 0x42, 0x7c, 0x67, 0x3e, 0xaa, 0xb0, 0xa6, 0x6b, 0x92, 0x1b, 0xf8, 0x43, 0x58, 0x65, 0x9c, 0xd3, - 0x70, 0xd7, 0x6c, 0xc4, 0xe4, 0xed, 0x2f, 0x5c, 0x59, 0xe7, 0x7e, 0x8c, 0x77, 0xf4, 0xb8, 0x8c, - 0xc1, 0x36, 0x37, 0x2e, 0xc5, 0x60, 0x6b, 0x06, 0xbb, 0xf5, 0x7b, 0x04, 0xab, 0x09, 0x69, 0xe1, - 0x9c, 0x64, 0x2c, 0x3c, 0x27, 0xdd, 0x57, 0x47, 0x7e, 0x4e, 0x43, 0x1d, 0xfd, 0xee, 0xb2, 0x1e, - 0x27, 0x7f, 0xf1, 0x8f, 0x93, 0x30, 0xb4, 0xbe, 0xaf, 0x3e, 0x04, 0x52, 0x63, 0x61, 0xf2, 0x5a, - 0x3a, 0x79, 0xfc, 0x4d, 0xa6, 0x27, 0x57, 0xed, 0xd6, 0x1f, 0x52, 0x5f, 0xed, 0xd7, 0xe0, 0x26, - 0xac, 0xb9, 0x62, 0xca, 0xd3, 0x8f, 0xc4, 0x9a, 0x93, 0x76, 0xaf, 0xea, 0xb1, 0xfd, 0xdf, 0xf0, - 0x38, 0xcd, 0xbf, 0x7f, 0x9f, 0xcd, 0xbf, 0xde, 0xff, 0xf3, 0xef, 0x1a, 0xe5, 0x5f, 0xef, 0x4b, - 0xe7, 0x5f, 0xef, 0x2b, 0xce, 0xbf, 0xde, 0x97, 0xca, 0x3f, 0x63, 0x61, 0xfe, 0x7d, 0xf6, 0x3f, - 0xcb, 0xbf, 0xde, 0x52, 0xf9, 0x67, 0x5f, 0x98, 0x7f, 0x9b, 0xc5, 0x8b, 0x03, 0x43, 0x5f, 0x12, - 0xa4, 0x19, 0xf8, 0x27, 0x94, 0x5c, 0x12, 0xea, 0xf9, 0x0e, 0xee, 0x5d, 0xed, 0x73, 0xe8, 0x8d, - 0x7f, 0x96, 0xa4, 0xeb, 0xf9, 0x2b, 0x3a, 0x73, 0x9e, 0x3a, 0xb8, 0xb7, 0xfb, 0x13, 0x16, 0x8d, - 0xf7, 0x9f, 0x45, 0x21, 0xe9, 0xf3, 0xd9, 0x57, 0xba, 0xb6, 0x5b, 0xf9, 0xda, 0x0a, 0xb8, 0x3e, - 0x9f, 0x65, 0x1e, 0x5d, 0x7a, 0x75, 0x9f, 0x40, 0xbd, 0x38, 0x1e, 0xb7, 0xd5, 0x02, 0x2e, 0xb8, - 0xc6, 0x4d, 0x2b, 0x00, 0x51, 0x0b, 0x4f, 0x2a, 0xa3, 0xa1, 0x2a, 0x60, 0x3d, 0xa9, 0x80, 0x71, - 0xcf, 0xb5, 0xff, 0x88, 0x60, 0x5d, 0x4d, 0xf8, 0x88, 0x86, 0x4f, 0x98, 0x4b, 0xf1, 0x07, 0x50, - 0xde, 0x77, 0xc7, 0x02, 0x7f, 0x33, 0xf7, 0xa7, 0x70, 0xe3, 0xdd, 0x7a, 0xeb, 0xbc, 0x59, 0x5f, - 0x0a, 0xf7, 0xa1, 0x9a, 0x5e, 0x4f, 0xe3, 0x1b, 0x39, 0xe6, 0xdc, 0xcd, 0x76, 0xab, 0x35, 0xef, - 0x91, 0xa6, 0xf8, 0x61, 0x72, 0x47, 0xac, 0x22, 0x65, 0x9e, 0x15, 0x23, 0xbf, 0xc4, 0x6e, 0xdd, - 0x98, 0xf3, 0x24, 0x19, 0x3f, 0x38, 0xfc, 0xfc, 0xe5, 0x16, 0x7a, 0xfe, 0x72, 0x0b, 0xfd, 0xed, - 0xe5, 0x16, 0xfa, 0xf5, 0xab, 0xad, 0x95, 0xe7, 0xaf, 0xb6, 0x56, 0xfe, 0xf2, 0x6a, 0x6b, 0xe5, - 0xd3, 0xce, 0xc5, 0xb7, 0xcb, 0x54, 0x46, 0xd3, 0x88, 0x05, 0x3b, 0x29, 0xf3, 0x70, 0x35, 0x96, - 0xb1, 0xfb, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x62, 0xd0, 0xa8, 0x05, 0x79, 0x19, 0x00, 0x00, + // 1972 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x6f, 0x1b, 0xc7, + 0x15, 0xd7, 0x72, 0x49, 0x89, 0x7c, 0xa4, 0x29, 0x7a, 0xe2, 0xa4, 0x6b, 0x3a, 0x96, 0x95, 0x85, + 0x63, 0xb3, 0x41, 0x4c, 0x59, 0x4b, 0x1a, 0x08, 0x7c, 0x28, 0x42, 0xca, 0x52, 0x64, 0xd4, 0x96, + 0x8b, 0xb5, 0xeb, 0x16, 0xbe, 0x10, 0xcb, 0xdd, 0x21, 0xb9, 0x10, 0x39, 0xa3, 0xee, 0x0c, 0x2d, + 0xb1, 0xa7, 0xa2, 0x3d, 0xf4, 0x9a, 0x4b, 0x51, 0xa0, 0xb7, 0x1e, 0x7b, 0x2a, 0x72, 0xeb, 0xb1, + 0xb7, 0xe6, 0x52, 0xc0, 0x97, 0x02, 0x05, 0x0a, 0x18, 0x85, 0x7d, 0xed, 0x5f, 0xd0, 0xa2, 0x48, + 0x31, 0xb3, 0xb3, 0x1f, 0x94, 0x48, 0x85, 0x56, 0xda, 0x18, 0x02, 0x7a, 0x21, 0x67, 0xde, 0xfe, + 0xe6, 0x37, 0x6f, 0xde, 0xd7, 0xce, 0xcc, 0x42, 0xf1, 0x20, 0xa0, 0x9c, 0xd6, 0xe5, 0x2f, 0xca, + 0x73, 0xcc, 0xb8, 0xe7, 0x70, 0xa7, 0x7a, 0xa9, 0x4f, 0xfb, 0x54, 0x0a, 0x37, 0x44, 0x2b, 0x7c, + 0x5e, 0xbd, 0xdc, 0xa7, 0xb4, 0x3f, 0xc4, 0x1b, 0xb2, 0xd7, 0x1d, 0xf7, 0x36, 0x1c, 0x32, 0x51, + 0x8f, 0x90, 0x4b, 0xd9, 0x88, 0xb2, 0x0d, 0x7e, 0xb4, 0xc1, 0x8f, 0x42, 0x99, 0x79, 0x0b, 0xf4, + 0x7b, 0xb4, 0x8f, 0x10, 0x64, 0x99, 0xff, 0x53, 0x6c, 0x68, 0xeb, 0x5a, 0xad, 0x60, 0xcb, 0xb6, + 0x90, 0x11, 0x67, 0x84, 0x8d, 0x4c, 0x28, 0x13, 0x6d, 0xf3, 0x0e, 0xe8, 0x5b, 0x0e, 0x47, 0x06, + 0xac, 0x8c, 0x28, 0xf1, 0xf7, 0x71, 0xa0, 0x46, 0x44, 0x5d, 0x74, 0x09, 0x72, 0x43, 0xff, 0x39, + 0x66, 0x72, 0x54, 0xce, 0x0e, 0x3b, 0xe6, 0x67, 0x50, 0xd8, 0x75, 0x58, 0x8b, 0xf8, 0x23, 0x67, + 0x88, 0x3e, 0x86, 0x65, 0x47, 0xb6, 0xe4, 0xd8, 0xa2, 0x75, 0xa9, 0x1e, 0xaa, 0x5c, 0x8f, 0x54, + 0xae, 0xb7, 0xc8, 0xc4, 0x56, 0x18, 0x54, 0x02, 0xed, 0x48, 0x92, 0xe9, 0xb6, 0x76, 0x64, 0x6e, + 0x41, 0x69, 0xd7, 0x61, 0x09, 0x57, 0x03, 0x60, 0xe0, 0xb0, 0xce, 0x02, 0x7c, 0x85, 0x41, 0x34, + 0xc8, 0x7c, 0x08, 0xab, 0x21, 0x49, 0xc2, 0x73, 0x17, 0xca, 0x82, 0x67, 0x41, 0xae, 0xd2, 0x20, + 0x35, 0xd6, 0xbc, 0x09, 0xc5, 0x6d, 0x77, 0x40, 0x6d, 0xfc, 0x93, 0x31, 0x66, 0xa1, 0x6d, 0x30, + 0x63, 0x4e, 0x1f, 0xc7, 0xb6, 0x09, 0xbb, 0x66, 0x0d, 0x4a, 0x21, 0x90, 0x1d, 0x50, 0xc2, 0xf0, + 0x29, 0xc8, 0x0f, 0x61, 0xf5, 0xb1, 0x33, 0xd9, 0xc5, 0xc3, 0x61, 0x4c, 0x1b, 0x79, 0x43, 0x4b, + 0x79, 0xa3, 0x0e, 0x95, 0x04, 0xa6, 0x48, 0xab, 0x90, 0xef, 0x07, 0x18, 0x73, 0x9f, 0xf4, 0x15, + 0x36, 0xee, 0x9b, 0xdb, 0x50, 0x7e, 0x82, 0x19, 0x17, 0x4b, 0x50, 0xac, 0x0d, 0x00, 0x87, 0x4c, + 0x16, 0xb2, 0x9f, 0x43, 0x26, 0x6a, 0xc1, 0xdb, 0xb0, 0x1a, 0xd3, 0xa8, 0x59, 0xad, 0x19, 0x7e, + 0x78, 0xa7, 0x1e, 0x85, 0x6a, 0x3d, 0x36, 0x56, 0xda, 0x0d, 0x4f, 0x61, 0x45, 0xd0, 0x3c, 0x64, + 0x7d, 0xf4, 0x7d, 0x58, 0x61, 0x7e, 0x9f, 0xe0, 0x80, 0x19, 0xda, 0xba, 0x5e, 0x2b, 0xb5, 0x37, + 0xff, 0xf9, 0xf2, 0xda, 0xad, 0xbe, 0xcf, 0x07, 0xe3, 0x6e, 0xdd, 0xa5, 0xa3, 0x0d, 0x15, 0xb9, + 0xe1, 0xdf, 0x2d, 0xe6, 0xed, 0x6f, 0xf0, 0xc9, 0x01, 0x66, 0xf5, 0x96, 0xeb, 0xb6, 0x3c, 0x2f, + 0xc0, 0x8c, 0xd9, 0x11, 0x83, 0xd9, 0x85, 0x8b, 0x6d, 0xc7, 0x7b, 0x38, 0x1e, 0x72, 0xff, 0xb1, + 0xdf, 0x27, 0x0e, 0x1f, 0x07, 0x18, 0xad, 0x01, 0xb0, 0xa8, 0xa3, 0x26, 0xb1, 0x53, 0x12, 0x74, + 0x13, 0x56, 0x47, 0xce, 0xd0, 0x77, 0x7d, 0x3a, 0x66, 0x9d, 0x9e, 0x8f, 0x87, 0x9e, 0x91, 0x5b, + 0xd7, 0x6a, 0x25, 0xbb, 0x1c, 0x8b, 0x77, 0x84, 0xf4, 0x6e, 0xf6, 0xc5, 0x6f, 0xaf, 0x69, 0x26, + 0x87, 0xc2, 0xd6, 0x98, 0x71, 0x3a, 0xc2, 0xc1, 0x26, 0x2a, 0x43, 0xc6, 0xf7, 0xe4, 0xa2, 0x73, + 0x76, 0xc6, 0xf7, 0x66, 0x25, 0x0e, 0xfa, 0x2e, 0x54, 0xd8, 0xb8, 0xcb, 0xdc, 0xc0, 0x3f, 0xe0, + 0x3e, 0x25, 0x9d, 0x1e, 0xc6, 0x86, 0xbe, 0xae, 0xd5, 0x32, 0xf6, 0x6a, 0x5a, 0xbe, 0x83, 0x65, + 0x58, 0x1c, 0x38, 0x93, 0x11, 0x26, 0xdc, 0x58, 0x09, 0xc3, 0x42, 0x75, 0xcd, 0x2f, 0x32, 0xc9, + 0xb4, 0xd6, 0x89, 0x69, 0xab, 0x90, 0xf7, 0x89, 0x37, 0x66, 0x3c, 0x98, 0xa8, 0xec, 0x8b, 0xfb, + 0xb1, 0x4a, 0x7a, 0x4a, 0xa5, 0x4b, 0x90, 0xeb, 0xe1, 0x43, 0x1c, 0x18, 0x59, 0xa9, 0x47, 0xd8, + 0x41, 0x57, 0x20, 0x1f, 0x60, 0x86, 0x83, 0xe7, 0xd8, 0x33, 0x7e, 0x9d, 0x97, 0x79, 0x17, 0x0b, + 0xd0, 0xc7, 0x90, 0x75, 0x7d, 0x3e, 0x31, 0x96, 0xd7, 0xb5, 0x5a, 0xd9, 0x32, 0x12, 0x07, 0xc7, + 0x5a, 0xd5, 0xb7, 0x7c, 0x3e, 0xb1, 0x25, 0x0a, 0xdd, 0x85, 0x0b, 0x23, 0x9f, 0xb9, 0x78, 0x38, + 0x74, 0x08, 0xa6, 0x63, 0x66, 0xc0, 0x29, 0xf1, 0x35, 0x0d, 0x35, 0x3f, 0x83, 0xac, 0x60, 0x42, + 0x79, 0xc8, 0x3e, 0x70, 0x28, 0xab, 0x2c, 0xa1, 0x32, 0xc0, 0x03, 0xca, 0x5a, 0xa4, 0x8f, 0x87, + 0x98, 0x55, 0x34, 0x54, 0x82, 0xfc, 0x0f, 0x9c, 0x21, 0x6d, 0x0d, 0x39, 0xad, 0x64, 0x10, 0xc0, + 0xf2, 0x43, 0xca, 0x5c, 0x7a, 0x58, 0xd1, 0x51, 0x11, 0x56, 0xf6, 0x1c, 0x3f, 0xa0, 0x5d, 0xbf, + 0x92, 0x35, 0xeb, 0x90, 0xdf, 0xc3, 0x8c, 0x63, 0xaf, 0xd9, 0x5a, 0xc4, 0x51, 0xe6, 0x5f, 0xb4, + 0x68, 0x40, 0x63, 0xa1, 0x01, 0xc8, 0x84, 0x8c, 0xd3, 0x34, 0xb2, 0xeb, 0x7a, 0xad, 0x68, 0xa1, + 0xc4, 0x22, 0xd1, 0xa4, 0x76, 0xc6, 0x69, 0xa2, 0x06, 0xe4, 0x7c, 0xe2, 0xe1, 0x23, 0x23, 0x27, + 0x61, 0x57, 0x8f, 0xc3, 0x1a, 0xad, 0xfa, 0x7d, 0xf1, 0x7c, 0x9b, 0xf0, 0x60, 0x62, 0x87, 0xd8, + 0xea, 0x03, 0x80, 0x44, 0x88, 0x2a, 0xa0, 0xef, 0xe3, 0x89, 0xd4, 0x45, 0xb7, 0x45, 0x13, 0xd5, + 0x20, 0xf7, 0xdc, 0x19, 0x8e, 0x43, 0x6d, 0x66, 0xcf, 0x1d, 0x02, 0xee, 0x66, 0x3e, 0xd1, 0xcc, + 0x67, 0xd1, 0xb2, 0xac, 0xc5, 0x96, 0xf5, 0x11, 0x2c, 0x13, 0x89, 0x97, 0x31, 0x33, 0x83, 0xbe, + 0xd1, 0xb2, 0x15, 0xc2, 0xdc, 0x89, 0xb8, 0x37, 0x4f, 0x72, 0x27, 0x3c, 0x73, 0xd4, 0xb4, 0x12, + 0x9e, 0x4f, 0x63, 0x5f, 0xb5, 0x4f, 0xf0, 0x54, 0x40, 0x17, 0x85, 0x32, 0x0c, 0x6c, 0xd1, 0x9c, + 0x15, 0xd3, 0xa6, 0x17, 0x3b, 0xef, 0x8c, 0x0c, 0xc2, 0x9d, 0xdd, 0xf9, 0xee, 0x6c, 0xdb, 0x99, + 0x6e, 0xd3, 0x24, 0xb1, 0x2d, 0x67, 0xce, 0x22, 0x72, 0x5b, 0xcc, 0xa2, 0xd9, 0xa2, 0xb9, 0x80, + 0x25, 0xdb, 0x91, 0x05, 0x44, 0x4e, 0x06, 0x74, 0xcc, 0xb1, 0xcc, 0xc9, 0x82, 0x1d, 0x76, 0xcc, + 0x1f, 0xc7, 0xf6, 0x6d, 0x9f, 0xc1, 0xbe, 0x09, 0xbb, 0xb2, 0x80, 0x1e, 0x5b, 0xc0, 0xfc, 0x79, + 0xaa, 0xa2, 0x34, 0x16, 0x8a, 0x8b, 0x32, 0x64, 0x58, 0x4f, 0x95, 0xae, 0x0c, 0xeb, 0xa1, 0xf7, + 0xa1, 0xc0, 0xc6, 0x81, 0x3b, 0x70, 0x82, 0x3e, 0x56, 0x95, 0x24, 0x11, 0xa0, 0x75, 0x28, 0x7a, + 0x98, 0x71, 0x9f, 0x38, 0xa2, 0xba, 0xc9, 0x92, 0x5a, 0xb0, 0xd3, 0x22, 0x74, 0x03, 0xca, 0x6e, + 0x80, 0x3d, 0x9f, 0x77, 0x5c, 0x27, 0xf0, 0x3a, 0x84, 0x86, 0x45, 0x6f, 0x77, 0xc9, 0x2e, 0x85, + 0xf2, 0x2d, 0x27, 0xf0, 0xf6, 0x28, 0xba, 0x0a, 0x05, 0x77, 0x20, 0xde, 0x5a, 0x02, 0x92, 0x57, + 0x90, 0x7c, 0x28, 0xda, 0xa3, 0x68, 0x03, 0xf2, 0x34, 0xf0, 0xfb, 0x3e, 0x71, 0x86, 0x46, 0xe1, + 0xf8, 0xeb, 0x27, 0x2e, 0xd5, 0x76, 0x0c, 0x6a, 0x17, 0xe2, 0x2a, 0x6b, 0xfe, 0x23, 0x03, 0x25, + 0xf1, 0x26, 0x7a, 0x8a, 0x03, 0xe6, 0x53, 0xb2, 0x19, 0xee, 0x39, 0x34, 0xb5, 0xe7, 0x40, 0xd7, + 0x41, 0x73, 0x94, 0x71, 0xdf, 0x4b, 0x38, 0xd3, 0x03, 0x6c, 0xcd, 0x11, 0xa8, 0xae, 0x72, 0xf0, + 0x5c, 0x54, 0x57, 0xa0, 0x5c, 0x15, 0x5c, 0x73, 0x51, 0x2e, 0xfa, 0x08, 0x34, 0x4f, 0x95, 0x8a, + 0x39, 0xa8, 0x76, 0xf6, 0xcb, 0x97, 0xd7, 0x96, 0x6c, 0xcd, 0x43, 0x65, 0xd0, 0xb0, 0xac, 0xc7, + 0xb9, 0xdd, 0x25, 0x5b, 0xc3, 0xe8, 0x06, 0x68, 0x3d, 0x69, 0xc2, 0xb9, 0x63, 0x05, 0xae, 0x87, + 0x4c, 0xd0, 0xfa, 0xd2, 0x8e, 0xf3, 0x0a, 0xb2, 0xd6, 0x17, 0xda, 0x0e, 0x8c, 0xc2, 0xe9, 0xda, + 0x0e, 0xd0, 0x4d, 0xd0, 0xf6, 0x8d, 0xd2, 0x5c, 0x9b, 0xb7, 0xb3, 0x2f, 0x5e, 0x5e, 0xd3, 0x6c, + 0x6d, 0xbf, 0x9d, 0x03, 0x9d, 0x8d, 0x47, 0xe6, 0x2f, 0xf4, 0x29, 0x73, 0x5b, 0x6f, 0x6a, 0x6e, + 0x6b, 0x21, 0x73, 0x5b, 0x0b, 0x99, 0xdb, 0x12, 0xe6, 0xbe, 0xfe, 0x75, 0xe6, 0xb6, 0xce, 0x64, + 0x68, 0xeb, 0x6d, 0x19, 0x1a, 0x5d, 0x81, 0x02, 0xc1, 0x87, 0x6a, 0x1b, 0x73, 0x79, 0x5d, 0xab, + 0x65, 0xed, 0x3c, 0xc1, 0x87, 0x72, 0x03, 0x13, 0x79, 0xe1, 0x57, 0xd3, 0x5e, 0x68, 0xbc, 0xa9, + 0x17, 0x1a, 0x0b, 0x79, 0xa1, 0xb1, 0x90, 0x17, 0x1a, 0x0b, 0x79, 0xa1, 0x71, 0x26, 0x2f, 0x34, + 0xde, 0x9a, 0x17, 0x6e, 0x01, 0x22, 0x94, 0x74, 0xdc, 0xc0, 0xe7, 0xbe, 0xeb, 0x0c, 0x95, 0x3b, + 0x7e, 0x29, 0x6b, 0x97, 0x5d, 0x21, 0x94, 0x6c, 0xa9, 0x27, 0x53, 0x7e, 0xf9, 0x57, 0x06, 0xaa, + 0x69, 0xf5, 0x1f, 0x50, 0x82, 0x1f, 0x11, 0xfc, 0xa8, 0xf7, 0x54, 0xbc, 0xca, 0xcf, 0xa9, 0x97, + 0xce, 0x8d, 0xf5, 0xff, 0xbd, 0x0c, 0xdf, 0x39, 0x6e, 0xfd, 0x3d, 0xf9, 0xb6, 0xea, 0x9f, 0x13, + 0xd3, 0x6f, 0x26, 0x09, 0xf1, 0xc1, 0x6c, 0x54, 0x6a, 0x4d, 0xe7, 0x24, 0x37, 0xd0, 0xa7, 0xb0, + 0xec, 0x13, 0x82, 0x83, 0x4d, 0xa3, 0x2c, 0xc9, 0x6b, 0x5f, 0xbb, 0xb2, 0xfa, 0x7d, 0x89, 0xb7, + 0xd5, 0xb8, 0x98, 0xc1, 0x32, 0x56, 0xdf, 0x88, 0xc1, 0x52, 0x0c, 0x56, 0xf5, 0x77, 0x1a, 0x2c, + 0x87, 0xa4, 0xa9, 0x7d, 0x92, 0x3e, 0x77, 0x9f, 0x74, 0x5f, 0x6c, 0xf9, 0x09, 0x0e, 0x94, 0xf7, + 0x1b, 0x8b, 0x6a, 0x1c, 0xfe, 0xc9, 0x1f, 0x3b, 0x64, 0xa8, 0xde, 0x16, 0x07, 0x81, 0x48, 0x98, + 0x9a, 0xbc, 0x10, 0x4d, 0x2e, 0xcf, 0x64, 0x6a, 0x72, 0xd1, 0xae, 0xfe, 0x3e, 0xd2, 0xd5, 0x3a, + 0x01, 0x37, 0x60, 0xc5, 0xa5, 0x63, 0x12, 0x1d, 0x12, 0x0b, 0x76, 0xd4, 0x3d, 0xab, 0xc6, 0xd6, + 0x7f, 0x43, 0xe3, 0x28, 0xff, 0xbe, 0x9a, 0xce, 0xbf, 0xe6, 0xff, 0xf3, 0xef, 0x1c, 0xe5, 0x5f, + 0xf3, 0x1b, 0xe7, 0x5f, 0xf3, 0x5b, 0xce, 0xbf, 0xe6, 0x37, 0xca, 0x3f, 0x7d, 0x6e, 0xfe, 0x7d, + 0xf1, 0x3f, 0xcb, 0xbf, 0xe6, 0x42, 0xf9, 0x67, 0x9d, 0x9a, 0x7f, 0x97, 0xd2, 0x17, 0x07, 0xba, + 0xba, 0x24, 0x88, 0x32, 0xf0, 0xcf, 0x5a, 0x78, 0x49, 0xa8, 0xe6, 0xdb, 0xb9, 0x77, 0xb6, 0xe3, + 0xd0, 0x5b, 0x3f, 0x96, 0x44, 0xeb, 0xf9, 0x9b, 0x36, 0xb5, 0x9f, 0xda, 0xb9, 0xb7, 0xf9, 0x23, + 0x9f, 0x0f, 0xb6, 0x8f, 0x78, 0xe0, 0xb4, 0xc8, 0xe4, 0x5b, 0x5d, 0xdb, 0xf5, 0x64, 0x6d, 0x29, + 0x5c, 0x8b, 0x4c, 0x62, 0x8d, 0xde, 0x78, 0x75, 0x4f, 0xa0, 0x94, 0x1e, 0x8f, 0x6a, 0x62, 0x01, + 0xa7, 0x5c, 0xe3, 0x46, 0x15, 0xc0, 0x11, 0x0b, 0x0f, 0x2b, 0xa3, 0x2e, 0x2a, 0x60, 0x29, 0xac, + 0x80, 0xb2, 0xe7, 0x9a, 0x7f, 0xd4, 0xa0, 0x22, 0x26, 0xfc, 0xe1, 0x81, 0xe7, 0x70, 0xec, 0x3d, + 0x39, 0xb2, 0x9d, 0x43, 0x74, 0x15, 0xa0, 0x4b, 0xbd, 0x49, 0xa7, 0x3b, 0xe1, 0xf2, 0x06, 0x55, + 0xab, 0x95, 0xec, 0x82, 0x90, 0xb4, 0x85, 0x00, 0xdd, 0x80, 0x55, 0x67, 0xcc, 0x07, 0x1d, 0x9f, + 0xf4, 0xa8, 0xc2, 0x64, 0x24, 0xe6, 0x82, 0x10, 0xdf, 0x27, 0x3d, 0x1a, 0xe2, 0xa6, 0x2f, 0x62, + 0xf5, 0x13, 0x17, 0xb1, 0x6b, 0x50, 0x8c, 0xcf, 0x2e, 0x9d, 0x3b, 0xea, 0x12, 0xb6, 0x10, 0x9d, + 0x5e, 0xee, 0xa0, 0x0f, 0xa1, 0x9c, 0x3c, 0xdf, 0xbc, 0x6d, 0x35, 0x8d, 0x9f, 0xe5, 0x25, 0xa6, + 0x14, 0x61, 0x84, 0xd0, 0xfc, 0x5c, 0x87, 0x8b, 0x53, 0x4b, 0x68, 0x53, 0x6f, 0x82, 0x6e, 0x43, + 0x5e, 0x5d, 0xb1, 0x87, 0x77, 0xc0, 0xf3, 0x82, 0x2c, 0x46, 0x89, 0xec, 0x1e, 0xe1, 0x11, 0x8d, + 0xb2, 0x5b, 0xb4, 0x85, 0x0a, 0xdc, 0x1f, 0x61, 0x3a, 0xe6, 0x9d, 0x01, 0xf6, 0xfb, 0x03, 0xae, + 0xec, 0x78, 0x41, 0x49, 0x77, 0xa5, 0x10, 0x5d, 0x87, 0x32, 0xa3, 0x23, 0xdc, 0x49, 0x8e, 0x62, + 0x59, 0x79, 0x14, 0x2b, 0x09, 0xe9, 0x9e, 0x52, 0x16, 0xed, 0xc2, 0x07, 0xd3, 0xa8, 0xce, 0x8c, + 0xc2, 0xfc, 0x9b, 0xb0, 0x30, 0xbf, 0x9f, 0x1e, 0xb9, 0x77, 0xbc, 0x48, 0xb7, 0xe1, 0x22, 0x3e, + 0xe2, 0x98, 0x88, 0x18, 0xe9, 0x50, 0x79, 0x9d, 0xcc, 0x8c, 0xaf, 0x56, 0x4e, 0x59, 0x66, 0x25, + 0xc6, 0x3f, 0x0a, 0xe1, 0xe8, 0x19, 0xac, 0x4d, 0x4d, 0x3f, 0x83, 0x70, 0xf5, 0x14, 0xc2, 0x2b, + 0xa9, 0x37, 0xc7, 0xf6, 0x31, 0x6e, 0xf3, 0x0f, 0x1a, 0xbc, 0x93, 0x72, 0x49, 0x4b, 0x85, 0x05, + 0xfa, 0x04, 0x4a, 0xe1, 0xd5, 0xbd, 0x8c, 0x9d, 0xc8, 0x31, 0xef, 0xd6, 0xc3, 0xcb, 0xfe, 0x3a, + 0x3f, 0xaa, 0x3f, 0x96, 0x8f, 0x05, 0xd8, 0x2e, 0xb2, 0xb8, 0xcd, 0xd0, 0x7a, 0x72, 0xd7, 0x56, + 0xb4, 0xca, 0xa9, 0x01, 0x3b, 0x18, 0x87, 0x77, 0x6f, 0x53, 0xd1, 0xd4, 0x90, 0x7e, 0x4a, 0x45, + 0x53, 0x63, 0xc1, 0x68, 0xb2, 0xfe, 0xa4, 0x41, 0x51, 0xa8, 0xfe, 0x18, 0x07, 0xcf, 0x7d, 0x17, + 0xa3, 0x3b, 0x90, 0xdd, 0x76, 0x07, 0x14, 0xbd, 0x9b, 0x24, 0x68, 0xea, 0x13, 0x50, 0xf5, 0xbd, + 0xe3, 0x62, 0xf5, 0x95, 0xa4, 0x05, 0xf9, 0xe8, 0x7b, 0x0d, 0xba, 0x9c, 0x60, 0x8e, 0x7d, 0xea, + 0xa9, 0x56, 0x67, 0x3d, 0x52, 0x14, 0xdf, 0x0b, 0x3f, 0x9a, 0x88, 0xd2, 0x65, 0x4c, 0x57, 0x87, + 0xe4, 0xab, 0x4e, 0xf5, 0xf2, 0x8c, 0x27, 0xe1, 0xf8, 0xf6, 0xee, 0x97, 0xaf, 0xd6, 0xb4, 0x17, + 0xaf, 0xd6, 0xb4, 0xbf, 0xbf, 0x5a, 0xd3, 0x3e, 0x7f, 0xbd, 0xb6, 0xf4, 0xe2, 0xf5, 0xda, 0xd2, + 0x5f, 0x5f, 0xaf, 0x2d, 0x3d, 0xab, 0x9f, 0xfe, 0xb9, 0x05, 0x33, 0x3e, 0xe6, 0xfe, 0x70, 0x23, + 0x62, 0xee, 0x2e, 0x4b, 0xcf, 0x37, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0x8b, 0xd0, 0x8b, 0x6c, + 0x9e, 0x1c, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -6067,6 +6327,228 @@ func (m *AnyWithExtra) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *TestUpdatedTxRaw) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TestUpdatedTxRaw) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TestUpdatedTxRaw) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.NewField_1024) > 0 { + i -= len(m.NewField_1024) + copy(dAtA[i:], m.NewField_1024) + i = encodeVarintProto(dAtA, i, uint64(len(m.NewField_1024))) + i-- + dAtA[i] = 0x40 + i-- + dAtA[i] = 0x82 + } + if len(m.NewField_5) > 0 { + i -= len(m.NewField_5) + copy(dAtA[i:], m.NewField_5) + i = encodeVarintProto(dAtA, i, uint64(len(m.NewField_5))) + i-- + dAtA[i] = 0x2a + } + if len(m.Signatures) > 0 { + for iNdEx := len(m.Signatures) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Signatures[iNdEx]) + copy(dAtA[i:], m.Signatures[iNdEx]) + i = encodeVarintProto(dAtA, i, uint64(len(m.Signatures[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + if len(m.AuthInfoBytes) > 0 { + i -= len(m.AuthInfoBytes) + copy(dAtA[i:], m.AuthInfoBytes) + i = encodeVarintProto(dAtA, i, uint64(len(m.AuthInfoBytes))) + i-- + dAtA[i] = 0x12 + } + if len(m.BodyBytes) > 0 { + i -= len(m.BodyBytes) + copy(dAtA[i:], m.BodyBytes) + i = encodeVarintProto(dAtA, i, uint64(len(m.BodyBytes))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *TestUpdatedTxBody) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TestUpdatedTxBody) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TestUpdatedTxBody) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.NonCriticalExtensionOptions) > 0 { + for iNdEx := len(m.NonCriticalExtensionOptions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.NonCriticalExtensionOptions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintProto(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x7f + i-- + dAtA[i] = 0xfa + } + } + if len(m.SomeNewFieldNonCriticalField) > 0 { + i -= len(m.SomeNewFieldNonCriticalField) + copy(dAtA[i:], m.SomeNewFieldNonCriticalField) + i = encodeVarintProto(dAtA, i, uint64(len(m.SomeNewFieldNonCriticalField))) + i-- + dAtA[i] = 0x41 + i-- + dAtA[i] = 0xd2 + } + if len(m.ExtensionOptions) > 0 { + for iNdEx := len(m.ExtensionOptions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ExtensionOptions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintProto(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3f + i-- + dAtA[i] = 0xfa + } + } + if m.SomeNewField != 0 { + i = encodeVarintProto(dAtA, i, uint64(m.SomeNewField)) + i-- + dAtA[i] = 0x20 + } + if m.TimeoutHeight != 0 { + i = encodeVarintProto(dAtA, i, uint64(m.TimeoutHeight)) + i-- + dAtA[i] = 0x18 + } + if len(m.Memo) > 0 { + i -= len(m.Memo) + copy(dAtA[i:], m.Memo) + i = encodeVarintProto(dAtA, i, uint64(len(m.Memo))) + i-- + dAtA[i] = 0x12 + } + if len(m.Messages) > 0 { + for iNdEx := len(m.Messages) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Messages[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintProto(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *TestUpdatedAuthInfo) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TestUpdatedAuthInfo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TestUpdatedAuthInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.NewField_1024) > 0 { + i -= len(m.NewField_1024) + copy(dAtA[i:], m.NewField_1024) + i = encodeVarintProto(dAtA, i, uint64(len(m.NewField_1024))) + i-- + dAtA[i] = 0x40 + i-- + dAtA[i] = 0x82 + } + if len(m.NewField_3) > 0 { + i -= len(m.NewField_3) + copy(dAtA[i:], m.NewField_3) + i = encodeVarintProto(dAtA, i, uint64(len(m.NewField_3))) + i-- + dAtA[i] = 0x1a + } + if m.Fee != nil { + { + size, err := m.Fee.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintProto(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.SignerInfos) > 0 { + for iNdEx := len(m.SignerInfos) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.SignerInfos[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintProto(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func encodeVarintProto(dAtA []byte, offset int, v uint64) int { offset -= sovProto(v) base := offset @@ -7241,6 +7723,105 @@ func (m *AnyWithExtra) Size() (n int) { return n } +func (m *TestUpdatedTxRaw) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.BodyBytes) + if l > 0 { + n += 1 + l + sovProto(uint64(l)) + } + l = len(m.AuthInfoBytes) + if l > 0 { + n += 1 + l + sovProto(uint64(l)) + } + if len(m.Signatures) > 0 { + for _, b := range m.Signatures { + l = len(b) + n += 1 + l + sovProto(uint64(l)) + } + } + l = len(m.NewField_5) + if l > 0 { + n += 1 + l + sovProto(uint64(l)) + } + l = len(m.NewField_1024) + if l > 0 { + n += 2 + l + sovProto(uint64(l)) + } + return n +} + +func (m *TestUpdatedTxBody) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Messages) > 0 { + for _, e := range m.Messages { + l = e.Size() + n += 1 + l + sovProto(uint64(l)) + } + } + l = len(m.Memo) + if l > 0 { + n += 1 + l + sovProto(uint64(l)) + } + if m.TimeoutHeight != 0 { + n += 1 + sovProto(uint64(m.TimeoutHeight)) + } + if m.SomeNewField != 0 { + n += 1 + sovProto(uint64(m.SomeNewField)) + } + if len(m.ExtensionOptions) > 0 { + for _, e := range m.ExtensionOptions { + l = e.Size() + n += 2 + l + sovProto(uint64(l)) + } + } + l = len(m.SomeNewFieldNonCriticalField) + if l > 0 { + n += 2 + l + sovProto(uint64(l)) + } + if len(m.NonCriticalExtensionOptions) > 0 { + for _, e := range m.NonCriticalExtensionOptions { + l = e.Size() + n += 2 + l + sovProto(uint64(l)) + } + } + return n +} + +func (m *TestUpdatedAuthInfo) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.SignerInfos) > 0 { + for _, e := range m.SignerInfos { + l = e.Size() + n += 1 + l + sovProto(uint64(l)) + } + } + if m.Fee != nil { + l = m.Fee.Size() + n += 1 + l + sovProto(uint64(l)) + } + l = len(m.NewField_3) + if l > 0 { + n += 1 + l + sovProto(uint64(l)) + } + l = len(m.NewField_1024) + if l > 0 { + n += 2 + l + sovProto(uint64(l)) + } + return n +} + func sovProto(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -14328,6 +14909,675 @@ func (m *AnyWithExtra) Unmarshal(dAtA []byte) error { } return nil } +func (m *TestUpdatedTxRaw) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TestUpdatedTxRaw: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TestUpdatedTxRaw: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BodyBytes", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthProto + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthProto + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BodyBytes = append(m.BodyBytes[:0], dAtA[iNdEx:postIndex]...) + if m.BodyBytes == nil { + m.BodyBytes = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthInfoBytes", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthProto + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthProto + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AuthInfoBytes = append(m.AuthInfoBytes[:0], dAtA[iNdEx:postIndex]...) + if m.AuthInfoBytes == nil { + m.AuthInfoBytes = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signatures", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthProto + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthProto + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signatures = append(m.Signatures, make([]byte, postIndex-iNdEx)) + copy(m.Signatures[len(m.Signatures)-1], dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NewField_5", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthProto + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthProto + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NewField_5 = append(m.NewField_5[:0], dAtA[iNdEx:postIndex]...) + if m.NewField_5 == nil { + m.NewField_5 = []byte{} + } + iNdEx = postIndex + case 1024: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NewField_1024", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthProto + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthProto + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NewField_1024 = append(m.NewField_1024[:0], dAtA[iNdEx:postIndex]...) + if m.NewField_1024 == nil { + m.NewField_1024 = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipProto(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthProto + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthProto + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TestUpdatedTxBody) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TestUpdatedTxBody: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TestUpdatedTxBody: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Messages", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthProto + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthProto + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Messages = append(m.Messages, &types.Any{}) + if err := m.Messages[len(m.Messages)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Memo", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthProto + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthProto + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Memo = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutHeight", wireType) + } + m.TimeoutHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TimeoutHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SomeNewField", wireType) + } + m.SomeNewField = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.SomeNewField |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 1023: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExtensionOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthProto + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthProto + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ExtensionOptions = append(m.ExtensionOptions, &types.Any{}) + if err := m.ExtensionOptions[len(m.ExtensionOptions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1050: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SomeNewFieldNonCriticalField", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthProto + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthProto + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SomeNewFieldNonCriticalField = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2047: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonCriticalExtensionOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthProto + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthProto + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonCriticalExtensionOptions = append(m.NonCriticalExtensionOptions, &types.Any{}) + if err := m.NonCriticalExtensionOptions[len(m.NonCriticalExtensionOptions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipProto(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthProto + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthProto + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TestUpdatedAuthInfo) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TestUpdatedAuthInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TestUpdatedAuthInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SignerInfos", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthProto + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthProto + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SignerInfos = append(m.SignerInfos, &tx.SignerInfo{}) + if err := m.SignerInfos[len(m.SignerInfos)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Fee", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthProto + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthProto + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Fee == nil { + m.Fee = &tx.Fee{} + } + if err := m.Fee.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NewField_3", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthProto + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthProto + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NewField_3 = append(m.NewField_3[:0], dAtA[iNdEx:postIndex]...) + if m.NewField_3 == nil { + m.NewField_3 = []byte{} + } + iNdEx = postIndex + case 1024: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NewField_1024", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProto + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthProto + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthProto + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NewField_1024 = append(m.NewField_1024[:0], dAtA[iNdEx:postIndex]...) + if m.NewField_1024 == nil { + m.NewField_1024 = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipProto(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthProto + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthProto + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipProto(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/testutil/testdata/proto.proto b/testutil/testdata/proto.proto index acfef24c85..335091fc98 100644 --- a/testutil/testdata/proto.proto +++ b/testutil/testdata/proto.proto @@ -3,6 +3,7 @@ package testdata; import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; +import "cosmos/tx/tx.proto"; option go_package = "github.com/cosmos/cosmos-sdk/testutil/testdata"; @@ -341,3 +342,28 @@ message AnyWithExtra { int64 b = 3; int64 c = 4; } + +message TestUpdatedTxRaw { + bytes body_bytes = 1; + bytes auth_info_bytes = 2; + repeated bytes signatures = 3; + bytes new_field_5 = 5; + bytes new_field_1024 = 1024; +} + +message TestUpdatedTxBody { + repeated google.protobuf.Any messages = 1; + string memo = 2; + int64 timeout_height = 3; + uint64 some_new_field = 4; + string some_new_field_non_critical_field = 1050; + repeated google.protobuf.Any extension_options = 1023; + repeated google.protobuf.Any non_critical_extension_options = 2047; +} + +message TestUpdatedAuthInfo { + repeated cosmos.tx.SignerInfo signer_infos = 1; + cosmos.tx.Fee fee = 2; + bytes new_field_3 = 3; + bytes new_field_1024 = 1024; +} diff --git a/x/auth/signing/direct/direct.go b/x/auth/signing/direct/direct.go deleted file mode 100644 index 8377f44034..0000000000 --- a/x/auth/signing/direct/direct.go +++ /dev/null @@ -1,66 +0,0 @@ -package direct - -import ( - "fmt" - - signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" - - sdk "github.com/cosmos/cosmos-sdk/types" - types "github.com/cosmos/cosmos-sdk/types/tx" - "github.com/cosmos/cosmos-sdk/x/auth/signing" -) - -// ProtoTx defines an interface which protobuf transactions must implement for -// signature verification via SignModeDirect -type ProtoTx interface { - // GetBodyBytes returns the raw serialized bytes for TxBody - GetBodyBytes() []byte - - // GetBodyBytes returns the raw serialized bytes for AuthInfo - GetAuthInfoBytes() []byte -} - -// ModeHandler defines the SIGN_MODE_DIRECT SignModeHandler -type ModeHandler struct{} - -var _ signing.SignModeHandler = ModeHandler{} - -// DefaultMode implements SignModeHandler.DefaultMode -func (ModeHandler) DefaultMode() signingtypes.SignMode { - return signingtypes.SignMode_SIGN_MODE_DIRECT -} - -// Modes implements SignModeHandler.Modes -func (ModeHandler) Modes() []signingtypes.SignMode { - return []signingtypes.SignMode{signingtypes.SignMode_SIGN_MODE_DIRECT} -} - -// GetSignBytes implements SignModeHandler.GetSignBytes -func (ModeHandler) GetSignBytes(mode signingtypes.SignMode, data signing.SignerData, tx sdk.Tx) ([]byte, error) { - if mode != signingtypes.SignMode_SIGN_MODE_DIRECT { - return nil, fmt.Errorf("expected %s, got %s", signingtypes.SignMode_SIGN_MODE_DIRECT, mode) - } - - protoTx, ok := tx.(ProtoTx) - if !ok { - return nil, fmt.Errorf("can only get direct sign bytes for a ProtoTx, got %T", tx) - } - - bodyBz := protoTx.GetBodyBytes() - authInfoBz := protoTx.GetAuthInfoBytes() - - return SignBytes(bodyBz, authInfoBz, data.ChainID, data.AccountNumber, data.AccountSequence) -} - -// SignBytes returns the SIGN_MODE_DIRECT sign bytes for the provided TxBody bytes, AuthInfo bytes, chain ID, -// account number and sequence. -func SignBytes(bodyBytes, authInfoBytes []byte, chainID string, accnum, sequence uint64) ([]byte, error) { - signDoc := types.SignDoc{ - BodyBytes: bodyBytes, - AuthInfoBytes: authInfoBytes, - ChainId: chainID, - AccountNumber: accnum, - AccountSequence: sequence, - } - return signDoc.Marshal() -} diff --git a/x/auth/signing/handler_map_test.go b/x/auth/signing/handler_map_test.go index f4a7db2769..e419cff836 100644 --- a/x/auth/signing/handler_map_test.go +++ b/x/auth/signing/handler_map_test.go @@ -18,7 +18,7 @@ func MakeTestHandlerMap() signing.SignModeHandler { return signing.NewSignModeHandlerMap( signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, []signing.SignModeHandler{ - authtypes.LegacyAminoJSONHandler{}, + authtypes.NewStdTxSignModeHandler(), }, ) } @@ -58,7 +58,7 @@ func TestHandlerMap_GetSignBytes(t *testing.T) { ) handler := MakeTestHandlerMap() - aminoJSONHandler := authtypes.LegacyAminoJSONHandler{} + aminoJSONHandler := authtypes.NewStdTxSignModeHandler() signingData := signing.SignerData{ ChainID: chainId, diff --git a/x/auth/tx/builder.go b/x/auth/tx/builder.go index dc3a92082a..d311516919 100644 --- a/x/auth/tx/builder.go +++ b/x/auth/tx/builder.go @@ -15,7 +15,6 @@ import ( "github.com/cosmos/cosmos-sdk/types/tx" "github.com/cosmos/cosmos-sdk/types/tx/signing" authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" - "github.com/cosmos/cosmos-sdk/x/auth/signing/direct" ) type builder struct { @@ -34,12 +33,13 @@ type builder struct { pubKeys []crypto.PubKey pubkeyCodec types.PublicKeyCodec + + txBodyHasUnknownNonCriticals bool } var ( _ authsigning.SigFeeMemoTx = &builder{} _ client.TxBuilder = &builder{} - _ direct.ProtoTx = &builder{} ) func newBuilder(pubkeyCodec types.PublicKeyCodec) *builder { @@ -122,7 +122,7 @@ func (t *builder) ValidateBasic() error { return nil } -func (t *builder) GetBodyBytes() []byte { +func (t *builder) getBodyBytes() []byte { if len(t.bodyBz) == 0 { // if bodyBz is empty, then marshal the body. bodyBz will generally // be set to nil whenever SetBody is called so the result of calling @@ -138,7 +138,7 @@ func (t *builder) GetBodyBytes() []byte { return t.bodyBz } -func (t *builder) GetAuthInfoBytes() []byte { +func (t *builder) getAuthInfoBytes() []byte { if len(t.authInfoBz) == 0 { // if authInfoBz is empty, then marshal the body. authInfoBz will generally // be set to nil whenever SetAuthInfo is called so the result of calling diff --git a/x/auth/tx/builder_test.go b/x/auth/tx/builder_test.go index 0afd8dd85a..09206f2746 100644 --- a/x/auth/tx/builder_test.go +++ b/x/auth/tx/builder_test.go @@ -53,7 +53,7 @@ func TestTxBuilder(t *testing.T) { fee := txtypes.Fee{Amount: sdk.NewCoins(sdk.NewInt64Coin("atom", 150)), GasLimit: 20000} - t.Log("verify that authInfo bytes encoded with DefaultTxEncoder and decoded with DefaultTxDecoder can be retrieved from GetAuthInfoBytes") + t.Log("verify that authInfo bytes encoded with DefaultTxEncoder and decoded with DefaultTxDecoder can be retrieved from getAuthInfoBytes") authInfo := &txtypes.AuthInfo{ Fee: &fee, SignerInfos: signerInfo, @@ -63,7 +63,7 @@ func TestTxBuilder(t *testing.T) { require.NotEmpty(t, authInfoBytes) - t.Log("verify that body bytes encoded with DefaultTxEncoder and decoded with DefaultTxDecoder can be retrieved from GetBodyBytes") + t.Log("verify that body bytes encoded with DefaultTxEncoder and decoded with DefaultTxDecoder can be retrieved from getBodyBytes") anys := make([]*codectypes.Any, len(msgs)) for i, msg := range msgs { @@ -80,29 +80,29 @@ func TestTxBuilder(t *testing.T) { } bodyBytes := marshaler.MustMarshalBinaryBare(txBody) require.NotEmpty(t, bodyBytes) - require.Empty(t, txBuilder.GetBodyBytes()) + require.Empty(t, txBuilder.getBodyBytes()) - t.Log("verify that calling the SetMsgs, SetMemo results in the correct GetBodyBytes") - require.NotEqual(t, bodyBytes, txBuilder.GetBodyBytes()) + t.Log("verify that calling the SetMsgs, SetMemo results in the correct getBodyBytes") + require.NotEqual(t, bodyBytes, txBuilder.getBodyBytes()) err = txBuilder.SetMsgs(msgs...) require.NoError(t, err) - require.NotEqual(t, bodyBytes, txBuilder.GetBodyBytes()) + require.NotEqual(t, bodyBytes, txBuilder.getBodyBytes()) txBuilder.SetMemo(memo) - require.Equal(t, bodyBytes, txBuilder.GetBodyBytes()) + require.Equal(t, bodyBytes, txBuilder.getBodyBytes()) require.Equal(t, len(msgs), len(txBuilder.GetMsgs())) require.Equal(t, 0, len(txBuilder.GetPubKeys())) - t.Log("verify that updated AuthInfo results in the correct GetAuthInfoBytes and GetPubKeys") - require.NotEqual(t, authInfoBytes, txBuilder.GetAuthInfoBytes()) + t.Log("verify that updated AuthInfo results in the correct getAuthInfoBytes and GetPubKeys") + require.NotEqual(t, authInfoBytes, txBuilder.getAuthInfoBytes()) txBuilder.SetFeeAmount(fee.Amount) - require.NotEqual(t, authInfoBytes, txBuilder.GetAuthInfoBytes()) + require.NotEqual(t, authInfoBytes, txBuilder.getAuthInfoBytes()) txBuilder.SetGasLimit(fee.GasLimit) - require.NotEqual(t, authInfoBytes, txBuilder.GetAuthInfoBytes()) + require.NotEqual(t, authInfoBytes, txBuilder.getAuthInfoBytes()) err = txBuilder.SetSignatures(sig) require.NoError(t, err) // once fee, gas and signerInfos are all set, AuthInfo bytes should match - require.Equal(t, authInfoBytes, txBuilder.GetAuthInfoBytes()) + require.Equal(t, authInfoBytes, txBuilder.getAuthInfoBytes()) require.Equal(t, len(msgs), len(txBuilder.GetMsgs())) require.Equal(t, 1, len(txBuilder.GetPubKeys())) @@ -230,24 +230,3 @@ func TestBuilderValidateBasic(t *testing.T) { err = txBuilder.ValidateBasic() require.Error(t, err) } - -func TestDefaultTxDecoderError(t *testing.T) { - registry := codectypes.NewInterfaceRegistry() - pubKeyCdc := std.DefaultPublicKeyCodec{} - encoder := DefaultTxEncoder() - decoder := DefaultTxDecoder(registry, pubKeyCdc) - - builder := newBuilder(pubKeyCdc) - err := builder.SetMsgs(testdata.NewTestMsg()) - require.NoError(t, err) - - txBz, err := encoder(builder.GetTx()) - require.NoError(t, err) - - _, err = decoder(txBz) - require.EqualError(t, err, "no registered implementations of type types.Msg: tx parse error") - - registry.RegisterImplementations((*sdk.Msg)(nil), &testdata.TestMsg{}) - _, err = decoder(txBz) - require.NoError(t, err) -} diff --git a/x/auth/tx/generator.go b/x/auth/tx/config.go similarity index 62% rename from x/auth/tx/generator.go rename to x/auth/tx/config.go index 04d6896e5b..df63d3aa5d 100644 --- a/x/auth/tx/generator.go +++ b/x/auth/tx/config.go @@ -3,6 +3,8 @@ package tx import ( "fmt" + signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" + "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/client" @@ -11,7 +13,7 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth/signing" ) -type generator struct { +type config struct { pubkeyCodec types.PublicKeyCodec handler signing.SignModeHandler decoder sdk.TxDecoder @@ -21,11 +23,12 @@ type generator struct { protoCodec *codec.ProtoCodec } -// NewTxConfig returns a new protobuf TxConfig using the provided ProtoCodec, PublicKeyCodec and SignModeHandler. -func NewTxConfig(protoCodec *codec.ProtoCodec, pubkeyCodec types.PublicKeyCodec, signModeHandler signing.SignModeHandler) client.TxConfig { - return &generator{ +// NewTxConfig returns a new protobuf TxConfig using the provided ProtoCodec, PublicKeyCodec and sign modes. The +// first enabled sign mode will become the default sign mode. +func NewTxConfig(protoCodec *codec.ProtoCodec, pubkeyCodec types.PublicKeyCodec, enabledSignModes []signingtypes.SignMode) client.TxConfig { + return &config{ pubkeyCodec: pubkeyCodec, - handler: signModeHandler, + handler: makeSignModeHandler(enabledSignModes), decoder: DefaultTxDecoder(protoCodec, pubkeyCodec), encoder: DefaultTxEncoder(), jsonDecoder: DefaultJSONTxDecoder(protoCodec, pubkeyCodec), @@ -34,12 +37,12 @@ func NewTxConfig(protoCodec *codec.ProtoCodec, pubkeyCodec types.PublicKeyCodec, } } -func (g generator) NewTxBuilder() client.TxBuilder { +func (g config) NewTxBuilder() client.TxBuilder { return newBuilder(g.pubkeyCodec) } // WrapTxBuilder returns a builder from provided transaction -func (g generator) WrapTxBuilder(newTx sdk.Tx) (client.TxBuilder, error) { +func (g config) WrapTxBuilder(newTx sdk.Tx) (client.TxBuilder, error) { newBuilder, ok := newTx.(*builder) if !ok { return nil, fmt.Errorf("expected %T, got %T", &builder{}, newTx) @@ -48,22 +51,22 @@ func (g generator) WrapTxBuilder(newTx sdk.Tx) (client.TxBuilder, error) { return newBuilder, nil } -func (g generator) SignModeHandler() signing.SignModeHandler { +func (g config) SignModeHandler() signing.SignModeHandler { return g.handler } -func (g generator) TxEncoder() sdk.TxEncoder { +func (g config) TxEncoder() sdk.TxEncoder { return g.encoder } -func (g generator) TxDecoder() sdk.TxDecoder { +func (g config) TxDecoder() sdk.TxDecoder { return g.decoder } -func (g generator) TxJSONEncoder() sdk.TxEncoder { +func (g config) TxJSONEncoder() sdk.TxEncoder { return g.jsonEncoder } -func (g generator) TxJSONDecoder() sdk.TxDecoder { +func (g config) TxJSONDecoder() sdk.TxDecoder { return g.jsonDecoder } diff --git a/x/auth/tx/generator_test.go b/x/auth/tx/config_test.go similarity index 89% rename from x/auth/tx/generator_test.go rename to x/auth/tx/config_test.go index 21fc057dce..e3d9d5d2be 100644 --- a/x/auth/tx/generator_test.go +++ b/x/auth/tx/config_test.go @@ -20,6 +20,5 @@ func TestGenerator(t *testing.T) { interfaceRegistry.RegisterImplementations((*sdk.Msg)(nil), &testdata.TestMsg{}) marshaler := codec.NewProtoCodec(interfaceRegistry) pubKeyCodec := std.DefaultPublicKeyCodec{} - signModeHandler := DefaultSignModeHandler() - suite.Run(t, testutil.NewTxConfigTestSuite(NewTxConfig(marshaler, pubKeyCodec, signModeHandler))) + suite.Run(t, testutil.NewTxConfigTestSuite(NewTxConfig(marshaler, pubKeyCodec, DefaultSignModes))) } diff --git a/x/auth/tx/decoder.go b/x/auth/tx/decoder.go index 1ad8c73f1c..908c6e433c 100644 --- a/x/auth/tx/decoder.go +++ b/x/auth/tx/decoder.go @@ -3,8 +3,9 @@ package tx import ( "github.com/tendermint/tendermint/crypto" + "github.com/cosmos/cosmos-sdk/codec/unknownproto" + "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/codec/types" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -12,39 +13,71 @@ import ( ) // DefaultTxDecoder returns a default protobuf TxDecoder using the provided Marshaler and PublicKeyCodec -func DefaultTxDecoder(anyUnpacker types.AnyUnpacker, keyCodec cryptotypes.PublicKeyCodec) sdk.TxDecoder { - cdc := codec.NewProtoCodec(anyUnpacker) +func DefaultTxDecoder(cdc *codec.ProtoCodec, keyCodec cryptotypes.PublicKeyCodec) sdk.TxDecoder { return func(txBytes []byte) (sdk.Tx, error) { var raw tx.TxRaw - err := cdc.UnmarshalBinaryBare(txBytes, &raw) + + // reject all unknown proto fields in the root TxRaw + err := unknownproto.RejectUnknownFieldsStrict(txBytes, &raw) if err != nil { return nil, sdkerrors.Wrap(sdkerrors.ErrTxDecode, err.Error()) } - var theTx tx.Tx - err = cdc.UnmarshalBinaryBare(txBytes, &theTx) + err = cdc.UnmarshalBinaryBare(txBytes, &raw) + if err != nil { + return nil, err + } + + var body tx.TxBody + + // allow non-critical unknown fields in TxBody + txBodyHasUnknownNonCriticals, err := unknownproto.RejectUnknownFields(raw.BodyBytes, &body, true) if err != nil { return nil, sdkerrors.Wrap(sdkerrors.ErrTxDecode, err.Error()) } + err = cdc.UnmarshalBinaryBare(raw.BodyBytes, &body) + if err != nil { + return nil, sdkerrors.Wrap(sdkerrors.ErrTxDecode, err.Error()) + } + + var authInfo tx.AuthInfo + + // reject all unknown proto fields in AuthInfo + err = unknownproto.RejectUnknownFieldsStrict(raw.AuthInfoBytes, &authInfo) + if err != nil { + return nil, sdkerrors.Wrap(sdkerrors.ErrTxDecode, err.Error()) + } + + err = cdc.UnmarshalBinaryBare(raw.AuthInfoBytes, &authInfo) + if err != nil { + return nil, sdkerrors.Wrap(sdkerrors.ErrTxDecode, err.Error()) + } + + theTx := &tx.Tx{ + Body: &body, + AuthInfo: &authInfo, + Signatures: raw.Signatures, + } + pks, err := extractPubKeys(theTx, keyCodec) if err != nil { return nil, sdkerrors.Wrap(sdkerrors.ErrTxDecode, err.Error()) } return &builder{ - tx: &theTx, - bodyBz: raw.BodyBytes, - authInfoBz: raw.AuthInfoBytes, - pubKeys: pks, - pubkeyCodec: keyCodec, + tx: theTx, + bodyBz: raw.BodyBytes, + authInfoBz: raw.AuthInfoBytes, + pubKeys: pks, + pubkeyCodec: keyCodec, + txBodyHasUnknownNonCriticals: txBodyHasUnknownNonCriticals, }, nil } } // DefaultTxDecoder returns a default protobuf JSON TxDecoder using the provided Marshaler and PublicKeyCodec -func DefaultJSONTxDecoder(anyUnpacker types.AnyUnpacker, keyCodec cryptotypes.PublicKeyCodec) sdk.TxDecoder { - cdc := codec.NewProtoCodec(anyUnpacker) +func DefaultJSONTxDecoder(cdc *codec.ProtoCodec, keyCodec cryptotypes.PublicKeyCodec) sdk.TxDecoder { return func(txBytes []byte) (sdk.Tx, error) { var theTx tx.Tx err := cdc.UnmarshalJSON(txBytes, &theTx) @@ -52,7 +85,7 @@ func DefaultJSONTxDecoder(anyUnpacker types.AnyUnpacker, keyCodec cryptotypes.Pu return nil, sdkerrors.Wrap(sdkerrors.ErrTxDecode, err.Error()) } - pks, err := extractPubKeys(theTx, keyCodec) + pks, err := extractPubKeys(&theTx, keyCodec) if err != nil { return nil, sdkerrors.Wrap(sdkerrors.ErrTxDecode, err.Error()) } @@ -65,7 +98,7 @@ func DefaultJSONTxDecoder(anyUnpacker types.AnyUnpacker, keyCodec cryptotypes.Pu } } -func extractPubKeys(tx tx.Tx, keyCodec cryptotypes.PublicKeyCodec) ([]crypto.PubKey, error) { +func extractPubKeys(tx *tx.Tx, keyCodec cryptotypes.PublicKeyCodec) ([]crypto.PubKey, error) { if tx.AuthInfo == nil { return []crypto.PubKey{}, nil } diff --git a/x/auth/tx/direct.go b/x/auth/tx/direct.go new file mode 100644 index 0000000000..9e2c46de73 --- /dev/null +++ b/x/auth/tx/direct.go @@ -0,0 +1,56 @@ +package tx + +import ( + "fmt" + + signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" + + sdk "github.com/cosmos/cosmos-sdk/types" + types "github.com/cosmos/cosmos-sdk/types/tx" + "github.com/cosmos/cosmos-sdk/x/auth/signing" +) + +// signModeDirectHandler defines the SIGN_MODE_DIRECT SignModeHandler +type signModeDirectHandler struct{} + +var _ signing.SignModeHandler = signModeDirectHandler{} + +// DefaultMode implements SignModeHandler.DefaultMode +func (signModeDirectHandler) DefaultMode() signingtypes.SignMode { + return signingtypes.SignMode_SIGN_MODE_DIRECT +} + +// Modes implements SignModeHandler.Modes +func (signModeDirectHandler) Modes() []signingtypes.SignMode { + return []signingtypes.SignMode{signingtypes.SignMode_SIGN_MODE_DIRECT} +} + +// GetSignBytes implements SignModeHandler.GetSignBytes +func (signModeDirectHandler) GetSignBytes(mode signingtypes.SignMode, data signing.SignerData, tx sdk.Tx) ([]byte, error) { + if mode != signingtypes.SignMode_SIGN_MODE_DIRECT { + return nil, fmt.Errorf("expected %s, got %s", signingtypes.SignMode_SIGN_MODE_DIRECT, mode) + } + + protoTx, ok := tx.(*builder) + if !ok { + return nil, fmt.Errorf("can only handle a protobuf Tx, got %T", tx) + } + + bodyBz := protoTx.getBodyBytes() + authInfoBz := protoTx.getAuthInfoBytes() + + return DirectSignBytes(bodyBz, authInfoBz, data.ChainID, data.AccountNumber, data.AccountSequence) +} + +// DirectSignBytes returns the SIGN_MODE_DIRECT sign bytes for the provided TxBody bytes, AuthInfo bytes, chain ID, +// account number and sequence. +func DirectSignBytes(bodyBytes, authInfoBytes []byte, chainID string, accnum, sequence uint64) ([]byte, error) { + signDoc := types.SignDoc{ + BodyBytes: bodyBytes, + AuthInfoBytes: authInfoBytes, + ChainId: chainID, + AccountNumber: accnum, + AccountSequence: sequence, + } + return signDoc.Marshal() +} diff --git a/x/auth/signing/direct/direct_test.go b/x/auth/tx/direct_test.go similarity index 84% rename from x/auth/signing/direct/direct_test.go rename to x/auth/tx/direct_test.go index 7af0c16244..58ebf0ec13 100644 --- a/x/auth/signing/direct/direct_test.go +++ b/x/auth/tx/direct_test.go @@ -1,13 +1,9 @@ -package direct_test +package tx import ( "fmt" "testing" - "github.com/cosmos/cosmos-sdk/x/auth/tx" - - "github.com/cosmos/cosmos-sdk/x/auth/signing/direct" - "github.com/cosmos/cosmos-sdk/testutil/testdata" "github.com/cosmos/cosmos-sdk/codec" @@ -30,8 +26,8 @@ func TestDirectModeHandler(t *testing.T) { marshaler := codec.NewProtoCodec(interfaceRegistry) pubKeyCdc := std.DefaultPublicKeyCodec{} - txGen := tx.NewTxConfig(marshaler, pubKeyCdc, tx.DefaultSignModeHandler()) - txBuilder := txGen.NewTxBuilder() + txConfig := NewTxConfig(marshaler, pubKeyCdc, []signingtypes.SignMode{signingtypes.SignMode_SIGN_MODE_DIRECT}) + txBuilder := txConfig.NewTxBuilder() memo := "sometestmemo" msgs := []sdk.Msg{testdata.NewTestMsg(addr)} @@ -71,9 +67,9 @@ func TestDirectModeHandler(t *testing.T) { require.NoError(t, err) t.Log("verify modes and default-mode") - directModeHandler := direct.ModeHandler{} - require.Equal(t, directModeHandler.DefaultMode(), signingtypes.SignMode_SIGN_MODE_DIRECT) - require.Len(t, directModeHandler.Modes(), 1) + modeHandler := txConfig.SignModeHandler() + require.Equal(t, modeHandler.DefaultMode(), signingtypes.SignMode_SIGN_MODE_DIRECT) + require.Len(t, modeHandler.Modes(), 1) signingData := signing.SignerData{ ChainID: "test-chain", @@ -81,7 +77,7 @@ func TestDirectModeHandler(t *testing.T) { AccountSequence: 1, } - signBytes, err := directModeHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, txBuilder.GetTx()) + signBytes, err := modeHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, txBuilder.GetTx()) require.NoError(t, err) require.NotNil(t, signBytes) @@ -127,7 +123,7 @@ func TestDirectModeHandler(t *testing.T) { require.NoError(t, err) err = txBuilder.SetSignatures(sig) require.NoError(t, err) - signBytes, err = directModeHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, txBuilder.GetTx()) + signBytes, err = modeHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, txBuilder.GetTx()) require.NoError(t, err) require.Equal(t, expectedSignBytes, signBytes) @@ -146,7 +142,7 @@ func TestDirectModeHandler_nonDIRECT_MODE(t *testing.T) { } for _, invalidMode := range invalidModes { t.Run(invalidMode.String(), func(t *testing.T) { - var dh direct.ModeHandler + var dh signModeDirectHandler var signingData signing.SignerData _, err := dh.GetSignBytes(invalidMode, signingData, nil) require.Error(t, err) @@ -164,11 +160,11 @@ func (npt *nonProtoTx) ValidateBasic() error { return nil } var _ sdk.Tx = (*nonProtoTx)(nil) func TestDirectModeHandler_nonProtoTx(t *testing.T) { - var dh direct.ModeHandler + var dh signModeDirectHandler var signingData signing.SignerData tx := new(nonProtoTx) _, err := dh.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, tx) require.Error(t, err) - wantErr := fmt.Errorf("can only get direct sign bytes for a ProtoTx, got %T", tx) + wantErr := fmt.Errorf("can only handle a protobuf Tx, got %T", tx) require.Equal(t, err, wantErr) } diff --git a/x/auth/tx/encode_decode_test.go b/x/auth/tx/encode_decode_test.go new file mode 100644 index 0000000000..43d47a9817 --- /dev/null +++ b/x/auth/tx/encode_decode_test.go @@ -0,0 +1,165 @@ +package tx + +import ( + "fmt" + "testing" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/cosmos/cosmos-sdk/types/tx" + signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" + "github.com/cosmos/cosmos-sdk/x/auth/signing" + + "github.com/stretchr/testify/require" + + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/std" + "github.com/cosmos/cosmos-sdk/testutil/testdata" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func TestDefaultTxDecoderError(t *testing.T) { + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + pubKeyCdc := std.DefaultPublicKeyCodec{} + encoder := DefaultTxEncoder() + decoder := DefaultTxDecoder(cdc, pubKeyCdc) + + builder := newBuilder(pubKeyCdc) + err := builder.SetMsgs(testdata.NewTestMsg()) + require.NoError(t, err) + + txBz, err := encoder(builder.GetTx()) + require.NoError(t, err) + + _, err = decoder(txBz) + require.EqualError(t, err, "no registered implementations of type types.Msg: tx parse error") + + registry.RegisterImplementations((*sdk.Msg)(nil), &testdata.TestMsg{}) + _, err = decoder(txBz) + require.NoError(t, err) +} + +func TestUnknownFields(t *testing.T) { + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + pubKeyCdc := std.DefaultPublicKeyCodec{} + decoder := DefaultTxDecoder(cdc, pubKeyCdc) + + tests := []struct { + name string + body *testdata.TestUpdatedTxBody + authInfo *testdata.TestUpdatedAuthInfo + shouldErr bool + shouldAminoErr string + }{ + { + name: "no new fields should pass", + body: &testdata.TestUpdatedTxBody{ + Memo: "foo", + }, + authInfo: &testdata.TestUpdatedAuthInfo{}, + shouldErr: false, + }, + { + name: "non-critical fields in TxBody should not error on decode, but should error with amino", + body: &testdata.TestUpdatedTxBody{ + Memo: "foo", + SomeNewFieldNonCriticalField: "blah", + }, + authInfo: &testdata.TestUpdatedAuthInfo{}, + shouldErr: false, + shouldAminoErr: fmt.Sprintf("%s: %s", aminoNonCriticalFieldsError, sdkerrors.ErrInvalidRequest.Error()), + }, + { + name: "critical fields in TxBody should error on decode", + body: &testdata.TestUpdatedTxBody{ + Memo: "foo", + SomeNewField: 10, + }, + authInfo: &testdata.TestUpdatedAuthInfo{}, + shouldErr: true, + }, + { + name: "critical fields in AuthInfo should error on decode", + body: &testdata.TestUpdatedTxBody{ + Memo: "foo", + }, + authInfo: &testdata.TestUpdatedAuthInfo{ + NewField_3: []byte("xyz"), + }, + shouldErr: true, + }, + { + name: "non-critical fields in AuthInfo should error on decode", + body: &testdata.TestUpdatedTxBody{ + Memo: "foo", + }, + authInfo: &testdata.TestUpdatedAuthInfo{ + NewField_1024: []byte("xyz"), + }, + shouldErr: true, + }, + } + + for _, tt := range tests { + tt := tt + t.Run(tt.name, func(t *testing.T) { + bodyBz, err := tt.body.Marshal() + require.NoError(t, err) + + authInfoBz, err := tt.authInfo.Marshal() + require.NoError(t, err) + + txRaw := &tx.TxRaw{ + BodyBytes: bodyBz, + AuthInfoBytes: authInfoBz, + } + txBz, err := txRaw.Marshal() + require.NoError(t, err) + + _, err = decoder(txBz) + if tt.shouldErr { + require.Error(t, err) + } else { + require.NoError(t, err) + } + + if tt.shouldAminoErr != "" { + handler := signModeLegacyAminoJSONHandler{} + decoder := DefaultTxDecoder(codec.NewProtoCodec(codectypes.NewInterfaceRegistry()), std.DefaultPublicKeyCodec{}) + theTx, err := decoder(txBz) + require.NoError(t, err) + _, err = handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signing.SignerData{}, theTx) + require.EqualError(t, err, tt.shouldAminoErr) + } + }) + } + + t.Log("test TxRaw no new fields, should succeed") + txRaw := &testdata.TestUpdatedTxRaw{} + txBz, err := txRaw.Marshal() + require.NoError(t, err) + _, err = decoder(txBz) + require.NoError(t, err) + + t.Log("new field in TxRaw should fail") + txRaw = &testdata.TestUpdatedTxRaw{ + NewField_5: []byte("abc"), + } + txBz, err = txRaw.Marshal() + require.NoError(t, err) + _, err = decoder(txBz) + require.Error(t, err) + + // + t.Log("new \"non-critical\" field in TxRaw should fail") + txRaw = &testdata.TestUpdatedTxRaw{ + NewField_1024: []byte("abc"), + } + txBz, err = txRaw.Marshal() + require.NoError(t, err) + _, err = decoder(txBz) + require.Error(t, err) +} diff --git a/x/auth/tx/encoder.go b/x/auth/tx/encoder.go index 004728a3e1..5272740a98 100644 --- a/x/auth/tx/encoder.go +++ b/x/auth/tx/encoder.go @@ -19,8 +19,8 @@ func DefaultTxEncoder() types.TxEncoder { } raw := &txtypes.TxRaw{ - BodyBytes: wrapper.GetBodyBytes(), - AuthInfoBytes: wrapper.GetAuthInfoBytes(), + BodyBytes: wrapper.getBodyBytes(), + AuthInfoBytes: wrapper.getAuthInfoBytes(), Signatures: wrapper.tx.Signatures, } diff --git a/x/auth/tx/legacy_amino_json.go b/x/auth/tx/legacy_amino_json.go new file mode 100644 index 0000000000..4310c9612a --- /dev/null +++ b/x/auth/tx/legacy_amino_json.go @@ -0,0 +1,61 @@ +package tx + +import ( + "fmt" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/x/auth/types" + + sdk "github.com/cosmos/cosmos-sdk/types" + signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" + "github.com/cosmos/cosmos-sdk/x/auth/signing" +) + +// signModeLegacyAminoJSONHandler defines the SIGN_MODE_LEGACY_AMINO_JSON SignModeHandler +type signModeLegacyAminoJSONHandler struct{} + +func (s signModeLegacyAminoJSONHandler) DefaultMode() signingtypes.SignMode { + return signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON +} + +func (s signModeLegacyAminoJSONHandler) Modes() []signingtypes.SignMode { + return []signingtypes.SignMode{signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON} +} + +const aminoNonCriticalFieldsError = "protobuf transaction contains unknown non-critical fields. This is a transaction malleability issue and SIGN_MODE_LEGACY_AMINO_JSON cannot be used." + +func (s signModeLegacyAminoJSONHandler) GetSignBytes(mode signingtypes.SignMode, data signing.SignerData, tx sdk.Tx) ([]byte, error) { + if mode != signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON { + return nil, fmt.Errorf("expected %s, got %s", signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, mode) + } + + protoTx, ok := tx.(*builder) + if !ok { + return nil, fmt.Errorf("can only handle a protobuf Tx, got %T", tx) + } + + if protoTx.txBodyHasUnknownNonCriticals { + return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, aminoNonCriticalFieldsError) + } + + body := protoTx.tx.Body + + if len(body.ExtensionOptions) != 0 || len(body.NonCriticalExtensionOptions) != 0 { + return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, + "SIGN_MODE_LEGACY_AMINO_JSON does not support protobuf extension options.") + } + + if body.TimeoutHeight != 0 { + return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, + "SIGN_MODE_LEGACY_AMINO_JSON does not support timeout height.") + } + + return types.StdSignBytes( + data.ChainID, data.AccountNumber, data.AccountSequence, + //nolint:staticcheck + types.StdFee{Amount: protoTx.GetFee(), Gas: protoTx.GetGas()}, + tx.GetMsgs(), protoTx.GetMemo(), + ), nil +} + +var _ signing.SignModeHandler = signModeLegacyAminoJSONHandler{} diff --git a/x/auth/tx/legacy_amino_json_test.go b/x/auth/tx/legacy_amino_json_test.go new file mode 100644 index 0000000000..bbab15a55a --- /dev/null +++ b/x/auth/tx/legacy_amino_json_test.go @@ -0,0 +1,101 @@ +package tx + +import ( + "testing" + + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + + "github.com/stretchr/testify/require" + + "github.com/cosmos/cosmos-sdk/std" + "github.com/cosmos/cosmos-sdk/testutil/testdata" + sdk "github.com/cosmos/cosmos-sdk/types" + signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" + "github.com/cosmos/cosmos-sdk/x/auth/signing" + "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +var ( + _, _, addr1 = testdata.KeyTestPubAddr() + _, _, addr2 = testdata.KeyTestPubAddr() + + coins = sdk.Coins{sdk.NewInt64Coin("foocoin", 10)} + gas = uint64(10000) + msg = testdata.NewTestMsg(addr1, addr2) + memo = "foo" +) + +func buildTx(t *testing.T, bldr *builder) { + bldr.SetFeeAmount(coins) + bldr.SetGasLimit(gas) + bldr.SetMemo(memo) + require.NoError(t, bldr.SetMsgs(msg)) +} + +func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { + bldr := newBuilder(std.DefaultPublicKeyCodec{}) + buildTx(t, bldr) + tx := bldr.GetTx() + + var ( + chainId = "test-chain" + accNum uint64 = 7 + seqNum uint64 = 7 + ) + + handler := signModeLegacyAminoJSONHandler{} + signingData := signing.SignerData{ + ChainID: chainId, + AccountNumber: accNum, + AccountSequence: seqNum, + } + signBz, err := handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) + require.NoError(t, err) + + expectedSignBz := types.StdSignBytes(chainId, accNum, seqNum, types.StdFee{ + Amount: coins, + Gas: gas, + }, []sdk.Msg{msg}, memo) + + require.Equal(t, expectedSignBz, signBz) + + // expect error with wrong sign mode + _, err = handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, tx) + require.Error(t, err) + + // expect error with timeout height + bldr = newBuilder(std.DefaultPublicKeyCodec{}) + buildTx(t, bldr) + bldr.tx.Body.TimeoutHeight = 10 + tx = bldr.GetTx() + signBz, err = handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) + require.Error(t, err) + + // expect error with extension options + bldr = newBuilder(std.DefaultPublicKeyCodec{}) + buildTx(t, bldr) + any, err := cdctypes.NewAnyWithValue(testdata.NewTestMsg()) + require.NoError(t, err) + bldr.tx.Body.ExtensionOptions = []*cdctypes.Any{any} + tx = bldr.GetTx() + signBz, err = handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) + require.Error(t, err) + + // expect error with non-critical extension options + bldr = newBuilder(std.DefaultPublicKeyCodec{}) + buildTx(t, bldr) + bldr.tx.Body.NonCriticalExtensionOptions = []*cdctypes.Any{any} + tx = bldr.GetTx() + signBz, err = handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) + require.Error(t, err) +} + +func TestLegacyAminoJSONHandler_DefaultMode(t *testing.T) { + handler := signModeLegacyAminoJSONHandler{} + require.Equal(t, signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, handler.DefaultMode()) +} + +func TestLegacyAminoJSONHandler_Modes(t *testing.T) { + handler := signModeLegacyAminoJSONHandler{} + require.Equal(t, []signingtypes.SignMode{signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON}, handler.Modes()) +} diff --git a/x/auth/tx/mode_handler.go b/x/auth/tx/mode_handler.go index ef45d90dbf..f49ee16198 100644 --- a/x/auth/tx/mode_handler.go +++ b/x/auth/tx/mode_handler.go @@ -1,20 +1,40 @@ package tx import ( - signing2 "github.com/cosmos/cosmos-sdk/types/tx/signing" + "fmt" + + signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" "github.com/cosmos/cosmos-sdk/x/auth/signing" - "github.com/cosmos/cosmos-sdk/x/auth/signing/direct" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" ) -// DefaultSignModeHandler returns the default protobuf SignModeHandler supporting +// DefaultSignModes are the default sign modes enabled for protobuf transactions. +var DefaultSignModes = []signingtypes.SignMode{ + signingtypes.SignMode_SIGN_MODE_DIRECT, + signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, +} + +// makeSignModeHandler returns the default protobuf SignModeHandler supporting // SIGN_MODE_DIRECT and SIGN_MODE_LEGACY_AMINO_JSON. -func DefaultSignModeHandler() signing.SignModeHandler { +func makeSignModeHandler(modes []signingtypes.SignMode) signing.SignModeHandler { + if len(modes) < 1 { + panic(fmt.Errorf("no sign modes enabled")) + } + + handlers := make([]signing.SignModeHandler, len(modes)) + + for i, mode := range modes { + switch mode { + case signingtypes.SignMode_SIGN_MODE_DIRECT: + handlers[i] = signModeDirectHandler{} + case signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON: + handlers[i] = signModeLegacyAminoJSONHandler{} + default: + panic(fmt.Errorf("unsupported sign mode %+v", mode)) + } + } + return signing.NewSignModeHandlerMap( - signing2.SignMode_SIGN_MODE_DIRECT, - []signing.SignModeHandler{ - authtypes.LegacyAminoJSONHandler{}, - direct.ModeHandler{}, - }, + modes[0], + handlers, ) } diff --git a/x/auth/tx/sigs.go b/x/auth/tx/sigs.go index 1d13277f37..e2035e3a3a 100644 --- a/x/auth/tx/sigs.go +++ b/x/auth/tx/sigs.go @@ -105,7 +105,7 @@ func decodeMultisignatures(bz []byte) ([][]byte, error) { return multisig.Signatures, nil } -func (g generator) MarshalSignatureJSON(sigs []signing.SignatureV2) ([]byte, error) { +func (g config) MarshalSignatureJSON(sigs []signing.SignatureV2) ([]byte, error) { descs := make([]*signing.SignatureDescriptor, len(sigs)) for i, sig := range sigs { @@ -127,7 +127,7 @@ func (g generator) MarshalSignatureJSON(sigs []signing.SignatureV2) ([]byte, err return codec.ProtoMarshalJSON(toJSON) } -func (g generator) UnmarshalSignatureJSON(bz []byte) ([]signing.SignatureV2, error) { +func (g config) UnmarshalSignatureJSON(bz []byte) ([]signing.SignatureV2, error) { var sigDescs signing.SignatureDescriptors err := g.protoCodec.UnmarshalJSON(bz, &sigDescs) if err != nil { diff --git a/x/auth/types/amino_signing.go b/x/auth/types/amino_signing.go index f8747ca1da..ea9b197ee7 100644 --- a/x/auth/types/amino_signing.go +++ b/x/auth/types/amino_signing.go @@ -8,38 +8,37 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth/signing" ) -// LegacyAminoJSONHandler is a SignModeHandler that handles SIGN_MODE_LEGACY_AMINO_JSON -type LegacyAminoJSONHandler struct{} +// stdTxSignModeHandler is a SignModeHandler that handles SIGN_MODE_LEGACY_AMINO_JSON +type stdTxSignModeHandler struct{} -var _ signing.SignModeHandler = LegacyAminoJSONHandler{} +func NewStdTxSignModeHandler() signing.SignModeHandler { + return &stdTxSignModeHandler{} +} + +var _ signing.SignModeHandler = stdTxSignModeHandler{} // DefaultMode implements SignModeHandler.DefaultMode -func (h LegacyAminoJSONHandler) DefaultMode() signingtypes.SignMode { +func (h stdTxSignModeHandler) DefaultMode() signingtypes.SignMode { return signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON } // Modes implements SignModeHandler.Modes -func (LegacyAminoJSONHandler) Modes() []signingtypes.SignMode { +func (stdTxSignModeHandler) Modes() []signingtypes.SignMode { return []signingtypes.SignMode{signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON} } // DefaultMode implements SignModeHandler.GetSignBytes -func (LegacyAminoJSONHandler) GetSignBytes(mode signingtypes.SignMode, data signing.SignerData, tx sdk.Tx) ([]byte, error) { +func (stdTxSignModeHandler) GetSignBytes(mode signingtypes.SignMode, data signing.SignerData, tx sdk.Tx) ([]byte, error) { if mode != signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON { return nil, fmt.Errorf("expected %s, got %s", signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, mode) } - feeTx, ok := tx.(sdk.FeeTx) + stdTx, ok := tx.(StdTx) if !ok { - return nil, fmt.Errorf("expected FeeTx, got %T", tx) - } - - memoTx, ok := tx.(sdk.TxWithMemo) - if !ok { - return nil, fmt.Errorf("expected TxWithMemo, got %T", tx) + return nil, fmt.Errorf("expected %T, got %T", StdTx{}, tx) } return StdSignBytes( - data.ChainID, data.AccountNumber, data.AccountSequence, StdFee{Amount: feeTx.GetFee(), Gas: feeTx.GetGas()}, tx.GetMsgs(), memoTx.GetMemo(), + data.ChainID, data.AccountNumber, data.AccountSequence, StdFee{Amount: stdTx.GetFee(), Gas: stdTx.GetGas()}, tx.GetMsgs(), stdTx.GetMemo(), ), nil } diff --git a/x/auth/types/amino_signing_test.go b/x/auth/types/amino_signing_test.go index cee158b476..3f205ab65d 100644 --- a/x/auth/types/amino_signing_test.go +++ b/x/auth/types/amino_signing_test.go @@ -1,18 +1,16 @@ -package types_test +package types import ( "testing" - "github.com/cosmos/cosmos-sdk/x/auth/signing" - "github.com/cosmos/cosmos-sdk/x/auth/types" - "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/crypto/secp256k1" + "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/cosmos/cosmos-sdk/x/auth/signing" ) func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { @@ -23,20 +21,16 @@ func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { coins := sdk.Coins{sdk.NewInt64Coin("foocoin", 10)} - fee := types.StdFee{ + fee := StdFee{ Amount: coins, Gas: 10000, } memo := "foo" msgs := []sdk.Msg{ - &banktypes.MsgSend{ - FromAddress: addr1, - ToAddress: addr2, - Amount: coins, - }, + testdata.NewTestMsg(addr1, addr2), } - tx := types.StdTx{ + tx := StdTx{ Msgs: msgs, Fee: fee, Signatures: nil, @@ -49,7 +43,7 @@ func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { seqNum uint64 = 7 ) - handler := types.LegacyAminoJSONHandler{} + handler := stdTxSignModeHandler{} signingData := signing.SignerData{ ChainID: chainId, AccountNumber: accNum, @@ -58,7 +52,7 @@ func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { signBz, err := handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) require.NoError(t, err) - expectedSignBz := types.StdSignBytes(chainId, accNum, seqNum, fee, msgs, memo) + expectedSignBz := StdSignBytes(chainId, accNum, seqNum, fee, msgs, memo) require.Equal(t, expectedSignBz, signBz) @@ -68,11 +62,11 @@ func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { } func TestLegacyAminoJSONHandler_DefaultMode(t *testing.T) { - handler := types.LegacyAminoJSONHandler{} + handler := stdTxSignModeHandler{} require.Equal(t, signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, handler.DefaultMode()) } func TestLegacyAminoJSONHandler_Modes(t *testing.T) { - handler := types.LegacyAminoJSONHandler{} + handler := stdTxSignModeHandler{} require.Equal(t, []signingtypes.SignMode{signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON}, handler.Modes()) } diff --git a/x/auth/types/client_tx.go b/x/auth/types/client_tx.go index 9a73a8c7e0..4c3371c6a6 100644 --- a/x/auth/types/client_tx.go +++ b/x/auth/types/client_tx.go @@ -146,5 +146,5 @@ func (s StdTxConfig) UnmarshalSignatureJSON(bz []byte) ([]signing.SignatureV2, e } func (s StdTxConfig) SignModeHandler() authsigning.SignModeHandler { - return LegacyAminoJSONHandler{} + return stdTxSignModeHandler{} } diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index 8169b56ec9..93226ea42a 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -1569,614 +1569,615 @@ func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 9698 bytes of a gzipped FileDescriptorSet + // 9722 bytes of a gzipped FileDescriptorSet 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x7b, 0x70, 0x24, 0xc7, - 0x79, 0x1f, 0xf6, 0x81, 0xc5, 0xee, 0xb7, 0x8b, 0xc5, 0xa2, 0x81, 0xbb, 0xc3, 0x2d, 0xc9, 0xdb, - 0xe3, 0x1c, 0x1f, 0x38, 0x3e, 0x70, 0xd4, 0x89, 0xcf, 0x3d, 0x8a, 0x14, 0x16, 0xc0, 0xdd, 0x81, - 0x04, 0xee, 0xc0, 0x01, 0x70, 0xa4, 0x28, 0xdb, 0xe3, 0xc1, 0x6c, 0x63, 0x31, 0xc4, 0xee, 0xcc, - 0x72, 0x66, 0xf6, 0x0e, 0x60, 0x29, 0x55, 0x4c, 0xf9, 0x21, 0xc9, 0x91, 0x2d, 0x45, 0xb1, 0x1d, - 0x5a, 0x96, 0x64, 0x4a, 0xa9, 0x44, 0x8e, 0x92, 0xf8, 0x91, 0x28, 0x7a, 0xd8, 0xf9, 0x43, 0x55, - 0x79, 0x58, 0xa9, 0x72, 0xa5, 0xa4, 0xc4, 0x49, 0xb9, 0x52, 0x29, 0xd8, 0x22, 0x55, 0x65, 0x45, - 0x61, 0x12, 0xe5, 0x42, 0xbb, 0x5c, 0xd2, 0x1f, 0x49, 0xf5, 0x6b, 0x5e, 0x3b, 0xbb, 0x33, 0x38, - 0x1e, 0x29, 0xba, 0xa4, 0xbf, 0xb0, 0xd3, 0xf3, 0x7d, 0xbf, 0xee, 0xfe, 0xfa, 0xeb, 0xef, 0xfb, - 0xfa, 0xeb, 0xee, 0x01, 0x7c, 0x31, 0x0d, 0xb7, 0x69, 0xa6, 0xdd, 0x31, 0xed, 0x33, 0x2f, 0xf6, - 0xb0, 0xb5, 0x7f, 0xa6, 0xab, 0xb6, 0x74, 0x43, 0x75, 0x74, 0xd3, 0x98, 0xeb, 0x5a, 0xa6, 0x63, - 0xa2, 0x12, 0x7b, 0x3d, 0x47, 0x5f, 0x4b, 0x06, 0x14, 0xd7, 0xd4, 0x16, 0x96, 0xf1, 0x8b, 0x3d, - 0x6c, 0x3b, 0xa8, 0x02, 0x99, 0x5d, 0xbc, 0x3f, 0x93, 0x3a, 0x99, 0x9a, 0x2d, 0xc9, 0xe4, 0x27, - 0x3a, 0x0a, 0x39, 0x73, 0x7b, 0xdb, 0xc6, 0xce, 0x4c, 0xfa, 0x64, 0x6a, 0x36, 0x2b, 0xf3, 0x27, - 0x34, 0x0d, 0xa3, 0x6d, 0xbd, 0xa3, 0x3b, 0x33, 0x19, 0x5a, 0xcc, 0x1e, 0x50, 0x0d, 0x8a, 0x9a, - 0xd9, 0x33, 0x1c, 0xc5, 0x31, 0x1d, 0xb5, 0x3d, 0x93, 0x3d, 0x99, 0x9a, 0xcd, 0xcb, 0x40, 0x8b, - 0x36, 0x48, 0x89, 0xf4, 0x24, 0x94, 0x58, 0x7d, 0x76, 0xd7, 0x34, 0x6c, 0x8c, 0x8e, 0x43, 0xde, - 0xc0, 0x7b, 0x8e, 0xe2, 0xd5, 0x3a, 0x46, 0x9e, 0x9f, 0xc6, 0xfb, 0xa4, 0x06, 0x86, 0xc2, 0x2a, - 0x66, 0x0f, 0x8d, 0xc6, 0x37, 0x5e, 0x3b, 0x91, 0xfa, 0xe6, 0x6b, 0x27, 0x52, 0x7f, 0xfe, 0xda, - 0x89, 0xd4, 0x27, 0x5e, 0x3f, 0x31, 0xf2, 0xcd, 0xd7, 0x4f, 0x8c, 0xfc, 0xe9, 0xeb, 0x27, 0x46, - 0x9e, 0x9f, 0x6d, 0xe9, 0xce, 0x4e, 0x6f, 0x6b, 0x4e, 0x33, 0x3b, 0x67, 0xb8, 0x08, 0xd8, 0x9f, - 0xfb, 0xed, 0xe6, 0xee, 0x19, 0x67, 0xbf, 0x8b, 0xb9, 0x4c, 0xb6, 0x72, 0x54, 0x12, 0xef, 0x85, - 0xdf, 0x3c, 0x07, 0x27, 0x5b, 0xa6, 0xd9, 0x6a, 0xe3, 0x33, 0xb4, 0x64, 0xab, 0xb7, 0x7d, 0xa6, - 0x89, 0x6d, 0xcd, 0xd2, 0xbb, 0x8e, 0x69, 0x71, 0x79, 0x4d, 0x30, 0x8a, 0x39, 0x41, 0x21, 0xad, - 0xc2, 0xe4, 0x79, 0xbd, 0x8d, 0x17, 0x5d, 0xc2, 0x75, 0xec, 0xa0, 0x47, 0x21, 0xbb, 0xad, 0xb7, - 0xf1, 0x4c, 0xea, 0x64, 0x66, 0xb6, 0x78, 0xf6, 0x8e, 0xb9, 0x10, 0xd3, 0x5c, 0x90, 0x63, 0x8d, - 0x14, 0xcb, 0x94, 0x43, 0xfa, 0x4e, 0x16, 0xa6, 0x22, 0xde, 0x22, 0x04, 0x59, 0x43, 0xed, 0x60, - 0x2a, 0x95, 0x82, 0x4c, 0x7f, 0xa3, 0x19, 0x18, 0xeb, 0xaa, 0xda, 0xae, 0xda, 0xc2, 0x54, 0x28, - 0x05, 0x59, 0x3c, 0xa2, 0x13, 0x00, 0x4d, 0xdc, 0xc5, 0x46, 0x13, 0x1b, 0xda, 0xfe, 0x4c, 0xe6, - 0x64, 0x66, 0xb6, 0x20, 0xfb, 0x4a, 0xd0, 0xbd, 0x30, 0xd9, 0xed, 0x6d, 0xb5, 0x75, 0x4d, 0xf1, - 0x91, 0xc1, 0xc9, 0xcc, 0xec, 0xa8, 0x5c, 0x61, 0x2f, 0x16, 0x3d, 0xe2, 0xbb, 0x61, 0xe2, 0x1a, - 0x56, 0x77, 0xfd, 0xa4, 0x45, 0x4a, 0x5a, 0x26, 0xc5, 0x3e, 0xc2, 0x05, 0x28, 0x75, 0xb0, 0x6d, - 0xab, 0x2d, 0xac, 0x10, 0xf9, 0xce, 0x64, 0x69, 0xef, 0x4f, 0xf6, 0xf5, 0x3e, 0xdc, 0xf3, 0x22, - 0xe7, 0xda, 0xd8, 0xef, 0x62, 0x34, 0x0f, 0x05, 0x6c, 0xf4, 0x3a, 0x0c, 0x61, 0x74, 0x80, 0xfc, - 0x96, 0x8c, 0x5e, 0x27, 0x8c, 0x92, 0x27, 0x6c, 0x1c, 0x62, 0xcc, 0xc6, 0xd6, 0x55, 0x5d, 0xc3, - 0x33, 0x39, 0x0a, 0x70, 0x77, 0x1f, 0xc0, 0x3a, 0x7b, 0x1f, 0xc6, 0x10, 0x7c, 0x68, 0x01, 0x0a, - 0x78, 0xcf, 0xc1, 0x86, 0xad, 0x9b, 0xc6, 0xcc, 0x18, 0x05, 0xb9, 0x33, 0x62, 0x14, 0x71, 0xbb, - 0x19, 0x86, 0xf0, 0xf8, 0xd0, 0xc3, 0x30, 0x66, 0x76, 0xc9, 0x5c, 0xb3, 0x67, 0xf2, 0x27, 0x53, - 0xb3, 0xc5, 0xb3, 0xb7, 0x46, 0x2a, 0xc2, 0x65, 0x46, 0x23, 0x0b, 0x62, 0xb4, 0x0c, 0x15, 0xdb, - 0xec, 0x59, 0x1a, 0x56, 0x34, 0xb3, 0x89, 0x15, 0xdd, 0xd8, 0x36, 0x67, 0x0a, 0x14, 0xa0, 0xd6, - 0xdf, 0x11, 0x4a, 0xb8, 0x60, 0x36, 0xf1, 0xb2, 0xb1, 0x6d, 0xca, 0x65, 0x3b, 0xf0, 0x4c, 0xe6, - 0xab, 0xbd, 0x6f, 0x38, 0xea, 0xde, 0x4c, 0x89, 0x6a, 0x08, 0x7f, 0x92, 0xbe, 0x96, 0x83, 0x89, - 0x24, 0x2a, 0x76, 0x0e, 0x46, 0xb7, 0x49, 0x2f, 0x67, 0xd2, 0x87, 0x91, 0x01, 0xe3, 0x09, 0x0a, - 0x31, 0x77, 0x83, 0x42, 0x9c, 0x87, 0xa2, 0x81, 0x6d, 0x07, 0x37, 0x99, 0x46, 0x64, 0x12, 0xea, - 0x14, 0x30, 0xa6, 0x7e, 0x95, 0xca, 0xde, 0x90, 0x4a, 0x3d, 0x07, 0x13, 0x6e, 0x93, 0x14, 0x4b, - 0x35, 0x5a, 0x42, 0x37, 0xcf, 0xc4, 0xb5, 0x64, 0x6e, 0x49, 0xf0, 0xc9, 0x84, 0x4d, 0x2e, 0xe3, - 0xc0, 0x33, 0x5a, 0x04, 0x30, 0x0d, 0x6c, 0x6e, 0x2b, 0x4d, 0xac, 0xb5, 0x67, 0xf2, 0x03, 0xa4, - 0x74, 0x99, 0x90, 0xf4, 0x49, 0xc9, 0x64, 0xa5, 0x5a, 0x1b, 0x3d, 0xe6, 0xa9, 0xda, 0xd8, 0x00, - 0x4d, 0x59, 0x65, 0x93, 0xac, 0x4f, 0xdb, 0x36, 0xa1, 0x6c, 0x61, 0xa2, 0xf7, 0xb8, 0xc9, 0x7b, - 0x56, 0xa0, 0x8d, 0x98, 0x8b, 0xed, 0x99, 0xcc, 0xd9, 0x58, 0xc7, 0xc6, 0x2d, 0xff, 0x23, 0x3a, - 0x05, 0x6e, 0x81, 0x42, 0xd5, 0x0a, 0xa8, 0x15, 0x2a, 0x89, 0xc2, 0x4b, 0x6a, 0x07, 0x57, 0x5f, - 0x82, 0x72, 0x50, 0x3c, 0xc4, 0xcc, 0xdb, 0x8e, 0x6a, 0x39, 0x54, 0x0b, 0x47, 0x65, 0xf6, 0x40, - 0x1c, 0x11, 0x36, 0x9a, 0xd4, 0xca, 0x8d, 0xca, 0xe4, 0x27, 0x7a, 0xbf, 0xd7, 0xe1, 0x0c, 0xed, - 0xf0, 0x5d, 0xfd, 0x23, 0x1a, 0x40, 0x0e, 0xf7, 0xbb, 0xfa, 0x08, 0x8c, 0x07, 0x3a, 0x90, 0xb4, - 0x6a, 0xe9, 0x43, 0x70, 0x24, 0x12, 0x1a, 0x3d, 0x07, 0xd3, 0x3d, 0x43, 0x37, 0x1c, 0x6c, 0x75, - 0x2d, 0x4c, 0x34, 0x96, 0x55, 0x35, 0xf3, 0x17, 0x63, 0x03, 0x74, 0x6e, 0xd3, 0x4f, 0xcd, 0x50, - 0xe4, 0xa9, 0x5e, 0x7f, 0xe1, 0x3d, 0x85, 0xfc, 0x77, 0xc7, 0x2a, 0x2f, 0xbf, 0xfc, 0xf2, 0xcb, - 0x69, 0xe9, 0x95, 0x1c, 0x4c, 0x47, 0xcd, 0x99, 0xc8, 0xe9, 0x7b, 0x14, 0x72, 0x46, 0xaf, 0xb3, - 0x85, 0x2d, 0x2a, 0xa4, 0x51, 0x99, 0x3f, 0xa1, 0x79, 0x18, 0x6d, 0xab, 0x5b, 0x98, 0xb9, 0xe4, - 0xf2, 0xd9, 0x7b, 0x13, 0xcd, 0xca, 0xb9, 0x15, 0xc2, 0x22, 0x33, 0x4e, 0xf4, 0x04, 0x64, 0xb9, - 0x89, 0x26, 0x08, 0xf7, 0x24, 0x43, 0x20, 0x73, 0x49, 0xa6, 0x7c, 0xe8, 0x16, 0x28, 0x90, 0xbf, - 0x4c, 0x37, 0x72, 0xb4, 0xcd, 0x79, 0x52, 0x40, 0xf4, 0x02, 0x55, 0x21, 0x4f, 0xa7, 0x49, 0x13, - 0x0b, 0xd7, 0xe6, 0x3e, 0x13, 0xc5, 0x6a, 0xe2, 0x6d, 0xb5, 0xd7, 0x76, 0x94, 0xab, 0x6a, 0xbb, - 0x87, 0xa9, 0xc2, 0x17, 0xe4, 0x12, 0x2f, 0xbc, 0x42, 0xca, 0x48, 0xe4, 0xc1, 0x66, 0x95, 0x6e, - 0x34, 0xf1, 0x1e, 0xb5, 0x9e, 0xa3, 0x32, 0x9b, 0x68, 0xcb, 0xa4, 0x84, 0x54, 0xff, 0x82, 0x6d, - 0x1a, 0x42, 0x35, 0x69, 0x15, 0xa4, 0x80, 0x56, 0xff, 0x48, 0xd8, 0x70, 0xdf, 0x16, 0xdd, 0xbd, - 0xb0, 0x4e, 0x49, 0x5f, 0x4e, 0x43, 0x96, 0xda, 0x8b, 0x09, 0x28, 0x6e, 0x7c, 0x60, 0x6d, 0x49, - 0x59, 0xbc, 0xbc, 0xd9, 0x58, 0x59, 0xaa, 0xa4, 0x50, 0x19, 0x80, 0x16, 0x9c, 0x5f, 0xb9, 0x3c, - 0xbf, 0x51, 0x49, 0xbb, 0xcf, 0xcb, 0x97, 0x36, 0x1e, 0x7e, 0xb0, 0x92, 0x71, 0x19, 0x36, 0x59, - 0x41, 0xd6, 0x4f, 0xf0, 0xde, 0xb3, 0x95, 0x51, 0x54, 0x81, 0x12, 0x03, 0x58, 0x7e, 0x6e, 0x69, - 0xf1, 0xe1, 0x07, 0x2b, 0xb9, 0x60, 0xc9, 0x7b, 0xcf, 0x56, 0xc6, 0xd0, 0x38, 0x14, 0x68, 0x49, - 0xe3, 0xf2, 0xe5, 0x95, 0x4a, 0xde, 0xc5, 0x5c, 0xdf, 0x90, 0x97, 0x2f, 0x5d, 0xa8, 0x14, 0x5c, - 0xcc, 0x0b, 0xf2, 0xe5, 0xcd, 0xb5, 0x0a, 0xb8, 0x08, 0xab, 0x4b, 0xeb, 0xeb, 0xf3, 0x17, 0x96, - 0x2a, 0x45, 0x97, 0xa2, 0xf1, 0x81, 0x8d, 0xa5, 0xf5, 0x4a, 0x29, 0xd0, 0xac, 0xf7, 0x9e, 0xad, - 0x8c, 0xbb, 0x55, 0x2c, 0x5d, 0xda, 0x5c, 0xad, 0x94, 0xd1, 0x24, 0x8c, 0xb3, 0x2a, 0x44, 0x23, - 0x26, 0x42, 0x45, 0x0f, 0x3f, 0x58, 0xa9, 0x78, 0x0d, 0x61, 0x28, 0x93, 0x81, 0x82, 0x87, 0x1f, - 0xac, 0x20, 0x69, 0x01, 0x46, 0xa9, 0x76, 0x21, 0x04, 0xe5, 0x95, 0xf9, 0xc6, 0xd2, 0x8a, 0x72, - 0x79, 0x6d, 0x63, 0xf9, 0xf2, 0xa5, 0xf9, 0x95, 0x4a, 0xca, 0x2b, 0x93, 0x97, 0x9e, 0xd9, 0x5c, - 0x96, 0x97, 0x16, 0x2b, 0x69, 0x7f, 0xd9, 0xda, 0xd2, 0xfc, 0xc6, 0xd2, 0x62, 0x25, 0x23, 0x69, - 0x30, 0x1d, 0x65, 0x27, 0x23, 0x67, 0x86, 0x6f, 0x88, 0xd3, 0x03, 0x86, 0x98, 0x62, 0xf5, 0x0d, - 0xf1, 0xeb, 0x69, 0x98, 0x8a, 0xf0, 0x15, 0x91, 0x95, 0x3c, 0x09, 0xa3, 0x4c, 0x45, 0x99, 0xf7, - 0x3c, 0x1d, 0xe9, 0x74, 0xa8, 0xc2, 0xf6, 0x79, 0x50, 0xca, 0xe7, 0x8f, 0x20, 0x32, 0x03, 0x22, - 0x08, 0x02, 0xd1, 0x67, 0xd3, 0x7f, 0xba, 0xcf, 0xa6, 0x33, 0xb7, 0xf7, 0x70, 0x12, 0xb7, 0x47, - 0xcb, 0x0e, 0x67, 0xdb, 0x47, 0x23, 0x6c, 0xfb, 0x39, 0x98, 0xec, 0x03, 0x4a, 0x6c, 0x63, 0x7f, - 0x2e, 0x05, 0x33, 0x83, 0x84, 0x13, 0x63, 0xe9, 0xd2, 0x01, 0x4b, 0x77, 0x2e, 0x2c, 0xc1, 0xdb, - 0x07, 0x0f, 0x42, 0xdf, 0x58, 0x7f, 0x21, 0x05, 0x47, 0xa3, 0x23, 0xc5, 0xc8, 0x36, 0x3c, 0x01, - 0xb9, 0x0e, 0x76, 0x76, 0x4c, 0x11, 0x2d, 0xdd, 0x15, 0xe1, 0x83, 0xc9, 0xeb, 0xf0, 0x60, 0x73, - 0x2e, 0xbf, 0x13, 0xcf, 0x0c, 0x0a, 0xf7, 0x58, 0x6b, 0xfa, 0x5a, 0xfa, 0xd1, 0x34, 0x1c, 0x89, - 0x04, 0x8f, 0x6c, 0xe8, 0x6d, 0x00, 0xba, 0xd1, 0xed, 0x39, 0x2c, 0x22, 0x62, 0x06, 0xb6, 0x40, - 0x4b, 0xa8, 0xf1, 0x22, 0xc6, 0xb3, 0xe7, 0xb8, 0xef, 0x33, 0xf4, 0x3d, 0xb0, 0x22, 0x4a, 0xf0, - 0xa8, 0xd7, 0xd0, 0x2c, 0x6d, 0xe8, 0x89, 0x01, 0x3d, 0xed, 0x53, 0xcc, 0x07, 0xa0, 0xa2, 0xb5, - 0x75, 0x6c, 0x38, 0x8a, 0xed, 0x58, 0x58, 0xed, 0xe8, 0x46, 0x8b, 0x7a, 0x90, 0x7c, 0x7d, 0x74, - 0x5b, 0x6d, 0xdb, 0x58, 0x9e, 0x60, 0xaf, 0xd7, 0xc5, 0x5b, 0xc2, 0x41, 0x15, 0xc8, 0xf2, 0x71, - 0xe4, 0x02, 0x1c, 0xec, 0xb5, 0xcb, 0x21, 0x7d, 0xb2, 0x00, 0x45, 0x5f, 0x5c, 0x8d, 0x6e, 0x87, - 0xd2, 0x0b, 0xea, 0x55, 0x55, 0x11, 0x6b, 0x25, 0x26, 0x89, 0x22, 0x29, 0x5b, 0xe3, 0xeb, 0xa5, - 0x07, 0x60, 0x9a, 0x92, 0x98, 0x3d, 0x07, 0x5b, 0x8a, 0xd6, 0x56, 0x6d, 0x9b, 0x0a, 0x2d, 0x4f, - 0x49, 0x11, 0x79, 0x77, 0x99, 0xbc, 0x5a, 0x10, 0x6f, 0xd0, 0x43, 0x30, 0x45, 0x39, 0x3a, 0xbd, - 0xb6, 0xa3, 0x77, 0xdb, 0x58, 0x21, 0xab, 0x37, 0x9b, 0x7a, 0x12, 0xb7, 0x65, 0x93, 0x84, 0x62, - 0x95, 0x13, 0x90, 0x16, 0xd9, 0x68, 0x11, 0x6e, 0xa3, 0x6c, 0x2d, 0x6c, 0x60, 0x4b, 0x75, 0xb0, - 0x82, 0x5f, 0xec, 0xa9, 0x6d, 0x5b, 0x51, 0x8d, 0xa6, 0xb2, 0xa3, 0xda, 0x3b, 0x33, 0xd3, 0x04, - 0xa0, 0x91, 0x9e, 0x49, 0xc9, 0xc7, 0x09, 0xe1, 0x05, 0x4e, 0xb7, 0x44, 0xc9, 0xe6, 0x8d, 0xe6, - 0x45, 0xd5, 0xde, 0x41, 0x75, 0x38, 0x4a, 0x51, 0x6c, 0xc7, 0xd2, 0x8d, 0x96, 0xa2, 0xed, 0x60, - 0x6d, 0x57, 0xe9, 0x39, 0xdb, 0x8f, 0xce, 0xdc, 0xe2, 0xaf, 0x9f, 0xb6, 0x70, 0x9d, 0xd2, 0x2c, - 0x10, 0x92, 0x4d, 0x67, 0xfb, 0x51, 0xb4, 0x0e, 0x25, 0x32, 0x18, 0x1d, 0xfd, 0x25, 0xac, 0x6c, - 0x9b, 0x16, 0x75, 0x8d, 0xe5, 0x08, 0xd3, 0xe4, 0x93, 0xe0, 0xdc, 0x65, 0xce, 0xb0, 0x6a, 0x36, - 0x71, 0x7d, 0x74, 0x7d, 0x6d, 0x69, 0x69, 0x51, 0x2e, 0x0a, 0x94, 0xf3, 0xa6, 0x45, 0x14, 0xaa, - 0x65, 0xba, 0x02, 0x2e, 0x32, 0x85, 0x6a, 0x99, 0x42, 0xbc, 0x0f, 0xc1, 0x94, 0xa6, 0xb1, 0x3e, - 0xeb, 0x9a, 0xc2, 0xd7, 0x58, 0xf6, 0x4c, 0x25, 0x20, 0x2c, 0x4d, 0xbb, 0xc0, 0x08, 0xb8, 0x8e, - 0xdb, 0xe8, 0x31, 0x38, 0xe2, 0x09, 0xcb, 0xcf, 0x38, 0xd9, 0xd7, 0xcb, 0x30, 0xeb, 0x43, 0x30, - 0xd5, 0xdd, 0xef, 0x67, 0x44, 0x81, 0x1a, 0xbb, 0xfb, 0x61, 0xb6, 0x47, 0x60, 0xba, 0xbb, 0xd3, - 0xed, 0xe7, 0xbb, 0xc7, 0xcf, 0x87, 0xba, 0x3b, 0xdd, 0x30, 0xe3, 0x9d, 0x74, 0xc1, 0x6d, 0x61, - 0x4d, 0x75, 0x70, 0x73, 0xe6, 0x98, 0x9f, 0xdc, 0xf7, 0x02, 0x9d, 0x81, 0x8a, 0xa6, 0x29, 0xd8, - 0x50, 0xb7, 0xda, 0x58, 0x51, 0x2d, 0x6c, 0xa8, 0xf6, 0x4c, 0xcd, 0x4f, 0x5c, 0xd6, 0xb4, 0x25, - 0xfa, 0x76, 0x9e, 0xbe, 0x44, 0xf7, 0xc0, 0xa4, 0xb9, 0xf5, 0x82, 0xc6, 0x54, 0x52, 0xe9, 0x5a, - 0x78, 0x5b, 0xdf, 0x9b, 0xb9, 0x83, 0xca, 0x77, 0x82, 0xbc, 0xa0, 0x0a, 0xb9, 0x46, 0x8b, 0xd1, - 0x69, 0xa8, 0x68, 0xf6, 0x8e, 0x6a, 0x75, 0xa9, 0x4d, 0xb6, 0xbb, 0xaa, 0x86, 0x67, 0xee, 0x64, - 0xa4, 0xac, 0xfc, 0x92, 0x28, 0x26, 0x53, 0xc2, 0xbe, 0xa6, 0x6f, 0x3b, 0x02, 0xf1, 0x6e, 0x36, - 0x25, 0x68, 0x19, 0x47, 0x9b, 0x85, 0x0a, 0x11, 0x45, 0xa0, 0xe2, 0x59, 0x4a, 0x56, 0xee, 0xee, - 0x74, 0xfd, 0xf5, 0x9e, 0x82, 0x71, 0x42, 0xe9, 0x55, 0x7a, 0x9a, 0x05, 0x64, 0xdd, 0x1d, 0x5f, - 0x8d, 0x0f, 0xc2, 0x51, 0x42, 0xd4, 0xc1, 0x8e, 0xda, 0x54, 0x1d, 0xd5, 0x47, 0x7d, 0x1f, 0xa5, - 0x26, 0x72, 0x5f, 0xe5, 0x2f, 0x03, 0xed, 0xb4, 0x7a, 0x5b, 0xfb, 0xae, 0x66, 0xdd, 0xcf, 0xda, - 0x49, 0xca, 0x84, 0x6e, 0xbd, 0x6d, 0x41, 0xb7, 0x54, 0x87, 0x92, 0x5f, 0xf1, 0x51, 0x01, 0x98, - 0xea, 0x57, 0x52, 0x24, 0x0a, 0x5a, 0xb8, 0xbc, 0x48, 0xe2, 0x97, 0xe7, 0x97, 0x2a, 0x69, 0x12, - 0x47, 0xad, 0x2c, 0x6f, 0x2c, 0x29, 0xf2, 0xe6, 0xa5, 0x8d, 0xe5, 0xd5, 0xa5, 0x4a, 0xc6, 0x17, - 0xb0, 0x3f, 0x95, 0xcd, 0xdf, 0x55, 0xb9, 0x5b, 0xfa, 0x56, 0x1a, 0xca, 0xc1, 0x15, 0x18, 0x7a, - 0x1c, 0x8e, 0x89, 0x74, 0x89, 0x8d, 0x1d, 0xe5, 0x9a, 0x6e, 0xd1, 0x19, 0xd9, 0x51, 0x99, 0x77, - 0x74, 0x75, 0x62, 0x9a, 0x53, 0xad, 0x63, 0xe7, 0x59, 0xdd, 0x22, 0xf3, 0xad, 0xa3, 0x3a, 0x68, - 0x05, 0x6a, 0x86, 0xa9, 0xd8, 0x8e, 0x6a, 0x34, 0x55, 0xab, 0xa9, 0x78, 0x89, 0x2a, 0x45, 0xd5, - 0x34, 0x6c, 0xdb, 0x26, 0xf3, 0x84, 0x2e, 0xca, 0xad, 0x86, 0xb9, 0xce, 0x89, 0x3d, 0x17, 0x31, - 0xcf, 0x49, 0x43, 0xfa, 0x9b, 0x19, 0xa4, 0xbf, 0xb7, 0x40, 0xa1, 0xa3, 0x76, 0x15, 0x6c, 0x38, - 0xd6, 0x3e, 0x8d, 0xbb, 0xf3, 0x72, 0xbe, 0xa3, 0x76, 0x97, 0xc8, 0xf3, 0x3b, 0xb2, 0xfc, 0x79, - 0x2a, 0x9b, 0xcf, 0x57, 0x0a, 0x4f, 0x65, 0xf3, 0x85, 0x0a, 0x48, 0xaf, 0x65, 0xa0, 0xe4, 0x8f, - 0xc3, 0xc9, 0xb2, 0x46, 0xa3, 0x2e, 0x2b, 0x45, 0x8d, 0xda, 0xa9, 0xa1, 0x51, 0xfb, 0xdc, 0x02, - 0xf1, 0x65, 0xf5, 0x1c, 0x8b, 0x8e, 0x65, 0xc6, 0x49, 0xe2, 0x08, 0xa2, 0x6c, 0x98, 0x45, 0x23, - 0x79, 0x99, 0x3f, 0xa1, 0x0b, 0x90, 0x7b, 0xc1, 0xa6, 0xd8, 0x39, 0x8a, 0x7d, 0xc7, 0x70, 0xec, - 0xa7, 0xd6, 0x29, 0x78, 0xe1, 0xa9, 0x75, 0xe5, 0xd2, 0x65, 0x79, 0x75, 0x7e, 0x45, 0xe6, 0xec, - 0xe8, 0x38, 0x64, 0xdb, 0xea, 0x4b, 0xfb, 0x41, 0xaf, 0x47, 0x8b, 0x92, 0x0e, 0xc2, 0x71, 0xc8, - 0x5e, 0xc3, 0xea, 0x6e, 0xd0, 0xd7, 0xd0, 0xa2, 0xb7, 0x71, 0x32, 0x9c, 0x81, 0x51, 0x2a, 0x2f, - 0x04, 0xc0, 0x25, 0x56, 0x19, 0x41, 0x79, 0xc8, 0x2e, 0x5c, 0x96, 0xc9, 0x84, 0xa8, 0x40, 0x89, - 0x95, 0x2a, 0x6b, 0xcb, 0x4b, 0x0b, 0x4b, 0x95, 0xb4, 0xf4, 0x10, 0xe4, 0x98, 0x10, 0xc8, 0x64, - 0x71, 0xc5, 0x50, 0x19, 0xe1, 0x8f, 0x1c, 0x23, 0x25, 0xde, 0x6e, 0xae, 0x36, 0x96, 0xe4, 0x4a, - 0x3a, 0x38, 0xd4, 0xd9, 0xca, 0xa8, 0x64, 0x43, 0xc9, 0x1f, 0x88, 0xbf, 0x33, 0x8b, 0xec, 0xaf, - 0xa7, 0xa0, 0xe8, 0x0b, 0xac, 0x49, 0x44, 0xa4, 0xb6, 0xdb, 0xe6, 0x35, 0x45, 0x6d, 0xeb, 0xaa, - 0xcd, 0x55, 0x03, 0x68, 0xd1, 0x3c, 0x29, 0x49, 0x3a, 0x74, 0xef, 0xd0, 0x14, 0x19, 0xad, 0xe4, - 0xa4, 0xcf, 0xa6, 0xa0, 0x12, 0x8e, 0x6c, 0x43, 0xcd, 0x4c, 0xfd, 0x28, 0x9b, 0x29, 0x7d, 0x3a, - 0x05, 0xe5, 0x60, 0x38, 0x1b, 0x6a, 0xde, 0xed, 0x3f, 0xd2, 0xe6, 0xfd, 0x79, 0x1a, 0xc6, 0x03, - 0x41, 0x6c, 0xd2, 0xd6, 0xbd, 0x08, 0x93, 0x7a, 0x13, 0x77, 0xba, 0xa6, 0x83, 0x0d, 0x6d, 0x5f, - 0x69, 0xe3, 0xab, 0xb8, 0x3d, 0x23, 0x51, 0xa3, 0x71, 0x66, 0x78, 0x98, 0x3c, 0xb7, 0xec, 0xf1, - 0xad, 0x10, 0xb6, 0xfa, 0xd4, 0xf2, 0xe2, 0xd2, 0xea, 0xda, 0xe5, 0x8d, 0xa5, 0x4b, 0x0b, 0x1f, - 0x50, 0x36, 0x2f, 0x3d, 0x7d, 0xe9, 0xf2, 0xb3, 0x97, 0xe4, 0x8a, 0x1e, 0x22, 0x7b, 0x1b, 0xa7, - 0xfd, 0x1a, 0x54, 0xc2, 0x8d, 0x42, 0xc7, 0x20, 0xaa, 0x59, 0x95, 0x11, 0x34, 0x05, 0x13, 0x97, - 0x2e, 0x2b, 0xeb, 0xcb, 0x8b, 0x4b, 0xca, 0xd2, 0xf9, 0xf3, 0x4b, 0x0b, 0x1b, 0xeb, 0x2c, 0xf1, - 0xe1, 0x52, 0x6f, 0x04, 0x26, 0xb8, 0xf4, 0xa9, 0x0c, 0x4c, 0x45, 0xb4, 0x04, 0xcd, 0xf3, 0x25, - 0x0b, 0x5b, 0x45, 0xdd, 0x9f, 0xa4, 0xf5, 0x73, 0x24, 0x66, 0x58, 0x53, 0x2d, 0x87, 0xaf, 0x70, - 0x4e, 0x03, 0x91, 0x92, 0xe1, 0xe8, 0xdb, 0x3a, 0xb6, 0x78, 0x9e, 0x88, 0xad, 0x63, 0x26, 0xbc, - 0x72, 0x96, 0x2a, 0xba, 0x0f, 0x50, 0xd7, 0xb4, 0x75, 0x47, 0xbf, 0x8a, 0x15, 0xdd, 0x10, 0x49, - 0xa5, 0x2c, 0xdd, 0x65, 0xaa, 0x88, 0x37, 0xcb, 0x86, 0xe3, 0x52, 0x1b, 0xb8, 0xa5, 0x86, 0xa8, - 0x89, 0x31, 0xcf, 0xc8, 0x15, 0xf1, 0xc6, 0xa5, 0xbe, 0x1d, 0x4a, 0x4d, 0xb3, 0x47, 0x82, 0x3d, - 0x46, 0x47, 0x7c, 0x47, 0x4a, 0x2e, 0xb2, 0x32, 0x97, 0x84, 0x87, 0xf1, 0x5e, 0x36, 0xab, 0x24, - 0x17, 0x59, 0x19, 0x23, 0xb9, 0x1b, 0x26, 0xd4, 0x56, 0xcb, 0x22, 0xe0, 0x02, 0x88, 0x2d, 0x4c, - 0xca, 0x6e, 0x31, 0x25, 0xac, 0x3e, 0x05, 0x79, 0x21, 0x07, 0xe2, 0xaa, 0x89, 0x24, 0x94, 0x2e, - 0x5b, 0x6d, 0xa7, 0x67, 0x0b, 0x72, 0xde, 0x10, 0x2f, 0x6f, 0x87, 0x92, 0x6e, 0x2b, 0x5e, 0x72, - 0x3e, 0x7d, 0x32, 0x3d, 0x9b, 0x97, 0x8b, 0xba, 0xed, 0x26, 0x36, 0xa5, 0x2f, 0xa4, 0xa1, 0x1c, - 0xdc, 0x5c, 0x40, 0x8b, 0x90, 0x6f, 0x9b, 0x1a, 0xdd, 0x3d, 0xe4, 0x3b, 0x5b, 0xb3, 0x31, 0xfb, - 0x11, 0x73, 0x2b, 0x9c, 0x5e, 0x76, 0x39, 0xab, 0xff, 0x21, 0x05, 0x79, 0x51, 0x8c, 0x8e, 0x42, - 0xb6, 0xab, 0x3a, 0x3b, 0x14, 0x6e, 0xb4, 0x91, 0xae, 0xa4, 0x64, 0xfa, 0x4c, 0xca, 0xed, 0xae, - 0x6a, 0x50, 0x15, 0xe0, 0xe5, 0xe4, 0x99, 0x8c, 0x6b, 0x1b, 0xab, 0x4d, 0xba, 0xea, 0x31, 0x3b, - 0x1d, 0x6c, 0x38, 0xb6, 0x18, 0x57, 0x5e, 0xbe, 0xc0, 0x8b, 0xd1, 0xbd, 0x30, 0xe9, 0x58, 0xaa, - 0xde, 0x0e, 0xd0, 0x66, 0x29, 0x6d, 0x45, 0xbc, 0x70, 0x89, 0xeb, 0x70, 0x5c, 0xe0, 0x36, 0xb1, - 0xa3, 0x6a, 0x3b, 0xb8, 0xe9, 0x31, 0xe5, 0x68, 0x76, 0xe3, 0x18, 0x27, 0x58, 0xe4, 0xef, 0x05, - 0xaf, 0xf4, 0xad, 0x14, 0x4c, 0x8a, 0x75, 0x5a, 0xd3, 0x15, 0xd6, 0x2a, 0x80, 0x6a, 0x18, 0xa6, - 0xe3, 0x17, 0x57, 0xbf, 0x2a, 0xf7, 0xf1, 0xcd, 0xcd, 0xbb, 0x4c, 0xb2, 0x0f, 0xa0, 0xda, 0x01, - 0xf0, 0xde, 0x0c, 0x14, 0x5b, 0x0d, 0x8a, 0x7c, 0xe7, 0x88, 0x6e, 0x3f, 0xb2, 0x95, 0x3d, 0xb0, - 0x22, 0xb2, 0xa0, 0x43, 0xd3, 0x30, 0xba, 0x85, 0x5b, 0xba, 0xc1, 0xf3, 0xc1, 0xec, 0x41, 0xe4, - 0x5f, 0xb2, 0x6e, 0xfe, 0xa5, 0xf1, 0xf1, 0x14, 0x4c, 0x69, 0x66, 0x27, 0xdc, 0xde, 0x46, 0x25, - 0x94, 0x5e, 0xb0, 0x2f, 0xa6, 0x9e, 0x7f, 0xc2, 0xb7, 0xd3, 0xda, 0x32, 0xdb, 0xaa, 0xd1, 0xf2, - 0xf6, 0x4f, 0xe9, 0x0f, 0xed, 0xfe, 0x16, 0x36, 0xee, 0x6f, 0x99, 0xbe, 0xdd, 0xd4, 0x73, 0xde, - 0xcf, 0xbf, 0x4e, 0xa5, 0x3e, 0x9f, 0xce, 0x5c, 0x58, 0x6b, 0x7c, 0x31, 0x5d, 0xbd, 0xc0, 0xaa, - 0x5b, 0x13, 0xe2, 0x91, 0xf1, 0x76, 0x1b, 0x6b, 0xa4, 0xcb, 0xf0, 0xbd, 0x7b, 0x61, 0xba, 0x65, - 0xb6, 0x4c, 0x8a, 0x78, 0x86, 0xfc, 0xe2, 0x3b, 0xb2, 0x05, 0xb7, 0xb4, 0x1a, 0xbb, 0x7d, 0x5b, - 0xbf, 0x04, 0x53, 0x9c, 0x58, 0xa1, 0x5b, 0x42, 0x6c, 0x61, 0x83, 0x86, 0xa6, 0xd5, 0x66, 0x7e, - 0xff, 0x3b, 0xd4, 0xa1, 0xcb, 0x93, 0x9c, 0x95, 0xbc, 0x63, 0x6b, 0x9f, 0xba, 0x0c, 0x47, 0x02, - 0x78, 0x6c, 0xda, 0x62, 0x2b, 0x06, 0xf1, 0xdf, 0x72, 0xc4, 0x29, 0x1f, 0xe2, 0x3a, 0x67, 0xad, - 0x2f, 0xc0, 0xf8, 0x61, 0xb0, 0xfe, 0x1d, 0xc7, 0x2a, 0x61, 0x3f, 0xc8, 0x05, 0x98, 0xa0, 0x20, - 0x5a, 0xcf, 0x76, 0xcc, 0x0e, 0xb5, 0x89, 0xc3, 0x61, 0xfe, 0xe8, 0x3b, 0x6c, 0x1e, 0x95, 0x09, - 0xdb, 0x82, 0xcb, 0x55, 0xaf, 0x03, 0xdd, 0x05, 0x6b, 0x62, 0xad, 0x1d, 0x83, 0xf0, 0x0d, 0xde, - 0x10, 0x97, 0xbe, 0x7e, 0x05, 0xa6, 0xc9, 0x6f, 0x6a, 0xb2, 0xfc, 0x2d, 0x89, 0xcf, 0xc1, 0xcd, - 0x7c, 0xeb, 0xe7, 0xd8, 0x54, 0x9d, 0x72, 0x01, 0x7c, 0x6d, 0xf2, 0x8d, 0x62, 0x0b, 0x3b, 0x0e, - 0xb6, 0x6c, 0x45, 0x6d, 0x47, 0x35, 0xcf, 0x97, 0xc4, 0x98, 0xf9, 0x8d, 0x37, 0x82, 0xa3, 0x78, - 0x81, 0x71, 0xce, 0xb7, 0xdb, 0xf5, 0x4d, 0x38, 0x16, 0xa1, 0x15, 0x09, 0x30, 0x3f, 0xc5, 0x31, - 0xa7, 0xfb, 0x34, 0x83, 0xc0, 0xae, 0x81, 0x28, 0x77, 0xc7, 0x32, 0x01, 0xe6, 0x6f, 0x72, 0x4c, - 0xc4, 0x79, 0xc5, 0x90, 0x12, 0xc4, 0xa7, 0x60, 0xf2, 0x2a, 0xb6, 0xb6, 0x4c, 0x9b, 0x27, 0x8e, - 0x12, 0xc0, 0x7d, 0x9a, 0xc3, 0x4d, 0x70, 0x46, 0x9a, 0x49, 0x22, 0x58, 0x8f, 0x41, 0x7e, 0x5b, - 0xd5, 0x70, 0x02, 0x88, 0xcf, 0x70, 0x88, 0x31, 0x42, 0x4f, 0x58, 0xe7, 0xa1, 0xd4, 0x32, 0xb9, - 0xd7, 0x8a, 0x67, 0xff, 0x2c, 0x67, 0x2f, 0x0a, 0x1e, 0x0e, 0xd1, 0x35, 0xbb, 0xbd, 0x36, 0x71, - 0x69, 0xf1, 0x10, 0xbf, 0x25, 0x20, 0x04, 0x0f, 0x87, 0x38, 0x84, 0x58, 0x5f, 0x15, 0x10, 0xb6, - 0x4f, 0x9e, 0x4f, 0x42, 0xd1, 0x34, 0xda, 0xfb, 0xa6, 0x91, 0xa4, 0x11, 0x9f, 0xe3, 0x08, 0xc0, - 0x59, 0x08, 0xc0, 0x39, 0x28, 0x24, 0x1d, 0x88, 0x7f, 0xf8, 0x86, 0x98, 0x1e, 0x62, 0x04, 0x2e, - 0xc0, 0x84, 0x30, 0x50, 0xba, 0x69, 0x24, 0x80, 0xf8, 0x47, 0x1c, 0xa2, 0xec, 0x63, 0xe3, 0xdd, - 0x70, 0xb0, 0xed, 0xb4, 0x70, 0x12, 0x90, 0x2f, 0x88, 0x6e, 0x70, 0x16, 0x2e, 0xca, 0x2d, 0x6c, - 0x68, 0x3b, 0xc9, 0x10, 0x7e, 0x5b, 0x88, 0x52, 0xf0, 0x10, 0x88, 0x05, 0x18, 0xef, 0xa8, 0x96, - 0xbd, 0xa3, 0xb6, 0x13, 0x0d, 0xc7, 0x3f, 0xe6, 0x18, 0x25, 0x97, 0x89, 0x4b, 0xa4, 0x67, 0x1c, - 0x06, 0xe6, 0x8b, 0x42, 0x22, 0x3e, 0x36, 0x3e, 0xf5, 0x6c, 0x87, 0x66, 0xd9, 0x0e, 0x83, 0xf6, - 0x4f, 0xc4, 0xd4, 0x63, 0xbc, 0xab, 0x7e, 0xc4, 0x73, 0x50, 0xb0, 0xf5, 0x97, 0x12, 0xc1, 0xfc, - 0x53, 0x31, 0xd2, 0x94, 0x81, 0x30, 0x7f, 0x00, 0x8e, 0x47, 0xba, 0x89, 0x04, 0x60, 0xff, 0x8c, - 0x83, 0x1d, 0x8d, 0x70, 0x15, 0xdc, 0x24, 0x1c, 0x16, 0xf2, 0x77, 0x84, 0x49, 0xc0, 0x21, 0xac, - 0x35, 0xb2, 0x8e, 0xb0, 0xd5, 0xed, 0xc3, 0x49, 0xed, 0x77, 0x85, 0xd4, 0x18, 0x6f, 0x40, 0x6a, - 0x1b, 0x70, 0x94, 0x23, 0x1e, 0x6e, 0x5c, 0x7f, 0x4f, 0x18, 0x56, 0xc6, 0xbd, 0x19, 0x1c, 0xdd, - 0x0f, 0x42, 0xd5, 0x15, 0xa7, 0x08, 0x58, 0x6d, 0xa5, 0xa3, 0x76, 0x13, 0x20, 0xff, 0x3e, 0x47, - 0x16, 0x16, 0xdf, 0x8d, 0x78, 0xed, 0x55, 0xb5, 0x4b, 0xc0, 0x9f, 0x83, 0x19, 0x01, 0xde, 0x33, - 0x2c, 0xac, 0x99, 0x2d, 0x43, 0x7f, 0x09, 0x37, 0x13, 0x40, 0xff, 0xf3, 0xd0, 0x50, 0x6d, 0xfa, - 0xd8, 0x09, 0xf2, 0x32, 0x54, 0xdc, 0x58, 0x45, 0xd1, 0x3b, 0x5d, 0xd3, 0x72, 0x62, 0x10, 0xff, - 0x85, 0x18, 0x29, 0x97, 0x6f, 0x99, 0xb2, 0xd5, 0x97, 0xa0, 0x4c, 0x1f, 0x93, 0xaa, 0xe4, 0x97, - 0x38, 0xd0, 0xb8, 0xc7, 0xc5, 0x0d, 0x87, 0x66, 0x76, 0xba, 0xaa, 0x95, 0xc4, 0xfe, 0xfd, 0x4b, - 0x61, 0x38, 0x38, 0x0b, 0x37, 0x1c, 0xce, 0x7e, 0x17, 0x13, 0x6f, 0x9f, 0x00, 0xe1, 0xcb, 0xc2, - 0x70, 0x08, 0x1e, 0x0e, 0x21, 0x02, 0x86, 0x04, 0x10, 0x5f, 0x11, 0x10, 0x82, 0x87, 0x40, 0x3c, - 0xe3, 0x39, 0x5a, 0x0b, 0xb7, 0x74, 0xdb, 0xb1, 0x58, 0x98, 0x3c, 0x1c, 0xea, 0xab, 0x6f, 0x04, - 0x83, 0x30, 0xd9, 0xc7, 0x4a, 0x2c, 0x11, 0x4f, 0xbb, 0xd2, 0x55, 0x54, 0x7c, 0xc3, 0xbe, 0x26, - 0x2c, 0x91, 0x8f, 0x8d, 0xb4, 0xcd, 0x17, 0x21, 0x12, 0xb1, 0x6b, 0x64, 0xed, 0x90, 0x00, 0xee, - 0x0f, 0x42, 0x8d, 0x5b, 0x17, 0xbc, 0x04, 0xd3, 0x17, 0xff, 0xf4, 0x8c, 0x5d, 0xbc, 0x9f, 0x48, - 0x3b, 0xff, 0x30, 0x14, 0xff, 0x6c, 0x32, 0x4e, 0x66, 0x43, 0x26, 0x42, 0xf1, 0x14, 0x8a, 0x3b, - 0x3f, 0x34, 0xf3, 0xb7, 0xdf, 0xe4, 0xfd, 0x0d, 0x86, 0x53, 0xf5, 0x15, 0xa2, 0xe4, 0xc1, 0xa0, - 0x27, 0x1e, 0xec, 0xe7, 0xde, 0x74, 0xf5, 0x3c, 0x10, 0xf3, 0xd4, 0xcf, 0xc3, 0x78, 0x20, 0xe0, - 0x89, 0x87, 0xfa, 0x79, 0x0e, 0x55, 0xf2, 0xc7, 0x3b, 0xf5, 0x87, 0x20, 0x4b, 0x82, 0x97, 0x78, - 0xf6, 0x5f, 0xe0, 0xec, 0x94, 0xbc, 0xfe, 0x3e, 0xc8, 0x8b, 0xa0, 0x25, 0x9e, 0xf5, 0x17, 0x39, - 0xab, 0xcb, 0x42, 0xd8, 0x45, 0xc0, 0x12, 0xcf, 0xfe, 0x61, 0xc1, 0x2e, 0x58, 0x08, 0x7b, 0x72, - 0x11, 0x7e, 0xfd, 0xef, 0x64, 0xb9, 0xd3, 0x11, 0xb2, 0x3b, 0x07, 0x63, 0x3c, 0x52, 0x89, 0xe7, - 0xfe, 0x28, 0xaf, 0x5c, 0x70, 0xd4, 0x1f, 0x81, 0xd1, 0x84, 0x02, 0xff, 0x65, 0xce, 0xca, 0xe8, - 0xeb, 0x0b, 0x50, 0xf4, 0x45, 0x27, 0xf1, 0xec, 0xbf, 0xc2, 0xd9, 0xfd, 0x5c, 0xa4, 0xe9, 0x3c, - 0x3a, 0x89, 0x07, 0xf8, 0xb8, 0x68, 0x3a, 0xe7, 0x20, 0x62, 0x13, 0x81, 0x49, 0x3c, 0xf7, 0x27, - 0x84, 0xd4, 0x05, 0x4b, 0xfd, 0x49, 0x28, 0xb8, 0xce, 0x26, 0x9e, 0xff, 0xef, 0x72, 0x7e, 0x8f, - 0x87, 0x48, 0xc0, 0xe7, 0xec, 0xe2, 0x21, 0x3e, 0x29, 0x24, 0xe0, 0xe3, 0x22, 0xd3, 0x28, 0x1c, - 0xc0, 0xc4, 0x23, 0xfd, 0x3d, 0x31, 0x8d, 0x42, 0xf1, 0x0b, 0x19, 0x4d, 0x6a, 0xf3, 0xe3, 0x21, - 0x7e, 0x55, 0x8c, 0x26, 0xa5, 0x27, 0xcd, 0x08, 0x47, 0x04, 0xf1, 0x18, 0x7f, 0x5f, 0x34, 0x23, - 0x14, 0x10, 0xd4, 0xd7, 0x00, 0xf5, 0x47, 0x03, 0xf1, 0x78, 0xaf, 0x70, 0xbc, 0xc9, 0xbe, 0x60, - 0xa0, 0xfe, 0x2c, 0x1c, 0x8d, 0x8e, 0x04, 0xe2, 0x51, 0x7f, 0xe3, 0xcd, 0xd0, 0xda, 0xcd, 0x1f, - 0x08, 0xd4, 0x37, 0x3c, 0x97, 0xe2, 0x8f, 0x02, 0xe2, 0x61, 0x3f, 0xf5, 0x66, 0xd0, 0x70, 0xfb, - 0x83, 0x80, 0xfa, 0x3c, 0x80, 0xe7, 0x80, 0xe3, 0xb1, 0x3e, 0xcd, 0xb1, 0x7c, 0x4c, 0x64, 0x6a, - 0x70, 0xff, 0x1b, 0xcf, 0xff, 0x19, 0x31, 0x35, 0x38, 0x07, 0x99, 0x1a, 0xc2, 0xf5, 0xc6, 0x73, - 0x7f, 0x56, 0x4c, 0x0d, 0xc1, 0x42, 0x34, 0xdb, 0xe7, 0xdd, 0xe2, 0x11, 0x3e, 0x27, 0x34, 0xdb, - 0xc7, 0x55, 0xbf, 0x04, 0x93, 0x7d, 0x0e, 0x31, 0x1e, 0xea, 0xf3, 0x1c, 0xaa, 0x12, 0xf6, 0x87, - 0x7e, 0xe7, 0xc5, 0x9d, 0x61, 0x3c, 0xda, 0x3f, 0x08, 0x39, 0x2f, 0xee, 0x0b, 0xeb, 0xe7, 0x20, - 0x6f, 0xf4, 0xda, 0x6d, 0x32, 0x79, 0xd0, 0xf0, 0x33, 0x7f, 0x33, 0xff, 0xfd, 0x87, 0x5c, 0x3a, - 0x82, 0xa1, 0xfe, 0x10, 0x8c, 0xe2, 0xce, 0x16, 0x6e, 0xc6, 0x71, 0x7e, 0xef, 0x87, 0xc2, 0x60, - 0x12, 0xea, 0xfa, 0x93, 0x00, 0x2c, 0x35, 0x42, 0xb7, 0x07, 0x63, 0x78, 0xff, 0xc7, 0x0f, 0xf9, - 0x69, 0x1c, 0x8f, 0xc5, 0x03, 0x60, 0x67, 0x7b, 0x86, 0x03, 0xbc, 0x11, 0x04, 0xa0, 0x23, 0xf2, - 0x18, 0x8c, 0xbd, 0x60, 0x9b, 0x86, 0xa3, 0xb6, 0xe2, 0xb8, 0xff, 0x27, 0xe7, 0x16, 0xf4, 0x44, - 0x60, 0x1d, 0xd3, 0xc2, 0x8e, 0xda, 0xb2, 0xe3, 0x78, 0xff, 0x17, 0xe7, 0x75, 0x19, 0x08, 0xb3, - 0xa6, 0xda, 0x4e, 0x92, 0x7e, 0xff, 0x6f, 0xc1, 0x2c, 0x18, 0x48, 0xa3, 0xc9, 0xef, 0x5d, 0xbc, - 0x1f, 0xc7, 0xfb, 0x7d, 0xd1, 0x68, 0x4e, 0x5f, 0x7f, 0x1f, 0x14, 0xc8, 0x4f, 0x76, 0xc4, 0x2e, - 0x86, 0xf9, 0xff, 0x70, 0x66, 0x8f, 0x83, 0xd4, 0x6c, 0x3b, 0x4d, 0x47, 0x8f, 0x17, 0xf6, 0x75, - 0x3e, 0xd2, 0x82, 0xbe, 0x3e, 0x0f, 0x45, 0xdb, 0x69, 0x36, 0x7b, 0x3c, 0x3e, 0x8d, 0x61, 0xff, - 0xbf, 0x3f, 0x74, 0x53, 0x16, 0x2e, 0x0f, 0x19, 0xed, 0x6b, 0xbb, 0x4e, 0xd7, 0xa4, 0x5b, 0x20, - 0x71, 0x08, 0x6f, 0x72, 0x04, 0x1f, 0x4b, 0x7d, 0x01, 0x4a, 0xa4, 0x2f, 0x16, 0xee, 0x62, 0xba, - 0x5f, 0x15, 0x03, 0xf1, 0x97, 0x5c, 0x00, 0x01, 0xa6, 0xc6, 0x4f, 0x0f, 0xba, 0x77, 0x13, 0x9d, - 0x36, 0x86, 0x0b, 0xe6, 0x05, 0x93, 0x25, 0x8c, 0x9f, 0x97, 0x02, 0xe9, 0xe2, 0x96, 0xe9, 0x65, - 0x6b, 0xdd, 0x45, 0x0e, 0xfc, 0x41, 0x1a, 0xee, 0xa4, 0xc7, 0x7d, 0xad, 0x8e, 0x6e, 0x38, 0x67, - 0x34, 0x6b, 0xbf, 0xeb, 0x98, 0x67, 0x3a, 0xd8, 0xda, 0x6d, 0x63, 0xfe, 0x87, 0x67, 0x7f, 0x67, - 0x3c, 0xb2, 0x39, 0x46, 0x36, 0xc7, 0xde, 0x57, 0x23, 0xb3, 0xc5, 0xd2, 0x02, 0x8c, 0xad, 0x59, - 0xa6, 0xb9, 0x7d, 0xb9, 0x8b, 0x10, 0x3f, 0xc1, 0xcc, 0x4f, 0xc6, 0x51, 0x35, 0xe4, 0x37, 0x9e, - 0xd2, 0xde, 0x8d, 0x27, 0x04, 0xd9, 0xa6, 0xea, 0xa8, 0x34, 0x61, 0x5e, 0x92, 0xe9, 0x6f, 0xa9, - 0x01, 0xa3, 0x14, 0x04, 0x3d, 0x06, 0x19, 0xb3, 0x6b, 0xf3, 0xec, 0xfe, 0xed, 0x73, 0x83, 0xda, - 0x32, 0xc7, 0xab, 0x6c, 0x64, 0xbf, 0x71, 0x50, 0x1b, 0x91, 0x09, 0x4f, 0x63, 0xed, 0xaf, 0xbf, - 0x7d, 0x22, 0xf5, 0xdb, 0xaf, 0x9d, 0x48, 0x0d, 0xbc, 0xc1, 0x34, 0xe7, 0x13, 0x94, 0x4f, 0x18, - 0x83, 0xe4, 0xe2, 0xde, 0x63, 0xfa, 0xa5, 0x34, 0x9c, 0xf0, 0x11, 0xb5, 0xf5, 0x2d, 0xfb, 0xcc, - 0xee, 0x55, 0x76, 0xe5, 0x89, 0x4b, 0x0d, 0xf9, 0x5a, 0x4a, 0xde, 0xcf, 0xed, 0x5e, 0x1d, 0x20, - 0xaf, 0x39, 0xc8, 0xae, 0xa9, 0xba, 0x15, 0x71, 0x15, 0x6c, 0xda, 0x3b, 0xdc, 0x4a, 0xca, 0xd8, - 0x83, 0x74, 0x16, 0xf2, 0x4f, 0x2f, 0x3f, 0xfc, 0x60, 0x12, 0x9e, 0x0c, 0xe7, 0x69, 0xc8, 0x42, - 0x14, 0x5f, 0x8d, 0x10, 0xc7, 0xd7, 0x5f, 0x3f, 0x91, 0x8a, 0xbc, 0xd4, 0x15, 0x2d, 0x12, 0xde, - 0x5b, 0x57, 0x18, 0x9f, 0x48, 0x43, 0x2d, 0xbc, 0x2b, 0x40, 0xa6, 0xa2, 0xed, 0xa8, 0x9d, 0xee, - 0xa0, 0x3b, 0x5d, 0xe7, 0xa0, 0xb0, 0x21, 0x68, 0xd0, 0x0c, 0x8c, 0xd9, 0x58, 0x33, 0x8d, 0xa6, - 0x4d, 0x7b, 0x92, 0x91, 0xc5, 0x23, 0xe9, 0x8d, 0xa1, 0x1a, 0xa6, 0xcd, 0x8f, 0x9c, 0xb2, 0x87, - 0xc6, 0xaf, 0xa7, 0x0e, 0x37, 0x37, 0xca, 0x6e, 0x55, 0x74, 0x82, 0xac, 0xa5, 0x9e, 0xbf, 0x77, - 0xd8, 0x86, 0x0a, 0xbb, 0xb9, 0xe6, 0x76, 0xc1, 0xb7, 0x7b, 0x72, 0x22, 0xbc, 0x7b, 0xf2, 0x2c, - 0x6e, 0xb7, 0x9f, 0x36, 0xcc, 0x6b, 0xc6, 0x06, 0xe1, 0x71, 0x45, 0xf2, 0xb1, 0x34, 0x9c, 0xe8, - 0xdb, 0x28, 0xe1, 0xe6, 0x65, 0x90, 0x44, 0xea, 0x90, 0x5f, 0x14, 0x56, 0xeb, 0xb0, 0x02, 0xf9, - 0xd5, 0x43, 0x0a, 0x64, 0x5c, 0xd4, 0x24, 0xe4, 0x71, 0x4f, 0xbc, 0x3c, 0x44, 0xfb, 0x6f, 0x40, - 0x1c, 0x3f, 0xff, 0x04, 0xdc, 0xee, 0x53, 0x20, 0x75, 0x4b, 0xd3, 0xf9, 0xf5, 0x40, 0xff, 0x8c, - 0x39, 0xe2, 0x9b, 0x31, 0x84, 0x64, 0x8e, 0xbe, 0x8c, 0x9e, 0x34, 0xd5, 0x64, 0xb6, 0xab, 0x1a, - 0x33, 0x4b, 0xab, 0x71, 0x8a, 0x5b, 0x8d, 0x19, 0x46, 0xe9, 0xaf, 0x46, 0x61, 0x4c, 0xdc, 0xe5, - 0x7c, 0x14, 0xb2, 0x58, 0xdb, 0x31, 0xf9, 0x69, 0x77, 0x69, 0x2e, 0xb2, 0x3f, 0x73, 0x9c, 0x7a, - 0x49, 0xdb, 0x31, 0x2f, 0x8e, 0xc8, 0x94, 0x83, 0xde, 0x01, 0x6b, 0xf7, 0xec, 0x1d, 0x7e, 0x28, - 0xf9, 0xd4, 0x70, 0xd6, 0xf3, 0x84, 0xf4, 0xe2, 0x88, 0xcc, 0x78, 0x48, 0xb5, 0xf4, 0xfe, 0x5a, - 0x36, 0x49, 0xb5, 0xcb, 0xc6, 0x36, 0xad, 0x96, 0x70, 0xa0, 0x8b, 0x00, 0x36, 0x76, 0xc4, 0x51, - 0x86, 0x51, 0xca, 0x7f, 0xf7, 0x70, 0xfe, 0x75, 0xec, 0x30, 0xb7, 0x75, 0x71, 0x44, 0x2e, 0xd8, - 0xe2, 0x81, 0x20, 0xe9, 0x86, 0xee, 0x28, 0xda, 0x8e, 0xaa, 0x1b, 0x74, 0x0f, 0x3e, 0x16, 0x69, - 0xd9, 0xd0, 0x9d, 0x05, 0x42, 0x4e, 0x90, 0x74, 0xf1, 0x40, 0x44, 0x41, 0xef, 0x8c, 0xf2, 0x4b, - 0x56, 0x31, 0xa2, 0x78, 0x86, 0x90, 0x12, 0x51, 0x50, 0x1e, 0xf4, 0x34, 0x14, 0xe9, 0x76, 0xab, - 0xb2, 0xd5, 0x36, 0xb5, 0x5d, 0x7e, 0xb3, 0x64, 0x76, 0x38, 0x44, 0x83, 0x30, 0x34, 0x08, 0xfd, - 0xc5, 0x11, 0x19, 0xb6, 0xdc, 0x27, 0xd4, 0x80, 0x3c, 0x3b, 0xf6, 0xeb, 0xec, 0xf1, 0xbb, 0x81, - 0x77, 0x0e, 0x47, 0xa2, 0x27, 0x80, 0x37, 0xf6, 0x2e, 0x8e, 0xc8, 0x63, 0x1a, 0xfb, 0x89, 0x96, - 0xa0, 0x80, 0x8d, 0x26, 0x6f, 0x4e, 0x91, 0xdf, 0xa2, 0x1a, 0xae, 0x17, 0x46, 0x53, 0x34, 0x26, - 0x8f, 0xf9, 0x6f, 0xf4, 0x04, 0xe4, 0x34, 0xb3, 0xd3, 0xd1, 0x1d, 0x7a, 0xc7, 0xb0, 0x78, 0xf6, - 0x8e, 0x98, 0x86, 0x50, 0xda, 0x8b, 0x23, 0x32, 0xe7, 0x22, 0xc3, 0xd3, 0xc4, 0x6d, 0xfd, 0x2a, - 0xb6, 0x48, 0x67, 0xa6, 0x92, 0x0c, 0xcf, 0x22, 0xa3, 0xa7, 0xdd, 0x29, 0x34, 0xc5, 0x43, 0x63, - 0x8c, 0xbb, 0x17, 0xe9, 0x6e, 0x28, 0xfa, 0x34, 0x99, 0x58, 0x2c, 0xbe, 0x02, 0xe1, 0xce, 0x5e, - 0x3c, 0x4a, 0x65, 0x28, 0xf9, 0xf5, 0x56, 0xea, 0xb8, 0x8c, 0x74, 0x13, 0x7f, 0x06, 0xc6, 0xae, - 0x62, 0xcb, 0x66, 0x3b, 0xf8, 0x94, 0x91, 0x3f, 0xa2, 0x53, 0x30, 0x4e, 0xe5, 0xa6, 0x88, 0xf7, - 0xec, 0x5a, 0x72, 0x89, 0x16, 0x5e, 0xe1, 0x44, 0x35, 0x28, 0x76, 0xcf, 0x76, 0x5d, 0x12, 0x76, - 0x37, 0x1a, 0xba, 0x67, 0xbb, 0x9c, 0x40, 0xaa, 0x43, 0x25, 0xac, 0xba, 0x7e, 0xaf, 0x59, 0x88, - 0xf0, 0x9a, 0x05, 0xe1, 0x69, 0x7f, 0x2f, 0xed, 0x32, 0xbb, 0xda, 0x4a, 0xa6, 0x1b, 0x31, 0x12, - 0x94, 0xbb, 0x78, 0xb6, 0xda, 0x17, 0xda, 0xb9, 0xbe, 0xa6, 0x91, 0x27, 0xa1, 0xc8, 0x27, 0xfe, - 0xac, 0x96, 0x92, 0x29, 0x07, 0x3a, 0x4e, 0x14, 0x4a, 0xd5, 0x0d, 0x45, 0x6f, 0x8a, 0xdb, 0xc4, - 0xf4, 0x79, 0xb9, 0x89, 0x9e, 0x81, 0x8a, 0x66, 0x1a, 0x36, 0x36, 0xec, 0x9e, 0xad, 0x74, 0x55, - 0x4b, 0xed, 0x78, 0x97, 0xee, 0xa2, 0x87, 0x69, 0x41, 0x90, 0xaf, 0x51, 0x6a, 0x79, 0x42, 0x0b, - 0x16, 0xa0, 0x15, 0x80, 0xab, 0x6a, 0x5b, 0x6f, 0xaa, 0x8e, 0x69, 0xd9, 0xfc, 0x72, 0xca, 0x20, - 0xb0, 0x2b, 0x82, 0x70, 0xb3, 0xdb, 0x54, 0x1d, 0xcc, 0x83, 0x28, 0x1f, 0x3f, 0xba, 0x0b, 0x26, - 0xd4, 0x6e, 0x57, 0xb1, 0x1d, 0xd5, 0xc1, 0xca, 0xd6, 0xbe, 0x83, 0x6d, 0x6a, 0x2f, 0x4a, 0xf2, - 0xb8, 0xda, 0xed, 0xae, 0x93, 0xd2, 0x06, 0x29, 0x94, 0x9a, 0xee, 0x68, 0xd3, 0xa9, 0xe9, 0xc6, - 0x76, 0x29, 0x2f, 0xb6, 0x23, 0x65, 0xf4, 0x68, 0x05, 0x93, 0x81, 0x38, 0x8d, 0x92, 0xdb, 0xc1, - 0x7a, 0x6b, 0x87, 0x5d, 0x6f, 0xcf, 0xc8, 0xfc, 0x89, 0x0c, 0x4c, 0xd7, 0x32, 0xaf, 0x62, 0x7e, - 0xb3, 0x9d, 0x3d, 0x48, 0xbf, 0x96, 0x86, 0xc9, 0xbe, 0xe9, 0x4b, 0x70, 0xe9, 0x01, 0x7f, 0x5e, - 0x17, 0xf9, 0x8d, 0xce, 0x11, 0x5c, 0xb5, 0xc9, 0x2f, 0xad, 0x14, 0xcf, 0xde, 0x36, 0x40, 0x02, - 0x17, 0x29, 0x11, 0xef, 0x38, 0x67, 0x41, 0x9b, 0x50, 0x69, 0xab, 0xb6, 0xa3, 0xb0, 0x59, 0xc4, - 0x6e, 0x09, 0x67, 0x86, 0x5a, 0x82, 0x15, 0x55, 0xcc, 0x3e, 0xa2, 0xdc, 0x1c, 0xae, 0xdc, 0x0e, - 0x94, 0xa2, 0xe7, 0x60, 0x7a, 0x6b, 0xff, 0x25, 0xd5, 0x70, 0x74, 0x83, 0x1e, 0x36, 0x0a, 0x8e, - 0x51, 0x6d, 0x00, 0xf4, 0xd2, 0x55, 0xbd, 0x89, 0x0d, 0x4d, 0x0c, 0xce, 0x94, 0x0b, 0xe1, 0x0e, - 0x9e, 0x2d, 0x3d, 0x07, 0xe5, 0xa0, 0x2d, 0x42, 0x65, 0x48, 0x3b, 0x7b, 0x5c, 0x22, 0x69, 0x67, - 0x0f, 0x3d, 0xcc, 0x23, 0xf2, 0x34, 0x3d, 0x2d, 0x37, 0xc8, 0x59, 0x70, 0x6e, 0xef, 0x2e, 0xa1, - 0x24, 0xb9, 0x33, 0xc1, 0x35, 0x0c, 0x61, 0x6c, 0xe9, 0x34, 0x4c, 0x84, 0x8c, 0x98, 0x6f, 0x58, - 0x53, 0xfe, 0x61, 0x95, 0x26, 0x60, 0x3c, 0x60, 0xab, 0xa4, 0x3f, 0xce, 0x41, 0xde, 0xfd, 0x46, - 0xc1, 0x45, 0x28, 0xe0, 0x3d, 0x0d, 0x77, 0x1d, 0x61, 0x15, 0x86, 0x19, 0x71, 0xc6, 0xb3, 0x24, - 0xe8, 0x89, 0xb9, 0x72, 0x99, 0xd1, 0x63, 0x01, 0x97, 0x7c, 0x2a, 0x0e, 0xc4, 0xef, 0x93, 0x1f, - 0x0f, 0xfa, 0xe4, 0x3b, 0x62, 0x78, 0x43, 0x4e, 0xf9, 0xb1, 0x80, 0x53, 0x8e, 0xab, 0x38, 0xe0, - 0x95, 0x97, 0x23, 0xbc, 0x72, 0x5c, 0xf7, 0x07, 0xb8, 0xe5, 0xe5, 0x08, 0xb7, 0x3c, 0x1b, 0xdb, - 0x96, 0x48, 0xbf, 0xfc, 0x78, 0xd0, 0x2f, 0xc7, 0x89, 0x23, 0xe4, 0x98, 0x57, 0xa2, 0x1c, 0xf3, - 0xe9, 0x18, 0x8c, 0x81, 0x9e, 0x79, 0xa1, 0xcf, 0x33, 0xdf, 0x15, 0x03, 0x15, 0xe1, 0x9a, 0x97, - 0x03, 0x3e, 0x11, 0x12, 0xc9, 0x26, 0xda, 0x29, 0xa2, 0xf3, 0xfd, 0x5e, 0xfe, 0xee, 0x38, 0x55, - 0x8b, 0x72, 0xf3, 0x4f, 0x86, 0xdc, 0xfc, 0x9d, 0x71, 0xbd, 0x0a, 0xf9, 0x79, 0xcf, 0x3b, 0x9f, - 0x26, 0xf6, 0x31, 0x34, 0x33, 0x88, 0x2d, 0xc5, 0x96, 0x65, 0x5a, 0xdc, 0xf1, 0xb1, 0x07, 0x69, - 0x96, 0x58, 0x6c, 0x4f, 0xff, 0x87, 0x78, 0x72, 0x3a, 0x69, 0x7d, 0xda, 0x2e, 0x7d, 0x35, 0xe5, - 0xf1, 0x52, 0xcb, 0xe6, 0xb7, 0xf6, 0x05, 0x6e, 0xed, 0x7d, 0x0e, 0x3e, 0x1d, 0x74, 0xf0, 0x35, - 0x28, 0x12, 0x9f, 0x12, 0xf2, 0xdd, 0x6a, 0x57, 0xf8, 0x6e, 0x74, 0x0f, 0x4c, 0x52, 0xfb, 0xcb, - 0xc2, 0x00, 0x6e, 0x48, 0xb2, 0xd4, 0x90, 0x4c, 0x90, 0x17, 0x4c, 0x82, 0xcc, 0x51, 0xdc, 0x0f, - 0x53, 0x3e, 0x5a, 0x82, 0x4b, 0x7d, 0x01, 0x73, 0x52, 0x15, 0x97, 0x7a, 0xbe, 0xdb, 0xbd, 0xa8, - 0xda, 0x3b, 0xd2, 0xaa, 0x27, 0x20, 0x2f, 0x2e, 0x40, 0x90, 0xd5, 0xcc, 0x26, 0xeb, 0xf7, 0xb8, - 0x4c, 0x7f, 0x93, 0x58, 0xa1, 0x6d, 0xb6, 0xf8, 0x09, 0x48, 0xf2, 0x93, 0x50, 0xb9, 0x53, 0xbb, - 0xc0, 0xe6, 0xac, 0xf4, 0xa5, 0x94, 0x87, 0xe7, 0x85, 0x0a, 0x51, 0x5e, 0x3d, 0x75, 0x33, 0xbd, - 0x7a, 0xfa, 0xad, 0x79, 0x75, 0xe9, 0xcd, 0x94, 0x37, 0xa4, 0xae, 0xbf, 0xbe, 0x31, 0x11, 0x10, - 0xed, 0x62, 0x37, 0xc1, 0xd9, 0x49, 0x5d, 0xf6, 0x20, 0x42, 0xad, 0x5c, 0x44, 0x82, 0x62, 0xcc, - 0x97, 0xd4, 0x40, 0x0f, 0x51, 0x3f, 0x6f, 0x6e, 0x73, 0xd3, 0x50, 0x8b, 0x49, 0xf4, 0xc8, 0x8c, - 0xda, 0xe7, 0x5f, 0x0a, 0x81, 0xb0, 0xe1, 0x56, 0x28, 0x90, 0xa6, 0xb3, 0xeb, 0x4f, 0xc0, 0xd3, - 0x8b, 0xa2, 0x40, 0x6a, 0x02, 0xea, 0xb7, 0x31, 0xe8, 0x12, 0xe4, 0xf0, 0x55, 0x7a, 0x1a, 0x95, - 0x25, 0x9b, 0x6e, 0x1d, 0xe8, 0x88, 0xb1, 0xe1, 0x34, 0x66, 0x88, 0x30, 0xbf, 0x77, 0x50, 0xab, - 0x30, 0x9e, 0xfb, 0xcc, 0x8e, 0xee, 0xe0, 0x4e, 0xd7, 0xd9, 0x97, 0x39, 0x8a, 0xf4, 0xe1, 0x34, - 0xf1, 0x87, 0x01, 0xfb, 0x13, 0x29, 0x5e, 0x31, 0x69, 0xd2, 0xbe, 0x10, 0x29, 0x99, 0xc8, 0x6f, - 0x03, 0x68, 0xa9, 0xb6, 0x72, 0x4d, 0x35, 0x1c, 0xdc, 0xe4, 0x72, 0x2f, 0xb4, 0x54, 0xfb, 0x59, - 0x5a, 0x40, 0xe2, 0x4d, 0xf2, 0xba, 0x67, 0xe3, 0x26, 0x1d, 0x80, 0x8c, 0x3c, 0xd6, 0x52, 0xed, - 0x4d, 0x1b, 0x37, 0x7d, 0x7d, 0x1d, 0xbb, 0x19, 0x7d, 0x0d, 0xca, 0x3b, 0x1f, 0x96, 0xf7, 0x47, - 0xd3, 0xde, 0xec, 0xf0, 0xc2, 0x87, 0x1f, 0x4f, 0x59, 0x7c, 0x86, 0xae, 0x29, 0x82, 0x4e, 0x00, - 0x7d, 0x00, 0x26, 0xdd, 0x59, 0xa9, 0xf4, 0xe8, 0x6c, 0x15, 0x5a, 0x78, 0xb8, 0xc9, 0x5d, 0xb9, - 0x1a, 0x2c, 0xb6, 0xd1, 0xcf, 0xc0, 0xb1, 0x90, 0x0d, 0x72, 0x2b, 0x48, 0x1f, 0xca, 0x14, 0x1d, - 0x09, 0x9a, 0x22, 0x81, 0xef, 0x49, 0x2f, 0x73, 0x53, 0x66, 0xcd, 0x1d, 0x24, 0x84, 0xf5, 0xbb, - 0xb7, 0x28, 0x9d, 0x90, 0xfe, 0x24, 0x05, 0x13, 0xa1, 0x06, 0xa2, 0x47, 0x61, 0x94, 0x79, 0xe0, - 0xd4, 0xd0, 0x44, 0x08, 0x95, 0x38, 0xef, 0x13, 0x63, 0x40, 0xf3, 0x90, 0xc7, 0x3c, 0xba, 0xe6, - 0x42, 0xb9, 0x33, 0x26, 0x08, 0xe7, 0xfc, 0x2e, 0x1b, 0x5a, 0x84, 0x82, 0x2b, 0xfa, 0x98, 0x95, - 0x9b, 0x3b, 0x72, 0x1c, 0xc4, 0x63, 0x94, 0x16, 0xa0, 0xe8, 0x6b, 0x1e, 0xbb, 0x0b, 0xb8, 0xc7, - 0x97, 0x5b, 0x2c, 0x80, 0xce, 0x77, 0xd4, 0x3d, 0xba, 0xd2, 0x42, 0xc7, 0x60, 0x8c, 0xbc, 0x6c, - 0xf1, 0xcb, 0x52, 0x19, 0x39, 0xd7, 0x51, 0xf7, 0x2e, 0xa8, 0xb6, 0xf4, 0xb1, 0x14, 0x94, 0x83, - 0xed, 0x44, 0xf7, 0x02, 0x22, 0xb4, 0x6a, 0x0b, 0x2b, 0x46, 0xaf, 0xc3, 0x7c, 0xa4, 0x40, 0x9c, - 0xe8, 0xa8, 0x7b, 0xf3, 0x2d, 0x7c, 0xa9, 0xd7, 0xa1, 0x55, 0xdb, 0x68, 0x15, 0x2a, 0x82, 0x58, - 0x24, 0xbb, 0xb8, 0x54, 0x8e, 0xf7, 0x7f, 0xaf, 0x86, 0x13, 0xb0, 0xb5, 0xee, 0x2b, 0x64, 0xad, - 0x5b, 0x66, 0x78, 0xe2, 0x8d, 0xf4, 0x10, 0x4c, 0x84, 0x7a, 0x8c, 0x24, 0x18, 0xef, 0xf6, 0xb6, - 0x94, 0x5d, 0xbc, 0x4f, 0xaf, 0xbf, 0x33, 0x55, 0x2f, 0xc8, 0xc5, 0x6e, 0x6f, 0xeb, 0x69, 0xbc, - 0x4f, 0x73, 0x87, 0x92, 0x06, 0xe5, 0xe0, 0x62, 0x8a, 0x38, 0x0e, 0xcb, 0xec, 0x19, 0x4d, 0xf1, - 0x61, 0x03, 0xfa, 0x80, 0xce, 0xc1, 0xe8, 0x55, 0x93, 0x69, 0xf3, 0xb0, 0xd5, 0xd3, 0x15, 0xd3, - 0xc1, 0xbe, 0x25, 0x19, 0xe3, 0x91, 0x6c, 0x18, 0xa5, 0x7a, 0x19, 0xb9, 0x51, 0x71, 0x05, 0x40, - 0x75, 0x1c, 0x4b, 0xdf, 0xea, 0x79, 0xf0, 0x33, 0x73, 0xfd, 0x69, 0xfd, 0xb9, 0x35, 0x55, 0xb7, - 0x1a, 0xb7, 0x72, 0xcd, 0x9e, 0xf6, 0x78, 0x7c, 0xda, 0xed, 0x43, 0x92, 0xde, 0xc8, 0x42, 0x8e, - 0x2d, 0x37, 0xd1, 0x13, 0xc1, 0xe4, 0x47, 0xf1, 0xec, 0x89, 0x41, 0xcd, 0x67, 0x54, 0xbc, 0xf5, - 0x6e, 0x04, 0x75, 0x57, 0x38, 0xa3, 0xd0, 0x28, 0xbe, 0x76, 0x50, 0x1b, 0xa3, 0xd1, 0xc7, 0xf2, - 0xa2, 0x97, 0x5e, 0x18, 0xb4, 0xba, 0x16, 0xb9, 0x8c, 0xec, 0xa1, 0x73, 0x19, 0x17, 0x61, 0xdc, - 0x17, 0x6e, 0xe9, 0x4d, 0xbe, 0x4e, 0x39, 0x31, 0x6c, 0xd2, 0x2d, 0x2f, 0xf2, 0xf6, 0x17, 0xdd, - 0x70, 0x6c, 0xb9, 0x89, 0x66, 0x83, 0x8b, 0x6c, 0x1a, 0xb5, 0xb1, 0x70, 0xc1, 0xb7, 0x6e, 0xa6, - 0x77, 0xf2, 0x6f, 0x81, 0x02, 0xbd, 0xd8, 0x4c, 0x49, 0x58, 0xf4, 0x90, 0x27, 0x05, 0xf4, 0xe5, - 0xdd, 0x30, 0xe1, 0x05, 0x36, 0x8c, 0x24, 0xcf, 0x50, 0xbc, 0x62, 0x4a, 0xf8, 0x00, 0x4c, 0xd3, - 0x0f, 0xe0, 0x85, 0xa9, 0x0b, 0x94, 0x1a, 0x91, 0x77, 0x57, 0x82, 0x1c, 0x77, 0x42, 0xd9, 0x33, - 0xa1, 0x94, 0x16, 0x58, 0xea, 0xc3, 0x2d, 0xa5, 0x64, 0xc7, 0x21, 0xef, 0x86, 0x9d, 0x45, 0xf6, - 0x65, 0x3d, 0x95, 0x45, 0x9b, 0x6e, 0x20, 0x6b, 0x61, 0xbb, 0xd7, 0x76, 0x38, 0x48, 0x89, 0xd2, - 0xd0, 0x40, 0x56, 0x66, 0xe5, 0x94, 0xf6, 0x14, 0x8c, 0x0b, 0xab, 0xc2, 0xe8, 0xc6, 0x29, 0x5d, - 0x49, 0x14, 0x52, 0xa2, 0xd3, 0x50, 0xe9, 0x5a, 0x66, 0xd7, 0xb4, 0xb1, 0xa5, 0xa8, 0xcd, 0xa6, - 0x85, 0x6d, 0x7b, 0xa6, 0xcc, 0xf0, 0x44, 0xf9, 0x3c, 0x2b, 0x96, 0xde, 0x03, 0x63, 0x22, 0x9e, - 0x9e, 0x86, 0xd1, 0x86, 0x6b, 0x21, 0xb3, 0x32, 0x7b, 0x20, 0xfe, 0x75, 0xbe, 0xdb, 0xe5, 0xd9, - 0x35, 0xf2, 0x53, 0x6a, 0xc3, 0x18, 0x1f, 0xb0, 0xc8, 0x9c, 0xca, 0x2a, 0x94, 0xba, 0xaa, 0x45, - 0xba, 0xe1, 0xcf, 0xac, 0x0c, 0x5a, 0x11, 0xae, 0xa9, 0x96, 0xb3, 0x8e, 0x9d, 0x40, 0x82, 0xa5, - 0x48, 0xf9, 0x59, 0x91, 0xf4, 0x18, 0x8c, 0x07, 0x68, 0xbc, 0xef, 0x10, 0xf2, 0x89, 0x4e, 0x1f, - 0xdc, 0x96, 0xa4, 0xbd, 0x96, 0x48, 0xe7, 0xa0, 0xe0, 0x8e, 0x15, 0x59, 0x68, 0x08, 0x51, 0xf0, - 0x0f, 0x1b, 0xf2, 0x47, 0x9a, 0x44, 0x32, 0xaf, 0xf1, 0x4f, 0x34, 0x65, 0x64, 0xf6, 0x20, 0x61, - 0x9f, 0x61, 0x62, 0xde, 0x0c, 0x3d, 0x0e, 0x63, 0xdc, 0x30, 0xf1, 0xf9, 0x38, 0x28, 0x5d, 0xb4, - 0x46, 0x2d, 0x95, 0x48, 0x17, 0x31, 0xbb, 0xe5, 0x55, 0x93, 0xf6, 0x57, 0xf3, 0x21, 0xc8, 0x0b, - 0xe3, 0x13, 0xf4, 0x12, 0xac, 0x86, 0x93, 0x71, 0x5e, 0x82, 0x57, 0xe2, 0x31, 0x12, 0x6d, 0xb2, - 0xf5, 0x96, 0x81, 0x9b, 0x8a, 0x37, 0x05, 0xf9, 0x85, 0xd9, 0x09, 0xf6, 0x62, 0x45, 0xcc, 0x2f, - 0xe9, 0x01, 0xc8, 0xb1, 0xb6, 0x46, 0x9a, 0xb8, 0x28, 0xd7, 0xfa, 0x9d, 0x14, 0xe4, 0x85, 0xfb, - 0x88, 0x64, 0x0a, 0x74, 0x22, 0x7d, 0xa3, 0x9d, 0xb8, 0xf9, 0x26, 0xe9, 0x3e, 0x40, 0x54, 0x53, - 0x94, 0xab, 0xa6, 0xa3, 0x1b, 0x2d, 0x85, 0x8d, 0x05, 0xbf, 0x37, 0x48, 0xdf, 0x5c, 0xa1, 0x2f, - 0xd6, 0x48, 0xf9, 0x3d, 0xa7, 0xa0, 0xe8, 0xcb, 0x72, 0xa1, 0x31, 0xc8, 0x5c, 0xc2, 0xd7, 0x2a, - 0x23, 0xa8, 0x08, 0x63, 0x32, 0xa6, 0x39, 0x82, 0x4a, 0xea, 0xec, 0x1b, 0x63, 0x30, 0x31, 0xdf, - 0x58, 0x58, 0x9e, 0xef, 0x76, 0xdb, 0x3a, 0xbf, 0x4f, 0x77, 0x19, 0xb2, 0x74, 0x9d, 0x9c, 0x60, - 0x7f, 0xa7, 0x9a, 0x24, 0xe1, 0x84, 0x64, 0x18, 0xa5, 0xcb, 0x69, 0x94, 0x64, 0xdb, 0xa7, 0x9a, - 0x28, 0x0f, 0x45, 0x1a, 0x49, 0x15, 0x2e, 0xc1, 0x6e, 0x50, 0x35, 0x49, 0x72, 0x0a, 0xfd, 0x0c, - 0x14, 0xbc, 0x75, 0x72, 0xd2, 0x3d, 0xa2, 0x6a, 0xe2, 0xb4, 0x15, 0xc1, 0xf7, 0x56, 0x06, 0x49, - 0xb7, 0x26, 0xaa, 0x89, 0xf3, 0x35, 0xe8, 0x39, 0x18, 0x13, 0x6b, 0xb0, 0x64, 0xbb, 0x38, 0xd5, - 0x84, 0x29, 0x25, 0x32, 0x7c, 0x6c, 0xe9, 0x9c, 0x64, 0xab, 0xaa, 0x9a, 0x28, 0x6f, 0x86, 0x36, - 0x21, 0xc7, 0x83, 0xdf, 0x44, 0x3b, 0x3d, 0xd5, 0x64, 0x89, 0x22, 0x22, 0x64, 0x2f, 0x39, 0x91, - 0x74, 0x7b, 0xae, 0x9a, 0x38, 0x61, 0x88, 0x54, 0x00, 0xdf, 0x7a, 0x3a, 0xf1, 0xbe, 0x5b, 0x35, - 0x79, 0x22, 0x10, 0x7d, 0x10, 0xf2, 0xee, 0xaa, 0x29, 0xe1, 0x4e, 0x5a, 0x35, 0x69, 0x2e, 0xae, - 0xb1, 0x99, 0xf8, 0x94, 0xc4, 0xbd, 0xb1, 0xa7, 0x24, 0xbc, 0x4d, 0x6e, 0x77, 0x1b, 0xfc, 0x2f, - 0x53, 0x70, 0x3c, 0xbc, 0x9d, 0xac, 0x1a, 0xfb, 0x03, 0x0e, 0x04, 0x0c, 0x38, 0x2d, 0xf2, 0x38, - 0x64, 0xe6, 0x8d, 0x7d, 0x12, 0x6c, 0xd0, 0x6f, 0xfb, 0xf5, 0xac, 0xb6, 0x48, 0xd3, 0x91, 0xe7, - 0x4d, 0xab, 0x1d, 0x7d, 0x6a, 0xa4, 0x9e, 0xfd, 0xfe, 0xe7, 0x6a, 0x23, 0x8d, 0xdd, 0x88, 0x5e, - 0xc5, 0x9c, 0x15, 0xc8, 0xcf, 0x1b, 0xfb, 0xe2, 0x98, 0xc0, 0x28, 0xed, 0xd0, 0x61, 0xb7, 0xff, - 0x5f, 0x2f, 0x11, 0x64, 0xdf, 0xf7, 0x81, 0x79, 0x8f, 0x73, 0xec, 0x69, 0xc0, 0x0e, 0x7f, 0xfc, - 0x89, 0x81, 0xea, 0x60, 0x69, 0x4a, 0x17, 0x20, 0xbb, 0x60, 0xea, 0x34, 0xe4, 0x69, 0x62, 0xc3, - 0xec, 0x88, 0x9c, 0x27, 0x7d, 0x40, 0xa7, 0x20, 0xa7, 0x76, 0xcc, 0x9e, 0xe1, 0x88, 0xa8, 0x99, - 0xb8, 0x92, 0xff, 0x7a, 0x50, 0xcb, 0x2c, 0x1b, 0x8e, 0xcc, 0x5f, 0xd5, 0xb3, 0xdf, 0x7d, 0xb5, - 0x96, 0x92, 0x9e, 0x82, 0xb1, 0x45, 0xac, 0xdd, 0x08, 0xd6, 0x22, 0xd6, 0x42, 0x58, 0xa7, 0x21, - 0xbf, 0x6c, 0x38, 0xec, 0xa3, 0x61, 0xb7, 0x41, 0x46, 0x37, 0xd8, 0xb6, 0x48, 0xa8, 0x7e, 0x52, - 0x4e, 0x48, 0x17, 0xb1, 0xe6, 0x92, 0x36, 0xb1, 0x16, 0x26, 0x25, 0xf0, 0xa4, 0x5c, 0x6a, 0x40, - 0xe9, 0x8a, 0xda, 0xe6, 0xe1, 0x1e, 0xb6, 0xd1, 0x7d, 0x50, 0x50, 0xc5, 0x03, 0x5d, 0x59, 0x95, - 0x1a, 0xe5, 0x1f, 0x1c, 0xd4, 0xc0, 0x23, 0x92, 0x3d, 0x82, 0x7a, 0xf6, 0xe5, 0xff, 0x76, 0x32, - 0x25, 0x99, 0x30, 0x76, 0x41, 0xb5, 0xa9, 0xa5, 0x7f, 0x30, 0x90, 0x48, 0xa1, 0x91, 0x62, 0xe3, - 0xc8, 0xf5, 0x83, 0xda, 0xe4, 0xbe, 0xda, 0x69, 0xd7, 0x25, 0xef, 0x9d, 0xe4, 0xcf, 0xaf, 0xcc, - 0xf9, 0xf2, 0x2b, 0x34, 0x92, 0x6c, 0x4c, 0x5d, 0x3f, 0xa8, 0x4d, 0x78, 0x3c, 0xe4, 0x8d, 0xe4, - 0x26, 0x5d, 0xa4, 0x2e, 0xe4, 0x58, 0xd0, 0x1b, 0xb9, 0x43, 0xc8, 0x53, 0x3e, 0x69, 0x2f, 0xe5, - 0x53, 0x3f, 0x54, 0x9a, 0x81, 0xc7, 0x65, 0x8c, 0xa3, 0x9e, 0xfd, 0xc8, 0xab, 0xb5, 0x11, 0xc9, - 0x02, 0xb4, 0xae, 0x77, 0x7a, 0x6d, 0x76, 0xf1, 0x5b, 0x6c, 0x35, 0x3d, 0xc8, 0xda, 0x4d, 0xd3, - 0x49, 0x2c, 0x20, 0x9b, 0x98, 0xe3, 0x4a, 0xca, 0x05, 0xc2, 0xe2, 0x8c, 0x6f, 0x1e, 0xd4, 0x52, - 0xb4, 0xf5, 0x54, 0x46, 0x77, 0x41, 0x8e, 0x85, 0xf2, 0x3c, 0xfe, 0x29, 0x0b, 0x1e, 0xd6, 0x27, - 0x99, 0xbf, 0x95, 0x9e, 0x80, 0xb1, 0x55, 0xbb, 0xb5, 0x48, 0xba, 0x74, 0x1c, 0xf2, 0x1d, 0xbb, - 0xa5, 0xf8, 0xa2, 0xa9, 0xb1, 0x8e, 0xdd, 0xda, 0x18, 0x10, 0x85, 0xf1, 0x61, 0x79, 0x2f, 0xe4, - 0x36, 0xf6, 0x28, 0xfb, 0x29, 0x57, 0x4a, 0x19, 0x7f, 0x1b, 0x39, 0x7a, 0x80, 0xe9, 0xe7, 0x33, - 0x00, 0x1b, 0x7b, 0x6e, 0x0f, 0x07, 0x6c, 0xc1, 0x21, 0x09, 0x72, 0xce, 0x9e, 0x1b, 0x51, 0x17, - 0x1a, 0xf0, 0xda, 0x41, 0x2d, 0xb7, 0xb1, 0x47, 0x96, 0x17, 0x32, 0x7f, 0x13, 0x4c, 0x65, 0x65, - 0x42, 0xa9, 0x2c, 0x37, 0x81, 0x97, 0x8d, 0x48, 0xe0, 0x8d, 0xfa, 0x76, 0x00, 0x8e, 0xc1, 0x98, - 0xa5, 0x5e, 0x53, 0xc8, 0x88, 0xb2, 0xaf, 0x90, 0xe6, 0x2c, 0xf5, 0xda, 0x8a, 0xd9, 0x42, 0x0b, - 0x90, 0x6d, 0x9b, 0x2d, 0x91, 0x77, 0x3b, 0x2a, 0x3a, 0x45, 0x22, 0x2e, 0x7e, 0x9a, 0x78, 0xc5, - 0x6c, 0x35, 0x8e, 0x11, 0xf9, 0x7f, 0xf1, 0xcf, 0x6a, 0x13, 0xc1, 0x72, 0x5b, 0xa6, 0xcc, 0x6e, - 0x32, 0x30, 0x3f, 0x30, 0x19, 0x58, 0x18, 0x96, 0x0c, 0x84, 0x60, 0x32, 0xf0, 0x0e, 0xba, 0xa7, - 0xc9, 0xf6, 0x70, 0xa6, 0xfb, 0x82, 0xcf, 0x79, 0x63, 0x9f, 0xee, 0xa2, 0xde, 0x0a, 0x05, 0xf7, - 0xa0, 0x10, 0xff, 0xec, 0xb3, 0x57, 0xc0, 0xf5, 0xed, 0x23, 0x29, 0x28, 0x07, 0x5b, 0x4c, 0xf3, - 0x39, 0x76, 0x8b, 0x7f, 0x30, 0x95, 0xa5, 0x3d, 0x89, 0x52, 0x2c, 0x8b, 0x4c, 0x79, 0x48, 0xe7, - 0xe7, 0x43, 0x3a, 0x3f, 0x25, 0x04, 0xc4, 0xee, 0xee, 0x30, 0x55, 0x9f, 0xe6, 0xd2, 0x29, 0xf9, - 0x0a, 0x6d, 0x4f, 0xf5, 0xa9, 0x46, 0xfc, 0x2c, 0x14, 0x7d, 0x6f, 0x23, 0x83, 0xfa, 0x47, 0x22, - 0x92, 0x1d, 0x93, 0xee, 0x80, 0x88, 0x37, 0x62, 0x0b, 0xc1, 0x23, 0x75, 0x15, 0xb5, 0xe0, 0x12, - 0x25, 0x3d, 0x5e, 0xd1, 0x58, 0xfc, 0xd3, 0x6f, 0x9f, 0x18, 0x79, 0xf9, 0xb5, 0x13, 0x23, 0x03, - 0xcf, 0x67, 0x4a, 0xf1, 0x5f, 0x98, 0x77, 0xbd, 0xcc, 0x47, 0xdf, 0x0f, 0xb7, 0x72, 0x1a, 0xdb, - 0x51, 0x77, 0x75, 0xa3, 0x25, 0xfe, 0x72, 0x77, 0x53, 0xe6, 0xbd, 0xe1, 0xa5, 0x37, 0xee, 0x76, - 0xde, 0xea, 0xa1, 0xb1, 0x6a, 0x94, 0x37, 0x94, 0x0e, 0xb2, 0x80, 0x56, 0xed, 0xd6, 0x82, 0x85, - 0xd9, 0xc7, 0x46, 0xf8, 0x3a, 0x29, 0x78, 0xd9, 0x87, 0xdb, 0xa8, 0x5b, 0xe6, 0x82, 0x7d, 0x71, - 0xbf, 0x1b, 0xed, 0xe5, 0x88, 0x02, 0x57, 0x84, 0x96, 0x00, 0x68, 0x7a, 0xc5, 0xb6, 0xbd, 0x64, - 0x5e, 0x2d, 0x8c, 0xb1, 0xe0, 0x52, 0xc8, 0xaa, 0x83, 0x6d, 0x31, 0xd6, 0x1e, 0x23, 0xfa, 0x10, - 0x4c, 0x75, 0x74, 0x43, 0xb1, 0x71, 0x7b, 0x5b, 0x69, 0xe2, 0x36, 0xfd, 0x14, 0x0b, 0xdf, 0xb8, - 0x2b, 0x34, 0x56, 0xb8, 0x63, 0xba, 0x2b, 0x7e, 0xcc, 0xe6, 0x96, 0x0d, 0xe7, 0xfa, 0x41, 0xad, - 0xca, 0xbc, 0x43, 0x04, 0xa4, 0x24, 0x4f, 0x76, 0x74, 0x63, 0x1d, 0xb7, 0xb7, 0x17, 0xdd, 0x32, - 0xf4, 0x12, 0x4c, 0x72, 0x0a, 0xd3, 0x4b, 0x7a, 0x10, 0xdb, 0x53, 0x6a, 0xac, 0x5e, 0x3f, 0xa8, - 0xcd, 0x30, 0xb4, 0x3e, 0x12, 0xe9, 0x07, 0x07, 0xb5, 0xfb, 0x13, 0xb4, 0x69, 0x5e, 0xd3, 0x84, - 0x7b, 0xac, 0xb8, 0x20, 0xbc, 0x84, 0xd4, 0xed, 0x25, 0xe8, 0x45, 0xdd, 0xa3, 0xe1, 0xba, 0xfb, - 0x48, 0x92, 0xd6, 0xed, 0x73, 0xcd, 0x5e, 0x06, 0x5f, 0xd4, 0x7d, 0x14, 0x72, 0xdd, 0xde, 0x96, - 0xd8, 0x45, 0x2b, 0xc8, 0xfc, 0x09, 0xcd, 0xfa, 0x37, 0xd2, 0x8a, 0x67, 0x4b, 0x62, 0x3c, 0x49, - 0xac, 0xe2, 0xa6, 0x39, 0x59, 0xec, 0x47, 0xa3, 0x8f, 0xaf, 0x66, 0xa0, 0xb2, 0x6a, 0xb7, 0x96, - 0x9a, 0xba, 0x73, 0x93, 0xd5, 0xab, 0x1b, 0x25, 0x1d, 0xea, 0xcd, 0x1a, 0x0b, 0xd7, 0x0f, 0x6a, - 0x65, 0x26, 0x9d, 0x9b, 0x29, 0x93, 0x0e, 0x4c, 0x78, 0x7a, 0xa9, 0x58, 0xaa, 0xc3, 0xdd, 0x53, - 0x63, 0x31, 0xa1, 0x06, 0x2e, 0x62, 0xed, 0xfa, 0x41, 0xed, 0x28, 0x6b, 0x59, 0x08, 0x4a, 0x92, - 0xcb, 0x5a, 0x60, 0x2e, 0xa0, 0xbd, 0x68, 0xc5, 0xa7, 0xfb, 0x4f, 0x8d, 0x8b, 0x6f, 0xa3, 0xd2, - 0xf3, 0xa1, 0xfb, 0x4a, 0x1a, 0x8a, 0xc4, 0xd5, 0xb3, 0x72, 0x1c, 0x3d, 0x15, 0x52, 0x3f, 0xc2, - 0xa9, 0x90, 0x7e, 0x67, 0xa6, 0xc2, 0x3d, 0x6e, 0xac, 0x9d, 0x19, 0xa8, 0xf3, 0xc1, 0x90, 0xfb, - 0x3f, 0x66, 0xa8, 0x55, 0xa5, 0x2b, 0x48, 0x19, 0x37, 0xdf, 0x0d, 0x02, 0xfc, 0x85, 0x14, 0x1c, - 0xf1, 0xc4, 0x63, 0x5b, 0x5a, 0x48, 0x8a, 0xcf, 0x5c, 0x3f, 0xa8, 0xdd, 0x1a, 0x96, 0xa2, 0x8f, - 0xec, 0x06, 0x24, 0x39, 0xe5, 0x02, 0xad, 0x5b, 0x5a, 0x74, 0x3b, 0x9a, 0xb6, 0xe3, 0xb6, 0x23, - 0x33, 0xb8, 0x1d, 0x3e, 0xb2, 0xb7, 0xd4, 0x8e, 0x45, 0xdb, 0xe9, 0x1f, 0xd4, 0x6c, 0xc2, 0x41, - 0xfd, 0x5a, 0x1a, 0xc6, 0x57, 0xed, 0xd6, 0xa6, 0xd1, 0xfc, 0xc9, 0x84, 0x38, 0xec, 0x84, 0xf8, - 0x58, 0x0a, 0xca, 0x17, 0x75, 0xdb, 0x31, 0x2d, 0x5d, 0x53, 0xdb, 0x74, 0x35, 0xe3, 0x9d, 0x91, - 0x4c, 0x1d, 0xfe, 0x8c, 0xe4, 0x23, 0x90, 0xbb, 0xaa, 0xb6, 0xd9, 0xbf, 0x2b, 0xca, 0xd0, 0x3d, - 0xc2, 0x90, 0xef, 0x08, 0xe7, 0x80, 0x39, 0x39, 0x6f, 0xce, 0xef, 0xa6, 0x61, 0x22, 0x14, 0x78, - 0xa0, 0x06, 0x64, 0xa9, 0x45, 0x67, 0x0b, 0xde, 0xb9, 0x43, 0xc4, 0x15, 0x64, 0x4d, 0x4c, 0x79, - 0xd1, 0x4f, 0x41, 0xbe, 0xa3, 0xee, 0x31, 0xcf, 0xc0, 0xd6, 0x37, 0xf3, 0x87, 0xc3, 0xf1, 0x56, - 0xaf, 0x02, 0x47, 0x92, 0xc7, 0x3a, 0xea, 0x1e, 0xf5, 0x07, 0x5d, 0x98, 0x20, 0xa5, 0xda, 0x8e, - 0x6a, 0xb4, 0xb0, 0xdf, 0xfd, 0x5c, 0x3c, 0x74, 0x25, 0x47, 0xbd, 0x4a, 0x7c, 0x70, 0x92, 0x3c, - 0xde, 0x51, 0xf7, 0x16, 0x68, 0x01, 0xa9, 0xb1, 0x9e, 0x7f, 0xe5, 0xd5, 0xda, 0x08, 0x95, 0xd8, - 0xbf, 0x4f, 0x01, 0x78, 0x12, 0x43, 0x1b, 0x50, 0x09, 0xb9, 0x2f, 0x71, 0xc6, 0x28, 0x36, 0xc0, - 0xf3, 0x16, 0xb6, 0x13, 0x5a, 0x68, 0x08, 0x3e, 0x08, 0x45, 0x76, 0x4a, 0x40, 0xa1, 0xc9, 0xf8, - 0x74, 0x6c, 0x32, 0xfe, 0x04, 0xc1, 0xba, 0x7e, 0x50, 0x43, 0xac, 0x3b, 0x3e, 0x66, 0x89, 0xa6, - 0xe8, 0x81, 0x95, 0x10, 0x86, 0x60, 0x5f, 0x8a, 0xbe, 0xd8, 0x82, 0x9e, 0x3d, 0x33, 0x0d, 0x7d, - 0x17, 0x5b, 0xee, 0x1a, 0x99, 0x3d, 0xa2, 0x2a, 0xe4, 0xd9, 0x57, 0x05, 0x9d, 0x7d, 0xf1, 0xef, - 0x2a, 0xc4, 0x33, 0xe1, 0xba, 0x86, 0xb7, 0x6c, 0x5d, 0x8c, 0x82, 0x2c, 0x1e, 0xd1, 0x79, 0xa8, - 0xd8, 0x58, 0xeb, 0x59, 0xba, 0xb3, 0xaf, 0x68, 0xa6, 0xe1, 0xa8, 0x9a, 0xc3, 0x9d, 0xf6, 0x2d, - 0xd7, 0x0f, 0x6a, 0xc7, 0x58, 0x5b, 0xc3, 0x14, 0x92, 0x3c, 0x21, 0x8a, 0x16, 0x58, 0x09, 0xa9, - 0xa1, 0x89, 0x1d, 0x55, 0x6f, 0xdb, 0x7c, 0x61, 0x2b, 0x1e, 0x7d, 0x7d, 0xf9, 0x9d, 0x31, 0xff, - 0x66, 0xd4, 0x35, 0xa8, 0x98, 0x5d, 0x6c, 0x45, 0xd8, 0xa3, 0x15, 0xaf, 0xe6, 0x30, 0xc5, 0x0d, - 0x98, 0x84, 0x09, 0x81, 0x21, 0x2c, 0xc2, 0xf9, 0xc0, 0x99, 0x33, 0x16, 0x37, 0xa6, 0xc3, 0x5d, - 0x0e, 0x53, 0x48, 0xfe, 0x83, 0x66, 0x2c, 0xba, 0x3c, 0x0a, 0xb9, 0x17, 0x54, 0xbd, 0x2d, 0x3e, - 0xb5, 0x2a, 0xf3, 0x27, 0xb4, 0x0c, 0x39, 0xdb, 0x51, 0x9d, 0x1e, 0x0b, 0xbd, 0x47, 0x1b, 0xef, - 0x49, 0xd8, 0xe6, 0x86, 0x69, 0x34, 0xd7, 0x29, 0xa3, 0xcc, 0x01, 0xd0, 0x79, 0xc8, 0x39, 0xe6, - 0x2e, 0x36, 0xb8, 0x50, 0x0f, 0x35, 0xd3, 0x69, 0xa2, 0x8e, 0x71, 0x23, 0x07, 0x3c, 0xa3, 0xac, - 0xd8, 0x3b, 0xaa, 0x85, 0x6d, 0x16, 0x2a, 0x37, 0x96, 0x0f, 0x3d, 0x1d, 0x8f, 0x85, 0x3d, 0x05, - 0xc3, 0x93, 0xe4, 0x09, 0xb7, 0x68, 0x9d, 0x96, 0x84, 0x23, 0xe7, 0xb1, 0x1b, 0x8a, 0x9c, 0xcf, - 0x43, 0xa5, 0x67, 0x6c, 0x99, 0x06, 0xfd, 0x2c, 0x22, 0x4f, 0xd3, 0xe4, 0x4f, 0xa6, 0x66, 0x33, - 0xfe, 0xd1, 0x0a, 0x53, 0x48, 0xf2, 0x84, 0x5b, 0xc4, 0x4f, 0x3f, 0x36, 0xa1, 0xec, 0x51, 0xd1, - 0x29, 0x5b, 0x88, 0x9d, 0xb2, 0xb7, 0xf3, 0x29, 0x7b, 0x24, 0x5c, 0x8b, 0x37, 0x6b, 0xc7, 0xdd, - 0x42, 0xc2, 0x86, 0xde, 0x1f, 0x58, 0x46, 0x02, 0xaf, 0x61, 0xa0, 0x95, 0x49, 0xbe, 0x82, 0x2c, - 0xbe, 0x23, 0x2b, 0xc8, 0x7a, 0xe9, 0x23, 0xaf, 0xd6, 0x46, 0xdc, 0x09, 0xfb, 0x4b, 0x69, 0xc8, - 0x2d, 0x5e, 0xa1, 0xd7, 0x28, 0x7f, 0x4c, 0xc3, 0x07, 0x9f, 0xf5, 0x7a, 0x1f, 0x8c, 0x31, 0x59, - 0xd8, 0xe8, 0x2c, 0x8c, 0x76, 0xc9, 0x0f, 0x9e, 0x6b, 0x3c, 0xda, 0xa7, 0xd2, 0x94, 0x4e, 0xac, - 0x30, 0x29, 0xa9, 0xf4, 0xf9, 0x0c, 0xc0, 0xe2, 0x95, 0x2b, 0x1b, 0x96, 0xde, 0x6d, 0x63, 0xe7, - 0x27, 0xe1, 0xf5, 0xbb, 0x27, 0xbc, 0xf6, 0x8d, 0xf1, 0xd3, 0x50, 0xf4, 0xc6, 0xc8, 0x46, 0x8f, - 0x43, 0xde, 0xe1, 0xbf, 0xf9, 0x50, 0x57, 0xfb, 0x87, 0x5a, 0x90, 0xf3, 0xe1, 0x76, 0x39, 0xa4, - 0xff, 0x92, 0x06, 0x88, 0x4b, 0xce, 0xfc, 0x18, 0x04, 0xe0, 0xe7, 0x21, 0xc7, 0x3d, 0x4e, 0xe6, - 0x86, 0xa2, 0x55, 0xce, 0xed, 0x1b, 0xa5, 0x6f, 0xa7, 0x61, 0x6a, 0x53, 0x98, 0xdd, 0x9f, 0x48, - 0x18, 0x5d, 0x84, 0x31, 0x6c, 0x38, 0x96, 0x8e, 0x45, 0x1a, 0x7c, 0x36, 0xac, 0xa5, 0x11, 0xd2, - 0xa2, 0xff, 0x2e, 0x41, 0x9c, 0x96, 0xe3, 0xec, 0x3e, 0x19, 0x7f, 0x3c, 0x03, 0x33, 0x83, 0xb8, - 0xd0, 0x02, 0x4c, 0x68, 0x16, 0xa6, 0x05, 0x8a, 0x7f, 0xe7, 0xa4, 0x51, 0xf5, 0x65, 0x8c, 0x82, - 0x04, 0x92, 0x5c, 0x16, 0x25, 0xdc, 0x21, 0xb7, 0x68, 0x82, 0x8a, 0x4c, 0x15, 0x42, 0x95, 0x30, - 0x88, 0x96, 0xb8, 0x47, 0xf6, 0xd2, 0x52, 0x7e, 0x00, 0xe6, 0x92, 0xcb, 0x5e, 0x29, 0xf5, 0xc9, - 0x2f, 0xc2, 0x84, 0x6e, 0xe8, 0x8e, 0xae, 0xb6, 0x95, 0x2d, 0xb5, 0xad, 0x1a, 0xda, 0x8d, 0x2c, - 0x45, 0x98, 0x37, 0xe5, 0xd5, 0x86, 0xe0, 0x24, 0xb9, 0xcc, 0x4b, 0x1a, 0xac, 0x80, 0x8c, 0x88, - 0xa8, 0x2a, 0x7b, 0x43, 0x81, 0x9b, 0x60, 0xf7, 0x8d, 0xc8, 0x2f, 0x67, 0x60, 0xd2, 0xcd, 0xcf, - 0xfc, 0x64, 0x28, 0x92, 0x0e, 0xc5, 0x2a, 0x00, 0x33, 0x20, 0xc4, 0x73, 0xdc, 0xc0, 0x68, 0x10, - 0x13, 0x54, 0x60, 0x08, 0x8b, 0xb6, 0xe3, 0x1b, 0x8f, 0xbf, 0xc8, 0x40, 0xc9, 0x3f, 0x1e, 0x3f, - 0x71, 0xe9, 0xef, 0xa2, 0x8c, 0xd9, 0xbc, 0x67, 0x12, 0xb3, 0xfc, 0xbb, 0x28, 0x21, 0x93, 0xd8, - 0x37, 0x95, 0x06, 0xdb, 0xc2, 0xbf, 0x4a, 0x43, 0x8e, 0x9f, 0xcb, 0xd6, 0xfa, 0x56, 0x11, 0xa9, - 0xb8, 0x73, 0xdf, 0xc3, 0x17, 0x11, 0xaf, 0x44, 0x2e, 0x22, 0xca, 0x1d, 0x75, 0x4f, 0x09, 0xdc, - 0x62, 0x4a, 0xcd, 0x8e, 0x37, 0x8e, 0x7b, 0x28, 0xc1, 0xf7, 0x2c, 0x17, 0xe2, 0x9d, 0xc9, 0x45, - 0x8f, 0x40, 0x91, 0x50, 0x78, 0x5e, 0x81, 0xb0, 0x1f, 0xf5, 0x92, 0x0f, 0xbe, 0x97, 0x92, 0x0c, - 0x1d, 0x75, 0x6f, 0x89, 0x3d, 0xa0, 0x15, 0x40, 0x3b, 0x6e, 0xea, 0x4b, 0xf1, 0x44, 0x48, 0xf8, - 0x6f, 0xbb, 0x7e, 0x50, 0x3b, 0xce, 0xf8, 0xfb, 0x69, 0x24, 0x79, 0xd2, 0x2b, 0x14, 0x68, 0x0f, - 0x02, 0x90, 0x7e, 0x29, 0xec, 0x4c, 0x08, 0x5b, 0xc2, 0xfa, 0x0e, 0x4a, 0x78, 0xef, 0x24, 0xb9, - 0x40, 0x1e, 0x16, 0xc9, 0x6f, 0x9f, 0xe0, 0x7f, 0x25, 0x05, 0xc8, 0xf3, 0x3d, 0xee, 0x7e, 0xfd, - 0xfb, 0xe9, 0xbd, 0x44, 0xb1, 0x32, 0x4a, 0x45, 0x2f, 0xb2, 0x3c, 0x3e, 0xb1, 0xc8, 0xf2, 0x4d, - 0xd5, 0xfb, 0x3c, 0xfb, 0x9c, 0x1e, 0x98, 0x15, 0x8c, 0xb0, 0xc1, 0xff, 0x3a, 0x05, 0xc7, 0xfb, - 0x14, 0xc7, 0x6d, 0xd7, 0x15, 0x40, 0x96, 0xef, 0x25, 0xff, 0x0f, 0x45, 0x29, 0xfe, 0x1f, 0xff, - 0x12, 0xea, 0xdf, 0xa4, 0xd5, 0x67, 0xe3, 0x6f, 0x9e, 0x37, 0xe1, 0x19, 0xc5, 0x14, 0x4c, 0xfb, - 0xab, 0x77, 0x3b, 0x70, 0x1e, 0x4a, 0xfe, 0xda, 0x79, 0xd3, 0x6f, 0x1d, 0xd6, 0x74, 0xde, 0xea, - 0x00, 0x1f, 0x5a, 0xf6, 0x66, 0x9f, 0xf8, 0xa7, 0x93, 0x71, 0xbd, 0x77, 0x0f, 0xb2, 0x85, 0x66, - 0x21, 0x6b, 0xf1, 0xff, 0x4b, 0x41, 0x76, 0xcd, 0x34, 0xdb, 0xc8, 0x84, 0x49, 0xc3, 0x74, 0x14, - 0xa2, 0x2c, 0xb8, 0xa9, 0xf0, 0xdc, 0x08, 0xcb, 0x82, 0x2e, 0x1c, 0x4e, 0x28, 0xdf, 0x3b, 0xa8, - 0xf5, 0x43, 0xc9, 0x13, 0x86, 0xe9, 0x34, 0x68, 0xc9, 0x06, 0xcb, 0x9c, 0x7c, 0x08, 0xc6, 0x83, - 0x95, 0xb1, 0x4c, 0xd1, 0xb3, 0x87, 0xae, 0x2c, 0x08, 0x73, 0xfd, 0xa0, 0x36, 0xed, 0x4d, 0x02, - 0xb7, 0x58, 0x92, 0x4b, 0x5b, 0xbe, 0xda, 0xeb, 0x79, 0xd2, 0xfb, 0xef, 0xbf, 0x5a, 0x4b, 0x35, - 0xce, 0x0f, 0x3c, 0x01, 0x70, 0xdf, 0xd0, 0x26, 0xec, 0xb9, 0x5b, 0xfd, 0xc1, 0xb3, 0x00, 0xdf, - 0x3d, 0x03, 0xd5, 0xd0, 0x59, 0x00, 0x7a, 0x0f, 0x79, 0xc0, 0x49, 0x80, 0xe1, 0xff, 0xc0, 0x7f, - 0xc0, 0x41, 0x81, 0xa1, 0x87, 0x0d, 0xa4, 0x5d, 0x38, 0x4a, 0x8f, 0x72, 0x7a, 0x66, 0x4b, 0x7c, - 0x25, 0xe6, 0xa8, 0x9b, 0x40, 0x4b, 0xf1, 0xff, 0x17, 0xce, 0xb2, 0x61, 0x8f, 0x01, 0x78, 0x35, - 0xbb, 0x17, 0x6e, 0x78, 0x4b, 0x59, 0xeb, 0xd9, 0x3f, 0xf2, 0xa7, 0x30, 0xb2, 0x8f, 0x58, 0xfa, - 0xf5, 0x14, 0x1c, 0xeb, 0xab, 0x8d, 0x6b, 0xfd, 0x93, 0x81, 0x0b, 0xa3, 0xa9, 0x64, 0x39, 0x7a, - 0xff, 0x97, 0x1f, 0xea, 0x11, 0xed, 0xaa, 0x46, 0xb5, 0x8b, 0x55, 0x18, 0x68, 0xd8, 0x8b, 0x70, - 0x24, 0xd8, 0x2e, 0x21, 0x84, 0xe7, 0xa0, 0x1c, 0x5c, 0x2d, 0xf0, 0x50, 0xe2, 0x3d, 0x87, 0xf7, - 0x90, 0xe3, 0x81, 0x15, 0x83, 0xf4, 0x6c, 0x58, 0xf0, 0xae, 0x24, 0xde, 0xd7, 0x7f, 0xf8, 0x3e, - 0x56, 0x10, 0xbe, 0xbb, 0x59, 0x5f, 0x49, 0xc1, 0xc9, 0x20, 0xb2, 0x67, 0x84, 0xed, 0xb7, 0xbd, - 0x5f, 0x6f, 0x45, 0x3d, 0xfe, 0x53, 0x0a, 0x6e, 0x1f, 0xd2, 0x72, 0x2e, 0x1e, 0x0b, 0xa6, 0x7d, - 0xd6, 0xdd, 0xe2, 0xc5, 0x42, 0x65, 0xa4, 0xc1, 0x1e, 0xc8, 0x35, 0x6e, 0xb7, 0xf0, 0xa3, 0x48, - 0x53, 0xfd, 0xef, 0x6c, 0x79, 0xaa, 0xdf, 0x22, 0xbf, 0x35, 0xdd, 0xfa, 0x7a, 0x0a, 0x4e, 0x07, - 0x7b, 0x15, 0xb1, 0xa2, 0x7b, 0x77, 0x0f, 0xcc, 0xbf, 0x49, 0xc1, 0x3d, 0x49, 0xba, 0xc0, 0x47, - 0xe8, 0x79, 0x98, 0xf2, 0xe2, 0xab, 0xf0, 0x00, 0x9d, 0x4a, 0xb0, 0x2a, 0xe6, 0x4a, 0x8d, 0x5c, - 0x94, 0x9b, 0x33, 0x12, 0x7f, 0x9c, 0xe2, 0x73, 0xce, 0x3f, 0xee, 0xae, 0xd8, 0x83, 0x4b, 0x82, - 0x43, 0x8a, 0xdd, 0xb7, 0x2c, 0x18, 0x0f, 0x2c, 0x0b, 0x22, 0x06, 0x34, 0x7d, 0x93, 0x2c, 0xc8, - 0x2f, 0x0a, 0x6b, 0x1a, 0x11, 0x9c, 0xed, 0xc2, 0x54, 0xc4, 0x24, 0x71, 0x6f, 0x9c, 0xc6, 0xcf, - 0x91, 0xa3, 0x3f, 0x38, 0xa8, 0x45, 0x44, 0x7d, 0x32, 0xea, 0x9f, 0x1e, 0xd2, 0x7f, 0x4e, 0x41, - 0x8d, 0x36, 0x24, 0x62, 0x28, 0xff, 0x26, 0x0b, 0x18, 0x73, 0x43, 0x1a, 0xd9, 0x2d, 0x2e, 0xe8, - 0x79, 0xc8, 0x31, 0x2d, 0xe5, 0xb2, 0x3d, 0x84, 0x7a, 0x73, 0x46, 0xcf, 0x60, 0x2f, 0x8a, 0x7e, - 0x45, 0xdb, 0x85, 0xb7, 0x49, 0x7e, 0x6f, 0xc1, 0x2e, 0xfc, 0x2b, 0x61, 0xb0, 0xa3, 0x5b, 0xce, - 0x45, 0xf4, 0xc1, 0xb7, 0x6c, 0xb0, 0xf9, 0x97, 0x84, 0xde, 0x36, 0xcb, 0xec, 0x36, 0x3f, 0xc6, - 0x32, 0xbf, 0xfb, 0x46, 0xc0, 0xb5, 0xcc, 0x31, 0x5d, 0x78, 0x97, 0x5b, 0xe6, 0xeb, 0x69, 0x38, - 0x4e, 0xbb, 0xe1, 0x5f, 0x91, 0xbc, 0x03, 0x92, 0x57, 0x00, 0xd9, 0x96, 0xa6, 0xdc, 0x2c, 0xfb, - 0x51, 0xb1, 0x2d, 0xed, 0x4a, 0xc0, 0xe9, 0x2a, 0x80, 0x9a, 0xb6, 0x13, 0xae, 0x20, 0x73, 0xc3, - 0x15, 0x34, 0x6d, 0xe7, 0xca, 0x10, 0xaf, 0x9e, 0x3d, 0x8c, 0xee, 0xfc, 0x61, 0x0a, 0xaa, 0x51, - 0x42, 0xe7, 0xba, 0xa2, 0xc2, 0xd1, 0xc0, 0x3a, 0x3a, 0xac, 0x2e, 0x77, 0x0c, 0x5b, 0x4d, 0x86, - 0xa6, 0xee, 0x11, 0x0b, 0xdf, 0xec, 0xc9, 0xfb, 0x65, 0xe1, 0x74, 0x5c, 0xcd, 0xef, 0x5f, 0xc2, - 0xbc, 0x2b, 0xa7, 0xec, 0x6f, 0xf5, 0x99, 0xfb, 0x77, 0xdb, 0x6a, 0xe8, 0x4f, 0x52, 0x70, 0x62, - 0x40, 0x0b, 0xff, 0x26, 0xbb, 0xf3, 0x9f, 0x1d, 0xa8, 0x30, 0x37, 0x6b, 0xe9, 0xf5, 0x20, 0x9f, - 0x50, 0xc1, 0x73, 0x6b, 0xbe, 0x05, 0x75, 0xe4, 0x37, 0xe6, 0x9e, 0x81, 0x5b, 0x22, 0xb9, 0x78, - 0x9b, 0xce, 0x42, 0x76, 0x47, 0xb7, 0x1d, 0xf7, 0xc3, 0x0b, 0xa1, 0xe6, 0x84, 0xb8, 0x28, 0xad, - 0x84, 0xa0, 0x42, 0x21, 0xd7, 0x4c, 0xb3, 0xcd, 0xab, 0x97, 0x16, 0x60, 0xd2, 0x57, 0xc6, 0xc1, - 0xe7, 0x20, 0xdb, 0x35, 0xcd, 0x36, 0x07, 0x9f, 0x0e, 0x83, 0x13, 0x5a, 0xde, 0x4d, 0x4a, 0x27, - 0x4d, 0x03, 0x62, 0x20, 0xec, 0x93, 0x20, 0x1c, 0xfa, 0xc3, 0x29, 0x98, 0x0a, 0x14, 0xbb, 0x97, - 0x96, 0x72, 0x81, 0xaf, 0x49, 0xf5, 0x6d, 0xd1, 0x33, 0x7a, 0xf7, 0x7a, 0x3a, 0xcb, 0xee, 0xbe, - 0x05, 0xd5, 0x3d, 0xfb, 0x47, 0x25, 0x71, 0xcb, 0x55, 0x01, 0xf0, 0xa5, 0x62, 0xef, 0x0a, 0xd7, - 0x1c, 0x9d, 0xf4, 0xa8, 0xde, 0x1d, 0x4b, 0xc7, 0x63, 0xde, 0x11, 0xf4, 0x53, 0xfe, 0x63, 0x54, - 0x77, 0x0e, 0xe7, 0x13, 0xf0, 0x77, 0xc5, 0x91, 0xb9, 0xe8, 0x7f, 0x0b, 0xa6, 0xa3, 0x56, 0xc1, - 0xe8, 0x81, 0xe1, 0x08, 0xfd, 0x71, 0x4b, 0xf5, 0x3d, 0x87, 0xe0, 0x70, 0xab, 0x7f, 0x25, 0x05, - 0xb7, 0x0d, 0x5d, 0xec, 0xa1, 0xc7, 0x86, 0xc3, 0x0e, 0x89, 0xa4, 0xaa, 0xf5, 0x1b, 0x61, 0x75, - 0x9b, 0xa6, 0x04, 0xf6, 0xf3, 0xa3, 0x25, 0xda, 0xb7, 0xfe, 0x18, 0x30, 0xb0, 0xfd, 0xb1, 0xa6, - 0x34, 0x82, 0x5e, 0x8a, 0xde, 0xd7, 0x3e, 0x13, 0x89, 0x30, 0x78, 0xc9, 0x53, 0x7d, 0x20, 0x39, - 0x83, 0x7f, 0xd8, 0xa3, 0x62, 0xe9, 0x01, 0xc3, 0x3e, 0x64, 0xc1, 0x30, 0x60, 0xd8, 0x87, 0x05, - 0xea, 0x7c, 0xd8, 0x87, 0x46, 0x92, 0x03, 0x86, 0x3d, 0x49, 0x00, 0x3d, 0x60, 0xd8, 0x13, 0x05, - 0xae, 0xd2, 0x08, 0xda, 0x81, 0xf1, 0x40, 0x9c, 0x82, 0x4e, 0x47, 0xc2, 0x45, 0x05, 0x90, 0xd5, - 0x7b, 0x92, 0x90, 0xfa, 0xc7, 0x3f, 0xc2, 0x35, 0x0f, 0x18, 0xff, 0xc1, 0xd1, 0x47, 0xf5, 0x81, - 0xe4, 0x0c, 0x6e, 0xdd, 0xd7, 0xdc, 0xad, 0x16, 0x1f, 0x01, 0x9a, 0x4b, 0x88, 0x24, 0x6a, 0x3e, - 0x93, 0x98, 0xde, 0xad, 0x78, 0xb7, 0xef, 0xb4, 0x75, 0xb4, 0xd0, 0x22, 0x5d, 0x5b, 0xf5, 0xde, - 0x44, 0xb4, 0x6e, 0x65, 0xab, 0x7c, 0x1f, 0xe1, 0x64, 0x24, 0x9b, 0xcf, 0x69, 0x55, 0x6f, 0x1f, - 0x42, 0xe1, 0xc2, 0xad, 0xbb, 0x1b, 0x83, 0x52, 0x34, 0xb9, 0xdf, 0x59, 0x55, 0x4f, 0x0d, 0xa5, - 0x11, 0xa0, 0x37, 0x3d, 0xd5, 0xff, 0xa5, 0x7c, 0xdf, 0xb5, 0xbf, 0x16, 0x36, 0xb0, 0xad, 0xdb, - 0x87, 0xba, 0xf6, 0x37, 0x3c, 0x9b, 0xff, 0x8b, 0x39, 0x28, 0x5d, 0x60, 0xa8, 0xf4, 0x5b, 0xc7, - 0xe8, 0x89, 0x84, 0x1e, 0xb8, 0x4c, 0x3c, 0xf0, 0x0f, 0x0e, 0x6a, 0x5c, 0x90, 0xae, 0x2f, 0xb6, - 0xf9, 0x47, 0x8f, 0xd8, 0x07, 0x4b, 0xbc, 0xaf, 0xc6, 0x94, 0x0e, 0x75, 0x64, 0x95, 0x9d, 0x15, - 0xe0, 0xa7, 0x44, 0xc3, 0x78, 0x12, 0xfb, 0x7e, 0xd2, 0x06, 0x29, 0xa1, 0x9f, 0x3c, 0x41, 0x9f, - 0x4c, 0xc1, 0x11, 0x4a, 0xe5, 0x05, 0x82, 0x94, 0x52, 0x1c, 0xac, 0xe9, 0x1b, 0xe5, 0x15, 0xd5, - 0xb7, 0x2c, 0xa2, 0x18, 0x8d, 0x3a, 0xdf, 0xef, 0xbd, 0xd5, 0x57, 0x69, 0x18, 0x4e, 0xfa, 0xc1, - 0x41, 0x0d, 0xf5, 0xf3, 0xca, 0xf4, 0x03, 0x9d, 0xc1, 0xb2, 0xe8, 0xcf, 0x54, 0x0f, 0x89, 0x0d, - 0x27, 0xb9, 0x40, 0xbd, 0x18, 0x21, 0x10, 0x9e, 0xaf, 0x41, 0xd1, 0x67, 0x7c, 0x66, 0x46, 0x07, - 0x1c, 0x6b, 0xf3, 0xd6, 0xdd, 0x88, 0xe3, 0xf9, 0x7c, 0x9f, 0xec, 0x87, 0x40, 0xbf, 0x96, 0x82, - 0x23, 0xde, 0xda, 0xde, 0x0f, 0x9e, 0x4b, 0xbe, 0xba, 0x3f, 0x17, 0x94, 0x5a, 0x24, 0x1e, 0x91, - 0x5a, 0x94, 0x83, 0x94, 0xa7, 0x7b, 0x51, 0x0e, 0xe3, 0x39, 0x18, 0xf7, 0x2f, 0xfe, 0xbc, 0x8f, - 0x17, 0x0e, 0xdb, 0xce, 0x9c, 0xe6, 0xbd, 0x0d, 0x1c, 0xed, 0x90, 0x83, 0x40, 0xa8, 0x0a, 0x79, - 0xbc, 0xd7, 0x35, 0x2d, 0x07, 0x37, 0xe9, 0x59, 0xe4, 0xbc, 0xec, 0x3e, 0x4b, 0xd7, 0x20, 0x62, - 0x60, 0xd1, 0xd3, 0xa1, 0x2f, 0x2f, 0xdd, 0xc8, 0xa2, 0xa2, 0xff, 0x63, 0x4d, 0xfe, 0xaf, 0x28, - 0xdd, 0x6c, 0xb3, 0xf1, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x73, 0x3c, 0xb3, 0x75, 0xb7, 0x9b, - 0x00, 0x00, + 0x79, 0x1f, 0xf6, 0x81, 0xc5, 0xee, 0xb7, 0x8b, 0xdd, 0x45, 0x03, 0x77, 0xb7, 0xb7, 0x24, 0x6f, + 0x8f, 0x73, 0x7c, 0xe0, 0xf8, 0xc0, 0x51, 0x27, 0x3e, 0xf7, 0x28, 0x52, 0x58, 0x00, 0x77, 0x07, + 0x12, 0xb8, 0x03, 0x07, 0xc0, 0x91, 0xa2, 0x6c, 0xaf, 0x07, 0xb3, 0x8d, 0xc5, 0x10, 0xbb, 0x33, + 0xcb, 0x99, 0xd9, 0x3b, 0x80, 0xa5, 0x54, 0x31, 0x65, 0x59, 0x0f, 0x47, 0xb6, 0x64, 0xc7, 0x76, + 0x64, 0x45, 0x92, 0x29, 0xa5, 0x12, 0x39, 0x4a, 0xe2, 0x47, 0xa2, 0xe8, 0x61, 0xe7, 0x0f, 0xa5, + 0x9c, 0xc4, 0x4a, 0x95, 0x2b, 0x25, 0x25, 0x4e, 0xca, 0x95, 0x4a, 0xc1, 0x16, 0xa9, 0x2a, 0x2b, + 0x0a, 0x93, 0x28, 0x17, 0xda, 0xe5, 0x92, 0xfe, 0x48, 0xaa, 0x5f, 0xf3, 0xda, 0xd9, 0x9d, 0xc1, + 0xf1, 0x48, 0xd1, 0x25, 0xfd, 0x85, 0x9d, 0x9e, 0xef, 0xfb, 0x75, 0xf7, 0xd7, 0x5f, 0x7f, 0xdf, + 0xd7, 0x5f, 0x77, 0x0f, 0xe0, 0x8b, 0x49, 0xb8, 0x4d, 0x35, 0xac, 0xae, 0x61, 0x9d, 0x79, 0xb1, + 0x8f, 0xcd, 0xfd, 0x33, 0x3d, 0xa5, 0xad, 0xe9, 0x8a, 0xad, 0x19, 0xfa, 0x5c, 0xcf, 0x34, 0x6c, + 0x03, 0x15, 0xd8, 0xeb, 0x39, 0xfa, 0x5a, 0xd2, 0x21, 0xbf, 0xa6, 0xb4, 0xb1, 0x8c, 0x5f, 0xec, + 0x63, 0xcb, 0x46, 0x65, 0x48, 0xed, 0xe2, 0xfd, 0x4a, 0xe2, 0x64, 0x62, 0xb6, 0x20, 0x93, 0x9f, + 0xe8, 0x28, 0x64, 0x8c, 0xed, 0x6d, 0x0b, 0xdb, 0x95, 0xe4, 0xc9, 0xc4, 0x6c, 0x5a, 0xe6, 0x4f, + 0x68, 0x06, 0xc6, 0x3b, 0x5a, 0x57, 0xb3, 0x2b, 0x29, 0x5a, 0xcc, 0x1e, 0x50, 0x0d, 0xf2, 0xaa, + 0xd1, 0xd7, 0xed, 0xa6, 0x6d, 0xd8, 0x4a, 0xa7, 0x92, 0x3e, 0x99, 0x98, 0xcd, 0xca, 0x40, 0x8b, + 0x36, 0x48, 0x89, 0xf4, 0x24, 0x14, 0x58, 0x7d, 0x56, 0xcf, 0xd0, 0x2d, 0x8c, 0x8e, 0x43, 0x56, + 0xc7, 0x7b, 0x76, 0xd3, 0xad, 0x75, 0x82, 0x3c, 0x3f, 0x8d, 0xf7, 0x49, 0x0d, 0x0c, 0x85, 0x55, + 0xcc, 0x1e, 0x1a, 0x8d, 0x6f, 0xbc, 0x7a, 0x22, 0xf1, 0xcd, 0x57, 0x4f, 0x24, 0xfe, 0xfc, 0xd5, + 0x13, 0x89, 0x4f, 0xbc, 0x76, 0x62, 0xec, 0x9b, 0xaf, 0x9d, 0x18, 0xfb, 0xd3, 0xd7, 0x4e, 0x8c, + 0x3d, 0x3f, 0xdb, 0xd6, 0xec, 0x9d, 0xfe, 0xd6, 0x9c, 0x6a, 0x74, 0xcf, 0x70, 0x11, 0xb0, 0x3f, + 0xf7, 0x5b, 0xad, 0xdd, 0x33, 0xf6, 0x7e, 0x0f, 0x73, 0x99, 0x6c, 0x65, 0xa8, 0x24, 0xde, 0x0d, + 0x7f, 0x78, 0x0e, 0x4e, 0xb6, 0x0d, 0xa3, 0xdd, 0xc1, 0x67, 0x68, 0xc9, 0x56, 0x7f, 0xfb, 0x4c, + 0x0b, 0x5b, 0xaa, 0xa9, 0xf5, 0x6c, 0xc3, 0xe4, 0xf2, 0x2a, 0x31, 0x8a, 0x39, 0x41, 0x21, 0xad, + 0xc2, 0xd4, 0x79, 0xad, 0x83, 0x17, 0x1d, 0xc2, 0x75, 0x6c, 0xa3, 0x47, 0x21, 0xbd, 0xad, 0x75, + 0x70, 0x25, 0x71, 0x32, 0x35, 0x9b, 0x3f, 0x7b, 0xc7, 0x5c, 0x80, 0x69, 0xce, 0xcf, 0xb1, 0x46, + 0x8a, 0x65, 0xca, 0x21, 0x7d, 0x27, 0x0d, 0xd3, 0x21, 0x6f, 0x11, 0x82, 0xb4, 0xae, 0x74, 0x31, + 0x95, 0x4a, 0x4e, 0xa6, 0xbf, 0x51, 0x05, 0x26, 0x7a, 0x8a, 0xba, 0xab, 0xb4, 0x31, 0x15, 0x4a, + 0x4e, 0x16, 0x8f, 0xe8, 0x04, 0x40, 0x0b, 0xf7, 0xb0, 0xde, 0xc2, 0xba, 0xba, 0x5f, 0x49, 0x9d, + 0x4c, 0xcd, 0xe6, 0x64, 0x4f, 0x09, 0xba, 0x17, 0xa6, 0x7a, 0xfd, 0xad, 0x8e, 0xa6, 0x36, 0x3d, + 0x64, 0x70, 0x32, 0x35, 0x3b, 0x2e, 0x97, 0xd9, 0x8b, 0x45, 0x97, 0xf8, 0x6e, 0x28, 0x5d, 0xc3, + 0xca, 0xae, 0x97, 0x34, 0x4f, 0x49, 0x8b, 0xa4, 0xd8, 0x43, 0xb8, 0x00, 0x85, 0x2e, 0xb6, 0x2c, + 0xa5, 0x8d, 0x9b, 0x44, 0xbe, 0x95, 0x34, 0xed, 0xfd, 0xc9, 0x81, 0xde, 0x07, 0x7b, 0x9e, 0xe7, + 0x5c, 0x1b, 0xfb, 0x3d, 0x8c, 0xe6, 0x21, 0x87, 0xf5, 0x7e, 0x97, 0x21, 0x8c, 0x0f, 0x91, 0xdf, + 0x92, 0xde, 0xef, 0x06, 0x51, 0xb2, 0x84, 0x8d, 0x43, 0x4c, 0x58, 0xd8, 0xbc, 0xaa, 0xa9, 0xb8, + 0x92, 0xa1, 0x00, 0x77, 0x0f, 0x00, 0xac, 0xb3, 0xf7, 0x41, 0x0c, 0xc1, 0x87, 0x16, 0x20, 0x87, + 0xf7, 0x6c, 0xac, 0x5b, 0x9a, 0xa1, 0x57, 0x26, 0x28, 0xc8, 0x9d, 0x21, 0xa3, 0x88, 0x3b, 0xad, + 0x20, 0x84, 0xcb, 0x87, 0x1e, 0x86, 0x09, 0xa3, 0x47, 0xe6, 0x9a, 0x55, 0xc9, 0x9e, 0x4c, 0xcc, + 0xe6, 0xcf, 0xde, 0x1a, 0xaa, 0x08, 0x97, 0x19, 0x8d, 0x2c, 0x88, 0xd1, 0x32, 0x94, 0x2d, 0xa3, + 0x6f, 0xaa, 0xb8, 0xa9, 0x1a, 0x2d, 0xdc, 0xd4, 0xf4, 0x6d, 0xa3, 0x92, 0xa3, 0x00, 0xb5, 0xc1, + 0x8e, 0x50, 0xc2, 0x05, 0xa3, 0x85, 0x97, 0xf5, 0x6d, 0x43, 0x2e, 0x5a, 0xbe, 0x67, 0x32, 0x5f, + 0xad, 0x7d, 0xdd, 0x56, 0xf6, 0x2a, 0x05, 0xaa, 0x21, 0xfc, 0x49, 0xfa, 0x5a, 0x06, 0x4a, 0x71, + 0x54, 0xec, 0x1c, 0x8c, 0x6f, 0x93, 0x5e, 0x56, 0x92, 0x87, 0x91, 0x01, 0xe3, 0xf1, 0x0b, 0x31, + 0x73, 0x83, 0x42, 0x9c, 0x87, 0xbc, 0x8e, 0x2d, 0x1b, 0xb7, 0x98, 0x46, 0xa4, 0x62, 0xea, 0x14, + 0x30, 0xa6, 0x41, 0x95, 0x4a, 0xdf, 0x90, 0x4a, 0x3d, 0x07, 0x25, 0xa7, 0x49, 0x4d, 0x53, 0xd1, + 0xdb, 0x42, 0x37, 0xcf, 0x44, 0xb5, 0x64, 0x6e, 0x49, 0xf0, 0xc9, 0x84, 0x4d, 0x2e, 0x62, 0xdf, + 0x33, 0x5a, 0x04, 0x30, 0x74, 0x6c, 0x6c, 0x37, 0x5b, 0x58, 0xed, 0x54, 0xb2, 0x43, 0xa4, 0x74, + 0x99, 0x90, 0x0c, 0x48, 0xc9, 0x60, 0xa5, 0x6a, 0x07, 0x3d, 0xe6, 0xaa, 0xda, 0xc4, 0x10, 0x4d, + 0x59, 0x65, 0x93, 0x6c, 0x40, 0xdb, 0x36, 0xa1, 0x68, 0x62, 0xa2, 0xf7, 0xb8, 0xc5, 0x7b, 0x96, + 0xa3, 0x8d, 0x98, 0x8b, 0xec, 0x99, 0xcc, 0xd9, 0x58, 0xc7, 0x26, 0x4d, 0xef, 0x23, 0x3a, 0x05, + 0x4e, 0x41, 0x93, 0xaa, 0x15, 0x50, 0x2b, 0x54, 0x10, 0x85, 0x97, 0x94, 0x2e, 0xae, 0xbe, 0x04, + 0x45, 0xbf, 0x78, 0x88, 0x99, 0xb7, 0x6c, 0xc5, 0xb4, 0xa9, 0x16, 0x8e, 0xcb, 0xec, 0x81, 0x38, + 0x22, 0xac, 0xb7, 0xa8, 0x95, 0x1b, 0x97, 0xc9, 0x4f, 0xf4, 0x5e, 0xb7, 0xc3, 0x29, 0xda, 0xe1, + 0xbb, 0x06, 0x47, 0xd4, 0x87, 0x1c, 0xec, 0x77, 0xf5, 0x11, 0x98, 0xf4, 0x75, 0x20, 0x6e, 0xd5, + 0xd2, 0x07, 0xe0, 0x48, 0x28, 0x34, 0x7a, 0x0e, 0x66, 0xfa, 0xba, 0xa6, 0xdb, 0xd8, 0xec, 0x99, + 0x98, 0x68, 0x2c, 0xab, 0xaa, 0xf2, 0x17, 0x13, 0x43, 0x74, 0x6e, 0xd3, 0x4b, 0xcd, 0x50, 0xe4, + 0xe9, 0xfe, 0x60, 0xe1, 0x3d, 0xb9, 0xec, 0x77, 0x27, 0xca, 0x2f, 0xbf, 0xfc, 0xf2, 0xcb, 0x49, + 0xe9, 0x5f, 0x67, 0x60, 0x26, 0x6c, 0xce, 0x84, 0x4e, 0xdf, 0xa3, 0x90, 0xd1, 0xfb, 0xdd, 0x2d, + 0x6c, 0x52, 0x21, 0x8d, 0xcb, 0xfc, 0x09, 0xcd, 0xc3, 0x78, 0x47, 0xd9, 0xc2, 0xcc, 0x25, 0x17, + 0xcf, 0xde, 0x1b, 0x6b, 0x56, 0xce, 0xad, 0x10, 0x16, 0x99, 0x71, 0xa2, 0x27, 0x20, 0xcd, 0x4d, + 0x34, 0x41, 0xb8, 0x27, 0x1e, 0x02, 0x99, 0x4b, 0x32, 0xe5, 0x43, 0xb7, 0x40, 0x8e, 0xfc, 0x65, + 0xba, 0x91, 0xa1, 0x6d, 0xce, 0x92, 0x02, 0xa2, 0x17, 0xa8, 0x0a, 0x59, 0x3a, 0x4d, 0x5a, 0x58, + 0xb8, 0x36, 0xe7, 0x99, 0x28, 0x56, 0x0b, 0x6f, 0x2b, 0xfd, 0x8e, 0xdd, 0xbc, 0xaa, 0x74, 0xfa, + 0x98, 0x2a, 0x7c, 0x4e, 0x2e, 0xf0, 0xc2, 0x2b, 0xa4, 0x8c, 0x44, 0x1e, 0x6c, 0x56, 0x69, 0x7a, + 0x0b, 0xef, 0x51, 0xeb, 0x39, 0x2e, 0xb3, 0x89, 0xb6, 0x4c, 0x4a, 0x48, 0xf5, 0x2f, 0x58, 0x86, + 0x2e, 0x54, 0x93, 0x56, 0x41, 0x0a, 0x68, 0xf5, 0x8f, 0x04, 0x0d, 0xf7, 0x6d, 0xe1, 0xdd, 0x1b, + 0x98, 0x4b, 0x77, 0x43, 0x89, 0x05, 0x13, 0x7c, 0xe8, 0x95, 0x4e, 0x65, 0x8a, 0x06, 0x3d, 0x45, + 0x56, 0x7c, 0x99, 0x97, 0x4a, 0x5f, 0x4e, 0x42, 0x9a, 0x1a, 0x96, 0x12, 0xe4, 0x37, 0xde, 0xb7, + 0xb6, 0xd4, 0x5c, 0xbc, 0xbc, 0xd9, 0x58, 0x59, 0x2a, 0x27, 0x50, 0x11, 0x80, 0x16, 0x9c, 0x5f, + 0xb9, 0x3c, 0xbf, 0x51, 0x4e, 0x3a, 0xcf, 0xcb, 0x97, 0x36, 0x1e, 0x7e, 0xb0, 0x9c, 0x72, 0x18, + 0x36, 0x59, 0x41, 0xda, 0x4b, 0xf0, 0xee, 0xb3, 0xe5, 0x71, 0x54, 0x86, 0x02, 0x03, 0x58, 0x7e, + 0x6e, 0x69, 0xf1, 0xe1, 0x07, 0xcb, 0x19, 0x7f, 0xc9, 0xbb, 0xcf, 0x96, 0x27, 0xd0, 0x24, 0xe4, + 0x68, 0x49, 0xe3, 0xf2, 0xe5, 0x95, 0x72, 0xd6, 0xc1, 0x5c, 0xdf, 0x90, 0x97, 0x2f, 0x5d, 0x28, + 0xe7, 0x1c, 0xcc, 0x0b, 0xf2, 0xe5, 0xcd, 0xb5, 0x32, 0x38, 0x08, 0xab, 0x4b, 0xeb, 0xeb, 0xf3, + 0x17, 0x96, 0xca, 0x79, 0x87, 0xa2, 0xf1, 0xbe, 0x8d, 0xa5, 0xf5, 0x72, 0xc1, 0xd7, 0xac, 0x77, + 0x9f, 0x2d, 0x4f, 0x3a, 0x55, 0x2c, 0x5d, 0xda, 0x5c, 0x2d, 0x17, 0xd1, 0x14, 0x4c, 0xb2, 0x2a, + 0x44, 0x23, 0x4a, 0x81, 0xa2, 0x87, 0x1f, 0x2c, 0x97, 0xdd, 0x86, 0x30, 0x94, 0x29, 0x5f, 0xc1, + 0xc3, 0x0f, 0x96, 0x91, 0xb4, 0x00, 0xe3, 0x54, 0x0d, 0x11, 0x82, 0xe2, 0xca, 0x7c, 0x63, 0x69, + 0xa5, 0x79, 0x79, 0x6d, 0x63, 0xf9, 0xf2, 0xa5, 0xf9, 0x95, 0x72, 0xc2, 0x2d, 0x93, 0x97, 0x9e, + 0xd9, 0x5c, 0x96, 0x97, 0x16, 0xcb, 0x49, 0x6f, 0xd9, 0xda, 0xd2, 0xfc, 0xc6, 0xd2, 0x62, 0x39, + 0x25, 0xa9, 0x30, 0x13, 0x66, 0x50, 0x43, 0xa7, 0x90, 0x47, 0x17, 0x92, 0x43, 0x74, 0x81, 0x62, + 0x05, 0x75, 0x41, 0x7a, 0x2d, 0x09, 0xd3, 0x21, 0x4e, 0x25, 0xb4, 0x92, 0x27, 0x61, 0x9c, 0xe9, + 0x32, 0x73, 0xb3, 0xa7, 0x43, 0xbd, 0x13, 0xd5, 0xec, 0x01, 0x57, 0x4b, 0xf9, 0xbc, 0xa1, 0x46, + 0x6a, 0x48, 0xa8, 0x41, 0x20, 0x06, 0x14, 0xf6, 0xa7, 0x07, 0x8c, 0x3f, 0xf3, 0x8f, 0x0f, 0xc7, + 0xf1, 0x8f, 0xb4, 0xec, 0x70, 0x4e, 0x60, 0x3c, 0xc4, 0x09, 0x9c, 0x83, 0xa9, 0x01, 0xa0, 0xd8, + 0xc6, 0xf8, 0xe7, 0x12, 0x50, 0x19, 0x26, 0x9c, 0x08, 0x93, 0x98, 0xf4, 0x99, 0xc4, 0x73, 0x41, + 0x09, 0xde, 0x3e, 0x7c, 0x10, 0x06, 0xc6, 0xfa, 0x0b, 0x09, 0x38, 0x1a, 0x1e, 0x52, 0x86, 0xb6, + 0xe1, 0x09, 0xc8, 0x74, 0xb1, 0xbd, 0x63, 0x88, 0xb0, 0xea, 0xae, 0x10, 0x67, 0x4d, 0x5e, 0x07, + 0x07, 0x9b, 0x73, 0x79, 0xbd, 0x7d, 0x6a, 0x58, 0x5c, 0xc8, 0x5a, 0x33, 0xd0, 0xd2, 0x8f, 0x26, + 0xe1, 0x48, 0x28, 0x78, 0x68, 0x43, 0x6f, 0x03, 0xd0, 0xf4, 0x5e, 0xdf, 0x66, 0xa1, 0x13, 0xb3, + 0xc4, 0x39, 0x5a, 0x42, 0x8d, 0x17, 0xb1, 0xb2, 0x7d, 0xdb, 0x79, 0x9f, 0xa2, 0xef, 0x81, 0x15, + 0x51, 0x82, 0x47, 0xdd, 0x86, 0xa6, 0x69, 0x43, 0x4f, 0x0c, 0xe9, 0xe9, 0x80, 0x62, 0x3e, 0x00, + 0x65, 0xb5, 0xa3, 0x61, 0xdd, 0x6e, 0x5a, 0xb6, 0x89, 0x95, 0xae, 0xa6, 0xb7, 0xa9, 0xab, 0xc9, + 0xd6, 0xc7, 0xb7, 0x95, 0x8e, 0x85, 0xe5, 0x12, 0x7b, 0xbd, 0x2e, 0xde, 0x12, 0x0e, 0xaa, 0x40, + 0xa6, 0x87, 0x23, 0xe3, 0xe3, 0x60, 0xaf, 0x1d, 0x0e, 0xe9, 0x97, 0x73, 0x90, 0xf7, 0x04, 0xe0, + 0xe8, 0x76, 0x28, 0xbc, 0xa0, 0x5c, 0x55, 0x9a, 0x62, 0x51, 0xc5, 0x24, 0x91, 0x27, 0x65, 0x6b, + 0x7c, 0x61, 0xf5, 0x00, 0xcc, 0x50, 0x12, 0xa3, 0x6f, 0x63, 0xb3, 0xa9, 0x76, 0x14, 0xcb, 0xa2, + 0x42, 0xcb, 0x52, 0x52, 0x44, 0xde, 0x5d, 0x26, 0xaf, 0x16, 0xc4, 0x1b, 0xf4, 0x10, 0x4c, 0x53, + 0x8e, 0x6e, 0xbf, 0x63, 0x6b, 0xbd, 0x0e, 0x6e, 0x92, 0x65, 0x9e, 0x45, 0x5d, 0x8e, 0xd3, 0xb2, + 0x29, 0x42, 0xb1, 0xca, 0x09, 0x48, 0x8b, 0x2c, 0xb4, 0x08, 0xb7, 0x51, 0xb6, 0x36, 0xd6, 0xb1, + 0xa9, 0xd8, 0xb8, 0x89, 0x5f, 0xec, 0x2b, 0x1d, 0xab, 0xa9, 0xe8, 0xad, 0xe6, 0x8e, 0x62, 0xed, + 0x54, 0x66, 0x08, 0x40, 0x23, 0x59, 0x49, 0xc8, 0xc7, 0x09, 0xe1, 0x05, 0x4e, 0xb7, 0x44, 0xc9, + 0xe6, 0xf5, 0xd6, 0x45, 0xc5, 0xda, 0x41, 0x75, 0x38, 0x4a, 0x51, 0x2c, 0xdb, 0xd4, 0xf4, 0x76, + 0x53, 0xdd, 0xc1, 0xea, 0x6e, 0xb3, 0x6f, 0x6f, 0x3f, 0x5a, 0xb9, 0xc5, 0x5b, 0x3f, 0x6d, 0xe1, + 0x3a, 0xa5, 0x59, 0x20, 0x24, 0x9b, 0xf6, 0xf6, 0xa3, 0x68, 0x1d, 0x0a, 0x64, 0x30, 0xba, 0xda, + 0x4b, 0xb8, 0xb9, 0x6d, 0x98, 0xd4, 0x87, 0x16, 0x43, 0x4c, 0x93, 0x47, 0x82, 0x73, 0x97, 0x39, + 0xc3, 0xaa, 0xd1, 0xc2, 0xf5, 0xf1, 0xf5, 0xb5, 0xa5, 0xa5, 0x45, 0x39, 0x2f, 0x50, 0xce, 0x1b, + 0x26, 0x51, 0xa8, 0xb6, 0xe1, 0x08, 0x38, 0xcf, 0x14, 0xaa, 0x6d, 0x08, 0xf1, 0x3e, 0x04, 0xd3, + 0xaa, 0xca, 0xfa, 0xac, 0xa9, 0x4d, 0xbe, 0x18, 0xb3, 0x2a, 0x65, 0x9f, 0xb0, 0x54, 0xf5, 0x02, + 0x23, 0xe0, 0x3a, 0x6e, 0xa1, 0xc7, 0xe0, 0x88, 0x2b, 0x2c, 0x2f, 0xe3, 0xd4, 0x40, 0x2f, 0x83, + 0xac, 0x0f, 0xc1, 0x74, 0x6f, 0x7f, 0x90, 0x11, 0xf9, 0x6a, 0xec, 0xed, 0x07, 0xd9, 0x1e, 0x81, + 0x99, 0xde, 0x4e, 0x6f, 0x90, 0xef, 0x1e, 0x2f, 0x1f, 0xea, 0xed, 0xf4, 0x82, 0x8c, 0x77, 0xd2, + 0x95, 0xb9, 0x89, 0x55, 0xc5, 0xc6, 0xad, 0xca, 0x31, 0x2f, 0xb9, 0xe7, 0x05, 0x9a, 0x83, 0xb2, + 0xaa, 0x36, 0xb1, 0xae, 0x6c, 0x75, 0x70, 0x53, 0x31, 0xb1, 0xae, 0x58, 0x95, 0x1a, 0x25, 0x4e, + 0xdb, 0x66, 0x1f, 0xcb, 0x45, 0x55, 0x5d, 0xa2, 0x2f, 0xe7, 0xe9, 0x3b, 0x74, 0x0f, 0x4c, 0x19, + 0x5b, 0x2f, 0xa8, 0x4c, 0x23, 0x9b, 0x3d, 0x13, 0x6f, 0x6b, 0x7b, 0x95, 0x3b, 0xa8, 0x78, 0x4b, + 0xe4, 0x05, 0xd5, 0xc7, 0x35, 0x5a, 0x8c, 0x4e, 0x43, 0x59, 0xb5, 0x76, 0x14, 0xb3, 0x47, 0x4d, + 0xb2, 0xd5, 0x53, 0x54, 0x5c, 0xb9, 0x93, 0x91, 0xb2, 0xf2, 0x4b, 0xa2, 0x98, 0xcc, 0x08, 0xeb, + 0x9a, 0xb6, 0x6d, 0x0b, 0xc4, 0xbb, 0xd9, 0x8c, 0xa0, 0x65, 0x1c, 0x6d, 0x16, 0xca, 0x44, 0x12, + 0xbe, 0x8a, 0x67, 0x29, 0x59, 0xb1, 0xb7, 0xd3, 0xf3, 0xd6, 0x7b, 0x0a, 0x26, 0x09, 0xa5, 0x5b, + 0xe9, 0x69, 0x16, 0xb8, 0xf5, 0x76, 0x3c, 0x35, 0x3e, 0x08, 0x47, 0x09, 0x51, 0x17, 0xdb, 0x4a, + 0x4b, 0xb1, 0x15, 0x0f, 0xf5, 0x7d, 0x94, 0x9a, 0x88, 0x7d, 0x95, 0xbf, 0xf4, 0xb5, 0xd3, 0xec, + 0x6f, 0xed, 0x3b, 0x8a, 0x75, 0x3f, 0x6b, 0x27, 0x29, 0x13, 0xaa, 0xf5, 0x96, 0x05, 0xe7, 0x52, + 0x1d, 0x0a, 0x5e, 0xbd, 0x47, 0x39, 0x60, 0x9a, 0x5f, 0x4e, 0x90, 0x20, 0x68, 0xe1, 0xf2, 0x22, + 0x09, 0x5f, 0x9e, 0x5f, 0x2a, 0x27, 0x49, 0x18, 0xb5, 0xb2, 0xbc, 0xb1, 0xd4, 0x94, 0x37, 0x2f, + 0x6d, 0x2c, 0xaf, 0x2e, 0x95, 0x53, 0x9e, 0xc0, 0xfe, 0xa9, 0x74, 0xf6, 0xae, 0xf2, 0xdd, 0xd2, + 0xb7, 0x92, 0x50, 0xf4, 0xaf, 0xd4, 0xd0, 0xe3, 0x70, 0x4c, 0xa4, 0x55, 0x2c, 0x6c, 0x37, 0xaf, + 0x69, 0x26, 0x9d, 0x90, 0x5d, 0x85, 0x39, 0x47, 0x47, 0x7f, 0x66, 0x38, 0xd5, 0x3a, 0xb6, 0x9f, + 0xd5, 0x4c, 0x32, 0xdd, 0xba, 0x8a, 0x8d, 0x56, 0xa0, 0xa6, 0x1b, 0x4d, 0xcb, 0x56, 0xf4, 0x96, + 0x62, 0xb6, 0x9a, 0x6e, 0x42, 0xab, 0xa9, 0xa8, 0x2a, 0xb6, 0x2c, 0x83, 0x39, 0x42, 0x07, 0xe5, + 0x56, 0xdd, 0x58, 0xe7, 0xc4, 0xae, 0x87, 0x98, 0xe7, 0xa4, 0x01, 0xf5, 0x4d, 0x0d, 0x53, 0xdf, + 0x5b, 0x20, 0xd7, 0x55, 0x7a, 0x4d, 0xac, 0xdb, 0xe6, 0x3e, 0x8d, 0xcf, 0xb3, 0x72, 0xb6, 0xab, + 0xf4, 0x96, 0xc8, 0xf3, 0xdb, 0xb2, 0x4c, 0x7a, 0x2a, 0x9d, 0xcd, 0x96, 0x73, 0x4f, 0xa5, 0xb3, + 0xb9, 0x32, 0x48, 0xaf, 0xa6, 0xa0, 0xe0, 0x8d, 0xd7, 0xc9, 0xf2, 0x47, 0xa5, 0x1e, 0x2b, 0x41, + 0x6d, 0xda, 0xa9, 0x91, 0xd1, 0xfd, 0xdc, 0x02, 0x71, 0x65, 0xf5, 0x0c, 0x0b, 0x8e, 0x65, 0xc6, + 0x49, 0xc2, 0x08, 0xa2, 0x6c, 0x98, 0x05, 0x23, 0x59, 0x99, 0x3f, 0xa1, 0x0b, 0x90, 0x79, 0xc1, + 0xa2, 0xd8, 0x19, 0x8a, 0x7d, 0xc7, 0x68, 0xec, 0xa7, 0xd6, 0x29, 0x78, 0xee, 0xa9, 0xf5, 0xe6, + 0xa5, 0xcb, 0xf2, 0xea, 0xfc, 0x8a, 0xcc, 0xd9, 0xd1, 0x71, 0x48, 0x77, 0x94, 0x97, 0xf6, 0xfd, + 0x4e, 0x8f, 0x16, 0xc5, 0x1d, 0x84, 0xe3, 0x90, 0xbe, 0x86, 0x95, 0x5d, 0xbf, 0xab, 0xa1, 0x45, + 0x6f, 0xe1, 0x64, 0x38, 0x03, 0xe3, 0x54, 0x5e, 0x08, 0x80, 0x4b, 0xac, 0x3c, 0x86, 0xb2, 0x90, + 0x5e, 0xb8, 0x2c, 0x93, 0x09, 0x51, 0x86, 0x02, 0x2b, 0x6d, 0xae, 0x2d, 0x2f, 0x2d, 0x2c, 0x95, + 0x93, 0xd2, 0x43, 0x90, 0x61, 0x42, 0x20, 0x93, 0xc5, 0x11, 0x43, 0x79, 0x8c, 0x3f, 0x72, 0x8c, + 0x84, 0x78, 0xbb, 0xb9, 0xda, 0x58, 0x92, 0xcb, 0x49, 0xff, 0x50, 0xa7, 0xcb, 0xe3, 0x92, 0x05, + 0x05, 0x6f, 0x1c, 0xfe, 0xf6, 0x2c, 0xc6, 0xbf, 0x9e, 0x80, 0xbc, 0x27, 0xae, 0x26, 0x01, 0x91, + 0xd2, 0xe9, 0x18, 0xd7, 0x9a, 0x4a, 0x47, 0x53, 0x2c, 0xae, 0x1a, 0x40, 0x8b, 0xe6, 0x49, 0x49, + 0xdc, 0xa1, 0x7b, 0x9b, 0xa6, 0xc8, 0x78, 0x39, 0x23, 0x7d, 0x36, 0x01, 0xe5, 0x60, 0x60, 0x1b, + 0x68, 0x66, 0xe2, 0x47, 0xd9, 0x4c, 0xe9, 0xd3, 0x09, 0x28, 0xfa, 0xa3, 0xd9, 0x40, 0xf3, 0x6e, + 0xff, 0x91, 0x36, 0xef, 0xcf, 0x93, 0x30, 0xe9, 0x8b, 0x61, 0xe3, 0xb6, 0xee, 0x45, 0x98, 0xd2, + 0x5a, 0xb8, 0xdb, 0x33, 0x6c, 0xac, 0xab, 0xfb, 0xcd, 0x0e, 0xbe, 0x8a, 0x3b, 0x15, 0x89, 0x1a, + 0x8d, 0x33, 0xa3, 0xa3, 0xe4, 0xb9, 0x65, 0x97, 0x6f, 0x85, 0xb0, 0xd5, 0xa7, 0x97, 0x17, 0x97, + 0x56, 0xd7, 0x2e, 0x6f, 0x2c, 0x5d, 0x5a, 0x78, 0x5f, 0x73, 0xf3, 0xd2, 0xd3, 0x97, 0x2e, 0x3f, + 0x7b, 0x49, 0x2e, 0x6b, 0x01, 0xb2, 0xb7, 0x70, 0xda, 0xaf, 0x41, 0x39, 0xd8, 0x28, 0x74, 0x0c, + 0xc2, 0x9a, 0x55, 0x1e, 0x43, 0xd3, 0x50, 0xba, 0x74, 0xb9, 0xb9, 0xbe, 0xbc, 0xb8, 0xd4, 0x5c, + 0x3a, 0x7f, 0x7e, 0x69, 0x61, 0x63, 0x9d, 0xe5, 0x3d, 0x1c, 0xea, 0x0d, 0xdf, 0x04, 0x97, 0x3e, + 0x95, 0x82, 0xe9, 0x90, 0x96, 0xa0, 0x79, 0xbe, 0x62, 0x61, 0x8b, 0xa8, 0xfb, 0xe3, 0xb4, 0x7e, + 0x8e, 0xc4, 0x0c, 0x6b, 0x8a, 0x69, 0xf3, 0x05, 0xce, 0x69, 0x20, 0x52, 0xd2, 0x6d, 0x6d, 0x5b, + 0xc3, 0x26, 0xcf, 0x27, 0xb1, 0x65, 0x4c, 0xc9, 0x2d, 0x67, 0x29, 0xa5, 0xfb, 0x00, 0xf5, 0x0c, + 0x4b, 0xb3, 0xb5, 0xab, 0xb8, 0xa9, 0xe9, 0x22, 0xf9, 0x94, 0xa6, 0xbb, 0x51, 0x65, 0xf1, 0x66, + 0x59, 0xb7, 0x1d, 0x6a, 0x1d, 0xb7, 0x95, 0x00, 0x35, 0x31, 0xe6, 0x29, 0xb9, 0x2c, 0xde, 0x38, + 0xd4, 0xb7, 0x43, 0xa1, 0x65, 0xf4, 0x49, 0xac, 0xc7, 0xe8, 0x88, 0xef, 0x48, 0xc8, 0x79, 0x56, + 0xe6, 0x90, 0xf0, 0x28, 0xde, 0xcd, 0x7a, 0x15, 0xe4, 0x3c, 0x2b, 0x63, 0x24, 0x77, 0x43, 0x49, + 0x69, 0xb7, 0x4d, 0x02, 0x2e, 0x80, 0xd8, 0xba, 0xa4, 0xe8, 0x14, 0x53, 0xc2, 0xea, 0x53, 0x90, + 0x15, 0x72, 0x20, 0xae, 0x9a, 0x48, 0xa2, 0xd9, 0x63, 0x8b, 0xed, 0xe4, 0x6c, 0x4e, 0xce, 0xea, + 0xe2, 0xe5, 0xed, 0x50, 0xd0, 0xac, 0xa6, 0x9b, 0xc4, 0x4f, 0x9e, 0x4c, 0xce, 0x66, 0xe5, 0xbc, + 0x66, 0x39, 0x09, 0x50, 0xe9, 0x0b, 0x49, 0x28, 0xfa, 0x37, 0x21, 0xd0, 0x22, 0x64, 0x3b, 0x86, + 0x4a, 0x77, 0x19, 0xf9, 0x0e, 0xd8, 0x6c, 0xc4, 0xbe, 0xc5, 0xdc, 0x0a, 0xa7, 0x97, 0x1d, 0xce, + 0xea, 0x7f, 0x48, 0x40, 0x56, 0x14, 0xa3, 0xa3, 0x90, 0xee, 0x29, 0xf6, 0x0e, 0x85, 0x1b, 0x6f, + 0x24, 0xcb, 0x09, 0x99, 0x3e, 0x93, 0x72, 0xab, 0xa7, 0xe8, 0x54, 0x05, 0x78, 0x39, 0x79, 0x26, + 0xe3, 0xda, 0xc1, 0x4a, 0x8b, 0x2e, 0x7a, 0x8c, 0x6e, 0x17, 0xeb, 0xb6, 0x25, 0xc6, 0x95, 0x97, + 0x2f, 0xf0, 0x62, 0x74, 0x2f, 0x4c, 0xd9, 0xa6, 0xa2, 0x75, 0x7c, 0xb4, 0x69, 0x4a, 0x5b, 0x16, + 0x2f, 0x1c, 0xe2, 0x3a, 0x1c, 0x17, 0xb8, 0x2d, 0x6c, 0x2b, 0xea, 0x0e, 0x6e, 0xb9, 0x4c, 0x19, + 0x9a, 0xdc, 0x38, 0xc6, 0x09, 0x16, 0xf9, 0x7b, 0xc1, 0x2b, 0x7d, 0x2b, 0x01, 0x53, 0x62, 0x99, + 0xd6, 0x72, 0x84, 0xb5, 0x0a, 0xa0, 0xe8, 0xba, 0x61, 0x7b, 0xc5, 0x35, 0xa8, 0xca, 0x03, 0x7c, + 0x73, 0xf3, 0x0e, 0x93, 0xec, 0x01, 0xa8, 0x76, 0x01, 0xdc, 0x37, 0x43, 0xc5, 0x56, 0x83, 0x3c, + 0xdf, 0x61, 0xa2, 0xdb, 0x94, 0x6c, 0x61, 0x0f, 0xac, 0x88, 0xac, 0xe7, 0xd0, 0x0c, 0x8c, 0x6f, + 0xe1, 0xb6, 0xa6, 0xf3, 0xbc, 0x31, 0x7b, 0x10, 0xe9, 0x97, 0xb4, 0x93, 0x7e, 0x69, 0x7c, 0x3c, + 0x01, 0xd3, 0xaa, 0xd1, 0x0d, 0xb6, 0xb7, 0x51, 0x0e, 0x64, 0x17, 0xac, 0x8b, 0x89, 0xe7, 0x9f, + 0xf0, 0xec, 0xc8, 0xb6, 0x8d, 0x8e, 0xa2, 0xb7, 0xdd, 0x7d, 0x56, 0xfa, 0x43, 0xbd, 0xbf, 0x8d, + 0xf5, 0xfb, 0xdb, 0x86, 0x67, 0xd7, 0xf5, 0x9c, 0xfb, 0xf3, 0xaf, 0x13, 0x89, 0xcf, 0x27, 0x53, + 0x17, 0xd6, 0x1a, 0x5f, 0x4c, 0x56, 0x2f, 0xb0, 0xea, 0xd6, 0x84, 0x78, 0x64, 0xbc, 0xdd, 0xc1, + 0x2a, 0xe9, 0x32, 0x7c, 0xef, 0x5e, 0x98, 0x69, 0x1b, 0x6d, 0x83, 0x22, 0x9e, 0x21, 0xbf, 0xf8, + 0xce, 0x6d, 0xce, 0x29, 0xad, 0x46, 0x6e, 0xf3, 0xd6, 0x2f, 0xc1, 0x34, 0x27, 0x6e, 0xd2, 0xad, + 0x23, 0xb6, 0xb0, 0x41, 0x23, 0xb3, 0x6a, 0x95, 0xdf, 0xfb, 0x0e, 0x75, 0xe8, 0xf2, 0x14, 0x67, + 0x25, 0xef, 0xd8, 0xda, 0xa7, 0x2e, 0xc3, 0x11, 0x1f, 0x1e, 0x9b, 0xb6, 0xd8, 0x8c, 0x40, 0xfc, + 0xb7, 0x1c, 0x71, 0xda, 0x83, 0xb8, 0xce, 0x59, 0xeb, 0x0b, 0x30, 0x79, 0x18, 0xac, 0x7f, 0xc7, + 0xb1, 0x0a, 0xd8, 0x0b, 0x72, 0x01, 0x4a, 0x14, 0x44, 0xed, 0x5b, 0xb6, 0xd1, 0xa5, 0x36, 0x71, + 0x34, 0xcc, 0x1f, 0x7d, 0x87, 0xcd, 0xa3, 0x22, 0x61, 0x5b, 0x70, 0xb8, 0xea, 0x75, 0xa0, 0xbb, + 0x65, 0x2d, 0xac, 0x76, 0x22, 0x10, 0xbe, 0xc1, 0x1b, 0xe2, 0xd0, 0xd7, 0xaf, 0xc0, 0x0c, 0xf9, + 0x4d, 0x4d, 0x96, 0xb7, 0x25, 0xd1, 0x29, 0xb8, 0xca, 0xb7, 0x7e, 0x8e, 0x4d, 0xd5, 0x69, 0x07, + 0xc0, 0xd3, 0x26, 0xcf, 0x28, 0xb6, 0xb1, 0x6d, 0x63, 0xd3, 0x6a, 0x2a, 0x9d, 0xb0, 0xe6, 0x79, + 0x72, 0x18, 0x95, 0xdf, 0x78, 0xdd, 0x3f, 0x8a, 0x17, 0x18, 0xe7, 0x7c, 0xa7, 0x53, 0xdf, 0x84, + 0x63, 0x21, 0x5a, 0x11, 0x03, 0xf3, 0x53, 0x1c, 0x73, 0x66, 0x40, 0x33, 0x08, 0xec, 0x1a, 0x88, + 0x72, 0x67, 0x2c, 0x63, 0x60, 0xfe, 0x7d, 0x8e, 0x89, 0x38, 0xaf, 0x18, 0x52, 0x82, 0xf8, 0x14, + 0x4c, 0x5d, 0xc5, 0xe6, 0x96, 0x61, 0xf1, 0xbc, 0x51, 0x0c, 0xb8, 0x4f, 0x73, 0xb8, 0x12, 0x67, + 0xa4, 0x89, 0x24, 0x82, 0xf5, 0x18, 0x64, 0xb7, 0x15, 0x15, 0xc7, 0x80, 0xf8, 0x0c, 0x87, 0x98, + 0x20, 0xf4, 0x84, 0x75, 0x1e, 0x0a, 0x6d, 0x83, 0x7b, 0xad, 0x68, 0xf6, 0xcf, 0x72, 0xf6, 0xbc, + 0xe0, 0xe1, 0x10, 0x3d, 0xa3, 0xd7, 0xef, 0x10, 0x97, 0x16, 0x0d, 0xf1, 0x9b, 0x02, 0x42, 0xf0, + 0x70, 0x88, 0x43, 0x88, 0xf5, 0x15, 0x01, 0x61, 0x79, 0xe4, 0xf9, 0x24, 0xe4, 0x0d, 0xbd, 0xb3, + 0x6f, 0xe8, 0x71, 0x1a, 0xf1, 0x39, 0x8e, 0x00, 0x9c, 0x85, 0x00, 0x9c, 0x83, 0x5c, 0xdc, 0x81, + 0xf8, 0x87, 0xaf, 0x8b, 0xe9, 0x21, 0x46, 0xe0, 0x02, 0x94, 0x84, 0x81, 0xd2, 0x0c, 0x3d, 0x06, + 0xc4, 0x3f, 0xe2, 0x10, 0x45, 0x0f, 0x1b, 0xef, 0x86, 0x8d, 0x2d, 0xbb, 0x8d, 0xe3, 0x80, 0x7c, + 0x41, 0x74, 0x83, 0xb3, 0x70, 0x51, 0x6e, 0x61, 0x5d, 0xdd, 0x89, 0x87, 0xf0, 0x5b, 0x42, 0x94, + 0x82, 0x87, 0x40, 0x2c, 0xc0, 0x64, 0x57, 0x31, 0xad, 0x1d, 0xa5, 0x13, 0x6b, 0x38, 0xfe, 0x31, + 0xc7, 0x28, 0x38, 0x4c, 0x5c, 0x22, 0x7d, 0xfd, 0x30, 0x30, 0x5f, 0x14, 0x12, 0xf1, 0xb0, 0xf1, + 0xa9, 0x67, 0xd9, 0x34, 0xc9, 0x76, 0x18, 0xb4, 0x7f, 0x22, 0xa6, 0x1e, 0xe3, 0x5d, 0xf5, 0x22, + 0x9e, 0x83, 0x9c, 0xa5, 0xbd, 0x14, 0x0b, 0xe6, 0x9f, 0x8a, 0x91, 0xa6, 0x0c, 0x84, 0xf9, 0x7d, + 0x70, 0x3c, 0xd4, 0x4d, 0xc4, 0x00, 0xfb, 0x67, 0x1c, 0xec, 0x68, 0x88, 0xab, 0xe0, 0x26, 0xe1, + 0xb0, 0x90, 0xbf, 0x2d, 0x4c, 0x02, 0x0e, 0x60, 0xad, 0x91, 0x75, 0x84, 0xa5, 0x6c, 0x1f, 0x4e, + 0x6a, 0xbf, 0x23, 0xa4, 0xc6, 0x78, 0x7d, 0x52, 0xdb, 0x80, 0xa3, 0x1c, 0xf1, 0x70, 0xe3, 0xfa, + 0xbb, 0xc2, 0xb0, 0x32, 0xee, 0x4d, 0xff, 0xe8, 0xbe, 0x1f, 0xaa, 0x8e, 0x38, 0x45, 0xc0, 0x6a, + 0x35, 0xbb, 0x4a, 0x2f, 0x06, 0xf2, 0xef, 0x71, 0x64, 0x61, 0xf1, 0x9d, 0x88, 0xd7, 0x5a, 0x55, + 0x7a, 0x04, 0xfc, 0x39, 0xa8, 0x08, 0xf0, 0xbe, 0x6e, 0x62, 0xd5, 0x68, 0xeb, 0xda, 0x4b, 0xb8, + 0x15, 0x03, 0xfa, 0x9f, 0x07, 0x86, 0x6a, 0xd3, 0xc3, 0x4e, 0x90, 0x97, 0xa1, 0xec, 0xc4, 0x2a, + 0x4d, 0xad, 0xdb, 0x33, 0x4c, 0x3b, 0x02, 0xf1, 0x5f, 0x88, 0x91, 0x72, 0xf8, 0x96, 0x29, 0x5b, + 0x7d, 0x09, 0xd8, 0xce, 0x73, 0x5c, 0x95, 0xfc, 0x12, 0x07, 0x9a, 0x74, 0xb9, 0xb8, 0xe1, 0x50, + 0x8d, 0x6e, 0x4f, 0x31, 0xe3, 0xd8, 0xbf, 0x7f, 0x29, 0x0c, 0x07, 0x67, 0xe1, 0x86, 0xc3, 0xde, + 0xef, 0x61, 0xe2, 0xed, 0x63, 0x20, 0x7c, 0x59, 0x18, 0x0e, 0xc1, 0xc3, 0x21, 0x44, 0xc0, 0x10, + 0x03, 0xe2, 0x2b, 0x02, 0x42, 0xf0, 0x10, 0x88, 0x67, 0x5c, 0x47, 0x6b, 0xe2, 0xb6, 0x66, 0xd9, + 0x26, 0x0b, 0x93, 0x47, 0x43, 0x7d, 0xf5, 0x75, 0x7f, 0x10, 0x26, 0x7b, 0x58, 0x89, 0x25, 0xe2, + 0x69, 0x57, 0xba, 0x8a, 0x8a, 0x6e, 0xd8, 0xd7, 0x84, 0x25, 0xf2, 0xb0, 0x91, 0xb6, 0x79, 0x22, + 0x44, 0x22, 0x76, 0x95, 0xac, 0x1d, 0x62, 0xc0, 0xfd, 0x7e, 0xa0, 0x71, 0xeb, 0x82, 0x97, 0x60, + 0x7a, 0xe2, 0x9f, 0xbe, 0xbe, 0x8b, 0xf7, 0x63, 0x69, 0xe7, 0x1f, 0x04, 0xe2, 0x9f, 0x4d, 0xc6, + 0xc9, 0x6c, 0x48, 0x29, 0x10, 0x4f, 0xa1, 0xa8, 0x73, 0x46, 0x95, 0xbf, 0xfd, 0x06, 0xef, 0xaf, + 0x3f, 0x9c, 0xaa, 0xaf, 0x10, 0x25, 0xf7, 0x07, 0x3d, 0xd1, 0x60, 0x3f, 0xf7, 0x86, 0xa3, 0xe7, + 0xbe, 0x98, 0xa7, 0x7e, 0x1e, 0x26, 0x7d, 0x01, 0x4f, 0x34, 0xd4, 0x07, 0x39, 0x54, 0xc1, 0x1b, + 0xef, 0xd4, 0x1f, 0x82, 0x34, 0x09, 0x5e, 0xa2, 0xd9, 0x7f, 0x9e, 0xb3, 0x53, 0xf2, 0xfa, 0x7b, + 0x20, 0x2b, 0x82, 0x96, 0x68, 0xd6, 0x0f, 0x71, 0x56, 0x87, 0x85, 0xb0, 0x8b, 0x80, 0x25, 0x9a, + 0xfd, 0xc3, 0x82, 0x5d, 0xb0, 0x10, 0xf6, 0xf8, 0x22, 0xfc, 0xfa, 0xdf, 0x49, 0x73, 0xa7, 0x23, + 0x64, 0x77, 0x0e, 0x26, 0x78, 0xa4, 0x12, 0xcd, 0xfd, 0x51, 0x5e, 0xb9, 0xe0, 0xa8, 0x3f, 0x02, + 0xe3, 0x31, 0x05, 0xfe, 0x8b, 0x9c, 0x95, 0xd1, 0xd7, 0x17, 0x20, 0xef, 0x89, 0x4e, 0xa2, 0xd9, + 0x7f, 0x89, 0xb3, 0x7b, 0xb9, 0x48, 0xd3, 0x79, 0x74, 0x12, 0x0d, 0xf0, 0x71, 0xd1, 0x74, 0xce, + 0x41, 0xc4, 0x26, 0x02, 0x93, 0x68, 0xee, 0x4f, 0x08, 0xa9, 0x0b, 0x96, 0xfa, 0x93, 0x90, 0x73, + 0x9c, 0x4d, 0x34, 0xff, 0x2f, 0x73, 0x7e, 0x97, 0x87, 0x48, 0xc0, 0xe3, 0xec, 0xa2, 0x21, 0x7e, + 0x45, 0x48, 0xc0, 0xc3, 0x45, 0xa6, 0x51, 0x30, 0x80, 0x89, 0x46, 0xfa, 0xbb, 0x62, 0x1a, 0x05, + 0xe2, 0x17, 0x32, 0x9a, 0xd4, 0xe6, 0x47, 0x43, 0xfc, 0xaa, 0x18, 0x4d, 0x4a, 0x4f, 0x9a, 0x11, + 0x8c, 0x08, 0xa2, 0x31, 0xfe, 0x9e, 0x68, 0x46, 0x20, 0x20, 0xa8, 0xaf, 0x01, 0x1a, 0x8c, 0x06, + 0xa2, 0xf1, 0x3e, 0xc9, 0xf1, 0xa6, 0x06, 0x82, 0x81, 0xfa, 0xb3, 0x70, 0x34, 0x3c, 0x12, 0x88, + 0x46, 0xfd, 0x8d, 0x37, 0x02, 0x6b, 0x37, 0x6f, 0x20, 0x50, 0xdf, 0x70, 0x5d, 0x8a, 0x37, 0x0a, + 0x88, 0x86, 0xfd, 0xd4, 0x1b, 0x7e, 0xc3, 0xed, 0x0d, 0x02, 0xea, 0xf3, 0x00, 0xae, 0x03, 0x8e, + 0xc6, 0xfa, 0x34, 0xc7, 0xf2, 0x30, 0x91, 0xa9, 0xc1, 0xfd, 0x6f, 0x34, 0xff, 0x67, 0xc4, 0xd4, + 0xe0, 0x1c, 0x64, 0x6a, 0x08, 0xd7, 0x1b, 0xcd, 0xfd, 0x59, 0x31, 0x35, 0x04, 0x0b, 0xd1, 0x6c, + 0x8f, 0x77, 0x8b, 0x46, 0xf8, 0x9c, 0xd0, 0x6c, 0x0f, 0x57, 0xfd, 0x12, 0x4c, 0x0d, 0x38, 0xc4, + 0x68, 0xa8, 0xcf, 0x73, 0xa8, 0x72, 0xd0, 0x1f, 0x7a, 0x9d, 0x17, 0x77, 0x86, 0xd1, 0x68, 0xff, + 0x20, 0xe0, 0xbc, 0xb8, 0x2f, 0xac, 0x9f, 0x83, 0xac, 0xde, 0xef, 0x74, 0xc8, 0xe4, 0x41, 0xa3, + 0xcf, 0x06, 0x56, 0xfe, 0xfb, 0x0f, 0xb9, 0x74, 0x04, 0x43, 0xfd, 0x21, 0x18, 0xc7, 0xdd, 0x2d, + 0xdc, 0x8a, 0xe2, 0xfc, 0xde, 0x0f, 0x85, 0xc1, 0x24, 0xd4, 0xf5, 0x27, 0x01, 0x58, 0x6a, 0x84, + 0x6e, 0x0f, 0x46, 0xf0, 0xfe, 0x8f, 0x1f, 0xf2, 0xc3, 0x38, 0x2e, 0x8b, 0x0b, 0xc0, 0x8e, 0xf6, + 0x8c, 0x06, 0x78, 0xdd, 0x0f, 0x40, 0x47, 0xe4, 0x31, 0x98, 0x78, 0xc1, 0x32, 0x74, 0x5b, 0x69, + 0x47, 0x71, 0xff, 0x4f, 0xce, 0x2d, 0xe8, 0x89, 0xc0, 0xba, 0x86, 0x89, 0x6d, 0xa5, 0x6d, 0x45, + 0xf1, 0xfe, 0x2f, 0xce, 0xeb, 0x30, 0x10, 0x66, 0x55, 0xb1, 0xec, 0x38, 0xfd, 0xfe, 0xdf, 0x82, + 0x59, 0x30, 0x90, 0x46, 0x93, 0xdf, 0xbb, 0x78, 0x3f, 0x8a, 0xf7, 0xfb, 0xa2, 0xd1, 0x9c, 0xbe, + 0xfe, 0x1e, 0xc8, 0x91, 0x9f, 0xec, 0x84, 0x5d, 0x04, 0xf3, 0xff, 0xe1, 0xcc, 0x2e, 0x07, 0xa9, + 0xd9, 0xb2, 0x5b, 0xb6, 0x16, 0x2d, 0xec, 0xeb, 0x7c, 0xa4, 0x05, 0x7d, 0x7d, 0x1e, 0xf2, 0x96, + 0xdd, 0x6a, 0xf5, 0x79, 0x7c, 0x1a, 0xc1, 0xfe, 0x7f, 0x7f, 0xe8, 0xa4, 0x2c, 0x1c, 0x1e, 0x32, + 0xda, 0xd7, 0x76, 0xed, 0x9e, 0x41, 0xb7, 0x40, 0xa2, 0x10, 0xde, 0xe0, 0x08, 0x1e, 0x96, 0xfa, + 0x02, 0x14, 0x48, 0x5f, 0x4c, 0xdc, 0xc3, 0x74, 0xbf, 0x2a, 0x02, 0xe2, 0x2f, 0xb9, 0x00, 0x7c, + 0x4c, 0x8d, 0x9f, 0x1e, 0x76, 0x3f, 0x27, 0x3c, 0x6d, 0x0c, 0x17, 0x8c, 0x0b, 0x06, 0x4b, 0x18, + 0x3f, 0x2f, 0xf9, 0xd2, 0xc5, 0x6d, 0xc3, 0xcd, 0xd6, 0x3a, 0x8b, 0x1c, 0xf8, 0xfd, 0x24, 0xdc, + 0x49, 0x8f, 0x05, 0x9b, 0x5d, 0x4d, 0xb7, 0xcf, 0xa8, 0xe6, 0x7e, 0xcf, 0x36, 0xce, 0x74, 0xb1, + 0xb9, 0xdb, 0xc1, 0xfc, 0x0f, 0xcf, 0xfe, 0x56, 0x5c, 0xb2, 0x39, 0x46, 0x36, 0xc7, 0xde, 0x57, + 0x43, 0xb3, 0xc5, 0xd2, 0x02, 0x4c, 0xac, 0x99, 0x86, 0xb1, 0x7d, 0xb9, 0x87, 0x10, 0x3f, 0xe9, + 0xcc, 0x0f, 0xc6, 0x51, 0x35, 0xe4, 0x37, 0xa3, 0x92, 0xee, 0xcd, 0x28, 0x04, 0xe9, 0x96, 0x62, + 0x2b, 0x34, 0x61, 0x5e, 0x90, 0xe9, 0x6f, 0xa9, 0x01, 0xe3, 0x14, 0x04, 0x3d, 0x06, 0x29, 0xa3, + 0x67, 0xf1, 0xec, 0xfe, 0xed, 0x73, 0xc3, 0xda, 0x32, 0xc7, 0xab, 0x6c, 0xa4, 0xbf, 0x71, 0x50, + 0x1b, 0x93, 0x09, 0x4f, 0x63, 0xed, 0xaf, 0xbf, 0x7d, 0x22, 0xf1, 0x5b, 0xaf, 0x9e, 0x48, 0x0c, + 0xbd, 0xe9, 0x34, 0xe7, 0x11, 0x94, 0x47, 0x18, 0xc3, 0xe4, 0xe2, 0xdc, 0x77, 0xfa, 0x85, 0x24, + 0x9c, 0xf0, 0x10, 0x75, 0xb4, 0x2d, 0xeb, 0xcc, 0xee, 0x55, 0x76, 0x35, 0x8a, 0x4b, 0x0d, 0x79, + 0x5a, 0x4a, 0xde, 0xcf, 0xed, 0x5e, 0x1d, 0x22, 0xaf, 0x39, 0x48, 0xaf, 0x29, 0x9a, 0x19, 0x72, + 0x65, 0x6c, 0xc6, 0x3d, 0xdb, 0x4a, 0xca, 0xd8, 0x83, 0x74, 0x16, 0xb2, 0x4f, 0x2f, 0x3f, 0xfc, + 0x60, 0x1c, 0x9e, 0x14, 0xe7, 0x69, 0xc8, 0x42, 0x14, 0x5f, 0x0d, 0x11, 0xc7, 0xd7, 0x5f, 0x3b, + 0x91, 0x08, 0xbd, 0xfc, 0x15, 0x2e, 0x12, 0xde, 0x5b, 0x47, 0x18, 0x9f, 0x48, 0x42, 0x2d, 0xb8, + 0x2b, 0x40, 0xa6, 0xa2, 0x65, 0x2b, 0xdd, 0xde, 0xb0, 0xbb, 0x5f, 0xe7, 0x20, 0xb7, 0x21, 0x68, + 0x50, 0x05, 0x26, 0x2c, 0xac, 0x1a, 0x7a, 0xcb, 0xa2, 0x3d, 0x49, 0xc9, 0xe2, 0x91, 0xf4, 0x46, + 0x57, 0x74, 0xc3, 0xe2, 0x27, 0x4e, 0xd9, 0x43, 0xe3, 0xd7, 0x13, 0x87, 0x9b, 0x1b, 0x45, 0xa7, + 0x2a, 0x3a, 0x41, 0xd6, 0x12, 0xcf, 0xdf, 0x3b, 0x6a, 0x43, 0x85, 0xdd, 0x70, 0x73, 0xba, 0xe0, + 0xd9, 0x3d, 0x39, 0x11, 0xdc, 0x3d, 0x79, 0x16, 0x77, 0x3a, 0x4f, 0xeb, 0xc6, 0x35, 0x7d, 0x83, + 0xf0, 0x38, 0x22, 0xf9, 0x58, 0x12, 0x4e, 0x0c, 0x6c, 0x94, 0x70, 0xf3, 0x32, 0x4c, 0x22, 0x75, + 0xc8, 0x2e, 0x0a, 0xab, 0x75, 0x58, 0x81, 0xfc, 0xea, 0x21, 0x05, 0x32, 0x29, 0x6a, 0x12, 0xf2, + 0xb8, 0x27, 0x5a, 0x1e, 0xa2, 0xfd, 0x37, 0x20, 0x8e, 0x0f, 0x3e, 0x01, 0xb7, 0x7b, 0x14, 0x48, + 0xd9, 0x52, 0x35, 0x7e, 0x8d, 0xd0, 0x3b, 0x63, 0x8e, 0x78, 0x66, 0x0c, 0x21, 0x99, 0xa3, 0x2f, + 0xc3, 0x27, 0x4d, 0x35, 0x9e, 0xed, 0xaa, 0x46, 0xcc, 0xd2, 0x6a, 0x94, 0xe2, 0x56, 0x23, 0x86, + 0x51, 0xfa, 0xab, 0x71, 0x98, 0x10, 0x77, 0x3e, 0x1f, 0x85, 0x34, 0x56, 0x77, 0x0c, 0x7e, 0xd8, + 0x5d, 0x9a, 0x0b, 0xed, 0xcf, 0x1c, 0xa7, 0x5e, 0x52, 0x77, 0x8c, 0x8b, 0x63, 0x32, 0xe5, 0xa0, + 0x77, 0xc5, 0x3a, 0x7d, 0x6b, 0x87, 0x9f, 0x49, 0x3e, 0x35, 0x9a, 0xf5, 0x3c, 0x21, 0xbd, 0x38, + 0x26, 0x33, 0x1e, 0x52, 0x2d, 0xbd, 0xe7, 0x96, 0x8e, 0x53, 0xed, 0xb2, 0xbe, 0x4d, 0xab, 0x25, + 0x1c, 0xe8, 0x22, 0x80, 0x85, 0x6d, 0x71, 0x94, 0x61, 0x9c, 0xf2, 0xdf, 0x3d, 0x9a, 0x7f, 0x1d, + 0xdb, 0xcc, 0x6d, 0x5d, 0x1c, 0x93, 0x73, 0x96, 0x78, 0x20, 0x48, 0x9a, 0xae, 0xd9, 0x4d, 0x75, + 0x47, 0xd1, 0x74, 0xba, 0x07, 0x1f, 0x89, 0xb4, 0xac, 0x6b, 0xf6, 0x02, 0x21, 0x27, 0x48, 0x9a, + 0x78, 0x20, 0xa2, 0xa0, 0x77, 0x4b, 0xf9, 0x65, 0xac, 0x08, 0x51, 0x3c, 0x43, 0x48, 0x89, 0x28, + 0x28, 0x0f, 0x7a, 0x1a, 0xf2, 0x74, 0xbb, 0xb5, 0xb9, 0xd5, 0x31, 0xd4, 0x5d, 0x7e, 0x03, 0x65, + 0x76, 0x34, 0x44, 0x83, 0x30, 0x34, 0x08, 0xfd, 0xc5, 0x31, 0x19, 0xb6, 0x9c, 0x27, 0xd4, 0x80, + 0x2c, 0x3b, 0xf5, 0x6b, 0xef, 0xf1, 0x3b, 0x84, 0x77, 0x8e, 0x46, 0xa2, 0x07, 0x80, 0x37, 0xf6, + 0x2e, 0x8e, 0xc9, 0x13, 0x2a, 0xfb, 0x89, 0x96, 0x20, 0x87, 0xf5, 0x16, 0x6f, 0x4e, 0x9e, 0xdf, + 0xb6, 0x1a, 0xad, 0x17, 0x7a, 0x4b, 0x34, 0x26, 0x8b, 0xf9, 0x6f, 0xf4, 0x04, 0x64, 0x54, 0xa3, + 0xdb, 0xd5, 0x6c, 0x7a, 0x17, 0x31, 0x7f, 0xf6, 0x8e, 0x88, 0x86, 0x50, 0xda, 0x8b, 0x63, 0x32, + 0xe7, 0x22, 0xc3, 0xd3, 0xc2, 0x1d, 0xed, 0x2a, 0x36, 0x49, 0x67, 0xa6, 0xe3, 0x0c, 0xcf, 0x22, + 0xa3, 0xa7, 0xdd, 0xc9, 0xb5, 0xc4, 0x43, 0x63, 0x82, 0xbb, 0x17, 0xe9, 0x6e, 0xc8, 0x7b, 0x34, + 0x99, 0x58, 0x2c, 0xbe, 0x02, 0xe1, 0xce, 0x5e, 0x3c, 0x4a, 0x45, 0x28, 0x78, 0xf5, 0x56, 0xea, + 0x3a, 0x8c, 0x74, 0x13, 0xbf, 0x02, 0x13, 0x57, 0xb1, 0x69, 0xb1, 0x1d, 0x7c, 0xca, 0xc8, 0x1f, + 0xd1, 0x29, 0x98, 0xa4, 0x72, 0x6b, 0x8a, 0xf7, 0xec, 0xfa, 0x72, 0x81, 0x16, 0x5e, 0xe1, 0x44, + 0x35, 0xc8, 0xf7, 0xce, 0xf6, 0x1c, 0x12, 0x76, 0x87, 0x1a, 0x7a, 0x67, 0x7b, 0x9c, 0x40, 0xaa, + 0x43, 0x39, 0xa8, 0xba, 0x5e, 0xaf, 0x99, 0x0b, 0xf1, 0x9a, 0x39, 0xe1, 0x69, 0x7f, 0x37, 0xe9, + 0x30, 0x3b, 0xda, 0x4a, 0xa6, 0x1b, 0x31, 0x12, 0x94, 0x3b, 0x7f, 0xb6, 0x3a, 0x10, 0xda, 0x39, + 0xbe, 0xa6, 0x91, 0x25, 0xa1, 0xc8, 0x27, 0xfe, 0xac, 0x96, 0x90, 0x29, 0x07, 0x3a, 0x4e, 0x14, + 0x4a, 0xd1, 0xf4, 0xa6, 0xd6, 0x12, 0xb7, 0x8e, 0xe9, 0xf3, 0x72, 0x0b, 0x3d, 0x03, 0x65, 0xd5, + 0xd0, 0x2d, 0xac, 0x5b, 0x7d, 0xab, 0xd9, 0x53, 0x4c, 0xa5, 0xeb, 0x5e, 0xce, 0x0b, 0x1f, 0xa6, + 0x05, 0x41, 0xbe, 0x46, 0xa9, 0xe5, 0x92, 0xea, 0x2f, 0x40, 0x2b, 0x00, 0x57, 0x95, 0x8e, 0xd6, + 0x52, 0x6c, 0xc3, 0xb4, 0xf8, 0xdd, 0x94, 0x61, 0x60, 0x57, 0x04, 0xe1, 0x66, 0xaf, 0xa5, 0xd8, + 0x98, 0x07, 0x51, 0x1e, 0x7e, 0x74, 0x17, 0x94, 0x94, 0x5e, 0xaf, 0x69, 0xd9, 0x8a, 0x8d, 0x9b, + 0x5b, 0xfb, 0x36, 0xb6, 0xa8, 0xbd, 0x28, 0xc8, 0x93, 0x4a, 0xaf, 0xb7, 0x4e, 0x4a, 0x1b, 0xa4, + 0x50, 0x6a, 0x39, 0xa3, 0x4d, 0xa7, 0xa6, 0x13, 0xdb, 0x25, 0xdc, 0xd8, 0x8e, 0x94, 0xd1, 0xa3, + 0x15, 0x4c, 0x06, 0xe2, 0x34, 0x4a, 0x66, 0x07, 0x6b, 0xed, 0x1d, 0x76, 0x0d, 0x3e, 0x25, 0xf3, + 0x27, 0x32, 0x30, 0x3d, 0xd3, 0xb8, 0x8a, 0xf9, 0x0d, 0x78, 0xf6, 0x20, 0xfd, 0x5a, 0x12, 0xa6, + 0x06, 0xa6, 0x2f, 0xc1, 0xa5, 0xe7, 0xfb, 0x79, 0x5d, 0xe4, 0x37, 0x3a, 0x47, 0x70, 0x95, 0x16, + 0xbf, 0xb3, 0x92, 0x3f, 0x7b, 0xdb, 0x10, 0x09, 0x5c, 0xa4, 0x44, 0xbc, 0xe3, 0x9c, 0x05, 0x6d, + 0x42, 0xb9, 0xa3, 0x58, 0x76, 0x93, 0xcd, 0x22, 0x76, 0x9b, 0x38, 0x35, 0xd2, 0x12, 0xac, 0x28, + 0x62, 0xf6, 0x11, 0xe5, 0xe6, 0x70, 0xc5, 0x8e, 0xaf, 0x14, 0x3d, 0x07, 0x33, 0x5b, 0xfb, 0x2f, + 0x29, 0xba, 0xad, 0xe9, 0xf4, 0xb0, 0x91, 0x7f, 0x8c, 0x6a, 0x43, 0xa0, 0x97, 0xae, 0x6a, 0x2d, + 0xac, 0xab, 0x62, 0x70, 0xa6, 0x1d, 0x08, 0x67, 0xf0, 0x2c, 0xe9, 0x39, 0x28, 0xfa, 0x6d, 0x11, + 0x2a, 0x42, 0xd2, 0xde, 0xe3, 0x12, 0x49, 0xda, 0x7b, 0xe8, 0x61, 0x1e, 0x91, 0x27, 0xe9, 0x69, + 0xb9, 0x61, 0xce, 0x82, 0x73, 0xbb, 0x77, 0x0e, 0x25, 0xc9, 0x99, 0x09, 0x8e, 0x61, 0x08, 0x62, + 0x4b, 0xa7, 0xa1, 0x14, 0x30, 0x62, 0x9e, 0x61, 0x4d, 0x78, 0x87, 0x55, 0x2a, 0xc1, 0xa4, 0xcf, + 0x56, 0x49, 0x7f, 0x9c, 0x81, 0xac, 0xf3, 0x2d, 0x83, 0x8b, 0x90, 0xc3, 0x7b, 0x2a, 0xee, 0xd9, + 0xc2, 0x2a, 0x8c, 0x32, 0xe2, 0x8c, 0x67, 0x49, 0xd0, 0x13, 0x73, 0xe5, 0x30, 0xa3, 0xc7, 0x7c, + 0x2e, 0xf9, 0x54, 0x14, 0x88, 0xd7, 0x27, 0x3f, 0xee, 0xf7, 0xc9, 0x77, 0x44, 0xf0, 0x06, 0x9c, + 0xf2, 0x63, 0x3e, 0xa7, 0x1c, 0x55, 0xb1, 0xcf, 0x2b, 0x2f, 0x87, 0x78, 0xe5, 0xa8, 0xee, 0x0f, + 0x71, 0xcb, 0xcb, 0x21, 0x6e, 0x79, 0x36, 0xb2, 0x2d, 0xa1, 0x7e, 0xf9, 0x71, 0xbf, 0x5f, 0x8e, + 0x12, 0x47, 0xc0, 0x31, 0xaf, 0x84, 0x39, 0xe6, 0xd3, 0x11, 0x18, 0x43, 0x3d, 0xf3, 0xc2, 0x80, + 0x67, 0xbe, 0x2b, 0x02, 0x2a, 0xc4, 0x35, 0x2f, 0xfb, 0x7c, 0x22, 0xc4, 0x92, 0x4d, 0xb8, 0x53, + 0x44, 0xe7, 0x07, 0xbd, 0xfc, 0xdd, 0x51, 0xaa, 0x16, 0xe6, 0xe6, 0x9f, 0x0c, 0xb8, 0xf9, 0x3b, + 0xa3, 0x7a, 0x15, 0xf0, 0xf3, 0xae, 0x77, 0x3e, 0x4d, 0xec, 0x63, 0x60, 0x66, 0x10, 0x5b, 0x8a, + 0x4d, 0xd3, 0x30, 0xb9, 0xe3, 0x63, 0x0f, 0xd2, 0x2c, 0xb1, 0xd8, 0xae, 0xfe, 0x8f, 0xf0, 0xe4, + 0x74, 0xd2, 0x7a, 0xb4, 0x5d, 0xfa, 0x6a, 0xc2, 0xe5, 0xa5, 0x96, 0xcd, 0x6b, 0xed, 0x73, 0xdc, + 0xda, 0x7b, 0x1c, 0x7c, 0xd2, 0xef, 0xe0, 0x6b, 0x90, 0x27, 0x3e, 0x25, 0xe0, 0xbb, 0x95, 0x9e, + 0xf0, 0xdd, 0xe8, 0x1e, 0x98, 0xa2, 0xf6, 0x97, 0x85, 0x01, 0xdc, 0x90, 0xa4, 0xa9, 0x21, 0x29, + 0x91, 0x17, 0x4c, 0x82, 0xcc, 0x51, 0xdc, 0x0f, 0xd3, 0x1e, 0x5a, 0x82, 0x4b, 0x7d, 0x01, 0x73, + 0x52, 0x65, 0x87, 0x7a, 0xbe, 0xd7, 0xbb, 0xa8, 0x58, 0x3b, 0xd2, 0xaa, 0x2b, 0x20, 0x37, 0x2e, + 0x40, 0x90, 0x56, 0x8d, 0x16, 0xeb, 0xf7, 0xa4, 0x4c, 0x7f, 0x93, 0x58, 0xa1, 0x63, 0xb4, 0xf9, + 0x09, 0x48, 0xf2, 0x93, 0x50, 0x39, 0x53, 0x3b, 0xc7, 0xe6, 0xac, 0xf4, 0xa5, 0x84, 0x8b, 0xe7, + 0x86, 0x0a, 0x61, 0x5e, 0x3d, 0x71, 0x33, 0xbd, 0x7a, 0xf2, 0xcd, 0x79, 0x75, 0xe9, 0x8d, 0x84, + 0x3b, 0xa4, 0x8e, 0xbf, 0xbe, 0x31, 0x11, 0x10, 0xed, 0x62, 0x37, 0xc6, 0xd9, 0x49, 0x5d, 0xf6, + 0x20, 0x42, 0xad, 0x4c, 0x48, 0x82, 0x62, 0xc2, 0x93, 0xd4, 0x40, 0x0f, 0x51, 0x3f, 0x6f, 0x6c, + 0x73, 0xd3, 0x50, 0x8b, 0x48, 0xf4, 0xc8, 0x8c, 0xda, 0xe3, 0x5f, 0x72, 0xbe, 0xb0, 0xe1, 0x56, + 0xc8, 0x91, 0xa6, 0xb3, 0xeb, 0x4f, 0xc0, 0xd3, 0x8b, 0xa2, 0x40, 0x6a, 0x01, 0x1a, 0xb4, 0x31, + 0xe8, 0x12, 0x64, 0xf0, 0x55, 0x7a, 0x1a, 0x95, 0x25, 0x9b, 0x6e, 0x1d, 0xea, 0x88, 0xb1, 0x6e, + 0x37, 0x2a, 0x44, 0x98, 0xdf, 0x3b, 0xa8, 0x95, 0x19, 0xcf, 0x7d, 0x46, 0x57, 0xb3, 0x71, 0xb7, + 0x67, 0xef, 0xcb, 0x1c, 0x45, 0xfa, 0x70, 0x92, 0xf8, 0x43, 0x9f, 0xfd, 0x09, 0x15, 0xaf, 0x98, + 0x34, 0x49, 0x4f, 0x88, 0x14, 0x4f, 0xe4, 0xb7, 0x01, 0xb4, 0x15, 0xab, 0x79, 0x4d, 0xd1, 0x6d, + 0xdc, 0xe2, 0x72, 0xcf, 0xb5, 0x15, 0xeb, 0x59, 0x5a, 0x40, 0xe2, 0x4d, 0xf2, 0xba, 0x6f, 0xe1, + 0x16, 0x1d, 0x80, 0x94, 0x3c, 0xd1, 0x56, 0xac, 0x4d, 0x0b, 0xb7, 0x3c, 0x7d, 0x9d, 0xb8, 0x19, + 0x7d, 0xf5, 0xcb, 0x3b, 0x1b, 0x94, 0xf7, 0x47, 0x93, 0xee, 0xec, 0x70, 0xc3, 0x87, 0x1f, 0x4f, + 0x59, 0x7c, 0x86, 0xae, 0x29, 0xfc, 0x4e, 0x00, 0xbd, 0x0f, 0xa6, 0x9c, 0x59, 0xd9, 0xec, 0xd3, + 0xd9, 0x2a, 0xb4, 0xf0, 0x70, 0x93, 0xbb, 0x7c, 0xd5, 0x5f, 0x6c, 0xa1, 0x9f, 0x81, 0x63, 0x01, + 0x1b, 0xe4, 0x54, 0x90, 0x3c, 0x94, 0x29, 0x3a, 0xe2, 0x37, 0x45, 0x02, 0xdf, 0x95, 0x5e, 0xea, + 0xa6, 0xcc, 0x9a, 0x3b, 0x48, 0x08, 0xeb, 0x75, 0x6f, 0x61, 0x3a, 0x21, 0xfd, 0x49, 0x02, 0x4a, + 0x81, 0x06, 0xa2, 0x47, 0x61, 0x9c, 0x79, 0xe0, 0xc4, 0xc8, 0x44, 0x08, 0x95, 0x38, 0xef, 0x13, + 0x63, 0x40, 0xf3, 0x90, 0xc5, 0x3c, 0xba, 0xe6, 0x42, 0xb9, 0x33, 0x22, 0x08, 0xe7, 0xfc, 0x0e, + 0x1b, 0x5a, 0x84, 0x9c, 0x23, 0xfa, 0x88, 0x95, 0x9b, 0x33, 0x72, 0x1c, 0xc4, 0x65, 0x94, 0x16, + 0x20, 0xef, 0x69, 0x1e, 0xbb, 0x0b, 0xb8, 0xc7, 0x97, 0x5b, 0x2c, 0x80, 0xce, 0x76, 0x95, 0x3d, + 0xba, 0xd2, 0x42, 0xc7, 0x60, 0x82, 0xbc, 0x6c, 0xf3, 0xcb, 0x52, 0x29, 0x39, 0xd3, 0x55, 0xf6, + 0x2e, 0x28, 0x96, 0xf4, 0xb1, 0x04, 0x14, 0xfd, 0xed, 0x44, 0xf7, 0x02, 0x22, 0xb4, 0x4a, 0x1b, + 0x37, 0xf5, 0x7e, 0x97, 0xf9, 0x48, 0x81, 0x58, 0xea, 0x2a, 0x7b, 0xf3, 0x6d, 0x7c, 0xa9, 0xdf, + 0xa5, 0x55, 0x5b, 0x68, 0x15, 0xca, 0x82, 0x58, 0x24, 0xbb, 0xb8, 0x54, 0x8e, 0x0f, 0x7e, 0xd7, + 0x86, 0x13, 0xb0, 0xb5, 0xee, 0x27, 0xc9, 0x5a, 0xb7, 0xc8, 0xf0, 0xc4, 0x1b, 0xe9, 0x21, 0x28, + 0x05, 0x7a, 0x8c, 0x24, 0x98, 0xec, 0xf5, 0xb7, 0x9a, 0xbb, 0x78, 0x9f, 0xde, 0x7e, 0x67, 0xaa, + 0x9e, 0x93, 0xf3, 0xbd, 0xfe, 0xd6, 0xd3, 0x78, 0x9f, 0xe6, 0x0e, 0x25, 0x15, 0x8a, 0xfe, 0xc5, + 0x14, 0x71, 0x1c, 0xa6, 0xd1, 0xd7, 0x5b, 0xe2, 0xbb, 0x06, 0xf4, 0x01, 0x9d, 0x83, 0xf1, 0xab, + 0x06, 0xd3, 0xe6, 0x51, 0xab, 0xa7, 0x2b, 0x86, 0x8d, 0x3d, 0x4b, 0x32, 0xc6, 0x23, 0x59, 0x30, + 0x4e, 0xf5, 0x32, 0x74, 0xa3, 0xe2, 0x0a, 0x80, 0x62, 0xdb, 0xa6, 0xb6, 0xd5, 0x77, 0xe1, 0x2b, + 0x73, 0x83, 0x69, 0xfd, 0xb9, 0x35, 0x45, 0x33, 0x1b, 0xb7, 0x72, 0xcd, 0x9e, 0x71, 0x79, 0x3c, + 0xda, 0xed, 0x41, 0x92, 0x5e, 0x4f, 0x43, 0x86, 0x2d, 0x37, 0xd1, 0x13, 0xfe, 0xe4, 0x47, 0xfe, + 0xec, 0x89, 0x61, 0xcd, 0x67, 0x54, 0xbc, 0xf5, 0x4e, 0x04, 0x75, 0x57, 0x30, 0xa3, 0xd0, 0xc8, + 0xbf, 0x7a, 0x50, 0x9b, 0xa0, 0xd1, 0xc7, 0xf2, 0xa2, 0x9b, 0x5e, 0x18, 0xb6, 0xba, 0x16, 0xb9, + 0x8c, 0xf4, 0xa1, 0x73, 0x19, 0x17, 0x61, 0xd2, 0x13, 0x6e, 0x69, 0x2d, 0xbe, 0x4e, 0x39, 0x31, + 0x6a, 0xd2, 0x2d, 0x2f, 0xf2, 0xf6, 0xe7, 0x9d, 0x70, 0x6c, 0xb9, 0x85, 0x66, 0xfd, 0x8b, 0x6c, + 0x1a, 0xb5, 0xb1, 0x70, 0xc1, 0xb3, 0x6e, 0xa6, 0x57, 0xf2, 0x6f, 0x81, 0x1c, 0xbd, 0xd8, 0x4c, + 0x49, 0x58, 0xf4, 0x90, 0x25, 0x05, 0xf4, 0xe5, 0xdd, 0x50, 0x72, 0x03, 0x1b, 0x46, 0x92, 0x65, + 0x28, 0x6e, 0x31, 0x25, 0x7c, 0x00, 0x66, 0xe8, 0x87, 0xf2, 0x82, 0xd4, 0x39, 0x4a, 0x8d, 0xc8, + 0xbb, 0x2b, 0x7e, 0x8e, 0x3b, 0xa1, 0xe8, 0x9a, 0x50, 0x4a, 0x0b, 0x2c, 0xf5, 0xe1, 0x94, 0x52, + 0xb2, 0xe3, 0x90, 0x75, 0xc2, 0xce, 0x3c, 0xfb, 0x02, 0x9f, 0xc2, 0xa2, 0x4d, 0x27, 0x90, 0x35, + 0xb1, 0xd5, 0xef, 0xd8, 0x1c, 0xa4, 0x40, 0x69, 0x68, 0x20, 0x2b, 0xb3, 0x72, 0x4a, 0x7b, 0x0a, + 0x26, 0x85, 0x55, 0x61, 0x74, 0x93, 0x94, 0xae, 0x20, 0x0a, 0x29, 0xd1, 0x69, 0x28, 0xf7, 0x4c, + 0xa3, 0x67, 0x58, 0xd8, 0x6c, 0x2a, 0xad, 0x96, 0x89, 0x2d, 0xab, 0x52, 0x64, 0x78, 0xa2, 0x7c, + 0x9e, 0x15, 0x4b, 0xef, 0x82, 0x09, 0x11, 0x4f, 0xcf, 0xc0, 0x78, 0xc3, 0xb1, 0x90, 0x69, 0x99, + 0x3d, 0x10, 0xff, 0x3a, 0xdf, 0xeb, 0xf1, 0xec, 0x1a, 0xf9, 0x29, 0x75, 0x60, 0x82, 0x0f, 0x58, + 0x68, 0x4e, 0x65, 0x15, 0x0a, 0x3d, 0xc5, 0x24, 0xdd, 0xf0, 0x66, 0x56, 0x86, 0xad, 0x08, 0xd7, + 0x14, 0xd3, 0x5e, 0xc7, 0xb6, 0x2f, 0xc1, 0x92, 0xa7, 0xfc, 0xac, 0x48, 0x7a, 0x0c, 0x26, 0x7d, + 0x34, 0xee, 0xf7, 0x0a, 0xf9, 0x44, 0xa7, 0x0f, 0x4e, 0x4b, 0x92, 0x6e, 0x4b, 0xa4, 0x73, 0x90, + 0x73, 0xc6, 0x8a, 0x2c, 0x34, 0x84, 0x28, 0xf8, 0x07, 0x10, 0xf9, 0x23, 0x4d, 0x22, 0x19, 0xd7, + 0xf8, 0xa7, 0x9c, 0x52, 0x32, 0x7b, 0x90, 0xb0, 0xc7, 0x30, 0x31, 0x6f, 0x86, 0x1e, 0x87, 0x09, + 0x6e, 0x98, 0xf8, 0x7c, 0x1c, 0x96, 0x2e, 0x5a, 0xa3, 0x96, 0x4a, 0xa4, 0x8b, 0x98, 0xdd, 0x72, + 0xab, 0x49, 0x7a, 0xab, 0xf9, 0x00, 0x64, 0x85, 0xf1, 0xf1, 0x7b, 0x09, 0x56, 0xc3, 0xc9, 0x28, + 0x2f, 0xc1, 0x2b, 0x71, 0x19, 0x89, 0x36, 0x59, 0x5a, 0x5b, 0xc7, 0xad, 0xa6, 0x3b, 0x05, 0xf9, + 0x85, 0xd9, 0x12, 0x7b, 0xb1, 0x22, 0xe6, 0x97, 0xf4, 0x00, 0x64, 0x58, 0x5b, 0x43, 0x4d, 0x5c, + 0x98, 0x6b, 0xfd, 0x4e, 0x02, 0xb2, 0xc2, 0x7d, 0x84, 0x32, 0xf9, 0x3a, 0x91, 0xbc, 0xd1, 0x4e, + 0xdc, 0x7c, 0x93, 0x74, 0x1f, 0x20, 0xaa, 0x29, 0xcd, 0xab, 0x86, 0xad, 0xe9, 0xed, 0x26, 0x1b, + 0x0b, 0x7e, 0x6f, 0x90, 0xbe, 0xb9, 0x42, 0x5f, 0xac, 0x91, 0xf2, 0x7b, 0x4e, 0x41, 0xde, 0x93, + 0xe5, 0x42, 0x13, 0x90, 0xba, 0x84, 0xaf, 0x95, 0xc7, 0x50, 0x1e, 0x26, 0x64, 0x4c, 0x73, 0x04, + 0xe5, 0xc4, 0xd9, 0xd7, 0x27, 0xa0, 0x34, 0xdf, 0x58, 0x58, 0x9e, 0xef, 0xf5, 0x3a, 0x1a, 0xbf, + 0x4f, 0x77, 0x19, 0xd2, 0x74, 0x9d, 0x1c, 0x63, 0x7f, 0xa7, 0x1a, 0x27, 0xe1, 0x84, 0x64, 0x18, + 0xa7, 0xcb, 0x69, 0x14, 0x67, 0xdb, 0xa7, 0x1a, 0x2b, 0x0f, 0x45, 0x1a, 0x49, 0x15, 0x2e, 0xc6, + 0x6e, 0x50, 0x35, 0x4e, 0x72, 0x0a, 0xfd, 0x0c, 0xe4, 0xdc, 0x75, 0x72, 0xdc, 0x3d, 0xa2, 0x6a, + 0xec, 0xb4, 0x15, 0xc1, 0x77, 0x57, 0x06, 0x71, 0xb7, 0x26, 0xaa, 0xb1, 0xf3, 0x35, 0xe8, 0x39, + 0x98, 0x10, 0x6b, 0xb0, 0x78, 0xbb, 0x38, 0xd5, 0x98, 0x29, 0x25, 0x32, 0x7c, 0x6c, 0xe9, 0x1c, + 0x67, 0xab, 0xaa, 0x1a, 0x2b, 0x6f, 0x86, 0x36, 0x21, 0xc3, 0x83, 0xdf, 0x58, 0x3b, 0x3d, 0xd5, + 0x78, 0x89, 0x22, 0x22, 0x64, 0x37, 0x39, 0x11, 0x77, 0x7b, 0xae, 0x1a, 0x3b, 0x61, 0x88, 0x14, + 0x00, 0xcf, 0x7a, 0x3a, 0xf6, 0xbe, 0x5b, 0x35, 0x7e, 0x22, 0x10, 0xbd, 0x1f, 0xb2, 0xce, 0xaa, + 0x29, 0xe6, 0x4e, 0x5a, 0x35, 0x6e, 0x2e, 0xae, 0xb1, 0x19, 0xfb, 0x94, 0xc4, 0xbd, 0x91, 0xa7, + 0x24, 0xdc, 0x4d, 0x6e, 0x67, 0x1b, 0xfc, 0x2f, 0x13, 0x70, 0x3c, 0xb8, 0x9d, 0xac, 0xe8, 0xfb, + 0x43, 0x0e, 0x04, 0x0c, 0x39, 0x2d, 0xf2, 0x38, 0xa4, 0xe6, 0xf5, 0x7d, 0x12, 0x6c, 0xd0, 0x6f, + 0x00, 0xf6, 0xcd, 0x8e, 0x48, 0xd3, 0x91, 0xe7, 0x4d, 0xb3, 0x13, 0x7e, 0x6a, 0xa4, 0x9e, 0xfe, + 0xfe, 0xe7, 0x6a, 0x63, 0x8d, 0xdd, 0x90, 0x5e, 0x45, 0x9c, 0x15, 0xc8, 0xce, 0xeb, 0xfb, 0xe2, + 0x98, 0xc0, 0x38, 0xed, 0xd0, 0x61, 0xb7, 0xff, 0x5f, 0x2b, 0x10, 0x64, 0xcf, 0x77, 0x84, 0x79, + 0x8f, 0x33, 0xec, 0x69, 0xc8, 0x0e, 0x7f, 0xf4, 0x89, 0x81, 0xea, 0x70, 0x69, 0x4a, 0x17, 0x20, + 0xbd, 0x60, 0x68, 0x34, 0xe4, 0x69, 0x61, 0xdd, 0xe8, 0x8a, 0x9c, 0x27, 0x7d, 0x40, 0xa7, 0x20, + 0xa3, 0x74, 0x8d, 0xbe, 0x6e, 0x8b, 0xa8, 0x99, 0xb8, 0x92, 0xff, 0x7a, 0x50, 0x4b, 0x2d, 0xeb, + 0xb6, 0xcc, 0x5f, 0xd5, 0xd3, 0xdf, 0x7d, 0xa5, 0x96, 0x90, 0x9e, 0x82, 0x89, 0x45, 0xac, 0xde, + 0x08, 0xd6, 0x22, 0x56, 0x03, 0x58, 0xa7, 0x21, 0xbb, 0xac, 0xdb, 0xec, 0x9b, 0x61, 0xb7, 0x41, + 0x4a, 0xd3, 0xd9, 0xb6, 0x48, 0xa0, 0x7e, 0x52, 0x4e, 0x48, 0x17, 0xb1, 0xea, 0x90, 0xb6, 0xb0, + 0x1a, 0x24, 0x25, 0xf0, 0xa4, 0x5c, 0x6a, 0x40, 0xe1, 0x8a, 0xd2, 0xe1, 0xe1, 0x1e, 0xb6, 0xd0, + 0x7d, 0x90, 0x53, 0xc4, 0x03, 0x5d, 0x59, 0x15, 0x1a, 0xc5, 0x1f, 0x1c, 0xd4, 0xc0, 0x25, 0x92, + 0x5d, 0x82, 0x7a, 0xfa, 0xe5, 0xff, 0x76, 0x32, 0x21, 0x19, 0x30, 0x71, 0x41, 0xb1, 0xa8, 0xa5, + 0x7f, 0xd0, 0x97, 0x48, 0xa1, 0x91, 0x62, 0xe3, 0xc8, 0xf5, 0x83, 0xda, 0xd4, 0xbe, 0xd2, 0xed, + 0xd4, 0x25, 0xf7, 0x9d, 0xe4, 0xcd, 0xaf, 0xcc, 0x79, 0xf2, 0x2b, 0x34, 0x92, 0x6c, 0x4c, 0x5f, + 0x3f, 0xa8, 0x95, 0x5c, 0x1e, 0xf2, 0x46, 0x72, 0x92, 0x2e, 0x52, 0x0f, 0x32, 0x2c, 0xe8, 0x0d, + 0xdd, 0x21, 0xe4, 0x29, 0x9f, 0xa4, 0x9b, 0xf2, 0xa9, 0x1f, 0x2a, 0xcd, 0xc0, 0xe3, 0x32, 0xc6, + 0x51, 0x4f, 0x7f, 0xe4, 0x95, 0xda, 0x98, 0x64, 0x02, 0x5a, 0xd7, 0xba, 0xfd, 0x0e, 0xbb, 0xf8, + 0x2d, 0xb6, 0x9a, 0x1e, 0x64, 0xed, 0xa6, 0xe9, 0x24, 0x16, 0x90, 0x95, 0xe6, 0xb8, 0x92, 0x72, + 0x81, 0xb0, 0x38, 0xe3, 0x9b, 0x07, 0xb5, 0x04, 0x6d, 0x3d, 0x95, 0xd1, 0x5d, 0x90, 0x61, 0xa1, + 0x3c, 0x8f, 0x7f, 0x8a, 0x82, 0x87, 0xf5, 0x49, 0xe6, 0x6f, 0xa5, 0x27, 0x60, 0x62, 0xd5, 0x6a, + 0x2f, 0x92, 0x2e, 0x1d, 0x87, 0x6c, 0xd7, 0x6a, 0x37, 0x3d, 0xd1, 0xd4, 0x44, 0xd7, 0x6a, 0x6f, + 0x0c, 0x89, 0xc2, 0xf8, 0xb0, 0xbc, 0x1b, 0x32, 0x1b, 0x7b, 0x94, 0xfd, 0x94, 0x23, 0xa5, 0x94, + 0xb7, 0x8d, 0x1c, 0xdd, 0xc7, 0xf4, 0xc1, 0x14, 0xc0, 0xc6, 0x9e, 0xd3, 0xc3, 0x21, 0x5b, 0x70, + 0x48, 0x82, 0x8c, 0xbd, 0xe7, 0x44, 0xd4, 0xb9, 0x06, 0xbc, 0x7a, 0x50, 0xcb, 0x6c, 0xec, 0x91, + 0xe5, 0x85, 0xcc, 0xdf, 0xf8, 0x53, 0x59, 0xa9, 0x40, 0x2a, 0xcb, 0x49, 0xe0, 0xa5, 0x43, 0x12, + 0x78, 0xe3, 0x9e, 0x1d, 0x80, 0x63, 0x30, 0x61, 0x2a, 0xd7, 0x9a, 0x64, 0x44, 0xd9, 0xd7, 0x4a, + 0x33, 0xa6, 0x72, 0x6d, 0xc5, 0x68, 0xa3, 0x05, 0x48, 0x77, 0x8c, 0xb6, 0xc8, 0xbb, 0x1d, 0x15, + 0x9d, 0x22, 0x11, 0x17, 0x3f, 0x4d, 0xbc, 0x62, 0xb4, 0x1b, 0xc7, 0x88, 0xfc, 0xbf, 0xf8, 0x67, + 0xb5, 0x92, 0xbf, 0xdc, 0x92, 0x29, 0xb3, 0x93, 0x0c, 0xcc, 0x0e, 0x4d, 0x06, 0xe6, 0x46, 0x25, + 0x03, 0xc1, 0x9f, 0x0c, 0xbc, 0x83, 0xee, 0x69, 0xb2, 0x3d, 0x9c, 0x99, 0x81, 0xe0, 0x73, 0x5e, + 0xdf, 0xa7, 0xbb, 0xa8, 0xb7, 0x42, 0xce, 0x39, 0x28, 0xc4, 0x3f, 0x0f, 0xed, 0x16, 0x70, 0x7d, + 0xfb, 0x48, 0x02, 0x8a, 0xfe, 0x16, 0xd3, 0x7c, 0x8e, 0xd5, 0xe6, 0x1f, 0x56, 0x65, 0x69, 0x4f, + 0xa2, 0x14, 0xcb, 0x22, 0x53, 0x1e, 0xd0, 0xf9, 0xf9, 0x80, 0xce, 0x4f, 0x0b, 0x01, 0xb1, 0xbb, + 0x3b, 0x4c, 0xd5, 0x67, 0xb8, 0x74, 0x0a, 0x9e, 0x42, 0xcb, 0x55, 0x7d, 0xaa, 0x11, 0x3f, 0x0b, + 0x79, 0xcf, 0xdb, 0xd0, 0xa0, 0xfe, 0x91, 0x90, 0x64, 0xc7, 0x94, 0x33, 0x20, 0xe2, 0x8d, 0xd8, + 0x42, 0x70, 0x49, 0x1d, 0x45, 0xcd, 0x39, 0x44, 0x71, 0x8f, 0x57, 0x34, 0x16, 0xff, 0xf4, 0xdb, + 0x27, 0xc6, 0x5e, 0x7e, 0xf5, 0xc4, 0xd8, 0xd0, 0xf3, 0x99, 0x52, 0xf4, 0x97, 0xe8, 0x1d, 0x2f, + 0xf3, 0xd1, 0xf7, 0xc2, 0xad, 0x9c, 0xc6, 0xb2, 0x95, 0x5d, 0x4d, 0x6f, 0x8b, 0xbf, 0xdc, 0xdd, + 0x14, 0x79, 0x6f, 0x78, 0xe9, 0x8d, 0xbb, 0x9d, 0x37, 0x7b, 0x68, 0xac, 0x1a, 0xe6, 0x0d, 0xa5, + 0x83, 0x34, 0xa0, 0x55, 0xab, 0xbd, 0x60, 0x62, 0xf6, 0xb1, 0x11, 0xbe, 0x4e, 0xf2, 0x5f, 0xf6, + 0xe1, 0x36, 0xea, 0x96, 0x39, 0x7f, 0x5f, 0x9c, 0xef, 0x4b, 0xbb, 0x39, 0x22, 0xdf, 0x15, 0xa1, + 0x25, 0x00, 0x9a, 0x5e, 0xb1, 0x2c, 0x37, 0x99, 0x57, 0x0b, 0x62, 0x2c, 0x38, 0x14, 0xb2, 0x62, + 0x63, 0x4b, 0x8c, 0xb5, 0xcb, 0x88, 0x3e, 0x00, 0xd3, 0x5d, 0x4d, 0x6f, 0x5a, 0xb8, 0xb3, 0xdd, + 0x6c, 0xe1, 0x0e, 0xfd, 0x14, 0x0b, 0xdf, 0xb8, 0xcb, 0x35, 0x56, 0xb8, 0x63, 0xba, 0x2b, 0x7a, + 0xcc, 0xe6, 0x96, 0x75, 0xfb, 0xfa, 0x41, 0xad, 0xca, 0xbc, 0x43, 0x08, 0xa4, 0x24, 0x4f, 0x75, + 0x35, 0x7d, 0x1d, 0x77, 0xb6, 0x17, 0x9d, 0x32, 0xf4, 0x12, 0x4c, 0x71, 0x0a, 0xc3, 0x4d, 0x7a, + 0x10, 0xdb, 0x53, 0x68, 0xac, 0x5e, 0x3f, 0xa8, 0x55, 0x18, 0xda, 0x00, 0x89, 0xf4, 0x83, 0x83, + 0xda, 0xfd, 0x31, 0xda, 0x34, 0xaf, 0xaa, 0xc2, 0x3d, 0x96, 0x1d, 0x10, 0x5e, 0x42, 0xea, 0x76, + 0x13, 0xf4, 0xa2, 0xee, 0xf1, 0x60, 0xdd, 0x03, 0x24, 0x71, 0xeb, 0xf6, 0xb8, 0x66, 0x37, 0x83, + 0x2f, 0xea, 0x3e, 0x0a, 0x99, 0x5e, 0x7f, 0x4b, 0xec, 0xa2, 0xe5, 0x64, 0xfe, 0x84, 0x66, 0xbd, + 0x1b, 0x69, 0xf9, 0xb3, 0x05, 0x31, 0x9e, 0x24, 0x56, 0x71, 0xd2, 0x9c, 0x2c, 0xf6, 0xa3, 0xd1, + 0xc7, 0x57, 0x53, 0x50, 0x5e, 0xb5, 0xda, 0x4b, 0x2d, 0xcd, 0xbe, 0xc9, 0xea, 0xd5, 0x0b, 0x93, + 0x0e, 0xf5, 0x66, 0x8d, 0x85, 0xeb, 0x07, 0xb5, 0x22, 0x93, 0xce, 0xcd, 0x94, 0x49, 0x17, 0x4a, + 0xae, 0x5e, 0x36, 0x4d, 0xc5, 0xe6, 0xee, 0xa9, 0xb1, 0x18, 0x53, 0x03, 0x17, 0xb1, 0x7a, 0xfd, + 0xa0, 0x76, 0x94, 0xb5, 0x2c, 0x00, 0x25, 0xc9, 0x45, 0xd5, 0x37, 0x17, 0xd0, 0x5e, 0xb8, 0xe2, + 0xd3, 0xfd, 0xa7, 0xc6, 0xc5, 0xb7, 0x50, 0xe9, 0xf9, 0xd0, 0x7d, 0x25, 0x09, 0x79, 0xe2, 0xea, + 0x59, 0x39, 0x0e, 0x9f, 0x0a, 0x89, 0x1f, 0xe1, 0x54, 0x48, 0xbe, 0x3d, 0x53, 0xe1, 0x1e, 0x27, + 0xd6, 0x4e, 0x0d, 0xd5, 0x79, 0x7f, 0xc8, 0xfd, 0x1f, 0x53, 0xd4, 0xaa, 0xd2, 0x15, 0xa4, 0x8c, + 0x5b, 0xef, 0x04, 0x01, 0xfe, 0x7c, 0x02, 0x8e, 0xb8, 0xe2, 0xb1, 0x4c, 0x35, 0x20, 0xc5, 0x67, + 0xae, 0x1f, 0xd4, 0x6e, 0x0d, 0x4a, 0xd1, 0x43, 0x76, 0x03, 0x92, 0x9c, 0x76, 0x80, 0xd6, 0x4d, + 0x35, 0xbc, 0x1d, 0x2d, 0xcb, 0x76, 0xda, 0x91, 0x1a, 0xde, 0x0e, 0x0f, 0xd9, 0x9b, 0x6a, 0xc7, + 0xa2, 0x65, 0x0f, 0x0e, 0x6a, 0x3a, 0xe6, 0xa0, 0x7e, 0x2d, 0x09, 0x93, 0xab, 0x56, 0x7b, 0x53, + 0x6f, 0xfd, 0x64, 0x42, 0x1c, 0x76, 0x42, 0x7c, 0x2c, 0x01, 0xc5, 0x8b, 0x9a, 0x65, 0x1b, 0xa6, + 0xa6, 0x2a, 0x1d, 0xba, 0x9a, 0x71, 0xcf, 0x48, 0x26, 0x0e, 0x7f, 0x46, 0xf2, 0x11, 0xc8, 0x5c, + 0x55, 0x3a, 0xec, 0xdf, 0x1a, 0xa5, 0xe8, 0x1e, 0x61, 0xc0, 0x77, 0x04, 0x73, 0xc0, 0x9c, 0x9c, + 0x37, 0xe7, 0x77, 0x92, 0x50, 0x0a, 0x04, 0x1e, 0xa8, 0x01, 0x69, 0x6a, 0xd1, 0xd9, 0x82, 0x77, + 0xee, 0x10, 0x71, 0x05, 0x59, 0x13, 0x53, 0x5e, 0xf4, 0x53, 0x90, 0xed, 0x2a, 0x7b, 0xcc, 0x33, + 0xb0, 0xf5, 0xcd, 0xfc, 0xe1, 0x70, 0xdc, 0xd5, 0xab, 0xc0, 0x91, 0xe4, 0x89, 0xae, 0xb2, 0x47, + 0xfd, 0x41, 0x0f, 0x4a, 0xa4, 0x54, 0xdd, 0x51, 0xf4, 0x36, 0xf6, 0xba, 0x9f, 0x8b, 0x87, 0xae, + 0xe4, 0xa8, 0x5b, 0x89, 0x07, 0x4e, 0x92, 0x27, 0xbb, 0xca, 0xde, 0x02, 0x2d, 0x20, 0x35, 0xd6, + 0xb3, 0x9f, 0x7c, 0xa5, 0x36, 0x46, 0x25, 0xf6, 0xef, 0x13, 0x00, 0xae, 0xc4, 0xd0, 0x06, 0x94, + 0x03, 0xee, 0x4b, 0x9c, 0x31, 0x8a, 0x0c, 0xf0, 0xdc, 0x85, 0x6d, 0x49, 0x0d, 0x0c, 0xc1, 0xfb, + 0x21, 0xcf, 0x4e, 0x09, 0x34, 0x69, 0x32, 0x3e, 0x19, 0x99, 0x8c, 0x3f, 0x41, 0xb0, 0xae, 0x1f, + 0xd4, 0x10, 0xeb, 0x8e, 0x87, 0x59, 0xa2, 0x29, 0x7a, 0x60, 0x25, 0x84, 0xc1, 0xdf, 0x97, 0xbc, + 0x27, 0xb6, 0xa0, 0x67, 0xcf, 0x0c, 0x5d, 0xdb, 0xc5, 0xa6, 0xb3, 0x46, 0x66, 0x8f, 0xa8, 0x0a, + 0x59, 0xf6, 0x55, 0x41, 0x7b, 0x5f, 0xfc, 0x5b, 0x0b, 0xf1, 0x4c, 0xb8, 0xae, 0xe1, 0x2d, 0x4b, + 0x13, 0xa3, 0x20, 0x8b, 0x47, 0x74, 0x1e, 0xca, 0x16, 0x56, 0xfb, 0xa6, 0x66, 0xef, 0x37, 0x55, + 0x43, 0xb7, 0x15, 0xd5, 0xe6, 0x4e, 0xfb, 0x96, 0xeb, 0x07, 0xb5, 0x63, 0xac, 0xad, 0x41, 0x0a, + 0x49, 0x2e, 0x89, 0xa2, 0x05, 0x56, 0x42, 0x6a, 0x68, 0x61, 0x5b, 0xd1, 0x3a, 0x16, 0x5f, 0xd8, + 0x8a, 0x47, 0x4f, 0x5f, 0x7e, 0x7b, 0xc2, 0xbb, 0x19, 0x75, 0x0d, 0xca, 0x46, 0x0f, 0x9b, 0x21, + 0xf6, 0x68, 0xc5, 0xad, 0x39, 0x48, 0x71, 0x03, 0x26, 0xa1, 0x24, 0x30, 0x84, 0x45, 0x38, 0xef, + 0x3b, 0x73, 0xc6, 0xe2, 0xc6, 0x64, 0xb0, 0xcb, 0x41, 0x0a, 0xc9, 0x7b, 0xd0, 0x8c, 0x45, 0x97, + 0x47, 0x21, 0xf3, 0x82, 0xa2, 0x75, 0xc4, 0xa7, 0x56, 0x65, 0xfe, 0x84, 0x96, 0x21, 0x63, 0xd9, + 0x8a, 0xdd, 0x67, 0xa1, 0xf7, 0x78, 0xe3, 0x5d, 0x31, 0xdb, 0xdc, 0x30, 0xf4, 0xd6, 0x3a, 0x65, + 0x94, 0x39, 0x00, 0x3a, 0x0f, 0x19, 0xdb, 0xd8, 0xc5, 0x3a, 0x17, 0xea, 0xa1, 0x66, 0x3a, 0x4d, + 0xd4, 0x31, 0x6e, 0x64, 0x83, 0x6b, 0x94, 0x9b, 0xd6, 0x8e, 0x62, 0x62, 0x8b, 0x85, 0xca, 0x8d, + 0xe5, 0x43, 0x4f, 0xc7, 0x63, 0x41, 0x4f, 0xc1, 0xf0, 0x24, 0xb9, 0xe4, 0x14, 0xad, 0xd3, 0x92, + 0x60, 0xe4, 0x3c, 0x71, 0x43, 0x91, 0xf3, 0x79, 0x28, 0xf7, 0xf5, 0x2d, 0x43, 0xa7, 0x9f, 0x45, + 0xe4, 0x69, 0x9a, 0xec, 0xc9, 0xc4, 0x6c, 0xca, 0x3b, 0x5a, 0x41, 0x0a, 0x49, 0x2e, 0x39, 0x45, + 0xfc, 0xf4, 0x63, 0x0b, 0x8a, 0x2e, 0x15, 0x9d, 0xb2, 0xb9, 0xc8, 0x29, 0x7b, 0x3b, 0x9f, 0xb2, + 0x47, 0x82, 0xb5, 0xb8, 0xb3, 0x76, 0xd2, 0x29, 0x24, 0x6c, 0xe8, 0xbd, 0xbe, 0x65, 0x24, 0xf0, + 0x1a, 0x86, 0x5a, 0x99, 0xf8, 0x2b, 0xc8, 0xfc, 0xdb, 0xb2, 0x82, 0xac, 0x17, 0x3e, 0xf2, 0x4a, + 0x6d, 0xcc, 0x99, 0xb0, 0xbf, 0x90, 0x84, 0xcc, 0xe2, 0x15, 0x7a, 0x8d, 0xf2, 0xc7, 0x34, 0x7c, + 0xf0, 0x58, 0xaf, 0xf7, 0xc0, 0x04, 0x93, 0x85, 0x85, 0xce, 0xc2, 0x78, 0x8f, 0xfc, 0xe0, 0xb9, + 0xc6, 0xa3, 0x03, 0x2a, 0x4d, 0xe9, 0xc4, 0x0a, 0x93, 0x92, 0x4a, 0x9f, 0x4f, 0x01, 0x2c, 0x5e, + 0xb9, 0xb2, 0x61, 0x6a, 0xbd, 0x0e, 0xb6, 0x7f, 0x12, 0x5e, 0xbf, 0x73, 0xc2, 0x6b, 0xcf, 0x18, + 0x3f, 0x0d, 0x79, 0x77, 0x8c, 0x2c, 0xf4, 0x38, 0x64, 0x6d, 0xfe, 0x9b, 0x0f, 0x75, 0x75, 0x70, + 0xa8, 0x05, 0x39, 0x1f, 0x6e, 0x87, 0x43, 0xfa, 0x2f, 0x49, 0x80, 0xa8, 0xe4, 0xcc, 0x8f, 0x41, + 0x00, 0x7e, 0x1e, 0x32, 0xdc, 0xe3, 0xa4, 0x6e, 0x28, 0x5a, 0xe5, 0xdc, 0x9e, 0x51, 0xfa, 0x76, + 0x12, 0xa6, 0x37, 0x85, 0xd9, 0xfd, 0x89, 0x84, 0xd1, 0x45, 0x98, 0xc0, 0xba, 0x6d, 0x6a, 0x58, + 0xa4, 0xc1, 0x67, 0x83, 0x5a, 0x1a, 0x22, 0x2d, 0xfa, 0xef, 0x12, 0xc4, 0x69, 0x39, 0xce, 0xee, + 0x91, 0xf1, 0xc7, 0x53, 0x50, 0x19, 0xc6, 0x85, 0x16, 0xa0, 0xa4, 0x9a, 0x98, 0x16, 0x34, 0xbd, + 0x3b, 0x27, 0x8d, 0xaa, 0x27, 0x63, 0xe4, 0x27, 0x90, 0xe4, 0xa2, 0x28, 0xe1, 0x0e, 0xb9, 0x4d, + 0x13, 0x54, 0x64, 0xaa, 0x10, 0xaa, 0x98, 0x41, 0xb4, 0xc4, 0x3d, 0xb2, 0x9b, 0x96, 0xf2, 0x02, + 0x30, 0x97, 0x5c, 0x74, 0x4b, 0xa9, 0x4f, 0x7e, 0x11, 0x4a, 0x9a, 0xae, 0xd9, 0x9a, 0xd2, 0x69, + 0x6e, 0x29, 0x1d, 0x45, 0x57, 0x6f, 0x64, 0x29, 0xc2, 0xbc, 0x29, 0xaf, 0x36, 0x00, 0x27, 0xc9, + 0x45, 0x5e, 0xd2, 0x60, 0x05, 0x64, 0x44, 0x44, 0x55, 0xe9, 0x1b, 0x0a, 0xdc, 0x04, 0xbb, 0x67, + 0x44, 0x7e, 0x31, 0x05, 0x53, 0x4e, 0x7e, 0xe6, 0x27, 0x43, 0x11, 0x77, 0x28, 0x56, 0x01, 0x98, + 0x01, 0x21, 0x9e, 0xe3, 0x06, 0x46, 0x83, 0x98, 0xa0, 0x1c, 0x43, 0x58, 0xb4, 0x6c, 0xcf, 0x78, + 0xfc, 0x45, 0x0a, 0x0a, 0xde, 0xf1, 0xf8, 0x89, 0x4b, 0x7f, 0x07, 0x65, 0xcc, 0xe6, 0x5d, 0x93, + 0x98, 0xe6, 0xdf, 0x45, 0x09, 0x98, 0xc4, 0x81, 0xa9, 0x34, 0xdc, 0x16, 0xfe, 0x55, 0x12, 0x32, + 0xfc, 0x5c, 0xb6, 0x3a, 0xb0, 0x8a, 0x48, 0x44, 0x9d, 0xfb, 0x1e, 0xbd, 0x88, 0xf8, 0x64, 0xe8, + 0x22, 0xa2, 0xd8, 0x55, 0xf6, 0x9a, 0xbe, 0x5b, 0x4c, 0x89, 0xd9, 0xc9, 0xc6, 0x71, 0x17, 0xc5, + 0xff, 0x9e, 0xe5, 0x42, 0xdc, 0x33, 0xb9, 0xe8, 0x11, 0xc8, 0x13, 0x0a, 0xd7, 0x2b, 0x10, 0xf6, + 0xa3, 0x6e, 0xf2, 0xc1, 0xf3, 0x52, 0x92, 0xa1, 0xab, 0xec, 0x2d, 0xb1, 0x07, 0xb4, 0x02, 0x68, + 0xc7, 0x49, 0x7d, 0x35, 0x5d, 0x11, 0x12, 0xfe, 0xdb, 0xae, 0x1f, 0xd4, 0x8e, 0x33, 0xfe, 0x41, + 0x1a, 0x49, 0x9e, 0x72, 0x0b, 0x05, 0xda, 0x83, 0x00, 0xa4, 0x5f, 0x4d, 0x76, 0x26, 0x84, 0x2d, + 0x61, 0x3d, 0x07, 0x25, 0xdc, 0x77, 0x92, 0x9c, 0x23, 0x0f, 0x8b, 0xe4, 0xb7, 0x47, 0xf0, 0xbf, + 0x94, 0x00, 0xe4, 0xfa, 0x1e, 0x67, 0xbf, 0xfe, 0xbd, 0xf4, 0x5e, 0xa2, 0x58, 0x19, 0x25, 0xc2, + 0x17, 0x59, 0x2e, 0x9f, 0x58, 0x64, 0x79, 0xa6, 0xea, 0x7d, 0xae, 0x7d, 0x4e, 0x0e, 0xcd, 0x0a, + 0x86, 0xd8, 0xe0, 0x3f, 0x4c, 0xc0, 0xf1, 0x01, 0xc5, 0x71, 0xda, 0x75, 0x05, 0x90, 0xe9, 0x79, + 0xc9, 0xff, 0x43, 0x51, 0x82, 0xff, 0xc3, 0xbf, 0x98, 0xfa, 0x37, 0x65, 0x0e, 0xd8, 0xf8, 0x9b, + 0xe7, 0x4d, 0x78, 0x46, 0x31, 0x01, 0x33, 0xde, 0xea, 0x9d, 0x0e, 0x9c, 0x87, 0x82, 0xb7, 0x76, + 0xde, 0xf4, 0x5b, 0x47, 0x35, 0x9d, 0xb7, 0xda, 0xc7, 0x87, 0x96, 0xdd, 0xd9, 0x27, 0xfe, 0xe7, + 0x64, 0x54, 0xef, 0x9d, 0x83, 0x6c, 0x81, 0x59, 0xc8, 0x5a, 0xfc, 0xff, 0x12, 0x90, 0x5e, 0x33, + 0x8c, 0x0e, 0x32, 0x60, 0x4a, 0x37, 0xec, 0x26, 0x51, 0x16, 0xdc, 0x6a, 0xf2, 0xdc, 0x08, 0xcb, + 0x82, 0x2e, 0x1c, 0x4e, 0x28, 0xdf, 0x3b, 0xa8, 0x0d, 0x42, 0xc9, 0x25, 0xdd, 0xb0, 0x1b, 0xb4, + 0x64, 0x83, 0x65, 0x4e, 0x3e, 0x00, 0x93, 0xfe, 0xca, 0x58, 0xa6, 0xe8, 0xd9, 0x43, 0x57, 0xe6, + 0x87, 0xb9, 0x7e, 0x50, 0x9b, 0x71, 0x27, 0x81, 0x53, 0x2c, 0xc9, 0x85, 0x2d, 0x4f, 0xed, 0xf5, + 0x2c, 0xe9, 0xfd, 0xf7, 0x5f, 0xa9, 0x25, 0x1a, 0xe7, 0x87, 0x9e, 0x00, 0xb8, 0x6f, 0x64, 0x13, + 0xf6, 0x9c, 0xad, 0x7e, 0xff, 0x59, 0x80, 0xef, 0x9e, 0x81, 0x6a, 0xe0, 0x2c, 0x00, 0xbd, 0x87, + 0x3c, 0xe4, 0x24, 0xc0, 0xe8, 0x7f, 0xf4, 0x3f, 0xe4, 0xa0, 0xc0, 0xc8, 0xc3, 0x06, 0xd2, 0x2e, + 0x1c, 0xa5, 0x47, 0x39, 0x5d, 0xb3, 0x25, 0xbe, 0x12, 0x73, 0xd4, 0x49, 0xa0, 0x25, 0xf8, 0xff, + 0x15, 0x67, 0xd9, 0xb0, 0xc7, 0x00, 0xdc, 0x9a, 0x9d, 0x0b, 0x37, 0xbc, 0xa5, 0xac, 0xf5, 0xec, + 0x1f, 0xfe, 0x53, 0x18, 0xd9, 0x43, 0x2c, 0xfd, 0x7a, 0x02, 0x8e, 0x0d, 0xd4, 0xc6, 0xb5, 0xfe, + 0x49, 0xdf, 0x85, 0xd1, 0x44, 0xbc, 0x1c, 0xbd, 0xf7, 0xcb, 0x0f, 0xf5, 0x90, 0x76, 0x55, 0xc3, + 0xda, 0xc5, 0x2a, 0xf4, 0x35, 0xec, 0x45, 0x38, 0xe2, 0x6f, 0x97, 0x10, 0xc2, 0x73, 0x50, 0xf4, + 0xaf, 0x16, 0x78, 0x28, 0xf1, 0xae, 0xc3, 0x7b, 0xc8, 0x49, 0xdf, 0x8a, 0x41, 0x7a, 0x36, 0x28, + 0x78, 0x47, 0x12, 0xef, 0x19, 0x3c, 0x7c, 0x1f, 0x29, 0x08, 0xcf, 0xdd, 0xac, 0xaf, 0x24, 0xe0, + 0xa4, 0x1f, 0xd9, 0x35, 0xc2, 0xd6, 0x5b, 0xde, 0xaf, 0x37, 0xa3, 0x1e, 0xff, 0x29, 0x01, 0xb7, + 0x8f, 0x68, 0x39, 0x17, 0x8f, 0x09, 0x33, 0x1e, 0xeb, 0x6e, 0xf2, 0x62, 0xa1, 0x32, 0xd2, 0x70, + 0x0f, 0xe4, 0x18, 0xb7, 0x5b, 0xf8, 0x51, 0xa4, 0xe9, 0xc1, 0x77, 0x96, 0x3c, 0x3d, 0x68, 0x91, + 0xdf, 0x9c, 0x6e, 0x7d, 0x3d, 0x01, 0xa7, 0xfd, 0xbd, 0x0a, 0x59, 0xd1, 0xbd, 0xb3, 0x07, 0xe6, + 0xdf, 0x24, 0xe0, 0x9e, 0x38, 0x5d, 0xe0, 0x23, 0xf4, 0x3c, 0x4c, 0xbb, 0xf1, 0x55, 0x70, 0x80, + 0x4e, 0xc5, 0x58, 0x15, 0x73, 0xa5, 0x46, 0x0e, 0xca, 0xcd, 0x19, 0x89, 0x3f, 0x4e, 0xf0, 0x39, + 0xe7, 0x1d, 0x77, 0x47, 0xec, 0xfe, 0x25, 0xc1, 0x21, 0xc5, 0xee, 0x59, 0x16, 0x4c, 0xfa, 0x96, + 0x05, 0x21, 0x03, 0x9a, 0xbc, 0x49, 0x16, 0xe4, 0x43, 0xc2, 0x9a, 0x86, 0x04, 0x67, 0xbb, 0x30, + 0x1d, 0x32, 0x49, 0x9c, 0x1b, 0xa7, 0xd1, 0x73, 0xe4, 0xe8, 0x0f, 0x0e, 0x6a, 0x21, 0x51, 0x9f, + 0x8c, 0x06, 0xa7, 0x87, 0xf4, 0x9f, 0x13, 0x50, 0xa3, 0x0d, 0x09, 0x19, 0xca, 0xbf, 0xc9, 0x02, + 0xc6, 0xdc, 0x90, 0x86, 0x76, 0x8b, 0x0b, 0x7a, 0x1e, 0x32, 0x4c, 0x4b, 0xb9, 0x6c, 0x0f, 0xa1, + 0xde, 0x9c, 0xd1, 0x35, 0xd8, 0x8b, 0xa2, 0x5f, 0xe1, 0x76, 0xe1, 0x2d, 0x92, 0xdf, 0x9b, 0xb0, + 0x0b, 0xff, 0x4a, 0x18, 0xec, 0xf0, 0x96, 0x73, 0x11, 0xbd, 0xff, 0x4d, 0x1b, 0x6c, 0xfe, 0x25, + 0xa1, 0xb7, 0xcc, 0x32, 0x3b, 0xcd, 0x8f, 0xb0, 0xcc, 0xef, 0xbc, 0x11, 0x70, 0x2c, 0x73, 0x44, + 0x17, 0xde, 0xe1, 0x96, 0xf9, 0x7a, 0x12, 0x8e, 0xd3, 0x6e, 0x78, 0x57, 0x24, 0x6f, 0x83, 0xe4, + 0x9b, 0x80, 0x2c, 0x53, 0x6d, 0xde, 0x2c, 0xfb, 0x51, 0xb6, 0x4c, 0xf5, 0x8a, 0xcf, 0xe9, 0x36, + 0x01, 0xb5, 0x2c, 0x3b, 0x58, 0x41, 0xea, 0x86, 0x2b, 0x68, 0x59, 0xf6, 0x95, 0x11, 0x5e, 0x3d, + 0x7d, 0x18, 0xdd, 0xf9, 0x83, 0x04, 0x54, 0xc3, 0x84, 0xce, 0x75, 0x45, 0x81, 0xa3, 0xbe, 0x75, + 0x74, 0x50, 0x5d, 0xee, 0x18, 0xb5, 0x9a, 0x0c, 0x4c, 0xdd, 0x23, 0x26, 0xbe, 0xd9, 0x93, 0xf7, + 0xcb, 0xc2, 0xe9, 0x38, 0x9a, 0x3f, 0xb8, 0x84, 0x79, 0x47, 0x4e, 0xd9, 0xdf, 0x1c, 0x30, 0xf7, + 0xef, 0xb4, 0xd5, 0xd0, 0x9f, 0x24, 0xe0, 0xc4, 0x90, 0x16, 0xfe, 0x4d, 0x76, 0xe7, 0x3f, 0x3b, + 0x54, 0x61, 0x6e, 0xd6, 0xd2, 0xeb, 0x41, 0x3e, 0xa1, 0xfc, 0xe7, 0xd6, 0x3c, 0x0b, 0xea, 0xd0, + 0x6f, 0xcc, 0x3d, 0x03, 0xb7, 0x84, 0x72, 0xf1, 0x36, 0x9d, 0x85, 0xf4, 0x8e, 0x66, 0xd9, 0xce, + 0x87, 0x17, 0x02, 0xcd, 0x09, 0x70, 0x51, 0x5a, 0x09, 0x41, 0x99, 0x42, 0xae, 0x19, 0x46, 0x87, + 0x57, 0x2f, 0x2d, 0xc0, 0x94, 0xa7, 0x8c, 0x83, 0xcf, 0x41, 0xba, 0x67, 0x18, 0x1d, 0x0e, 0x3e, + 0x13, 0x04, 0x27, 0xb4, 0xbc, 0x9b, 0x94, 0x4e, 0x9a, 0x01, 0xc4, 0x40, 0xd8, 0x27, 0x41, 0x38, + 0xf4, 0x87, 0x13, 0x30, 0xed, 0x2b, 0x76, 0x2e, 0x2d, 0x65, 0x7c, 0x5f, 0x93, 0x1a, 0xd8, 0xa2, + 0x67, 0xf4, 0xce, 0xf5, 0x74, 0x96, 0xdd, 0x7d, 0x13, 0xaa, 0x7b, 0xf6, 0x8f, 0x0a, 0xe2, 0x96, + 0x6b, 0x13, 0xc0, 0x93, 0x8a, 0xbd, 0x2b, 0x58, 0x73, 0x78, 0xd2, 0xa3, 0x7a, 0x77, 0x24, 0x1d, + 0x8f, 0x79, 0xc7, 0xd0, 0x4f, 0x79, 0x8f, 0x51, 0xdd, 0x39, 0x9a, 0x4f, 0xc0, 0xdf, 0x15, 0x45, + 0xe6, 0xa0, 0xff, 0x2d, 0x98, 0x09, 0x5b, 0x05, 0xa3, 0x07, 0x46, 0x23, 0x0c, 0xc6, 0x2d, 0xd5, + 0x77, 0x1d, 0x82, 0xc3, 0xa9, 0xfe, 0x93, 0x09, 0xb8, 0x6d, 0xe4, 0x62, 0x0f, 0x3d, 0x36, 0x1a, + 0x76, 0x44, 0x24, 0x55, 0xad, 0xdf, 0x08, 0xab, 0xd3, 0xb4, 0xa6, 0x6f, 0x3f, 0x3f, 0x5c, 0xa2, + 0x03, 0xeb, 0x8f, 0x21, 0x03, 0x3b, 0x18, 0x6b, 0x4a, 0x63, 0xe8, 0xa5, 0xf0, 0x7d, 0xed, 0x33, + 0xa1, 0x08, 0xc3, 0x97, 0x3c, 0xd5, 0x07, 0xe2, 0x33, 0x78, 0x87, 0x3d, 0x2c, 0x96, 0x1e, 0x32, + 0xec, 0x23, 0x16, 0x0c, 0x43, 0x86, 0x7d, 0x54, 0xa0, 0xce, 0x87, 0x7d, 0x64, 0x24, 0x39, 0x64, + 0xd8, 0xe3, 0x04, 0xd0, 0x43, 0x86, 0x3d, 0x56, 0xe0, 0x2a, 0x8d, 0xa1, 0x1d, 0x98, 0xf4, 0xc5, + 0x29, 0xe8, 0x74, 0x28, 0x5c, 0x58, 0x00, 0x59, 0xbd, 0x27, 0x0e, 0xa9, 0x77, 0xfc, 0x43, 0x5c, + 0xf3, 0x90, 0xf1, 0x1f, 0x1e, 0x7d, 0x54, 0x1f, 0x88, 0xcf, 0xe0, 0xd4, 0x7d, 0xcd, 0xd9, 0x6a, + 0xf1, 0x10, 0xa0, 0xb9, 0x98, 0x48, 0xa2, 0xe6, 0x33, 0xb1, 0xe9, 0x9d, 0x8a, 0x77, 0x07, 0x4e, + 0x5b, 0x87, 0x0b, 0x2d, 0xd4, 0xb5, 0x55, 0xef, 0x8d, 0x45, 0xeb, 0x54, 0xb6, 0xca, 0xf7, 0x11, + 0x4e, 0x86, 0xb2, 0x79, 0x9c, 0x56, 0xf5, 0xf6, 0x11, 0x14, 0x0e, 0xdc, 0xba, 0xb3, 0x31, 0x28, + 0x85, 0x93, 0x7b, 0x9d, 0x55, 0xf5, 0xd4, 0x48, 0x1a, 0x01, 0x7a, 0xd3, 0x53, 0xfd, 0x5f, 0xca, + 0x0e, 0x5c, 0xfb, 0x6b, 0x63, 0x1d, 0x5b, 0x9a, 0x75, 0xa8, 0x6b, 0x7f, 0xa3, 0xb3, 0xf9, 0x1f, + 0xca, 0x40, 0xe1, 0x02, 0x43, 0xa5, 0xdf, 0x3a, 0x46, 0x4f, 0xc4, 0xf4, 0xc0, 0x45, 0xe2, 0x81, + 0x7f, 0x70, 0x50, 0xe3, 0x82, 0x74, 0x7c, 0xb1, 0xc5, 0x3f, 0x7a, 0xc4, 0x3e, 0x58, 0xe2, 0x7e, + 0x35, 0xa6, 0x70, 0xa8, 0x23, 0xab, 0xec, 0xac, 0x00, 0x3f, 0x25, 0x1a, 0xc4, 0x93, 0xd8, 0xf7, + 0x93, 0x36, 0x48, 0x09, 0xfd, 0xe4, 0x09, 0xfa, 0x95, 0x04, 0x1c, 0xa1, 0x54, 0x6e, 0x20, 0x48, + 0x29, 0xc5, 0xc1, 0x9a, 0x81, 0x51, 0x5e, 0x51, 0x3c, 0xcb, 0x22, 0x8a, 0xd1, 0xa8, 0xf3, 0xfd, + 0xde, 0x5b, 0x3d, 0x95, 0x06, 0xe1, 0xa4, 0x1f, 0x1c, 0xd4, 0xd0, 0x20, 0xaf, 0x4c, 0x3f, 0xd0, + 0xe9, 0x2f, 0x0b, 0xff, 0x4c, 0xf5, 0x88, 0xd8, 0x70, 0x8a, 0x0b, 0xd4, 0x8d, 0x11, 0x7c, 0xe1, + 0xf9, 0x1a, 0xe4, 0x3d, 0xc6, 0xa7, 0x32, 0x3e, 0xe4, 0x58, 0x9b, 0xbb, 0xee, 0x46, 0x1c, 0xcf, + 0xe3, 0xfb, 0x64, 0x2f, 0x04, 0xfa, 0xb5, 0x04, 0x1c, 0x71, 0xd7, 0xf6, 0x5e, 0xf0, 0x4c, 0xfc, + 0xd5, 0xfd, 0x39, 0xbf, 0xd4, 0x42, 0xf1, 0x88, 0xd4, 0xc2, 0x1c, 0xa4, 0x3c, 0xd3, 0x0f, 0x73, + 0x18, 0xcf, 0xc1, 0xa4, 0x77, 0xf1, 0xe7, 0x7e, 0xbc, 0x70, 0xd4, 0x76, 0xe6, 0x0c, 0xef, 0xad, + 0xef, 0x68, 0x87, 0xec, 0x07, 0x42, 0x55, 0xc8, 0xe2, 0xbd, 0x9e, 0x61, 0xda, 0xb8, 0x45, 0xcf, + 0x22, 0x67, 0x65, 0xe7, 0x59, 0xba, 0x06, 0x21, 0x03, 0x8b, 0x9e, 0x0e, 0x7c, 0x79, 0xe9, 0x46, + 0x16, 0x15, 0x83, 0x1f, 0x6b, 0xf2, 0x7e, 0x45, 0xe9, 0x66, 0x9b, 0x8d, 0xff, 0x1f, 0x00, 0x00, + 0xff, 0xff, 0x4c, 0x9f, 0xbf, 0xb3, 0xdf, 0x9b, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r)