diff --git a/c-deps/libroach/protos/kv/kvserver/concurrency/lock/locking.pb.cc b/c-deps/libroach/protos/kv/kvserver/concurrency/lock/locking.pb.cc index afb8cbc1a00b..e2f8e2620626 100644 --- a/c-deps/libroach/protos/kv/kvserver/concurrency/lock/locking.pb.cc +++ b/c-deps/libroach/protos/kv/kvserver/concurrency/lock/locking.pb.cc @@ -57,6 +57,16 @@ bool Durability_IsValid(int value) { } } +bool WaitPolicy_IsValid(int value) { + switch (value) { + case 0: + case 1: + return true; + default: + return false; + } +} + // @@protoc_insertion_point(namespace_scope) } // namespace lock diff --git a/c-deps/libroach/protos/kv/kvserver/concurrency/lock/locking.pb.h b/c-deps/libroach/protos/kv/kvserver/concurrency/lock/locking.pb.h index 1a1adfdc7eec..a94cf2ad93a5 100644 --- a/c-deps/libroach/protos/kv/kvserver/concurrency/lock/locking.pb.h +++ b/c-deps/libroach/protos/kv/kvserver/concurrency/lock/locking.pb.h @@ -83,6 +83,17 @@ const Durability Durability_MIN = Replicated; const Durability Durability_MAX = Unreplicated; const int Durability_ARRAYSIZE = Durability_MAX + 1; +enum WaitPolicy { + Block = 0, + Error = 1, + WaitPolicy_INT_MIN_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32min, + WaitPolicy_INT_MAX_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32max +}; +bool WaitPolicy_IsValid(int value); +const WaitPolicy WaitPolicy_MIN = Block; +const WaitPolicy WaitPolicy_MAX = Error; +const int WaitPolicy_ARRAYSIZE = WaitPolicy_MAX + 1; + // =================================================================== @@ -112,6 +123,7 @@ namespace protobuf { template <> struct is_proto_enum< ::cockroach::kv::kvserver::concurrency::lock::Strength> : ::std::true_type {}; template <> struct is_proto_enum< ::cockroach::kv::kvserver::concurrency::lock::Durability> : ::std::true_type {}; +template <> struct is_proto_enum< ::cockroach::kv::kvserver::concurrency::lock::WaitPolicy> : ::std::true_type {}; } // namespace protobuf } // namespace google diff --git a/c-deps/libroach/protos/roachpb/api.pb.cc b/c-deps/libroach/protos/roachpb/api.pb.cc index 0dac9b6d6f2e..2e59904ae0a5 100644 --- a/c-deps/libroach/protos/roachpb/api.pb.cc +++ b/c-deps/libroach/protos/roachpb/api.pb.cc @@ -35649,6 +35649,7 @@ const int Header::kRangeIdFieldNumber; const int Header::kUserPriorityFieldNumber; const int Header::kTxnFieldNumber; const int Header::kReadConsistencyFieldNumber; +const int Header::kWaitPolicyFieldNumber; const int Header::kMaxSpanRequestKeysFieldNumber; const int Header::kTargetBytesFieldNumber; const int Header::kDistinctSpansFieldNumber; @@ -35691,15 +35692,15 @@ Header::Header(const Header& from) client_range_info_ = NULL; } ::memcpy(&range_id_, &from.range_id_, - static_cast(reinterpret_cast(&can_forward_read_timestamp_) - - reinterpret_cast(&range_id_)) + sizeof(can_forward_read_timestamp_)); + static_cast(reinterpret_cast(&target_bytes_) - + reinterpret_cast(&range_id_)) + sizeof(target_bytes_)); // @@protoc_insertion_point(copy_constructor:cockroach.roachpb.Header) } void Header::SharedCtor() { ::memset(×tamp_, 0, static_cast( - reinterpret_cast(&can_forward_read_timestamp_) - - reinterpret_cast(×tamp_)) + sizeof(can_forward_read_timestamp_)); + reinterpret_cast(&target_bytes_) - + reinterpret_cast(×tamp_)) + sizeof(target_bytes_)); } Header::~Header() { @@ -35746,8 +35747,8 @@ void Header::Clear() { } client_range_info_ = NULL; ::memset(&range_id_, 0, static_cast( - reinterpret_cast(&can_forward_read_timestamp_) - - reinterpret_cast(&range_id_)) + sizeof(can_forward_read_timestamp_)); + reinterpret_cast(&target_bytes_) - + reinterpret_cast(&range_id_)) + sizeof(target_bytes_)); _internal_metadata_.Clear(); } @@ -35951,6 +35952,21 @@ bool Header::MergePartialFromCodedStream( break; } + // .cockroach.kv.kvserver.concurrency.lock.WaitPolicy wait_policy = 18; + case 18: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(144u /* 144 & 0xFF */)) { + int value; + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>( + input, &value))); + set_wait_policy(static_cast< ::cockroach::kv::kvserver::concurrency::lock::WaitPolicy >(value)); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -36047,6 +36063,12 @@ void Header::SerializeWithCachedSizes( 17, this->_internal_client_range_info(), output); } + // .cockroach.kv.kvserver.concurrency.lock.WaitPolicy wait_policy = 18; + if (this->wait_policy() != 0) { + ::google::protobuf::internal::WireFormatLite::WriteEnum( + 18, this->wait_policy(), output); + } + output->WriteRaw((::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()).data(), static_cast((::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()).size())); // @@protoc_insertion_point(serialize_end:cockroach.roachpb.Header) @@ -36113,13 +36135,6 @@ size_t Header::ByteSizeLong() const { this->gateway_node_id()); } - // int64 target_bytes = 15; - if (this->target_bytes() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int64Size( - this->target_bytes()); - } - // bool distinct_spans = 9; if (this->distinct_spans() != 0) { total_size += 1 + 1; @@ -36140,6 +36155,19 @@ size_t Header::ByteSizeLong() const { total_size += 2 + 1; } + // .cockroach.kv.kvserver.concurrency.lock.WaitPolicy wait_policy = 18; + if (this->wait_policy() != 0) { + total_size += 2 + + ::google::protobuf::internal::WireFormatLite::EnumSize(this->wait_policy()); + } + + // int64 target_bytes = 15; + if (this->target_bytes() != 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::Int64Size( + this->target_bytes()); + } + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); SetCachedSize(cached_size); return total_size; @@ -36184,9 +36212,6 @@ void Header::MergeFrom(const Header& from) { if (from.gateway_node_id() != 0) { set_gateway_node_id(from.gateway_node_id()); } - if (from.target_bytes() != 0) { - set_target_bytes(from.target_bytes()); - } if (from.distinct_spans() != 0) { set_distinct_spans(from.distinct_spans()); } @@ -36199,6 +36224,12 @@ void Header::MergeFrom(const Header& from) { if (from.can_forward_read_timestamp() != 0) { set_can_forward_read_timestamp(from.can_forward_read_timestamp()); } + if (from.wait_policy() != 0) { + set_wait_policy(from.wait_policy()); + } + if (from.target_bytes() != 0) { + set_target_bytes(from.target_bytes()); + } } void Header::CopyFrom(const Header& from) { @@ -36227,11 +36258,12 @@ void Header::InternalSwap(Header* other) { swap(max_span_request_keys_, other->max_span_request_keys_); swap(read_consistency_, other->read_consistency_); swap(gateway_node_id_, other->gateway_node_id_); - swap(target_bytes_, other->target_bytes_); swap(distinct_spans_, other->distinct_spans_); swap(return_range_info_, other->return_range_info_); swap(async_consensus_, other->async_consensus_); swap(can_forward_read_timestamp_, other->can_forward_read_timestamp_); + swap(wait_policy_, other->wait_policy_); + swap(target_bytes_, other->target_bytes_); _internal_metadata_.Swap(&other->_internal_metadata_); } diff --git a/c-deps/libroach/protos/roachpb/api.pb.h b/c-deps/libroach/protos/roachpb/api.pb.h index 86368dd4a787..6a8f4fb8939d 100644 --- a/c-deps/libroach/protos/roachpb/api.pb.h +++ b/c-deps/libroach/protos/roachpb/api.pb.h @@ -15855,12 +15855,6 @@ class Header : public ::google::protobuf::MessageLite /* @@protoc_insertion_poin ::google::protobuf::int32 gateway_node_id() const; void set_gateway_node_id(::google::protobuf::int32 value); - // int64 target_bytes = 15; - void clear_target_bytes(); - static const int kTargetBytesFieldNumber = 15; - ::google::protobuf::int64 target_bytes() const; - void set_target_bytes(::google::protobuf::int64 value); - // bool distinct_spans = 9; void clear_distinct_spans(); static const int kDistinctSpansFieldNumber = 9; @@ -15885,6 +15879,18 @@ class Header : public ::google::protobuf::MessageLite /* @@protoc_insertion_poin bool can_forward_read_timestamp() const; void set_can_forward_read_timestamp(bool value); + // .cockroach.kv.kvserver.concurrency.lock.WaitPolicy wait_policy = 18; + void clear_wait_policy(); + static const int kWaitPolicyFieldNumber = 18; + ::cockroach::kv::kvserver::concurrency::lock::WaitPolicy wait_policy() const; + void set_wait_policy(::cockroach::kv::kvserver::concurrency::lock::WaitPolicy value); + + // int64 target_bytes = 15; + void clear_target_bytes(); + static const int kTargetBytesFieldNumber = 15; + ::google::protobuf::int64 target_bytes() const; + void set_target_bytes(::google::protobuf::int64 value); + // @@protoc_insertion_point(class_scope:cockroach.roachpb.Header) private: @@ -15898,11 +15904,12 @@ class Header : public ::google::protobuf::MessageLite /* @@protoc_insertion_poin ::google::protobuf::int64 max_span_request_keys_; int read_consistency_; ::google::protobuf::int32 gateway_node_id_; - ::google::protobuf::int64 target_bytes_; bool distinct_spans_; bool return_range_info_; bool async_consensus_; bool can_forward_read_timestamp_; + int wait_policy_; + ::google::protobuf::int64 target_bytes_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::protobuf_roachpb_2fapi_2eproto::TableStruct; }; @@ -34371,6 +34378,20 @@ inline void Header::set_read_consistency(::cockroach::roachpb::ReadConsistencyTy // @@protoc_insertion_point(field_set:cockroach.roachpb.Header.read_consistency) } +// .cockroach.kv.kvserver.concurrency.lock.WaitPolicy wait_policy = 18; +inline void Header::clear_wait_policy() { + wait_policy_ = 0; +} +inline ::cockroach::kv::kvserver::concurrency::lock::WaitPolicy Header::wait_policy() const { + // @@protoc_insertion_point(field_get:cockroach.roachpb.Header.wait_policy) + return static_cast< ::cockroach::kv::kvserver::concurrency::lock::WaitPolicy >(wait_policy_); +} +inline void Header::set_wait_policy(::cockroach::kv::kvserver::concurrency::lock::WaitPolicy value) { + + wait_policy_ = value; + // @@protoc_insertion_point(field_set:cockroach.roachpb.Header.wait_policy) +} + // int64 max_span_request_keys = 8; inline void Header::clear_max_span_request_keys() { max_span_request_keys_ = GOOGLE_LONGLONG(0); diff --git a/pkg/kv/kvclient/kvcoord/txn_test.go b/pkg/kv/kvclient/kvcoord/txn_test.go index 46177de8833b..1291f6e40b72 100644 --- a/pkg/kv/kvclient/kvcoord/txn_test.go +++ b/pkg/kv/kvclient/kvcoord/txn_test.go @@ -20,6 +20,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/keys" "github.com/cockroachdb/cockroach/pkg/kv" "github.com/cockroachdb/cockroach/pkg/kv/kvserver" + "github.com/cockroachdb/cockroach/pkg/kv/kvserver/concurrency/lock" "github.com/cockroachdb/cockroach/pkg/kv/kvserver/tscache" "github.com/cockroachdb/cockroach/pkg/roachpb" "github.com/cockroachdb/cockroach/pkg/storage/enginepb" @@ -722,3 +723,49 @@ func TestTxnContinueAfterCputError(t *testing.T) { require.NoError(t, txn.Put(ctx, "a", "b'")) require.NoError(t, txn.Commit(ctx)) } + +func TestTxnWaitPolicies(t *testing.T) { + defer leaktest.AfterTest(t)() + defer log.Scope(t).Close(t) + ctx := context.Background() + s := createTestDB(t) + defer s.Stop() + + key := []byte("b") + txn := s.DB.NewTxn(ctx, "test txn") + require.NoError(t, txn.Put(ctx, key, "new value")) + + // Block wait policy. + blockC := make(chan error) + go func() { + var b kv.Batch + b.Header.WaitPolicy = lock.WaitPolicy_Block + b.Get(key) + blockC <- s.DB.Run(ctx, &b) + }() + + // Should block. + select { + case err := <-blockC: + t.Fatalf("blocking wait policy unexpected returned with err=%v", err) + case <-time.After(10 * time.Millisecond): + } + + // Error wait policy. + errorC := make(chan error) + go func() { + var b kv.Batch + b.Header.WaitPolicy = lock.WaitPolicy_Error + b.Get(key) + errorC <- s.DB.Run(ctx, &b) + }() + + // Should return error immediately, without blocking. + err := <-errorC + require.NotNil(t, err) + require.IsType(t, &roachpb.WriteIntentError{}, err) + + // Let blocked requests proceed. + require.NoError(t, txn.Commit(ctx)) + require.NoError(t, <-blockC) +} diff --git a/pkg/kv/kvserver/concurrency/concurrency_control.go b/pkg/kv/kvserver/concurrency/concurrency_control.go index cc6b16fa55ba..de7e90222cd8 100644 --- a/pkg/kv/kvserver/concurrency/concurrency_control.go +++ b/pkg/kv/kvserver/concurrency/concurrency_control.go @@ -326,6 +326,11 @@ type Request struct { // The consistency level of the request. Only set if Txn is nil. ReadConsistency roachpb.ReadConsistencyType + // The wait policy of the request. Signifies how the request should + // behave if it encounters conflicting locks held by other active + // transactions. + WaitPolicy lock.WaitPolicy + // The individual requests in the batch. Requests []roachpb.RequestUnion diff --git a/pkg/kv/kvserver/concurrency/concurrency_manager_test.go b/pkg/kv/kvserver/concurrency/concurrency_manager_test.go index a5a4b90808e0..c7fe4a1735c7 100644 --- a/pkg/kv/kvserver/concurrency/concurrency_manager_test.go +++ b/pkg/kv/kvserver/concurrency/concurrency_manager_test.go @@ -53,7 +53,7 @@ import ( // The input files use the following DSL: // // new-txn name= ts=[,] epoch= [maxts=[,]] -// new-request name= txn=|none ts=[,] [priority] [consistency] +// new-request name= txn=|none ts=[,] [priority] [inconsistent] [wait-policy=] // [=...] (hint: see scanSingleRequest) // sequence req= // finish req= @@ -149,6 +149,8 @@ func TestConcurrencyManagerBasic(t *testing.T) { readConsistency = roachpb.INCONSISTENT } + waitPolicy := scanWaitPolicy(t, d, false /* required */) + // Each roachpb.Request is provided on an indented line. var reqs []roachpb.Request singleReqLines := strings.Split(d.Input, "\n") @@ -167,6 +169,7 @@ func TestConcurrencyManagerBasic(t *testing.T) { Timestamp: ts, // TODO(nvanbenschoten): test Priority ReadConsistency: readConsistency, + WaitPolicy: waitPolicy, Requests: reqUnions, LatchSpans: latchSpans, LockSpans: lockSpans, @@ -563,7 +566,7 @@ func (c *cluster) PushTransaction( switch pushType { case roachpb.PUSH_TIMESTAMP: pushed = h.Timestamp.Less(pusheeTxn.WriteTimestamp) || pusheeTxn.Status.IsFinalized() - case roachpb.PUSH_ABORT: + case roachpb.PUSH_ABORT, roachpb.PUSH_TOUCH: pushed = pusheeTxn.Status.IsFinalized() default: return nil, roachpb.NewErrorf("unexpected push type: %s", pushType) @@ -571,6 +574,12 @@ func (c *cluster) PushTransaction( if pushed { return pusheeTxn, nil } + // If PUSH_TOUCH, return error instead of waiting. + if pushType == roachpb.PUSH_TOUCH { + log.Eventf(ctx, "pushee not abandoned") + err := roachpb.NewTransactionPushError(*pusheeTxn) + return nil, roachpb.NewError(err) + } // Or the pusher aborted? var pusherRecordSig chan struct{} if pusherRecord != nil { diff --git a/pkg/kv/kvserver/concurrency/datadriven_util_test.go b/pkg/kv/kvserver/concurrency/datadriven_util_test.go index c2b2e68b76a6..a3d39c7c56ce 100644 --- a/pkg/kv/kvserver/concurrency/datadriven_util_test.go +++ b/pkg/kv/kvserver/concurrency/datadriven_util_test.go @@ -73,6 +73,24 @@ func scanLockDurability(t *testing.T, d *datadriven.TestData) lock.Durability { } } +func scanWaitPolicy(t *testing.T, d *datadriven.TestData, required bool) lock.WaitPolicy { + const key = "wait-policy" + if !required && !d.HasArg(key) { + return lock.WaitPolicy_Block + } + var policy string + d.ScanArgs(t, key, &policy) + switch policy { + case "block": + return lock.WaitPolicy_Block + case "error": + return lock.WaitPolicy_Error + default: + d.Fatalf(t, "unknown wait policy: %s", policy) + return 0 + } +} + func scanSingleRequest( t *testing.T, d *datadriven.TestData, line string, txns map[string]*roachpb.Transaction, ) roachpb.Request { diff --git a/pkg/kv/kvserver/concurrency/lock/locking.pb.go b/pkg/kv/kvserver/concurrency/lock/locking.pb.go index 0c715cdbec80..1da35a15ac76 100644 --- a/pkg/kv/kvserver/concurrency/lock/locking.pb.go +++ b/pkg/kv/kvserver/concurrency/lock/locking.pb.go @@ -155,7 +155,7 @@ func (x Strength) String() string { return proto.EnumName(Strength_name, int32(x)) } func (Strength) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_locking_44b6aeb3856df467, []int{0} + return fileDescriptor_locking_4fbbb41fbbd18e10, []int{0} } // Durability represents the different durability properties of a lock acquired @@ -195,34 +195,69 @@ func (x Durability) String() string { return proto.EnumName(Durability_name, int32(x)) } func (Durability) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_locking_44b6aeb3856df467, []int{1} + return fileDescriptor_locking_4fbbb41fbbd18e10, []int{1} +} + +// WaitPolicy specifies the behavior of a request when it encounters conflicting +// locks held by other active transactions. The default behavior is to block +// until the conflicting lock is released, but other policies can make sense in +// special situations. +type WaitPolicy int32 + +const ( + // Block indicates that if a request encounters a conflicting locks held by + // another active transaction, it should wait for the conflicting lock to be + // released before proceeding. + WaitPolicy_Block WaitPolicy = 0 + // Error indicates that if a request encounters a conflicting locks held by + // another active transaction, it should raise an error instead of blocking. + WaitPolicy_Error WaitPolicy = 1 +) + +var WaitPolicy_name = map[int32]string{ + 0: "Block", + 1: "Error", +} +var WaitPolicy_value = map[string]int32{ + "Block": 0, + "Error": 1, +} + +func (x WaitPolicy) String() string { + return proto.EnumName(WaitPolicy_name, int32(x)) +} +func (WaitPolicy) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_locking_4fbbb41fbbd18e10, []int{2} } func init() { proto.RegisterEnum("cockroach.kv.kvserver.concurrency.lock.Strength", Strength_name, Strength_value) proto.RegisterEnum("cockroach.kv.kvserver.concurrency.lock.Durability", Durability_name, Durability_value) + proto.RegisterEnum("cockroach.kv.kvserver.concurrency.lock.WaitPolicy", WaitPolicy_name, WaitPolicy_value) } func init() { - proto.RegisterFile("kv/kvserver/concurrency/lock/locking.proto", fileDescriptor_locking_44b6aeb3856df467) + proto.RegisterFile("kv/kvserver/concurrency/lock/locking.proto", fileDescriptor_locking_4fbbb41fbbd18e10) } -var fileDescriptor_locking_44b6aeb3856df467 = []byte{ - // 251 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0xce, 0x3f, 0x4e, 0xc3, 0x30, - 0x14, 0xc7, 0x71, 0x1b, 0xaa, 0x52, 0x1e, 0x7f, 0x64, 0x59, 0x4c, 0x1d, 0x3c, 0x76, 0xc8, 0x90, - 0x0c, 0x70, 0x82, 0x0a, 0x56, 0x06, 0xaa, 0x2e, 0x6c, 0xa9, 0xf3, 0x94, 0x58, 0x8e, 0xec, 0xe8, - 0xd5, 0xb1, 0xe8, 0x0d, 0x18, 0xb9, 0x03, 0x97, 0xe9, 0xd8, 0xb1, 0x23, 0x24, 0x17, 0x41, 0x49, - 0x85, 0x60, 0x79, 0x7a, 0xfa, 0x49, 0x1f, 0xe9, 0x0b, 0x89, 0x8d, 0x99, 0x8d, 0x5b, 0xa4, 0x88, - 0x94, 0x69, 0xef, 0x74, 0x4b, 0x84, 0x4e, 0xef, 0xb2, 0xda, 0x6b, 0x3b, 0x1e, 0xe3, 0xca, 0xb4, - 0x21, 0x1f, 0xbc, 0x5c, 0x68, 0xaf, 0x2d, 0xf9, 0x5c, 0x57, 0xa9, 0x8d, 0xe9, 0xaf, 0x4a, 0xff, - 0xa9, 0x74, 0x00, 0xf3, 0xbb, 0xd2, 0x97, 0x7e, 0x24, 0xd9, 0xf0, 0x9d, 0x74, 0xb2, 0x84, 0xd9, - 0x2a, 0x10, 0xba, 0x32, 0x54, 0x72, 0x06, 0x93, 0x67, 0xef, 0x50, 0x30, 0x09, 0x30, 0x5d, 0x55, - 0x39, 0x61, 0x21, 0xb8, 0xbc, 0x82, 0x8b, 0x75, 0x53, 0x52, 0x5e, 0xa0, 0x38, 0x93, 0x37, 0x70, - 0xf9, 0xf4, 0xa6, 0xeb, 0x76, 0x6b, 0x22, 0x8a, 0xf3, 0xf9, 0xe4, 0xfd, 0x53, 0xb1, 0xe4, 0x01, - 0xe0, 0xb1, 0xa5, 0x7c, 0x63, 0x6a, 0x13, 0x76, 0xf2, 0x16, 0xe0, 0x05, 0x9b, 0xda, 0xe8, 0x3c, - 0x60, 0x21, 0x98, 0x14, 0x70, 0xbd, 0x76, 0xf4, 0xb7, 0xf0, 0x93, 0x5a, 0x2e, 0xf6, 0xdf, 0x8a, - 0xed, 0x3b, 0xc5, 0x0f, 0x9d, 0xe2, 0xc7, 0x4e, 0xf1, 0xaf, 0x4e, 0xf1, 0x8f, 0x5e, 0xb1, 0x43, - 0xaf, 0xd8, 0xb1, 0x57, 0xec, 0x75, 0x32, 0x74, 0x6f, 0xa6, 0x63, 0xe8, 0xfd, 0x4f, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xc9, 0x20, 0xf8, 0x3c, 0x14, 0x01, 0x00, 0x00, +var fileDescriptor_locking_4fbbb41fbbd18e10 = []byte{ + // 275 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0xcf, 0xbd, 0x4e, 0xc3, 0x30, + 0x10, 0xc0, 0x71, 0x1b, 0x42, 0x69, 0x8f, 0x0f, 0x59, 0x16, 0x53, 0x07, 0x0f, 0x0c, 0x1d, 0x32, + 0x24, 0x03, 0x3c, 0x41, 0x44, 0x57, 0x84, 0xa8, 0x2a, 0x24, 0x36, 0xd7, 0xb1, 0x12, 0x2b, 0x91, + 0x1d, 0x5d, 0x9d, 0x88, 0xbc, 0x01, 0x23, 0xef, 0xc0, 0xcb, 0x74, 0xec, 0xd8, 0x11, 0x92, 0x17, + 0x41, 0x09, 0x20, 0x58, 0x4e, 0x7f, 0x9d, 0xf4, 0x93, 0xee, 0x20, 0x2c, 0x9a, 0xb8, 0x68, 0xb6, + 0x1a, 0x1b, 0x8d, 0xb1, 0x72, 0x56, 0xd5, 0x88, 0xda, 0xaa, 0x36, 0x2e, 0x9d, 0x2a, 0xc6, 0x61, + 0x6c, 0x16, 0x55, 0xe8, 0xbc, 0xe3, 0x0b, 0xe5, 0x54, 0x81, 0x4e, 0xaa, 0x3c, 0x2a, 0x9a, 0xe8, + 0x57, 0x45, 0xff, 0x54, 0x34, 0x80, 0xf9, 0x55, 0xe6, 0x32, 0x37, 0x92, 0x78, 0xa8, 0x6f, 0x1d, + 0x26, 0x30, 0x5d, 0x79, 0xd4, 0x36, 0xf3, 0x39, 0x9f, 0x42, 0x70, 0xef, 0xac, 0x66, 0x84, 0x03, + 0x4c, 0x56, 0xb9, 0x44, 0x9d, 0x32, 0xca, 0xcf, 0xe0, 0x74, 0x5d, 0x65, 0x28, 0x53, 0xcd, 0x8e, + 0xf8, 0x05, 0xcc, 0x96, 0x2f, 0xaa, 0xac, 0xb7, 0xa6, 0xd1, 0xec, 0x78, 0x1e, 0xbc, 0xbe, 0x0b, + 0x12, 0xde, 0x02, 0xdc, 0xd5, 0x28, 0x37, 0xa6, 0x34, 0xbe, 0xe5, 0x97, 0x00, 0x8f, 0xba, 0x2a, + 0x8d, 0x92, 0x5e, 0xa7, 0x8c, 0x70, 0x06, 0xe7, 0x6b, 0x8b, 0x7f, 0x1b, 0xfa, 0xa3, 0xae, 0x01, + 0x9e, 0xa4, 0xf1, 0x0f, 0xae, 0x34, 0xaa, 0xe5, 0x33, 0x38, 0x49, 0x86, 0x33, 0x19, 0x19, 0x72, + 0x89, 0xe8, 0x90, 0xd1, 0x64, 0xb1, 0xfb, 0x14, 0x64, 0xd7, 0x09, 0xba, 0xef, 0x04, 0x3d, 0x74, + 0x82, 0x7e, 0x74, 0x82, 0xbe, 0xf5, 0x82, 0xec, 0x7b, 0x41, 0x0e, 0xbd, 0x20, 0xcf, 0xc1, 0x80, + 0x36, 0x93, 0xf1, 0x99, 0x9b, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5f, 0x18, 0x05, 0x43, 0x38, + 0x01, 0x00, 0x00, } diff --git a/pkg/kv/kvserver/concurrency/lock/locking.proto b/pkg/kv/kvserver/concurrency/lock/locking.proto index f850a5f47f5a..13f21572afc9 100644 --- a/pkg/kv/kvserver/concurrency/lock/locking.proto +++ b/pkg/kv/kvserver/concurrency/lock/locking.proto @@ -161,3 +161,18 @@ enum Durability { // and should not be relied upon for correctness. Unreplicated = 1; } + +// WaitPolicy specifies the behavior of a request when it encounters conflicting +// locks held by other active transactions. The default behavior is to block +// until the conflicting lock is released, but other policies can make sense in +// special situations. +enum WaitPolicy { + // Block indicates that if a request encounters a conflicting locks held by + // another active transaction, it should wait for the conflicting lock to be + // released before proceeding. + Block = 0; + + // Error indicates that if a request encounters a conflicting locks held by + // another active transaction, it should raise an error instead of blocking. + Error = 1; +} diff --git a/pkg/kv/kvserver/concurrency/lock_table_waiter.go b/pkg/kv/kvserver/concurrency/lock_table_waiter.go index 7e6ef30fa4e3..eba12e6bfaf1 100644 --- a/pkg/kv/kvserver/concurrency/lock_table_waiter.go +++ b/pkg/kv/kvserver/concurrency/lock_table_waiter.go @@ -15,6 +15,7 @@ import ( "math" "time" + "github.com/cockroachdb/cockroach/pkg/kv/kvserver/concurrency/lock" "github.com/cockroachdb/cockroach/pkg/kv/kvserver/intentresolver" "github.com/cockroachdb/cockroach/pkg/kv/kvserver/spanset" "github.com/cockroachdb/cockroach/pkg/roachpb" @@ -158,6 +159,25 @@ func (w *lockTableWaiterImpl) WaitOn( state := guard.CurState() switch state.kind { case waitFor, waitForDistinguished: + if req.WaitPolicy == lock.WaitPolicy_Error { + // If the waiter has an Error wait policy, resolve the conflict + // immediately without waiting. If the conflict is a lock then + // push the lock holder's transaction using a PUSH_TOUCH to + // determine whether the lock is abandoned or whether its holder + // is still active. If the conflict is a reservation holder, + // raise an error immediately, we know the reservation holder is + // active. + if state.held { + err = w.pushLockTxn(ctx, req, state) + } else { + err = newWriteIntentErr(state) + } + if err != nil { + return err + } + continue + } + // waitFor indicates that the request is waiting on another // transaction. This transaction may be the lock holder of a // conflicting lock or the head of a lock-wait queue that the @@ -411,29 +431,52 @@ func (w *lockTableWaiterImpl) pushLockTxn( ctx context.Context, req Request, ws waitingState, ) *Error { if w.disableTxnPushing { - return roachpb.NewError(&roachpb.WriteIntentError{ - Intents: []roachpb.Intent{roachpb.MakeIntent(ws.txn, ws.key)}, - }) + return newWriteIntentErr(ws) } - // Determine which form of push to use. For read-write conflicts, try to - // push the lock holder's timestamp forward so the read request can read - // under the lock. For write-write conflicts, try to abort the lock holder - // entirely so the write request can revoke and replace the lock with its - // own lock. + // Construct the request header and determine which form of push to use. h := w.pushHeader(req) var pushType roachpb.PushTxnType - switch ws.guardAccess { - case spanset.SpanReadOnly: - pushType = roachpb.PUSH_TIMESTAMP - log.VEventf(ctx, 3, "pushing timestamp of txn %s above %s", ws.txn.ID.Short(), h.Timestamp) - case spanset.SpanReadWrite: - pushType = roachpb.PUSH_ABORT - log.VEventf(ctx, 3, "pushing txn %s to abort", ws.txn.ID.Short()) + switch req.WaitPolicy { + case lock.WaitPolicy_Block: + // The wait policy signifies that the request wants to wait until the + // conflicting lock is released. For read-write conflicts, try to push + // the lock holder's timestamp forward so the read request can read + // under the lock. For write-write conflicts, try to abort the lock + // holder entirely so the write request can revoke and replace the lock + // with its own lock. + switch ws.guardAccess { + case spanset.SpanReadOnly: + pushType = roachpb.PUSH_TIMESTAMP + log.VEventf(ctx, 3, "pushing timestamp of txn %s above %s", ws.txn.ID.Short(), h.Timestamp) + + case spanset.SpanReadWrite: + pushType = roachpb.PUSH_ABORT + log.VEventf(ctx, 3, "pushing txn %s to abort", ws.txn.ID.Short()) + } + + case lock.WaitPolicy_Error: + // The wait policy signifies that the request wants to raise an error + // upon encountering a conflicting lock. We still need to push the lock + // holder to ensure that it is active and that this isn't an abandoned + // lock, but we push using a PUSH_TOUCH to immediately return an error + // if the lock hold is still active. + pushType = roachpb.PUSH_TOUCH + log.VEventf(ctx, 3, "pushing txn %s to check if abandoned", ws.txn.ID.Short()) + + default: + log.Fatalf(ctx, "unexpected WaitPolicy: %v", req.WaitPolicy) } pusheeTxn, err := w.ir.PushTransaction(ctx, ws.txn, h, pushType) if err != nil { + // If the push failed due to a TransactionPushError then we must + // have been using a PUSH_TOUCH, otherwise it would have blocked + // until completion (except when DontRetryPushTxnFailures is set). + // Transform the error into a WriteIntentError. + if _, ok := err.GetDetail().(*roachpb.TransactionPushError); ok && pushType == roachpb.PUSH_TOUCH { + err = newWriteIntentErr(ws) + } return err } @@ -665,6 +708,12 @@ func (c *txnCache) insertFrontLocked(txn *roachpb.Transaction) { c.txns[0] = txn } +func newWriteIntentErr(ws waitingState) *Error { + return roachpb.NewError(&roachpb.WriteIntentError{ + Intents: []roachpb.Intent{roachpb.MakeIntent(ws.txn, ws.key)}, + }) +} + func hasMinPriority(txn *enginepb.TxnMeta) bool { return txn != nil && txn.Priority == enginepb.MinTxnPriority } diff --git a/pkg/kv/kvserver/concurrency/lock_table_waiter_test.go b/pkg/kv/kvserver/concurrency/lock_table_waiter_test.go index 5ccd2b7ab367..0f1f44deb0fc 100644 --- a/pkg/kv/kvserver/concurrency/lock_table_waiter_test.go +++ b/pkg/kv/kvserver/concurrency/lock_table_waiter_test.go @@ -16,6 +16,7 @@ import ( "math/rand" "testing" + "github.com/cockroachdb/cockroach/pkg/kv/kvserver/concurrency/lock" "github.com/cockroachdb/cockroach/pkg/kv/kvserver/intentresolver" "github.com/cockroachdb/cockroach/pkg/kv/kvserver/spanset" "github.com/cockroachdb/cockroach/pkg/roachpb" @@ -359,6 +360,114 @@ func notifyUntilDone(t *testing.T, g *mockLockTableGuard) func() { return func() { <-done } } +func TestLockTableWaiterWithErrorWaitPolicy(t *testing.T) { + defer leaktest.AfterTest(t)() + defer log.Scope(t).Close(t) + ctx := context.Background() + + maxTS := hlc.Timestamp{WallTime: 15} + makeReq := func() Request { + txn := makeTxnProto("request") + txn.MaxTimestamp = maxTS + return Request{ + Txn: &txn, + Timestamp: txn.ReadTimestamp, + WaitPolicy: lock.WaitPolicy_Error, + } + } + + t.Run("state", func(t *testing.T) { + t.Run("waitFor", func(t *testing.T) { + testErrorWaitPush(t, waitFor, makeReq, maxTS) + }) + + t.Run("waitForDistinguished", func(t *testing.T) { + testErrorWaitPush(t, waitForDistinguished, makeReq, maxTS) + }) + + t.Run("waitElsewhere", func(t *testing.T) { + testErrorWaitPush(t, waitElsewhere, makeReq, maxTS) + }) + + t.Run("waitSelf", func(t *testing.T) { + testWaitNoopUntilDone(t, waitSelf, makeReq) + }) + + t.Run("doneWaiting", func(t *testing.T) { + w, _, g := setupLockTableWaiterTest() + defer w.stopper.Stop(ctx) + + g.state = waitingState{kind: doneWaiting} + g.notify() + + err := w.WaitOn(ctx, makeReq(), g) + require.Nil(t, err) + }) + }) +} + +func testErrorWaitPush(t *testing.T, k waitKind, makeReq func() Request, expPushTS hlc.Timestamp) { + ctx := context.Background() + keyA := roachpb.Key("keyA") + testutils.RunTrueAndFalse(t, "lockHeld", func(t *testing.T, lockHeld bool) { + w, ir, g := setupLockTableWaiterTest() + defer w.stopper.Stop(ctx) + pusheeTxn := makeTxnProto("pushee") + + req := makeReq() + g.state = waitingState{ + kind: k, + txn: &pusheeTxn.TxnMeta, + key: keyA, + held: lockHeld, + guardAccess: spanset.SpanReadOnly, + } + g.notify() + + // If the lock is not held, expect an error immediately. The one + // exception to this is waitElsewhere, which expects no error. + if !lockHeld { + err := w.WaitOn(ctx, req, g) + if k == waitElsewhere { + require.Nil(t, err) + } else { + require.NotNil(t, err) + require.Regexp(t, "conflicting intents", err) + } + return + } + + ir.pushTxn = func( + _ context.Context, + pusheeArg *enginepb.TxnMeta, + h roachpb.Header, + pushType roachpb.PushTxnType, + ) (*roachpb.Transaction, *Error) { + require.Equal(t, &pusheeTxn.TxnMeta, pusheeArg) + require.Equal(t, req.Txn, h.Txn) + require.Equal(t, expPushTS, h.Timestamp) + require.Equal(t, roachpb.PUSH_TOUCH, pushType) + + resp := &roachpb.Transaction{TxnMeta: *pusheeArg, Status: roachpb.ABORTED} + + // Next, we'll try to resolve the lock now that we know the + // holder is ABORTED. + ir.resolveIntent = func(_ context.Context, intent roachpb.LockUpdate) *Error { + require.Equal(t, keyA, intent.Key) + require.Equal(t, pusheeTxn.ID, intent.Txn.ID) + require.Equal(t, roachpb.ABORTED, intent.Status) + g.state = waitingState{kind: doneWaiting} + g.notify() + return nil + } + return resp, nil + } + + err := w.WaitOn(ctx, req, g) + require.Nil(t, err) + }) +} + // TestLockTableWaiterIntentResolverError tests that the lockTableWaiter // propagates errors from its intent resolver when it pushes transactions // or resolves their intents. diff --git a/pkg/kv/kvserver/concurrency/testdata/concurrency_manager/wait_policy_error b/pkg/kv/kvserver/concurrency/testdata/concurrency_manager/wait_policy_error new file mode 100644 index 000000000000..60e9fdec291a --- /dev/null +++ b/pkg/kv/kvserver/concurrency/testdata/concurrency_manager/wait_policy_error @@ -0,0 +1,269 @@ +new-txn name=txn1 ts=10,1 epoch=0 +---- + +new-txn name=txn2 ts=11,1 epoch=0 +---- + +new-txn name=txn3 ts=11,1 epoch=0 +---- + +new-txn name=txnNoWait ts=12,1 epoch=0 +---- + +# ------------------------------------------------------------- +# Prep: Txn 1 acquire locks at key k and key k2 +# Txn 2 acquire locks at key k3 +# Txn 3 begins waiting in k2's wait-queue +# ------------------------------------------------------------- + +new-request name=req1 txn=txn1 ts=10,0 + put key=k value=v + put key=k2 value=v2 +---- + +sequence req=req1 +---- +[1] sequence req1: sequencing request +[1] sequence req1: acquiring latches +[1] sequence req1: scanning lock table for conflicting locks +[1] sequence req1: sequencing complete, returned guard + +on-lock-acquired req=req1 key=k +---- +[-] acquire lock: txn 00000001 @ k + +on-lock-acquired req=req1 key=k2 +---- +[-] acquire lock: txn 00000001 @ k2 + +finish req=req1 +---- +[-] finish req1: finishing request + +new-request name=req2 txn=txn2 ts=11,0 + put key=k3 value=v +---- + +sequence req=req2 +---- +[2] sequence req2: sequencing request +[2] sequence req2: acquiring latches +[2] sequence req2: scanning lock table for conflicting locks +[2] sequence req2: sequencing complete, returned guard + +on-lock-acquired req=req2 key=k3 +---- +[-] acquire lock: txn 00000002 @ k3 + +finish req=req2 +---- +[-] finish req2: finishing request + +new-request name=req3 txn=txn3 ts=11,0 + put key=k2 value=v + put key=k3 value=v +---- + +sequence req=req3 +---- +[3] sequence req3: sequencing request +[3] sequence req3: acquiring latches +[3] sequence req3: scanning lock table for conflicting locks +[3] sequence req3: waiting in lock wait-queues +[3] sequence req3: pushing txn 00000001 to abort +[3] sequence req3: blocked on select in concurrency_test.(*cluster).PushTransaction + +debug-lock-table +---- +global: num=3 + lock: "k" + holder: txn: 00000001-0000-0000-0000-000000000000, ts: 0.000000010,0, info: unrepl epoch: 0, seqs: [0] + lock: "k2" + holder: txn: 00000001-0000-0000-0000-000000000000, ts: 0.000000010,0, info: unrepl epoch: 0, seqs: [0] + queued writers: + active: true req: 3, txn: 00000003-0000-0000-0000-000000000000 + distinguished req: 3 + lock: "k3" + holder: txn: 00000002-0000-0000-0000-000000000000, ts: 0.000000011,0, info: unrepl epoch: 0, seqs: [0] +local: num=0 + +# ------------------------------------------------------------- +# Read-only request with WaitPolicy_Error hits lock. The request +# raises an error. +# ------------------------------------------------------------- + +new-request name=reqNoWait1 txn=txnNoWait ts=12,0 wait-policy=error + get key=k +---- + +sequence req=reqNoWait1 +---- +[4] sequence reqNoWait1: sequencing request +[4] sequence reqNoWait1: acquiring latches +[4] sequence reqNoWait1: scanning lock table for conflicting locks +[4] sequence reqNoWait1: waiting in lock wait-queues +[4] sequence reqNoWait1: pushing txn 00000001 to check if abandoned +[4] sequence reqNoWait1: pushee not abandoned +[4] sequence reqNoWait1: sequencing complete, returned error: conflicting intents on "k" + +# ------------------------------------------------------------- +# Read-only request with WaitPolicy_Error hits abandoned lock. +# The request resolves the abandoned lock and proceeds. +# ------------------------------------------------------------- + +on-txn-updated txn=txn1 status=committed +---- +[-] update txn: committing txn1 +[3] sequence req3: resolving intent "k2" for txn 00000001 with COMMITTED status +[3] sequence req3: pushing txn 00000002 to abort +[3] sequence req3: blocked on select in concurrency_test.(*cluster).PushTransaction + +sequence req=reqNoWait1 +---- +[5] sequence reqNoWait1: sequencing request +[5] sequence reqNoWait1: acquiring latches +[5] sequence reqNoWait1: scanning lock table for conflicting locks +[5] sequence reqNoWait1: waiting in lock wait-queues +[5] sequence reqNoWait1: pushing txn 00000001 to check if abandoned +[5] sequence reqNoWait1: resolving intent "k" for txn 00000001 with COMMITTED status +[5] sequence reqNoWait1: acquiring latches +[5] sequence reqNoWait1: scanning lock table for conflicting locks +[5] sequence reqNoWait1: sequencing complete, returned guard + +finish req=reqNoWait1 +---- +[-] finish reqNoWait1: finishing request + +debug-lock-table +---- +global: num=2 + lock: "k2" + res: req: 3, txn: 00000003-0000-0000-0000-000000000000, ts: 0.000000011,0, seq: 0 + lock: "k3" + holder: txn: 00000002-0000-0000-0000-000000000000, ts: 0.000000011,0, info: unrepl epoch: 0, seqs: [0] + queued writers: + active: true req: 3, txn: 00000003-0000-0000-0000-000000000000 + distinguished req: 3 +local: num=0 + +# ------------------------------------------------------------- +# Read-write request with WaitPolicy_Error hits reservation +# holder. The request immediately raises an error instead of +# waiting for the reservation holder. +# ------------------------------------------------------------- + +new-request name=reqNoWait2 txn=txnNoWait ts=12,0 wait-policy=error + put key=k2 value=v4 +---- + +sequence req=reqNoWait2 +---- +[6] sequence reqNoWait2: sequencing request +[6] sequence reqNoWait2: acquiring latches +[6] sequence reqNoWait2: scanning lock table for conflicting locks +[6] sequence reqNoWait2: waiting in lock wait-queues +[6] sequence reqNoWait2: sequencing complete, returned error: conflicting intents on "k2" + +# ------------------------------------------------------------- +# Read-only request with WaitPolicy_Error discovers lock. The +# request raises an error. +# ------------------------------------------------------------- + +new-request name=reqNoWait3 txn=txnNoWait ts=12,0 wait-policy=error + get key=k4 +---- + +sequence req=reqNoWait3 +---- +[7] sequence reqNoWait3: sequencing request +[7] sequence reqNoWait3: acquiring latches +[7] sequence reqNoWait3: scanning lock table for conflicting locks +[7] sequence reqNoWait3: sequencing complete, returned guard + +handle-write-intent-error req=reqNoWait3 lease-seq=1 + intent txn=txn2 key=k4 +---- +[8] handle write intent error reqNoWait3: handled conflicting intents on "k4", released latches + +sequence req=reqNoWait3 +---- +[9] sequence reqNoWait3: re-sequencing request +[9] sequence reqNoWait3: acquiring latches +[9] sequence reqNoWait3: scanning lock table for conflicting locks +[9] sequence reqNoWait3: waiting in lock wait-queues +[9] sequence reqNoWait3: pushing txn 00000002 to check if abandoned +[9] sequence reqNoWait3: pushee not abandoned +[9] sequence reqNoWait3: sequencing complete, returned error: conflicting intents on "k4" + +debug-lock-table +---- +global: num=3 + lock: "k2" + res: req: 3, txn: 00000003-0000-0000-0000-000000000000, ts: 0.000000011,0, seq: 0 + lock: "k3" + holder: txn: 00000002-0000-0000-0000-000000000000, ts: 0.000000011,0, info: unrepl epoch: 0, seqs: [0] + queued writers: + active: true req: 3, txn: 00000003-0000-0000-0000-000000000000 + distinguished req: 3 + lock: "k4" + holder: txn: 00000002-0000-0000-0000-000000000000, ts: 0.000000011,1, info: repl epoch: 0, seqs: [0] +local: num=0 + +# ------------------------------------------------------------- +# Read-only request with WaitPolicy_Error discovers abandoned +# lock. The request resolves the abandoned lock and proceeds. +# ------------------------------------------------------------- + +on-txn-updated txn=txn2 status=aborted +---- +[-] update txn: aborting txn2 +[3] sequence req3: resolving intent "k3" for txn 00000002 with ABORTED status +[3] sequence req3: acquiring latches +[3] sequence req3: scanning lock table for conflicting locks +[3] sequence req3: sequencing complete, returned guard + +new-request name=reqNoWait4 txn=txnNoWait ts=12,0 wait-policy=error + get key=k5 +---- + +sequence req=reqNoWait4 +---- +[10] sequence reqNoWait4: sequencing request +[10] sequence reqNoWait4: acquiring latches +[10] sequence reqNoWait4: scanning lock table for conflicting locks +[10] sequence reqNoWait4: sequencing complete, returned guard + +handle-write-intent-error req=reqNoWait4 lease-seq=1 + intent txn=txn2 key=k5 +---- +[11] handle write intent error reqNoWait4: handled conflicting intents on "k5", released latches + +sequence req=reqNoWait4 +---- +[12] sequence reqNoWait4: re-sequencing request +[12] sequence reqNoWait4: acquiring latches +[12] sequence reqNoWait4: scanning lock table for conflicting locks +[12] sequence reqNoWait4: waiting in lock wait-queues +[12] sequence reqNoWait4: pushing txn 00000002 to check if abandoned +[12] sequence reqNoWait4: resolving intent "k5" for txn 00000002 with ABORTED status +[12] sequence reqNoWait4: acquiring latches +[12] sequence reqNoWait4: scanning lock table for conflicting locks +[12] sequence reqNoWait4: sequencing complete, returned guard + +finish req=reqNoWait4 +---- +[-] finish reqNoWait4: finishing request + +finish req=req3 +---- +[-] finish req3: finishing request + +debug-lock-table +---- +global: num=1 + lock: "k4" + holder: txn: 00000002-0000-0000-0000-000000000000, ts: 0.000000011,1, info: repl epoch: 0, seqs: [0] +local: num=0 + +reset +---- diff --git a/pkg/kv/kvserver/replica_send.go b/pkg/kv/kvserver/replica_send.go index 3341dbcb71ae..cfe4abc33773 100644 --- a/pkg/kv/kvserver/replica_send.go +++ b/pkg/kv/kvserver/replica_send.go @@ -281,6 +281,7 @@ func (r *Replica) executeBatchWithConcurrencyRetries( Timestamp: ba.Timestamp, Priority: ba.UserPriority, ReadConsistency: ba.ReadConsistency, + WaitPolicy: ba.WaitPolicy, Requests: ba.Requests, LatchSpans: latchSpans, LockSpans: lockSpans, diff --git a/pkg/roachpb/api.pb.go b/pkg/roachpb/api.pb.go index 8bb2cccaef56..3180aad3ea60 100644 --- a/pkg/roachpb/api.pb.go +++ b/pkg/roachpb/api.pb.go @@ -72,7 +72,7 @@ func (x ReadConsistencyType) String() string { return proto.EnumName(ReadConsistencyType_name, int32(x)) } func (ReadConsistencyType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{0} + return fileDescriptor_api_831b3c8e16e707a9, []int{0} } // ScanFormat is an enumeration of the available response formats for MVCCScan @@ -100,7 +100,7 @@ func (x ScanFormat) String() string { return proto.EnumName(ScanFormat_name, int32(x)) } func (ScanFormat) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{1} + return fileDescriptor_api_831b3c8e16e707a9, []int{1} } type ChecksumMode int32 @@ -147,7 +147,7 @@ func (x ChecksumMode) String() string { return proto.EnumName(ChecksumMode_name, int32(x)) } func (ChecksumMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{2} + return fileDescriptor_api_831b3c8e16e707a9, []int{2} } // PushTxnType determines what action to take when pushing a transaction. @@ -178,7 +178,7 @@ func (x PushTxnType) String() string { return proto.EnumName(PushTxnType_name, int32(x)) } func (PushTxnType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{3} + return fileDescriptor_api_831b3c8e16e707a9, []int{3} } type ExternalStorageProvider int32 @@ -219,7 +219,7 @@ func (x ExternalStorageProvider) String() string { return proto.EnumName(ExternalStorageProvider_name, int32(x)) } func (ExternalStorageProvider) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{4} + return fileDescriptor_api_831b3c8e16e707a9, []int{4} } type MVCCFilter int32 @@ -242,7 +242,7 @@ func (x MVCCFilter) String() string { return proto.EnumName(MVCCFilter_name, int32(x)) } func (MVCCFilter) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{5} + return fileDescriptor_api_831b3c8e16e707a9, []int{5} } type ResponseHeader_ResumeReason int32 @@ -268,7 +268,7 @@ func (x ResponseHeader_ResumeReason) String() string { return proto.EnumName(ResponseHeader_ResumeReason_name, int32(x)) } func (ResponseHeader_ResumeReason) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{1, 0} + return fileDescriptor_api_831b3c8e16e707a9, []int{1, 0} } type CheckConsistencyResponse_Status int32 @@ -310,7 +310,7 @@ func (x CheckConsistencyResponse_Status) String() string { return proto.EnumName(CheckConsistencyResponse_Status_name, int32(x)) } func (CheckConsistencyResponse_Status) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{25, 0} + return fileDescriptor_api_831b3c8e16e707a9, []int{25, 0} } // RequestHeader is supplied with every storage node request. @@ -331,7 +331,7 @@ func (m *RequestHeader) Reset() { *m = RequestHeader{} } func (m *RequestHeader) String() string { return proto.CompactTextString(m) } func (*RequestHeader) ProtoMessage() {} func (*RequestHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{0} + return fileDescriptor_api_831b3c8e16e707a9, []int{0} } func (m *RequestHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -402,7 +402,7 @@ func (m *ResponseHeader) Reset() { *m = ResponseHeader{} } func (m *ResponseHeader) String() string { return proto.CompactTextString(m) } func (*ResponseHeader) ProtoMessage() {} func (*ResponseHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{1} + return fileDescriptor_api_831b3c8e16e707a9, []int{1} } func (m *ResponseHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -436,7 +436,7 @@ func (m *GetRequest) Reset() { *m = GetRequest{} } func (m *GetRequest) String() string { return proto.CompactTextString(m) } func (*GetRequest) ProtoMessage() {} func (*GetRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{2} + return fileDescriptor_api_831b3c8e16e707a9, []int{2} } func (m *GetRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -479,7 +479,7 @@ func (m *GetResponse) Reset() { *m = GetResponse{} } func (m *GetResponse) String() string { return proto.CompactTextString(m) } func (*GetResponse) ProtoMessage() {} func (*GetResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{3} + return fileDescriptor_api_831b3c8e16e707a9, []int{3} } func (m *GetResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -522,7 +522,7 @@ func (m *PutRequest) Reset() { *m = PutRequest{} } func (m *PutRequest) String() string { return proto.CompactTextString(m) } func (*PutRequest) ProtoMessage() {} func (*PutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{4} + return fileDescriptor_api_831b3c8e16e707a9, []int{4} } func (m *PutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -556,7 +556,7 @@ func (m *PutResponse) Reset() { *m = PutResponse{} } func (m *PutResponse) String() string { return proto.CompactTextString(m) } func (*PutResponse) ProtoMessage() {} func (*PutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{5} + return fileDescriptor_api_831b3c8e16e707a9, []int{5} } func (m *PutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -638,7 +638,7 @@ func (m *ConditionalPutRequest) Reset() { *m = ConditionalPutRequest{} } func (m *ConditionalPutRequest) String() string { return proto.CompactTextString(m) } func (*ConditionalPutRequest) ProtoMessage() {} func (*ConditionalPutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{6} + return fileDescriptor_api_831b3c8e16e707a9, []int{6} } func (m *ConditionalPutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -673,7 +673,7 @@ func (m *ConditionalPutResponse) Reset() { *m = ConditionalPutResponse{} func (m *ConditionalPutResponse) String() string { return proto.CompactTextString(m) } func (*ConditionalPutResponse) ProtoMessage() {} func (*ConditionalPutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{7} + return fileDescriptor_api_831b3c8e16e707a9, []int{7} } func (m *ConditionalPutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -719,7 +719,7 @@ func (m *InitPutRequest) Reset() { *m = InitPutRequest{} } func (m *InitPutRequest) String() string { return proto.CompactTextString(m) } func (*InitPutRequest) ProtoMessage() {} func (*InitPutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{8} + return fileDescriptor_api_831b3c8e16e707a9, []int{8} } func (m *InitPutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -753,7 +753,7 @@ func (m *InitPutResponse) Reset() { *m = InitPutResponse{} } func (m *InitPutResponse) String() string { return proto.CompactTextString(m) } func (*InitPutResponse) ProtoMessage() {} func (*InitPutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{9} + return fileDescriptor_api_831b3c8e16e707a9, []int{9} } func (m *InitPutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -793,7 +793,7 @@ func (m *IncrementRequest) Reset() { *m = IncrementRequest{} } func (m *IncrementRequest) String() string { return proto.CompactTextString(m) } func (*IncrementRequest) ProtoMessage() {} func (*IncrementRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{10} + return fileDescriptor_api_831b3c8e16e707a9, []int{10} } func (m *IncrementRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -830,7 +830,7 @@ func (m *IncrementResponse) Reset() { *m = IncrementResponse{} } func (m *IncrementResponse) String() string { return proto.CompactTextString(m) } func (*IncrementResponse) ProtoMessage() {} func (*IncrementResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{11} + return fileDescriptor_api_831b3c8e16e707a9, []int{11} } func (m *IncrementResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -864,7 +864,7 @@ func (m *DeleteRequest) Reset() { *m = DeleteRequest{} } func (m *DeleteRequest) String() string { return proto.CompactTextString(m) } func (*DeleteRequest) ProtoMessage() {} func (*DeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{12} + return fileDescriptor_api_831b3c8e16e707a9, []int{12} } func (m *DeleteRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -898,7 +898,7 @@ func (m *DeleteResponse) Reset() { *m = DeleteResponse{} } func (m *DeleteResponse) String() string { return proto.CompactTextString(m) } func (*DeleteResponse) ProtoMessage() {} func (*DeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{13} + return fileDescriptor_api_831b3c8e16e707a9, []int{13} } func (m *DeleteResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -950,7 +950,7 @@ func (m *DeleteRangeRequest) Reset() { *m = DeleteRangeRequest{} } func (m *DeleteRangeRequest) String() string { return proto.CompactTextString(m) } func (*DeleteRangeRequest) ProtoMessage() {} func (*DeleteRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{14} + return fileDescriptor_api_831b3c8e16e707a9, []int{14} } func (m *DeleteRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -987,7 +987,7 @@ func (m *DeleteRangeResponse) Reset() { *m = DeleteRangeResponse{} } func (m *DeleteRangeResponse) String() string { return proto.CompactTextString(m) } func (*DeleteRangeResponse) ProtoMessage() {} func (*DeleteRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{15} + return fileDescriptor_api_831b3c8e16e707a9, []int{15} } func (m *DeleteRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1034,7 +1034,7 @@ func (m *ClearRangeRequest) Reset() { *m = ClearRangeRequest{} } func (m *ClearRangeRequest) String() string { return proto.CompactTextString(m) } func (*ClearRangeRequest) ProtoMessage() {} func (*ClearRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{16} + return fileDescriptor_api_831b3c8e16e707a9, []int{16} } func (m *ClearRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1068,7 +1068,7 @@ func (m *ClearRangeResponse) Reset() { *m = ClearRangeResponse{} } func (m *ClearRangeResponse) String() string { return proto.CompactTextString(m) } func (*ClearRangeResponse) ProtoMessage() {} func (*ClearRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{17} + return fileDescriptor_api_831b3c8e16e707a9, []int{17} } func (m *ClearRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1109,7 +1109,7 @@ func (m *RevertRangeRequest) Reset() { *m = RevertRangeRequest{} } func (m *RevertRangeRequest) String() string { return proto.CompactTextString(m) } func (*RevertRangeRequest) ProtoMessage() {} func (*RevertRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{18} + return fileDescriptor_api_831b3c8e16e707a9, []int{18} } func (m *RevertRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1143,7 +1143,7 @@ func (m *RevertRangeResponse) Reset() { *m = RevertRangeResponse{} } func (m *RevertRangeResponse) String() string { return proto.CompactTextString(m) } func (*RevertRangeResponse) ProtoMessage() {} func (*RevertRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{19} + return fileDescriptor_api_831b3c8e16e707a9, []int{19} } func (m *RevertRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1194,7 +1194,7 @@ func (m *ScanRequest) Reset() { *m = ScanRequest{} } func (m *ScanRequest) String() string { return proto.CompactTextString(m) } func (*ScanRequest) ProtoMessage() {} func (*ScanRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{20} + return fileDescriptor_api_831b3c8e16e707a9, []int{20} } func (m *ScanRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1246,7 +1246,7 @@ func (m *ScanResponse) Reset() { *m = ScanResponse{} } func (m *ScanResponse) String() string { return proto.CompactTextString(m) } func (*ScanResponse) ProtoMessage() {} func (*ScanResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{21} + return fileDescriptor_api_831b3c8e16e707a9, []int{21} } func (m *ScanResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1297,7 +1297,7 @@ func (m *ReverseScanRequest) Reset() { *m = ReverseScanRequest{} } func (m *ReverseScanRequest) String() string { return proto.CompactTextString(m) } func (*ReverseScanRequest) ProtoMessage() {} func (*ReverseScanRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{22} + return fileDescriptor_api_831b3c8e16e707a9, []int{22} } func (m *ReverseScanRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1349,7 +1349,7 @@ func (m *ReverseScanResponse) Reset() { *m = ReverseScanResponse{} } func (m *ReverseScanResponse) String() string { return proto.CompactTextString(m) } func (*ReverseScanResponse) ProtoMessage() {} func (*ReverseScanResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{23} + return fileDescriptor_api_831b3c8e16e707a9, []int{23} } func (m *ReverseScanResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1402,7 +1402,7 @@ func (m *CheckConsistencyRequest) Reset() { *m = CheckConsistencyRequest func (m *CheckConsistencyRequest) String() string { return proto.CompactTextString(m) } func (*CheckConsistencyRequest) ProtoMessage() {} func (*CheckConsistencyRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{24} + return fileDescriptor_api_831b3c8e16e707a9, []int{24} } func (m *CheckConsistencyRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1439,7 +1439,7 @@ func (m *CheckConsistencyResponse) Reset() { *m = CheckConsistencyRespon func (m *CheckConsistencyResponse) String() string { return proto.CompactTextString(m) } func (*CheckConsistencyResponse) ProtoMessage() {} func (*CheckConsistencyResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{25} + return fileDescriptor_api_831b3c8e16e707a9, []int{25} } func (m *CheckConsistencyResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1483,7 +1483,7 @@ func (m *CheckConsistencyResponse_Result) Reset() { *m = CheckConsistenc func (m *CheckConsistencyResponse_Result) String() string { return proto.CompactTextString(m) } func (*CheckConsistencyResponse_Result) ProtoMessage() {} func (*CheckConsistencyResponse_Result) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{25, 0} + return fileDescriptor_api_831b3c8e16e707a9, []int{25, 0} } func (m *CheckConsistencyResponse_Result) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1531,7 +1531,7 @@ func (m *RecomputeStatsRequest) Reset() { *m = RecomputeStatsRequest{} } func (m *RecomputeStatsRequest) String() string { return proto.CompactTextString(m) } func (*RecomputeStatsRequest) ProtoMessage() {} func (*RecomputeStatsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{26} + return fileDescriptor_api_831b3c8e16e707a9, []int{26} } func (m *RecomputeStatsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1567,7 +1567,7 @@ func (m *RecomputeStatsResponse) Reset() { *m = RecomputeStatsResponse{} func (m *RecomputeStatsResponse) String() string { return proto.CompactTextString(m) } func (*RecomputeStatsResponse) ProtoMessage() {} func (*RecomputeStatsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{27} + return fileDescriptor_api_831b3c8e16e707a9, []int{27} } func (m *RecomputeStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1664,7 +1664,7 @@ func (m *EndTxnRequest) Reset() { *m = EndTxnRequest{} } func (m *EndTxnRequest) String() string { return proto.CompactTextString(m) } func (*EndTxnRequest) ProtoMessage() {} func (*EndTxnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{28} + return fileDescriptor_api_831b3c8e16e707a9, []int{28} } func (m *EndTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1710,7 +1710,7 @@ func (m *EndTxnResponse) Reset() { *m = EndTxnResponse{} } func (m *EndTxnResponse) String() string { return proto.CompactTextString(m) } func (*EndTxnResponse) ProtoMessage() {} func (*EndTxnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{29} + return fileDescriptor_api_831b3c8e16e707a9, []int{29} } func (m *EndTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1771,7 +1771,7 @@ func (m *AdminSplitRequest) Reset() { *m = AdminSplitRequest{} } func (m *AdminSplitRequest) String() string { return proto.CompactTextString(m) } func (*AdminSplitRequest) ProtoMessage() {} func (*AdminSplitRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{30} + return fileDescriptor_api_831b3c8e16e707a9, []int{30} } func (m *AdminSplitRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1806,7 +1806,7 @@ func (m *AdminSplitResponse) Reset() { *m = AdminSplitResponse{} } func (m *AdminSplitResponse) String() string { return proto.CompactTextString(m) } func (*AdminSplitResponse) ProtoMessage() {} func (*AdminSplitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{31} + return fileDescriptor_api_831b3c8e16e707a9, []int{31} } func (m *AdminSplitResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1845,7 +1845,7 @@ func (m *AdminUnsplitRequest) Reset() { *m = AdminUnsplitRequest{} } func (m *AdminUnsplitRequest) String() string { return proto.CompactTextString(m) } func (*AdminUnsplitRequest) ProtoMessage() {} func (*AdminUnsplitRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{32} + return fileDescriptor_api_831b3c8e16e707a9, []int{32} } func (m *AdminUnsplitRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1880,7 +1880,7 @@ func (m *AdminUnsplitResponse) Reset() { *m = AdminUnsplitResponse{} } func (m *AdminUnsplitResponse) String() string { return proto.CompactTextString(m) } func (*AdminUnsplitResponse) ProtoMessage() {} func (*AdminUnsplitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{33} + return fileDescriptor_api_831b3c8e16e707a9, []int{33} } func (m *AdminUnsplitResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1923,7 +1923,7 @@ func (m *AdminMergeRequest) Reset() { *m = AdminMergeRequest{} } func (m *AdminMergeRequest) String() string { return proto.CompactTextString(m) } func (*AdminMergeRequest) ProtoMessage() {} func (*AdminMergeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{34} + return fileDescriptor_api_831b3c8e16e707a9, []int{34} } func (m *AdminMergeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1958,7 +1958,7 @@ func (m *AdminMergeResponse) Reset() { *m = AdminMergeResponse{} } func (m *AdminMergeResponse) String() string { return proto.CompactTextString(m) } func (*AdminMergeResponse) ProtoMessage() {} func (*AdminMergeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{35} + return fileDescriptor_api_831b3c8e16e707a9, []int{35} } func (m *AdminMergeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1996,7 +1996,7 @@ func (m *AdminTransferLeaseRequest) Reset() { *m = AdminTransferLeaseReq func (m *AdminTransferLeaseRequest) String() string { return proto.CompactTextString(m) } func (*AdminTransferLeaseRequest) ProtoMessage() {} func (*AdminTransferLeaseRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{36} + return fileDescriptor_api_831b3c8e16e707a9, []int{36} } func (m *AdminTransferLeaseRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2029,7 +2029,7 @@ func (m *AdminTransferLeaseResponse) Reset() { *m = AdminTransferLeaseRe func (m *AdminTransferLeaseResponse) String() string { return proto.CompactTextString(m) } func (*AdminTransferLeaseResponse) ProtoMessage() {} func (*AdminTransferLeaseResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{37} + return fileDescriptor_api_831b3c8e16e707a9, []int{37} } func (m *AdminTransferLeaseResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2064,7 +2064,7 @@ func (m *ReplicationChange) Reset() { *m = ReplicationChange{} } func (m *ReplicationChange) String() string { return proto.CompactTextString(m) } func (*ReplicationChange) ProtoMessage() {} func (*ReplicationChange) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{38} + return fileDescriptor_api_831b3c8e16e707a9, []int{38} } func (m *ReplicationChange) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2122,7 +2122,7 @@ func (m *AdminChangeReplicasRequest) Reset() { *m = AdminChangeReplicasR func (m *AdminChangeReplicasRequest) String() string { return proto.CompactTextString(m) } func (*AdminChangeReplicasRequest) ProtoMessage() {} func (*AdminChangeReplicasRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{39} + return fileDescriptor_api_831b3c8e16e707a9, []int{39} } func (m *AdminChangeReplicasRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2157,7 +2157,7 @@ func (m *AdminChangeReplicasResponse) Reset() { *m = AdminChangeReplicas func (m *AdminChangeReplicasResponse) String() string { return proto.CompactTextString(m) } func (*AdminChangeReplicasResponse) ProtoMessage() {} func (*AdminChangeReplicasResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{40} + return fileDescriptor_api_831b3c8e16e707a9, []int{40} } func (m *AdminChangeReplicasResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2194,7 +2194,7 @@ func (m *AdminRelocateRangeRequest) Reset() { *m = AdminRelocateRangeReq func (m *AdminRelocateRangeRequest) String() string { return proto.CompactTextString(m) } func (*AdminRelocateRangeRequest) ProtoMessage() {} func (*AdminRelocateRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{41} + return fileDescriptor_api_831b3c8e16e707a9, []int{41} } func (m *AdminRelocateRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2227,7 +2227,7 @@ func (m *AdminRelocateRangeResponse) Reset() { *m = AdminRelocateRangeRe func (m *AdminRelocateRangeResponse) String() string { return proto.CompactTextString(m) } func (*AdminRelocateRangeResponse) ProtoMessage() {} func (*AdminRelocateRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{42} + return fileDescriptor_api_831b3c8e16e707a9, []int{42} } func (m *AdminRelocateRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2266,7 +2266,7 @@ func (m *HeartbeatTxnRequest) Reset() { *m = HeartbeatTxnRequest{} } func (m *HeartbeatTxnRequest) String() string { return proto.CompactTextString(m) } func (*HeartbeatTxnRequest) ProtoMessage() {} func (*HeartbeatTxnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{43} + return fileDescriptor_api_831b3c8e16e707a9, []int{43} } func (m *HeartbeatTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2303,7 +2303,7 @@ func (m *HeartbeatTxnResponse) Reset() { *m = HeartbeatTxnResponse{} } func (m *HeartbeatTxnResponse) String() string { return proto.CompactTextString(m) } func (*HeartbeatTxnResponse) ProtoMessage() {} func (*HeartbeatTxnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{44} + return fileDescriptor_api_831b3c8e16e707a9, []int{44} } func (m *HeartbeatTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2341,7 +2341,7 @@ func (m *GCRequest) Reset() { *m = GCRequest{} } func (m *GCRequest) String() string { return proto.CompactTextString(m) } func (*GCRequest) ProtoMessage() {} func (*GCRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{45} + return fileDescriptor_api_831b3c8e16e707a9, []int{45} } func (m *GCRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2375,7 +2375,7 @@ func (m *GCRequest_GCKey) Reset() { *m = GCRequest_GCKey{} } func (m *GCRequest_GCKey) String() string { return proto.CompactTextString(m) } func (*GCRequest_GCKey) ProtoMessage() {} func (*GCRequest_GCKey) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{45, 0} + return fileDescriptor_api_831b3c8e16e707a9, []int{45, 0} } func (m *GCRequest_GCKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2409,7 +2409,7 @@ func (m *GCResponse) Reset() { *m = GCResponse{} } func (m *GCResponse) String() string { return proto.CompactTextString(m) } func (*GCResponse) ProtoMessage() {} func (*GCResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{46} + return fileDescriptor_api_831b3c8e16e707a9, []int{46} } func (m *GCResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2478,7 +2478,7 @@ func (m *PushTxnRequest) Reset() { *m = PushTxnRequest{} } func (m *PushTxnRequest) String() string { return proto.CompactTextString(m) } func (*PushTxnRequest) ProtoMessage() {} func (*PushTxnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{47} + return fileDescriptor_api_831b3c8e16e707a9, []int{47} } func (m *PushTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2521,7 +2521,7 @@ func (m *PushTxnResponse) Reset() { *m = PushTxnResponse{} } func (m *PushTxnResponse) String() string { return proto.CompactTextString(m) } func (*PushTxnResponse) ProtoMessage() {} func (*PushTxnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{48} + return fileDescriptor_api_831b3c8e16e707a9, []int{48} } func (m *PushTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2568,7 +2568,7 @@ func (m *RecoverTxnRequest) Reset() { *m = RecoverTxnRequest{} } func (m *RecoverTxnRequest) String() string { return proto.CompactTextString(m) } func (*RecoverTxnRequest) ProtoMessage() {} func (*RecoverTxnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{49} + return fileDescriptor_api_831b3c8e16e707a9, []int{49} } func (m *RecoverTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2604,7 +2604,7 @@ func (m *RecoverTxnResponse) Reset() { *m = RecoverTxnResponse{} } func (m *RecoverTxnResponse) String() string { return proto.CompactTextString(m) } func (*RecoverTxnResponse) ProtoMessage() {} func (*RecoverTxnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{50} + return fileDescriptor_api_831b3c8e16e707a9, []int{50} } func (m *RecoverTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2648,7 +2648,7 @@ func (m *QueryTxnRequest) Reset() { *m = QueryTxnRequest{} } func (m *QueryTxnRequest) String() string { return proto.CompactTextString(m) } func (*QueryTxnRequest) ProtoMessage() {} func (*QueryTxnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{51} + return fileDescriptor_api_831b3c8e16e707a9, []int{51} } func (m *QueryTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2687,7 +2687,7 @@ func (m *QueryTxnResponse) Reset() { *m = QueryTxnResponse{} } func (m *QueryTxnResponse) String() string { return proto.CompactTextString(m) } func (*QueryTxnResponse) ProtoMessage() {} func (*QueryTxnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{52} + return fileDescriptor_api_831b3c8e16e707a9, []int{52} } func (m *QueryTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2747,7 +2747,7 @@ func (m *QueryIntentRequest) Reset() { *m = QueryIntentRequest{} } func (m *QueryIntentRequest) String() string { return proto.CompactTextString(m) } func (*QueryIntentRequest) ProtoMessage() {} func (*QueryIntentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{53} + return fileDescriptor_api_831b3c8e16e707a9, []int{53} } func (m *QueryIntentRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2783,7 +2783,7 @@ func (m *QueryIntentResponse) Reset() { *m = QueryIntentResponse{} } func (m *QueryIntentResponse) String() string { return proto.CompactTextString(m) } func (*QueryIntentResponse) ProtoMessage() {} func (*QueryIntentResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{54} + return fileDescriptor_api_831b3c8e16e707a9, []int{54} } func (m *QueryIntentResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2829,7 +2829,7 @@ func (m *ResolveIntentRequest) Reset() { *m = ResolveIntentRequest{} } func (m *ResolveIntentRequest) String() string { return proto.CompactTextString(m) } func (*ResolveIntentRequest) ProtoMessage() {} func (*ResolveIntentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{55} + return fileDescriptor_api_831b3c8e16e707a9, []int{55} } func (m *ResolveIntentRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2864,7 +2864,7 @@ func (m *ResolveIntentResponse) Reset() { *m = ResolveIntentResponse{} } func (m *ResolveIntentResponse) String() string { return proto.CompactTextString(m) } func (*ResolveIntentResponse) ProtoMessage() {} func (*ResolveIntentResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{56} + return fileDescriptor_api_831b3c8e16e707a9, []int{56} } func (m *ResolveIntentResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2914,7 +2914,7 @@ func (m *ResolveIntentRangeRequest) Reset() { *m = ResolveIntentRangeReq func (m *ResolveIntentRangeRequest) String() string { return proto.CompactTextString(m) } func (*ResolveIntentRangeRequest) ProtoMessage() {} func (*ResolveIntentRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{57} + return fileDescriptor_api_831b3c8e16e707a9, []int{57} } func (m *ResolveIntentRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2949,7 +2949,7 @@ func (m *ResolveIntentRangeResponse) Reset() { *m = ResolveIntentRangeRe func (m *ResolveIntentRangeResponse) String() string { return proto.CompactTextString(m) } func (*ResolveIntentRangeResponse) ProtoMessage() {} func (*ResolveIntentRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{58} + return fileDescriptor_api_831b3c8e16e707a9, []int{58} } func (m *ResolveIntentRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2986,7 +2986,7 @@ func (m *MergeRequest) Reset() { *m = MergeRequest{} } func (m *MergeRequest) String() string { return proto.CompactTextString(m) } func (*MergeRequest) ProtoMessage() {} func (*MergeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{59} + return fileDescriptor_api_831b3c8e16e707a9, []int{59} } func (m *MergeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3020,7 +3020,7 @@ func (m *MergeResponse) Reset() { *m = MergeResponse{} } func (m *MergeResponse) String() string { return proto.CompactTextString(m) } func (*MergeResponse) ProtoMessage() {} func (*MergeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{60} + return fileDescriptor_api_831b3c8e16e707a9, []int{60} } func (m *MergeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3065,7 +3065,7 @@ func (m *TruncateLogRequest) Reset() { *m = TruncateLogRequest{} } func (m *TruncateLogRequest) String() string { return proto.CompactTextString(m) } func (*TruncateLogRequest) ProtoMessage() {} func (*TruncateLogRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{61} + return fileDescriptor_api_831b3c8e16e707a9, []int{61} } func (m *TruncateLogRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3099,7 +3099,7 @@ func (m *TruncateLogResponse) Reset() { *m = TruncateLogResponse{} } func (m *TruncateLogResponse) String() string { return proto.CompactTextString(m) } func (*TruncateLogResponse) ProtoMessage() {} func (*TruncateLogResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{62} + return fileDescriptor_api_831b3c8e16e707a9, []int{62} } func (m *TruncateLogResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3143,7 +3143,7 @@ func (m *RequestLeaseRequest) Reset() { *m = RequestLeaseRequest{} } func (m *RequestLeaseRequest) String() string { return proto.CompactTextString(m) } func (*RequestLeaseRequest) ProtoMessage() {} func (*RequestLeaseRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{63} + return fileDescriptor_api_831b3c8e16e707a9, []int{63} } func (m *RequestLeaseRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3192,7 +3192,7 @@ func (m *TransferLeaseRequest) Reset() { *m = TransferLeaseRequest{} } func (m *TransferLeaseRequest) String() string { return proto.CompactTextString(m) } func (*TransferLeaseRequest) ProtoMessage() {} func (*TransferLeaseRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{64} + return fileDescriptor_api_831b3c8e16e707a9, []int{64} } func (m *TransferLeaseRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3229,7 +3229,7 @@ func (m *LeaseInfoRequest) Reset() { *m = LeaseInfoRequest{} } func (m *LeaseInfoRequest) String() string { return proto.CompactTextString(m) } func (*LeaseInfoRequest) ProtoMessage() {} func (*LeaseInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{65} + return fileDescriptor_api_831b3c8e16e707a9, []int{65} } func (m *LeaseInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3266,7 +3266,7 @@ func (m *LeaseInfoResponse) Reset() { *m = LeaseInfoResponse{} } func (m *LeaseInfoResponse) String() string { return proto.CompactTextString(m) } func (*LeaseInfoResponse) ProtoMessage() {} func (*LeaseInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{66} + return fileDescriptor_api_831b3c8e16e707a9, []int{66} } func (m *LeaseInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3301,7 +3301,7 @@ func (m *RequestLeaseResponse) Reset() { *m = RequestLeaseResponse{} } func (m *RequestLeaseResponse) String() string { return proto.CompactTextString(m) } func (*RequestLeaseResponse) ProtoMessage() {} func (*RequestLeaseResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{67} + return fileDescriptor_api_831b3c8e16e707a9, []int{67} } func (m *RequestLeaseResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3356,7 +3356,7 @@ func (m *ComputeChecksumRequest) Reset() { *m = ComputeChecksumRequest{} func (m *ComputeChecksumRequest) String() string { return proto.CompactTextString(m) } func (*ComputeChecksumRequest) ProtoMessage() {} func (*ComputeChecksumRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{68} + return fileDescriptor_api_831b3c8e16e707a9, []int{68} } func (m *ComputeChecksumRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3393,7 +3393,7 @@ func (m *ComputeChecksumResponse) Reset() { *m = ComputeChecksumResponse func (m *ComputeChecksumResponse) String() string { return proto.CompactTextString(m) } func (*ComputeChecksumResponse) ProtoMessage() {} func (*ComputeChecksumResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{69} + return fileDescriptor_api_831b3c8e16e707a9, []int{69} } func (m *ComputeChecksumResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3433,7 +3433,7 @@ func (m *ExternalStorage) Reset() { *m = ExternalStorage{} } func (m *ExternalStorage) String() string { return proto.CompactTextString(m) } func (*ExternalStorage) ProtoMessage() {} func (*ExternalStorage) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{70} + return fileDescriptor_api_831b3c8e16e707a9, []int{70} } func (m *ExternalStorage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3467,7 +3467,7 @@ func (m *ExternalStorage_LocalFilePath) Reset() { *m = ExternalStorage_L func (m *ExternalStorage_LocalFilePath) String() string { return proto.CompactTextString(m) } func (*ExternalStorage_LocalFilePath) ProtoMessage() {} func (*ExternalStorage_LocalFilePath) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{70, 0} + return fileDescriptor_api_831b3c8e16e707a9, []int{70, 0} } func (m *ExternalStorage_LocalFilePath) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3500,7 +3500,7 @@ func (m *ExternalStorage_Http) Reset() { *m = ExternalStorage_Http{} } func (m *ExternalStorage_Http) String() string { return proto.CompactTextString(m) } func (*ExternalStorage_Http) ProtoMessage() {} func (*ExternalStorage_Http) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{70, 1} + return fileDescriptor_api_831b3c8e16e707a9, []int{70, 1} } func (m *ExternalStorage_Http) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3540,7 +3540,7 @@ func (m *ExternalStorage_S3) Reset() { *m = ExternalStorage_S3{} } func (m *ExternalStorage_S3) String() string { return proto.CompactTextString(m) } func (*ExternalStorage_S3) ProtoMessage() {} func (*ExternalStorage_S3) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{70, 2} + return fileDescriptor_api_831b3c8e16e707a9, []int{70, 2} } func (m *ExternalStorage_S3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3579,7 +3579,7 @@ func (m *ExternalStorage_GCS) Reset() { *m = ExternalStorage_GCS{} } func (m *ExternalStorage_GCS) String() string { return proto.CompactTextString(m) } func (*ExternalStorage_GCS) ProtoMessage() {} func (*ExternalStorage_GCS) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{70, 3} + return fileDescriptor_api_831b3c8e16e707a9, []int{70, 3} } func (m *ExternalStorage_GCS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3615,7 +3615,7 @@ func (m *ExternalStorage_Azure) Reset() { *m = ExternalStorage_Azure{} } func (m *ExternalStorage_Azure) String() string { return proto.CompactTextString(m) } func (*ExternalStorage_Azure) ProtoMessage() {} func (*ExternalStorage_Azure) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{70, 4} + return fileDescriptor_api_831b3c8e16e707a9, []int{70, 4} } func (m *ExternalStorage_Azure) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3654,7 +3654,7 @@ func (m *ExternalStorage_Workload) Reset() { *m = ExternalStorage_Worklo func (m *ExternalStorage_Workload) String() string { return proto.CompactTextString(m) } func (*ExternalStorage_Workload) ProtoMessage() {} func (*ExternalStorage_Workload) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{70, 5} + return fileDescriptor_api_831b3c8e16e707a9, []int{70, 5} } func (m *ExternalStorage_Workload) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3694,7 +3694,7 @@ func (m *ExternalStorage_FileTable) Reset() { *m = ExternalStorage_FileT func (m *ExternalStorage_FileTable) String() string { return proto.CompactTextString(m) } func (*ExternalStorage_FileTable) ProtoMessage() {} func (*ExternalStorage_FileTable) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{70, 6} + return fileDescriptor_api_831b3c8e16e707a9, []int{70, 6} } func (m *ExternalStorage_FileTable) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3734,7 +3734,7 @@ func (m *WriteBatchRequest) Reset() { *m = WriteBatchRequest{} } func (m *WriteBatchRequest) String() string { return proto.CompactTextString(m) } func (*WriteBatchRequest) ProtoMessage() {} func (*WriteBatchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{71} + return fileDescriptor_api_831b3c8e16e707a9, []int{71} } func (m *WriteBatchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3768,7 +3768,7 @@ func (m *WriteBatchResponse) Reset() { *m = WriteBatchResponse{} } func (m *WriteBatchResponse) String() string { return proto.CompactTextString(m) } func (*WriteBatchResponse) ProtoMessage() {} func (*WriteBatchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{72} + return fileDescriptor_api_831b3c8e16e707a9, []int{72} } func (m *WriteBatchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3804,7 +3804,7 @@ func (m *FileEncryptionOptions) Reset() { *m = FileEncryptionOptions{} } func (m *FileEncryptionOptions) String() string { return proto.CompactTextString(m) } func (*FileEncryptionOptions) ProtoMessage() {} func (*FileEncryptionOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{73} + return fileDescriptor_api_831b3c8e16e707a9, []int{73} } func (m *FileEncryptionOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3874,7 +3874,7 @@ func (m *ExportRequest) Reset() { *m = ExportRequest{} } func (m *ExportRequest) String() string { return proto.CompactTextString(m) } func (*ExportRequest) ProtoMessage() {} func (*ExportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{74} + return fileDescriptor_api_831b3c8e16e707a9, []int{74} } func (m *ExportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3926,7 +3926,7 @@ func (m *BulkOpSummary) Reset() { *m = BulkOpSummary{} } func (m *BulkOpSummary) String() string { return proto.CompactTextString(m) } func (*BulkOpSummary) ProtoMessage() {} func (*BulkOpSummary) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{75} + return fileDescriptor_api_831b3c8e16e707a9, []int{75} } func (m *BulkOpSummary) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3962,7 +3962,7 @@ func (m *ExportResponse) Reset() { *m = ExportResponse{} } func (m *ExportResponse) String() string { return proto.CompactTextString(m) } func (*ExportResponse) ProtoMessage() {} func (*ExportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{76} + return fileDescriptor_api_831b3c8e16e707a9, []int{76} } func (m *ExportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4002,7 +4002,7 @@ func (m *ExportResponse_File) Reset() { *m = ExportResponse_File{} } func (m *ExportResponse_File) String() string { return proto.CompactTextString(m) } func (*ExportResponse_File) ProtoMessage() {} func (*ExportResponse_File) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{76, 0} + return fileDescriptor_api_831b3c8e16e707a9, []int{76, 0} } func (m *ExportResponse_File) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4053,7 +4053,7 @@ func (m *ImportRequest) Reset() { *m = ImportRequest{} } func (m *ImportRequest) String() string { return proto.CompactTextString(m) } func (*ImportRequest) ProtoMessage() {} func (*ImportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{77} + return fileDescriptor_api_831b3c8e16e707a9, []int{77} } func (m *ImportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4088,7 +4088,7 @@ func (m *ImportRequest_File) Reset() { *m = ImportRequest_File{} } func (m *ImportRequest_File) String() string { return proto.CompactTextString(m) } func (*ImportRequest_File) ProtoMessage() {} func (*ImportRequest_File) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{77, 0} + return fileDescriptor_api_831b3c8e16e707a9, []int{77, 0} } func (m *ImportRequest_File) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4124,7 +4124,7 @@ func (m *ImportRequest_TableRekey) Reset() { *m = ImportRequest_TableRek func (m *ImportRequest_TableRekey) String() string { return proto.CompactTextString(m) } func (*ImportRequest_TableRekey) ProtoMessage() {} func (*ImportRequest_TableRekey) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{77, 1} + return fileDescriptor_api_831b3c8e16e707a9, []int{77, 1} } func (m *ImportRequest_TableRekey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4159,7 +4159,7 @@ func (m *ImportResponse) Reset() { *m = ImportResponse{} } func (m *ImportResponse) String() string { return proto.CompactTextString(m) } func (*ImportResponse) ProtoMessage() {} func (*ImportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{78} + return fileDescriptor_api_831b3c8e16e707a9, []int{78} } func (m *ImportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4197,7 +4197,7 @@ func (m *AdminScatterRequest) Reset() { *m = AdminScatterRequest{} } func (m *AdminScatterRequest) String() string { return proto.CompactTextString(m) } func (*AdminScatterRequest) ProtoMessage() {} func (*AdminScatterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{79} + return fileDescriptor_api_831b3c8e16e707a9, []int{79} } func (m *AdminScatterRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4234,7 +4234,7 @@ func (m *AdminScatterResponse) Reset() { *m = AdminScatterResponse{} } func (m *AdminScatterResponse) String() string { return proto.CompactTextString(m) } func (*AdminScatterResponse) ProtoMessage() {} func (*AdminScatterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{80} + return fileDescriptor_api_831b3c8e16e707a9, []int{80} } func (m *AdminScatterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4267,7 +4267,7 @@ func (m *AdminScatterResponse_Range) Reset() { *m = AdminScatterResponse func (m *AdminScatterResponse_Range) String() string { return proto.CompactTextString(m) } func (*AdminScatterResponse_Range) ProtoMessage() {} func (*AdminScatterResponse_Range) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{80, 0} + return fileDescriptor_api_831b3c8e16e707a9, []int{80, 0} } func (m *AdminScatterResponse_Range) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4312,7 +4312,7 @@ func (m *AdminVerifyProtectedTimestampRequest) Reset() { *m = AdminVerif func (m *AdminVerifyProtectedTimestampRequest) String() string { return proto.CompactTextString(m) } func (*AdminVerifyProtectedTimestampRequest) ProtoMessage() {} func (*AdminVerifyProtectedTimestampRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{81} + return fileDescriptor_api_831b3c8e16e707a9, []int{81} } func (m *AdminVerifyProtectedTimestampRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4350,7 +4350,7 @@ func (m *AdminVerifyProtectedTimestampResponse) Reset() { *m = AdminVeri func (m *AdminVerifyProtectedTimestampResponse) String() string { return proto.CompactTextString(m) } func (*AdminVerifyProtectedTimestampResponse) ProtoMessage() {} func (*AdminVerifyProtectedTimestampResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{82} + return fileDescriptor_api_831b3c8e16e707a9, []int{82} } func (m *AdminVerifyProtectedTimestampResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4403,7 +4403,7 @@ func (m *AddSSTableRequest) Reset() { *m = AddSSTableRequest{} } func (m *AddSSTableRequest) String() string { return proto.CompactTextString(m) } func (*AddSSTableRequest) ProtoMessage() {} func (*AddSSTableRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{83} + return fileDescriptor_api_831b3c8e16e707a9, []int{83} } func (m *AddSSTableRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4437,7 +4437,7 @@ func (m *AddSSTableResponse) Reset() { *m = AddSSTableResponse{} } func (m *AddSSTableResponse) String() string { return proto.CompactTextString(m) } func (*AddSSTableResponse) ProtoMessage() {} func (*AddSSTableResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{84} + return fileDescriptor_api_831b3c8e16e707a9, []int{84} } func (m *AddSSTableResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4481,7 +4481,7 @@ func (m *RefreshRequest) Reset() { *m = RefreshRequest{} } func (m *RefreshRequest) String() string { return proto.CompactTextString(m) } func (*RefreshRequest) ProtoMessage() {} func (*RefreshRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{85} + return fileDescriptor_api_831b3c8e16e707a9, []int{85} } func (m *RefreshRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4515,7 +4515,7 @@ func (m *RefreshResponse) Reset() { *m = RefreshResponse{} } func (m *RefreshResponse) String() string { return proto.CompactTextString(m) } func (*RefreshResponse) ProtoMessage() {} func (*RefreshResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{86} + return fileDescriptor_api_831b3c8e16e707a9, []int{86} } func (m *RefreshResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4554,7 +4554,7 @@ func (m *RefreshRangeRequest) Reset() { *m = RefreshRangeRequest{} } func (m *RefreshRangeRequest) String() string { return proto.CompactTextString(m) } func (*RefreshRangeRequest) ProtoMessage() {} func (*RefreshRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{87} + return fileDescriptor_api_831b3c8e16e707a9, []int{87} } func (m *RefreshRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4588,7 +4588,7 @@ func (m *RefreshRangeResponse) Reset() { *m = RefreshRangeResponse{} } func (m *RefreshRangeResponse) String() string { return proto.CompactTextString(m) } func (*RefreshRangeResponse) ProtoMessage() {} func (*RefreshRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{88} + return fileDescriptor_api_831b3c8e16e707a9, []int{88} } func (m *RefreshRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4637,7 +4637,7 @@ func (m *SubsumeRequest) Reset() { *m = SubsumeRequest{} } func (m *SubsumeRequest) String() string { return proto.CompactTextString(m) } func (*SubsumeRequest) ProtoMessage() {} func (*SubsumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{89} + return fileDescriptor_api_831b3c8e16e707a9, []int{89} } func (m *SubsumeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4686,7 +4686,7 @@ func (m *SubsumeResponse) Reset() { *m = SubsumeResponse{} } func (m *SubsumeResponse) String() string { return proto.CompactTextString(m) } func (*SubsumeResponse) ProtoMessage() {} func (*SubsumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{90} + return fileDescriptor_api_831b3c8e16e707a9, []int{90} } func (m *SubsumeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4721,7 +4721,7 @@ func (m *RangeStatsRequest) Reset() { *m = RangeStatsRequest{} } func (m *RangeStatsRequest) String() string { return proto.CompactTextString(m) } func (*RangeStatsRequest) ProtoMessage() {} func (*RangeStatsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{91} + return fileDescriptor_api_831b3c8e16e707a9, []int{91} } func (m *RangeStatsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4763,7 +4763,7 @@ func (m *RangeStatsResponse) Reset() { *m = RangeStatsResponse{} } func (m *RangeStatsResponse) String() string { return proto.CompactTextString(m) } func (*RangeStatsResponse) ProtoMessage() {} func (*RangeStatsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{92} + return fileDescriptor_api_831b3c8e16e707a9, []int{92} } func (m *RangeStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4846,7 +4846,7 @@ func (m *RequestUnion) Reset() { *m = RequestUnion{} } func (m *RequestUnion) String() string { return proto.CompactTextString(m) } func (*RequestUnion) ProtoMessage() {} func (*RequestUnion) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{93} + return fileDescriptor_api_831b3c8e16e707a9, []int{93} } func (m *RequestUnion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6296,7 +6296,7 @@ func (m *ResponseUnion) Reset() { *m = ResponseUnion{} } func (m *ResponseUnion) String() string { return proto.CompactTextString(m) } func (*ResponseUnion) ProtoMessage() {} func (*ResponseUnion) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{94} + return fileDescriptor_api_831b3c8e16e707a9, []int{94} } func (m *ResponseUnion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7700,6 +7700,15 @@ type Header struct { // operations. The default is CONSISTENT. This value is ignored for // write operations. ReadConsistency ReadConsistencyType `protobuf:"varint,6,opt,name=read_consistency,json=readConsistency,proto3,enum=cockroach.roachpb.ReadConsistencyType" json:"read_consistency,omitempty"` + // wait_policy specifies the desried behavior for the batch request if it + // encounters a conflicting lock held by another active transaction. + // + // If an Error wait policy is set and a conflicting lock held by an active + // transaction is encountered, a WriteIntentError will be returned. + // + // If the desired behavior is to block on the conflicting lock up to some + // maximum duration, use the Block wait policy and set a context timeout. + WaitPolicy lock.WaitPolicy `protobuf:"varint,18,opt,name=wait_policy,json=waitPolicy,proto3,enum=cockroach.kv.kvserver.concurrency.lock.WaitPolicy" json:"wait_policy,omitempty"` // If set to a non-zero value, the total number of keys touched by requests in // the batch is limited. A resume span will be provided on the response of the // requests that were not able to run to completion before the limit was @@ -7822,7 +7831,7 @@ func (m *Header) Reset() { *m = Header{} } func (m *Header) String() string { return proto.CompactTextString(m) } func (*Header) ProtoMessage() {} func (*Header) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{95} + return fileDescriptor_api_831b3c8e16e707a9, []int{95} } func (m *Header) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7860,7 +7869,7 @@ func (m *ClientRangeInfo) Reset() { *m = ClientRangeInfo{} } func (m *ClientRangeInfo) String() string { return proto.CompactTextString(m) } func (*ClientRangeInfo) ProtoMessage() {} func (*ClientRangeInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{96} + return fileDescriptor_api_831b3c8e16e707a9, []int{96} } func (m *ClientRangeInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7896,7 +7905,7 @@ type BatchRequest struct { func (m *BatchRequest) Reset() { *m = BatchRequest{} } func (*BatchRequest) ProtoMessage() {} func (*BatchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{97} + return fileDescriptor_api_831b3c8e16e707a9, []int{97} } func (m *BatchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7933,7 +7942,7 @@ type BatchResponse struct { func (m *BatchResponse) Reset() { *m = BatchResponse{} } func (*BatchResponse) ProtoMessage() {} func (*BatchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{98} + return fileDescriptor_api_831b3c8e16e707a9, []int{98} } func (m *BatchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8007,7 +8016,7 @@ func (m *BatchResponse_Header) Reset() { *m = BatchResponse_Header{} } func (m *BatchResponse_Header) String() string { return proto.CompactTextString(m) } func (*BatchResponse_Header) ProtoMessage() {} func (*BatchResponse_Header) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{98, 0} + return fileDescriptor_api_831b3c8e16e707a9, []int{98, 0} } func (m *BatchResponse_Header) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8045,7 +8054,7 @@ func (m *RangeLookupRequest) Reset() { *m = RangeLookupRequest{} } func (m *RangeLookupRequest) String() string { return proto.CompactTextString(m) } func (*RangeLookupRequest) ProtoMessage() {} func (*RangeLookupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{99} + return fileDescriptor_api_831b3c8e16e707a9, []int{99} } func (m *RangeLookupRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8083,7 +8092,7 @@ func (m *RangeLookupResponse) Reset() { *m = RangeLookupResponse{} } func (m *RangeLookupResponse) String() string { return proto.CompactTextString(m) } func (*RangeLookupResponse) ProtoMessage() {} func (*RangeLookupResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{100} + return fileDescriptor_api_831b3c8e16e707a9, []int{100} } func (m *RangeLookupResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8122,7 +8131,7 @@ func (m *RangeFeedRequest) Reset() { *m = RangeFeedRequest{} } func (m *RangeFeedRequest) String() string { return proto.CompactTextString(m) } func (*RangeFeedRequest) ProtoMessage() {} func (*RangeFeedRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{101} + return fileDescriptor_api_831b3c8e16e707a9, []int{101} } func (m *RangeFeedRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8163,7 +8172,7 @@ func (m *RangeFeedValue) Reset() { *m = RangeFeedValue{} } func (m *RangeFeedValue) String() string { return proto.CompactTextString(m) } func (*RangeFeedValue) ProtoMessage() {} func (*RangeFeedValue) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{102} + return fileDescriptor_api_831b3c8e16e707a9, []int{102} } func (m *RangeFeedValue) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8204,7 +8213,7 @@ func (m *RangeFeedCheckpoint) Reset() { *m = RangeFeedCheckpoint{} } func (m *RangeFeedCheckpoint) String() string { return proto.CompactTextString(m) } func (*RangeFeedCheckpoint) ProtoMessage() {} func (*RangeFeedCheckpoint) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{103} + return fileDescriptor_api_831b3c8e16e707a9, []int{103} } func (m *RangeFeedCheckpoint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8241,7 +8250,7 @@ func (m *RangeFeedError) Reset() { *m = RangeFeedError{} } func (m *RangeFeedError) String() string { return proto.CompactTextString(m) } func (*RangeFeedError) ProtoMessage() {} func (*RangeFeedError) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{104} + return fileDescriptor_api_831b3c8e16e707a9, []int{104} } func (m *RangeFeedError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8278,7 +8287,7 @@ func (m *RangeFeedEvent) Reset() { *m = RangeFeedEvent{} } func (m *RangeFeedEvent) String() string { return proto.CompactTextString(m) } func (*RangeFeedEvent) ProtoMessage() {} func (*RangeFeedEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{105} + return fileDescriptor_api_831b3c8e16e707a9, []int{105} } func (m *RangeFeedEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8319,7 +8328,7 @@ func (m *GossipSubscriptionRequest) Reset() { *m = GossipSubscriptionReq func (m *GossipSubscriptionRequest) String() string { return proto.CompactTextString(m) } func (*GossipSubscriptionRequest) ProtoMessage() {} func (*GossipSubscriptionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{106} + return fileDescriptor_api_831b3c8e16e707a9, []int{106} } func (m *GossipSubscriptionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8359,7 +8368,7 @@ func (m *GossipSubscriptionEvent) Reset() { *m = GossipSubscriptionEvent func (m *GossipSubscriptionEvent) String() string { return proto.CompactTextString(m) } func (*GossipSubscriptionEvent) ProtoMessage() {} func (*GossipSubscriptionEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_api_d09930b9681a1598, []int{107} + return fileDescriptor_api_831b3c8e16e707a9, []int{107} } func (m *GossipSubscriptionEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16502,6 +16511,13 @@ func (m *Header) MarshalTo(dAtA []byte) (int, error) { } i += n253 } + if m.WaitPolicy != 0 { + dAtA[i] = 0x90 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.WaitPolicy)) + } return i, nil } @@ -20047,6 +20063,9 @@ func (m *Header) Size() (n int) { l = m.ClientRangeInfo.Size() n += 2 + l + sovApi(uint64(l)) } + if m.WaitPolicy != 0 { + n += 2 + sovApi(uint64(m.WaitPolicy)) + } return n } @@ -37328,6 +37347,25 @@ func (m *Header) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 18: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WaitPolicy", wireType) + } + m.WaitPolicy = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WaitPolicy |= (lock.WaitPolicy(b) & 0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -39146,495 +39184,497 @@ var ( ErrIntOverflowApi = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("roachpb/api.proto", fileDescriptor_api_d09930b9681a1598) } - -var fileDescriptor_api_d09930b9681a1598 = []byte{ - // 7786 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x6d, 0x6c, 0x23, 0xc7, - 0x79, 0xbf, 0x96, 0xa4, 0x24, 0xf2, 0x21, 0x45, 0x51, 0x23, 0xdd, 0x1d, 0x4f, 0x67, 0x4b, 0x3a, - 0xfa, 0xde, 0x7c, 0xb1, 0x25, 0xdf, 0x9d, 0xfd, 0xb7, 0xe3, 0x73, 0x9c, 0x48, 0x14, 0xef, 0x28, - 0xe9, 0xa4, 0xd3, 0x2d, 0xa9, 0x73, 0xec, 0xc4, 0xff, 0xcd, 0x6a, 0x77, 0x44, 0x6d, 0x44, 0xee, - 0xf2, 0x76, 0x97, 0x7a, 0x39, 0xe0, 0x0f, 0xe4, 0xff, 0x86, 0x14, 0x41, 0x61, 0xf4, 0x43, 0x5b, - 0x14, 0x4d, 0x03, 0x1b, 0x48, 0x81, 0x14, 0x08, 0x5c, 0x14, 0xfd, 0x50, 0xa0, 0x45, 0xfa, 0xf2, - 0x21, 0x05, 0xdc, 0x20, 0x05, 0xd2, 0x02, 0x6d, 0x82, 0x02, 0x15, 0x9a, 0x0b, 0x50, 0x14, 0xfd, - 0x50, 0xa0, 0xfd, 0xd0, 0x02, 0x07, 0xb4, 0x28, 0xe6, 0x65, 0xdf, 0xc8, 0xe5, 0x8b, 0xe4, 0x75, - 0x6b, 0x20, 0x5f, 0x08, 0xee, 0x33, 0xf3, 0x3c, 0x3b, 0xf3, 0xcc, 0xcc, 0x33, 0xcf, 0x6f, 0xe6, - 0x99, 0x59, 0x98, 0x30, 0x0d, 0x59, 0xd9, 0x6d, 0x6e, 0x2f, 0xc8, 0x4d, 0x6d, 0xbe, 0x69, 0x1a, - 0xb6, 0x81, 0x26, 0x14, 0x43, 0xd9, 0xa3, 0xe4, 0x79, 0x9e, 0x38, 0x7d, 0x7d, 0x6f, 0x7f, 0x61, - 0x6f, 0xdf, 0xc2, 0xe6, 0x3e, 0x36, 0x17, 0x14, 0x43, 0x57, 0x5a, 0xa6, 0x89, 0x75, 0xe5, 0x68, - 0xa1, 0x6e, 0x28, 0x7b, 0xf4, 0x47, 0xd3, 0x6b, 0x8c, 0x7d, 0x1a, 0x39, 0x12, 0x55, 0xd9, 0x96, - 0x39, 0x6d, 0xca, 0xa1, 0x61, 0xd3, 0x34, 0x4c, 0x8b, 0x53, 0xcf, 0x3a, 0xd4, 0x06, 0xb6, 0x65, - 0x5f, 0xee, 0x0b, 0x96, 0x6d, 0x98, 0x72, 0x0d, 0x2f, 0x60, 0xbd, 0xa6, 0xe9, 0x98, 0x64, 0xd8, - 0x57, 0x14, 0x9e, 0xf8, 0x4c, 0x68, 0xe2, 0x2d, 0x9e, 0x9a, 0x6f, 0xd9, 0x5a, 0x7d, 0x61, 0xb7, - 0xae, 0x2c, 0xd8, 0x5a, 0x03, 0x5b, 0xb6, 0xdc, 0x68, 0xf2, 0x94, 0x39, 0x9a, 0x62, 0x9b, 0xb2, - 0xa2, 0xe9, 0xb5, 0x05, 0x13, 0x2b, 0x86, 0xa9, 0x62, 0x55, 0xb2, 0x9a, 0xb2, 0xee, 0x14, 0xb2, - 0x66, 0xd4, 0x0c, 0xfa, 0x77, 0x81, 0xfc, 0x63, 0xd4, 0xc2, 0xf7, 0x04, 0x18, 0x13, 0xf1, 0xa3, - 0x16, 0xb6, 0xec, 0x32, 0x96, 0x55, 0x6c, 0xa2, 0xf3, 0x10, 0xdf, 0xc3, 0x47, 0xf9, 0xf8, 0x9c, - 0x70, 0x2d, 0xb3, 0x34, 0xfa, 0xf4, 0x78, 0x36, 0xbe, 0x86, 0x8f, 0x44, 0x42, 0x43, 0x73, 0x30, - 0x8a, 0x75, 0x55, 0x22, 0xc9, 0x89, 0x60, 0xf2, 0x08, 0xd6, 0xd5, 0x35, 0x7c, 0x84, 0xbe, 0x0c, - 0x49, 0x8b, 0x48, 0xd3, 0x15, 0x9c, 0x1f, 0x9e, 0x13, 0xae, 0x0d, 0x2f, 0x7d, 0xe1, 0xe9, 0xf1, - 0xec, 0x1b, 0x35, 0xcd, 0xde, 0x6d, 0x6d, 0xcf, 0x2b, 0x46, 0x63, 0xc1, 0xd5, 0xbe, 0xba, 0xed, - 0xfd, 0x5f, 0x68, 0xee, 0xd5, 0x16, 0xda, 0x6b, 0x3e, 0x5f, 0x3d, 0xd4, 0x2b, 0xf8, 0x91, 0xe8, - 0x4a, 0x7c, 0x3d, 0xf1, 0x0f, 0x1f, 0xcc, 0x0a, 0xab, 0x89, 0xa4, 0x90, 0x8b, 0xad, 0x26, 0x92, - 0xb1, 0x5c, 0xbc, 0xf0, 0xed, 0x38, 0x64, 0x45, 0x6c, 0x35, 0x0d, 0xdd, 0xc2, 0xbc, 0xfc, 0x2f, - 0x41, 0xdc, 0x3e, 0xd4, 0x69, 0xf9, 0xd3, 0x37, 0x67, 0xe6, 0x3b, 0x5a, 0x7b, 0xbe, 0x6a, 0xca, - 0xba, 0x25, 0x2b, 0xb6, 0x66, 0xe8, 0x22, 0xc9, 0x8a, 0x5e, 0x83, 0xb4, 0x89, 0xad, 0x56, 0x03, - 0x53, 0x75, 0xd1, 0xaa, 0xa5, 0x6f, 0x9e, 0x0b, 0xe1, 0xac, 0x34, 0x65, 0x5d, 0x04, 0x96, 0x97, - 0xfc, 0x47, 0xe7, 0x21, 0xa9, 0xb7, 0x1a, 0x44, 0x21, 0x16, 0xad, 0x6e, 0x5c, 0x1c, 0xd5, 0x5b, - 0x8d, 0x35, 0x7c, 0x64, 0xa1, 0x2f, 0xc2, 0x59, 0x15, 0x37, 0x4d, 0xac, 0xc8, 0x36, 0x56, 0x25, - 0x53, 0xd6, 0x6b, 0x58, 0xd2, 0xf4, 0x1d, 0xc3, 0xca, 0x8f, 0xcc, 0xc5, 0xaf, 0xa5, 0x6f, 0x3e, - 0x13, 0x22, 0x5f, 0x24, 0xb9, 0x56, 0xf4, 0x1d, 0x63, 0x29, 0xf1, 0xd1, 0xf1, 0xec, 0x90, 0x38, - 0xe5, 0x49, 0x70, 0x93, 0x2c, 0x54, 0x81, 0x31, 0x5e, 0x5c, 0x13, 0xcb, 0x96, 0xa1, 0xe7, 0x47, - 0xe7, 0x84, 0x6b, 0xd9, 0x9b, 0xf3, 0x61, 0x02, 0x03, 0xaa, 0x21, 0x8f, 0xad, 0x06, 0x16, 0x29, - 0x97, 0x98, 0x31, 0x7d, 0x4f, 0xe8, 0x02, 0xa4, 0x48, 0x4d, 0xb6, 0x8f, 0x6c, 0x6c, 0xe5, 0x93, - 0xb4, 0x2a, 0xa4, 0x6a, 0x4b, 0xe4, 0xb9, 0xf0, 0x26, 0x64, 0xfc, 0xac, 0x08, 0x41, 0x56, 0x2c, - 0x55, 0xb6, 0xd6, 0x4b, 0xd2, 0xd6, 0xc6, 0xda, 0xc6, 0xfd, 0xb7, 0x36, 0x72, 0x43, 0x68, 0x0a, - 0x72, 0x9c, 0xb6, 0x56, 0x7a, 0x5b, 0xba, 0xb7, 0xb2, 0xbe, 0x52, 0xcd, 0x09, 0xd3, 0x89, 0x5f, - 0xf8, 0xf6, 0xcc, 0x50, 0xe1, 0x21, 0xc0, 0x5d, 0x6c, 0xf3, 0x6e, 0x86, 0x96, 0x60, 0x64, 0x97, - 0x96, 0x27, 0x2f, 0x50, 0x4d, 0xcf, 0x85, 0x16, 0xdc, 0xd7, 0x25, 0x97, 0x92, 0x44, 0x1b, 0x3f, - 0x3a, 0x9e, 0x15, 0x44, 0xce, 0xc9, 0x7a, 0x42, 0xe1, 0x8f, 0x05, 0x48, 0x53, 0xc1, 0xac, 0x96, - 0xa8, 0xd8, 0x26, 0xf9, 0x62, 0x5f, 0x95, 0x74, 0x8a, 0x46, 0xf3, 0x30, 0xbc, 0x2f, 0xd7, 0x5b, - 0x38, 0x1f, 0xa3, 0x32, 0xf2, 0x21, 0x32, 0x1e, 0x92, 0x74, 0x91, 0x65, 0x43, 0xb7, 0x21, 0xa3, - 0xe9, 0x36, 0xd6, 0x6d, 0x89, 0xb1, 0xc5, 0xfb, 0xb0, 0xa5, 0x59, 0x6e, 0xfa, 0x50, 0xf8, 0x03, - 0x01, 0x60, 0xb3, 0x15, 0xa5, 0x6a, 0xd0, 0xcb, 0x03, 0x96, 0x9f, 0xf7, 0x31, 0x5e, 0x8b, 0xb3, - 0x30, 0xa2, 0xe9, 0x75, 0x4d, 0x67, 0xe5, 0x4f, 0x8a, 0xfc, 0x09, 0x4d, 0xc1, 0xf0, 0x76, 0x5d, - 0xd3, 0x55, 0x3a, 0x2a, 0x92, 0x22, 0x7b, 0xe0, 0xea, 0x17, 0x21, 0x4d, 0xcb, 0x1e, 0xa1, 0xf6, - 0x0b, 0x3f, 0x8c, 0xc1, 0x99, 0xa2, 0xa1, 0xab, 0x1a, 0x19, 0x9e, 0x72, 0xfd, 0x53, 0xa1, 0x9b, - 0x55, 0xf0, 0x0d, 0x44, 0x09, 0x1f, 0x36, 0x07, 0x6c, 0x69, 0xe4, 0x71, 0x95, 0x0e, 0x9b, 0x94, - 0x16, 0xae, 0x4f, 0xf4, 0x32, 0x9c, 0x93, 0xeb, 0x75, 0xe3, 0x40, 0xd2, 0x76, 0x24, 0xd5, 0xc0, - 0x96, 0xa4, 0x1b, 0xb6, 0x84, 0x0f, 0x35, 0xcb, 0xa6, 0x66, 0x25, 0x29, 0x4e, 0xd2, 0xe4, 0x95, - 0x9d, 0x65, 0x03, 0x5b, 0x1b, 0x86, 0x5d, 0x22, 0x49, 0x64, 0xcc, 0x92, 0xc2, 0xb0, 0x31, 0x3b, - 0x42, 0x0c, 0xb2, 0x98, 0xc4, 0x87, 0x4d, 0x3a, 0x66, 0x79, 0x13, 0xbd, 0x0b, 0x67, 0xdb, 0xb5, - 0x19, 0x65, 0x6b, 0xfd, 0xa5, 0x00, 0xd9, 0x15, 0x5d, 0xb3, 0x3f, 0x15, 0xcd, 0xe4, 0xaa, 0x36, - 0xee, 0x57, 0xed, 0x75, 0xc8, 0xed, 0xc8, 0x5a, 0xfd, 0xbe, 0x5e, 0x35, 0x1a, 0xdb, 0x96, 0x6d, - 0xe8, 0xd8, 0xe2, 0xba, 0xef, 0xa0, 0x73, 0x9d, 0x3d, 0x84, 0x71, 0xb7, 0x4e, 0x51, 0x2a, 0xeb, - 0x31, 0xe4, 0x56, 0x74, 0xc5, 0xc4, 0x0d, 0xac, 0x47, 0xaa, 0xad, 0x67, 0x20, 0xa5, 0x39, 0x72, - 0xa9, 0xc6, 0xe2, 0xa2, 0x47, 0xe0, 0x75, 0x6a, 0xc1, 0x84, 0xef, 0xdd, 0x51, 0x9a, 0x4b, 0x32, - 0x71, 0xe0, 0x03, 0xc9, 0x6b, 0x2f, 0x32, 0x71, 0xe0, 0x03, 0x66, 0xde, 0xde, 0x86, 0xb1, 0x65, - 0x5c, 0xc7, 0x36, 0x8e, 0xde, 0xf6, 0x6f, 0x41, 0xd6, 0x11, 0x1d, 0x65, 0x23, 0x7d, 0x4b, 0x00, - 0xc4, 0xe5, 0x92, 0x19, 0x37, 0xca, 0x76, 0x9a, 0x25, 0x6e, 0x86, 0xdd, 0x32, 0x75, 0xe6, 0x2f, - 0xb0, 0x5e, 0x0a, 0x8c, 0x44, 0x5d, 0x06, 0xcf, 0x06, 0x27, 0xfc, 0x36, 0xd8, 0x75, 0x7b, 0x88, - 0xc3, 0x73, 0x00, 0x93, 0x81, 0xe2, 0x45, 0xdb, 0x94, 0x09, 0x5a, 0xb2, 0xd8, 0x5c, 0xdc, 0xef, - 0xdb, 0x51, 0x62, 0xe1, 0x5d, 0x98, 0x28, 0xd6, 0xb1, 0x6c, 0x46, 0xad, 0x16, 0xde, 0x9c, 0x6f, - 0x03, 0xf2, 0x8b, 0x8f, 0xb2, 0x49, 0x7f, 0x53, 0x00, 0x24, 0xe2, 0x7d, 0x6c, 0xda, 0x91, 0x37, - 0xe9, 0x32, 0xa4, 0x6d, 0xd9, 0xac, 0x61, 0x5b, 0x22, 0xfe, 0x38, 0x37, 0x57, 0xcf, 0xfa, 0x04, - 0x11, 0xaf, 0x7c, 0x7e, 0xb7, 0xae, 0xcc, 0x57, 0x1d, 0x7f, 0x9d, 0xdb, 0x2c, 0x60, 0x7c, 0x84, - 0xcc, 0x35, 0xf0, 0x0e, 0x4c, 0x06, 0x4a, 0x19, 0xa5, 0x0a, 0xfe, 0x55, 0x80, 0x74, 0x45, 0x91, - 0xf5, 0x28, 0xeb, 0xfe, 0x26, 0xa4, 0x2d, 0x45, 0xd6, 0xa5, 0x1d, 0xc3, 0x6c, 0xc8, 0x36, 0xed, - 0xb2, 0xd9, 0x40, 0xdd, 0x5d, 0xaf, 0x59, 0x91, 0xf5, 0x3b, 0x34, 0x93, 0x08, 0x96, 0xfb, 0x1f, - 0x3d, 0x80, 0xf4, 0x1e, 0x3e, 0x92, 0x38, 0xba, 0xa2, 0xf3, 0x5c, 0xf6, 0xe6, 0x4b, 0x3e, 0xfe, - 0xbd, 0xfd, 0x79, 0x07, 0x94, 0xcd, 0xfb, 0x40, 0xd9, 0x3c, 0xe1, 0x98, 0xaf, 0xd8, 0x26, 0xd6, - 0x6b, 0xf6, 0xae, 0x08, 0x7b, 0xf8, 0xe8, 0x1e, 0x93, 0xe1, 0x1f, 0x28, 0xab, 0x89, 0x64, 0x3c, - 0x97, 0x28, 0xfc, 0x9b, 0x00, 0x19, 0x56, 0xf1, 0x28, 0x07, 0xca, 0x2b, 0x90, 0x30, 0x8d, 0x03, - 0x36, 0x50, 0xd2, 0x37, 0x2f, 0x84, 0x88, 0x58, 0xc3, 0x47, 0xfe, 0x19, 0x8a, 0x66, 0x47, 0x4b, - 0xc0, 0x7d, 0x3f, 0x89, 0x72, 0xc7, 0x07, 0xe5, 0x06, 0xc6, 0x25, 0x12, 0x19, 0x57, 0x61, 0x7c, - 0x5b, 0xb6, 0x95, 0x5d, 0xc9, 0xe4, 0x85, 0x24, 0xb3, 0x59, 0xfc, 0x5a, 0x46, 0xcc, 0x52, 0xb2, - 0x53, 0x74, 0xab, 0xf0, 0xef, 0x4e, 0xaf, 0xb7, 0xf0, 0xcf, 0x65, 0xcb, 0xff, 0x87, 0xc0, 0xc7, - 0x93, 0x53, 0xff, 0x9f, 0xb7, 0x0e, 0xf0, 0x7e, 0x0c, 0xce, 0x15, 0x77, 0xb1, 0xb2, 0x57, 0x34, - 0x74, 0x4b, 0xb3, 0x6c, 0xa2, 0xc1, 0x28, 0x7b, 0xc1, 0x05, 0x48, 0x1d, 0x68, 0xf6, 0xae, 0xa4, - 0x6a, 0x3b, 0x3b, 0xd4, 0xf2, 0x25, 0xc5, 0x24, 0x21, 0x2c, 0x6b, 0x3b, 0x3b, 0xe8, 0x16, 0x24, - 0x1a, 0x86, 0xca, 0x5c, 0xe4, 0xec, 0xcd, 0xd9, 0x10, 0xf1, 0xb4, 0x68, 0x56, 0xab, 0xb1, 0x6e, - 0xa8, 0x58, 0xa4, 0x99, 0xd1, 0x0c, 0x80, 0x42, 0xa8, 0x4d, 0x43, 0xd3, 0x6d, 0x3e, 0x07, 0xfa, - 0x28, 0xa8, 0x0c, 0x29, 0x1b, 0x9b, 0x0d, 0x4d, 0x97, 0x6d, 0x9c, 0x1f, 0xa6, 0xca, 0xbb, 0x14, - 0x5a, 0xf0, 0x66, 0x5d, 0x53, 0xe4, 0x65, 0x6c, 0x29, 0xa6, 0xd6, 0xb4, 0x0d, 0x93, 0x6b, 0xd1, - 0x63, 0xe6, 0x16, 0xf7, 0xbd, 0x04, 0xe4, 0x3b, 0x35, 0x14, 0x65, 0x3f, 0xd9, 0x84, 0x11, 0x82, - 0xb2, 0xeb, 0x36, 0xef, 0x29, 0x37, 0xbb, 0x29, 0x22, 0xa4, 0x04, 0x14, 0xad, 0xd7, 0x6d, 0x5e, - 0x78, 0x2e, 0x67, 0xfa, 0x7b, 0x02, 0x8c, 0xb0, 0x04, 0x74, 0x03, 0x92, 0x7c, 0x59, 0x41, 0xa5, - 0x65, 0x8c, 0x2f, 0x9d, 0x7d, 0x72, 0x3c, 0x3b, 0xca, 0x56, 0x0a, 0x96, 0x9f, 0x7a, 0x7f, 0xc5, - 0x51, 0x9a, 0x6f, 0x45, 0x25, 0x6d, 0x66, 0xd9, 0xb2, 0x69, 0xd3, 0x25, 0x9c, 0x18, 0x43, 0x0c, - 0x94, 0xb0, 0x86, 0x8f, 0xd0, 0x2a, 0x8c, 0x58, 0xb6, 0x6c, 0xb7, 0x2c, 0xde, 0x6a, 0x27, 0x2a, - 0x6c, 0x85, 0x72, 0x8a, 0x5c, 0x02, 0x71, 0x65, 0x54, 0x6c, 0xcb, 0x5a, 0x9d, 0x36, 0x63, 0x4a, - 0xe4, 0x4f, 0x85, 0x6f, 0x0a, 0x30, 0xc2, 0xb2, 0xa2, 0x73, 0x30, 0x29, 0x2e, 0x6e, 0xdc, 0x2d, - 0x49, 0x2b, 0x1b, 0xcb, 0xa5, 0x6a, 0x49, 0x5c, 0x5f, 0xd9, 0x58, 0xac, 0x96, 0x72, 0x43, 0xe8, - 0x2c, 0x20, 0x27, 0xa1, 0x78, 0x7f, 0xa3, 0xb2, 0x52, 0xa9, 0x96, 0x36, 0xaa, 0x39, 0x81, 0xae, - 0x30, 0x50, 0xba, 0x8f, 0x1a, 0x43, 0x97, 0x60, 0xae, 0x9d, 0x2a, 0x55, 0xaa, 0x8b, 0xd5, 0x8a, - 0x54, 0xaa, 0x54, 0x57, 0xd6, 0x17, 0xab, 0xa5, 0xe5, 0x5c, 0xbc, 0x47, 0x2e, 0xf2, 0x12, 0x51, - 0x2c, 0x15, 0xab, 0xb9, 0x44, 0xe1, 0x31, 0x9c, 0x11, 0xb1, 0x62, 0x34, 0x9a, 0x2d, 0x1b, 0x93, - 0x52, 0x5a, 0x51, 0x8e, 0x97, 0x73, 0x30, 0xaa, 0x9a, 0x47, 0x92, 0xd9, 0xd2, 0xf9, 0x68, 0x19, - 0x51, 0xcd, 0x23, 0xb1, 0xa5, 0xf3, 0xce, 0xf8, 0x3b, 0x02, 0x9c, 0x6d, 0x7f, 0x79, 0x94, 0x5d, - 0xf1, 0x01, 0xa4, 0x65, 0x55, 0xc5, 0xaa, 0xa4, 0xe2, 0xba, 0x2d, 0x73, 0x57, 0xe5, 0xba, 0x4f, - 0x12, 0x5f, 0x7e, 0x9b, 0x77, 0x97, 0xdf, 0xd6, 0x1f, 0x16, 0x8b, 0xb4, 0x20, 0xcb, 0x84, 0xc3, - 0x31, 0x45, 0x54, 0x08, 0xa5, 0x14, 0x7e, 0x37, 0x01, 0x63, 0x25, 0x5d, 0xad, 0x1e, 0x46, 0x3a, - 0xbb, 0x9c, 0x85, 0x11, 0xc5, 0x68, 0x34, 0x34, 0xdb, 0x51, 0x13, 0x7b, 0x42, 0x9f, 0x85, 0xa4, - 0x8a, 0x65, 0xd5, 0x5d, 0xa3, 0xe8, 0xe7, 0x68, 0x89, 0x6e, 0x76, 0xf4, 0x15, 0x38, 0x47, 0x2c, - 0xa8, 0xa9, 0xcb, 0x75, 0x89, 0x49, 0x93, 0x6c, 0x53, 0xab, 0xd5, 0xb0, 0xc9, 0x17, 0xfb, 0xae, - 0x85, 0x94, 0x73, 0x85, 0x73, 0x14, 0x29, 0x43, 0x95, 0xe5, 0x17, 0xcf, 0x68, 0x61, 0x64, 0xf4, - 0x06, 0x00, 0x99, 0x9c, 0xe8, 0x02, 0xa2, 0xc5, 0x6d, 0x53, 0xb7, 0x15, 0x44, 0xc7, 0x1c, 0x11, - 0x06, 0xf2, 0x6c, 0xa1, 0x05, 0x82, 0x0c, 0x1e, 0xb5, 0x34, 0x13, 0x4b, 0x37, 0x9a, 0x0a, 0x85, - 0xf2, 0xc9, 0xa5, 0xec, 0x93, 0xe3, 0x59, 0x10, 0x19, 0xf9, 0xc6, 0x66, 0x91, 0x20, 0x05, 0xf6, - 0xbf, 0xa9, 0xa0, 0x25, 0x98, 0x21, 0x13, 0x30, 0xaf, 0x8b, 0x6c, 0x4b, 0xbb, 0x5a, 0x6d, 0x17, - 0x9b, 0x92, 0xbb, 0x2a, 0x4c, 0x97, 0xf0, 0x92, 0xe2, 0xb4, 0x22, 0xeb, 0xac, 0xa0, 0x8b, 0x76, - 0x99, 0x66, 0x71, 0xd5, 0x43, 0xf4, 0xdc, 0x34, 0x34, 0xcb, 0xd0, 0xf3, 0x29, 0xa6, 0x67, 0xf6, - 0x84, 0x1e, 0x40, 0x4e, 0xd3, 0xa5, 0x9d, 0xba, 0x56, 0xdb, 0xb5, 0xa5, 0x03, 0x53, 0xb3, 0xb1, - 0x95, 0x9f, 0xa0, 0x15, 0x0a, 0xeb, 0x77, 0x15, 0xbe, 0x36, 0xab, 0xbe, 0x45, 0x72, 0xf2, 0xaa, - 0x65, 0x35, 0xfd, 0x0e, 0xe5, 0xa7, 0x44, 0xcb, 0x9d, 0x9d, 0x47, 0x73, 0xc9, 0xc2, 0xdf, 0x0a, - 0x90, 0x75, 0x3a, 0x4d, 0x94, 0xfd, 0xfb, 0x1a, 0xe4, 0x0c, 0x1d, 0x4b, 0xcd, 0x5d, 0xd9, 0xc2, - 0x5c, 0x31, 0x7c, 0x0a, 0xc9, 0x1a, 0x3a, 0xde, 0x24, 0x64, 0xa6, 0x09, 0xb4, 0x09, 0x13, 0x96, - 0x2d, 0xd7, 0x34, 0xbd, 0xe6, 0xd3, 0xd7, 0xf0, 0xe0, 0xae, 0x7b, 0x8e, 0x73, 0xbb, 0xf4, 0x80, - 0xdf, 0xf1, 0x63, 0x01, 0x26, 0x16, 0xd5, 0x86, 0xa6, 0x57, 0x9a, 0x75, 0x2d, 0x52, 0x9c, 0x7f, - 0x09, 0x52, 0x16, 0x91, 0xe9, 0x19, 0x6f, 0x0f, 0xa3, 0x25, 0x69, 0x0a, 0xb1, 0xe2, 0xf7, 0x60, - 0x1c, 0x1f, 0x36, 0x35, 0x53, 0xb6, 0x35, 0x43, 0x67, 0xb0, 0x24, 0x31, 0x78, 0xdd, 0xb2, 0x1e, - 0xaf, 0x07, 0x4d, 0x78, 0xcd, 0xde, 0x06, 0xe4, 0xaf, 0x58, 0x94, 0xf8, 0x44, 0x82, 0x49, 0x2a, - 0x7a, 0x4b, 0xb7, 0x22, 0xd6, 0x1a, 0xb7, 0xae, 0x5f, 0x82, 0xa9, 0xe0, 0x0b, 0xa2, 0x2c, 0xfd, - 0xbb, 0xbc, 0xc5, 0xd7, 0xb1, 0xf9, 0x09, 0x41, 0x63, 0xbf, 0xf8, 0x28, 0x4b, 0xfe, 0x0d, 0x01, - 0xce, 0x53, 0xd9, 0x74, 0x4f, 0x64, 0x07, 0x9b, 0xf7, 0xb0, 0x6c, 0x45, 0x8a, 0x90, 0x9f, 0x83, - 0x11, 0x86, 0x74, 0x69, 0x8f, 0x1d, 0x5e, 0x4a, 0x13, 0xbf, 0xa4, 0x62, 0x1b, 0x26, 0xf1, 0x4b, - 0x78, 0x12, 0xaf, 0xa7, 0x0c, 0xd3, 0x61, 0x65, 0x89, 0x78, 0x29, 0x60, 0x82, 0xbb, 0x87, 0xa4, - 0x8b, 0x17, 0x77, 0x89, 0x5f, 0x84, 0x4a, 0x90, 0x56, 0xe8, 0x3f, 0xc9, 0x3e, 0x6a, 0x62, 0x2a, - 0x3f, 0xdb, 0xcb, 0xb3, 0x64, 0x6c, 0xd5, 0xa3, 0x26, 0x26, 0xee, 0xa9, 0xf3, 0x9f, 0xa8, 0xcb, - 0x57, 0xd5, 0x9e, 0xbe, 0x29, 0x1d, 0x5f, 0x34, 0xaf, 0xe3, 0xde, 0x05, 0x34, 0xf1, 0xfb, 0x71, - 0xae, 0x0a, 0xf6, 0x26, 0xce, 0x14, 0xa9, 0x37, 0xf2, 0x4e, 0x60, 0x7b, 0xca, 0x5f, 0xfd, 0xd8, - 0x09, 0xaa, 0xef, 0x5b, 0x17, 0xf7, 0xa8, 0xe8, 0x6d, 0xf0, 0xad, 0x7c, 0x4b, 0xac, 0x66, 0x0e, - 0xda, 0x39, 0x89, 0x52, 0x26, 0x3c, 0x29, 0x8c, 0x6e, 0xa1, 0x22, 0x24, 0xf1, 0x61, 0x53, 0x52, - 0xb1, 0xa5, 0x70, 0xb3, 0x56, 0xe8, 0xb6, 0x8f, 0xd6, 0xe1, 0xff, 0x8f, 0xe2, 0xc3, 0x26, 0x21, - 0xa2, 0x2d, 0x32, 0xc3, 0x39, 0xee, 0x00, 0x2d, 0xb6, 0xd5, 0x1f, 0x4e, 0x78, 0xfd, 0x85, 0x8b, - 0x1b, 0x77, 0x3d, 0x01, 0x26, 0x82, 0xb7, 0xdd, 0x07, 0x02, 0x5c, 0x08, 0x6d, 0xbb, 0x28, 0x27, - 0xbb, 0x37, 0x20, 0x41, 0x55, 0x10, 0x3b, 0xa1, 0x0a, 0x28, 0x57, 0xe1, 0xbb, 0xce, 0xa8, 0x17, - 0x71, 0xdd, 0x20, 0xea, 0xfd, 0x04, 0xd6, 0xc5, 0x46, 0x9d, 0x66, 0x8f, 0x9d, 0xb8, 0xd9, 0x1d, - 0xd6, 0x36, 0xb3, 0xd0, 0x56, 0xd8, 0x28, 0xcd, 0xc2, 0xaf, 0x0a, 0x30, 0x59, 0xc6, 0xb2, 0x69, - 0x6f, 0x63, 0xd9, 0x8e, 0xd8, 0x9d, 0x7d, 0x05, 0xe2, 0xba, 0x71, 0x70, 0x92, 0xa5, 0x41, 0x92, - 0xdf, 0x9b, 0xb6, 0x82, 0xe5, 0x8a, 0xb2, 0xd6, 0x7f, 0x16, 0x83, 0xd4, 0xdd, 0x62, 0x94, 0x75, - 0x7d, 0x83, 0x2f, 0x20, 0xb3, 0xa1, 0x1e, 0xd6, 0x2d, 0xdd, 0xf7, 0xcd, 0xdf, 0x2d, 0xae, 0xe1, - 0x23, 0xa7, 0x5b, 0x12, 0x2e, 0xb4, 0x08, 0x29, 0x7b, 0xd7, 0xc4, 0xd6, 0xae, 0x51, 0x57, 0x4f, - 0xe2, 0xb3, 0x78, 0x5c, 0xd3, 0x7b, 0x30, 0x4c, 0xe5, 0x3a, 0x41, 0x0c, 0x42, 0x48, 0x10, 0x03, - 0x79, 0x8d, 0xeb, 0xf6, 0xc5, 0x4e, 0xf2, 0x1a, 0x87, 0xc0, 0x1a, 0xc7, 0xf5, 0x8d, 0x86, 0x73, - 0x23, 0x85, 0x07, 0x00, 0xa4, 0x6a, 0x51, 0x36, 0xcf, 0x2f, 0xc6, 0x21, 0xbb, 0xd9, 0xb2, 0x76, - 0x23, 0xee, 0x8f, 0x45, 0x80, 0x66, 0xcb, 0xa2, 0x60, 0xe1, 0x50, 0xe7, 0xf5, 0xef, 0x13, 0x25, - 0xe1, 0x28, 0x80, 0xf1, 0x55, 0x0f, 0x75, 0x54, 0xe6, 0x42, 0xb0, 0xe4, 0x85, 0x5a, 0x3c, 0xd7, - 0x0b, 0x4b, 0x56, 0x0f, 0xf5, 0x75, 0xec, 0x82, 0x48, 0x26, 0x09, 0x13, 0x49, 0x6f, 0xc0, 0x28, - 0x79, 0x90, 0x6c, 0xe3, 0x24, 0x4d, 0x3e, 0x42, 0x78, 0xaa, 0x06, 0xba, 0x0d, 0x29, 0xc6, 0x4d, - 0x26, 0xae, 0x11, 0x3a, 0x71, 0x85, 0xd5, 0x85, 0xab, 0x91, 0x4e, 0x59, 0x49, 0xca, 0x4a, 0xa6, - 0xa9, 0x29, 0x18, 0xde, 0x31, 0x4c, 0x05, 0xd3, 0xf8, 0x89, 0xa4, 0xc8, 0x1e, 0xfc, 0xad, 0xba, - 0x9a, 0x48, 0x26, 0x73, 0xa9, 0xd5, 0x44, 0x32, 0x95, 0x83, 0xc2, 0x37, 0x05, 0x18, 0x77, 0x9b, - 0x23, 0x4a, 0x5b, 0x5e, 0x0c, 0xe8, 0xf2, 0xe4, 0x0d, 0x42, 0xd4, 0x58, 0xf8, 0x73, 0xea, 0xd8, - 0x28, 0xc6, 0x3e, 0x6d, 0x9f, 0x28, 0xfb, 0xcb, 0x6d, 0x16, 0x4e, 0x13, 0x3b, 0x69, 0x1b, 0xd3, - 0xc8, 0x9a, 0x1b, 0x30, 0xa5, 0x35, 0x88, 0x95, 0xd7, 0xec, 0xfa, 0x11, 0x47, 0x65, 0x36, 0x76, - 0x76, 0x68, 0x27, 0xbd, 0xb4, 0xa2, 0x93, 0xc4, 0x0d, 0x1f, 0xdb, 0xb3, 0xf1, 0xea, 0x13, 0xa5, - 0xc2, 0x57, 0x60, 0xcc, 0x64, 0xa2, 0x89, 0x77, 0x72, 0x42, 0x9d, 0x67, 0x5c, 0x56, 0xa2, 0xf6, - 0xef, 0xc4, 0x60, 0xfc, 0x41, 0x0b, 0x9b, 0x47, 0x9f, 0x26, 0xa5, 0x5f, 0x81, 0xf1, 0x03, 0x59, - 0xb3, 0xa5, 0x1d, 0xc3, 0x94, 0x5a, 0x4d, 0x55, 0xb6, 0x9d, 0x98, 0x8e, 0x31, 0x42, 0xbe, 0x63, - 0x98, 0x5b, 0x94, 0x88, 0x30, 0xa0, 0x3d, 0xdd, 0x38, 0xd0, 0x25, 0x42, 0xa6, 0x68, 0xf8, 0x50, - 0xe7, 0x8b, 0xc9, 0x4b, 0xaf, 0xfe, 0xcd, 0xf1, 0xec, 0xad, 0x81, 0xa2, 0xb6, 0x68, 0xdc, 0x59, - 0xab, 0xa5, 0xa9, 0xf3, 0x5b, 0x5b, 0x2b, 0xcb, 0x62, 0x8e, 0x8a, 0x7c, 0x8b, 0x49, 0xac, 0x1e, - 0xea, 0xce, 0x2c, 0xfe, 0x54, 0x80, 0x9c, 0xa7, 0xa9, 0x28, 0x9b, 0xb3, 0x04, 0xe9, 0x47, 0x2d, - 0x6c, 0x6a, 0xa7, 0x68, 0x4c, 0xe0, 0x8c, 0xc4, 0x10, 0xbd, 0x03, 0x99, 0x80, 0x1e, 0xe2, 0x1f, - 0x4f, 0x0f, 0xe9, 0x03, 0x4f, 0x05, 0x85, 0x3f, 0x15, 0x00, 0xd1, 0xca, 0xaf, 0xb0, 0x75, 0xfc, - 0x4f, 0x4b, 0x4f, 0xb9, 0x06, 0x39, 0x1a, 0xb1, 0x28, 0x69, 0x3b, 0x52, 0x43, 0xb3, 0x2c, 0x4d, - 0xaf, 0xf1, 0xae, 0x92, 0xa5, 0xf4, 0x95, 0x9d, 0x75, 0x46, 0xe5, 0x8d, 0xf8, 0xbf, 0x60, 0x32, - 0x50, 0x8d, 0x28, 0x9b, 0xf1, 0x22, 0x64, 0x76, 0x8c, 0x96, 0xae, 0x4a, 0x6c, 0xaf, 0x83, 0x2f, - 0xfe, 0xa5, 0x29, 0x8d, 0xbd, 0xaf, 0xf0, 0xcf, 0x31, 0x98, 0x12, 0xb1, 0x65, 0xd4, 0xf7, 0x71, - 0xf4, 0x8a, 0x2c, 0x03, 0xdf, 0x65, 0x91, 0x4e, 0xa5, 0xcf, 0x14, 0x63, 0x66, 0x53, 0x5a, 0x70, - 0x1d, 0xfd, 0x52, 0xef, 0xbe, 0xd8, 0xb9, 0x72, 0xce, 0x97, 0xe5, 0x12, 0x81, 0x65, 0x39, 0x03, - 0xc6, 0xb5, 0x9a, 0x6e, 0x10, 0x9b, 0x65, 0xe1, 0x47, 0x7a, 0xab, 0xe1, 0x60, 0x96, 0xf9, 0x5e, - 0x85, 0x5c, 0x61, 0x2c, 0x15, 0xfc, 0x68, 0xa3, 0xd5, 0xa0, 0x9e, 0xf3, 0xd2, 0x59, 0x52, 0xde, - 0x27, 0xc7, 0xb3, 0xd9, 0x40, 0x9a, 0x25, 0x66, 0x35, 0xf7, 0x99, 0x48, 0xe7, 0x4d, 0xfe, 0x65, - 0x38, 0xd3, 0xa6, 0xf2, 0x28, 0x7d, 0x9c, 0x3f, 0x89, 0xc3, 0xf9, 0xa0, 0xf8, 0xa8, 0x91, 0xc8, - 0xa7, 0xbd, 0x59, 0xcb, 0x30, 0xd6, 0xd0, 0xf4, 0xd3, 0x2d, 0x44, 0x66, 0x1a, 0x9a, 0xee, 0xad, - 0xe7, 0x86, 0x74, 0x90, 0x91, 0xff, 0x82, 0x0e, 0x22, 0xc3, 0x74, 0x58, 0x0b, 0x46, 0xd9, 0x4b, - 0xde, 0x13, 0x20, 0x13, 0xf5, 0xda, 0xda, 0xe9, 0x62, 0xcc, 0x78, 0x9d, 0xab, 0x30, 0xf6, 0x09, - 0x2c, 0xc6, 0x7d, 0x47, 0x00, 0x54, 0x35, 0x5b, 0x3a, 0x01, 0xb9, 0xf7, 0x8c, 0x5a, 0x94, 0x95, - 0x9d, 0x82, 0x61, 0x4d, 0x57, 0xf1, 0x21, 0xad, 0x6c, 0x42, 0x64, 0x0f, 0x81, 0x0d, 0xc4, 0xf8, - 0x40, 0x1b, 0x88, 0x5e, 0xa8, 0x4a, 0xa0, 0xa0, 0x51, 0x6a, 0xe1, 0xb7, 0x63, 0x30, 0xc9, 0xab, - 0x13, 0xf9, 0x62, 0xe4, 0xcb, 0x30, 0x5c, 0x27, 0x32, 0x7b, 0xb4, 0x39, 0x7d, 0xa7, 0xd3, 0xe6, - 0x34, 0x33, 0xfa, 0x1c, 0x40, 0xd3, 0xc4, 0xfb, 0x12, 0x63, 0x8d, 0x0f, 0xc4, 0x9a, 0x22, 0x1c, - 0x94, 0x80, 0xbe, 0x08, 0xe3, 0x64, 0x84, 0x37, 0x4d, 0xa3, 0x69, 0x58, 0xc4, 0x49, 0xb1, 0x06, - 0x43, 0x3a, 0x13, 0x4f, 0x8e, 0x67, 0xc7, 0xd6, 0x35, 0x7d, 0x93, 0x33, 0x56, 0x2b, 0x22, 0x31, - 0x15, 0xee, 0xa3, 0x33, 0x00, 0xff, 0x4a, 0x80, 0xa9, 0x4f, 0x6c, 0xf9, 0xf6, 0xbf, 0x43, 0x63, - 0xee, 0xcc, 0x93, 0xa3, 0x8f, 0x2b, 0xfa, 0x8e, 0x11, 0xfd, 0xa2, 0xfa, 0x7b, 0x02, 0x4c, 0xf8, - 0xc4, 0x47, 0xe9, 0xc9, 0x9c, 0x4a, 0x67, 0x85, 0x2f, 0x11, 0xdf, 0xc6, 0xdf, 0xed, 0xa3, 0x1c, - 0x54, 0x7f, 0x18, 0x83, 0xb3, 0x45, 0xb6, 0xb5, 0xec, 0xc4, 0x5d, 0x44, 0xd9, 0x4b, 0xf2, 0x30, - 0xba, 0x8f, 0x4d, 0x4b, 0x33, 0xd8, 0x0c, 0x3b, 0x26, 0x3a, 0x8f, 0x68, 0x1a, 0x92, 0x96, 0x2e, - 0x37, 0xad, 0x5d, 0xc3, 0xd9, 0x8d, 0x73, 0x9f, 0xdd, 0x18, 0x91, 0xe1, 0xd3, 0xc7, 0x88, 0x8c, - 0xf4, 0x8e, 0x11, 0x19, 0xfd, 0xd8, 0x31, 0x22, 0x7c, 0xeb, 0xeb, 0x07, 0x02, 0x9c, 0xeb, 0xd0, - 0x5f, 0x94, 0x7d, 0xe6, 0xab, 0x90, 0x56, 0xb8, 0x60, 0x62, 0x8d, 0xd9, 0xee, 0xde, 0x0a, 0xc9, - 0x76, 0x4a, 0x00, 0xf2, 0xe4, 0x78, 0x16, 0x9c, 0xa2, 0xae, 0x2c, 0x73, 0x15, 0x91, 0xff, 0x6a, - 0xe1, 0xaf, 0x33, 0x30, 0x5e, 0x3a, 0x64, 0x6b, 0xd7, 0x15, 0xe6, 0x0f, 0xa0, 0x3b, 0x90, 0x6c, - 0x9a, 0xc6, 0xbe, 0xe6, 0x54, 0x23, 0x1b, 0x08, 0x0d, 0x70, 0xaa, 0xd1, 0xc6, 0xb5, 0xc9, 0x39, - 0x44, 0x97, 0x17, 0x55, 0x21, 0x75, 0xcf, 0x50, 0xe4, 0xfa, 0x1d, 0xad, 0xee, 0xf4, 0xff, 0x97, - 0xfa, 0x0b, 0x9a, 0x77, 0x79, 0x36, 0x65, 0x7b, 0xd7, 0x69, 0x0a, 0x97, 0x88, 0x56, 0x20, 0x59, - 0xb6, 0xed, 0x26, 0x49, 0xe4, 0xd6, 0xe4, 0xea, 0x00, 0x42, 0x09, 0x0b, 0x97, 0xe5, 0xb2, 0xa3, - 0x2a, 0x4c, 0xdc, 0x35, 0x8c, 0x5a, 0x1d, 0x17, 0xeb, 0x46, 0x4b, 0x2d, 0x1a, 0xfa, 0x8e, 0x56, - 0xe3, 0xf6, 0xf8, 0xca, 0x00, 0x32, 0xef, 0x16, 0x2b, 0x62, 0xa7, 0x00, 0xb4, 0x08, 0xc9, 0xca, - 0x2d, 0x2e, 0x8c, 0x39, 0x70, 0x97, 0x07, 0x10, 0x56, 0xb9, 0x25, 0xba, 0x6c, 0x68, 0x15, 0xd2, - 0x8b, 0x8f, 0x5b, 0x26, 0xe6, 0x52, 0x46, 0xba, 0xc6, 0x25, 0xb4, 0x4b, 0xa1, 0x5c, 0xa2, 0x9f, - 0x19, 0x55, 0x20, 0xfb, 0x96, 0x61, 0xee, 0xd5, 0x0d, 0xd9, 0xa9, 0xe1, 0x28, 0x15, 0xf7, 0x99, - 0x01, 0xc4, 0x39, 0x8c, 0x62, 0x9b, 0x08, 0xf4, 0x65, 0x18, 0x27, 0x8d, 0x51, 0x95, 0xb7, 0xeb, - 0x4e, 0x21, 0x93, 0x54, 0xea, 0x0b, 0x03, 0x48, 0x75, 0x39, 0x9d, 0xcd, 0x93, 0x36, 0x51, 0xd3, - 0x5f, 0x84, 0xb1, 0x40, 0x27, 0x40, 0x08, 0x12, 0x4d, 0xd2, 0xde, 0x02, 0x8d, 0x1f, 0xa2, 0xff, - 0xd1, 0x8b, 0x30, 0xaa, 0x1b, 0x2a, 0x76, 0x46, 0xc8, 0xd8, 0xd2, 0xd4, 0x93, 0xe3, 0xd9, 0x91, - 0x0d, 0x43, 0x65, 0xee, 0x0a, 0xff, 0x27, 0x8e, 0x90, 0x4c, 0x8e, 0xb3, 0x32, 0x7d, 0x05, 0x12, - 0xa4, 0xf5, 0x89, 0x91, 0xda, 0x96, 0x2d, 0xbc, 0x65, 0x6a, 0x5c, 0xa6, 0xf3, 0xc8, 0xf3, 0xfd, - 0x44, 0x80, 0x58, 0xe5, 0x16, 0x71, 0xd4, 0xb7, 0x5b, 0xca, 0x1e, 0xb6, 0x79, 0x2e, 0xfe, 0x44, - 0x1d, 0x78, 0x13, 0xef, 0x68, 0xcc, 0x87, 0x4a, 0x89, 0xfc, 0x09, 0x3d, 0x0b, 0x20, 0x2b, 0x0a, - 0xb6, 0x2c, 0xc9, 0x39, 0x35, 0x97, 0x12, 0x53, 0x8c, 0xb2, 0x86, 0x8f, 0x08, 0x9b, 0x85, 0x15, - 0x13, 0xdb, 0x4e, 0x20, 0x14, 0x7b, 0x22, 0x6c, 0x36, 0x6e, 0x34, 0x25, 0xdb, 0xd8, 0xc3, 0x3a, - 0xed, 0x33, 0x29, 0x62, 0x7c, 0x1a, 0xcd, 0x2a, 0x21, 0x10, 0xbb, 0x89, 0x75, 0xd5, 0x33, 0x72, - 0x29, 0xd1, 0x7d, 0x26, 0x22, 0x4d, 0x5c, 0xd3, 0xf8, 0xc1, 0xaf, 0x94, 0xc8, 0x9f, 0x88, 0xc6, - 0xe4, 0x96, 0xbd, 0x4b, 0x5b, 0x25, 0x25, 0xd2, 0xff, 0xbc, 0x6a, 0xbf, 0x2e, 0x40, 0xfc, 0x6e, - 0xb1, 0x72, 0xe2, 0xba, 0x39, 0x12, 0xe3, 0x9e, 0x44, 0x1a, 0x7f, 0xa8, 0xd5, 0xeb, 0x9a, 0x5e, - 0x23, 0x2e, 0xcd, 0x57, 0xb1, 0xe2, 0xd4, 0x2c, 0xcb, 0xc9, 0x9b, 0x8c, 0x8a, 0xe6, 0x20, 0xad, - 0x98, 0x58, 0xc5, 0xba, 0xad, 0xc9, 0x75, 0x8b, 0x57, 0xd1, 0x4f, 0xe2, 0x85, 0xfb, 0xba, 0x00, - 0xc3, 0xb4, 0xf3, 0xa2, 0x67, 0x20, 0xa5, 0x18, 0xba, 0x2d, 0x6b, 0x3a, 0xb7, 0x42, 0x29, 0xd1, - 0x23, 0x74, 0x2d, 0xe4, 0x45, 0xc8, 0xc8, 0x8a, 0x62, 0xb4, 0x74, 0x5b, 0xd2, 0xe5, 0x06, 0xe6, - 0x85, 0x4d, 0x73, 0xda, 0x86, 0xdc, 0xc0, 0x68, 0x16, 0x9c, 0x47, 0xf7, 0xec, 0x62, 0x4a, 0x04, - 0x4e, 0x5a, 0xc3, 0x47, 0xbc, 0x24, 0x3f, 0x10, 0x20, 0xe9, 0x74, 0x7a, 0x52, 0x98, 0x1a, 0xd6, - 0xb1, 0x29, 0xdb, 0x86, 0x5b, 0x18, 0x97, 0xd0, 0x3e, 0xe3, 0xa5, 0xbc, 0x19, 0x6f, 0x0a, 0x86, - 0x6d, 0xd2, 0xaf, 0x79, 0x39, 0xd8, 0x03, 0x5d, 0x6b, 0xae, 0xcb, 0x35, 0xb6, 0xbc, 0x96, 0x12, - 0xd9, 0x03, 0xa9, 0x12, 0x8f, 0xa1, 0x65, 0xda, 0xe1, 0x4f, 0xa4, 0xbc, 0x2c, 0xc6, 0x73, 0x1b, - 0xd7, 0x34, 0x9d, 0x76, 0x80, 0xb8, 0x08, 0x94, 0xb4, 0x44, 0x28, 0xe8, 0x02, 0xa4, 0x58, 0x06, - 0xac, 0xab, 0xb4, 0x17, 0xc4, 0xc5, 0x24, 0x25, 0x94, 0x9c, 0xc3, 0x59, 0xd3, 0x7b, 0x90, 0x72, - 0xc7, 0x18, 0x69, 0xc8, 0x96, 0xe5, 0x2a, 0x95, 0xfe, 0x47, 0x2f, 0xc1, 0xd4, 0xa3, 0x96, 0x5c, - 0xd7, 0x76, 0xe8, 0xca, 0x19, 0xc9, 0xc6, 0xf4, 0xc7, 0xea, 0x83, 0xdc, 0x34, 0x2a, 0x81, 0xaa, - 0xd1, 0x19, 0x92, 0x71, 0x6f, 0x48, 0xfa, 0xb7, 0x42, 0x0a, 0x1f, 0x0a, 0x30, 0xc1, 0xc2, 0x80, - 0x58, 0x24, 0x6a, 0x74, 0x0e, 0xc6, 0xeb, 0x90, 0x52, 0x65, 0x5b, 0x66, 0xe7, 0x33, 0x63, 0x3d, - 0xcf, 0x67, 0x3a, 0x16, 0x9f, 0xe4, 0xa7, 0x67, 0x34, 0x11, 0x24, 0xc8, 0x7f, 0x76, 0xa0, 0x55, - 0xa4, 0xff, 0xbd, 0xc0, 0x0a, 0x7f, 0x71, 0xa3, 0x74, 0xb8, 0x16, 0xe0, 0x0c, 0xd1, 0x7e, 0x49, - 0x57, 0xcc, 0xa3, 0xa6, 0xad, 0x19, 0xfa, 0x7d, 0xfa, 0x6b, 0xa1, 0x9c, 0x6f, 0x63, 0x8a, 0xee, - 0x47, 0xf1, 0xb2, 0x7c, 0x7f, 0x04, 0xc6, 0x4a, 0x87, 0x4d, 0xc3, 0x8c, 0x74, 0x51, 0x6b, 0x09, - 0x46, 0x39, 0xe2, 0xef, 0xb1, 0x55, 0xdc, 0x66, 0xab, 0x9d, 0x5d, 0x58, 0xce, 0x88, 0x96, 0x00, - 0x58, 0xcc, 0x28, 0x8d, 0x25, 0x8a, 0x9f, 0x60, 0xc3, 0x8c, 0xb2, 0x11, 0x2a, 0xda, 0x80, 0x74, - 0x63, 0x5f, 0x51, 0xa4, 0x1d, 0xad, 0x6e, 0xf3, 0xa0, 0xbb, 0xf0, 0x88, 0xf1, 0xf5, 0x87, 0xc5, - 0xe2, 0x1d, 0x9a, 0x89, 0xc5, 0xbf, 0x79, 0xcf, 0x22, 0x10, 0x09, 0xec, 0x3f, 0x7a, 0x01, 0xf8, - 0xb9, 0x19, 0xc9, 0x72, 0x8e, 0xc8, 0x2d, 0x8d, 0x3d, 0x39, 0x9e, 0x4d, 0x89, 0x94, 0x5a, 0xa9, - 0x54, 0xc5, 0x14, 0xcb, 0x50, 0xb1, 0x6c, 0xf4, 0x1c, 0x8c, 0x19, 0x0d, 0xcd, 0x96, 0x1c, 0x1f, - 0x88, 0xbb, 0x8d, 0x19, 0x42, 0x74, 0x7c, 0x24, 0x54, 0x85, 0xab, 0x58, 0xa7, 0xa3, 0x80, 0xd4, - 0x53, 0xda, 0x66, 0x6b, 0x91, 0x36, 0x1b, 0xef, 0x92, 0xd1, 0xb4, 0xb5, 0x86, 0xf6, 0x98, 0x6e, - 0x56, 0xf3, 0xfd, 0xa2, 0xe7, 0x58, 0x76, 0x52, 0xbf, 0x25, 0xba, 0x48, 0xc9, 0xf3, 0xde, 0xf7, - 0x65, 0x45, 0x5f, 0x17, 0xe0, 0x2c, 0x57, 0xa4, 0xb4, 0x4d, 0x43, 0xde, 0xe5, 0xba, 0x66, 0x1f, - 0x49, 0x7b, 0xfb, 0xf9, 0x24, 0x75, 0x4e, 0x3f, 0x1b, 0xda, 0x20, 0xbe, 0x7e, 0x30, 0xef, 0x34, - 0xcb, 0xd1, 0x3d, 0xce, 0xbc, 0xb6, 0x5f, 0xd2, 0x6d, 0xf3, 0x68, 0xe9, 0xdc, 0x93, 0xe3, 0xd9, - 0xc9, 0xce, 0xd4, 0x87, 0xe2, 0xa4, 0xd5, 0xc9, 0x82, 0xca, 0x00, 0xd8, 0xed, 0x8d, 0x34, 0xe4, - 0x2f, 0xdc, 0xbd, 0x08, 0xed, 0xb6, 0xa2, 0x8f, 0x17, 0x5d, 0x83, 0x1c, 0x3f, 0xf4, 0xb2, 0xa3, - 0xd5, 0xb1, 0x64, 0x69, 0x8f, 0x71, 0x1e, 0xa8, 0x0d, 0xca, 0x32, 0x3a, 0x11, 0x51, 0xd1, 0x1e, - 0xe3, 0xe9, 0xaf, 0x42, 0xbe, 0x5b, 0xe9, 0xfd, 0x03, 0x21, 0xc5, 0x36, 0x66, 0x5f, 0x0b, 0xae, - 0xc8, 0x0c, 0xd0, 0x55, 0x9d, 0x55, 0x99, 0xd8, 0x6b, 0x8e, 0x09, 0xfa, 0x6e, 0x0c, 0xc6, 0x96, - 0x5a, 0xf5, 0xbd, 0xfb, 0xcd, 0x4a, 0xab, 0xd1, 0x90, 0xcd, 0x23, 0x62, 0x2a, 0x99, 0xe9, 0x20, - 0xc5, 0x14, 0x98, 0xa9, 0xa4, 0xb6, 0x41, 0x7b, 0x8c, 0xc9, 0x64, 0xe6, 0x3f, 0xa4, 0xcd, 0x42, - 0xfa, 0x69, 0x4d, 0x7c, 0x27, 0xaf, 0x8d, 0x03, 0x0b, 0xbd, 0x06, 0x79, 0x5f, 0x46, 0xba, 0x7c, - 0x22, 0x61, 0xdd, 0x36, 0x35, 0xcc, 0x96, 0x03, 0xe3, 0xa2, 0x2f, 0x9c, 0x66, 0x85, 0x24, 0x97, - 0x58, 0x2a, 0xaa, 0x42, 0x86, 0x64, 0x3c, 0x92, 0xe8, 0x64, 0xe3, 0x2c, 0xda, 0xde, 0x08, 0xa9, - 0x5c, 0xa0, 0xdc, 0xf3, 0x54, 0x4b, 0x45, 0xca, 0x43, 0xff, 0x8a, 0x69, 0xec, 0x51, 0xa6, 0xdf, - 0x84, 0x5c, 0x7b, 0x06, 0xbf, 0x46, 0x13, 0x4c, 0xa3, 0x53, 0x7e, 0x8d, 0xc6, 0x7d, 0xda, 0x5a, - 0x4d, 0x24, 0x13, 0xb9, 0xe1, 0xc2, 0x4f, 0xe3, 0x90, 0x75, 0x3a, 0x5b, 0x94, 0x68, 0x66, 0x09, - 0x86, 0x49, 0xd7, 0x70, 0x82, 0x3f, 0xae, 0xf4, 0xe8, 0xe3, 0x3c, 0x7c, 0x9c, 0x74, 0x19, 0x07, - 0x0f, 0x53, 0xd6, 0x28, 0xcc, 0xce, 0xf4, 0xff, 0x8e, 0x41, 0x82, 0x02, 0x88, 0x1b, 0x90, 0xa0, - 0x53, 0x87, 0x30, 0xc8, 0xd4, 0x41, 0xb3, 0xba, 0x93, 0x5d, 0xcc, 0xe7, 0x7f, 0x12, 0x67, 0x6e, - 0x57, 0x7e, 0xe5, 0xc6, 0x4d, 0x6a, 0x72, 0x32, 0x22, 0x7f, 0x42, 0x4b, 0x34, 0x2a, 0xc9, 0x30, - 0x6d, 0xac, 0x72, 0xc7, 0x7d, 0xae, 0x5f, 0xfb, 0x3a, 0xd3, 0x94, 0xc3, 0x87, 0xce, 0x43, 0x9c, - 0xd8, 0xb2, 0x51, 0x16, 0xb1, 0xf0, 0xe4, 0x78, 0x36, 0x4e, 0xac, 0x18, 0xa1, 0xa1, 0x05, 0x48, - 0x07, 0x0d, 0x87, 0x70, 0x2d, 0xc5, 0xcc, 0xa3, 0x6f, 0xd0, 0x43, 0xdd, 0x1d, 0x60, 0x0c, 0xb4, - 0xf2, 0x36, 0xfe, 0xda, 0x30, 0x8c, 0xad, 0x34, 0xa2, 0x9e, 0x58, 0x16, 0x83, 0x2d, 0x1c, 0x86, - 0x76, 0x02, 0x2f, 0x0d, 0x69, 0xe0, 0xc0, 0x9c, 0x1e, 0x3f, 0xd9, 0x9c, 0xbe, 0x42, 0x5c, 0x60, - 0x7e, 0xeb, 0x42, 0xbc, 0x0b, 0xb0, 0x09, 0xbe, 0x9f, 0x7a, 0x31, 0x22, 0xe1, 0xf1, 0x0e, 0x54, - 0xd0, 0xa8, 0x93, 0x37, 0xa9, 0xa7, 0xcd, 0x7a, 0xd9, 0xc8, 0xe0, 0xbd, 0x6c, 0x14, 0xeb, 0x2a, - 0x9d, 0xda, 0x82, 0x76, 0x75, 0xf4, 0xf4, 0x76, 0x75, 0xfa, 0x31, 0xef, 0xac, 0xaf, 0x43, 0x5c, - 0xd5, 0x9c, 0xc6, 0x19, 0x7c, 0xc2, 0x26, 0x4c, 0x7d, 0x7a, 0x6d, 0xc2, 0xdf, 0x6b, 0xfd, 0x0b, - 0x1c, 0xd3, 0xf7, 0x01, 0x3c, 0x0d, 0xa1, 0x39, 0x18, 0x31, 0xea, 0xaa, 0x73, 0xae, 0x64, 0x6c, - 0x29, 0xf5, 0xe4, 0x78, 0x76, 0xf8, 0x7e, 0x5d, 0x5d, 0x59, 0x16, 0x87, 0x8d, 0xba, 0xba, 0xa2, - 0xd2, 0x8b, 0x2f, 0xf0, 0x81, 0xe4, 0x06, 0xa1, 0x65, 0xc4, 0x51, 0x1d, 0x1f, 0x2c, 0x63, 0x4b, - 0x69, 0x0b, 0x8e, 0x21, 0x5d, 0xf0, 0x7d, 0x01, 0xb2, 0x4e, 0x6b, 0x44, 0x6b, 0x66, 0x92, 0x5a, - 0x83, 0x0f, 0xbb, 0xf8, 0xc9, 0x86, 0x9d, 0xc3, 0xc7, 0x4f, 0xd5, 0x7e, 0x43, 0xe0, 0x01, 0xc8, - 0x15, 0x45, 0xb6, 0x89, 0xb3, 0x11, 0xe1, 0x50, 0x79, 0x1e, 0x72, 0xa6, 0xac, 0xab, 0x46, 0x43, - 0x7b, 0x8c, 0xd9, 0x8a, 0xa8, 0xc5, 0x37, 0x37, 0xc7, 0x5d, 0x3a, 0x5d, 0xf2, 0x73, 0x16, 0x74, - 0xbf, 0x1f, 0xe3, 0xc1, 0xca, 0x6e, 0x61, 0xa2, 0x54, 0xda, 0x57, 0x60, 0xa2, 0xfd, 0x5e, 0x12, - 0x67, 0x14, 0xbf, 0x18, 0x22, 0x2f, 0xac, 0x20, 0x2c, 0xb8, 0xd0, 0x89, 0x86, 0x6f, 0xbb, 0xa3, - 0xc4, 0x42, 0x45, 0x48, 0xfb, 0xaf, 0x3b, 0x89, 0x0f, 0x7c, 0xdd, 0x09, 0x98, 0xee, 0x25, 0x27, - 0xd3, 0x5f, 0x80, 0x61, 0x9a, 0x7c, 0x0a, 0xd3, 0xcd, 0xdb, 0xf4, 0xef, 0x63, 0x70, 0x89, 0x96, - 0xfe, 0x21, 0x36, 0xb5, 0x9d, 0xa3, 0x4d, 0xd3, 0xb0, 0xb1, 0x62, 0x63, 0xd5, 0x3b, 0x20, 0x12, - 0xa9, 0x3d, 0x4c, 0x35, 0x9d, 0x17, 0x9c, 0x28, 0xa8, 0xcc, 0xe5, 0x42, 0x6b, 0x30, 0xce, 0xae, - 0xed, 0x91, 0xe4, 0xba, 0xb6, 0x8f, 0x25, 0xd9, 0x3e, 0xc9, 0xac, 0x37, 0xc6, 0x78, 0x17, 0x09, - 0xeb, 0xa2, 0x8d, 0x54, 0x48, 0x71, 0x61, 0x9a, 0xca, 0xef, 0xea, 0xb9, 0xfb, 0xf1, 0x56, 0x13, - 0x93, 0x22, 0x95, 0xb7, 0xb2, 0x2c, 0x26, 0x99, 0x64, 0x77, 0x37, 0xe8, 0xc7, 0x02, 0x5c, 0xee, - 0xa3, 0xe8, 0x28, 0x3b, 0xf0, 0x34, 0x24, 0xf7, 0xc9, 0x8b, 0x34, 0xae, 0xe9, 0xa4, 0xe8, 0x3e, - 0xa3, 0x75, 0x18, 0xdb, 0x91, 0xb5, 0xba, 0xd7, 0xb1, 0xbb, 0x47, 0x22, 0x86, 0x07, 0xc8, 0x66, - 0x18, 0x3b, 0xeb, 0xc9, 0x85, 0xf7, 0x63, 0x30, 0xb1, 0xa8, 0xaa, 0x95, 0x0a, 0xb7, 0x8d, 0xd1, - 0xf5, 0x17, 0x07, 0x94, 0xc6, 0x3c, 0x50, 0x8a, 0x5e, 0x04, 0xa4, 0x6a, 0x16, 0xbb, 0x07, 0xc4, - 0xda, 0x95, 0x55, 0xe3, 0xc0, 0x8b, 0xc7, 0x98, 0x70, 0x52, 0x2a, 0x4e, 0x02, 0xaa, 0x00, 0x45, - 0x44, 0x92, 0x65, 0xcb, 0xee, 0x96, 0xd2, 0xe5, 0x81, 0xce, 0x73, 0x31, 0xa8, 0xe4, 0x3e, 0x8a, - 0x29, 0x22, 0x87, 0xfe, 0x25, 0xbe, 0xbd, 0x46, 0xaa, 0x6e, 0x4b, 0xb2, 0xe5, 0x1c, 0xfe, 0x61, - 0x37, 0x90, 0x64, 0x19, 0x7d, 0xd1, 0xf2, 0x9f, 0xe9, 0x61, 0x67, 0x13, 0x3c, 0x05, 0x45, 0x09, - 0xa1, 0x7f, 0x4b, 0x80, 0xac, 0x88, 0x77, 0x4c, 0x6c, 0x45, 0xba, 0x94, 0x70, 0x07, 0x32, 0x26, - 0x93, 0x2a, 0xed, 0x98, 0x46, 0xe3, 0x24, 0x63, 0x2c, 0xcd, 0x19, 0xef, 0x98, 0x46, 0x23, 0x70, - 0x29, 0xc3, 0x43, 0x18, 0x77, 0x4b, 0x1a, 0xa5, 0x0a, 0x3e, 0xa4, 0x67, 0x98, 0x99, 0xe0, 0xa8, - 0x03, 0x23, 0x3e, 0x09, 0x3d, 0xd0, 0x3d, 0x2c, 0x7f, 0x71, 0xa3, 0x54, 0xc6, 0x3f, 0x0a, 0x90, - 0xad, 0xb4, 0xb6, 0xd9, 0x35, 0x54, 0xd1, 0xe9, 0xa1, 0x04, 0xa9, 0x3a, 0xde, 0xb1, 0xa5, 0x53, - 0xc5, 0xd3, 0x27, 0x09, 0x2b, 0x3d, 0x53, 0x70, 0x17, 0xc0, 0xa4, 0x27, 0xe6, 0xa8, 0x9c, 0xf8, - 0x09, 0xe5, 0xa4, 0x28, 0xaf, 0xe7, 0x3e, 0x15, 0x3e, 0x8c, 0xc1, 0xb8, 0x5b, 0xd9, 0x28, 0xad, - 0xe7, 0x5b, 0x01, 0xab, 0x11, 0x3f, 0x89, 0xd5, 0x98, 0xe0, 0x71, 0x21, 0xe1, 0x96, 0x63, 0x1e, - 0x26, 0xa9, 0x73, 0x23, 0xc9, 0xcd, 0x66, 0x5d, 0x73, 0x40, 0x32, 0xb5, 0x4b, 0x09, 0x71, 0x82, - 0x26, 0x2d, 0xb2, 0x14, 0x0a, 0x8f, 0x49, 0xff, 0xdb, 0x31, 0x31, 0x7e, 0x8c, 0x25, 0x8a, 0xd7, - 0x4e, 0x12, 0xf7, 0x92, 0x66, 0x8c, 0x15, 0xc2, 0xc7, 0x7b, 0xde, 0xbb, 0x30, 0x41, 0x35, 0x1b, - 0xf5, 0xa9, 0x5d, 0xde, 0x1c, 0xdf, 0x8a, 0x01, 0xf2, 0xcb, 0xff, 0xe4, 0x5a, 0x24, 0x16, 0x5d, - 0x8b, 0xbc, 0x00, 0x88, 0xc5, 0x37, 0x5a, 0x52, 0x13, 0x9b, 0x92, 0x85, 0x15, 0x83, 0x5f, 0x8e, - 0x24, 0x88, 0x39, 0x9e, 0xb2, 0x89, 0xcd, 0x0a, 0xa5, 0xa3, 0xdb, 0x00, 0x9e, 0xd7, 0xc6, 0xa7, - 0x93, 0x9e, 0x4e, 0x9b, 0x98, 0x72, 0xdd, 0xb5, 0xc2, 0x7b, 0xd3, 0x90, 0xe1, 0x9a, 0xdc, 0xd2, - 0x35, 0x43, 0x47, 0x37, 0x20, 0x5e, 0xe3, 0xdb, 0x0c, 0xe9, 0xd0, 0x85, 0x3e, 0xef, 0x3e, 0xb8, - 0xf2, 0x90, 0x48, 0xf2, 0x12, 0x96, 0x66, 0xcb, 0x0e, 0x71, 0x9e, 0xbc, 0x28, 0x6e, 0x3f, 0x4b, - 0xb3, 0x65, 0xa3, 0x0a, 0x8c, 0x2b, 0xde, 0xed, 0x56, 0x12, 0x61, 0x8f, 0x77, 0x05, 0x60, 0xa1, - 0xb7, 0x8a, 0x95, 0x87, 0xc4, 0xac, 0x12, 0x48, 0x40, 0x45, 0xff, 0x75, 0x4a, 0x89, 0x8e, 0x80, - 0x31, 0xef, 0x78, 0x70, 0xf0, 0x2a, 0xa7, 0xf2, 0x90, 0xef, 0xd6, 0x25, 0xf4, 0x3a, 0x8c, 0xa8, - 0xf4, 0x9a, 0x1e, 0xde, 0xaf, 0xc3, 0xba, 0x5e, 0xe0, 0x66, 0xa4, 0xf2, 0x90, 0xc8, 0x39, 0xd0, - 0x2a, 0x64, 0xd8, 0x3f, 0xe6, 0xc4, 0x70, 0x54, 0x7a, 0xb9, 0xbb, 0x04, 0xdf, 0xd4, 0x50, 0x1e, - 0x12, 0xd3, 0xaa, 0x47, 0x45, 0x2f, 0x43, 0xc2, 0x52, 0x64, 0x07, 0x97, 0xce, 0x74, 0xb9, 0xa3, - 0xc3, 0x63, 0xa6, 0xb9, 0xd1, 0x6d, 0x76, 0xcf, 0xa3, 0x7d, 0xe8, 0x2c, 0x14, 0x86, 0x15, 0x3f, - 0x70, 0xf2, 0x9b, 0x14, 0x1f, 0x53, 0x02, 0xba, 0x0b, 0x69, 0x99, 0x78, 0x83, 0x12, 0x3d, 0x69, - 0x49, 0x57, 0x06, 0xc3, 0xf7, 0xe0, 0x3b, 0x4e, 0xc9, 0x96, 0xe9, 0xf1, 0x72, 0x87, 0xe8, 0x09, - 0x6a, 0x60, 0xb3, 0x86, 0xf3, 0xe9, 0xde, 0x82, 0xfc, 0x01, 0x62, 0xae, 0x20, 0x4a, 0x24, 0x5e, - 0xe1, 0xae, 0x73, 0x8a, 0x86, 0x56, 0x2a, 0xd3, 0x75, 0xbf, 0x37, 0xe4, 0x14, 0x50, 0x79, 0x48, - 0xcc, 0xec, 0xfa, 0xc8, 0x68, 0x1e, 0x62, 0x35, 0x25, 0x3f, 0xd6, 0x75, 0x84, 0xb8, 0x67, 0x5c, - 0xca, 0x43, 0x62, 0xac, 0xa6, 0xa0, 0x37, 0x21, 0xc9, 0x0e, 0x29, 0x1c, 0xea, 0xf9, 0x6c, 0x57, - 0x3b, 0x11, 0x3c, 0xea, 0x51, 0x1e, 0x12, 0xe9, 0xb9, 0x08, 0xf2, 0xbe, 0x4d, 0xc8, 0x9a, 0x2c, - 0xc2, 0xce, 0x89, 0x8d, 0xcd, 0x75, 0xdd, 0x03, 0x0f, 0x0b, 0x8f, 0x2d, 0x53, 0x74, 0xe0, 0xa3, - 0xa3, 0xaf, 0xc0, 0x54, 0x50, 0x22, 0xef, 0x69, 0x13, 0x5d, 0xf7, 0x73, 0xbb, 0x06, 0x69, 0x96, - 0x87, 0x44, 0x64, 0x76, 0x24, 0xa2, 0x57, 0x61, 0x98, 0xb5, 0x1a, 0xa2, 0x22, 0xc3, 0x82, 0x3b, - 0xda, 0x1a, 0x8c, 0xe5, 0x27, 0x9d, 0xdf, 0xe6, 0xa1, 0x65, 0x52, 0xdd, 0xa8, 0xe5, 0x27, 0xbb, - 0x76, 0xfe, 0xce, 0x50, 0x39, 0xd2, 0xf9, 0x6d, 0x8f, 0x4a, 0xda, 0xdd, 0x64, 0x29, 0x3c, 0x12, - 0x69, 0xaa, 0x6b, 0xbb, 0x87, 0x44, 0x9c, 0x95, 0x69, 0xb0, 0xbf, 0x47, 0x26, 0x45, 0x33, 0xd9, - 0x85, 0x32, 0x12, 0x1d, 0x53, 0x67, 0xba, 0x16, 0xad, 0xf3, 0xde, 0x9d, 0x32, 0xf5, 0x9a, 0x5c, - 0x2a, 0x7a, 0x08, 0x39, 0x7e, 0xd5, 0x83, 0xb7, 0x2b, 0x71, 0x96, 0xca, 0x7b, 0x3e, 0xd4, 0x74, - 0x85, 0x85, 0xee, 0x94, 0x87, 0xc4, 0x71, 0x25, 0x98, 0x82, 0xde, 0x86, 0x09, 0x2a, 0x4f, 0x52, - 0xbc, 0x3b, 0x3a, 0xf2, 0xf9, 0x8e, 0xbb, 0x1e, 0xba, 0x5f, 0xe7, 0xe1, 0x48, 0xce, 0x29, 0x6d, - 0x49, 0xa4, 0x1b, 0x6b, 0xba, 0x66, 0x53, 0x2b, 0x3b, 0xdd, 0xb5, 0x1b, 0x07, 0x6f, 0x03, 0x24, - 0xdd, 0x58, 0x63, 0x14, 0xd2, 0x8d, 0x6d, 0x1e, 0xa6, 0xc6, 0x9b, 0xe3, 0x99, 0xae, 0xdd, 0x38, - 0x2c, 0x9e, 0x8d, 0x74, 0x63, 0xdb, 0x4f, 0x27, 0xdd, 0x98, 0x19, 0x88, 0x36, 0xb9, 0xcf, 0x76, - 0xed, 0xc6, 0x5d, 0xcf, 0x3a, 0x93, 0x6e, 0x2c, 0x77, 0x24, 0xa2, 0x65, 0x00, 0xe6, 0xd4, 0xd0, - 0x49, 0x71, 0xa6, 0xeb, 0x64, 0xd0, 0x1e, 0xa8, 0x46, 0x26, 0x83, 0xba, 0x43, 0x23, 0x86, 0x8c, - 0x42, 0x29, 0x89, 0x6e, 0xd1, 0xe6, 0x67, 0xbb, 0x1a, 0xb2, 0x8e, 0xcd, 0x53, 0x62, 0xc8, 0x0e, - 0x5c, 0x22, 0x99, 0x55, 0xd8, 0x7a, 0x71, 0x7e, 0xae, 0xbb, 0x59, 0xf6, 0x6f, 0x1e, 0x51, 0xb3, - 0x4c, 0x09, 0x68, 0x11, 0x52, 0x64, 0xce, 0x3f, 0xa2, 0x66, 0xe8, 0x62, 0x57, 0xff, 0xb4, 0xed, - 0x34, 0x4b, 0x79, 0x48, 0x4c, 0x3e, 0xe2, 0x24, 0xf2, 0x7a, 0xb6, 0x6e, 0x96, 0x2f, 0x74, 0x7d, - 0x7d, 0x60, 0xd5, 0x95, 0xbc, 0x9e, 0x71, 0x20, 0x05, 0xce, 0xb0, 0xb6, 0xe2, 0x47, 0x8d, 0x4d, - 0x7e, 0x2e, 0x36, 0xff, 0x1c, 0x15, 0xd5, 0x75, 0xe9, 0x29, 0xf4, 0x04, 0x74, 0x79, 0x48, 0x9c, - 0x94, 0x3b, 0x53, 0xc9, 0x80, 0xe7, 0x53, 0x0f, 0x5b, 0xb0, 0xca, 0x5f, 0xea, 0x3a, 0xe0, 0x43, - 0x56, 0xfb, 0xc8, 0x80, 0x97, 0x7d, 0x64, 0x36, 0x01, 0xa9, 0x92, 0x65, 0xb1, 0x0d, 0xfd, 0xcb, - 0x3d, 0x26, 0xa0, 0xb6, 0x35, 0x02, 0x36, 0x01, 0xa9, 0x15, 0xc6, 0x49, 0x04, 0x29, 0x75, 0x2c, - 0x9b, 0xdc, 0xcc, 0x5e, 0xe9, 0x2a, 0xa8, 0xe3, 0x86, 0x3d, 0x22, 0x48, 0x71, 0x89, 0xc4, 0xe1, - 0x31, 0x9d, 0x3b, 0x62, 0xb8, 0xc3, 0x78, 0xb5, 0xab, 0xc3, 0x13, 0x7a, 0x95, 0x0d, 0x71, 0x78, - 0xcc, 0x40, 0x02, 0xfa, 0x1c, 0x8c, 0x72, 0x40, 0x97, 0xbf, 0xd6, 0xc3, 0x8d, 0xf5, 0x23, 0x71, - 0x32, 0xae, 0x39, 0x0f, 0xb3, 0xb2, 0x0c, 0x48, 0xb2, 0xea, 0x3d, 0xdf, 0xc3, 0xca, 0x76, 0x60, - 0x59, 0x66, 0x65, 0x3d, 0x32, 0xb1, 0xb2, 0xac, 0x9f, 0xf2, 0xb9, 0xee, 0x7a, 0x57, 0x2b, 0xdb, - 0x79, 0xa2, 0x86, 0x58, 0xd9, 0x47, 0x1e, 0x95, 0xd4, 0xcc, 0x62, 0x20, 0x2a, 0xff, 0x99, 0xae, - 0x35, 0x0b, 0x62, 0x4a, 0x52, 0x33, 0xce, 0x43, 0x9a, 0x8d, 0xb9, 0xc4, 0x4c, 0xd3, 0x2f, 0x74, - 0x3f, 0xd5, 0xdf, 0x0e, 0x3d, 0xca, 0xce, 0x62, 0x26, 0xd3, 0xb0, 0x6b, 0xa8, 0x4c, 0x7e, 0x86, - 0x99, 0x6b, 0xea, 0xc5, 0xde, 0x86, 0x2a, 0xec, 0x78, 0xb6, 0x6b, 0xa8, 0x02, 0x89, 0xb4, 0xa8, - 0xec, 0x60, 0x1a, 0x1d, 0xdf, 0xf3, 0x3d, 0x2e, 0x20, 0x68, 0x3b, 0x24, 0x48, 0x8b, 0xea, 0x12, - 0xbd, 0x21, 0xd4, 0x62, 0x37, 0x65, 0xe4, 0x17, 0x7a, 0x0f, 0xa1, 0xe0, 0x8d, 0x1d, 0xee, 0x10, - 0xe2, 0x64, 0x77, 0xce, 0x74, 0x3c, 0x8c, 0x97, 0x7a, 0xcf, 0x99, 0xed, 0xae, 0x05, 0x9b, 0x33, - 0xb9, 0x4f, 0xf1, 0x7f, 0x04, 0x98, 0x63, 0x65, 0xa3, 0xeb, 0x7d, 0x47, 0x92, 0xbb, 0x76, 0xea, - 0x3b, 0x3e, 0x71, 0x83, 0xbe, 0xe0, 0xd5, 0x6e, 0xc5, 0xed, 0xb3, 0x16, 0x5c, 0x1e, 0x12, 0x9f, - 0x95, 0x7b, 0xe5, 0x5b, 0x1a, 0xe5, 0x5b, 0xaa, 0xee, 0xd9, 0xd0, 0xf1, 0x5c, 0x6e, 0x35, 0x91, - 0x3c, 0x97, 0xcb, 0xaf, 0x26, 0x92, 0xe7, 0x73, 0xd3, 0xab, 0x89, 0xe4, 0x85, 0xdc, 0x33, 0x85, - 0x7f, 0x3a, 0x0f, 0x63, 0x0e, 0xf2, 0x63, 0x88, 0xe8, 0xa6, 0x1f, 0x11, 0xcd, 0x74, 0x43, 0x44, - 0x1c, 0x2b, 0x72, 0x48, 0x74, 0xd3, 0x0f, 0x89, 0x66, 0xba, 0x41, 0x22, 0x8f, 0x87, 0x60, 0xa2, - 0x6a, 0x37, 0x4c, 0xf4, 0xfc, 0x00, 0x98, 0xc8, 0x15, 0xd5, 0x0e, 0x8a, 0x96, 0x3b, 0x41, 0xd1, - 0xa5, 0xde, 0xa0, 0xc8, 0x15, 0xe5, 0x43, 0x45, 0xb7, 0xdb, 0x50, 0xd1, 0xc5, 0x1e, 0xa8, 0xc8, - 0xe5, 0x77, 0x60, 0xd1, 0x5a, 0x28, 0x2c, 0xba, 0xd2, 0x0f, 0x16, 0xb9, 0x72, 0x02, 0xb8, 0xe8, - 0x95, 0x00, 0x2e, 0x9a, 0xed, 0x8a, 0x8b, 0x5c, 0x6e, 0x06, 0x8c, 0xde, 0x68, 0x07, 0x46, 0x17, - 0x7b, 0x00, 0x23, 0xaf, 0x06, 0x1c, 0x19, 0x95, 0xc3, 0x90, 0xd1, 0xe5, 0x3e, 0xc8, 0xc8, 0x95, - 0xe2, 0x87, 0x46, 0xe5, 0x30, 0x68, 0x74, 0xb9, 0x0f, 0x34, 0x6a, 0x93, 0xc4, 0xb0, 0xd1, 0x46, - 0x38, 0x36, 0xba, 0xda, 0x17, 0x1b, 0xb9, 0xd2, 0x82, 0xe0, 0x68, 0xc1, 0x07, 0x8e, 0x9e, 0xed, - 0x02, 0x8e, 0x5c, 0x56, 0x82, 0x8e, 0x3e, 0xdf, 0x81, 0x8e, 0x0a, 0xbd, 0xd0, 0x91, 0xcb, 0xeb, - 0xc2, 0xa3, 0x07, 0x5d, 0xe0, 0xd1, 0xb5, 0xfe, 0xf0, 0xc8, 0x15, 0xd6, 0x86, 0x8f, 0xe4, 0x9e, - 0xf8, 0xe8, 0xc5, 0x01, 0xf1, 0x91, 0x2b, 0x3d, 0x0c, 0x20, 0xbd, 0x16, 0x04, 0x48, 0x73, 0xdd, - 0x01, 0x92, 0x2b, 0x86, 0x23, 0xa4, 0xb5, 0x50, 0x84, 0x74, 0xa5, 0x1f, 0x42, 0xf2, 0xc6, 0x81, - 0x1f, 0x22, 0x6d, 0x84, 0x43, 0xa4, 0xab, 0x7d, 0x21, 0x92, 0xd7, 0xfc, 0x01, 0x8c, 0xb4, 0x16, - 0x8a, 0x91, 0xae, 0xf4, 0xc3, 0x48, 0x5e, 0xe1, 0xfc, 0x20, 0xe9, 0xad, 0xae, 0x20, 0xe9, 0xfa, - 0x20, 0x20, 0xc9, 0x15, 0xda, 0x81, 0x92, 0xde, 0xe9, 0x8e, 0x92, 0x3e, 0x73, 0x82, 0x4b, 0x0f, - 0x43, 0x61, 0xd2, 0xe7, 0x3b, 0x60, 0x52, 0xa1, 0x17, 0x4c, 0xf2, 0xfa, 0xb3, 0x83, 0x93, 0xe4, - 0x9e, 0xa8, 0xe6, 0xc5, 0x01, 0x51, 0x8d, 0xd7, 0xf9, 0x42, 0x60, 0x4d, 0x29, 0x04, 0xd6, 0x5c, - 0xea, 0x0d, 0x6b, 0x3c, 0x73, 0xee, 0xe1, 0x9a, 0x72, 0x18, 0xae, 0xb9, 0xdc, 0x07, 0xd7, 0x78, - 0x56, 0xc8, 0x07, 0x6c, 0x6e, 0xb7, 0x01, 0x9b, 0x8b, 0x7d, 0x23, 0x86, 0x7c, 0xc8, 0x66, 0xa9, - 0x13, 0xd9, 0x3c, 0xd7, 0x13, 0xd9, 0xb8, 0x12, 0x3c, 0x68, 0x73, 0xbb, 0x0d, 0xda, 0x5c, 0xec, - 0x01, 0x6d, 0xbc, 0x02, 0x70, 0x6c, 0xa3, 0xf6, 0xc6, 0x36, 0xf3, 0x83, 0x62, 0x1b, 0x57, 0x70, - 0x28, 0xb8, 0xd9, 0x08, 0x07, 0x37, 0x57, 0x07, 0xdc, 0xb4, 0xef, 0x40, 0x37, 0xe5, 0x30, 0x74, - 0x73, 0xb9, 0x0f, 0xba, 0xf1, 0xcf, 0x21, 0x2e, 0xbc, 0x29, 0x87, 0xc1, 0x9b, 0xcb, 0x7d, 0xe0, - 0x8d, 0x27, 0xc9, 0x87, 0x6f, 0xaa, 0xdd, 0xf0, 0xcd, 0xf3, 0x03, 0xe0, 0x1b, 0xcf, 0x79, 0x69, - 0x03, 0x38, 0x6f, 0xb6, 0x03, 0x9c, 0x42, 0x2f, 0x80, 0xe3, 0x8d, 0x48, 0x07, 0xe1, 0x6c, 0x84, - 0x23, 0x9c, 0xab, 0x7d, 0x11, 0x8e, 0xdf, 0x48, 0xfa, 0x20, 0xce, 0x5a, 0x28, 0xc4, 0xb9, 0xd2, - 0x0f, 0xe2, 0x78, 0x46, 0xd2, 0x8f, 0x71, 0xde, 0x6c, 0xc7, 0x38, 0x85, 0x5e, 0x18, 0xc7, 0xab, - 0x9c, 0x03, 0x72, 0xca, 0x61, 0x20, 0xe7, 0x72, 0x1f, 0x90, 0xe3, 0x35, 0x9e, 0x0f, 0xe5, 0xc8, - 0x3d, 0x51, 0xce, 0x8b, 0x03, 0xa2, 0x9c, 0x36, 0xc3, 0x15, 0x84, 0x39, 0xe5, 0x30, 0x98, 0x73, - 0xb9, 0x0f, 0xcc, 0xf1, 0x15, 0xd6, 0xc3, 0x39, 0x1b, 0xe1, 0x38, 0xe7, 0x6a, 0x5f, 0x9c, 0xd3, - 0x36, 0x9a, 0x1c, 0xa0, 0xb3, 0x16, 0x0a, 0x74, 0xae, 0xf4, 0x03, 0x3a, 0x6d, 0x13, 0x1f, 0x77, - 0x0e, 0xfe, 0xef, 0xe0, 0x48, 0xe7, 0xb5, 0x93, 0x23, 0x1d, 0xf7, 0x9d, 0x91, 0x40, 0x9d, 0xd5, - 0x44, 0xf2, 0x99, 0xdc, 0xb3, 0x85, 0xdf, 0x1b, 0x81, 0x91, 0xb2, 0x1b, 0x0b, 0xe3, 0x95, 0x52, - 0x38, 0xcd, 0x05, 0x4b, 0x68, 0x99, 0x8c, 0x58, 0x6a, 0xf7, 0xfa, 0xdf, 0xa5, 0xd7, 0x79, 0xcf, - 0x1b, 0x67, 0x3d, 0xc5, 0xf9, 0x66, 0xf4, 0x0a, 0x8c, 0xb5, 0x2c, 0x6c, 0x4a, 0x4d, 0x53, 0x33, - 0x4c, 0xcd, 0x66, 0x67, 0x45, 0x84, 0xa5, 0xdc, 0xd3, 0xe3, 0xd9, 0xcc, 0x96, 0x85, 0xcd, 0x4d, - 0x4e, 0x17, 0x33, 0x2d, 0xdf, 0x93, 0xf3, 0xcd, 0xa9, 0xe1, 0xc1, 0xbf, 0x39, 0xf5, 0x00, 0x72, - 0x26, 0x96, 0xd5, 0x80, 0x07, 0xc2, 0x2e, 0x30, 0x0a, 0xef, 0x33, 0xf4, 0x18, 0x96, 0x93, 0x93, - 0x5e, 0x64, 0x34, 0x6e, 0x06, 0x89, 0xe8, 0x06, 0x9c, 0x69, 0xc8, 0x87, 0x34, 0x9e, 0x52, 0x72, - 0x9c, 0x3a, 0x1a, 0x23, 0xc9, 0x3e, 0xe7, 0x84, 0x1a, 0xf2, 0x21, 0xfd, 0x80, 0x15, 0x4b, 0xa2, - 0x5f, 0x9c, 0xb8, 0x0c, 0x59, 0x55, 0xb3, 0x6c, 0x4d, 0x57, 0x6c, 0x7e, 0x75, 0x2d, 0xbb, 0x0b, - 0x76, 0xcc, 0xa1, 0xb2, 0xfb, 0x69, 0xaf, 0xc3, 0x04, 0x0f, 0xb7, 0xf7, 0x6d, 0x11, 0x02, 0x8f, - 0x61, 0xa3, 0x09, 0xee, 0xae, 0x20, 0x2a, 0xc2, 0x78, 0x4d, 0xb6, 0xf1, 0x81, 0x7c, 0x24, 0x39, - 0x67, 0xb5, 0xd2, 0xf4, 0xe6, 0xc7, 0x0b, 0x4f, 0x8e, 0x67, 0xc7, 0xee, 0xb2, 0xa4, 0x8e, 0x23, - 0x5b, 0x63, 0x35, 0x5f, 0x82, 0x8a, 0xae, 0xc2, 0xb8, 0x6c, 0x1d, 0xe9, 0x0a, 0x55, 0x0f, 0xd6, - 0xad, 0x96, 0x45, 0x21, 0x45, 0x52, 0xcc, 0x52, 0x72, 0xd1, 0xa1, 0xa2, 0x8b, 0x90, 0xe1, 0xb1, - 0xe8, 0xec, 0x2b, 0x38, 0xe3, 0xb4, 0xaa, 0xfc, 0xa3, 0x0c, 0xf4, 0x43, 0x38, 0xe8, 0x36, 0x4c, - 0xf3, 0xcb, 0xea, 0x0f, 0x64, 0x53, 0x95, 0xa8, 0xd6, 0xbd, 0xfe, 0x99, 0xa3, 0x62, 0xcf, 0xb1, - 0xcb, 0xe9, 0x49, 0x06, 0xa2, 0x6a, 0xef, 0x52, 0x85, 0x0d, 0x98, 0x50, 0xea, 0x9a, 0x8b, 0x00, - 0x58, 0xcd, 0x27, 0xba, 0xda, 0xd9, 0x22, 0xcd, 0xeb, 0x6d, 0x91, 0x8e, 0x2b, 0x41, 0x02, 0xbb, - 0x03, 0x77, 0x35, 0x91, 0xcc, 0xe4, 0xc6, 0x56, 0x13, 0xc9, 0x6c, 0x6e, 0xbc, 0xf0, 0x2b, 0x02, - 0x8c, 0xb7, 0xb1, 0xa1, 0x32, 0x9c, 0x51, 0xdd, 0x5e, 0x2d, 0xf1, 0x53, 0x47, 0x9a, 0xa1, 0xf3, - 0x6b, 0xbe, 0x27, 0x9f, 0x1e, 0xcf, 0x8e, 0xd3, 0xdc, 0x77, 0xdd, 0x24, 0x71, 0xca, 0xe3, 0xf0, - 0xa8, 0xe8, 0x35, 0xc8, 0x32, 0x4f, 0xcf, 0xfd, 0x2a, 0x1b, 0x0d, 0x05, 0x5f, 0x9a, 0x78, 0x7a, - 0x3c, 0x3b, 0x46, 0xdd, 0x3b, 0xe7, 0x02, 0x5f, 0x71, 0xac, 0xee, 0x7f, 0x2c, 0xfc, 0xb2, 0x00, - 0x99, 0xc0, 0x39, 0x9e, 0xdb, 0x6d, 0x9b, 0xdd, 0xe7, 0xc3, 0x21, 0x62, 0xb7, 0xf8, 0xb8, 0x24, - 0xef, 0x92, 0x4e, 0xb0, 0xe1, 0x6c, 0x77, 0x88, 0x41, 0x17, 0x4c, 0x9c, 0x08, 0x0b, 0x87, 0xed, - 0xf5, 0xc4, 0xaf, 0x7d, 0x30, 0x3b, 0x54, 0xf8, 0x30, 0x01, 0x63, 0xc1, 0xf3, 0x3a, 0x2b, 0x6d, - 0xe5, 0x0a, 0x33, 0xe1, 0x01, 0x8e, 0xf9, 0x1e, 0xd7, 0x16, 0xa6, 0xbc, 0x5b, 0xf5, 0x59, 0x31, - 0xe7, 0x7a, 0x6c, 0xe9, 0xfb, 0xcb, 0xe9, 0x31, 0x4e, 0xff, 0xbf, 0xb8, 0x6b, 0x0a, 0xe7, 0x61, - 0x98, 0x5e, 0xa4, 0xc3, 0x8b, 0x16, 0x76, 0x14, 0xbc, 0x44, 0xd2, 0x45, 0x96, 0x8d, 0x98, 0xce, - 0xea, 0xa9, 0xee, 0xa6, 0xf3, 0x7a, 0xec, 0xc9, 0x3f, 0x7f, 0xc7, 0x6f, 0x28, 0x1c, 0x3e, 0xd9, - 0x0d, 0x85, 0x6c, 0xf3, 0xbd, 0x5e, 0x67, 0xd3, 0x12, 0x33, 0x1e, 0x23, 0x1d, 0xe7, 0xad, 0xa9, - 0x08, 0xfe, 0x55, 0xc2, 0x79, 0x91, 0x7f, 0x95, 0xd0, 0x17, 0xb0, 0x99, 0x75, 0x45, 0x30, 0x4b, - 0xd3, 0x16, 0x3b, 0x3a, 0x7a, 0x9a, 0xd8, 0x51, 0x16, 0x75, 0xcc, 0xfb, 0xcb, 0x5f, 0x08, 0x3c, - 0x72, 0xe3, 0x9e, 0x61, 0xec, 0xb5, 0xdc, 0x98, 0xcf, 0x69, 0xff, 0xfd, 0x80, 0xc9, 0xa7, 0xc7, - 0xb3, 0x09, 0xd1, 0xbd, 0x20, 0x30, 0xcc, 0x34, 0xc7, 0x3e, 0x9e, 0x69, 0xbe, 0x08, 0x99, 0xa6, - 0x89, 0x77, 0xb0, 0xad, 0xec, 0x4a, 0x7a, 0xab, 0xc1, 0x8f, 0x8c, 0xa4, 0x1d, 0xda, 0x46, 0xab, - 0x81, 0x9e, 0x87, 0x9c, 0x9b, 0x85, 0x83, 0x60, 0x7e, 0x62, 0x7e, 0xdc, 0xa1, 0x73, 0xc8, 0x5c, - 0xf8, 0x17, 0x01, 0x26, 0x03, 0x75, 0xe2, 0x23, 0x61, 0x15, 0xd2, 0x9e, 0x11, 0xb0, 0xf2, 0xc2, - 0x09, 0x63, 0x1f, 0xfd, 0xcc, 0x48, 0x82, 0xb3, 0xce, 0x6b, 0xe9, 0x9d, 0xf1, 0x9e, 0xd8, 0xd8, - 0x09, 0xc5, 0x9e, 0xf1, 0xe4, 0x2c, 0xfb, 0x5e, 0xe0, 0x0e, 0x8d, 0xf8, 0x40, 0x43, 0xa3, 0xf0, - 0xbe, 0x00, 0x39, 0xfa, 0x82, 0x3b, 0x18, 0xab, 0x91, 0xd8, 0x24, 0x27, 0xb2, 0x38, 0x36, 0xf8, - 0xa1, 0x90, 0xc0, 0x37, 0x2f, 0xe2, 0xc1, 0x6f, 0x5e, 0x14, 0x3e, 0x10, 0x20, 0xeb, 0x96, 0x90, - 0x7d, 0xed, 0xad, 0xc7, 0x35, 0x94, 0xa7, 0xfb, 0xc6, 0x99, 0x73, 0xb3, 0xc6, 0x40, 0x1f, 0xa0, - 0xf3, 0xdf, 0xac, 0xc1, 0xbe, 0xc7, 0xf5, 0x1b, 0x4e, 0xcf, 0x21, 0x45, 0x2c, 0x7a, 0xb7, 0x26, - 0x9c, 0xe2, 0x7c, 0x8c, 0x48, 0x3f, 0x9a, 0x69, 0xd4, 0xf7, 0xd9, 0x95, 0x26, 0x03, 0x19, 0x2b, - 0xc4, 0xe3, 0x95, 0x80, 0x2f, 0x97, 0xa9, 0xd5, 0x0a, 0xfd, 0x9c, 0x26, 0xfb, 0x6f, 0x15, 0xee, - 0xf8, 0x14, 0x48, 0x1b, 0x9f, 0x68, 0x69, 0x20, 0x03, 0xea, 0x68, 0x89, 0xf5, 0x95, 0x1f, 0xfa, - 0x5b, 0xa2, 0xb4, 0x4f, 0x60, 0xd2, 0x2d, 0x88, 0xef, 0xcb, 0xf5, 0x5e, 0x71, 0x5a, 0x81, 0x96, - 0x13, 0x49, 0x6e, 0x74, 0x27, 0x70, 0xd9, 0x44, 0xac, 0xbb, 0x4b, 0xdf, 0xa9, 0xd2, 0xc0, 0xa5, - 0x14, 0xaf, 0x06, 0xfb, 0x7a, 0xcf, 0xd7, 0xfb, 0x3b, 0xfd, 0xeb, 0x89, 0x8f, 0x3e, 0x98, 0x15, - 0x0a, 0xaf, 0xc2, 0xf9, 0xbb, 0x86, 0x65, 0x69, 0x4d, 0x02, 0xe3, 0xe8, 0x00, 0x22, 0xb6, 0xdb, - 0xb5, 0x64, 0xc9, 0x26, 0x05, 0xf4, 0x3a, 0x1b, 0xf1, 0x29, 0xd1, 0x7d, 0x2e, 0xfc, 0x91, 0x00, - 0xe7, 0x3a, 0x39, 0x99, 0x42, 0xc2, 0xce, 0xdf, 0x8d, 0x2a, 0x86, 0x77, 0xf9, 0x5a, 0xff, 0x8e, - 0xe5, 0x64, 0x27, 0xee, 0x1a, 0x7f, 0xa7, 0xd4, 0x90, 0xe9, 0x48, 0xe7, 0x67, 0x84, 0xb3, 0x9c, - 0xbc, 0xce, 0xa8, 0xde, 0xa0, 0x4f, 0x0c, 0x34, 0xe8, 0xaf, 0x57, 0x60, 0x32, 0xc4, 0xbe, 0xa2, - 0x2c, 0x80, 0xef, 0x1b, 0x20, 0xfc, 0xdb, 0xa3, 0x8b, 0xcb, 0xd2, 0xd6, 0x46, 0xf1, 0xfe, 0xfa, - 0xfa, 0x4a, 0xb5, 0x5a, 0x5a, 0xce, 0x09, 0x28, 0x07, 0x99, 0xc0, 0x17, 0x44, 0x62, 0xec, 0x6b, - 0xa4, 0xd7, 0xff, 0x07, 0x80, 0xf7, 0x61, 0x22, 0x22, 0x6b, 0xad, 0xf4, 0xb6, 0xf4, 0x70, 0xf1, - 0xde, 0x56, 0xa9, 0x92, 0x1b, 0x42, 0x08, 0xb2, 0x4b, 0x8b, 0xd5, 0x62, 0x59, 0x12, 0x4b, 0x95, - 0xcd, 0xfb, 0x1b, 0x95, 0x92, 0xf3, 0x15, 0xd3, 0xeb, 0xcb, 0x90, 0xf1, 0x5f, 0x48, 0x82, 0x26, - 0x61, 0xbc, 0x58, 0x2e, 0x15, 0xd7, 0xa4, 0x87, 0x2b, 0x8b, 0xd2, 0x83, 0xad, 0xd2, 0x56, 0x29, - 0x37, 0x44, 0x8b, 0x46, 0x89, 0x77, 0xb6, 0xee, 0xdd, 0xcb, 0x09, 0x68, 0x1c, 0xd2, 0xec, 0x99, - 0x7e, 0x6d, 0x24, 0x17, 0xbb, 0xbe, 0x0e, 0x69, 0xdf, 0x75, 0xa4, 0xe4, 0x75, 0x9b, 0x5b, 0x95, - 0xb2, 0x54, 0x5d, 0x59, 0x2f, 0x55, 0xaa, 0x8b, 0xeb, 0x9b, 0x4c, 0x06, 0xa5, 0x2d, 0x2e, 0xdd, - 0x17, 0xab, 0x39, 0xc1, 0x7d, 0xae, 0xde, 0xdf, 0x2a, 0x96, 0x9d, 0x6a, 0x14, 0x12, 0xc9, 0x78, - 0x2e, 0x7e, 0xfd, 0x6b, 0x02, 0x9c, 0xeb, 0x72, 0x2d, 0x07, 0x4a, 0xc3, 0xe8, 0x96, 0x4e, 0xef, - 0x63, 0xcc, 0x0d, 0xa1, 0x31, 0xdf, 0xcd, 0x1c, 0x39, 0x01, 0x25, 0xd9, 0xad, 0x08, 0xb9, 0x18, - 0x1a, 0x81, 0x58, 0xe5, 0x56, 0x2e, 0x4e, 0x4a, 0xea, 0xbb, 0xd8, 0x22, 0x97, 0x40, 0x29, 0x7e, - 0x2e, 0x3f, 0x37, 0x8c, 0x32, 0xde, 0xc1, 0xf8, 0xdc, 0x08, 0x11, 0xe5, 0x1e, 0x2d, 0xcf, 0x8d, - 0x5e, 0xbf, 0x08, 0xbe, 0x63, 0xba, 0x08, 0x60, 0xe4, 0x9e, 0x6c, 0x63, 0xcb, 0xce, 0x0d, 0xa1, - 0x51, 0x88, 0x2f, 0xd6, 0xeb, 0x39, 0xe1, 0xe6, 0xff, 0x8f, 0x43, 0xd2, 0xf9, 0x9e, 0x06, 0xba, - 0x07, 0xc3, 0x6c, 0xd5, 0x6f, 0xb6, 0xbb, 0xa7, 0x46, 0xfb, 0xf6, 0xf4, 0x5c, 0x3f, 0x57, 0xae, - 0x30, 0x84, 0xfe, 0x27, 0xa4, 0x7d, 0x73, 0x21, 0xea, 0xba, 0x72, 0x11, 0x98, 0xff, 0xa7, 0xaf, - 0xf4, 0xcb, 0xe6, 0xca, 0x7f, 0x0b, 0x52, 0xee, 0xd8, 0x44, 0xcf, 0xf5, 0x1a, 0xb9, 0x8e, 0xec, - 0xde, 0xc3, 0x9b, 0x0c, 0xbe, 0xc2, 0xd0, 0x4b, 0x02, 0x32, 0x01, 0x75, 0x8e, 0x4d, 0x14, 0xb6, - 0x19, 0xdc, 0x75, 0xf0, 0x4f, 0x5f, 0x1f, 0x28, 0xb7, 0xfb, 0xce, 0xa5, 0xe7, 0x3f, 0xfa, 0xe9, - 0xcc, 0xd0, 0x47, 0x4f, 0x66, 0x84, 0x1f, 0x3d, 0x99, 0x11, 0x7e, 0xf2, 0x64, 0x46, 0xf8, 0xbb, - 0x27, 0x33, 0xc2, 0x2f, 0xfd, 0x6c, 0x66, 0xe8, 0x47, 0x3f, 0x9b, 0x19, 0xfa, 0xc9, 0xcf, 0x66, - 0x86, 0xde, 0x19, 0xe5, 0x62, 0xb6, 0x47, 0xe8, 0xf7, 0xa1, 0x6f, 0xfd, 0x67, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xfa, 0x79, 0x3b, 0x5c, 0x42, 0x7b, 0x00, 0x00, +func init() { proto.RegisterFile("roachpb/api.proto", fileDescriptor_api_831b3c8e16e707a9) } + +var fileDescriptor_api_831b3c8e16e707a9 = []byte{ + // 7817 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x6b, 0x6c, 0x23, 0xc9, + 0x75, 0xae, 0x9a, 0xa4, 0x24, 0xf2, 0x90, 0xa2, 0xa8, 0x92, 0x66, 0x86, 0xa3, 0xd9, 0x95, 0x34, + 0xdc, 0x79, 0xed, 0x78, 0x57, 0xda, 0x99, 0xd9, 0xbd, 0xbb, 0xde, 0x59, 0xaf, 0x2d, 0x51, 0x9c, + 0xa1, 0xa4, 0x91, 0x46, 0xd3, 0xa4, 0x66, 0xbc, 0x6b, 0xef, 0x6d, 0xb7, 0xba, 0x4b, 0x54, 0x5b, + 0x64, 0x37, 0xa7, 0xbb, 0xa9, 0xc7, 0x00, 0x17, 0xf0, 0x7d, 0xc1, 0x17, 0xbe, 0x17, 0x8b, 0xfb, + 0xe3, 0xde, 0x8b, 0x8b, 0x38, 0xc6, 0x2e, 0xe0, 0x00, 0x0e, 0x60, 0x6c, 0x10, 0xe4, 0x5f, 0x02, + 0xe7, 0xf1, 0xc3, 0x01, 0x36, 0x86, 0x03, 0x38, 0x01, 0x12, 0x1b, 0x01, 0x22, 0xc4, 0x63, 0x20, + 0x08, 0xf2, 0x23, 0x40, 0xf2, 0x23, 0x01, 0x06, 0x48, 0x10, 0xd4, 0xa3, 0x5f, 0x64, 0xf3, 0x21, + 0x6d, 0x6f, 0xb2, 0x80, 0xff, 0x10, 0xec, 0x53, 0x75, 0x4e, 0x57, 0x9d, 0xaa, 0x3a, 0x75, 0xbe, + 0xaa, 0x53, 0xd5, 0x30, 0x61, 0x1a, 0xb2, 0xb2, 0xdb, 0xdc, 0x5e, 0x90, 0x9b, 0xda, 0x7c, 0xd3, + 0x34, 0x6c, 0x03, 0x4d, 0x28, 0x86, 0xb2, 0x47, 0xc9, 0xf3, 0x3c, 0x71, 0xfa, 0xfa, 0xde, 0xfe, + 0xc2, 0xde, 0xbe, 0x85, 0xcd, 0x7d, 0x6c, 0x2e, 0x28, 0x86, 0xae, 0xb4, 0x4c, 0x13, 0xeb, 0xca, + 0xd1, 0x42, 0xdd, 0x50, 0xf6, 0xe8, 0x8f, 0xa6, 0xd7, 0x18, 0xfb, 0x34, 0x72, 0x24, 0xaa, 0xb2, + 0x2d, 0x73, 0xda, 0x94, 0x43, 0xc3, 0xa6, 0x69, 0x98, 0x16, 0xa7, 0x9e, 0x75, 0xa8, 0x0d, 0x6c, + 0xcb, 0xbe, 0xdc, 0x17, 0x2c, 0xdb, 0x30, 0xe5, 0x1a, 0x5e, 0xc0, 0x7a, 0x4d, 0xd3, 0x31, 0xc9, + 0xb0, 0xaf, 0x28, 0x3c, 0xf1, 0xb9, 0xd0, 0xc4, 0x5b, 0x3c, 0x35, 0xdf, 0xb2, 0xb5, 0xfa, 0xc2, + 0x6e, 0x5d, 0x59, 0xb0, 0xb5, 0x06, 0xb6, 0x6c, 0xb9, 0xd1, 0xe4, 0x29, 0x73, 0x34, 0xc5, 0x36, + 0x65, 0x45, 0xd3, 0x6b, 0x0b, 0x26, 0x56, 0x0c, 0x53, 0xc5, 0xaa, 0x64, 0x35, 0x65, 0xdd, 0x29, + 0x64, 0xcd, 0xa8, 0x19, 0xf4, 0xef, 0x02, 0xf9, 0xc7, 0xa8, 0x85, 0x1f, 0x08, 0x30, 0x26, 0xe2, + 0xc7, 0x2d, 0x6c, 0xd9, 0x65, 0x2c, 0xab, 0xd8, 0x44, 0xe7, 0x21, 0xbe, 0x87, 0x8f, 0xf2, 0xf1, + 0x39, 0xe1, 0x5a, 0x66, 0x69, 0xf4, 0xd9, 0xf1, 0x6c, 0x7c, 0x0d, 0x1f, 0x89, 0x84, 0x86, 0xe6, + 0x60, 0x14, 0xeb, 0xaa, 0x44, 0x92, 0x13, 0xc1, 0xe4, 0x11, 0xac, 0xab, 0x6b, 0xf8, 0x08, 0x7d, + 0x15, 0x92, 0x16, 0x91, 0xa6, 0x2b, 0x38, 0x3f, 0x3c, 0x27, 0x5c, 0x1b, 0x5e, 0xfa, 0xd2, 0xb3, + 0xe3, 0xd9, 0xb7, 0x6a, 0x9a, 0xbd, 0xdb, 0xda, 0x9e, 0x57, 0x8c, 0xc6, 0x82, 0xab, 0x7d, 0x75, + 0xdb, 0xfb, 0xbf, 0xd0, 0xdc, 0xab, 0x2d, 0xb4, 0xd7, 0x7c, 0xbe, 0x7a, 0xa8, 0x57, 0xf0, 0x63, + 0xd1, 0x95, 0xf8, 0x66, 0xe2, 0x6f, 0x3e, 0x9c, 0x15, 0x56, 0x13, 0x49, 0x21, 0x17, 0x5b, 0x4d, + 0x24, 0x63, 0xb9, 0x78, 0xe1, 0xbb, 0x71, 0xc8, 0x8a, 0xd8, 0x6a, 0x1a, 0xba, 0x85, 0x79, 0xf9, + 0x5f, 0x81, 0xb8, 0x7d, 0xa8, 0xd3, 0xf2, 0xa7, 0x6f, 0xce, 0xcc, 0x77, 0xb4, 0xf6, 0x7c, 0xd5, + 0x94, 0x75, 0x4b, 0x56, 0x6c, 0xcd, 0xd0, 0x45, 0x92, 0x15, 0xbd, 0x01, 0x69, 0x13, 0x5b, 0xad, + 0x06, 0xa6, 0xea, 0xa2, 0x55, 0x4b, 0xdf, 0x3c, 0x17, 0xc2, 0x59, 0x69, 0xca, 0xba, 0x08, 0x2c, + 0x2f, 0xf9, 0x8f, 0xce, 0x43, 0x52, 0x6f, 0x35, 0x88, 0x42, 0x2c, 0x5a, 0xdd, 0xb8, 0x38, 0xaa, + 0xb7, 0x1a, 0x6b, 0xf8, 0xc8, 0x42, 0x5f, 0x86, 0xb3, 0x2a, 0x6e, 0x9a, 0x58, 0x91, 0x6d, 0xac, + 0x4a, 0xa6, 0xac, 0xd7, 0xb0, 0xa4, 0xe9, 0x3b, 0x86, 0x95, 0x1f, 0x99, 0x8b, 0x5f, 0x4b, 0xdf, + 0x7c, 0x2e, 0x44, 0xbe, 0x48, 0x72, 0xad, 0xe8, 0x3b, 0xc6, 0x52, 0xe2, 0xe3, 0xe3, 0xd9, 0x21, + 0x71, 0xca, 0x93, 0xe0, 0x26, 0x59, 0xa8, 0x02, 0x63, 0xbc, 0xb8, 0x26, 0x96, 0x2d, 0x43, 0xcf, + 0x8f, 0xce, 0x09, 0xd7, 0xb2, 0x37, 0xe7, 0xc3, 0x04, 0x06, 0x54, 0x43, 0x1e, 0x5b, 0x0d, 0x2c, + 0x52, 0x2e, 0x31, 0x63, 0xfa, 0x9e, 0xd0, 0x05, 0x48, 0x91, 0x9a, 0x6c, 0x1f, 0xd9, 0xd8, 0xca, + 0x27, 0x69, 0x55, 0x48, 0xd5, 0x96, 0xc8, 0x73, 0xe1, 0x6d, 0xc8, 0xf8, 0x59, 0x11, 0x82, 0xac, + 0x58, 0xaa, 0x6c, 0xad, 0x97, 0xa4, 0xad, 0x8d, 0xb5, 0x8d, 0xfb, 0x8f, 0x36, 0x72, 0x43, 0x68, + 0x0a, 0x72, 0x9c, 0xb6, 0x56, 0x7a, 0x47, 0xba, 0xb7, 0xb2, 0xbe, 0x52, 0xcd, 0x09, 0xd3, 0x89, + 0xff, 0xf1, 0xdd, 0x99, 0xa1, 0xc2, 0x43, 0x80, 0xbb, 0xd8, 0xe6, 0xdd, 0x0c, 0x2d, 0xc1, 0xc8, + 0x2e, 0x2d, 0x4f, 0x5e, 0xa0, 0x9a, 0x9e, 0x0b, 0x2d, 0xb8, 0xaf, 0x4b, 0x2e, 0x25, 0x89, 0x36, + 0x7e, 0x72, 0x3c, 0x2b, 0x88, 0x9c, 0x93, 0xf5, 0x84, 0xc2, 0xef, 0x0b, 0x90, 0xa6, 0x82, 0x59, + 0x2d, 0x51, 0xb1, 0x4d, 0xf2, 0xc5, 0xbe, 0x2a, 0xe9, 0x14, 0x8d, 0xe6, 0x61, 0x78, 0x5f, 0xae, + 0xb7, 0x70, 0x3e, 0x46, 0x65, 0xe4, 0x43, 0x64, 0x3c, 0x24, 0xe9, 0x22, 0xcb, 0x86, 0x6e, 0x43, + 0x46, 0xd3, 0x6d, 0xac, 0xdb, 0x12, 0x63, 0x8b, 0xf7, 0x61, 0x4b, 0xb3, 0xdc, 0xf4, 0xa1, 0xf0, + 0x3b, 0x02, 0xc0, 0x66, 0x2b, 0x4a, 0xd5, 0xa0, 0x57, 0x07, 0x2c, 0x3f, 0xef, 0x63, 0xbc, 0x16, + 0x67, 0x61, 0x44, 0xd3, 0xeb, 0x9a, 0xce, 0xca, 0x9f, 0x14, 0xf9, 0x13, 0x9a, 0x82, 0xe1, 0xed, + 0xba, 0xa6, 0xab, 0x74, 0x54, 0x24, 0x45, 0xf6, 0xc0, 0xd5, 0x2f, 0x42, 0x9a, 0x96, 0x3d, 0x42, + 0xed, 0x17, 0x7e, 0x1c, 0x83, 0x33, 0x45, 0x43, 0x57, 0x35, 0x32, 0x3c, 0xe5, 0xfa, 0x67, 0x42, + 0x37, 0xab, 0xe0, 0x1b, 0x88, 0x12, 0x3e, 0x6c, 0x0e, 0xd8, 0xd2, 0xc8, 0xe3, 0x2a, 0x1d, 0x36, + 0x29, 0x2d, 0x5c, 0x9f, 0xe8, 0x55, 0x38, 0x27, 0xd7, 0xeb, 0xc6, 0x81, 0xa4, 0xed, 0x48, 0xaa, + 0x81, 0x2d, 0x49, 0x37, 0x6c, 0x09, 0x1f, 0x6a, 0x96, 0x4d, 0xcd, 0x4a, 0x52, 0x9c, 0xa4, 0xc9, + 0x2b, 0x3b, 0xcb, 0x06, 0xb6, 0x36, 0x0c, 0xbb, 0x44, 0x92, 0xc8, 0x98, 0x25, 0x85, 0x61, 0x63, + 0x76, 0x84, 0x18, 0x64, 0x31, 0x89, 0x0f, 0x9b, 0x74, 0xcc, 0xf2, 0x26, 0x7a, 0x0f, 0xce, 0xb6, + 0x6b, 0x33, 0xca, 0xd6, 0xfa, 0x53, 0x01, 0xb2, 0x2b, 0xba, 0x66, 0x7f, 0x26, 0x9a, 0xc9, 0x55, + 0x6d, 0xdc, 0xaf, 0xda, 0xeb, 0x90, 0xdb, 0x91, 0xb5, 0xfa, 0x7d, 0xbd, 0x6a, 0x34, 0xb6, 0x2d, + 0xdb, 0xd0, 0xb1, 0xc5, 0x75, 0xdf, 0x41, 0xe7, 0x3a, 0x7b, 0x08, 0xe3, 0x6e, 0x9d, 0xa2, 0x54, + 0xd6, 0x13, 0xc8, 0xad, 0xe8, 0x8a, 0x89, 0x1b, 0x58, 0x8f, 0x54, 0x5b, 0xcf, 0x41, 0x4a, 0x73, + 0xe4, 0x52, 0x8d, 0xc5, 0x45, 0x8f, 0xc0, 0xeb, 0xd4, 0x82, 0x09, 0xdf, 0xbb, 0xa3, 0x34, 0x97, + 0x64, 0xe2, 0xc0, 0x07, 0x92, 0xd7, 0x5e, 0x64, 0xe2, 0xc0, 0x07, 0xcc, 0xbc, 0xbd, 0x03, 0x63, + 0xcb, 0xb8, 0x8e, 0x6d, 0x1c, 0xbd, 0xed, 0xdf, 0x82, 0xac, 0x23, 0x3a, 0xca, 0x46, 0xfa, 0x8e, + 0x00, 0x88, 0xcb, 0x25, 0x33, 0x6e, 0x94, 0xed, 0x34, 0x4b, 0xdc, 0x0c, 0xbb, 0x65, 0xea, 0xcc, + 0x5f, 0x60, 0xbd, 0x14, 0x18, 0x89, 0xba, 0x0c, 0x9e, 0x0d, 0x4e, 0xf8, 0x6d, 0xb0, 0xeb, 0xf6, + 0x10, 0x87, 0xe7, 0x00, 0x26, 0x03, 0xc5, 0x8b, 0xb6, 0x29, 0x13, 0xb4, 0x64, 0xb1, 0xb9, 0xb8, + 0xdf, 0xb7, 0xa3, 0xc4, 0xc2, 0x7b, 0x30, 0x51, 0xac, 0x63, 0xd9, 0x8c, 0x5a, 0x2d, 0xbc, 0x39, + 0xdf, 0x01, 0xe4, 0x17, 0x1f, 0x65, 0x93, 0xfe, 0x9a, 0x00, 0x48, 0xc4, 0xfb, 0xd8, 0xb4, 0x23, + 0x6f, 0xd2, 0x65, 0x48, 0xdb, 0xb2, 0x59, 0xc3, 0xb6, 0x44, 0xfc, 0x71, 0x6e, 0xae, 0x9e, 0xf7, + 0x09, 0x22, 0x5e, 0xf9, 0xfc, 0x6e, 0x5d, 0x99, 0xaf, 0x3a, 0xfe, 0x3a, 0xb7, 0x59, 0xc0, 0xf8, + 0x08, 0x99, 0x6b, 0xe0, 0x5d, 0x98, 0x0c, 0x94, 0x32, 0x4a, 0x15, 0xfc, 0xa3, 0x00, 0xe9, 0x8a, + 0x22, 0xeb, 0x51, 0xd6, 0xfd, 0x6d, 0x48, 0x5b, 0x8a, 0xac, 0x4b, 0x3b, 0x86, 0xd9, 0x90, 0x6d, + 0xda, 0x65, 0xb3, 0x81, 0xba, 0xbb, 0x5e, 0xb3, 0x22, 0xeb, 0x77, 0x68, 0x26, 0x11, 0x2c, 0xf7, + 0x3f, 0x7a, 0x00, 0xe9, 0x3d, 0x7c, 0x24, 0x71, 0x74, 0x45, 0xe7, 0xb9, 0xec, 0xcd, 0x57, 0x7c, + 0xfc, 0x7b, 0xfb, 0xf3, 0x0e, 0x28, 0x9b, 0xf7, 0x81, 0xb2, 0x79, 0xc2, 0x31, 0x5f, 0xb1, 0x4d, + 0xac, 0xd7, 0xec, 0x5d, 0x11, 0xf6, 0xf0, 0xd1, 0x3d, 0x26, 0xc3, 0x3f, 0x50, 0x56, 0x13, 0xc9, + 0x78, 0x2e, 0x51, 0xf8, 0x27, 0x01, 0x32, 0xac, 0xe2, 0x51, 0x0e, 0x94, 0xd7, 0x20, 0x61, 0x1a, + 0x07, 0x6c, 0xa0, 0xa4, 0x6f, 0x5e, 0x08, 0x11, 0xb1, 0x86, 0x8f, 0xfc, 0x33, 0x14, 0xcd, 0x8e, + 0x96, 0x80, 0xfb, 0x7e, 0x12, 0xe5, 0x8e, 0x0f, 0xca, 0x0d, 0x8c, 0x4b, 0x24, 0x32, 0xae, 0xc2, + 0xf8, 0xb6, 0x6c, 0x2b, 0xbb, 0x92, 0xc9, 0x0b, 0x49, 0x66, 0xb3, 0xf8, 0xb5, 0x8c, 0x98, 0xa5, + 0x64, 0xa7, 0xe8, 0x56, 0xe1, 0x9f, 0x9d, 0x5e, 0x6f, 0xe1, 0x5f, 0xca, 0x96, 0xff, 0x17, 0x81, + 0x8f, 0x27, 0xa7, 0xfe, 0xbf, 0x6c, 0x1d, 0xe0, 0x83, 0x18, 0x9c, 0x2b, 0xee, 0x62, 0x65, 0xaf, + 0x68, 0xe8, 0x96, 0x66, 0xd9, 0x44, 0x83, 0x51, 0xf6, 0x82, 0x0b, 0x90, 0x3a, 0xd0, 0xec, 0x5d, + 0x49, 0xd5, 0x76, 0x76, 0xa8, 0xe5, 0x4b, 0x8a, 0x49, 0x42, 0x58, 0xd6, 0x76, 0x76, 0xd0, 0x2d, + 0x48, 0x34, 0x0c, 0x95, 0xb9, 0xc8, 0xd9, 0x9b, 0xb3, 0x21, 0xe2, 0x69, 0xd1, 0xac, 0x56, 0x63, + 0xdd, 0x50, 0xb1, 0x48, 0x33, 0xa3, 0x19, 0x00, 0x85, 0x50, 0x9b, 0x86, 0xa6, 0xdb, 0x7c, 0x0e, + 0xf4, 0x51, 0x50, 0x19, 0x52, 0x36, 0x36, 0x1b, 0x9a, 0x2e, 0xdb, 0x38, 0x3f, 0x4c, 0x95, 0x77, + 0x29, 0xb4, 0xe0, 0xcd, 0xba, 0xa6, 0xc8, 0xcb, 0xd8, 0x52, 0x4c, 0xad, 0x69, 0x1b, 0x26, 0xd7, + 0xa2, 0xc7, 0xcc, 0x2d, 0xee, 0xfb, 0x09, 0xc8, 0x77, 0x6a, 0x28, 0xca, 0x7e, 0xb2, 0x09, 0x23, + 0x04, 0x65, 0xd7, 0x6d, 0xde, 0x53, 0x6e, 0x76, 0x53, 0x44, 0x48, 0x09, 0x28, 0x5a, 0xaf, 0xdb, + 0xbc, 0xf0, 0x5c, 0xce, 0xf4, 0x0f, 0x04, 0x18, 0x61, 0x09, 0xe8, 0x06, 0x24, 0xf9, 0xb2, 0x82, + 0x4a, 0xcb, 0x18, 0x5f, 0x3a, 0xfb, 0xf4, 0x78, 0x76, 0x94, 0xad, 0x14, 0x2c, 0x3f, 0xf3, 0xfe, + 0x8a, 0xa3, 0x34, 0xdf, 0x8a, 0x4a, 0xda, 0xcc, 0xb2, 0x65, 0xd3, 0xa6, 0x4b, 0x38, 0x31, 0x86, + 0x18, 0x28, 0x61, 0x0d, 0x1f, 0xa1, 0x55, 0x18, 0xb1, 0x6c, 0xd9, 0x6e, 0x59, 0xbc, 0xd5, 0x4e, + 0x54, 0xd8, 0x0a, 0xe5, 0x14, 0xb9, 0x04, 0xe2, 0xca, 0xa8, 0xd8, 0x96, 0xb5, 0x3a, 0x6d, 0xc6, + 0x94, 0xc8, 0x9f, 0x0a, 0xdf, 0x16, 0x60, 0x84, 0x65, 0x45, 0xe7, 0x60, 0x52, 0x5c, 0xdc, 0xb8, + 0x5b, 0x92, 0x56, 0x36, 0x96, 0x4b, 0xd5, 0x92, 0xb8, 0xbe, 0xb2, 0xb1, 0x58, 0x2d, 0xe5, 0x86, + 0xd0, 0x59, 0x40, 0x4e, 0x42, 0xf1, 0xfe, 0x46, 0x65, 0xa5, 0x52, 0x2d, 0x6d, 0x54, 0x73, 0x02, + 0x5d, 0x61, 0xa0, 0x74, 0x1f, 0x35, 0x86, 0x2e, 0xc1, 0x5c, 0x3b, 0x55, 0xaa, 0x54, 0x17, 0xab, + 0x15, 0xa9, 0x54, 0xa9, 0xae, 0xac, 0x2f, 0x56, 0x4b, 0xcb, 0xb9, 0x78, 0x8f, 0x5c, 0xe4, 0x25, + 0xa2, 0x58, 0x2a, 0x56, 0x73, 0x89, 0xc2, 0x13, 0x38, 0x23, 0x62, 0xc5, 0x68, 0x34, 0x5b, 0x36, + 0x26, 0xa5, 0xb4, 0xa2, 0x1c, 0x2f, 0xe7, 0x60, 0x54, 0x35, 0x8f, 0x24, 0xb3, 0xa5, 0xf3, 0xd1, + 0x32, 0xa2, 0x9a, 0x47, 0x62, 0x4b, 0xe7, 0x9d, 0xf1, 0x37, 0x05, 0x38, 0xdb, 0xfe, 0xf2, 0x28, + 0xbb, 0xe2, 0x03, 0x48, 0xcb, 0xaa, 0x8a, 0x55, 0x49, 0xc5, 0x75, 0x5b, 0xe6, 0xae, 0xca, 0x75, + 0x9f, 0x24, 0xbe, 0xfc, 0x36, 0xef, 0x2e, 0xbf, 0xad, 0x3f, 0x2c, 0x16, 0x69, 0x41, 0x96, 0x09, + 0x87, 0x63, 0x8a, 0xa8, 0x10, 0x4a, 0x29, 0xfc, 0x56, 0x02, 0xc6, 0x4a, 0xba, 0x5a, 0x3d, 0x8c, + 0x74, 0x76, 0x39, 0x0b, 0x23, 0x8a, 0xd1, 0x68, 0x68, 0xb6, 0xa3, 0x26, 0xf6, 0x84, 0x3e, 0x0f, + 0x49, 0x15, 0xcb, 0xaa, 0xbb, 0x46, 0xd1, 0xcf, 0xd1, 0x12, 0xdd, 0xec, 0xe8, 0x6b, 0x70, 0x8e, + 0x58, 0x50, 0x53, 0x97, 0xeb, 0x12, 0x93, 0x26, 0xd9, 0xa6, 0x56, 0xab, 0x61, 0x93, 0x2f, 0xf6, + 0x5d, 0x0b, 0x29, 0xe7, 0x0a, 0xe7, 0x28, 0x52, 0x86, 0x2a, 0xcb, 0x2f, 0x9e, 0xd1, 0xc2, 0xc8, + 0xe8, 0x2d, 0x00, 0x32, 0x39, 0xd1, 0x05, 0x44, 0x8b, 0xdb, 0xa6, 0x6e, 0x2b, 0x88, 0x8e, 0x39, + 0x22, 0x0c, 0xe4, 0xd9, 0x42, 0x0b, 0x04, 0x19, 0x3c, 0x6e, 0x69, 0x26, 0x96, 0x6e, 0x34, 0x15, + 0x0a, 0xe5, 0x93, 0x4b, 0xd9, 0xa7, 0xc7, 0xb3, 0x20, 0x32, 0xf2, 0x8d, 0xcd, 0x22, 0x41, 0x0a, + 0xec, 0x7f, 0x53, 0x41, 0x4b, 0x30, 0x43, 0x26, 0x60, 0x5e, 0x17, 0xd9, 0x96, 0x76, 0xb5, 0xda, + 0x2e, 0x36, 0x25, 0x77, 0x55, 0x98, 0x2e, 0xe1, 0x25, 0xc5, 0x69, 0x45, 0xd6, 0x59, 0x41, 0x17, + 0xed, 0x32, 0xcd, 0xe2, 0xaa, 0x87, 0xe8, 0xb9, 0x69, 0x68, 0x96, 0xa1, 0xe7, 0x53, 0x4c, 0xcf, + 0xec, 0x09, 0x3d, 0x80, 0x9c, 0xa6, 0x4b, 0x3b, 0x75, 0xad, 0xb6, 0x6b, 0x4b, 0x07, 0xa6, 0x66, + 0x63, 0x2b, 0x3f, 0x41, 0x2b, 0x14, 0xd6, 0xef, 0x2a, 0x7c, 0x6d, 0x56, 0x7d, 0x44, 0x72, 0xf2, + 0xaa, 0x65, 0x35, 0xfd, 0x0e, 0xe5, 0xa7, 0x44, 0xcb, 0x9d, 0x9d, 0x47, 0x73, 0xc9, 0xc2, 0x5f, + 0x0a, 0x90, 0x75, 0x3a, 0x4d, 0x94, 0xfd, 0xfb, 0x1a, 0xe4, 0x0c, 0x1d, 0x4b, 0xcd, 0x5d, 0xd9, + 0xc2, 0x5c, 0x31, 0x7c, 0x0a, 0xc9, 0x1a, 0x3a, 0xde, 0x24, 0x64, 0xa6, 0x09, 0xb4, 0x09, 0x13, + 0x96, 0x2d, 0xd7, 0x34, 0xbd, 0xe6, 0xd3, 0xd7, 0xf0, 0xe0, 0xae, 0x7b, 0x8e, 0x73, 0xbb, 0xf4, + 0x80, 0xdf, 0xf1, 0x53, 0x01, 0x26, 0x16, 0xd5, 0x86, 0xa6, 0x57, 0x9a, 0x75, 0x2d, 0x52, 0x9c, + 0x7f, 0x09, 0x52, 0x16, 0x91, 0xe9, 0x19, 0x6f, 0x0f, 0xa3, 0x25, 0x69, 0x0a, 0xb1, 0xe2, 0xf7, + 0x60, 0x1c, 0x1f, 0x36, 0x35, 0x53, 0xb6, 0x35, 0x43, 0x67, 0xb0, 0x24, 0x31, 0x78, 0xdd, 0xb2, + 0x1e, 0xaf, 0x07, 0x4d, 0x78, 0xcd, 0xde, 0x01, 0xe4, 0xaf, 0x58, 0x94, 0xf8, 0x44, 0x82, 0x49, + 0x2a, 0x7a, 0x4b, 0xb7, 0x22, 0xd6, 0x1a, 0xb7, 0xae, 0x5f, 0x81, 0xa9, 0xe0, 0x0b, 0xa2, 0x2c, + 0xfd, 0x7b, 0xbc, 0xc5, 0xd7, 0xb1, 0xf9, 0x29, 0x41, 0x63, 0xbf, 0xf8, 0x28, 0x4b, 0xfe, 0x2d, + 0x01, 0xce, 0x53, 0xd9, 0x74, 0x4f, 0x64, 0x07, 0x9b, 0xf7, 0xb0, 0x6c, 0x45, 0x8a, 0x90, 0x5f, + 0x80, 0x11, 0x86, 0x74, 0x69, 0x8f, 0x1d, 0x5e, 0x4a, 0x13, 0xbf, 0xa4, 0x62, 0x1b, 0x26, 0xf1, + 0x4b, 0x78, 0x12, 0xaf, 0xa7, 0x0c, 0xd3, 0x61, 0x65, 0x89, 0x78, 0x29, 0x60, 0x82, 0xbb, 0x87, + 0xa4, 0x8b, 0x17, 0x77, 0x89, 0x5f, 0x84, 0x4a, 0x90, 0x56, 0xe8, 0x3f, 0xc9, 0x3e, 0x6a, 0x62, + 0x2a, 0x3f, 0xdb, 0xcb, 0xb3, 0x64, 0x6c, 0xd5, 0xa3, 0x26, 0x26, 0xee, 0xa9, 0xf3, 0x9f, 0xa8, + 0xcb, 0x57, 0xd5, 0x9e, 0xbe, 0x29, 0x1d, 0x5f, 0x34, 0xaf, 0xe3, 0xde, 0x05, 0x34, 0xf1, 0xdb, + 0x71, 0xae, 0x0a, 0xf6, 0x26, 0xce, 0x14, 0xa9, 0x37, 0xf2, 0x6e, 0x60, 0x7b, 0xca, 0x5f, 0xfd, + 0xd8, 0x09, 0xaa, 0xef, 0x5b, 0x17, 0xf7, 0xa8, 0xe8, 0x1d, 0xf0, 0xad, 0x7c, 0x4b, 0xac, 0x66, + 0x0e, 0xda, 0x39, 0x89, 0x52, 0x26, 0x3c, 0x29, 0x8c, 0x6e, 0xa1, 0x22, 0x24, 0xf1, 0x61, 0x53, + 0x52, 0xb1, 0xa5, 0x70, 0xb3, 0x56, 0xe8, 0xb6, 0x8f, 0xd6, 0xe1, 0xff, 0x8f, 0xe2, 0xc3, 0x26, + 0x21, 0xa2, 0x2d, 0x32, 0xc3, 0x39, 0xee, 0x00, 0x2d, 0xb6, 0xd5, 0x1f, 0x4e, 0x78, 0xfd, 0x85, + 0x8b, 0x1b, 0x77, 0x3d, 0x01, 0x26, 0x82, 0xb7, 0xdd, 0x87, 0x02, 0x5c, 0x08, 0x6d, 0xbb, 0x28, + 0x27, 0xbb, 0xb7, 0x20, 0x41, 0x55, 0x10, 0x3b, 0xa1, 0x0a, 0x28, 0x57, 0xe1, 0xfb, 0xce, 0xa8, + 0x17, 0x71, 0xdd, 0x20, 0xea, 0xfd, 0x14, 0xd6, 0xc5, 0x46, 0x9d, 0x66, 0x8f, 0x9d, 0xb8, 0xd9, + 0x1d, 0xd6, 0x36, 0xb3, 0xd0, 0x56, 0xd8, 0x28, 0xcd, 0xc2, 0xff, 0x13, 0x60, 0xb2, 0x8c, 0x65, + 0xd3, 0xde, 0xc6, 0xb2, 0x1d, 0xb1, 0x3b, 0xfb, 0x1a, 0xc4, 0x75, 0xe3, 0xe0, 0x24, 0x4b, 0x83, + 0x24, 0xbf, 0x37, 0x6d, 0x05, 0xcb, 0x15, 0x65, 0xad, 0xff, 0x28, 0x06, 0xa9, 0xbb, 0xc5, 0x28, + 0xeb, 0xfa, 0x16, 0x5f, 0x40, 0x66, 0x43, 0x3d, 0xac, 0x5b, 0xba, 0xef, 0x9b, 0xbf, 0x5b, 0x5c, + 0xc3, 0x47, 0x4e, 0xb7, 0x24, 0x5c, 0x68, 0x11, 0x52, 0xf6, 0xae, 0x89, 0xad, 0x5d, 0xa3, 0xae, + 0x9e, 0xc4, 0x67, 0xf1, 0xb8, 0xa6, 0xf7, 0x60, 0x98, 0xca, 0x75, 0x82, 0x18, 0x84, 0x90, 0x20, + 0x06, 0xf2, 0x1a, 0xd7, 0xed, 0x8b, 0x9d, 0xe4, 0x35, 0x0e, 0x81, 0x35, 0x8e, 0xeb, 0x1b, 0x0d, + 0xe7, 0x46, 0x0a, 0x0f, 0x00, 0x48, 0xd5, 0xa2, 0x6c, 0x9e, 0xff, 0x15, 0x87, 0xec, 0x66, 0xcb, + 0xda, 0x8d, 0xb8, 0x3f, 0x16, 0x01, 0x9a, 0x2d, 0x8b, 0x82, 0x85, 0x43, 0x9d, 0xd7, 0xbf, 0x4f, + 0x94, 0x84, 0xa3, 0x00, 0xc6, 0x57, 0x3d, 0xd4, 0x51, 0x99, 0x0b, 0xc1, 0x92, 0x17, 0x6a, 0xf1, + 0x42, 0x2f, 0x2c, 0x59, 0x3d, 0xd4, 0xd7, 0xb1, 0x0b, 0x22, 0x99, 0x24, 0x4c, 0x24, 0xbd, 0x05, + 0xa3, 0xe4, 0x41, 0xb2, 0x8d, 0x93, 0x34, 0xf9, 0x08, 0xe1, 0xa9, 0x1a, 0xe8, 0x36, 0xa4, 0x18, + 0x37, 0x99, 0xb8, 0x46, 0xe8, 0xc4, 0x15, 0x56, 0x17, 0xae, 0x46, 0x3a, 0x65, 0x25, 0x29, 0x2b, + 0x99, 0xa6, 0xa6, 0x60, 0x78, 0xc7, 0x30, 0x15, 0x4c, 0xe3, 0x27, 0x92, 0x22, 0x7b, 0xf0, 0xb7, + 0xea, 0x6a, 0x22, 0x99, 0xcc, 0xa5, 0x56, 0x13, 0xc9, 0x54, 0x0e, 0x0a, 0xdf, 0x16, 0x60, 0xdc, + 0x6d, 0x8e, 0x28, 0x6d, 0x79, 0x31, 0xa0, 0xcb, 0x93, 0x37, 0x08, 0x51, 0x63, 0xe1, 0x8f, 0xa9, + 0x63, 0xa3, 0x18, 0xfb, 0xb4, 0x7d, 0xa2, 0xec, 0x2f, 0xb7, 0x59, 0x38, 0x4d, 0xec, 0xa4, 0x6d, + 0x4c, 0x23, 0x6b, 0x6e, 0xc0, 0x94, 0xd6, 0x20, 0x56, 0x5e, 0xb3, 0xeb, 0x47, 0x1c, 0x95, 0xd9, + 0xd8, 0xd9, 0xa1, 0x9d, 0xf4, 0xd2, 0x8a, 0x4e, 0x12, 0x37, 0x7c, 0x6c, 0xcf, 0xc6, 0xab, 0x4f, + 0x94, 0x0a, 0x5f, 0x81, 0x31, 0x93, 0x89, 0x26, 0xde, 0xc9, 0x09, 0x75, 0x9e, 0x71, 0x59, 0x89, + 0xda, 0xbf, 0x17, 0x83, 0xf1, 0x07, 0x2d, 0x6c, 0x1e, 0x7d, 0x96, 0x94, 0x7e, 0x05, 0xc6, 0x0f, + 0x64, 0xcd, 0x96, 0x76, 0x0c, 0x53, 0x6a, 0x35, 0x55, 0xd9, 0x76, 0x62, 0x3a, 0xc6, 0x08, 0xf9, + 0x8e, 0x61, 0x6e, 0x51, 0x22, 0xc2, 0x80, 0xf6, 0x74, 0xe3, 0x40, 0x97, 0x08, 0x99, 0xa2, 0xe1, + 0x43, 0x9d, 0x2f, 0x26, 0x2f, 0xbd, 0xfe, 0x17, 0xc7, 0xb3, 0xb7, 0x06, 0x8a, 0xda, 0xa2, 0x71, + 0x67, 0xad, 0x96, 0xa6, 0xce, 0x6f, 0x6d, 0xad, 0x2c, 0x8b, 0x39, 0x2a, 0xf2, 0x11, 0x93, 0x58, + 0x3d, 0xd4, 0x9d, 0x59, 0xfc, 0x99, 0x00, 0x39, 0x4f, 0x53, 0x51, 0x36, 0x67, 0x09, 0xd2, 0x8f, + 0x5b, 0xd8, 0xd4, 0x4e, 0xd1, 0x98, 0xc0, 0x19, 0x89, 0x21, 0x7a, 0x17, 0x32, 0x01, 0x3d, 0xc4, + 0x3f, 0x99, 0x1e, 0xd2, 0x07, 0x9e, 0x0a, 0x0a, 0x7f, 0x28, 0x00, 0xa2, 0x95, 0x5f, 0x61, 0xeb, + 0xf8, 0x9f, 0x95, 0x9e, 0x72, 0x0d, 0x72, 0x34, 0x62, 0x51, 0xd2, 0x76, 0xa4, 0x86, 0x66, 0x59, + 0x9a, 0x5e, 0xe3, 0x5d, 0x25, 0x4b, 0xe9, 0x2b, 0x3b, 0xeb, 0x8c, 0xca, 0x1b, 0xf1, 0x3f, 0xc1, + 0x64, 0xa0, 0x1a, 0x51, 0x36, 0xe3, 0x45, 0xc8, 0xec, 0x18, 0x2d, 0x5d, 0x95, 0xd8, 0x5e, 0x07, + 0x5f, 0xfc, 0x4b, 0x53, 0x1a, 0x7b, 0x5f, 0xe1, 0xef, 0x63, 0x30, 0x25, 0x62, 0xcb, 0xa8, 0xef, + 0xe3, 0xe8, 0x15, 0x59, 0x06, 0xbe, 0xcb, 0x22, 0x9d, 0x4a, 0x9f, 0x29, 0xc6, 0xcc, 0xa6, 0xb4, + 0xe0, 0x3a, 0xfa, 0xa5, 0xde, 0x7d, 0xb1, 0x73, 0xe5, 0x9c, 0x2f, 0xcb, 0x25, 0x02, 0xcb, 0x72, + 0x06, 0x8c, 0x6b, 0x35, 0xdd, 0x20, 0x36, 0xcb, 0xc2, 0x8f, 0xf5, 0x56, 0xc3, 0xc1, 0x2c, 0xf3, + 0xbd, 0x0a, 0xb9, 0xc2, 0x58, 0x2a, 0xf8, 0xf1, 0x46, 0xab, 0x41, 0x3d, 0xe7, 0xa5, 0xb3, 0xa4, + 0xbc, 0x4f, 0x8f, 0x67, 0xb3, 0x81, 0x34, 0x4b, 0xcc, 0x6a, 0xee, 0x33, 0x91, 0xce, 0x9b, 0xfc, + 0xab, 0x70, 0xa6, 0x4d, 0xe5, 0x51, 0xfa, 0x38, 0x7f, 0x10, 0x87, 0xf3, 0x41, 0xf1, 0x51, 0x23, + 0x91, 0xcf, 0x7a, 0xb3, 0x96, 0x61, 0xac, 0xa1, 0xe9, 0xa7, 0x5b, 0x88, 0xcc, 0x34, 0x34, 0xdd, + 0x5b, 0xcf, 0x0d, 0xe9, 0x20, 0x23, 0xff, 0x06, 0x1d, 0x44, 0x86, 0xe9, 0xb0, 0x16, 0x8c, 0xb2, + 0x97, 0xbc, 0x2f, 0x40, 0x26, 0xea, 0xb5, 0xb5, 0xd3, 0xc5, 0x98, 0xf1, 0x3a, 0x57, 0x61, 0xec, + 0x53, 0x58, 0x8c, 0xfb, 0x9e, 0x00, 0xa8, 0x6a, 0xb6, 0x74, 0x02, 0x72, 0xef, 0x19, 0xb5, 0x28, + 0x2b, 0x3b, 0x05, 0xc3, 0x9a, 0xae, 0xe2, 0x43, 0x5a, 0xd9, 0x84, 0xc8, 0x1e, 0x02, 0x1b, 0x88, + 0xf1, 0x81, 0x36, 0x10, 0xbd, 0x50, 0x95, 0x40, 0x41, 0xa3, 0xd4, 0xc2, 0x6f, 0xc4, 0x60, 0x92, + 0x57, 0x27, 0xf2, 0xc5, 0xc8, 0x57, 0x61, 0xb8, 0x4e, 0x64, 0xf6, 0x68, 0x73, 0xfa, 0x4e, 0xa7, + 0xcd, 0x69, 0x66, 0xf4, 0x05, 0x80, 0xa6, 0x89, 0xf7, 0x25, 0xc6, 0x1a, 0x1f, 0x88, 0x35, 0x45, + 0x38, 0x28, 0x01, 0x7d, 0x19, 0xc6, 0xc9, 0x08, 0x6f, 0x9a, 0x46, 0xd3, 0xb0, 0x88, 0x93, 0x62, + 0x0d, 0x86, 0x74, 0x26, 0x9e, 0x1e, 0xcf, 0x8e, 0xad, 0x6b, 0xfa, 0x26, 0x67, 0xac, 0x56, 0x44, + 0x62, 0x2a, 0xdc, 0x47, 0x67, 0x00, 0xfe, 0x99, 0x00, 0x53, 0x9f, 0xda, 0xf2, 0xed, 0xbf, 0x87, + 0xc6, 0xdc, 0x99, 0x27, 0x47, 0x1f, 0x57, 0xf4, 0x1d, 0x23, 0xfa, 0x45, 0xf5, 0xf7, 0x05, 0x98, + 0xf0, 0x89, 0x8f, 0xd2, 0x93, 0x39, 0x95, 0xce, 0x0a, 0x5f, 0x21, 0xbe, 0x8d, 0xbf, 0xdb, 0x47, + 0x39, 0xa8, 0x7e, 0x37, 0x06, 0x67, 0x8b, 0x6c, 0x6b, 0xd9, 0x89, 0xbb, 0x88, 0xb2, 0x97, 0xe4, + 0x61, 0x74, 0x1f, 0x9b, 0x96, 0x66, 0xb0, 0x19, 0x76, 0x4c, 0x74, 0x1e, 0xd1, 0x34, 0x24, 0x2d, + 0x5d, 0x6e, 0x5a, 0xbb, 0x86, 0xb3, 0x1b, 0xe7, 0x3e, 0xbb, 0x31, 0x22, 0xc3, 0xa7, 0x8f, 0x11, + 0x19, 0xe9, 0x1d, 0x23, 0x32, 0xfa, 0x89, 0x63, 0x44, 0xf8, 0xd6, 0xd7, 0x8f, 0x04, 0x38, 0xd7, + 0xa1, 0xbf, 0x28, 0xfb, 0xcc, 0xd7, 0x21, 0xad, 0x70, 0xc1, 0xc4, 0x1a, 0xb3, 0xdd, 0xbd, 0x15, + 0x92, 0xed, 0x94, 0x00, 0xe4, 0xe9, 0xf1, 0x2c, 0x38, 0x45, 0x5d, 0x59, 0xe6, 0x2a, 0x22, 0xff, + 0xd5, 0xc2, 0x9f, 0x67, 0x60, 0xbc, 0x74, 0xc8, 0xd6, 0xae, 0x2b, 0xcc, 0x1f, 0x40, 0x77, 0x20, + 0xd9, 0x34, 0x8d, 0x7d, 0xcd, 0xa9, 0x46, 0x36, 0x10, 0x1a, 0xe0, 0x54, 0xa3, 0x8d, 0x6b, 0x93, + 0x73, 0x88, 0x2e, 0x2f, 0xaa, 0x42, 0xea, 0x9e, 0xa1, 0xc8, 0xf5, 0x3b, 0x5a, 0xdd, 0xe9, 0xff, + 0xaf, 0xf4, 0x17, 0x34, 0xef, 0xf2, 0x6c, 0xca, 0xf6, 0xae, 0xd3, 0x14, 0x2e, 0x11, 0xad, 0x40, + 0xb2, 0x6c, 0xdb, 0x4d, 0x92, 0xc8, 0xad, 0xc9, 0xd5, 0x01, 0x84, 0x12, 0x16, 0x2e, 0xcb, 0x65, + 0x47, 0x55, 0x98, 0xb8, 0x6b, 0x18, 0xb5, 0x3a, 0x2e, 0xd6, 0x8d, 0x96, 0x5a, 0x34, 0xf4, 0x1d, + 0xad, 0xc6, 0xed, 0xf1, 0x95, 0x01, 0x64, 0xde, 0x2d, 0x56, 0xc4, 0x4e, 0x01, 0x68, 0x11, 0x92, + 0x95, 0x5b, 0x5c, 0x18, 0x73, 0xe0, 0x2e, 0x0f, 0x20, 0xac, 0x72, 0x4b, 0x74, 0xd9, 0xd0, 0x2a, + 0xa4, 0x17, 0x9f, 0xb4, 0x4c, 0xcc, 0xa5, 0x8c, 0x74, 0x8d, 0x4b, 0x68, 0x97, 0x42, 0xb9, 0x44, + 0x3f, 0x33, 0xaa, 0x40, 0xf6, 0x91, 0x61, 0xee, 0xd5, 0x0d, 0xd9, 0xa9, 0xe1, 0x28, 0x15, 0xf7, + 0xb9, 0x01, 0xc4, 0x39, 0x8c, 0x62, 0x9b, 0x08, 0xf4, 0x55, 0x18, 0x27, 0x8d, 0x51, 0x95, 0xb7, + 0xeb, 0x4e, 0x21, 0x93, 0x54, 0xea, 0x4b, 0x03, 0x48, 0x75, 0x39, 0x9d, 0xcd, 0x93, 0x36, 0x51, + 0xd3, 0x5f, 0x86, 0xb1, 0x40, 0x27, 0x40, 0x08, 0x12, 0x4d, 0xd2, 0xde, 0x02, 0x8d, 0x1f, 0xa2, + 0xff, 0xd1, 0xcb, 0x30, 0xaa, 0x1b, 0x2a, 0x76, 0x46, 0xc8, 0xd8, 0xd2, 0xd4, 0xd3, 0xe3, 0xd9, + 0x91, 0x0d, 0x43, 0x65, 0xee, 0x0a, 0xff, 0x27, 0x8e, 0x90, 0x4c, 0x8e, 0xb3, 0x32, 0x7d, 0x05, + 0x12, 0xa4, 0xf5, 0x89, 0x91, 0xda, 0x96, 0x2d, 0xbc, 0x65, 0x6a, 0x5c, 0xa6, 0xf3, 0xc8, 0xf3, + 0xfd, 0x4c, 0x80, 0x58, 0xe5, 0x16, 0x71, 0xd4, 0xb7, 0x5b, 0xca, 0x1e, 0xb6, 0x79, 0x2e, 0xfe, + 0x44, 0x1d, 0x78, 0x13, 0xef, 0x68, 0xcc, 0x87, 0x4a, 0x89, 0xfc, 0x09, 0x3d, 0x0f, 0x20, 0x2b, + 0x0a, 0xb6, 0x2c, 0xc9, 0x39, 0x35, 0x97, 0x12, 0x53, 0x8c, 0xb2, 0x86, 0x8f, 0x08, 0x9b, 0x85, + 0x15, 0x13, 0xdb, 0x4e, 0x20, 0x14, 0x7b, 0x22, 0x6c, 0x36, 0x6e, 0x34, 0x25, 0xdb, 0xd8, 0xc3, + 0x3a, 0xed, 0x33, 0x29, 0x62, 0x7c, 0x1a, 0xcd, 0x2a, 0x21, 0x10, 0xbb, 0x89, 0x75, 0xd5, 0x33, + 0x72, 0x29, 0xd1, 0x7d, 0x26, 0x22, 0x4d, 0x5c, 0xd3, 0xf8, 0xc1, 0xaf, 0x94, 0xc8, 0x9f, 0x88, + 0xc6, 0xe4, 0x96, 0xbd, 0x4b, 0x5b, 0x25, 0x25, 0xd2, 0xff, 0xbc, 0x6a, 0xbf, 0x22, 0x40, 0xfc, + 0x6e, 0xb1, 0x72, 0xe2, 0xba, 0x39, 0x12, 0xe3, 0x9e, 0x44, 0x1a, 0x7f, 0xa8, 0xd5, 0xeb, 0x9a, + 0x5e, 0x23, 0x2e, 0xcd, 0xd7, 0xb1, 0xe2, 0xd4, 0x2c, 0xcb, 0xc9, 0x9b, 0x8c, 0x8a, 0xe6, 0x20, + 0xad, 0x98, 0x58, 0xc5, 0xba, 0xad, 0xc9, 0x75, 0x8b, 0x57, 0xd1, 0x4f, 0xe2, 0x85, 0xfb, 0xa6, + 0x00, 0xc3, 0xb4, 0xf3, 0xa2, 0xe7, 0x20, 0xa5, 0x18, 0xba, 0x2d, 0x6b, 0x3a, 0xb7, 0x42, 0x29, + 0xd1, 0x23, 0x74, 0x2d, 0xe4, 0x45, 0xc8, 0xc8, 0x8a, 0x62, 0xb4, 0x74, 0x5b, 0xd2, 0xe5, 0x06, + 0xe6, 0x85, 0x4d, 0x73, 0xda, 0x86, 0xdc, 0xc0, 0x68, 0x16, 0x9c, 0x47, 0xf7, 0xec, 0x62, 0x4a, + 0x04, 0x4e, 0x5a, 0xc3, 0x47, 0xbc, 0x24, 0x3f, 0x12, 0x20, 0xe9, 0x74, 0x7a, 0x52, 0x98, 0x1a, + 0xd6, 0xb1, 0x29, 0xdb, 0x86, 0x5b, 0x18, 0x97, 0xd0, 0x3e, 0xe3, 0xa5, 0xbc, 0x19, 0x6f, 0x0a, + 0x86, 0x6d, 0xd2, 0xaf, 0x79, 0x39, 0xd8, 0x03, 0x5d, 0x6b, 0xae, 0xcb, 0x35, 0xb6, 0xbc, 0x96, + 0x12, 0xd9, 0x03, 0xa9, 0x12, 0x8f, 0xa1, 0x65, 0xda, 0xe1, 0x4f, 0xa4, 0xbc, 0x2c, 0xc6, 0x73, + 0x1b, 0xd7, 0x34, 0x9d, 0x76, 0x80, 0xb8, 0x08, 0x94, 0xb4, 0x44, 0x28, 0xe8, 0x02, 0xa4, 0x58, + 0x06, 0xac, 0xab, 0xb4, 0x17, 0xc4, 0xc5, 0x24, 0x25, 0x94, 0x9c, 0xc3, 0x59, 0xd3, 0x7b, 0x90, + 0x72, 0xc7, 0x18, 0x69, 0xc8, 0x96, 0xe5, 0x2a, 0x95, 0xfe, 0x47, 0xaf, 0xc0, 0xd4, 0xe3, 0x96, + 0x5c, 0xd7, 0x76, 0xe8, 0xca, 0x19, 0xc9, 0xc6, 0xf4, 0xc7, 0xea, 0x83, 0xdc, 0x34, 0x2a, 0x81, + 0xaa, 0xd1, 0x19, 0x92, 0x71, 0x6f, 0x48, 0xfa, 0xb7, 0x42, 0x0a, 0x1f, 0x09, 0x30, 0xc1, 0xc2, + 0x80, 0x58, 0x24, 0x6a, 0x74, 0x0e, 0xc6, 0x9b, 0x90, 0x52, 0x65, 0x5b, 0x66, 0xe7, 0x33, 0x63, + 0x3d, 0xcf, 0x67, 0x3a, 0x16, 0x9f, 0xe4, 0xa7, 0x67, 0x34, 0x11, 0x24, 0xc8, 0x7f, 0x76, 0xa0, + 0x55, 0xa4, 0xff, 0xbd, 0xc0, 0x0a, 0x7f, 0x71, 0xa3, 0x74, 0xb8, 0x16, 0xe0, 0x0c, 0xd1, 0x7e, + 0x49, 0x57, 0xcc, 0xa3, 0xa6, 0xad, 0x19, 0xfa, 0x7d, 0xfa, 0x6b, 0xa1, 0x9c, 0x6f, 0x63, 0x8a, + 0xee, 0x47, 0xf1, 0xb2, 0xfc, 0x70, 0x04, 0xc6, 0x4a, 0x87, 0x4d, 0xc3, 0x8c, 0x74, 0x51, 0x6b, + 0x09, 0x46, 0x39, 0xe2, 0xef, 0xb1, 0x55, 0xdc, 0x66, 0xab, 0x9d, 0x5d, 0x58, 0xce, 0x88, 0x96, + 0x00, 0x58, 0xcc, 0x28, 0x8d, 0x25, 0x8a, 0x9f, 0x60, 0xc3, 0x8c, 0xb2, 0x11, 0x2a, 0xda, 0x80, + 0x74, 0x63, 0x5f, 0x51, 0xa4, 0x1d, 0xad, 0x6e, 0xf3, 0xa0, 0xbb, 0xf0, 0x88, 0xf1, 0xf5, 0x87, + 0xc5, 0xe2, 0x1d, 0x9a, 0x89, 0xc5, 0xbf, 0x79, 0xcf, 0x22, 0x10, 0x09, 0xec, 0x3f, 0x7a, 0x09, + 0xf8, 0xb9, 0x19, 0xc9, 0x72, 0x8e, 0xc8, 0x2d, 0x8d, 0x3d, 0x3d, 0x9e, 0x4d, 0x89, 0x94, 0x5a, + 0xa9, 0x54, 0xc5, 0x14, 0xcb, 0x50, 0xb1, 0x6c, 0xf4, 0x02, 0x8c, 0x19, 0x0d, 0xcd, 0x96, 0x1c, + 0x1f, 0x88, 0xbb, 0x8d, 0x19, 0x42, 0x74, 0x7c, 0x24, 0x54, 0x85, 0xab, 0x58, 0xa7, 0xa3, 0x80, + 0xd4, 0x53, 0xda, 0x66, 0x6b, 0x91, 0x36, 0x1b, 0xef, 0x92, 0xd1, 0xb4, 0xb5, 0x86, 0xf6, 0x84, + 0x6e, 0x56, 0xf3, 0xfd, 0xa2, 0x17, 0x58, 0x76, 0x52, 0xbf, 0x25, 0xba, 0x48, 0xc9, 0xf3, 0xde, + 0xf7, 0x65, 0x45, 0xdf, 0x14, 0xe0, 0x2c, 0x57, 0xa4, 0xb4, 0x4d, 0x43, 0xde, 0xe5, 0xba, 0x66, + 0x1f, 0x49, 0x7b, 0xfb, 0xf9, 0x24, 0x75, 0x4e, 0x3f, 0x1f, 0xda, 0x20, 0xbe, 0x7e, 0x30, 0xef, + 0x34, 0xcb, 0xd1, 0x3d, 0xce, 0xbc, 0xb6, 0x5f, 0xd2, 0x6d, 0xf3, 0x68, 0xe9, 0xdc, 0xd3, 0xe3, + 0xd9, 0xc9, 0xce, 0xd4, 0x87, 0xe2, 0xa4, 0xd5, 0xc9, 0x82, 0xca, 0x00, 0xd8, 0xed, 0x8d, 0x34, + 0xe4, 0x2f, 0xdc, 0xbd, 0x08, 0xed, 0xb6, 0xa2, 0x8f, 0x17, 0x5d, 0x83, 0x1c, 0x3f, 0xf4, 0xb2, + 0xa3, 0xd5, 0xb1, 0x64, 0x69, 0x4f, 0x70, 0x1e, 0xa8, 0x0d, 0xca, 0x32, 0x3a, 0x11, 0x51, 0xd1, + 0x9e, 0xe0, 0xe9, 0xaf, 0x43, 0xbe, 0x5b, 0xe9, 0xfd, 0x03, 0x21, 0xc5, 0x36, 0x66, 0xdf, 0x08, + 0xae, 0xc8, 0x0c, 0xd0, 0x55, 0x9d, 0x55, 0x99, 0xd8, 0x1b, 0x8e, 0x09, 0xfa, 0x7e, 0x0c, 0xc6, + 0x96, 0x5a, 0xf5, 0xbd, 0xfb, 0xcd, 0x4a, 0xab, 0xd1, 0x90, 0xcd, 0x23, 0x62, 0x2a, 0x99, 0xe9, + 0x20, 0xc5, 0x14, 0x98, 0xa9, 0xa4, 0xb6, 0x41, 0x7b, 0x82, 0xc9, 0x64, 0xe6, 0x3f, 0xa4, 0xcd, + 0x42, 0xfa, 0x69, 0x4d, 0x7c, 0x27, 0xaf, 0x8d, 0x03, 0x0b, 0xbd, 0x01, 0x79, 0x5f, 0x46, 0xba, + 0x7c, 0x22, 0x61, 0xdd, 0x36, 0x35, 0xcc, 0x96, 0x03, 0xe3, 0xa2, 0x2f, 0x9c, 0x66, 0x85, 0x24, + 0x97, 0x58, 0x2a, 0xaa, 0x42, 0x86, 0x64, 0x3c, 0x92, 0xe8, 0x64, 0xe3, 0x2c, 0xda, 0xde, 0x08, + 0xa9, 0x5c, 0xa0, 0xdc, 0xf3, 0x54, 0x4b, 0x45, 0xca, 0x43, 0xff, 0x8a, 0x69, 0xec, 0x51, 0xa6, + 0xdf, 0x86, 0x5c, 0x7b, 0x06, 0xbf, 0x46, 0x13, 0x4c, 0xa3, 0x53, 0x7e, 0x8d, 0xc6, 0x7d, 0xda, + 0x5a, 0x4d, 0x24, 0x13, 0xb9, 0xe1, 0xc2, 0xcf, 0xe3, 0x90, 0x75, 0x3a, 0x5b, 0x94, 0x68, 0x66, + 0x09, 0x86, 0x49, 0xd7, 0x70, 0x82, 0x3f, 0xae, 0xf4, 0xe8, 0xe3, 0x3c, 0x7c, 0x9c, 0x74, 0x19, + 0x07, 0x0f, 0x53, 0xd6, 0x28, 0xcc, 0xce, 0xf4, 0x7f, 0x8e, 0x41, 0x82, 0x02, 0x88, 0x1b, 0x90, + 0xa0, 0x53, 0x87, 0x30, 0xc8, 0xd4, 0x41, 0xb3, 0xba, 0x93, 0x5d, 0xcc, 0xe7, 0x7f, 0x12, 0x67, + 0x6e, 0x57, 0x7e, 0xed, 0xc6, 0x4d, 0x6a, 0x72, 0x32, 0x22, 0x7f, 0x42, 0x4b, 0x34, 0x2a, 0xc9, + 0x30, 0x6d, 0xac, 0x72, 0xc7, 0x7d, 0xae, 0x5f, 0xfb, 0x3a, 0xd3, 0x94, 0xc3, 0x87, 0xce, 0x43, + 0x9c, 0xd8, 0xb2, 0x51, 0x16, 0xb1, 0xf0, 0xf4, 0x78, 0x36, 0x4e, 0xac, 0x18, 0xa1, 0xa1, 0x05, + 0x48, 0x07, 0x0d, 0x87, 0x70, 0x2d, 0xc5, 0xcc, 0xa3, 0x6f, 0xd0, 0x43, 0xdd, 0x1d, 0x60, 0x0c, + 0xb4, 0xf2, 0x36, 0xfe, 0xc6, 0x30, 0x8c, 0xad, 0x34, 0xa2, 0x9e, 0x58, 0x16, 0x83, 0x2d, 0x1c, + 0x86, 0x76, 0x02, 0x2f, 0x0d, 0x69, 0xe0, 0xc0, 0x9c, 0x1e, 0x3f, 0xd9, 0x9c, 0xbe, 0x42, 0x5c, + 0x60, 0x7e, 0xeb, 0x42, 0xbc, 0x0b, 0xb0, 0x09, 0xbe, 0x9f, 0x7a, 0x31, 0x22, 0xe1, 0xf1, 0x0e, + 0x54, 0xd0, 0xa8, 0x93, 0xb7, 0xa9, 0xa7, 0xcd, 0x7a, 0xd9, 0xc8, 0xe0, 0xbd, 0x6c, 0x14, 0xeb, + 0x2a, 0x9d, 0xda, 0x82, 0x76, 0x75, 0xf4, 0xf4, 0x76, 0x75, 0xfa, 0x09, 0xef, 0xac, 0x6f, 0x42, + 0x5c, 0xd5, 0x9c, 0xc6, 0x19, 0x7c, 0xc2, 0x26, 0x4c, 0x7d, 0x7a, 0x6d, 0xc2, 0xdf, 0x6b, 0xfd, + 0x0b, 0x1c, 0xd3, 0xf7, 0x01, 0x3c, 0x0d, 0xa1, 0x39, 0x18, 0x31, 0xea, 0xaa, 0x73, 0xae, 0x64, + 0x6c, 0x29, 0xf5, 0xf4, 0x78, 0x76, 0xf8, 0x7e, 0x5d, 0x5d, 0x59, 0x16, 0x87, 0x8d, 0xba, 0xba, + 0xa2, 0xd2, 0x8b, 0x2f, 0xf0, 0x81, 0xe4, 0x06, 0xa1, 0x65, 0xc4, 0x51, 0x1d, 0x1f, 0x2c, 0x63, + 0x4b, 0x69, 0x0b, 0x8e, 0x21, 0x5d, 0xf0, 0x03, 0x01, 0xb2, 0x4e, 0x6b, 0x44, 0x6b, 0x66, 0x92, + 0x5a, 0x83, 0x0f, 0xbb, 0xf8, 0xc9, 0x86, 0x9d, 0xc3, 0xc7, 0x4f, 0xd5, 0x7e, 0x4b, 0xe0, 0x01, + 0xc8, 0x15, 0x45, 0xb6, 0x89, 0xb3, 0x11, 0xe1, 0x50, 0x79, 0x11, 0x72, 0xa6, 0xac, 0xab, 0x46, + 0x43, 0x7b, 0x82, 0xd9, 0x8a, 0xa8, 0xc5, 0x37, 0x37, 0xc7, 0x5d, 0x3a, 0x5d, 0xf2, 0x73, 0x16, + 0x74, 0x7f, 0x18, 0xe3, 0xc1, 0xca, 0x6e, 0x61, 0xa2, 0x54, 0xda, 0xd7, 0x60, 0xa2, 0xfd, 0x5e, + 0x12, 0x67, 0x14, 0xbf, 0x1c, 0x22, 0x2f, 0xac, 0x20, 0x2c, 0xb8, 0xd0, 0x89, 0x86, 0x6f, 0xbb, + 0xa3, 0xc4, 0x42, 0x45, 0x48, 0xfb, 0xaf, 0x3b, 0x89, 0x0f, 0x7c, 0xdd, 0x09, 0x98, 0xee, 0x25, + 0x27, 0xd3, 0x5f, 0x82, 0x61, 0x9a, 0x7c, 0x0a, 0xd3, 0xcd, 0xdb, 0xf4, 0xaf, 0x63, 0x70, 0x89, + 0x96, 0xfe, 0x21, 0x36, 0xb5, 0x9d, 0xa3, 0x4d, 0xd3, 0xb0, 0xb1, 0x62, 0x63, 0xd5, 0x3b, 0x20, + 0x12, 0xa9, 0x3d, 0x4c, 0x35, 0x9d, 0x17, 0x9c, 0x28, 0xa8, 0xcc, 0xe5, 0x42, 0x6b, 0x30, 0xce, + 0xae, 0xed, 0x91, 0xe4, 0xba, 0xb6, 0x8f, 0x25, 0xd9, 0x3e, 0xc9, 0xac, 0x37, 0xc6, 0x78, 0x17, + 0x09, 0xeb, 0xa2, 0x8d, 0x54, 0x48, 0x71, 0x61, 0x9a, 0xca, 0xef, 0xea, 0xb9, 0xfb, 0xc9, 0x56, + 0x13, 0x93, 0x22, 0x95, 0xb7, 0xb2, 0x2c, 0x26, 0x99, 0x64, 0x77, 0x37, 0xe8, 0xa7, 0x02, 0x5c, + 0xee, 0xa3, 0xe8, 0x28, 0x3b, 0xf0, 0x34, 0x24, 0xf7, 0xc9, 0x8b, 0x34, 0xae, 0xe9, 0xa4, 0xe8, + 0x3e, 0xa3, 0x75, 0x18, 0xdb, 0x91, 0xb5, 0xba, 0xd7, 0xb1, 0xbb, 0x47, 0x22, 0x86, 0x07, 0xc8, + 0x66, 0x18, 0x3b, 0xeb, 0xc9, 0x85, 0x0f, 0x62, 0x30, 0xb1, 0xa8, 0xaa, 0x95, 0x0a, 0xb7, 0x8d, + 0xd1, 0xf5, 0x17, 0x07, 0x94, 0xc6, 0x3c, 0x50, 0x8a, 0x5e, 0x06, 0xa4, 0x6a, 0x16, 0xbb, 0x07, + 0xc4, 0xda, 0x95, 0x55, 0xe3, 0xc0, 0x8b, 0xc7, 0x98, 0x70, 0x52, 0x2a, 0x4e, 0x02, 0xaa, 0x00, + 0x45, 0x44, 0x92, 0x65, 0xcb, 0xee, 0x96, 0xd2, 0xe5, 0x81, 0xce, 0x73, 0x31, 0xa8, 0xe4, 0x3e, + 0x8a, 0x29, 0x22, 0x87, 0xfe, 0x25, 0xbe, 0xbd, 0x46, 0xaa, 0x6e, 0x4b, 0xb2, 0xe5, 0x1c, 0xfe, + 0x61, 0x37, 0x90, 0x64, 0x19, 0x7d, 0xd1, 0xf2, 0x9f, 0xe9, 0x61, 0x67, 0x13, 0x3c, 0x05, 0x45, + 0x09, 0xa1, 0x7f, 0x5d, 0x80, 0xac, 0x88, 0x77, 0x4c, 0x6c, 0x45, 0xba, 0x94, 0x70, 0x07, 0x32, + 0x26, 0x93, 0x2a, 0xed, 0x98, 0x46, 0xe3, 0x24, 0x63, 0x2c, 0xcd, 0x19, 0xef, 0x98, 0x46, 0x23, + 0x70, 0x29, 0xc3, 0x43, 0x18, 0x77, 0x4b, 0x1a, 0xa5, 0x0a, 0x3e, 0xa2, 0x67, 0x98, 0x99, 0xe0, + 0xa8, 0x03, 0x23, 0x3e, 0x0d, 0x3d, 0xd0, 0x3d, 0x2c, 0x7f, 0x71, 0xa3, 0x54, 0xc6, 0xdf, 0x0a, + 0x90, 0xad, 0xb4, 0xb6, 0xd9, 0x35, 0x54, 0xd1, 0xe9, 0xa1, 0x04, 0xa9, 0x3a, 0xde, 0xb1, 0xa5, + 0x53, 0xc5, 0xd3, 0x27, 0x09, 0x2b, 0x3d, 0x53, 0x70, 0x17, 0xc0, 0xa4, 0x27, 0xe6, 0xa8, 0x9c, + 0xf8, 0x09, 0xe5, 0xa4, 0x28, 0xaf, 0xe7, 0x3e, 0x15, 0x3e, 0x8a, 0xc1, 0xb8, 0x5b, 0xd9, 0x28, + 0xad, 0xe7, 0xa3, 0x80, 0xd5, 0x88, 0x9f, 0xc4, 0x6a, 0x4c, 0xf0, 0xb8, 0x90, 0x70, 0xcb, 0x31, + 0x0f, 0x93, 0xd4, 0xb9, 0x91, 0xe4, 0x66, 0xb3, 0xae, 0x39, 0x20, 0x99, 0xda, 0xa5, 0x84, 0x38, + 0x41, 0x93, 0x16, 0x59, 0x0a, 0x85, 0xc7, 0xa4, 0xff, 0xed, 0x98, 0x18, 0x3f, 0xc1, 0x12, 0xc5, + 0x6b, 0x27, 0x89, 0x7b, 0x49, 0x33, 0xc6, 0x0a, 0xe1, 0xe3, 0x3d, 0xef, 0x3d, 0x98, 0xa0, 0x9a, + 0x8d, 0xfa, 0xd4, 0x2e, 0x6f, 0x8e, 0xef, 0xc4, 0x00, 0xf9, 0xe5, 0x7f, 0x7a, 0x2d, 0x12, 0x8b, + 0xae, 0x45, 0x5e, 0x02, 0xc4, 0xe2, 0x1b, 0x2d, 0xa9, 0x89, 0x4d, 0xc9, 0xc2, 0x8a, 0xc1, 0x2f, + 0x47, 0x12, 0xc4, 0x1c, 0x4f, 0xd9, 0xc4, 0x66, 0x85, 0xd2, 0xd1, 0x6d, 0x00, 0xcf, 0x6b, 0xe3, + 0xd3, 0x49, 0x4f, 0xa7, 0x4d, 0x4c, 0xb9, 0xee, 0x5a, 0xe1, 0xfd, 0x69, 0xc8, 0x70, 0x4d, 0x6e, + 0xe9, 0x9a, 0xa1, 0xa3, 0x1b, 0x10, 0xaf, 0xf1, 0x6d, 0x86, 0x74, 0xe8, 0x42, 0x9f, 0x77, 0x1f, + 0x5c, 0x79, 0x48, 0x24, 0x79, 0x09, 0x4b, 0xb3, 0x65, 0x87, 0x38, 0x4f, 0x5e, 0x14, 0xb7, 0x9f, + 0xa5, 0xd9, 0xb2, 0x51, 0x05, 0xc6, 0x15, 0xef, 0x76, 0x2b, 0x89, 0xb0, 0xc7, 0xbb, 0x02, 0xb0, + 0xd0, 0x5b, 0xc5, 0xca, 0x43, 0x62, 0x56, 0x09, 0x24, 0xa0, 0xa2, 0xff, 0x3a, 0xa5, 0x44, 0x47, + 0xc0, 0x98, 0x77, 0x3c, 0x38, 0x78, 0x95, 0x53, 0x79, 0xc8, 0x77, 0xeb, 0x12, 0x7a, 0x13, 0x46, + 0x54, 0x7a, 0x4d, 0x0f, 0xef, 0xd7, 0x61, 0x5d, 0x2f, 0x70, 0x33, 0x52, 0x79, 0x48, 0xe4, 0x1c, + 0x68, 0x15, 0x32, 0xec, 0x1f, 0x73, 0x62, 0x38, 0x2a, 0xbd, 0xdc, 0x5d, 0x82, 0x6f, 0x6a, 0x28, + 0x0f, 0x89, 0x69, 0xd5, 0xa3, 0xa2, 0x57, 0x21, 0x61, 0x29, 0xb2, 0x83, 0x4b, 0x67, 0xba, 0xdc, + 0xd1, 0xe1, 0x31, 0xd3, 0xdc, 0xe8, 0x36, 0xbb, 0xe7, 0xd1, 0x3e, 0x74, 0x16, 0x0a, 0xc3, 0x8a, + 0x1f, 0x38, 0xf9, 0x4d, 0x8a, 0x8f, 0x29, 0x01, 0xdd, 0x85, 0xb4, 0x4c, 0xbc, 0x41, 0x89, 0x9e, + 0xb4, 0xa4, 0x2b, 0x83, 0xe1, 0x7b, 0xf0, 0x1d, 0xa7, 0x64, 0xcb, 0xf4, 0x78, 0xb9, 0x43, 0xf4, + 0x04, 0x35, 0xb0, 0x59, 0xc3, 0xf9, 0x74, 0x6f, 0x41, 0xfe, 0x00, 0x31, 0x57, 0x10, 0x25, 0x12, + 0xaf, 0x70, 0xd7, 0x39, 0x45, 0x43, 0x2b, 0x95, 0xe9, 0xba, 0xdf, 0x1b, 0x72, 0x0a, 0xa8, 0x3c, + 0x24, 0x66, 0x76, 0x7d, 0x64, 0x34, 0x0f, 0xb1, 0x9a, 0x92, 0x1f, 0xeb, 0x3a, 0x42, 0xdc, 0x33, + 0x2e, 0xe5, 0x21, 0x31, 0x56, 0x53, 0xd0, 0xdb, 0x90, 0x64, 0x87, 0x14, 0x0e, 0xf5, 0x7c, 0xb6, + 0xab, 0x9d, 0x08, 0x1e, 0xf5, 0x28, 0x0f, 0x89, 0xf4, 0x5c, 0x04, 0x79, 0xdf, 0x26, 0x64, 0x4d, + 0x16, 0x61, 0xe7, 0xc4, 0xc6, 0xe6, 0xba, 0xee, 0x81, 0x87, 0x85, 0xc7, 0x96, 0x29, 0x3a, 0xf0, + 0xd1, 0xd1, 0xd7, 0x60, 0x2a, 0x28, 0x91, 0xf7, 0xb4, 0x89, 0xae, 0xfb, 0xb9, 0x5d, 0x83, 0x34, + 0xcb, 0x43, 0x22, 0x32, 0x3b, 0x12, 0xd1, 0xeb, 0x30, 0xcc, 0x5a, 0x0d, 0x51, 0x91, 0x61, 0xc1, + 0x1d, 0x6d, 0x0d, 0xc6, 0xf2, 0x93, 0xce, 0x6f, 0xf3, 0xd0, 0x32, 0xa9, 0x6e, 0xd4, 0xf2, 0x93, + 0x5d, 0x3b, 0x7f, 0x67, 0xa8, 0x1c, 0xe9, 0xfc, 0xb6, 0x47, 0x25, 0xed, 0x6e, 0xb2, 0x14, 0x1e, + 0x89, 0x34, 0xd5, 0xb5, 0xdd, 0x43, 0x22, 0xce, 0xca, 0x34, 0xd8, 0xdf, 0x23, 0x93, 0xa2, 0x99, + 0xec, 0x42, 0x19, 0x89, 0x8e, 0xa9, 0x33, 0x5d, 0x8b, 0xd6, 0x79, 0xef, 0x4e, 0x99, 0x7a, 0x4d, + 0x2e, 0x15, 0x3d, 0x84, 0x1c, 0xbf, 0xea, 0xc1, 0xdb, 0x95, 0x38, 0x4b, 0xe5, 0xbd, 0x18, 0x6a, + 0xba, 0xc2, 0x42, 0x77, 0xca, 0x43, 0xe2, 0xb8, 0x12, 0x4c, 0x41, 0xef, 0xc0, 0x04, 0x95, 0x27, + 0x29, 0xde, 0x1d, 0x1d, 0xf9, 0x7c, 0xc7, 0x5d, 0x0f, 0xdd, 0xaf, 0xf3, 0x70, 0x24, 0xe7, 0x94, + 0xb6, 0x24, 0xd2, 0x8d, 0x35, 0x5d, 0xb3, 0xa9, 0x95, 0x9d, 0xee, 0xda, 0x8d, 0x83, 0xb7, 0x01, + 0x92, 0x6e, 0xac, 0x31, 0x0a, 0xe9, 0xc6, 0x36, 0x0f, 0x53, 0xe3, 0xcd, 0xf1, 0x5c, 0xd7, 0x6e, + 0x1c, 0x16, 0xcf, 0x46, 0xba, 0xb1, 0xed, 0xa7, 0x93, 0x6e, 0xcc, 0x0c, 0x44, 0x9b, 0xdc, 0xe7, + 0xbb, 0x76, 0xe3, 0xae, 0x67, 0x9d, 0x49, 0x37, 0x96, 0x3b, 0x12, 0xd1, 0x32, 0x00, 0x73, 0x6a, + 0xe8, 0xa4, 0x38, 0xd3, 0x75, 0x32, 0x68, 0x0f, 0x54, 0x23, 0x93, 0x41, 0xdd, 0xa1, 0x11, 0x43, + 0x46, 0xa1, 0x94, 0x44, 0xb7, 0x68, 0xf3, 0xb3, 0x5d, 0x0d, 0x59, 0xc7, 0xe6, 0x29, 0x31, 0x64, + 0x07, 0x2e, 0x91, 0xcc, 0x2a, 0x6c, 0xbd, 0x38, 0x3f, 0xd7, 0xdd, 0x2c, 0xfb, 0x37, 0x8f, 0xa8, + 0x59, 0xa6, 0x04, 0xb4, 0x08, 0x29, 0x32, 0xe7, 0x1f, 0x51, 0x33, 0x74, 0xb1, 0xab, 0x7f, 0xda, + 0x76, 0x9a, 0xa5, 0x3c, 0x24, 0x26, 0x1f, 0x73, 0x12, 0x79, 0x3d, 0x5b, 0x37, 0xcb, 0x17, 0xba, + 0xbe, 0x3e, 0xb0, 0xea, 0x4a, 0x5e, 0xcf, 0x38, 0x90, 0x02, 0x67, 0x58, 0x5b, 0xf1, 0xa3, 0xc6, + 0x26, 0x3f, 0x17, 0x9b, 0x7f, 0x81, 0x8a, 0xea, 0xba, 0xf4, 0x14, 0x7a, 0x02, 0xba, 0x3c, 0x24, + 0x4e, 0xca, 0x9d, 0xa9, 0x64, 0xc0, 0xf3, 0xa9, 0x87, 0x2d, 0x58, 0xe5, 0x2f, 0x75, 0x1d, 0xf0, + 0x21, 0xab, 0x7d, 0x64, 0xc0, 0xcb, 0x3e, 0x32, 0x9b, 0x80, 0x54, 0xc9, 0xb2, 0xd8, 0x86, 0xfe, + 0xe5, 0x1e, 0x13, 0x50, 0xdb, 0x1a, 0x01, 0x9b, 0x80, 0xd4, 0x0a, 0xe3, 0x24, 0x82, 0x94, 0x3a, + 0x96, 0x4d, 0x6e, 0x66, 0xaf, 0x74, 0x15, 0xd4, 0x71, 0xc3, 0x1e, 0x11, 0xa4, 0xb8, 0x44, 0xe2, + 0xf0, 0x98, 0xce, 0x1d, 0x31, 0xdc, 0x61, 0xbc, 0xda, 0xd5, 0xe1, 0x09, 0xbd, 0xca, 0x86, 0x38, + 0x3c, 0x66, 0x20, 0x01, 0x7d, 0x01, 0x46, 0x39, 0xa0, 0xcb, 0x5f, 0xeb, 0xe1, 0xc6, 0xfa, 0x91, + 0x38, 0x19, 0xd7, 0x9c, 0x87, 0x59, 0x59, 0x06, 0x24, 0x59, 0xf5, 0x5e, 0xec, 0x61, 0x65, 0x3b, + 0xb0, 0x2c, 0xb3, 0xb2, 0x1e, 0x99, 0x58, 0x59, 0xd6, 0x4f, 0xf9, 0x5c, 0x77, 0xbd, 0xab, 0x95, + 0xed, 0x3c, 0x51, 0x43, 0xac, 0xec, 0x63, 0x8f, 0x4a, 0x6a, 0x66, 0x31, 0x10, 0x95, 0xff, 0x5c, + 0xd7, 0x9a, 0x05, 0x31, 0x25, 0xa9, 0x19, 0xe7, 0x21, 0xcd, 0xc6, 0x5c, 0x62, 0xa6, 0xe9, 0x97, + 0xba, 0x9f, 0xea, 0x6f, 0x87, 0x1e, 0x65, 0x67, 0x31, 0x93, 0x69, 0xd8, 0x35, 0x54, 0x26, 0x3f, + 0xc3, 0xcc, 0x35, 0xf5, 0x72, 0x6f, 0x43, 0x15, 0x76, 0x3c, 0xdb, 0x35, 0x54, 0x81, 0x44, 0x5a, + 0x54, 0x76, 0x30, 0x8d, 0x8e, 0xef, 0xf9, 0x1e, 0x17, 0x10, 0xb4, 0x1d, 0x12, 0xa4, 0x45, 0x75, + 0x89, 0xde, 0x10, 0x6a, 0xb1, 0x9b, 0x32, 0xf2, 0x0b, 0xbd, 0x87, 0x50, 0xf0, 0xc6, 0x0e, 0x77, + 0x08, 0x71, 0xb2, 0x3b, 0x67, 0x3a, 0x1e, 0xc6, 0x2b, 0xbd, 0xe7, 0xcc, 0x76, 0xd7, 0x82, 0xcd, + 0x99, 0xdc, 0xa7, 0xf8, 0x2f, 0x02, 0xcc, 0xb1, 0xb2, 0xd1, 0xf5, 0xbe, 0x23, 0xc9, 0x5d, 0x3b, + 0xf5, 0x1d, 0x9f, 0xb8, 0x41, 0x5f, 0xf0, 0x7a, 0xb7, 0xe2, 0xf6, 0x59, 0x0b, 0x2e, 0x0f, 0x89, + 0xcf, 0xcb, 0xbd, 0xf2, 0x2d, 0x8d, 0xf2, 0x2d, 0x55, 0xf7, 0x6c, 0xe8, 0x78, 0x2e, 0xb7, 0x9a, + 0x48, 0x9e, 0xcb, 0xe5, 0x57, 0x13, 0xc9, 0xf3, 0xb9, 0xe9, 0xd5, 0x44, 0xf2, 0x42, 0xee, 0xb9, + 0xc2, 0xdf, 0x9d, 0x87, 0x31, 0x07, 0xf9, 0x31, 0x44, 0x74, 0xd3, 0x8f, 0x88, 0x66, 0xba, 0x21, + 0x22, 0x8e, 0x15, 0x39, 0x24, 0xba, 0xe9, 0x87, 0x44, 0x33, 0xdd, 0x20, 0x91, 0xc7, 0x43, 0x30, + 0x51, 0xb5, 0x1b, 0x26, 0x7a, 0x71, 0x00, 0x4c, 0xe4, 0x8a, 0x6a, 0x07, 0x45, 0xcb, 0x9d, 0xa0, + 0xe8, 0x52, 0x6f, 0x50, 0xe4, 0x8a, 0xf2, 0xa1, 0xa2, 0xdb, 0x6d, 0xa8, 0xe8, 0x62, 0x0f, 0x54, + 0xe4, 0xf2, 0x3b, 0xb0, 0x68, 0x2d, 0x14, 0x16, 0x5d, 0xe9, 0x07, 0x8b, 0x5c, 0x39, 0x01, 0x5c, + 0xf4, 0x5a, 0x00, 0x17, 0xcd, 0x76, 0xc5, 0x45, 0x2e, 0x37, 0x03, 0x46, 0x6f, 0xb5, 0x03, 0xa3, + 0x8b, 0x3d, 0x80, 0x91, 0x57, 0x03, 0x8e, 0x8c, 0xca, 0x61, 0xc8, 0xe8, 0x72, 0x1f, 0x64, 0xe4, + 0x4a, 0xf1, 0x43, 0xa3, 0x72, 0x18, 0x34, 0xba, 0xdc, 0x07, 0x1a, 0xb5, 0x49, 0x62, 0xd8, 0x68, + 0x23, 0x1c, 0x1b, 0x5d, 0xed, 0x8b, 0x8d, 0x5c, 0x69, 0x41, 0x70, 0xb4, 0xe0, 0x03, 0x47, 0xcf, + 0x77, 0x01, 0x47, 0x2e, 0x2b, 0x41, 0x47, 0x5f, 0xec, 0x40, 0x47, 0x85, 0x5e, 0xe8, 0xc8, 0xe5, + 0x75, 0xe1, 0xd1, 0x83, 0x2e, 0xf0, 0xe8, 0x5a, 0x7f, 0x78, 0xe4, 0x0a, 0x6b, 0xc3, 0x47, 0x72, + 0x4f, 0x7c, 0xf4, 0xf2, 0x80, 0xf8, 0xc8, 0x95, 0x1e, 0x06, 0x90, 0xde, 0x08, 0x02, 0xa4, 0xb9, + 0xee, 0x00, 0xc9, 0x15, 0xc3, 0x11, 0xd2, 0x5a, 0x28, 0x42, 0xba, 0xd2, 0x0f, 0x21, 0x79, 0xe3, + 0xc0, 0x0f, 0x91, 0x36, 0xc2, 0x21, 0xd2, 0xd5, 0xbe, 0x10, 0xc9, 0x6b, 0xfe, 0x00, 0x46, 0x5a, + 0x0b, 0xc5, 0x48, 0x57, 0xfa, 0x61, 0x24, 0xaf, 0x70, 0x7e, 0x90, 0xf4, 0xa8, 0x2b, 0x48, 0xba, + 0x3e, 0x08, 0x48, 0x72, 0x85, 0x76, 0xa0, 0xa4, 0x77, 0xbb, 0xa3, 0xa4, 0xcf, 0x9d, 0xe0, 0xd2, + 0xc3, 0x50, 0x98, 0xf4, 0xc5, 0x0e, 0x98, 0x54, 0xe8, 0x05, 0x93, 0xbc, 0xfe, 0xec, 0xe0, 0x24, + 0xb9, 0x27, 0xaa, 0x79, 0x79, 0x40, 0x54, 0xe3, 0x75, 0xbe, 0x10, 0x58, 0x53, 0x0a, 0x81, 0x35, + 0x97, 0x7a, 0xc3, 0x1a, 0xcf, 0x9c, 0x7b, 0xb8, 0xa6, 0x1c, 0x86, 0x6b, 0x2e, 0xf7, 0xc1, 0x35, + 0x9e, 0x15, 0xf2, 0x01, 0x9b, 0xdb, 0x6d, 0xc0, 0xe6, 0x62, 0xdf, 0x88, 0x21, 0x1f, 0xb2, 0x59, + 0xea, 0x44, 0x36, 0x2f, 0xf4, 0x44, 0x36, 0xae, 0x04, 0x0f, 0xda, 0xdc, 0x6e, 0x83, 0x36, 0x17, + 0x7b, 0x40, 0x1b, 0xaf, 0x00, 0x1c, 0xdb, 0xa8, 0xbd, 0xb1, 0xcd, 0xfc, 0xa0, 0xd8, 0xc6, 0x15, + 0x1c, 0x0a, 0x6e, 0x36, 0xc2, 0xc1, 0xcd, 0xd5, 0x01, 0x37, 0xed, 0x3b, 0xd0, 0x4d, 0x39, 0x0c, + 0xdd, 0x5c, 0xee, 0x83, 0x6e, 0xfc, 0x73, 0x88, 0x0b, 0x6f, 0xca, 0x61, 0xf0, 0xe6, 0x72, 0x1f, + 0x78, 0xe3, 0x49, 0xf2, 0xe1, 0x9b, 0x6a, 0x37, 0x7c, 0xf3, 0xe2, 0x00, 0xf8, 0xc6, 0x73, 0x5e, + 0xda, 0x00, 0xce, 0xdb, 0xed, 0x00, 0xa7, 0xd0, 0x0b, 0xe0, 0x78, 0x23, 0xd2, 0x41, 0x38, 0x1b, + 0xe1, 0x08, 0xe7, 0x6a, 0x5f, 0x84, 0xe3, 0x37, 0x92, 0x3e, 0x88, 0xb3, 0x16, 0x0a, 0x71, 0xae, + 0xf4, 0x83, 0x38, 0x9e, 0x91, 0xf4, 0x63, 0x9c, 0xb7, 0xdb, 0x31, 0x4e, 0xa1, 0x17, 0xc6, 0xf1, + 0x2a, 0xe7, 0x80, 0x9c, 0x72, 0x18, 0xc8, 0xb9, 0xdc, 0x07, 0xe4, 0x78, 0x8d, 0xe7, 0x43, 0x39, + 0x72, 0x4f, 0x94, 0xf3, 0xf2, 0x80, 0x28, 0xa7, 0xcd, 0x70, 0x05, 0x61, 0x4e, 0x39, 0x0c, 0xe6, + 0x5c, 0xee, 0x03, 0x73, 0x7c, 0x85, 0xf5, 0x70, 0xce, 0x46, 0x38, 0xce, 0xb9, 0xda, 0x17, 0xe7, + 0xb4, 0x8d, 0x26, 0x07, 0xe8, 0xac, 0x85, 0x02, 0x9d, 0x2b, 0xfd, 0x80, 0x4e, 0xdb, 0xc4, 0xc7, + 0x9d, 0x83, 0xff, 0x3a, 0x38, 0xd2, 0x79, 0xe3, 0xe4, 0x48, 0xc7, 0x7d, 0x67, 0x24, 0x50, 0x67, + 0x35, 0x91, 0x7c, 0x2e, 0xf7, 0x7c, 0xe1, 0x7f, 0x8e, 0xc2, 0x48, 0xd9, 0x8d, 0x85, 0xf1, 0x4a, + 0x29, 0x9c, 0xe6, 0x82, 0x25, 0xb4, 0x4c, 0x46, 0x2c, 0xb5, 0x7b, 0xfd, 0xef, 0xd2, 0xeb, 0xbc, + 0xe7, 0x8d, 0xb3, 0x9e, 0xe2, 0x7c, 0x33, 0x7a, 0x0d, 0xc6, 0x5a, 0x16, 0x36, 0xa5, 0xa6, 0xa9, + 0x19, 0xa6, 0x66, 0xb3, 0xb3, 0x22, 0xc2, 0x52, 0xee, 0xd9, 0xf1, 0x6c, 0x66, 0xcb, 0xc2, 0xe6, + 0x26, 0xa7, 0x8b, 0x99, 0x96, 0xef, 0xc9, 0xf9, 0xe6, 0xd4, 0xf0, 0xe0, 0xdf, 0x9c, 0x7a, 0x00, + 0x39, 0x13, 0xcb, 0x6a, 0xc0, 0x03, 0x61, 0x17, 0x18, 0x85, 0xf7, 0x19, 0x7a, 0x0c, 0xcb, 0xc9, + 0x49, 0x2f, 0x32, 0x1a, 0x37, 0x83, 0x44, 0x74, 0x03, 0xce, 0x34, 0xe4, 0x43, 0x1a, 0x4f, 0x29, + 0x39, 0x4e, 0x1d, 0x8d, 0x91, 0x64, 0x9f, 0x73, 0x42, 0x0d, 0xf9, 0x90, 0x7e, 0xc0, 0x8a, 0x25, + 0xd1, 0x2f, 0x4e, 0x5c, 0x86, 0xac, 0xaa, 0x59, 0xb6, 0xa6, 0x2b, 0x36, 0xbf, 0xba, 0x96, 0xdd, + 0x05, 0x3b, 0xe6, 0x50, 0xd9, 0xfd, 0xb4, 0xd7, 0x61, 0x82, 0x87, 0xdb, 0xfb, 0xb6, 0x08, 0x81, + 0xc7, 0xb0, 0xd1, 0x04, 0x77, 0x57, 0x10, 0x15, 0x61, 0xbc, 0x26, 0xdb, 0xf8, 0x40, 0x3e, 0x92, + 0x9c, 0xb3, 0x5a, 0x69, 0x7a, 0xf3, 0xe3, 0x85, 0xa7, 0xc7, 0xb3, 0x63, 0x77, 0x59, 0x52, 0xc7, + 0x91, 0xad, 0xb1, 0x9a, 0x2f, 0x41, 0x45, 0x57, 0x61, 0x5c, 0xb6, 0x8e, 0x74, 0x85, 0xaa, 0x07, + 0xeb, 0x56, 0xcb, 0xa2, 0x90, 0x22, 0x29, 0x66, 0x29, 0xb9, 0xe8, 0x50, 0xd1, 0x45, 0xc8, 0xf0, + 0x58, 0x74, 0xf6, 0x15, 0x9c, 0x71, 0x5a, 0x55, 0xfe, 0x51, 0x06, 0xfa, 0x21, 0x1c, 0x74, 0x1b, + 0xa6, 0xf9, 0x65, 0xf5, 0x07, 0xb2, 0xa9, 0x4a, 0x54, 0xeb, 0x5e, 0xff, 0xcc, 0x51, 0xb1, 0xe7, + 0xd8, 0xe5, 0xf4, 0x24, 0x03, 0x51, 0xb5, 0x77, 0xa9, 0xc2, 0x06, 0x4c, 0x28, 0x75, 0xcd, 0x45, + 0x00, 0xac, 0xe6, 0x13, 0x5d, 0xed, 0x6c, 0x91, 0xe6, 0xf5, 0xb6, 0x48, 0xc7, 0x95, 0x20, 0x01, + 0x55, 0x80, 0x5e, 0x0c, 0x23, 0x35, 0x8d, 0xba, 0xa6, 0x1c, 0x51, 0xe7, 0x3f, 0x78, 0xd1, 0x76, + 0xcf, 0xab, 0xef, 0x1f, 0xc9, 0x9a, 0xbd, 0x49, 0x39, 0x45, 0x38, 0x70, 0xff, 0xb3, 0x8b, 0x75, + 0x57, 0x13, 0xc9, 0x4c, 0x6e, 0x6c, 0x35, 0x91, 0xcc, 0xe6, 0xc6, 0x0b, 0xff, 0x57, 0x80, 0xf1, + 0xb6, 0xb2, 0xa0, 0x32, 0x9c, 0x51, 0xdd, 0xa1, 0x22, 0xf1, 0xa3, 0x4c, 0x9a, 0xa1, 0xf3, 0xbb, + 0xc3, 0x27, 0x9f, 0x1d, 0xcf, 0x8e, 0xd3, 0xdc, 0x77, 0xdd, 0x24, 0x71, 0xca, 0xe3, 0xf0, 0xa8, + 0xe8, 0x0d, 0xc8, 0x32, 0xf7, 0xd1, 0xfd, 0xd4, 0x1b, 0x8d, 0x2f, 0x5f, 0x9a, 0x78, 0x76, 0x3c, + 0x3b, 0x46, 0x7d, 0x46, 0xe7, 0x56, 0x60, 0x71, 0xac, 0xee, 0x7f, 0x2c, 0xfc, 0x1f, 0x01, 0x32, + 0x81, 0xc3, 0x41, 0xb7, 0xdb, 0x76, 0xd0, 0xcf, 0x87, 0xe3, 0xce, 0x6e, 0x41, 0x77, 0x49, 0xde, + 0xcf, 0x9d, 0x08, 0xc6, 0xd9, 0xee, 0xb8, 0x85, 0xae, 0xc2, 0x38, 0x61, 0x1b, 0x0e, 0xdb, 0x9b, + 0x89, 0xff, 0xff, 0xe1, 0xec, 0x50, 0xe1, 0xa3, 0x04, 0x8c, 0x05, 0x0f, 0x01, 0xad, 0xb4, 0x95, + 0x2b, 0x6c, 0x5e, 0x08, 0x70, 0xcc, 0xf7, 0xb8, 0x0b, 0x31, 0xe5, 0x5d, 0xd5, 0xcf, 0x8a, 0x39, + 0xd7, 0x23, 0x4e, 0xc0, 0x5f, 0x4e, 0x8f, 0x71, 0xfa, 0xbf, 0xc5, 0x5d, 0xfb, 0x3a, 0x0f, 0xc3, + 0xf4, 0x76, 0x1e, 0x5e, 0xb4, 0xb0, 0xf3, 0xe5, 0x25, 0x92, 0x2e, 0xb2, 0x6c, 0xc4, 0x1e, 0x57, + 0x4f, 0x75, 0xe1, 0x9d, 0x37, 0x0c, 0x4e, 0xfe, 0x4d, 0x3d, 0x7e, 0xed, 0xe1, 0xf0, 0xc9, 0xae, + 0x3d, 0x64, 0x3b, 0xfa, 0xf5, 0x3a, 0x9b, 0xeb, 0x98, 0x45, 0x1a, 0xe9, 0x38, 0xc4, 0x4d, 0x45, + 0xf0, 0x4f, 0x1d, 0xce, 0x8b, 0xfc, 0x53, 0x87, 0xbe, 0x28, 0xd0, 0xac, 0x2b, 0x82, 0x99, 0xaf, + 0xb6, 0x80, 0xd4, 0xd1, 0xd3, 0x04, 0xa4, 0xb2, 0x50, 0x66, 0xde, 0x5f, 0xfe, 0x44, 0xe0, 0xe1, + 0x20, 0xf7, 0x0c, 0x63, 0xaf, 0xe5, 0x06, 0x92, 0x4e, 0xfb, 0x2f, 0x1d, 0x4c, 0x3e, 0x3b, 0x9e, + 0x4d, 0x88, 0xee, 0xad, 0x83, 0x61, 0xf6, 0x3e, 0xf6, 0xc9, 0xec, 0xfd, 0x45, 0xc8, 0x34, 0x4d, + 0xbc, 0x83, 0x6d, 0x65, 0x57, 0xd2, 0x5b, 0x0d, 0x7e, 0x0e, 0x25, 0xed, 0xd0, 0x36, 0x5a, 0x0d, + 0xf4, 0x22, 0xe4, 0xdc, 0x2c, 0x1c, 0x59, 0xf3, 0x63, 0xf8, 0xe3, 0x0e, 0x9d, 0xe3, 0xf0, 0xc2, + 0x3f, 0x08, 0x30, 0x19, 0xa8, 0x13, 0x1f, 0x09, 0xab, 0x90, 0xf6, 0x8c, 0x80, 0x95, 0x17, 0x4e, + 0x18, 0x50, 0xe9, 0x67, 0x46, 0x12, 0x9c, 0x75, 0x5e, 0x4b, 0x2f, 0xa2, 0xf7, 0xc4, 0xc6, 0x4e, + 0x28, 0xf6, 0x8c, 0x27, 0x67, 0xd9, 0xf7, 0x02, 0x77, 0x68, 0xc4, 0x07, 0x1a, 0x1a, 0x85, 0x0f, + 0x04, 0xc8, 0xd1, 0x17, 0xdc, 0xc1, 0x58, 0x8d, 0xc4, 0x26, 0x39, 0xe1, 0xca, 0xb1, 0xc1, 0x4f, + 0x9a, 0x04, 0x3e, 0xa4, 0x11, 0x0f, 0x7e, 0x48, 0xa3, 0xf0, 0xa1, 0x00, 0x59, 0xb7, 0x84, 0xec, + 0x13, 0x72, 0x3d, 0xee, 0xb6, 0x3c, 0xdd, 0x87, 0xd3, 0x9c, 0xeb, 0x3a, 0x06, 0xfa, 0xaa, 0x9d, + 0xff, 0xba, 0x0e, 0xf6, 0x91, 0xaf, 0x5f, 0x75, 0x7a, 0x0e, 0x29, 0x62, 0xd1, 0xbb, 0x8a, 0xe1, + 0x14, 0x87, 0x6e, 0x44, 0xfa, 0x25, 0x4e, 0xa3, 0xbe, 0xcf, 0xee, 0x49, 0x19, 0xc8, 0x58, 0x21, + 0x1e, 0x04, 0x05, 0x7c, 0x0d, 0x4e, 0xad, 0x56, 0xe8, 0x37, 0x3a, 0xd9, 0x7f, 0xab, 0x70, 0xc7, + 0xa7, 0x40, 0xda, 0xf8, 0x44, 0x4b, 0x03, 0x19, 0x50, 0x47, 0x4b, 0xac, 0xaf, 0xfc, 0xd8, 0xdf, + 0x12, 0xa5, 0x7d, 0x82, 0xbd, 0x6e, 0x41, 0x7c, 0x5f, 0xae, 0xf7, 0x0a, 0xfe, 0x0a, 0xb4, 0x9c, + 0x48, 0x72, 0xa3, 0x3b, 0x81, 0x1b, 0x2c, 0x62, 0xdd, 0x71, 0x42, 0xa7, 0x4a, 0x03, 0x37, 0x5d, + 0xbc, 0x1e, 0xec, 0xeb, 0x3d, 0x5f, 0xef, 0xef, 0xf4, 0x6f, 0x26, 0x3e, 0xfe, 0x70, 0x56, 0x28, + 0xbc, 0x0e, 0xe7, 0xef, 0x1a, 0x96, 0xa5, 0x35, 0x09, 0x36, 0xa4, 0x03, 0x88, 0xd8, 0x6e, 0xd7, + 0x92, 0x25, 0x9b, 0x74, 0x95, 0x40, 0x67, 0x23, 0x3e, 0x25, 0xba, 0xcf, 0x85, 0xdf, 0x13, 0xe0, + 0x5c, 0x27, 0x27, 0x53, 0x48, 0xd8, 0xa1, 0xbe, 0x51, 0xc5, 0xf0, 0x6e, 0x74, 0xeb, 0xdf, 0xb1, + 0x9c, 0xec, 0xc4, 0x07, 0xe4, 0xef, 0x94, 0x1a, 0x32, 0x1d, 0xe9, 0xfc, 0xe0, 0x71, 0x96, 0x93, + 0xd7, 0x19, 0xd5, 0x1b, 0xf4, 0x89, 0x81, 0x06, 0xfd, 0xf5, 0x0a, 0x4c, 0x86, 0xd8, 0x57, 0x94, + 0x05, 0xf0, 0x7d, 0x58, 0x84, 0x7f, 0xd0, 0x74, 0x71, 0x59, 0xda, 0xda, 0x28, 0xde, 0x5f, 0x5f, + 0x5f, 0xa9, 0x56, 0x4b, 0xcb, 0x39, 0x01, 0xe5, 0x20, 0x13, 0xf8, 0x2c, 0x49, 0x8c, 0x7d, 0xe2, + 0xf4, 0xfa, 0x7f, 0x00, 0xf0, 0xbe, 0x76, 0x44, 0x64, 0xad, 0x95, 0xde, 0x91, 0x1e, 0x2e, 0xde, + 0xdb, 0x2a, 0x55, 0x72, 0x43, 0x08, 0x41, 0x76, 0x69, 0xb1, 0x5a, 0x2c, 0x4b, 0x62, 0xa9, 0xb2, + 0x79, 0x7f, 0xa3, 0x52, 0x72, 0x3e, 0x8d, 0x7a, 0x7d, 0x19, 0x32, 0xfe, 0x5b, 0x4e, 0xd0, 0x24, + 0x8c, 0x17, 0xcb, 0xa5, 0xe2, 0x9a, 0xf4, 0x70, 0x65, 0x51, 0x7a, 0xb0, 0x55, 0xda, 0x2a, 0xe5, + 0x86, 0x68, 0xd1, 0x28, 0xf1, 0xce, 0xd6, 0xbd, 0x7b, 0x39, 0x01, 0x8d, 0x43, 0x9a, 0x3d, 0xd3, + 0x4f, 0x98, 0xe4, 0x62, 0xd7, 0xd7, 0x21, 0xed, 0xbb, 0xe3, 0x94, 0xbc, 0x6e, 0x73, 0xab, 0x52, + 0x96, 0xaa, 0x2b, 0xeb, 0xa5, 0x4a, 0x75, 0x71, 0x7d, 0x93, 0xc9, 0xa0, 0xb4, 0xc5, 0xa5, 0xfb, + 0x62, 0x35, 0x27, 0xb8, 0xcf, 0xd5, 0xfb, 0x5b, 0xc5, 0xb2, 0x53, 0x8d, 0x42, 0x22, 0x19, 0xcf, + 0xc5, 0xaf, 0x7f, 0x43, 0x80, 0x73, 0x5d, 0xee, 0xfa, 0x40, 0x69, 0x18, 0xdd, 0xd2, 0xe9, 0x25, + 0x8f, 0xb9, 0x21, 0x34, 0xe6, 0xbb, 0xee, 0x23, 0x27, 0xa0, 0x24, 0xbb, 0x6a, 0x21, 0x17, 0x43, + 0x23, 0x10, 0xab, 0xdc, 0xca, 0xc5, 0x49, 0x49, 0x7d, 0xb7, 0x65, 0xe4, 0x12, 0x28, 0xc5, 0x0f, + 0xfb, 0xe7, 0x86, 0x51, 0xc6, 0x3b, 0x6d, 0x9f, 0x1b, 0x21, 0xa2, 0xdc, 0xf3, 0xea, 0xb9, 0xd1, + 0xeb, 0x17, 0xc1, 0x77, 0xf6, 0x17, 0x01, 0x8c, 0xdc, 0x93, 0x6d, 0x6c, 0xd9, 0xb9, 0x21, 0x34, + 0x0a, 0xf1, 0xc5, 0x7a, 0x3d, 0x27, 0xdc, 0xfc, 0xef, 0x71, 0x48, 0x3a, 0x1f, 0xe9, 0x40, 0xf7, + 0x60, 0x98, 0x2d, 0x25, 0xce, 0x76, 0xf7, 0xd4, 0x68, 0xdf, 0x9e, 0x9e, 0xeb, 0xe7, 0xca, 0x15, + 0x86, 0xd0, 0x7f, 0x84, 0xb4, 0x6f, 0x2e, 0x44, 0x5d, 0x97, 0x43, 0x02, 0xf3, 0xff, 0xf4, 0x95, + 0x7e, 0xd9, 0x5c, 0xf9, 0x8f, 0x20, 0xe5, 0x8e, 0x4d, 0xf4, 0x42, 0xaf, 0x91, 0xeb, 0xc8, 0xee, + 0x3d, 0xbc, 0xc9, 0xe0, 0x2b, 0x0c, 0xbd, 0x22, 0x20, 0x13, 0x50, 0xe7, 0xd8, 0x44, 0x61, 0x3b, + 0xcc, 0x5d, 0x07, 0xff, 0xf4, 0xf5, 0x81, 0x72, 0xbb, 0xef, 0x5c, 0x7a, 0xf1, 0xe3, 0x9f, 0xcf, + 0x0c, 0x7d, 0xfc, 0x74, 0x46, 0xf8, 0xc9, 0xd3, 0x19, 0xe1, 0x67, 0x4f, 0x67, 0x84, 0xbf, 0x7a, + 0x3a, 0x23, 0xfc, 0xef, 0x5f, 0xcc, 0x0c, 0xfd, 0xe4, 0x17, 0x33, 0x43, 0x3f, 0xfb, 0xc5, 0xcc, + 0xd0, 0xbb, 0xa3, 0x5c, 0xcc, 0xf6, 0x08, 0xfd, 0xe8, 0xf4, 0xad, 0x7f, 0x0d, 0x00, 0x00, 0xff, + 0xff, 0x0b, 0xf5, 0xaf, 0x4d, 0x97, 0x7b, 0x00, 0x00, } diff --git a/pkg/roachpb/api.proto b/pkg/roachpb/api.proto index 64ad3f672d98..73d90e5d017a 100644 --- a/pkg/roachpb/api.proto +++ b/pkg/roachpb/api.proto @@ -1888,6 +1888,15 @@ message Header { // operations. The default is CONSISTENT. This value is ignored for // write operations. ReadConsistencyType read_consistency = 6; + // wait_policy specifies the desried behavior for the batch request if it + // encounters a conflicting lock held by another active transaction. + // + // If an Error wait policy is set and a conflicting lock held by an active + // transaction is encountered, a WriteIntentError will be returned. + // + // If the desired behavior is to block on the conflicting lock up to some + // maximum duration, use the Block wait policy and set a context timeout. + kv.kvserver.concurrency.lock.WaitPolicy wait_policy = 18; // If set to a non-zero value, the total number of keys touched by requests in // the batch is limited. A resume span will be provided on the response of the // requests that were not able to run to completion before the limit was diff --git a/pkg/roachpb/errors.go b/pkg/roachpb/errors.go index 35abcca848b1..f0a27202560c 100644 --- a/pkg/roachpb/errors.go +++ b/pkg/roachpb/errors.go @@ -364,6 +364,11 @@ func (e *RangeNotFoundError) message(_ *Error) string { var _ ErrorDetailInterface = &RangeNotFoundError{} +// IsRangeNotFoundError returns true if err contains a *RangeNotFoundError. +func IsRangeNotFoundError(err error) bool { + return errors.HasType(err, (*RangeNotFoundError)(nil)) +} + // NewRangeKeyMismatchError initializes a new RangeKeyMismatchError. // // desc and lease represent info about the range that the request was @@ -924,8 +929,3 @@ func (e *IndeterminateCommitError) message(pErr *Error) string { } var _ ErrorDetailInterface = &IndeterminateCommitError{} - -// IsRangeNotFoundError returns true if err contains a *RangeNotFoundError. -func IsRangeNotFoundError(err error) bool { - return errors.HasType(err, (*RangeNotFoundError)(nil)) -}