From 76228cdc4f06399b6114e4293390045e2c917b15 Mon Sep 17 00:00:00 2001 From: Nathan VanBenschoten Date: Thu, 28 Feb 2019 18:30:09 -0500 Subject: [PATCH 1/3] storage: make PushTxnRequest.PushTo inclusive instead of exclusive Before this change, pushers specified the timestamp before which they would like to push a transaction (i.e. they passed their own timestamp). This change reworks this so that pushers pass the exact timestamp they would like to push the transaction to. There are a few reasons to do this: - it avoids confusion and makes the contract clearer - it makes PushTxnRequest more general - it makes it more clear how PushTo should relate to Now This third reason is the most important. It will be exploited in the next commit. Release note: None --- docs/generated/settings/settings.html | 2 +- pkg/roachpb/api.pb.go | 827 +++++++++--------- pkg/roachpb/api.proto | 12 +- pkg/settings/cluster/cockroach_versions.go | 7 + pkg/storage/batcheval/cmd_push_txn.go | 5 +- .../intentresolver/contention_queue.go | 11 +- pkg/storage/intentresolver/intent_resolver.go | 14 +- pkg/storage/replica.go | 7 +- pkg/storage/replica_test.go | 6 +- pkg/storage/store.go | 20 + pkg/storage/store_test.go | 2 +- pkg/storage/txnwait/queue_test.go | 2 +- pkg/storage/txnwait/txnqueue.go | 2 +- 13 files changed, 499 insertions(+), 418 deletions(-) diff --git a/docs/generated/settings/settings.html b/docs/generated/settings/settings.html index e91ec3d53b0d..815f15595ec5 100644 --- a/docs/generated/settings/settings.html +++ b/docs/generated/settings/settings.html @@ -99,6 +99,6 @@ trace.debug.enablebooleanfalseif set, traces for recent requests can be seen in the /debug page trace.lightstep.tokenstringif set, traces go to Lightstep using this token trace.zipkin.collectorstringif set, traces go to the given Zipkin instance (example: '127.0.0.1:9411'); ignored if trace.lightstep.token is set. -versioncustom validation2.1-9set the active cluster version in the format '.'. +versioncustom validation2.1-10set the active cluster version in the format '.'. diff --git a/pkg/roachpb/api.pb.go b/pkg/roachpb/api.pb.go index e9e008037c5c..ca41803ccadd 100644 --- a/pkg/roachpb/api.pb.go +++ b/pkg/roachpb/api.pb.go @@ -69,7 +69,7 @@ func (x ReadConsistencyType) String() string { return proto.EnumName(ReadConsistencyType_name, int32(x)) } func (ReadConsistencyType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{0} + return fileDescriptor_api_99a1f43a94ccaa24, []int{0} } // ScanFormat is an enumeration of the available response formats for MVCCScan @@ -97,7 +97,7 @@ func (x ScanFormat) String() string { return proto.EnumName(ScanFormat_name, int32(x)) } func (ScanFormat) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{1} + return fileDescriptor_api_99a1f43a94ccaa24, []int{1} } // PushTxnType determines what action to take when pushing a transaction. @@ -128,7 +128,7 @@ func (x PushTxnType) String() string { return proto.EnumName(PushTxnType_name, int32(x)) } func (PushTxnType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{2} + return fileDescriptor_api_99a1f43a94ccaa24, []int{2} } type ExportStorageProvider int32 @@ -166,7 +166,7 @@ func (x ExportStorageProvider) String() string { return proto.EnumName(ExportStorageProvider_name, int32(x)) } func (ExportStorageProvider) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{3} + return fileDescriptor_api_99a1f43a94ccaa24, []int{3} } type MVCCFilter int32 @@ -189,7 +189,7 @@ func (x MVCCFilter) String() string { return proto.EnumName(MVCCFilter_name, int32(x)) } func (MVCCFilter) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{4} + return fileDescriptor_api_99a1f43a94ccaa24, []int{4} } type ResponseHeader_ResumeReason int32 @@ -221,7 +221,7 @@ func (x ResponseHeader_ResumeReason) String() string { return proto.EnumName(ResponseHeader_ResumeReason_name, int32(x)) } func (ResponseHeader_ResumeReason) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{2, 0} + return fileDescriptor_api_99a1f43a94ccaa24, []int{2, 0} } type QueryIntentRequest_IfMissingBehavior int32 @@ -257,7 +257,7 @@ func (x QueryIntentRequest_IfMissingBehavior) String() string { return proto.EnumName(QueryIntentRequest_IfMissingBehavior_name, int32(x)) } func (QueryIntentRequest_IfMissingBehavior) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{50, 0} + return fileDescriptor_api_99a1f43a94ccaa24, []int{50, 0} } // RangeInfo describes a range which executed a request. It contains @@ -273,7 +273,7 @@ func (m *RangeInfo) Reset() { *m = RangeInfo{} } func (m *RangeInfo) String() string { return proto.CompactTextString(m) } func (*RangeInfo) ProtoMessage() {} func (*RangeInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{0} + return fileDescriptor_api_99a1f43a94ccaa24, []int{0} } func (m *RangeInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -318,7 +318,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_0624836d76b24d58, []int{1} + return fileDescriptor_api_99a1f43a94ccaa24, []int{1} } func (m *RequestHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -378,7 +378,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_0624836d76b24d58, []int{2} + return fileDescriptor_api_99a1f43a94ccaa24, []int{2} } func (m *ResponseHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -414,7 +414,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_0624836d76b24d58, []int{3} + return fileDescriptor_api_99a1f43a94ccaa24, []int{3} } func (m *GetRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -454,7 +454,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_0624836d76b24d58, []int{4} + return fileDescriptor_api_99a1f43a94ccaa24, []int{4} } func (m *GetResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -499,7 +499,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_0624836d76b24d58, []int{5} + return fileDescriptor_api_99a1f43a94ccaa24, []int{5} } func (m *PutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -535,7 +535,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_0624836d76b24d58, []int{6} + return fileDescriptor_api_99a1f43a94ccaa24, []int{6} } func (m *PutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -591,7 +591,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_0624836d76b24d58, []int{7} + return fileDescriptor_api_99a1f43a94ccaa24, []int{7} } func (m *ConditionalPutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -628,7 +628,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_0624836d76b24d58, []int{8} + return fileDescriptor_api_99a1f43a94ccaa24, []int{8} } func (m *ConditionalPutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -676,7 +676,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_0624836d76b24d58, []int{9} + return fileDescriptor_api_99a1f43a94ccaa24, []int{9} } func (m *InitPutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -712,7 +712,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_0624836d76b24d58, []int{10} + return fileDescriptor_api_99a1f43a94ccaa24, []int{10} } func (m *InitPutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -754,7 +754,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_0624836d76b24d58, []int{11} + return fileDescriptor_api_99a1f43a94ccaa24, []int{11} } func (m *IncrementRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -793,7 +793,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_0624836d76b24d58, []int{12} + return fileDescriptor_api_99a1f43a94ccaa24, []int{12} } func (m *IncrementResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -829,7 +829,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_0624836d76b24d58, []int{13} + return fileDescriptor_api_99a1f43a94ccaa24, []int{13} } func (m *DeleteRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -865,7 +865,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_0624836d76b24d58, []int{14} + return fileDescriptor_api_99a1f43a94ccaa24, []int{14} } func (m *DeleteResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -916,7 +916,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_0624836d76b24d58, []int{15} + return fileDescriptor_api_99a1f43a94ccaa24, []int{15} } func (m *DeleteRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -955,7 +955,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_0624836d76b24d58, []int{16} + return fileDescriptor_api_99a1f43a94ccaa24, []int{16} } func (m *DeleteRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1004,7 +1004,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_0624836d76b24d58, []int{17} + return fileDescriptor_api_99a1f43a94ccaa24, []int{17} } func (m *ClearRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1040,7 +1040,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_0624836d76b24d58, []int{18} + return fileDescriptor_api_99a1f43a94ccaa24, []int{18} } func (m *ClearRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1111,7 +1111,7 @@ func (m *ScanOptions) Reset() { *m = ScanOptions{} } func (m *ScanOptions) String() string { return proto.CompactTextString(m) } func (*ScanOptions) ProtoMessage() {} func (*ScanOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{19} + return fileDescriptor_api_99a1f43a94ccaa24, []int{19} } func (m *ScanOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1153,7 +1153,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_0624836d76b24d58, []int{20} + return fileDescriptor_api_99a1f43a94ccaa24, []int{20} } func (m *ScanRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1202,7 +1202,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_0624836d76b24d58, []int{21} + return fileDescriptor_api_99a1f43a94ccaa24, []int{21} } func (m *ScanResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1244,7 +1244,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_0624836d76b24d58, []int{22} + return fileDescriptor_api_99a1f43a94ccaa24, []int{22} } func (m *ReverseScanRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1293,7 +1293,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_0624836d76b24d58, []int{23} + return fileDescriptor_api_99a1f43a94ccaa24, []int{23} } func (m *ReverseScanResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1334,7 +1334,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_0624836d76b24d58, []int{24} + return fileDescriptor_api_99a1f43a94ccaa24, []int{24} } func (m *CheckConsistencyRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1371,7 +1371,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_0624836d76b24d58, []int{25} + return fileDescriptor_api_99a1f43a94ccaa24, []int{25} } func (m *CheckConsistencyResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1421,7 +1421,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_0624836d76b24d58, []int{26} + return fileDescriptor_api_99a1f43a94ccaa24, []int{26} } func (m *RecomputeStatsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1459,7 +1459,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_0624836d76b24d58, []int{27} + return fileDescriptor_api_99a1f43a94ccaa24, []int{27} } func (m *RecomputeStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1495,7 +1495,7 @@ func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest func (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) } func (*BeginTransactionRequest) ProtoMessage() {} func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{28} + return fileDescriptor_api_99a1f43a94ccaa24, []int{28} } func (m *BeginTransactionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1531,7 +1531,7 @@ func (m *BeginTransactionResponse) Reset() { *m = BeginTransactionRespon func (m *BeginTransactionResponse) String() string { return proto.CompactTextString(m) } func (*BeginTransactionResponse) ProtoMessage() {} func (*BeginTransactionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{29} + return fileDescriptor_api_99a1f43a94ccaa24, []int{29} } func (m *BeginTransactionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1605,7 +1605,7 @@ func (m *EndTransactionRequest) Reset() { *m = EndTransactionRequest{} } func (m *EndTransactionRequest) String() string { return proto.CompactTextString(m) } func (*EndTransactionRequest) ProtoMessage() {} func (*EndTransactionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{30} + return fileDescriptor_api_99a1f43a94ccaa24, []int{30} } func (m *EndTransactionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1651,7 +1651,7 @@ func (m *EndTransactionResponse) Reset() { *m = EndTransactionResponse{} func (m *EndTransactionResponse) String() string { return proto.CompactTextString(m) } func (*EndTransactionResponse) ProtoMessage() {} func (*EndTransactionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{31} + return fileDescriptor_api_99a1f43a94ccaa24, []int{31} } func (m *EndTransactionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1707,7 +1707,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_0624836d76b24d58, []int{32} + return fileDescriptor_api_99a1f43a94ccaa24, []int{32} } func (m *AdminSplitRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1744,7 +1744,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_0624836d76b24d58, []int{33} + return fileDescriptor_api_99a1f43a94ccaa24, []int{33} } func (m *AdminSplitResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1788,7 +1788,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_0624836d76b24d58, []int{34} + return fileDescriptor_api_99a1f43a94ccaa24, []int{34} } func (m *AdminMergeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1825,7 +1825,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_0624836d76b24d58, []int{35} + return fileDescriptor_api_99a1f43a94ccaa24, []int{35} } func (m *AdminMergeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1865,7 +1865,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_0624836d76b24d58, []int{36} + return fileDescriptor_api_99a1f43a94ccaa24, []int{36} } func (m *AdminTransferLeaseRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1900,7 +1900,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_0624836d76b24d58, []int{37} + return fileDescriptor_api_99a1f43a94ccaa24, []int{37} } func (m *AdminTransferLeaseResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1940,7 +1940,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_0624836d76b24d58, []int{38} + return fileDescriptor_api_99a1f43a94ccaa24, []int{38} } func (m *AdminChangeReplicasRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1975,7 +1975,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_0624836d76b24d58, []int{39} + return fileDescriptor_api_99a1f43a94ccaa24, []int{39} } func (m *AdminChangeReplicasResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2014,7 +2014,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_0624836d76b24d58, []int{40} + return fileDescriptor_api_99a1f43a94ccaa24, []int{40} } func (m *AdminRelocateRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2049,7 +2049,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_0624836d76b24d58, []int{41} + return fileDescriptor_api_99a1f43a94ccaa24, []int{41} } func (m *AdminRelocateRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2090,7 +2090,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_0624836d76b24d58, []int{42} + return fileDescriptor_api_99a1f43a94ccaa24, []int{42} } func (m *HeartbeatTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2129,7 +2129,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_0624836d76b24d58, []int{43} + return fileDescriptor_api_99a1f43a94ccaa24, []int{43} } func (m *HeartbeatTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2174,7 +2174,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_0624836d76b24d58, []int{44} + return fileDescriptor_api_99a1f43a94ccaa24, []int{44} } func (m *GCRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2210,7 +2210,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_0624836d76b24d58, []int{44, 0} + return fileDescriptor_api_99a1f43a94ccaa24, []int{44, 0} } func (m *GCRequest_GCKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2246,7 +2246,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_0624836d76b24d58, []int{45} + return fileDescriptor_api_99a1f43a94ccaa24, []int{45} } func (m *GCResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2296,10 +2296,16 @@ type PushTxnRequest struct { // up-to-date value of the transaction record, but will be set or // merged as appropriate. PusheeTxn enginepb.TxnMeta `protobuf:"bytes,3,opt,name=pushee_txn,json=pusheeTxn,proto3" json:"pushee_txn"` - // PushTo is the timestamp just after which PusheeTxn is attempted to be - // pushed. During conflict resolution, it should be set to the timestamp - // of the its conflicting write. + // PushTo is the timestamp which PusheeTxn should be pushed to. During + // conflict resolution, it should be set just after the timestamp of the + // conflicting read or write. PushTo hlc.Timestamp `protobuf:"bytes,4,opt,name=push_to,json=pushTo,proto3" json:"push_to"` + // InclusivePushTo is sent by nodes to specify that their PushTo timestamp + // is the timestamp they want the transaction to be pushed to, instead of + // the timestamp before the one they want the transaction to be pushed to. + // It is used to assist that field's migration. + // TODO(nvanbenschoten): Remove this field in 19.2. + InclusivePushTo bool `protobuf:"varint,9,opt,name=inclusive_push_to,json=inclusivePushTo,proto3" json:"inclusive_push_to,omitempty"` // Now holds the timestamp used to compare the last heartbeat of the pushee // against. This is necessary since the request header's timestamp does not // necessarily advance with the node clock across retries and hence cannot @@ -2322,7 +2328,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_0624836d76b24d58, []int{46} + return fileDescriptor_api_99a1f43a94ccaa24, []int{46} } func (m *PushTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2367,7 +2373,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_0624836d76b24d58, []int{47} + return fileDescriptor_api_99a1f43a94ccaa24, []int{47} } func (m *PushTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2413,7 +2419,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_0624836d76b24d58, []int{48} + return fileDescriptor_api_99a1f43a94ccaa24, []int{48} } func (m *QueryTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2454,7 +2460,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_0624836d76b24d58, []int{49} + return fileDescriptor_api_99a1f43a94ccaa24, []int{49} } func (m *QueryTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2516,7 +2522,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_0624836d76b24d58, []int{50} + return fileDescriptor_api_99a1f43a94ccaa24, []int{50} } func (m *QueryIntentRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2554,7 +2560,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_0624836d76b24d58, []int{51} + return fileDescriptor_api_99a1f43a94ccaa24, []int{51} } func (m *QueryIntentResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2600,7 +2606,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_0624836d76b24d58, []int{52} + return fileDescriptor_api_99a1f43a94ccaa24, []int{52} } func (m *ResolveIntentRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2637,7 +2643,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_0624836d76b24d58, []int{53} + return fileDescriptor_api_99a1f43a94ccaa24, []int{53} } func (m *ResolveIntentResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2687,7 +2693,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_0624836d76b24d58, []int{54} + return fileDescriptor_api_99a1f43a94ccaa24, []int{54} } func (m *ResolveIntentRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2724,7 +2730,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_0624836d76b24d58, []int{55} + return fileDescriptor_api_99a1f43a94ccaa24, []int{55} } func (m *ResolveIntentRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2763,7 +2769,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_0624836d76b24d58, []int{56} + return fileDescriptor_api_99a1f43a94ccaa24, []int{56} } func (m *MergeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2799,7 +2805,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_0624836d76b24d58, []int{57} + return fileDescriptor_api_99a1f43a94ccaa24, []int{57} } func (m *MergeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2846,7 +2852,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_0624836d76b24d58, []int{58} + return fileDescriptor_api_99a1f43a94ccaa24, []int{58} } func (m *TruncateLogRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2882,7 +2888,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_0624836d76b24d58, []int{59} + return fileDescriptor_api_99a1f43a94ccaa24, []int{59} } func (m *TruncateLogResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2928,7 +2934,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_0624836d76b24d58, []int{60} + return fileDescriptor_api_99a1f43a94ccaa24, []int{60} } func (m *RequestLeaseRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2979,7 +2985,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_0624836d76b24d58, []int{61} + return fileDescriptor_api_99a1f43a94ccaa24, []int{61} } func (m *TransferLeaseRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3018,7 +3024,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_0624836d76b24d58, []int{62} + return fileDescriptor_api_99a1f43a94ccaa24, []int{62} } func (m *LeaseInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3057,7 +3063,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_0624836d76b24d58, []int{63} + return fileDescriptor_api_99a1f43a94ccaa24, []int{63} } func (m *LeaseInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3094,7 +3100,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_0624836d76b24d58, []int{64} + return fileDescriptor_api_99a1f43a94ccaa24, []int{64} } func (m *RequestLeaseResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3139,7 +3145,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_0624836d76b24d58, []int{65} + return fileDescriptor_api_99a1f43a94ccaa24, []int{65} } func (m *ComputeChecksumRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3178,7 +3184,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_0624836d76b24d58, []int{66} + return fileDescriptor_api_99a1f43a94ccaa24, []int{66} } func (m *ComputeChecksumResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3219,7 +3225,7 @@ func (m *ExportStorage) Reset() { *m = ExportStorage{} } func (m *ExportStorage) String() string { return proto.CompactTextString(m) } func (*ExportStorage) ProtoMessage() {} func (*ExportStorage) Descriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{67} + return fileDescriptor_api_99a1f43a94ccaa24, []int{67} } func (m *ExportStorage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3255,7 +3261,7 @@ func (m *ExportStorage_LocalFilePath) Reset() { *m = ExportStorage_Local func (m *ExportStorage_LocalFilePath) String() string { return proto.CompactTextString(m) } func (*ExportStorage_LocalFilePath) ProtoMessage() {} func (*ExportStorage_LocalFilePath) Descriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{67, 0} + return fileDescriptor_api_99a1f43a94ccaa24, []int{67, 0} } func (m *ExportStorage_LocalFilePath) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3290,7 +3296,7 @@ func (m *ExportStorage_Http) Reset() { *m = ExportStorage_Http{} } func (m *ExportStorage_Http) String() string { return proto.CompactTextString(m) } func (*ExportStorage_Http) ProtoMessage() {} func (*ExportStorage_Http) Descriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{67, 1} + return fileDescriptor_api_99a1f43a94ccaa24, []int{67, 1} } func (m *ExportStorage_Http) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3331,7 +3337,7 @@ func (m *ExportStorage_S3) Reset() { *m = ExportStorage_S3{} } func (m *ExportStorage_S3) String() string { return proto.CompactTextString(m) } func (*ExportStorage_S3) ProtoMessage() {} func (*ExportStorage_S3) Descriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{67, 2} + return fileDescriptor_api_99a1f43a94ccaa24, []int{67, 2} } func (m *ExportStorage_S3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3372,7 +3378,7 @@ func (m *ExportStorage_GCS) Reset() { *m = ExportStorage_GCS{} } func (m *ExportStorage_GCS) String() string { return proto.CompactTextString(m) } func (*ExportStorage_GCS) ProtoMessage() {} func (*ExportStorage_GCS) Descriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{67, 3} + return fileDescriptor_api_99a1f43a94ccaa24, []int{67, 3} } func (m *ExportStorage_GCS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3410,7 +3416,7 @@ func (m *ExportStorage_Azure) Reset() { *m = ExportStorage_Azure{} } func (m *ExportStorage_Azure) String() string { return proto.CompactTextString(m) } func (*ExportStorage_Azure) ProtoMessage() {} func (*ExportStorage_Azure) Descriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{67, 4} + return fileDescriptor_api_99a1f43a94ccaa24, []int{67, 4} } func (m *ExportStorage_Azure) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3451,7 +3457,7 @@ func (m *ExportStorage_Workload) Reset() { *m = ExportStorage_Workload{} func (m *ExportStorage_Workload) String() string { return proto.CompactTextString(m) } func (*ExportStorage_Workload) ProtoMessage() {} func (*ExportStorage_Workload) Descriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{67, 5} + return fileDescriptor_api_99a1f43a94ccaa24, []int{67, 5} } func (m *ExportStorage_Workload) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3493,7 +3499,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_0624836d76b24d58, []int{68} + return fileDescriptor_api_99a1f43a94ccaa24, []int{68} } func (m *WriteBatchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3529,7 +3535,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_0624836d76b24d58, []int{69} + return fileDescriptor_api_99a1f43a94ccaa24, []int{69} } func (m *WriteBatchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3576,7 +3582,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_0624836d76b24d58, []int{70} + return fileDescriptor_api_99a1f43a94ccaa24, []int{70} } func (m *ExportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3614,7 +3620,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_0624836d76b24d58, []int{71} + return fileDescriptor_api_99a1f43a94ccaa24, []int{71} } func (m *BulkOpSummary) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3652,7 +3658,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_0624836d76b24d58, []int{72} + return fileDescriptor_api_99a1f43a94ccaa24, []int{72} } func (m *ExportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3693,7 +3699,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_0624836d76b24d58, []int{72, 0} + return fileDescriptor_api_99a1f43a94ccaa24, []int{72, 0} } func (m *ExportResponse_File) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3745,7 +3751,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_0624836d76b24d58, []int{73} + return fileDescriptor_api_99a1f43a94ccaa24, []int{73} } func (m *ImportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3782,7 +3788,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_0624836d76b24d58, []int{73, 0} + return fileDescriptor_api_99a1f43a94ccaa24, []int{73, 0} } func (m *ImportRequest_File) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3820,7 +3826,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_0624836d76b24d58, []int{73, 1} + return fileDescriptor_api_99a1f43a94ccaa24, []int{73, 1} } func (m *ImportRequest_TableRekey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3857,7 +3863,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_0624836d76b24d58, []int{74} + return fileDescriptor_api_99a1f43a94ccaa24, []int{74} } func (m *ImportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3897,7 +3903,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_0624836d76b24d58, []int{75} + return fileDescriptor_api_99a1f43a94ccaa24, []int{75} } func (m *AdminScatterRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3934,7 +3940,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_0624836d76b24d58, []int{76} + return fileDescriptor_api_99a1f43a94ccaa24, []int{76} } func (m *AdminScatterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3969,7 +3975,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_0624836d76b24d58, []int{76, 0} + return fileDescriptor_api_99a1f43a94ccaa24, []int{76, 0} } func (m *AdminScatterResponse_Range) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4007,7 +4013,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_0624836d76b24d58, []int{77} + return fileDescriptor_api_99a1f43a94ccaa24, []int{77} } func (m *AddSSTableRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4043,7 +4049,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_0624836d76b24d58, []int{78} + return fileDescriptor_api_99a1f43a94ccaa24, []int{78} } func (m *AddSSTableResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4089,7 +4095,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_0624836d76b24d58, []int{79} + return fileDescriptor_api_99a1f43a94ccaa24, []int{79} } func (m *RefreshRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4125,7 +4131,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_0624836d76b24d58, []int{80} + return fileDescriptor_api_99a1f43a94ccaa24, []int{80} } func (m *RefreshResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4167,7 +4173,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_0624836d76b24d58, []int{81} + return fileDescriptor_api_99a1f43a94ccaa24, []int{81} } func (m *RefreshRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4203,7 +4209,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_0624836d76b24d58, []int{82} + return fileDescriptor_api_99a1f43a94ccaa24, []int{82} } func (m *RefreshRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4251,7 +4257,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_0624836d76b24d58, []int{83} + return fileDescriptor_api_99a1f43a94ccaa24, []int{83} } func (m *SubsumeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4298,7 +4304,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_0624836d76b24d58, []int{84} + return fileDescriptor_api_99a1f43a94ccaa24, []int{84} } func (m *SubsumeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4335,7 +4341,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_0624836d76b24d58, []int{85} + return fileDescriptor_api_99a1f43a94ccaa24, []int{85} } func (m *RangeStatsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4376,7 +4382,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_0624836d76b24d58, []int{86} + return fileDescriptor_api_99a1f43a94ccaa24, []int{86} } func (m *RangeStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4458,7 +4464,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_0624836d76b24d58, []int{87} + return fileDescriptor_api_99a1f43a94ccaa24, []int{87} } func (m *RequestUnion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5817,7 +5823,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_0624836d76b24d58, []int{88} + return fileDescriptor_api_99a1f43a94ccaa24, []int{88} } func (m *ResponseUnion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7166,7 +7172,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_0624836d76b24d58, []int{89} + return fileDescriptor_api_99a1f43a94ccaa24, []int{89} } func (m *Header) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7204,7 +7210,7 @@ type BatchRequest struct { func (m *BatchRequest) Reset() { *m = BatchRequest{} } func (*BatchRequest) ProtoMessage() {} func (*BatchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{90} + return fileDescriptor_api_99a1f43a94ccaa24, []int{90} } func (m *BatchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7243,7 +7249,7 @@ type BatchResponse struct { func (m *BatchResponse) Reset() { *m = BatchResponse{} } func (*BatchResponse) ProtoMessage() {} func (*BatchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_0624836d76b24d58, []int{91} + return fileDescriptor_api_99a1f43a94ccaa24, []int{91} } func (m *BatchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7304,7 +7310,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_0624836d76b24d58, []int{91, 0} + return fileDescriptor_api_99a1f43a94ccaa24, []int{91, 0} } func (m *BatchResponse_Header) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7342,7 +7348,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_0624836d76b24d58, []int{92} + return fileDescriptor_api_99a1f43a94ccaa24, []int{92} } func (m *RangeFeedRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7380,7 +7386,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_0624836d76b24d58, []int{93} + return fileDescriptor_api_99a1f43a94ccaa24, []int{93} } func (m *RangeFeedValue) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7420,7 +7426,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_0624836d76b24d58, []int{94} + return fileDescriptor_api_99a1f43a94ccaa24, []int{94} } func (m *RangeFeedCheckpoint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7459,7 +7465,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_0624836d76b24d58, []int{95} + return fileDescriptor_api_99a1f43a94ccaa24, []int{95} } func (m *RangeFeedError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7498,7 +7504,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_0624836d76b24d58, []int{96} + return fileDescriptor_api_99a1f43a94ccaa24, []int{96} } func (m *RangeFeedEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8379,6 +8385,9 @@ func (this *PushTxnRequest) Equal(that interface{}) bool { if !this.PushTo.Equal(&that1.PushTo) { return false } + if this.InclusivePushTo != that1.InclusivePushTo { + return false + } if !this.Now.Equal(&that1.Now) { return false } @@ -11185,6 +11194,16 @@ func (m *PushTxnRequest) MarshalTo(dAtA []byte) (int, error) { } i++ } + if m.InclusivePushTo { + dAtA[i] = 0x48 + i++ + if m.InclusivePushTo { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } return i, nil } @@ -15616,6 +15635,9 @@ func (m *PushTxnRequest) Size() (n int) { if m.Force { n += 2 } + if m.InclusivePushTo { + n += 2 + } return n } @@ -23046,6 +23068,26 @@ func (m *PushTxnRequest) Unmarshal(dAtA []byte) error { } } m.Force = bool(v != 0) + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field InclusivePushTo", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.InclusivePushTo = bool(v != 0) default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -33544,17 +33586,17 @@ var ( ErrIntOverflowApi = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("roachpb/api.proto", fileDescriptor_api_0624836d76b24d58) } +func init() { proto.RegisterFile("roachpb/api.proto", fileDescriptor_api_99a1f43a94ccaa24) } -var fileDescriptor_api_0624836d76b24d58 = []byte{ - // 6211 bytes of a gzipped FileDescriptorProto +var fileDescriptor_api_99a1f43a94ccaa24 = []byte{ + // 6233 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3d, 0x4b, 0x6c, 0x23, 0xc9, 0x75, 0x6a, 0x92, 0x92, 0xc8, 0x47, 0x91, 0x6a, 0x95, 0xe6, 0xc3, 0xd1, 0xcc, 0x8e, 0x34, 0x9c, 0xef, 0xce, 0xee, 0x6a, 0x3c, 0x33, 0xde, 0xac, 0xb3, 0x6b, 0xaf, 0x2d, 0x52, 0x9a, 0x21, 0x47, 0xa3, 0xcf, 0x16, 0xa9, 0x59, 0xcf, 0x3a, 0x9b, 0x76, 0xab, 0xbb, 0x44, 0xb5, 0x87, 0xec, 0xe6, 0x76, 0x37, 0x47, 0xd2, 0x00, 0x41, 0x02, 0xe7, 0xe0, 0xc0, 0x30, 0x8c, 0x20, 0x09, 0x82, 0xc0, - 0xf9, 0x19, 0xf0, 0x21, 0x40, 0x82, 0x18, 0x31, 0x60, 0x20, 0x40, 0x80, 0xd8, 0x97, 0x1c, 0x16, - 0x46, 0x0e, 0x4e, 0x80, 0x04, 0x41, 0x0e, 0x42, 0xa2, 0x1c, 0x6c, 0xe4, 0x92, 0x43, 0x0e, 0x01, + 0xf9, 0x19, 0xf0, 0x21, 0x40, 0x82, 0x18, 0x31, 0x60, 0x20, 0x40, 0x80, 0xc4, 0x97, 0x1c, 0x16, + 0x46, 0x0e, 0x4e, 0x80, 0x04, 0x41, 0x0e, 0x42, 0xa2, 0x1c, 0x6c, 0xf8, 0x92, 0x43, 0x0e, 0x01, 0xf6, 0x10, 0x04, 0xf5, 0xe9, 0x0f, 0xc9, 0xe6, 0x67, 0x66, 0x7b, 0x91, 0x0d, 0x72, 0x12, 0xeb, 0x55, 0xbd, 0xd7, 0x55, 0xef, 0xbd, 0x7a, 0xf5, 0x5e, 0xd5, 0xab, 0x12, 0xcc, 0xd9, 0x96, 0xaa, 0xed, 0xb7, 0x77, 0x6f, 0xa9, 0x6d, 0x63, 0xb9, 0x6d, 0x5b, 0xae, 0x85, 0xe6, 0x34, 0x4b, 0x7b, @@ -33573,7 +33615,7 @@ var fileDescriptor_api_0624836d76b24d58 = []byte{ 0x37, 0x66, 0x4a, 0xd3, 0x1f, 0x1d, 0x2f, 0x26, 0xd7, 0xc9, 0x11, 0xa6, 0x30, 0xb4, 0x04, 0xd3, 0xc4, 0xd4, 0x15, 0x5a, 0x9d, 0xea, 0xae, 0x9e, 0x22, 0xa6, 0xbe, 0x4e, 0x8e, 0xd0, 0x02, 0xa4, 0x1d, 0x4a, 0xcd, 0xd4, 0x48, 0x61, 0x72, 0x49, 0xba, 0x31, 0x89, 0xfd, 0xf2, 0x9b, 0xa9, 0x9f, - 0x7f, 0x77, 0x51, 0x7a, 0x90, 0x4a, 0x4b, 0x72, 0xe2, 0x41, 0x2a, 0x9d, 0x90, 0x93, 0xc5, 0x6f, + 0x7d, 0x77, 0x51, 0x7a, 0x90, 0x4a, 0x4b, 0x72, 0xe2, 0x41, 0x2a, 0x9d, 0x90, 0x93, 0xc5, 0x6f, 0x25, 0x21, 0x8f, 0x89, 0xd3, 0xb6, 0x4c, 0x87, 0x88, 0xaf, 0x7f, 0x06, 0x92, 0xee, 0xa1, 0xc9, 0xbe, 0x9e, 0xbd, 0x73, 0x31, 0x62, 0x08, 0x75, 0x5b, 0x35, 0x1d, 0x55, 0x73, 0x0d, 0xcb, 0xc4, 0xb4, 0x29, 0xfa, 0x1c, 0x64, 0x6d, 0xe2, 0x74, 0x5a, 0x84, 0x31, 0x9b, 0x75, 0x2c, 0x7b, 0xe7, @@ -33588,7 +33630,7 @@ var fileDescriptor_api_0624836d76b24d58 = []byte{ 0xce, 0xc1, 0x69, 0x01, 0xc5, 0x2b, 0x9b, 0xf7, 0xd7, 0x94, 0xd2, 0xd6, 0xce, 0xe6, 0xea, 0x0a, 0x7e, 0x2c, 0x27, 0x16, 0x52, 0xbf, 0xf1, 0xbd, 0x8b, 0x13, 0xc5, 0x47, 0x00, 0xf7, 0x89, 0x2b, 0xb4, 0x01, 0x95, 0x60, 0x6a, 0x9f, 0xf5, 0x46, 0xa8, 0xe3, 0x52, 0x64, 0xb7, 0x43, 0x9a, 0x53, - 0x4a, 0x53, 0x0e, 0xfc, 0xf4, 0x78, 0x51, 0xc2, 0x02, 0x93, 0x8b, 0xbc, 0xf8, 0x63, 0x09, 0xb2, + 0x4a, 0x53, 0x0e, 0xfc, 0xe4, 0x78, 0x51, 0xc2, 0x02, 0x93, 0x8b, 0xbc, 0xf8, 0x23, 0x09, 0xb2, 0x8c, 0x30, 0x1f, 0x23, 0x2a, 0xf7, 0x50, 0xbe, 0x34, 0x92, 0x21, 0xfd, 0xa4, 0xd1, 0x32, 0x4c, 0x3e, 0x55, 0x9b, 0x9d, 0x61, 0xda, 0xfe, 0x88, 0xd6, 0x63, 0xde, 0x0c, 0xbd, 0x05, 0x33, 0x86, 0xe9, 0x12, 0xd3, 0x55, 0x38, 0x5a, 0x72, 0x04, 0x5a, 0x96, 0xb7, 0x66, 0x85, 0xe2, 0x5f, 0x49, @@ -33599,7 +33641,7 @@ var fileDescriptor_api_0624836d76b24d58 = []byte{ 0x87, 0x0c, 0x39, 0x6c, 0x8f, 0x29, 0xde, 0x34, 0x39, 0x6c, 0xb3, 0x5f, 0xd1, 0xac, 0x43, 0x9f, 0x85, 0xb3, 0x6a, 0xb3, 0x69, 0x1d, 0x28, 0xc6, 0x9e, 0xa2, 0x5b, 0xc4, 0x51, 0x4c, 0xcb, 0x55, 0xc8, 0xa1, 0xe1, 0xb8, 0xcc, 0x54, 0xa4, 0xf1, 0x3c, 0xab, 0xae, 0xee, 0xad, 0x5a, 0xc4, 0xd9, - 0xb4, 0xdc, 0x35, 0x5a, 0x25, 0x18, 0xfe, 0x3e, 0x9c, 0xe9, 0xe5, 0x4d, 0x9c, 0xbc, 0xff, 0x7b, + 0xb4, 0xdc, 0x35, 0x5a, 0x25, 0x18, 0xfe, 0x3e, 0x9c, 0xe9, 0xe5, 0x4d, 0x9c, 0xbc, 0xff, 0x07, 0x09, 0xf2, 0x55, 0xd3, 0x70, 0x3f, 0x15, 0x4c, 0xf7, 0xb9, 0x97, 0x0c, 0x73, 0xef, 0x26, 0xc8, 0x7b, 0xaa, 0xd1, 0xdc, 0x32, 0xeb, 0x56, 0x6b, 0xd7, 0x71, 0x2d, 0x93, 0x38, 0x82, 0xbd, 0x7d, 0x70, 0xc1, 0xb3, 0x47, 0x30, 0xeb, 0x8f, 0x29, 0x4e, 0x66, 0x3d, 0x03, 0xb9, 0x6a, 0x6a, 0x36, @@ -33632,7 +33674,7 @@ var fileDescriptor_api_0624836d76b24d58 = []byte{ 0x15, 0x9d, 0x34, 0x5d, 0x55, 0x38, 0x73, 0xb7, 0x43, 0x94, 0xc4, 0x3e, 0xc7, 0x32, 0xdf, 0xe0, 0x58, 0xf6, 0xf6, 0x39, 0x96, 0x37, 0x1e, 0x95, 0xcb, 0xac, 0x3f, 0xab, 0x14, 0xd1, 0x53, 0x21, 0x46, 0x8b, 0x41, 0x8a, 0x1a, 0x9c, 0x2d, 0x91, 0x86, 0x61, 0x86, 0x23, 0xf0, 0xd8, 0x97, 0x24, - 0x05, 0x0a, 0xfd, 0x1f, 0x89, 0x53, 0xf6, 0x7f, 0x97, 0x84, 0xd3, 0x6b, 0xa6, 0xfe, 0xc9, 0x0c, + 0x05, 0x0a, 0xfd, 0x1f, 0x89, 0x53, 0xf6, 0x7f, 0x9f, 0x84, 0xd3, 0x6b, 0xa6, 0xfe, 0xc9, 0x0c, 0x82, 0x7a, 0x13, 0x9a, 0xd5, 0x6a, 0x19, 0xae, 0x27, 0x7b, 0x5e, 0x42, 0xbf, 0x08, 0x69, 0x9d, 0xa8, 0xba, 0x1f, 0xb9, 0x65, 0xbb, 0xac, 0x54, 0xc7, 0x35, 0x9a, 0xcb, 0xfb, 0x4d, 0x6d, 0xb9, 0xee, 0xed, 0x2a, 0x61, 0xbf, 0x39, 0xfa, 0x2a, 0x9c, 0xa5, 0xf3, 0xd8, 0x36, 0xd5, 0xa6, 0xc2, @@ -33667,274 +33709,275 @@ var fileDescriptor_api_0624836d76b24d58 = []byte{ 0x8e, 0x43, 0x6e, 0x81, 0x92, 0x3b, 0x39, 0x5e, 0x44, 0xf5, 0x43, 0x93, 0x2e, 0xe4, 0xf7, 0xcb, 0x75, 0x8f, 0x00, 0x46, 0xae, 0x80, 0x69, 0x3e, 0x6c, 0xe1, 0x09, 0x4c, 0xb2, 0x51, 0x78, 0xc7, 0x4f, 0x52, 0xc4, 0xf1, 0x13, 0x1d, 0x94, 0xf7, 0x81, 0xe7, 0x51, 0x82, 0x00, 0x8b, 0xab, 0x82, - 0x50, 0x88, 0x77, 0x00, 0x28, 0x0b, 0xe3, 0x54, 0x83, 0x1f, 0x25, 0x21, 0xbf, 0xdd, 0x71, 0xf6, + 0x50, 0x88, 0x77, 0x00, 0x28, 0x0b, 0xe3, 0x54, 0x83, 0x9f, 0x27, 0x21, 0xbf, 0xdd, 0x71, 0xf6, 0x63, 0xd6, 0xfb, 0x32, 0x40, 0xbb, 0xe3, 0xec, 0x13, 0x5b, 0x71, 0x0f, 0x4d, 0x31, 0xf2, 0x11, 0x67, 0x63, 0xde, 0xd0, 0x39, 0x5e, 0xfd, 0xd0, 0x44, 0x5b, 0x82, 0x08, 0x51, 0x82, 0x03, 0xb6, 0x9b, 0x63, 0xc4, 0x05, 0xf5, 0x43, 0x73, 0x83, 0xf8, 0x01, 0x01, 0x27, 0x48, 0x28, 0xc1, 0xcf, 0xc3, 0x34, 0x2d, 0x28, 0xae, 0xf5, 0x3c, 0x1a, 0x36, 0x45, 0x71, 0xea, 0x96, 0x37, 0x97, 0x27, 0x9f, 0x6f, 0x2e, 0xa3, 0xb7, 0x20, 0xc3, 0x3f, 0x4a, 0x17, 0x99, 0x29, 0xb6, 0xc8, 0x44, 0x71, 0x42, 0x08, 0x81, 0x2d, 0x2f, 0x69, 0xf6, 0x45, 0xba, 0xb8, 0x9c, 0x82, 0xc9, 0x3d, 0xcb, 0xd6, - 0x08, 0x3b, 0x88, 0x4b, 0x63, 0x5e, 0xf0, 0x3d, 0xc9, 0xb4, 0x9c, 0x29, 0xfe, 0xbe, 0x04, 0xb3, - 0xbe, 0x00, 0xe3, 0x74, 0x21, 0xcb, 0x5d, 0xdc, 0x7f, 0x7e, 0x11, 0x52, 0x8e, 0x17, 0xbf, 0x9f, - 0x80, 0xd9, 0x77, 0x3a, 0xc4, 0x3e, 0x8a, 0x59, 0xbf, 0x4a, 0xfc, 0xd0, 0x35, 0xf1, 0x82, 0x3a, - 0xc1, 0x8e, 0x61, 0xaf, 0xc1, 0xec, 0x81, 0x6a, 0xb8, 0xca, 0x9e, 0x65, 0x2b, 0x9d, 0xb6, 0xae, - 0xba, 0xde, 0x11, 0x55, 0x8e, 0x82, 0xef, 0x59, 0xf6, 0x0e, 0x03, 0x22, 0x02, 0xe8, 0x89, 0x69, - 0x1d, 0x98, 0x0a, 0x05, 0x1b, 0x66, 0x83, 0xf2, 0x43, 0xec, 0x45, 0x94, 0xde, 0xf8, 0xe7, 0xe3, - 0xc5, 0xbb, 0x0d, 0xc3, 0xdd, 0xef, 0xec, 0x2e, 0x6b, 0x56, 0xeb, 0x96, 0xdf, 0x11, 0x7d, 0x37, - 0xf8, 0x7d, 0xab, 0xfd, 0xa4, 0x71, 0x8b, 0x9d, 0xb6, 0x77, 0x3a, 0x86, 0xbe, 0xbc, 0xb3, 0x53, - 0x5d, 0xc5, 0x32, 0x23, 0xf9, 0x2e, 0xa7, 0x58, 0x3f, 0x34, 0xbd, 0xf5, 0xee, 0x23, 0x09, 0xe4, - 0x80, 0x61, 0x71, 0xca, 0x73, 0x0d, 0xb2, 0x1f, 0x74, 0x88, 0x6d, 0x10, 0xfd, 0xb9, 0x05, 0x0a, - 0x02, 0x91, 0xce, 0xa1, 0xf7, 0x60, 0xa6, 0x8b, 0x0f, 0xc9, 0x8f, 0xc7, 0x87, 0xec, 0x41, 0xc0, - 0x82, 0xe2, 0x8f, 0x12, 0x80, 0xd8, 0xe0, 0xab, 0x7c, 0x1b, 0xe8, 0x53, 0xa6, 0x30, 0x8f, 0x00, - 0x8c, 0x3d, 0xa5, 0x65, 0x38, 0x8e, 0x61, 0x36, 0x98, 0xae, 0xe4, 0xef, 0xbc, 0x11, 0xd1, 0x97, - 0xfe, 0x21, 0x2c, 0x57, 0xf7, 0x36, 0x38, 0x5a, 0x89, 0xec, 0xab, 0x4f, 0x0d, 0xcb, 0xc6, 0x19, - 0xc3, 0x03, 0x15, 0x4b, 0x30, 0xd7, 0x57, 0x8f, 0xf2, 0x00, 0xab, 0x5b, 0xca, 0xe6, 0x56, 0xbd, - 0x52, 0xdd, 0xbc, 0x2f, 0x4f, 0x20, 0x19, 0x66, 0xf0, 0x5a, 0x7d, 0x07, 0x6f, 0x2a, 0x6b, 0x18, - 0x6f, 0x61, 0x59, 0x42, 0x59, 0x98, 0xde, 0xc6, 0x6b, 0x8f, 0xd6, 0x36, 0xeb, 0x72, 0x42, 0x68, - 0xcf, 0xaf, 0xc0, 0x7c, 0xd7, 0xc7, 0xe3, 0xd4, 0x9f, 0x4b, 0x30, 0xb3, 0x67, 0x75, 0x4c, 0x5d, - 0xe1, 0x61, 0xb4, 0xd8, 0x2e, 0xc8, 0x32, 0x18, 0xff, 0x5e, 0xf1, 0x1b, 0x09, 0x38, 0x85, 0x89, - 0x63, 0x35, 0x9f, 0x92, 0xf8, 0x25, 0xb8, 0x05, 0x62, 0x77, 0x50, 0xf9, 0x38, 0x82, 0xcc, 0x70, - 0x1a, 0x7c, 0x35, 0x98, 0x72, 0x5c, 0xd5, 0xed, 0x38, 0x42, 0x94, 0x57, 0x86, 0xcf, 0x85, 0x1a, - 0x6b, 0x8b, 0x05, 0x4e, 0x28, 0xca, 0x4f, 0xf5, 0x47, 0xf9, 0xc5, 0x5f, 0x82, 0xd3, 0x3d, 0x8c, - 0x88, 0x73, 0xd1, 0xfe, 0xc7, 0x04, 0x9c, 0xeb, 0x26, 0x1f, 0xb7, 0x0b, 0xff, 0x7f, 0x83, 0xd9, - 0xa8, 0x02, 0xb9, 0x96, 0x61, 0x2a, 0x81, 0x8f, 0xf5, 0x1c, 0x8b, 0xf3, 0x0c, 0x0d, 0x60, 0xbb, - 0xdd, 0x2c, 0x1a, 0x6d, 0x44, 0xf1, 0x35, 0x4e, 0xd9, 0x7d, 0x5b, 0x82, 0x99, 0xb8, 0xb7, 0x1f, - 0x5e, 0xec, 0x24, 0x5c, 0x8c, 0xb9, 0x0e, 0xb9, 0x4f, 0x60, 0xbf, 0xe2, 0x4f, 0x24, 0x40, 0x75, - 0xbb, 0x63, 0xd2, 0x98, 0xed, 0xa1, 0xd5, 0x88, 0x73, 0xb0, 0xa7, 0x60, 0xd2, 0x30, 0x75, 0x72, - 0xc8, 0x06, 0x9b, 0xc2, 0xbc, 0x80, 0x6e, 0x43, 0x5a, 0xe4, 0x3f, 0xf1, 0x93, 0xfd, 0x64, 0xe9, - 0xcc, 0xc9, 0xf1, 0xe2, 0x34, 0xcf, 0x76, 0x5a, 0xfd, 0x28, 0xf8, 0x89, 0xa7, 0x79, 0xc2, 0x93, - 0x97, 0x6c, 0xf2, 0x1e, 0xcc, 0x77, 0x75, 0x34, 0x4e, 0x2e, 0x7c, 0x3f, 0x01, 0xf3, 0x62, 0x38, - 0xb1, 0xef, 0xd7, 0xbc, 0x50, 0xf2, 0x1c, 0xfa, 0x02, 0x40, 0xdb, 0x26, 0x4f, 0x15, 0x8e, 0x9a, - 0x1c, 0x0b, 0x35, 0x43, 0x31, 0x18, 0x00, 0x7d, 0x19, 0x66, 0xe9, 0x84, 0x6b, 0xdb, 0x56, 0xdb, - 0x72, 0xa8, 0x27, 0xe1, 0x8c, 0xe7, 0x49, 0xcf, 0x9d, 0x1c, 0x2f, 0xe6, 0x36, 0x0c, 0x73, 0x5b, - 0x20, 0xd6, 0x6b, 0x98, 0xce, 0x5c, 0xbf, 0xe8, 0xb9, 0x3f, 0xff, 0x20, 0xc1, 0xa9, 0x4f, 0x6c, - 0x87, 0xeb, 0x7f, 0x83, 0x63, 0xfe, 0x7a, 0x20, 0xb3, 0x62, 0xd5, 0xdc, 0xb3, 0xe2, 0xdf, 0x77, - 0xfc, 0xb6, 0x04, 0x73, 0x21, 0xf2, 0x71, 0xae, 0xfa, 0x2f, 0x96, 0xa2, 0xf9, 0x15, 0xea, 0x07, - 0x84, 0xd5, 0x3e, 0xce, 0x49, 0xf5, 0x47, 0x12, 0x9c, 0x29, 0xf3, 0xd3, 0x28, 0x76, 0xe8, 0xe6, - 0x74, 0x5a, 0x71, 0x6a, 0x49, 0x01, 0xa6, 0x9f, 0x12, 0xdb, 0x31, 0x2c, 0xbe, 0xee, 0xe5, 0xb0, - 0x57, 0x64, 0xa9, 0xa2, 0xa6, 0xda, 0x76, 0xf6, 0x2d, 0x6f, 0x33, 0xdd, 0x2f, 0xfb, 0x21, 0x59, - 0x52, 0x4e, 0x15, 0x7f, 0x22, 0xc1, 0xd9, 0xbe, 0x0e, 0xc6, 0x29, 0x94, 0xaf, 0x41, 0x56, 0x13, - 0x84, 0xa9, 0xb9, 0xe3, 0xfb, 0xe9, 0x55, 0xda, 0xec, 0x05, 0xdd, 0xf0, 0x93, 0xe3, 0x45, 0xf0, - 0xba, 0x5a, 0x5d, 0xc5, 0xe0, 0x51, 0xaf, 0xea, 0xc5, 0x9f, 0x01, 0xe4, 0xd6, 0x0e, 0xdb, 0x96, - 0xed, 0xd6, 0xf8, 0x9a, 0x8f, 0x56, 0x21, 0xdd, 0xb6, 0xad, 0xa7, 0x86, 0x37, 0x88, 0x7c, 0xe4, - 0x79, 0x4e, 0x17, 0xce, 0xb6, 0x68, 0x8f, 0x7d, 0x4c, 0x84, 0x21, 0xf3, 0xd0, 0xd2, 0xd4, 0xe6, - 0x3d, 0xa3, 0xe9, 0x29, 0xd7, 0xf2, 0x28, 0x32, 0xcb, 0x3e, 0xc6, 0xb6, 0xea, 0xee, 0x7b, 0x73, - 0xcd, 0x07, 0xa2, 0xfb, 0x90, 0xae, 0xb8, 0x6e, 0x9b, 0x56, 0x8a, 0x89, 0x7a, 0x75, 0x24, 0x49, - 0x8a, 0x20, 0x28, 0xf9, 0xc8, 0x08, 0xc3, 0xdc, 0x7d, 0xcb, 0x6a, 0x34, 0x49, 0xb9, 0x69, 0x75, - 0xf4, 0xb2, 0x65, 0xee, 0x19, 0x0d, 0x61, 0xe8, 0xae, 0x8c, 0xa4, 0x78, 0xbf, 0x5c, 0xc3, 0xfd, - 0xe8, 0xe8, 0x8b, 0x90, 0xae, 0xdd, 0x15, 0xa4, 0xb8, 0x9b, 0x72, 0x79, 0x24, 0xa9, 0xda, 0x5d, - 0xec, 0x23, 0xa1, 0x0a, 0x64, 0x57, 0x9e, 0x75, 0x6c, 0x22, 0x68, 0x4c, 0x31, 0x1a, 0xd7, 0x46, - 0xd2, 0x60, 0x38, 0x38, 0x8c, 0x8a, 0xde, 0x81, 0xfc, 0xbb, 0x96, 0xfd, 0xa4, 0x69, 0xa9, 0xde, - 0xd8, 0xa6, 0x19, 0xb1, 0x97, 0x47, 0x12, 0xf3, 0xd0, 0x70, 0x0f, 0x81, 0x85, 0x2f, 0x43, 0xae, - 0x4b, 0x38, 0x08, 0x41, 0xaa, 0x4d, 0xe5, 0x40, 0x35, 0x24, 0x83, 0xd9, 0x6f, 0xf4, 0x1a, 0x4c, - 0x9b, 0x96, 0x4e, 0x3c, 0x9d, 0xcd, 0x95, 0x4e, 0x9d, 0x1c, 0x2f, 0x4e, 0x6d, 0x5a, 0x3a, 0x5f, - 0xa1, 0xc5, 0x2f, 0x3c, 0x45, 0x1b, 0x79, 0xeb, 0xf3, 0xc2, 0x35, 0x48, 0x51, 0xb9, 0xd0, 0x79, - 0xb9, 0xab, 0x3a, 0x64, 0xc7, 0x36, 0x04, 0x4d, 0xaf, 0x28, 0xda, 0xfd, 0x8d, 0x04, 0x89, 0xda, - 0x5d, 0xea, 0x2a, 0xee, 0x76, 0xb4, 0x27, 0xc4, 0x15, 0xad, 0x44, 0x89, 0xb9, 0x90, 0x36, 0xd9, - 0x33, 0xb8, 0xdb, 0x90, 0xc1, 0xa2, 0x84, 0x5e, 0x02, 0x50, 0x35, 0x8d, 0x38, 0x8e, 0xe2, 0xe5, - 0x90, 0x67, 0x70, 0x86, 0x43, 0xd6, 0xc9, 0x11, 0x45, 0x73, 0x88, 0x66, 0x13, 0x3e, 0xe3, 0x33, - 0x58, 0x94, 0x28, 0x9a, 0x4b, 0x5a, 0x6d, 0xc5, 0xb5, 0x9e, 0x10, 0x93, 0xc9, 0x33, 0x83, 0x33, - 0x14, 0x52, 0xa7, 0x00, 0x6a, 0x2a, 0x88, 0xa9, 0xb7, 0x2d, 0xc3, 0x74, 0x99, 0xa0, 0x32, 0xd8, - 0x2f, 0x53, 0x92, 0x36, 0x69, 0x18, 0x22, 0xbb, 0x3a, 0x83, 0x45, 0x49, 0x0c, 0xe3, 0x3b, 0x12, - 0x24, 0xef, 0x97, 0x6b, 0xcf, 0x3d, 0x0e, 0x04, 0x29, 0xb5, 0x23, 0xf4, 0x3e, 0x83, 0xd9, 0x6f, - 0x96, 0x42, 0x61, 0x34, 0x9b, 0x34, 0x56, 0x6f, 0xdb, 0xd6, 0xd7, 0x88, 0xe6, 0x8d, 0x22, 0x2f, - 0xc0, 0xdb, 0x1c, 0x8a, 0x96, 0x20, 0xab, 0xd9, 0x44, 0x27, 0xa6, 0x6b, 0xa8, 0x4d, 0x47, 0x0c, - 0x27, 0x0c, 0x12, 0x9d, 0xfb, 0x86, 0x04, 0x93, 0x4c, 0x91, 0xd0, 0x05, 0xc8, 0x68, 0x96, 0xe9, - 0xaa, 0x86, 0x29, 0xac, 0x40, 0x06, 0x07, 0x80, 0x81, 0x9d, 0xbc, 0x04, 0x33, 0xaa, 0xa6, 0x59, - 0x1d, 0xd3, 0x55, 0x4c, 0xb5, 0x45, 0x44, 0x67, 0xb3, 0x02, 0xb6, 0xa9, 0xb6, 0x08, 0x5a, 0x04, - 0xaf, 0xe8, 0x67, 0xed, 0x67, 0x30, 0x08, 0x90, 0x7f, 0x48, 0xb8, 0xf0, 0x13, 0x09, 0xd2, 0x9e, - 0x0a, 0xd2, 0xce, 0x34, 0x88, 0x49, 0x6c, 0xd5, 0xb5, 0xfc, 0xce, 0xf8, 0x80, 0x5e, 0x83, 0x9e, - 0x09, 0x0c, 0xfa, 0x29, 0x98, 0x74, 0xd5, 0xdd, 0xa6, 0xd7, 0x0f, 0x5e, 0x60, 0x7b, 0x6e, 0x4d, - 0xb5, 0xc1, 0xb7, 0x78, 0x32, 0x98, 0x17, 0xe8, 0x90, 0x44, 0xce, 0x0e, 0xe7, 0x8e, 0x28, 0xd1, - 0xfe, 0xf2, 0x34, 0x95, 0x5d, 0xd2, 0x30, 0x4c, 0x26, 0xec, 0x24, 0x06, 0x06, 0x62, 0x69, 0x01, - 0xe8, 0x3c, 0x64, 0x78, 0x03, 0x62, 0xea, 0x4c, 0xe2, 0x49, 0x9c, 0x66, 0x80, 0x35, 0x2f, 0xdf, - 0x59, 0xac, 0xe2, 0x7f, 0x2e, 0xc1, 0xdc, 0xbb, 0xb6, 0xe1, 0x92, 0x12, 0xcf, 0x6f, 0x89, 0x6f, - 0x49, 0x7b, 0x13, 0x32, 0xba, 0xea, 0xaa, 0xfc, 0xba, 0x41, 0x62, 0xe8, 0x75, 0x03, 0xcf, 0x14, - 0xd2, 0xf6, 0xec, 0xca, 0x01, 0x82, 0x14, 0xfd, 0xcd, 0x6f, 0x57, 0x60, 0xf6, 0x3b, 0x38, 0xed, - 0x0c, 0x77, 0x37, 0xce, 0x25, 0xfe, 0xeb, 0x49, 0x6f, 0xd1, 0x89, 0x93, 0x0d, 0x5f, 0x82, 0x69, - 0x11, 0xb7, 0x0a, 0x26, 0x2c, 0x8d, 0xb2, 0x77, 0xde, 0x99, 0x94, 0x40, 0x43, 0x25, 0x00, 0xc7, - 0x55, 0x6d, 0x97, 0x45, 0x9c, 0x63, 0xa5, 0x45, 0x78, 0x8b, 0x14, 0x43, 0xa3, 0x50, 0xb4, 0x09, - 0xd9, 0xd6, 0x53, 0x4d, 0x53, 0xf6, 0x8c, 0xa6, 0x2b, 0x32, 0x22, 0xa2, 0x33, 0xc0, 0x36, 0x1e, - 0x95, 0xcb, 0xf7, 0x58, 0x23, 0x9e, 0x98, 0x10, 0x94, 0x31, 0x50, 0x0a, 0xfc, 0x37, 0x7a, 0x15, - 0x44, 0x72, 0xa8, 0xe2, 0x78, 0xa9, 0xde, 0xa5, 0xdc, 0xc9, 0xf1, 0x62, 0x06, 0x33, 0x68, 0xad, - 0x56, 0xc7, 0x19, 0xde, 0xa0, 0xe6, 0xb8, 0xe8, 0x32, 0xe4, 0xac, 0x96, 0xe1, 0x2a, 0xde, 0x0a, - 0xcf, 0x33, 0x1f, 0xf0, 0x0c, 0x05, 0x7a, 0x1e, 0x80, 0x90, 0xef, 0xb7, 0x24, 0xc8, 0x95, 0x3a, - 0xcd, 0x27, 0x5b, 0xed, 0x5a, 0xa7, 0xd5, 0x52, 0xed, 0x23, 0xaa, 0xca, 0x5c, 0x8f, 0x8c, 0x67, - 0x84, 0xc9, 0x21, 0x29, 0x14, 0xc5, 0x78, 0x46, 0xa8, 0xa2, 0x88, 0x54, 0x31, 0x0a, 0xe7, 0x79, - 0x60, 0x97, 0x21, 0xc7, 0xa2, 0x33, 0x85, 0x98, 0xae, 0x6d, 0x10, 0x1e, 0xfc, 0x27, 0xf1, 0x0c, - 0x03, 0xae, 0x71, 0x18, 0xba, 0x0a, 0x79, 0xe7, 0xc8, 0x71, 0x49, 0x4b, 0xe1, 0x97, 0x90, 0x78, - 0x48, 0x91, 0xc4, 0x39, 0x0e, 0xc5, 0x1c, 0x58, 0xfc, 0x8b, 0x24, 0xe4, 0x3d, 0x9d, 0x88, 0xd3, - 0x99, 0x2a, 0xc1, 0xe4, 0x9e, 0xd1, 0x24, 0xde, 0x59, 0xe5, 0xe0, 0x05, 0xd5, 0xa3, 0xb4, 0x4c, - 0xd7, 0x38, 0xcf, 0xdf, 0x65, 0xa8, 0x71, 0xe8, 0xc5, 0xc2, 0x4f, 0x25, 0x48, 0x31, 0x2f, 0xe6, - 0x36, 0xa4, 0xd8, 0x44, 0x95, 0xc6, 0x99, 0xa8, 0xac, 0xa9, 0xbf, 0xd8, 0x26, 0x42, 0x8b, 0x2d, - 0x5d, 0xb9, 0xf6, 0xd5, 0xd7, 0x6f, 0xdf, 0x61, 0x3a, 0x31, 0x83, 0x45, 0x09, 0x95, 0x20, 0x4d, - 0xd8, 0x78, 0x88, 0x2e, 0x7c, 0x88, 0xa8, 0x69, 0xd0, 0x25, 0x78, 0xcf, 0x28, 0x78, 0x78, 0xe8, - 0x1c, 0x24, 0xa9, 0xb2, 0x4d, 0xf3, 0x23, 0xaf, 0x93, 0xe3, 0xc5, 0x24, 0x55, 0x33, 0x0a, 0xe3, - 0x2e, 0xf0, 0x83, 0x54, 0x3a, 0x25, 0x4f, 0x16, 0x7f, 0x98, 0x82, 0x5c, 0xb5, 0x15, 0xf7, 0x34, - 0x5e, 0xe9, 0x16, 0x58, 0x94, 0x8b, 0xd7, 0xf5, 0xd1, 0x08, 0x79, 0x75, 0x19, 0xc4, 0xe4, 0xf3, - 0x19, 0xc4, 0x2a, 0x5d, 0xbe, 0xc5, 0x0d, 0x2c, 0xfa, 0xfd, 0x57, 0x46, 0x7e, 0xbf, 0x4e, 0x97, - 0x15, 0x4c, 0x71, 0xbc, 0x13, 0x25, 0x4e, 0x00, 0xbd, 0xcd, 0xbc, 0x04, 0xae, 0x34, 0x53, 0xe3, - 0x2b, 0xcd, 0x34, 0x31, 0x75, 0xa6, 0x32, 0x87, 0x42, 0x63, 0x3e, 0x07, 0x49, 0xdd, 0x18, 0xc6, - 0xd2, 0x28, 0xa3, 0x46, 0x51, 0x46, 0x28, 0x4e, 0x2a, 0xac, 0x38, 0xe1, 0x10, 0x67, 0x61, 0x0b, - 0x20, 0x18, 0x15, 0x5a, 0x82, 0x29, 0xab, 0xa9, 0x53, 0xb7, 0x4e, 0x62, 0x6e, 0x5d, 0xe6, 0xe4, - 0x78, 0x71, 0x72, 0xab, 0xa9, 0x57, 0x57, 0xf1, 0xa4, 0xd5, 0xd4, 0xab, 0x3a, 0xbb, 0xb8, 0x46, - 0x0e, 0x14, 0x76, 0x57, 0x90, 0x85, 0x2b, 0x78, 0xda, 0x24, 0x07, 0xab, 0xc4, 0xd1, 0xc2, 0x4b, - 0xa0, 0x50, 0x9b, 0x3f, 0x96, 0x20, 0xef, 0x71, 0x30, 0xde, 0x99, 0x9e, 0x36, 0x5a, 0x42, 0xf3, - 0x93, 0xcf, 0xa7, 0xf9, 0x1e, 0x9e, 0x48, 0xaf, 0xff, 0xa6, 0x04, 0xf3, 0x3c, 0x47, 0x49, 0x53, - 0x5d, 0x6a, 0x90, 0x63, 0x54, 0xef, 0x97, 0x41, 0xb6, 0x55, 0x53, 0xb7, 0x5a, 0xc6, 0x33, 0xc2, - 0x37, 0x1d, 0x1c, 0xb1, 0xd7, 0x3e, 0xeb, 0xc3, 0x59, 0x54, 0xed, 0xed, 0x99, 0xfc, 0xbb, 0x04, - 0xa7, 0xba, 0x3b, 0x13, 0x27, 0xd3, 0xd6, 0x61, 0x8a, 0xed, 0x97, 0x79, 0xd3, 0xed, 0xb5, 0x08, - 0x22, 0x51, 0x5f, 0xe7, 0xf7, 0x0c, 0x7d, 0x85, 0x67, 0x24, 0x16, 0xbe, 0x04, 0x93, 0x0c, 0xfc, - 0x02, 0x36, 0x4e, 0x70, 0xfe, 0x03, 0x98, 0x5b, 0xd1, 0xf5, 0x5a, 0x4d, 0x68, 0x5f, 0x7c, 0x6c, - 0xf7, 0xfc, 0x9c, 0x44, 0x94, 0x9f, 0x13, 0xfe, 0x64, 0x9c, 0x7e, 0x4e, 0x1b, 0xf2, 0x22, 0x75, - 0x30, 0xe6, 0x0d, 0xd2, 0x03, 0xea, 0x98, 0x09, 0xb5, 0xe1, 0x85, 0xe0, 0xd6, 0x92, 0xff, 0xc5, - 0x38, 0x47, 0xd2, 0x81, 0x79, 0x8f, 0x6e, 0xdc, 0x67, 0x11, 0xc3, 0x86, 0xc3, 0x36, 0x9a, 0xc2, - 0x9f, 0x8d, 0x73, 0x4c, 0xdf, 0x93, 0x20, 0x5f, 0xeb, 0xec, 0xf2, 0xab, 0xab, 0xf1, 0x8d, 0xe7, - 0x3e, 0x40, 0x93, 0xec, 0x89, 0x6b, 0x25, 0xc2, 0x13, 0x1d, 0xff, 0xe6, 0x74, 0x86, 0xe2, 0xb2, - 0x2a, 0xc1, 0x82, 0x1f, 0x26, 0x60, 0xd6, 0xef, 0x65, 0x9c, 0x33, 0xff, 0x97, 0x81, 0xb9, 0x99, - 0x8a, 0xe3, 0xaa, 0xae, 0x23, 0x0c, 0xe6, 0xab, 0xcf, 0x93, 0x96, 0x5d, 0x9a, 0x13, 0x29, 0x35, - 0x19, 0x1f, 0x84, 0x33, 0x94, 0x24, 0xfb, 0x89, 0x96, 0x61, 0x9e, 0x99, 0x37, 0x45, 0x6d, 0xb7, - 0x9b, 0x06, 0xd1, 0x15, 0xbe, 0xab, 0x9f, 0x62, 0xbb, 0xfa, 0x73, 0xac, 0x6a, 0x85, 0xd7, 0x54, - 0xd9, 0x0e, 0xff, 0x3d, 0x98, 0xd9, 0xb3, 0x09, 0x79, 0x46, 0x14, 0xe6, 0x34, 0x3d, 0xcf, 0x59, - 0x4f, 0x96, 0x23, 0xd6, 0x28, 0x9e, 0x30, 0x24, 0xef, 0xc3, 0x1c, 0xe3, 0x62, 0xdc, 0xd9, 0xf4, - 0x42, 0x2a, 0x3f, 0x93, 0x00, 0x85, 0xe9, 0x7f, 0x72, 0x82, 0x49, 0xc4, 0x2e, 0x98, 0x57, 0x01, - 0xf1, 0x03, 0x7f, 0x47, 0x69, 0x13, 0x5b, 0x71, 0x88, 0x66, 0x89, 0xeb, 0x92, 0x12, 0x96, 0x45, - 0xcd, 0x36, 0xb1, 0x6b, 0x0c, 0x5e, 0xfc, 0xad, 0x02, 0xcc, 0x08, 0x9e, 0xec, 0x98, 0x34, 0xaa, - 0xbe, 0x0d, 0xc9, 0x86, 0xd8, 0xb6, 0xc8, 0x46, 0x06, 0x36, 0xc1, 0x95, 0xed, 0xca, 0x04, 0xa6, - 0x6d, 0x29, 0x4a, 0xbb, 0xe3, 0x46, 0x64, 0x48, 0x05, 0xd9, 0x31, 0x61, 0x94, 0x76, 0xc7, 0x45, - 0x35, 0x98, 0xd5, 0x82, 0x2b, 0xab, 0x0a, 0x45, 0x4f, 0x0e, 0x4c, 0x2e, 0x8f, 0xbc, 0xf8, 0x5b, - 0x99, 0xc0, 0x79, 0xad, 0xab, 0x02, 0x95, 0xc3, 0x77, 0x24, 0x53, 0x03, 0x37, 0xe9, 0x7a, 0xef, - 0x67, 0x56, 0x26, 0x42, 0x57, 0x29, 0xd1, 0x9b, 0x30, 0xa5, 0xb3, 0xbb, 0x77, 0x42, 0x43, 0xa3, - 0x94, 0xa8, 0xeb, 0xba, 0x63, 0x65, 0x02, 0x0b, 0x0c, 0xf4, 0x00, 0x66, 0xf8, 0x2f, 0x61, 0x1d, - 0xa6, 0x06, 0xee, 0x62, 0xf6, 0xdf, 0x3e, 0xac, 0x4c, 0xe0, 0xac, 0x1e, 0x40, 0xd1, 0x67, 0x21, - 0xe5, 0x68, 0xaa, 0x29, 0xf6, 0xf6, 0x2e, 0x0e, 0xb8, 0x63, 0x14, 0x20, 0xb3, 0xd6, 0xe8, 0x31, - 0xcc, 0xb1, 0x9d, 0x0c, 0xc5, 0x0d, 0x4e, 0x63, 0x59, 0xa2, 0x7b, 0xf7, 0x01, 0xb0, 0xef, 0x2d, - 0x45, 0xdf, 0xaf, 0xa8, 0x4c, 0x60, 0x79, 0xb7, 0xa7, 0x8a, 0x8a, 0x8c, 0xb9, 0xbb, 0x21, 0xc2, - 0x99, 0x81, 0x22, 0x8b, 0xbc, 0xf1, 0x40, 0x45, 0x46, 0xba, 0x2a, 0xd0, 0x7d, 0xc8, 0xaa, 0xd4, - 0xfd, 0x50, 0x58, 0x16, 0x79, 0x01, 0x06, 0x6e, 0xd2, 0xf6, 0x25, 0xb6, 0x57, 0xd8, 0x65, 0x11, - 0x0f, 0x18, 0x10, 0x6a, 0x11, 0xbb, 0x41, 0x0a, 0xd9, 0xe1, 0x84, 0xc2, 0x47, 0xb8, 0x3e, 0x21, - 0x06, 0x44, 0x1b, 0x90, 0xdb, 0xf7, 0xd2, 0x36, 0xd9, 0xf1, 0xf9, 0xcc, 0xc0, 0x9d, 0xda, 0x88, - 0xb4, 0xd3, 0xca, 0x04, 0x9e, 0xd9, 0x0f, 0x81, 0xd1, 0x32, 0x24, 0x1a, 0x5a, 0x21, 0xc7, 0x68, - 0x5c, 0x18, 0x96, 0x54, 0x59, 0x99, 0xc0, 0x89, 0x86, 0x46, 0x83, 0x0a, 0x9e, 0x6f, 0x76, 0x68, - 0x16, 0xf2, 0x03, 0x8d, 0x4c, 0x77, 0xce, 0x5f, 0x65, 0x02, 0xb3, 0xcc, 0x38, 0xfa, 0xbd, 0x6d, - 0xc8, 0xdb, 0xfc, 0x0c, 0xdc, 0xcb, 0xf4, 0x90, 0x19, 0x95, 0xeb, 0xd1, 0xa6, 0xaa, 0x2f, 0xd9, - 0xa3, 0x32, 0x81, 0x73, 0x76, 0x18, 0x8e, 0xbe, 0x0a, 0xa7, 0xba, 0x29, 0x0a, 0xe5, 0x9e, 0xeb, - 0xb3, 0x5c, 0xd1, 0x74, 0xbb, 0x75, 0x1c, 0xd9, 0x7d, 0x95, 0xe8, 0x0d, 0x98, 0xe4, 0x52, 0x43, - 0x8c, 0xe4, 0x62, 0xd4, 0x6e, 0x4a, 0xb7, 0xc0, 0x78, 0x7b, 0x3a, 0xdf, 0x5c, 0x71, 0xf8, 0xab, - 0x34, 0xad, 0x46, 0x61, 0x7e, 0xe0, 0x7c, 0xeb, 0x3f, 0xcc, 0xa6, 0xf3, 0xcd, 0x0d, 0xa0, 0x54, - 0xee, 0x36, 0xaf, 0x11, 0x67, 0x85, 0xa7, 0x06, 0xca, 0x3d, 0xe2, 0x4c, 0x98, 0xca, 0xdd, 0x0e, - 0x81, 0x69, 0xd7, 0x6c, 0x7e, 0xad, 0x4f, 0x61, 0xd3, 0xf8, 0xf4, 0xc0, 0xae, 0xf5, 0x5f, 0x55, - 0xa4, 0x5d, 0xb3, 0x03, 0x28, 0x7a, 0x04, 0xb2, 0xb8, 0xbf, 0x15, 0x6c, 0xfc, 0x9c, 0x19, 0xb8, - 0xe5, 0x1f, 0x7d, 0xb8, 0x56, 0x99, 0xc0, 0xb3, 0x5a, 0x77, 0x0d, 0x35, 0x16, 0x8c, 0x9e, 0xa2, - 0x05, 0x17, 0xdf, 0x0a, 0x85, 0x81, 0xc6, 0x62, 0xc0, 0x2d, 0x3d, 0x6a, 0x2c, 0xb4, 0x9e, 0x2a, - 0xaa, 0xc6, 0x86, 0x69, 0xb8, 0xcc, 0xb0, 0x2f, 0x0c, 0x54, 0xe3, 0xee, 0x57, 0x05, 0xa8, 0x1a, - 0x1b, 0x1c, 0x42, 0xd5, 0xd8, 0x15, 0x07, 0xc9, 0x42, 0x1c, 0x17, 0x06, 0xaa, 0x71, 0xd4, 0x89, - 0x33, 0x55, 0x63, 0x37, 0x0c, 0xa7, 0x6a, 0xcc, 0x0d, 0x44, 0x0f, 0xdd, 0x97, 0x06, 0xaa, 0xf1, - 0xc0, 0x0b, 0x1b, 0x54, 0x8d, 0xd5, 0xbe, 0x4a, 0xb4, 0x4a, 0x3d, 0x43, 0xea, 0x11, 0x19, 0xe6, - 0x9e, 0x55, 0xb8, 0x38, 0x70, 0xfd, 0xe9, 0x3d, 0x4a, 0xae, 0x30, 0xb7, 0x50, 0xc0, 0xa8, 0x21, - 0x63, 0x2e, 0xb2, 0xc2, 0x76, 0x99, 0x0b, 0x8b, 0x03, 0x0d, 0x59, 0xdf, 0x66, 0x33, 0x35, 0x64, - 0x07, 0x3e, 0x90, 0x2e, 0x64, 0x7c, 0xc7, 0xa7, 0xb0, 0x34, 0x62, 0x67, 0x21, 0xb4, 0x90, 0x71, - 0x0c, 0xb4, 0x02, 0x19, 0xea, 0x29, 0x1c, 0x31, 0x33, 0x74, 0x69, 0xa0, 0x8f, 0xdb, 0x93, 0x1b, - 0x5a, 0x99, 0xc0, 0xe9, 0x0f, 0x04, 0x88, 0x7e, 0x9e, 0x87, 0xdd, 0x85, 0xe2, 0xc0, 0xcf, 0x77, - 0x6d, 0xb4, 0xd0, 0xcf, 0x73, 0x0c, 0xa4, 0xc1, 0x69, 0x2e, 0x2b, 0x71, 0xc3, 0xc3, 0x16, 0x57, - 0x29, 0x0a, 0x97, 0x19, 0xa9, 0x81, 0x41, 0x6c, 0xe4, 0x6d, 0x93, 0xca, 0x04, 0x9e, 0x57, 0xfb, - 0x6b, 0xe9, 0x84, 0x17, 0x4b, 0x0f, 0x0f, 0x7d, 0x0b, 0x57, 0x06, 0x4e, 0xf8, 0x88, 0xcd, 0x02, - 0x3a, 0xe1, 0xd5, 0x10, 0x98, 0x2f, 0x40, 0xba, 0xe2, 0x38, 0xfc, 0x4c, 0xe2, 0xea, 0x90, 0x05, - 0xa8, 0x27, 0x00, 0xe6, 0x0b, 0x90, 0x5e, 0xe3, 0x98, 0x94, 0x90, 0xd6, 0x24, 0xaa, 0x2d, 0xcc, - 0xec, 0xb5, 0x81, 0x84, 0xfa, 0x6e, 0xea, 0x53, 0x42, 0x9a, 0x0f, 0xa4, 0x0b, 0xb6, 0xed, 0x5d, - 0xfc, 0x14, 0xde, 0xe6, 0xf5, 0x81, 0x0b, 0x76, 0xe4, 0xfd, 0x54, 0xba, 0x60, 0xdb, 0x5d, 0x15, - 0xe8, 0x0b, 0x30, 0x2d, 0x6e, 0xd1, 0x15, 0x6e, 0x0c, 0xf1, 0x81, 0xc3, 0x51, 0x31, 0x9d, 0xd7, - 0x02, 0x87, 0x5b, 0x59, 0x7e, 0x09, 0x8f, 0x0f, 0xef, 0xe5, 0x21, 0x56, 0xb6, 0x2f, 0x20, 0xe5, - 0x56, 0x36, 0x00, 0x53, 0x2b, 0xcb, 0xf5, 0x54, 0xac, 0x75, 0x37, 0x07, 0x5a, 0xd9, 0xfe, 0xac, - 0x4e, 0x6a, 0x65, 0x3f, 0x08, 0xa0, 0x74, 0x64, 0x0e, 0x0f, 0xc4, 0x0a, 0xaf, 0x0c, 0x1c, 0x59, - 0x77, 0x40, 0x49, 0x47, 0x26, 0x70, 0xa8, 0xd8, 0x78, 0x06, 0x13, 0xe7, 0xf4, 0xab, 0x03, 0xc5, - 0xd6, 0x17, 0xb7, 0x54, 0xbc, 0x57, 0x9c, 0x38, 0x87, 0x7d, 0x43, 0x65, 0x8b, 0x4b, 0x33, 0x82, - 0x53, 0xaf, 0x0d, 0x37, 0x54, 0x51, 0xf7, 0x81, 0x7c, 0x43, 0xd5, 0x55, 0x59, 0x9a, 0x16, 0xf9, - 0x66, 0x0f, 0x52, 0xe9, 0x59, 0x59, 0x7e, 0x90, 0x4a, 0x9f, 0x95, 0x0b, 0x0f, 0x52, 0xe9, 0x73, - 0xf2, 0xc2, 0x83, 0x54, 0xfa, 0xbc, 0x7c, 0xa1, 0xf8, 0x1f, 0x67, 0x21, 0xe7, 0xc5, 0x31, 0x3c, - 0x2a, 0xb8, 0x13, 0x8e, 0x0a, 0x2e, 0x0e, 0x8a, 0x0a, 0x44, 0xe4, 0x23, 0xc2, 0x82, 0x3b, 0xe1, - 0xb0, 0xe0, 0xe2, 0xa0, 0xb0, 0x20, 0xc0, 0xa1, 0x71, 0x41, 0x7d, 0x50, 0x5c, 0xf0, 0xf2, 0x18, - 0x71, 0x81, 0x4f, 0xaa, 0x37, 0x30, 0x58, 0xed, 0x0f, 0x0c, 0xae, 0x0c, 0x0f, 0x0c, 0x7c, 0x52, - 0xa1, 0xc8, 0xe0, 0xad, 0x9e, 0xc8, 0xe0, 0xd2, 0x90, 0xc8, 0xc0, 0xc7, 0xf7, 0x42, 0x83, 0xf5, - 0xc8, 0xd0, 0xe0, 0xda, 0xa8, 0xd0, 0xc0, 0xa7, 0xd3, 0x15, 0x1b, 0xbc, 0xde, 0x15, 0x1b, 0x2c, - 0x0e, 0x8c, 0x0d, 0x7c, 0x6c, 0x1e, 0x1c, 0xbc, 0x37, 0x38, 0x38, 0x78, 0x65, 0xac, 0xe0, 0xc0, - 0xa7, 0xd7, 0x1f, 0x1d, 0xd4, 0x07, 0x45, 0x07, 0x2f, 0x8f, 0x11, 0x1d, 0x04, 0x82, 0xeb, 0x09, - 0x0f, 0x2a, 0x51, 0xe1, 0xc1, 0xd5, 0x11, 0xe1, 0x81, 0x4f, 0x2d, 0x1c, 0x1f, 0x54, 0xa2, 0xe2, - 0x83, 0xab, 0x23, 0xe2, 0x83, 0x1e, 0x4a, 0x3c, 0x40, 0xd8, 0x8c, 0x0e, 0x10, 0xae, 0x8f, 0x0c, - 0x10, 0x7c, 0x6a, 0xdd, 0x11, 0xc2, 0xad, 0x50, 0x84, 0xf0, 0xd2, 0x80, 0x08, 0xc1, 0x47, 0xa5, - 0x21, 0xc2, 0x17, 0xfb, 0x42, 0x84, 0xe2, 0xb0, 0x10, 0xc1, 0xc7, 0xf5, 0x63, 0x84, 0x77, 0x06, - 0xc4, 0x08, 0x37, 0x46, 0xc7, 0x08, 0x3e, 0xb1, 0x9e, 0x20, 0x41, 0x1d, 0x1a, 0x24, 0xbc, 0x36, - 0x66, 0x90, 0xe0, 0x53, 0x8f, 0x8a, 0x12, 0x3e, 0xd7, 0x1d, 0x25, 0x2c, 0x0d, 0x8e, 0x12, 0x7c, - 0x32, 0x22, 0x4c, 0x58, 0x8f, 0x0c, 0x13, 0xae, 0x8d, 0x0a, 0x13, 0x82, 0xb9, 0x17, 0x8e, 0x13, - 0x36, 0xa3, 0xe3, 0x84, 0xeb, 0x23, 0xe3, 0x84, 0x40, 0xfc, 0x5d, 0x81, 0xc2, 0x7a, 0x64, 0xa0, - 0x70, 0x6d, 0x54, 0xa0, 0x10, 0x74, 0x2e, 0x1c, 0x29, 0xbc, 0x3b, 0x30, 0x52, 0xb8, 0x39, 0x4e, - 0xa4, 0xe0, 0x13, 0xed, 0x0b, 0x15, 0xde, 0x1b, 0x1c, 0x2a, 0xbc, 0x32, 0x56, 0xa8, 0x10, 0x98, - 0x8e, 0xbe, 0x58, 0xe1, 0x8b, 0x7d, 0xb1, 0x42, 0x71, 0x58, 0xac, 0x10, 0xe8, 0xb3, 0x17, 0x2c, - 0xa8, 0x43, 0x5d, 0xfb, 0xd7, 0xc6, 0x74, 0xed, 0x03, 0xe5, 0x8b, 0xf0, 0xed, 0xd7, 0x22, 0x7c, - 0xfb, 0x2b, 0xc3, 0x7d, 0xfb, 0x60, 0x09, 0x09, 0x9c, 0xfb, 0x4a, 0x94, 0x73, 0x7f, 0x75, 0x84, - 0x73, 0x1f, 0x58, 0xa1, 0x90, 0x77, 0xff, 0x56, 0x8f, 0x77, 0x7f, 0x69, 0xe4, 0xc1, 0x77, 0xc8, - 0xbd, 0x2f, 0xf5, 0xbb, 0xf7, 0x97, 0x87, 0xba, 0xf7, 0x3e, 0x85, 0xc0, 0xbf, 0x7f, 0xab, 0xc7, - 0xbf, 0xbf, 0x34, 0xc4, 0xbf, 0x0f, 0x3a, 0x20, 0x1c, 0x7c, 0x7d, 0xb8, 0x83, 0xbf, 0x3c, 0xae, - 0x83, 0xef, 0x13, 0x8e, 0xf4, 0xf0, 0x37, 0xa3, 0x3d, 0xfc, 0xeb, 0x63, 0x9e, 0x81, 0xf5, 0xb9, - 0xf8, 0x95, 0x28, 0x17, 0xff, 0xea, 0x08, 0x17, 0x3f, 0xbc, 0x86, 0xf8, 0x3e, 0x7e, 0x25, 0xca, - 0xc7, 0xbf, 0x3a, 0xc2, 0xc7, 0x0f, 0x28, 0x85, 0x9c, 0xfc, 0xfa, 0x20, 0x27, 0xff, 0xe5, 0x31, - 0x9c, 0xfc, 0x60, 0xdd, 0xed, 0xf1, 0xf2, 0xdf, 0xee, 0xf5, 0xf2, 0x8b, 0xc3, 0xbc, 0xfc, 0x60, - 0x46, 0x7a, 0x6e, 0xfe, 0x66, 0xb4, 0x9b, 0x7f, 0x7d, 0xa4, 0x9b, 0x1f, 0x36, 0x92, 0x21, 0x3f, - 0x7f, 0x3d, 0xd2, 0xcf, 0xbf, 0x36, 0xca, 0xcf, 0x0f, 0x8c, 0x64, 0xd8, 0xd1, 0x7f, 0xbb, 0xd7, - 0xd1, 0x2f, 0x0e, 0x73, 0xf4, 0x83, 0xc1, 0x79, 0x9e, 0x7e, 0x25, 0xca, 0xd3, 0xbf, 0x3a, 0xc2, - 0xd3, 0x0f, 0x84, 0x17, 0x72, 0xf5, 0xd5, 0xa1, 0xae, 0xfe, 0x6b, 0x63, 0xba, 0xfa, 0x3d, 0x86, - 0xeb, 0xf9, 0x7c, 0xfd, 0x07, 0xa9, 0xf4, 0x05, 0xf9, 0xa5, 0xe2, 0x5f, 0x4f, 0xc2, 0x54, 0xc5, - 0x4b, 0xd0, 0x08, 0xdd, 0x7a, 0x96, 0x5e, 0xe4, 0xd6, 0x33, 0x5a, 0xa5, 0xea, 0xc3, 0x26, 0xa1, - 0xf0, 0xfe, 0x87, 0x3c, 0x21, 0xd0, 0x77, 0x44, 0xe6, 0xa1, 0xbe, 0xc0, 0x9d, 0x10, 0xf4, 0x3a, - 0xe4, 0x3a, 0x0e, 0xb1, 0x95, 0xb6, 0x6d, 0x58, 0xb6, 0xe1, 0xf2, 0x04, 0x44, 0xa9, 0x24, 0x7f, - 0x74, 0xbc, 0x38, 0xb3, 0xe3, 0x10, 0x7b, 0x5b, 0xc0, 0xf1, 0x4c, 0x27, 0x54, 0xf2, 0x1e, 0x01, - 0x9e, 0x1c, 0xff, 0x11, 0xe0, 0x77, 0x40, 0xb6, 0x89, 0xaa, 0x77, 0x2d, 0x87, 0xfc, 0x76, 0x70, - 0xf4, 0xca, 0xcd, 0x32, 0x6d, 0xbd, 0x96, 0xec, 0x96, 0xf0, 0xac, 0xdd, 0x0d, 0x44, 0xb7, 0xe1, - 0x74, 0x4b, 0x3d, 0xe4, 0xf7, 0xdf, 0x3d, 0x0f, 0x83, 0x25, 0xaa, 0xa4, 0x59, 0x3e, 0x15, 0x6a, - 0xa9, 0x87, 0xec, 0x45, 0x61, 0x5e, 0xc5, 0xde, 0x12, 0xbc, 0x0a, 0x79, 0xdd, 0x70, 0x5c, 0xc3, - 0xd4, 0xbc, 0xa7, 0x74, 0xf8, 0x9b, 0x35, 0x39, 0x0f, 0xca, 0x9f, 0xb4, 0xb9, 0x09, 0x73, 0x22, - 0xc7, 0x2c, 0x78, 0x63, 0x98, 0xf9, 0xd2, 0x69, 0xda, 0x0b, 0x5a, 0x11, 0x3c, 0x09, 0x5d, 0x86, - 0xd9, 0x86, 0xea, 0x92, 0x03, 0xf5, 0x48, 0xf1, 0x92, 0x7d, 0xb3, 0xec, 0x41, 0x91, 0xf3, 0x27, - 0xc7, 0x8b, 0xb9, 0xfb, 0xbc, 0xaa, 0x2f, 0xe7, 0x37, 0xd7, 0x08, 0x55, 0xe8, 0x68, 0x05, 0x66, - 0xd8, 0x33, 0x69, 0x16, 0x7f, 0x8d, 0x4f, 0x78, 0xc8, 0x83, 0xce, 0x30, 0xc4, 0x9b, 0x7d, 0x98, - 0x3d, 0xad, 0xe6, 0x3d, 0xe0, 0x77, 0x1d, 0x66, 0x55, 0xe7, 0xc8, 0xd4, 0x18, 0x87, 0x89, 0xe9, - 0x74, 0x1c, 0xe6, 0x22, 0xa7, 0x71, 0x9e, 0x81, 0xcb, 0x1e, 0x54, 0xbc, 0xc8, 0xf3, 0x3b, 0x12, - 0xcc, 0x74, 0x25, 0x5e, 0xbe, 0xd5, 0x73, 0x54, 0x77, 0x2e, 0xda, 0x3d, 0x1f, 0x94, 0xa3, 0x94, - 0x16, 0x12, 0xf0, 0xf2, 0x26, 0x16, 0x07, 0xbb, 0x77, 0x2c, 0x40, 0xf6, 0x32, 0x4d, 0x3c, 0xb4, - 0x37, 0x53, 0xbf, 0xf7, 0xdd, 0xc5, 0x89, 0xe2, 0xcf, 0x93, 0x90, 0xeb, 0x4e, 0xb0, 0xac, 0xf6, - 0xf4, 0x2b, 0xca, 0x24, 0x76, 0x61, 0x2c, 0x0f, 0x79, 0xa8, 0x23, 0x13, 0x3c, 0xae, 0xc6, 0xbb, - 0xb9, 0x34, 0xe4, 0x40, 0x32, 0xdc, 0xcf, 0x00, 0x71, 0xe1, 0xc7, 0x09, 0x7f, 0xe6, 0x2f, 0xc3, - 0x24, 0x7b, 0xde, 0x5c, 0x74, 0x2d, 0xea, 0xb6, 0xc8, 0x1a, 0xad, 0xc7, 0xbc, 0x19, 0xb5, 0x14, - 0xf5, 0x17, 0x7a, 0x1f, 0xc1, 0x07, 0xbc, 0xc0, 0xf3, 0xdb, 0x2f, 0x78, 0x8f, 0x9f, 0x1d, 0x38, - 0x36, 0x9b, 0x44, 0x73, 0xc5, 0x2b, 0xe9, 0xde, 0x23, 0xdb, 0x57, 0x7a, 0x49, 0x88, 0x37, 0xd5, - 0x97, 0xb1, 0x78, 0x53, 0x3d, 0x94, 0xca, 0x92, 0xf7, 0x49, 0xb0, 0x89, 0xc5, 0x13, 0x9e, 0x84, - 0xa8, 0xbf, 0x2e, 0x81, 0xcc, 0xa6, 0xd1, 0x3d, 0x42, 0xf4, 0x58, 0xb4, 0xd0, 0xcb, 0xb2, 0x49, - 0x8c, 0x9d, 0x65, 0x53, 0x54, 0x21, 0xef, 0xf7, 0x81, 0xbf, 0x36, 0x3c, 0xe4, 0x79, 0x8b, 0x17, - 0xba, 0x76, 0x58, 0xfc, 0x03, 0x09, 0xe6, 0xfd, 0x6f, 0x30, 0x3f, 0x9f, 0xe7, 0xc5, 0xbf, 0x40, - 0xde, 0x23, 0x66, 0x2f, 0xa9, 0xd3, 0x38, 0x8f, 0x5d, 0x45, 0x1b, 0x4b, 0x83, 0x90, 0x38, 0xfb, - 0x06, 0x11, 0x3f, 0xea, 0xf5, 0x1a, 0x7b, 0x63, 0x9d, 0xff, 0x76, 0x8a, 0xf7, 0x42, 0x1c, 0x60, - 0xca, 0x4a, 0x87, 0x39, 0x96, 0x56, 0x7b, 0xc3, 0x64, 0x8d, 0x8b, 0x7f, 0x2b, 0x85, 0x09, 0x3d, - 0xa5, 0x7e, 0xc3, 0x5d, 0x48, 0x3e, 0x55, 0x9b, 0xc3, 0x8e, 0xfe, 0xbb, 0x58, 0x8f, 0x69, 0x6b, - 0x74, 0x0f, 0xf8, 0x75, 0x1c, 0x7e, 0x99, 0x20, 0x31, 0x38, 0xb8, 0xeb, 0x67, 0x29, 0x0e, 0x61, - 0xa2, 0x37, 0xbc, 0x51, 0x24, 0x47, 0x7f, 0x3e, 0x3c, 0x49, 0xdf, 0x4c, 0x7d, 0xf8, 0xdd, 0x45, - 0xe9, 0x66, 0x0d, 0xe6, 0x23, 0x16, 0x21, 0x94, 0x07, 0x28, 0x6f, 0x6d, 0xd6, 0xaa, 0xb5, 0xfa, - 0xda, 0x66, 0xdd, 0x7b, 0xc8, 0x7d, 0x65, 0x55, 0xd9, 0xd9, 0x2c, 0x6f, 0x6d, 0x6c, 0x54, 0xeb, - 0xf5, 0xb5, 0x55, 0x59, 0x42, 0x32, 0xcc, 0x54, 0x37, 0x43, 0xed, 0xc4, 0xfb, 0xed, 0x37, 0x7f, - 0x01, 0x20, 0x78, 0xe7, 0x92, 0xd2, 0x5a, 0x5f, 0x7b, 0xac, 0x3c, 0x5a, 0x79, 0xb8, 0xb3, 0x56, - 0x93, 0x27, 0x10, 0x82, 0x7c, 0x69, 0xa5, 0x5e, 0xae, 0x28, 0x78, 0xad, 0xb6, 0xbd, 0xb5, 0x59, - 0x5b, 0x93, 0x25, 0x81, 0xb7, 0x01, 0xd9, 0xd0, 0x7b, 0x19, 0xb4, 0xe1, 0xf6, 0x4e, 0xad, 0xa2, - 0xd4, 0xab, 0x1b, 0x6b, 0xb5, 0xfa, 0xca, 0xc6, 0xb6, 0x3c, 0x41, 0x89, 0x31, 0xd8, 0x4a, 0x69, - 0x0b, 0xd7, 0x65, 0xc9, 0x2f, 0xd7, 0xb7, 0x76, 0xca, 0x15, 0xff, 0x01, 0xf9, 0x54, 0x3a, 0x29, - 0x27, 0x6f, 0x5a, 0x70, 0x3a, 0xf2, 0xba, 0x12, 0xca, 0xc2, 0xf4, 0x8e, 0xc9, 0x5e, 0x6a, 0x90, - 0x27, 0x50, 0x2e, 0x74, 0x63, 0x49, 0x96, 0x50, 0x9a, 0xdf, 0x4b, 0x91, 0x13, 0x68, 0x0a, 0x12, - 0xb5, 0xbb, 0x72, 0x12, 0xcd, 0x42, 0x36, 0x74, 0xed, 0x47, 0x4e, 0xa1, 0x8c, 0xb8, 0x2d, 0x21, - 0x4f, 0xa2, 0x99, 0xe0, 0xba, 0x82, 0x3c, 0x75, 0xf3, 0x12, 0x84, 0xb2, 0xb9, 0x11, 0xc0, 0xd4, - 0x43, 0xd5, 0x25, 0x8e, 0x2b, 0x4f, 0xa0, 0x69, 0x48, 0xae, 0x34, 0x9b, 0xb2, 0x74, 0xe7, 0x07, - 0x12, 0xa4, 0xbd, 0x37, 0xf1, 0xd0, 0x43, 0x98, 0xe4, 0x41, 0xdb, 0xe2, 0x60, 0x63, 0xcf, 0xec, - 0xc5, 0xc2, 0xd2, 0xa8, 0xd5, 0xa0, 0x38, 0x81, 0xde, 0x15, 0xff, 0xc1, 0x81, 0x4a, 0x1a, 0x5d, - 0x1e, 0xa6, 0x07, 0x1e, 0xd5, 0xe1, 0xca, 0x42, 0x75, 0xbb, 0x38, 0xf1, 0x19, 0xa9, 0x74, 0xe9, - 0xc3, 0x7f, 0xbd, 0x38, 0xf1, 0xe1, 0xc9, 0x45, 0xe9, 0xa7, 0x27, 0x17, 0xa5, 0x7f, 0x3a, 0xb9, - 0x28, 0xfd, 0xcb, 0xc9, 0x45, 0xe9, 0x37, 0xff, 0xed, 0xe2, 0xc4, 0x7b, 0xd3, 0x02, 0x6b, 0x77, - 0x8a, 0xfd, 0x13, 0x89, 0xbb, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0xd5, 0x3d, 0x09, 0x8b, 0x49, - 0x63, 0x00, 0x00, + 0x08, 0x3b, 0x88, 0x4b, 0x63, 0x5e, 0x40, 0x37, 0x61, 0xce, 0x30, 0xb5, 0x66, 0xc7, 0x31, 0x9e, + 0x12, 0xc5, 0x1b, 0x11, 0x77, 0x36, 0x67, 0xfd, 0x0a, 0x46, 0xd0, 0xf2, 0xbd, 0xce, 0xb4, 0x9c, + 0x29, 0xfe, 0xbe, 0x04, 0xb3, 0xbe, 0xb0, 0xe3, 0x74, 0x37, 0xcb, 0x5d, 0x92, 0x7a, 0x7e, 0x71, + 0x53, 0xe9, 0x14, 0xbf, 0x9f, 0x80, 0xd9, 0x77, 0x3a, 0xc4, 0x3e, 0x8a, 0x59, 0x17, 0x4b, 0xfc, + 0x80, 0x36, 0xf1, 0x82, 0xfa, 0xc3, 0x8e, 0x6c, 0xaf, 0xc1, 0xec, 0x81, 0x6a, 0xb8, 0xca, 0x9e, + 0x65, 0x2b, 0x9d, 0xb6, 0xae, 0xba, 0xde, 0x71, 0x56, 0x8e, 0x82, 0xef, 0x59, 0xf6, 0x0e, 0x03, + 0x22, 0x02, 0xe8, 0x89, 0x69, 0x1d, 0x98, 0x0a, 0x05, 0x1b, 0x66, 0x83, 0xf2, 0x43, 0xec, 0x5b, + 0x94, 0xde, 0xf8, 0x97, 0xe3, 0xc5, 0xbb, 0x0d, 0xc3, 0xdd, 0xef, 0xec, 0x2e, 0x6b, 0x56, 0xeb, + 0x96, 0xdf, 0x11, 0x7d, 0x37, 0xf8, 0x7d, 0xab, 0xfd, 0xa4, 0x71, 0x8b, 0x9d, 0xcc, 0x77, 0x3a, + 0x86, 0xbe, 0xbc, 0xb3, 0x53, 0x5d, 0xc5, 0x32, 0x23, 0xf9, 0x2e, 0xa7, 0x58, 0x3f, 0x34, 0xbd, + 0xb5, 0xf1, 0x23, 0x09, 0xe4, 0x80, 0x61, 0x71, 0xca, 0x73, 0x0d, 0xb2, 0x1f, 0x74, 0x88, 0x6d, + 0x10, 0xfd, 0xb9, 0x05, 0x0a, 0x02, 0x91, 0xce, 0xb7, 0xf7, 0x60, 0xa6, 0x8b, 0x0f, 0xc9, 0x8f, + 0xc7, 0x87, 0xec, 0x41, 0xc0, 0x82, 0xe2, 0xdf, 0x24, 0x00, 0xb1, 0xc1, 0x57, 0xf9, 0x96, 0xd1, + 0xa7, 0x4c, 0x61, 0x1e, 0x01, 0x18, 0x7b, 0x4a, 0xcb, 0x70, 0x1c, 0xc3, 0x6c, 0x30, 0x5d, 0xc9, + 0xdf, 0x79, 0x23, 0xa2, 0x2f, 0xfd, 0x43, 0x58, 0xae, 0xee, 0x6d, 0x70, 0xb4, 0x12, 0xd9, 0x57, + 0x9f, 0x1a, 0x96, 0x8d, 0x33, 0x86, 0x07, 0x2a, 0x96, 0x60, 0xae, 0xaf, 0x1e, 0xe5, 0x01, 0x56, + 0xb7, 0x94, 0xcd, 0xad, 0x7a, 0xa5, 0xba, 0x79, 0x5f, 0x9e, 0x40, 0x32, 0xcc, 0xe0, 0xb5, 0xfa, + 0x0e, 0xde, 0x54, 0xd6, 0x30, 0xde, 0xc2, 0xb2, 0x84, 0xb2, 0x30, 0xbd, 0x8d, 0xd7, 0x1e, 0xad, + 0x6d, 0xd6, 0xe5, 0x84, 0xd0, 0x9e, 0x5f, 0x81, 0xf9, 0xae, 0x8f, 0xc7, 0xa9, 0x3f, 0x97, 0x60, + 0x66, 0xcf, 0xea, 0x98, 0xba, 0xc2, 0x43, 0x6e, 0xb1, 0xb5, 0x90, 0x65, 0x30, 0xfe, 0xbd, 0xe2, + 0x37, 0x12, 0x70, 0x0a, 0x13, 0xc7, 0x6a, 0x3e, 0x25, 0xf1, 0x4b, 0x70, 0x0b, 0xc4, 0x4e, 0xa2, + 0xf2, 0x71, 0x04, 0x99, 0xe1, 0x34, 0xf8, 0xca, 0x31, 0xe5, 0xb8, 0xaa, 0xdb, 0x71, 0x84, 0x28, + 0xaf, 0x0c, 0x9f, 0x0b, 0x35, 0xd6, 0x16, 0x0b, 0x9c, 0xd0, 0x8e, 0x40, 0xaa, 0x7f, 0x47, 0xa0, + 0xf8, 0x4b, 0x70, 0xba, 0x87, 0x11, 0x71, 0x2e, 0xf0, 0xff, 0x94, 0x80, 0x73, 0xdd, 0xe4, 0xe3, + 0x76, 0xf7, 0xff, 0x6f, 0x30, 0x1b, 0x55, 0x20, 0xd7, 0x32, 0x4c, 0x25, 0xf0, 0xc7, 0x9e, 0x63, + 0x21, 0x9f, 0xa1, 0xc1, 0x6e, 0xb7, 0x4b, 0x46, 0x23, 0x93, 0x28, 0xbe, 0xc6, 0x29, 0xbb, 0x6f, + 0x4b, 0x30, 0x13, 0xf7, 0x56, 0xc5, 0x8b, 0x9d, 0x9a, 0x8b, 0x31, 0xd7, 0x21, 0xf7, 0x09, 0xec, + 0x6d, 0xfc, 0x89, 0x04, 0xa8, 0x6e, 0x77, 0x4c, 0x1a, 0xdf, 0x3d, 0xb4, 0x1a, 0x71, 0x0e, 0xf6, + 0x14, 0x4c, 0x1a, 0xa6, 0x4e, 0x0e, 0xd9, 0x60, 0x53, 0x98, 0x17, 0xd0, 0x6d, 0x48, 0x8b, 0x5c, + 0x29, 0x9e, 0x05, 0x90, 0x2c, 0x9d, 0x39, 0x39, 0x5e, 0x9c, 0xe6, 0x99, 0x51, 0xab, 0x1f, 0x05, + 0x3f, 0xf1, 0x34, 0x4f, 0x8e, 0xf2, 0x12, 0x53, 0xde, 0x83, 0xf9, 0xae, 0x8e, 0xc6, 0xc9, 0x85, + 0xef, 0x27, 0x60, 0x5e, 0x0c, 0x27, 0xf6, 0xbd, 0x9d, 0x17, 0x4a, 0xb4, 0x43, 0x5f, 0x00, 0x68, + 0xdb, 0xe4, 0xa9, 0xc2, 0x51, 0x93, 0x63, 0xa1, 0x66, 0x28, 0x06, 0x03, 0xa0, 0x2f, 0xc3, 0x2c, + 0x9d, 0x70, 0x6d, 0xdb, 0x6a, 0x5b, 0x0e, 0xf5, 0x24, 0x9c, 0xf1, 0xbc, 0xee, 0xb9, 0x93, 0xe3, + 0xc5, 0xdc, 0x86, 0x61, 0x6e, 0x0b, 0xc4, 0x7a, 0x0d, 0xd3, 0x99, 0xeb, 0x17, 0x3d, 0xf7, 0xe7, + 0x1f, 0x25, 0x38, 0xf5, 0x89, 0xed, 0x86, 0xfd, 0x6f, 0x70, 0xcc, 0x5f, 0x0f, 0x64, 0x56, 0xac, + 0x9a, 0x7b, 0x56, 0xfc, 0x7b, 0x94, 0xdf, 0x96, 0x60, 0x2e, 0x44, 0x3e, 0xce, 0x55, 0xff, 0xc5, + 0xd2, 0x39, 0xbf, 0x42, 0xfd, 0x80, 0xb0, 0xda, 0xc7, 0x39, 0xa9, 0xfe, 0x48, 0x82, 0x33, 0x65, + 0x7e, 0x72, 0xc5, 0x0e, 0xe8, 0x9c, 0x4e, 0x2b, 0x4e, 0x2d, 0x29, 0xc0, 0xf4, 0x53, 0x62, 0x3b, + 0x86, 0xc5, 0xd7, 0xbd, 0x1c, 0xf6, 0x8a, 0x2c, 0xad, 0xd4, 0x54, 0xdb, 0xce, 0xbe, 0xe5, 0x6d, + 0xbc, 0xfb, 0x65, 0x3f, 0x24, 0x4b, 0xca, 0xa9, 0xe2, 0x8f, 0x25, 0x38, 0xdb, 0xd7, 0xc1, 0x38, + 0x85, 0xf2, 0x35, 0xc8, 0x6a, 0x82, 0x30, 0x35, 0x77, 0x7c, 0xef, 0xbd, 0x4a, 0x9b, 0xbd, 0xa0, + 0x1b, 0x7e, 0x72, 0xbc, 0x08, 0x5e, 0x57, 0xab, 0xab, 0x18, 0x3c, 0xea, 0x55, 0xbd, 0xf8, 0x53, + 0x80, 0xdc, 0xda, 0x61, 0xdb, 0xb2, 0xdd, 0x1a, 0x5f, 0xf3, 0xd1, 0x2a, 0xa4, 0xdb, 0xb6, 0xf5, + 0xd4, 0xf0, 0x06, 0x91, 0x8f, 0x3c, 0xfb, 0xe9, 0xc2, 0xd9, 0x16, 0xed, 0xb1, 0x8f, 0x89, 0x30, + 0x64, 0x1e, 0x5a, 0x9a, 0xda, 0xbc, 0x67, 0x34, 0x3d, 0xe5, 0x5a, 0x1e, 0x45, 0x66, 0xd9, 0xc7, + 0xd8, 0x56, 0xdd, 0x7d, 0x6f, 0xae, 0xf9, 0x40, 0x74, 0x1f, 0xd2, 0x15, 0xd7, 0x6d, 0xd3, 0x4a, + 0x31, 0x51, 0xaf, 0x8e, 0x24, 0x49, 0x11, 0x04, 0x25, 0x1f, 0x19, 0x61, 0x98, 0xbb, 0x6f, 0x59, + 0x8d, 0x26, 0x29, 0x37, 0xad, 0x8e, 0x5e, 0xb6, 0xcc, 0x3d, 0xa3, 0x21, 0x0c, 0xdd, 0x95, 0x91, + 0x14, 0xef, 0x97, 0x6b, 0xb8, 0x1f, 0x1d, 0x7d, 0x11, 0xd2, 0xb5, 0xbb, 0x82, 0x14, 0x77, 0x53, + 0x2e, 0x8f, 0x24, 0x55, 0xbb, 0x8b, 0x7d, 0x24, 0x54, 0x81, 0xec, 0xca, 0xb3, 0x8e, 0x4d, 0x04, + 0x8d, 0x29, 0x46, 0xe3, 0xda, 0x48, 0x1a, 0x0c, 0x07, 0x87, 0x51, 0xd1, 0x3b, 0x90, 0x7f, 0xd7, + 0xb2, 0x9f, 0x34, 0x2d, 0xd5, 0x1b, 0xdb, 0x34, 0x23, 0xf6, 0xf2, 0x48, 0x62, 0x1e, 0x1a, 0xee, + 0x21, 0xb0, 0xf0, 0x65, 0xc8, 0x75, 0x09, 0x07, 0x21, 0x48, 0xb5, 0xa9, 0x1c, 0xa8, 0x86, 0x64, + 0x30, 0xfb, 0x8d, 0x5e, 0x83, 0x69, 0xd3, 0xd2, 0x89, 0xa7, 0xb3, 0xb9, 0xd2, 0xa9, 0x93, 0xe3, + 0xc5, 0xa9, 0x4d, 0x4b, 0xe7, 0x2b, 0xb4, 0xf8, 0x85, 0xa7, 0x68, 0x23, 0x6f, 0x7d, 0x5e, 0xb8, + 0x06, 0x29, 0x2a, 0x17, 0x3a, 0x2f, 0x77, 0x55, 0x87, 0xec, 0xd8, 0x86, 0xa0, 0xe9, 0x15, 0x45, + 0xbb, 0xbf, 0x95, 0x20, 0x51, 0xbb, 0x4b, 0x5d, 0xc5, 0xdd, 0x8e, 0xf6, 0x84, 0xb8, 0xa2, 0x95, + 0x28, 0x31, 0x17, 0xd2, 0x26, 0x7b, 0x06, 0x77, 0x1b, 0x32, 0x58, 0x94, 0xd0, 0x4b, 0x00, 0xaa, + 0xa6, 0x11, 0xc7, 0x51, 0xbc, 0x7c, 0xf3, 0x0c, 0xce, 0x70, 0xc8, 0x3a, 0x39, 0xa2, 0x68, 0x0e, + 0xd1, 0x6c, 0xc2, 0x67, 0x7c, 0x06, 0x8b, 0x12, 0x45, 0x73, 0x49, 0xab, 0xad, 0xb8, 0xd6, 0x13, + 0x62, 0x32, 0x79, 0x66, 0x70, 0x86, 0x42, 0xea, 0x14, 0x40, 0x4d, 0x05, 0x31, 0xf5, 0xb6, 0x65, + 0x98, 0x2e, 0x13, 0x54, 0x06, 0xfb, 0x65, 0x4a, 0xd2, 0x26, 0x0d, 0x43, 0x64, 0x62, 0x67, 0xb0, + 0x28, 0x89, 0x61, 0x7c, 0x47, 0x82, 0xe4, 0xfd, 0x72, 0xed, 0xb9, 0xc7, 0x81, 0x20, 0xa5, 0x76, + 0x84, 0xde, 0x67, 0x30, 0xfb, 0xcd, 0xd2, 0x2d, 0x8c, 0x66, 0x93, 0xc6, 0xea, 0x6d, 0xdb, 0xfa, + 0x1a, 0xd1, 0xbc, 0x51, 0xe4, 0x05, 0x78, 0x9b, 0x43, 0xd1, 0x12, 0x64, 0x35, 0x9b, 0xe8, 0xc4, + 0x74, 0x0d, 0xb5, 0xe9, 0x88, 0xe1, 0x84, 0x41, 0xa2, 0x73, 0xdf, 0x90, 0x60, 0x92, 0x29, 0x12, + 0xba, 0x00, 0x19, 0xcd, 0x32, 0x5d, 0xd5, 0x30, 0x85, 0x15, 0xc8, 0xe0, 0x00, 0x30, 0xb0, 0x93, + 0x97, 0x60, 0x46, 0xd5, 0x34, 0xab, 0x63, 0xba, 0x8a, 0xa9, 0xb6, 0x88, 0xe8, 0x6c, 0x56, 0xc0, + 0x36, 0xd5, 0x16, 0x41, 0x8b, 0xe0, 0x15, 0xfd, 0x0c, 0xff, 0x0c, 0x06, 0x01, 0xf2, 0x0f, 0x14, + 0x17, 0x7e, 0x2c, 0x41, 0xda, 0x53, 0x41, 0xda, 0x99, 0x06, 0x31, 0x89, 0xad, 0xba, 0x96, 0xdf, + 0x19, 0x1f, 0xd0, 0x6b, 0xd0, 0x33, 0x81, 0x41, 0x3f, 0x05, 0x93, 0xae, 0xba, 0xdb, 0xf4, 0xfa, + 0xc1, 0x0b, 0x6c, 0x7f, 0xae, 0xa9, 0x36, 0xf8, 0x16, 0x4f, 0x06, 0xf3, 0x02, 0x1d, 0x92, 0xc8, + 0xef, 0xe1, 0xdc, 0x11, 0x25, 0xda, 0x5f, 0x9e, 0xd2, 0xb2, 0x4b, 0x1a, 0x86, 0xc9, 0x84, 0x9d, + 0xc4, 0xc0, 0x40, 0x2c, 0x85, 0x00, 0x9d, 0x87, 0x0c, 0x6f, 0x40, 0x4c, 0x9d, 0x49, 0x3c, 0x89, + 0xd3, 0x0c, 0xb0, 0xe6, 0xe5, 0x46, 0x8b, 0x55, 0xfc, 0xcf, 0x25, 0x98, 0x7b, 0xd7, 0x36, 0x5c, + 0x52, 0xe2, 0xb9, 0x30, 0xf1, 0x2d, 0x69, 0x6f, 0x42, 0x46, 0x57, 0x5d, 0x95, 0x5f, 0x4d, 0x48, + 0x0c, 0xbd, 0x9a, 0xe0, 0x99, 0x42, 0xda, 0x9e, 0x5d, 0x4f, 0x40, 0x90, 0xa2, 0xbf, 0xf9, 0x4d, + 0x0c, 0xcc, 0x7e, 0x07, 0x27, 0xa3, 0xe1, 0xee, 0xc6, 0xb9, 0xc4, 0x7f, 0x3d, 0xe9, 0x2d, 0x3a, + 0x71, 0xb2, 0xe1, 0x4b, 0x30, 0x2d, 0xe2, 0x56, 0xc1, 0x84, 0xa5, 0x51, 0xf6, 0xce, 0x3b, 0xbf, + 0x12, 0x68, 0xa8, 0x04, 0xe0, 0xb8, 0xaa, 0xed, 0xb2, 0x88, 0x73, 0xac, 0x14, 0x0a, 0x6f, 0x91, + 0x62, 0x68, 0x14, 0x8a, 0x36, 0x21, 0xdb, 0x7a, 0xaa, 0x69, 0xca, 0x9e, 0xd1, 0x74, 0x45, 0xf6, + 0x44, 0x74, 0xb6, 0xd8, 0xc6, 0xa3, 0x72, 0xf9, 0x1e, 0x6b, 0xc4, 0x93, 0x18, 0x82, 0x32, 0x06, + 0x4a, 0x81, 0xff, 0x46, 0xaf, 0x82, 0x48, 0x24, 0x55, 0x1c, 0x2f, 0x2d, 0xbc, 0x94, 0x3b, 0x39, + 0x5e, 0xcc, 0x60, 0x06, 0xad, 0xd5, 0xea, 0x38, 0xc3, 0x1b, 0xd4, 0x1c, 0x17, 0x5d, 0x86, 0x9c, + 0xd5, 0x32, 0x5c, 0xc5, 0x5b, 0xe1, 0x79, 0x96, 0x04, 0x9e, 0xa1, 0x40, 0xcf, 0x03, 0x10, 0xf2, + 0xfd, 0x96, 0x04, 0xb9, 0x52, 0xa7, 0xf9, 0x64, 0xab, 0x5d, 0xeb, 0xb4, 0x5a, 0xaa, 0x7d, 0x44, + 0x55, 0x99, 0xeb, 0x91, 0xf1, 0x8c, 0x30, 0x39, 0x24, 0x85, 0xa2, 0x18, 0xcf, 0x08, 0x55, 0x14, + 0x91, 0x56, 0x46, 0xe1, 0x3c, 0x67, 0xec, 0x32, 0xe4, 0x58, 0x74, 0xa6, 0x10, 0xd3, 0xb5, 0x0d, + 0xc2, 0x83, 0xff, 0x24, 0x9e, 0x61, 0xc0, 0x35, 0x0e, 0x43, 0x57, 0x21, 0xef, 0x1c, 0x39, 0x2e, + 0x69, 0x29, 0xfc, 0xc2, 0x12, 0x0f, 0x29, 0x92, 0x38, 0xc7, 0xa1, 0x98, 0x03, 0x8b, 0x7f, 0x91, + 0x84, 0xbc, 0xa7, 0x13, 0x71, 0x3a, 0x53, 0x25, 0x98, 0xdc, 0x33, 0x9a, 0xc4, 0x3b, 0xd7, 0x1c, + 0xbc, 0xa0, 0x7a, 0x94, 0x96, 0xe9, 0x1a, 0xe7, 0xf9, 0xbb, 0x0c, 0x35, 0x0e, 0xbd, 0x58, 0xf8, + 0x89, 0x04, 0x29, 0xe6, 0xc5, 0xdc, 0x86, 0x14, 0x9b, 0xa8, 0xd2, 0x38, 0x13, 0x95, 0x35, 0xf5, + 0x17, 0xdb, 0x44, 0x68, 0xb1, 0xa5, 0x2b, 0xd7, 0xbe, 0xfa, 0xfa, 0xed, 0x3b, 0x4c, 0x27, 0x66, + 0xb0, 0x28, 0xa1, 0x12, 0xa4, 0x09, 0x1b, 0x0f, 0xd1, 0x85, 0x0f, 0x11, 0x35, 0x0d, 0xba, 0x04, + 0xef, 0x19, 0x05, 0x0f, 0x0f, 0x9d, 0x83, 0x24, 0x55, 0xb6, 0x69, 0x7e, 0x3c, 0x76, 0x72, 0xbc, + 0x98, 0xa4, 0x6a, 0x46, 0x61, 0xdc, 0x05, 0x7e, 0x90, 0x4a, 0xa7, 0xe4, 0xc9, 0xe2, 0x0f, 0x53, + 0x90, 0xab, 0xb6, 0xe2, 0x9e, 0xc6, 0x2b, 0xdd, 0x02, 0x8b, 0x72, 0xf1, 0xba, 0x3e, 0x1a, 0x21, + 0xaf, 0x2e, 0x83, 0x98, 0x7c, 0x3e, 0x83, 0x58, 0xa5, 0xcb, 0xb7, 0xb8, 0xad, 0x45, 0xbf, 0xff, + 0xca, 0xc8, 0xef, 0xd7, 0xe9, 0xb2, 0x82, 0x29, 0x8e, 0x77, 0xfa, 0xc4, 0x09, 0xa0, 0xb7, 0x99, + 0x97, 0xc0, 0x95, 0x66, 0x6a, 0x7c, 0xa5, 0x99, 0x26, 0xa6, 0xce, 0x54, 0xe6, 0x50, 0x68, 0xcc, + 0xe7, 0x20, 0xa9, 0x1b, 0xc3, 0x58, 0x1a, 0x65, 0xd4, 0x28, 0xca, 0x08, 0xc5, 0x49, 0x85, 0x15, + 0x27, 0x1c, 0xe2, 0x2c, 0x6c, 0x01, 0x04, 0xa3, 0x42, 0x4b, 0x30, 0x65, 0x35, 0x75, 0xea, 0xd6, + 0x49, 0xcc, 0xad, 0xcb, 0x9c, 0x1c, 0x2f, 0x4e, 0x6e, 0x35, 0xf5, 0xea, 0x2a, 0x9e, 0xb4, 0x9a, + 0x7a, 0x55, 0x67, 0x97, 0xdc, 0xc8, 0x81, 0xc2, 0xee, 0x15, 0xb2, 0x70, 0x05, 0x4f, 0x9b, 0xe4, + 0x60, 0x95, 0x38, 0x5a, 0x78, 0x09, 0x14, 0x6a, 0xf3, 0xc7, 0x12, 0xe4, 0x3d, 0x0e, 0xc6, 0x3b, + 0xd3, 0xd3, 0x46, 0x4b, 0x68, 0x7e, 0xf2, 0xf9, 0x34, 0xdf, 0xc3, 0x13, 0xa9, 0xf8, 0xdf, 0x94, + 0x60, 0x9e, 0xe7, 0x33, 0x69, 0xaa, 0x4b, 0x0d, 0x72, 0x8c, 0xea, 0xfd, 0x32, 0xc8, 0xb6, 0x6a, + 0xea, 0x56, 0xcb, 0x78, 0x46, 0xf8, 0xa6, 0x83, 0x23, 0xf6, 0xda, 0x67, 0x7d, 0x38, 0x8b, 0xaa, + 0xbd, 0x3d, 0x93, 0x9f, 0x4b, 0x70, 0xaa, 0xbb, 0x33, 0x71, 0x32, 0x6d, 0x1d, 0xa6, 0xd8, 0x7e, + 0x99, 0x37, 0xdd, 0x5e, 0x8b, 0x20, 0x12, 0xf5, 0x75, 0x7e, 0x27, 0xd1, 0x57, 0x78, 0x46, 0x62, + 0xe1, 0x4b, 0x30, 0xc9, 0xc0, 0x2f, 0x60, 0xe3, 0x04, 0xe7, 0x3f, 0x80, 0xb9, 0x15, 0x5d, 0xaf, + 0xd5, 0x84, 0xf6, 0xc5, 0xc7, 0x76, 0xcf, 0xcf, 0x49, 0x44, 0xf9, 0x39, 0xe1, 0x4f, 0xc6, 0xe9, + 0xe7, 0xb4, 0x21, 0x2f, 0xd2, 0x0c, 0x63, 0xde, 0x20, 0x3d, 0xa0, 0x8e, 0x99, 0x50, 0x1b, 0x5e, + 0x08, 0x6e, 0x38, 0xf9, 0x5f, 0x8c, 0x73, 0x24, 0x1d, 0x98, 0xf7, 0xe8, 0xc6, 0x7d, 0x16, 0x31, + 0x6c, 0x38, 0x6c, 0xa3, 0x29, 0xfc, 0xd9, 0x38, 0xc7, 0xf4, 0x3d, 0x09, 0xf2, 0xb5, 0xce, 0x2e, + 0xbf, 0xe6, 0x1a, 0xdf, 0x78, 0xee, 0x03, 0x34, 0xc9, 0x9e, 0xb8, 0x82, 0x22, 0x3c, 0xd1, 0xf1, + 0x6f, 0x59, 0x67, 0x28, 0x2e, 0xab, 0x12, 0x2c, 0xf8, 0x61, 0x02, 0x66, 0xfd, 0x5e, 0xc6, 0x39, + 0xf3, 0x7f, 0x19, 0x98, 0x9b, 0xa9, 0x38, 0xae, 0xea, 0x3a, 0xc2, 0x60, 0xbe, 0xfa, 0x3c, 0x29, + 0xdc, 0xa5, 0x39, 0x91, 0x7e, 0x93, 0xf1, 0x41, 0x38, 0x43, 0x49, 0xb2, 0x9f, 0x68, 0x19, 0xe6, + 0x99, 0x79, 0x53, 0xd4, 0x76, 0xbb, 0x69, 0x10, 0x5d, 0xe1, 0xbb, 0xfa, 0x29, 0xb6, 0xab, 0x3f, + 0xc7, 0xaa, 0x56, 0x78, 0x4d, 0x95, 0xed, 0xf0, 0xdf, 0x83, 0x99, 0x3d, 0x9b, 0x90, 0x67, 0x44, + 0x61, 0x4e, 0xd3, 0xf3, 0x9c, 0xf5, 0x64, 0x39, 0x62, 0x8d, 0xe2, 0x09, 0x43, 0xf2, 0x3e, 0xcc, + 0x31, 0x2e, 0xc6, 0x9d, 0x79, 0x2f, 0xa4, 0xf2, 0x53, 0x09, 0x50, 0x98, 0xfe, 0x27, 0x27, 0x98, + 0x44, 0xec, 0x82, 0x79, 0x15, 0x10, 0x3f, 0xf0, 0x77, 0x94, 0x36, 0xb1, 0x15, 0x87, 0x68, 0x96, + 0xb8, 0x5a, 0x29, 0x61, 0x59, 0xd4, 0x6c, 0x13, 0xbb, 0xc6, 0xe0, 0xc5, 0xdf, 0x2a, 0xc0, 0x8c, + 0xe0, 0xc9, 0x8e, 0x49, 0xa3, 0xea, 0xdb, 0x90, 0x6c, 0x88, 0x6d, 0x8b, 0x6c, 0x64, 0x60, 0x13, + 0x5c, 0xef, 0xae, 0x4c, 0x60, 0xda, 0x96, 0xa2, 0xb4, 0x3b, 0x6e, 0x44, 0x36, 0x55, 0x90, 0x49, + 0x13, 0x46, 0x69, 0x77, 0x5c, 0x54, 0x83, 0x59, 0x2d, 0xb8, 0xde, 0xaa, 0x50, 0xf4, 0xe4, 0xc0, + 0x44, 0xf4, 0xc8, 0x4b, 0xc2, 0x95, 0x09, 0x9c, 0xd7, 0xba, 0x2a, 0x50, 0x39, 0x7c, 0x9f, 0x32, + 0x35, 0x70, 0x93, 0xae, 0xf7, 0x2e, 0x67, 0x65, 0x22, 0x74, 0xed, 0x12, 0xbd, 0x09, 0x53, 0x3a, + 0xbb, 0xa7, 0x27, 0x34, 0x34, 0x4a, 0x89, 0xba, 0xae, 0x46, 0x56, 0x26, 0xb0, 0xc0, 0x40, 0x0f, + 0x60, 0x86, 0xff, 0x12, 0xd6, 0x61, 0x6a, 0xe0, 0x2e, 0x66, 0xff, 0x4d, 0xc5, 0xca, 0x04, 0xce, + 0xea, 0x01, 0x14, 0x7d, 0x16, 0x52, 0x8e, 0xa6, 0x9a, 0x62, 0x6f, 0xef, 0xe2, 0x80, 0xfb, 0x48, + 0x01, 0x32, 0x6b, 0x8d, 0x1e, 0xc3, 0x1c, 0xdb, 0xc9, 0x50, 0xdc, 0xe0, 0x34, 0x96, 0x25, 0xc5, + 0x77, 0x1f, 0x00, 0xfb, 0xde, 0x52, 0xf4, 0x5d, 0x8c, 0xca, 0x04, 0x96, 0x77, 0x7b, 0xaa, 0xa8, + 0xc8, 0x98, 0xbb, 0x1b, 0x22, 0x9c, 0x19, 0x28, 0xb2, 0xc8, 0xdb, 0x11, 0x54, 0x64, 0xa4, 0xab, + 0x02, 0xdd, 0x87, 0xac, 0x4a, 0xdd, 0x0f, 0x85, 0x65, 0x9c, 0x17, 0x60, 0xe0, 0x26, 0x6d, 0x5f, + 0x12, 0x7c, 0x85, 0x5d, 0x2c, 0xf1, 0x80, 0x01, 0xa1, 0x16, 0xb1, 0x1b, 0xa4, 0x90, 0x1d, 0x4e, + 0x28, 0x7c, 0x84, 0xeb, 0x13, 0x62, 0x40, 0xb4, 0x01, 0xb9, 0x7d, 0x2f, 0xc5, 0x93, 0x1d, 0x9f, + 0xcf, 0x0c, 0xdc, 0xa9, 0x8d, 0x48, 0x51, 0xad, 0x4c, 0xe0, 0x99, 0xfd, 0x10, 0x18, 0x2d, 0x43, + 0xa2, 0xa1, 0x15, 0x72, 0x8c, 0xc6, 0x85, 0x61, 0x09, 0x98, 0x95, 0x09, 0x9c, 0x68, 0x68, 0x34, + 0xa8, 0xe0, 0xe9, 0x63, 0x87, 0x66, 0x21, 0x3f, 0xd0, 0xc8, 0x74, 0xe7, 0x07, 0x56, 0x26, 0x30, + 0xcb, 0xa2, 0xa3, 0xdf, 0xdb, 0x86, 0xbc, 0xcd, 0xcf, 0xc0, 0xbd, 0x4c, 0x0f, 0x99, 0x51, 0xb9, + 0x1e, 0x6d, 0xaa, 0xfa, 0x92, 0x3d, 0x2a, 0x13, 0x38, 0x67, 0x87, 0xe1, 0xe8, 0xab, 0x70, 0xaa, + 0x9b, 0xa2, 0x50, 0xee, 0xb9, 0x3e, 0xcb, 0x15, 0x4d, 0xb7, 0x5b, 0xc7, 0x91, 0xdd, 0x57, 0x89, + 0xde, 0x80, 0x49, 0x2e, 0x35, 0xc4, 0x48, 0x2e, 0x46, 0xed, 0xa6, 0x74, 0x0b, 0x8c, 0xb7, 0xa7, + 0xf3, 0xcd, 0x15, 0x87, 0xbf, 0x4a, 0xd3, 0x6a, 0x14, 0xe6, 0x07, 0xce, 0xb7, 0xfe, 0xc3, 0x6c, + 0x3a, 0xdf, 0xdc, 0x00, 0x4a, 0xe5, 0x6e, 0xf3, 0x1a, 0x71, 0x56, 0x78, 0x6a, 0xa0, 0xdc, 0x23, + 0xce, 0x84, 0xa9, 0xdc, 0xed, 0x10, 0x98, 0x76, 0xcd, 0xe6, 0x57, 0x00, 0x15, 0x36, 0x8d, 0x4f, + 0x0f, 0xec, 0x5a, 0xff, 0xb5, 0x46, 0xda, 0x35, 0x3b, 0x80, 0xa2, 0x47, 0x20, 0x8b, 0xbb, 0x5e, + 0xc1, 0xc6, 0xcf, 0x99, 0x81, 0x5b, 0xfe, 0xd1, 0x87, 0x6b, 0x95, 0x09, 0x3c, 0xab, 0x75, 0xd7, + 0x50, 0x63, 0xc1, 0xe8, 0x29, 0x5a, 0x70, 0x49, 0xae, 0x50, 0x18, 0x68, 0x2c, 0x06, 0xdc, 0xe8, + 0xa3, 0xc6, 0x42, 0xeb, 0xa9, 0xa2, 0x6a, 0x6c, 0x98, 0x86, 0xcb, 0x0c, 0xfb, 0xc2, 0x40, 0x35, + 0xee, 0x7e, 0x81, 0x80, 0xaa, 0xb1, 0xc1, 0x21, 0x54, 0x8d, 0x5d, 0x71, 0x90, 0x2c, 0xc4, 0x71, + 0x61, 0xa0, 0x1a, 0x47, 0x9d, 0x38, 0x53, 0x35, 0x76, 0xc3, 0x70, 0xaa, 0xc6, 0xdc, 0x40, 0xf4, + 0xd0, 0x7d, 0x69, 0xa0, 0x1a, 0x0f, 0xbc, 0xdc, 0x41, 0xd5, 0x58, 0xed, 0xab, 0x44, 0xab, 0xd4, + 0x33, 0xa4, 0x1e, 0x91, 0x61, 0xee, 0x59, 0x85, 0x8b, 0x03, 0xd7, 0x9f, 0xde, 0xa3, 0xe4, 0x0a, + 0x73, 0x0b, 0x05, 0x8c, 0x1a, 0x32, 0xe6, 0x22, 0x2b, 0x6c, 0x97, 0xb9, 0xb0, 0x38, 0xd0, 0x90, + 0xf5, 0x6d, 0x36, 0x53, 0x43, 0x76, 0xe0, 0x03, 0xe9, 0x42, 0xc6, 0x77, 0x7c, 0x0a, 0x4b, 0x23, + 0x76, 0x16, 0x42, 0x0b, 0x19, 0xc7, 0x40, 0x2b, 0x90, 0xa1, 0x9e, 0xc2, 0x11, 0x33, 0x43, 0x97, + 0x06, 0xfa, 0xb8, 0x3d, 0xb9, 0xa1, 0x95, 0x09, 0x9c, 0xfe, 0x40, 0x80, 0xe8, 0xe7, 0x79, 0xd8, + 0x5d, 0x28, 0x0e, 0xfc, 0x7c, 0xd7, 0x46, 0x0b, 0xfd, 0x3c, 0xc7, 0x40, 0x1a, 0x9c, 0xe6, 0xb2, + 0x12, 0xb7, 0x41, 0x6c, 0x71, 0xed, 0xa2, 0x70, 0x99, 0x91, 0x1a, 0x18, 0xc4, 0x46, 0xde, 0x4c, + 0xa9, 0x4c, 0xe0, 0x79, 0xb5, 0xbf, 0x96, 0x4e, 0x78, 0xb1, 0xf4, 0xf0, 0xd0, 0xb7, 0x70, 0x65, + 0xe0, 0x84, 0x8f, 0xd8, 0x2c, 0xa0, 0x13, 0x5e, 0x0d, 0x81, 0xf9, 0x02, 0xa4, 0x2b, 0x8e, 0xc3, + 0xcf, 0x24, 0xae, 0x0e, 0x59, 0x80, 0x7a, 0x02, 0x60, 0xbe, 0x00, 0xe9, 0x35, 0x8e, 0x49, 0x09, + 0x69, 0x4d, 0xa2, 0xda, 0xc2, 0xcc, 0x5e, 0x1b, 0x48, 0xa8, 0xef, 0x56, 0x3f, 0x25, 0xa4, 0xf9, + 0x40, 0xba, 0x60, 0xdb, 0xde, 0x25, 0x51, 0xe1, 0x6d, 0x5e, 0x1f, 0xb8, 0x60, 0x47, 0xde, 0x65, + 0xa5, 0x0b, 0xb6, 0xdd, 0x55, 0x81, 0xbe, 0x00, 0xd3, 0xe2, 0xc6, 0x5d, 0xe1, 0xc6, 0x10, 0x1f, + 0x38, 0x1c, 0x15, 0xd3, 0x79, 0x2d, 0x70, 0xb8, 0x95, 0xe5, 0x17, 0xf6, 0xf8, 0xf0, 0x5e, 0x1e, + 0x62, 0x65, 0xfb, 0x02, 0x52, 0x6e, 0x65, 0x03, 0x30, 0xb5, 0xb2, 0x5c, 0x4f, 0xc5, 0x5a, 0x77, + 0x73, 0xa0, 0x95, 0xed, 0xcf, 0xea, 0xa4, 0x56, 0xf6, 0x83, 0x00, 0x4a, 0x47, 0xe6, 0xf0, 0x40, + 0xac, 0xf0, 0xca, 0xc0, 0x91, 0x75, 0x07, 0x94, 0x74, 0x64, 0x02, 0x87, 0x8a, 0x8d, 0x67, 0x30, + 0x71, 0x4e, 0xbf, 0x3a, 0x50, 0x6c, 0x7d, 0x71, 0x4b, 0xc5, 0x7b, 0xf1, 0x89, 0x73, 0xd8, 0x37, + 0x54, 0xb6, 0xb8, 0x60, 0x23, 0x38, 0xf5, 0xda, 0x70, 0x43, 0x15, 0x75, 0x77, 0xc8, 0x37, 0x54, + 0x5d, 0x95, 0xa5, 0x69, 0x91, 0x6f, 0xf6, 0x20, 0x95, 0x9e, 0x95, 0xe5, 0x07, 0xa9, 0xf4, 0x59, + 0xb9, 0xf0, 0x20, 0x95, 0x3e, 0x27, 0x2f, 0x3c, 0x48, 0xa5, 0xcf, 0xcb, 0x17, 0x8a, 0xff, 0x71, + 0x16, 0x72, 0x5e, 0x1c, 0xc3, 0xa3, 0x82, 0x3b, 0xe1, 0xa8, 0xe0, 0xe2, 0xa0, 0xa8, 0x40, 0x44, + 0x3e, 0x22, 0x2c, 0xb8, 0x13, 0x0e, 0x0b, 0x2e, 0x0e, 0x0a, 0x0b, 0x02, 0x1c, 0x1a, 0x17, 0xd4, + 0x07, 0xc5, 0x05, 0x2f, 0x8f, 0x11, 0x17, 0xf8, 0xa4, 0x7a, 0x03, 0x83, 0xd5, 0xfe, 0xc0, 0xe0, + 0xca, 0xf0, 0xc0, 0xc0, 0x27, 0x15, 0x8a, 0x0c, 0xde, 0xea, 0x89, 0x0c, 0x2e, 0x0d, 0x89, 0x0c, + 0x7c, 0x7c, 0x2f, 0x34, 0x58, 0x8f, 0x0c, 0x0d, 0xae, 0x8d, 0x0a, 0x0d, 0x7c, 0x3a, 0x5d, 0xb1, + 0xc1, 0xeb, 0x5d, 0xb1, 0xc1, 0xe2, 0xc0, 0xd8, 0xc0, 0xc7, 0xe6, 0xc1, 0xc1, 0x7b, 0x83, 0x83, + 0x83, 0x57, 0xc6, 0x0a, 0x0e, 0x7c, 0x7a, 0xfd, 0xd1, 0x41, 0x7d, 0x50, 0x74, 0xf0, 0xf2, 0x18, + 0xd1, 0x41, 0x20, 0xb8, 0x9e, 0xf0, 0xa0, 0x12, 0x15, 0x1e, 0x5c, 0x1d, 0x11, 0x1e, 0xf8, 0xd4, + 0xc2, 0xf1, 0x41, 0x25, 0x2a, 0x3e, 0xb8, 0x3a, 0x22, 0x3e, 0xe8, 0xa1, 0xc4, 0x03, 0x84, 0xcd, + 0xe8, 0x00, 0xe1, 0xfa, 0xc8, 0x00, 0xc1, 0xa7, 0xd6, 0x1d, 0x21, 0xdc, 0x0a, 0x45, 0x08, 0x2f, + 0x0d, 0x88, 0x10, 0x7c, 0x54, 0x1a, 0x22, 0x7c, 0xb1, 0x2f, 0x44, 0x28, 0x0e, 0x0b, 0x11, 0x7c, + 0x5c, 0x3f, 0x46, 0x78, 0x67, 0x40, 0x8c, 0x70, 0x63, 0x74, 0x8c, 0xe0, 0x13, 0xeb, 0x09, 0x12, + 0xd4, 0xa1, 0x41, 0xc2, 0x6b, 0x63, 0x06, 0x09, 0x3e, 0xf5, 0xa8, 0x28, 0xe1, 0x73, 0xdd, 0x51, + 0xc2, 0xd2, 0xe0, 0x28, 0xc1, 0x27, 0x23, 0xc2, 0x84, 0xf5, 0xc8, 0x30, 0xe1, 0xda, 0xa8, 0x30, + 0x21, 0x98, 0x7b, 0xe1, 0x38, 0x61, 0x33, 0x3a, 0x4e, 0xb8, 0x3e, 0x32, 0x4e, 0x08, 0xc4, 0xdf, + 0x15, 0x28, 0xac, 0x47, 0x06, 0x0a, 0xd7, 0x46, 0x05, 0x0a, 0x41, 0xe7, 0xc2, 0x91, 0xc2, 0xbb, + 0x03, 0x23, 0x85, 0x9b, 0xe3, 0x44, 0x0a, 0x3e, 0xd1, 0xbe, 0x50, 0xe1, 0xbd, 0xc1, 0xa1, 0xc2, + 0x2b, 0x63, 0x85, 0x0a, 0x81, 0xe9, 0xe8, 0x8b, 0x15, 0xbe, 0xd8, 0x17, 0x2b, 0x14, 0x87, 0xc5, + 0x0a, 0x81, 0x3e, 0x7b, 0xc1, 0x82, 0x3a, 0xd4, 0xb5, 0x7f, 0x6d, 0x4c, 0xd7, 0x3e, 0x50, 0xbe, + 0x08, 0xdf, 0x7e, 0x2d, 0xc2, 0xb7, 0xbf, 0x32, 0xdc, 0xb7, 0x0f, 0x96, 0x90, 0xc0, 0xb9, 0xaf, + 0x44, 0x39, 0xf7, 0x57, 0x47, 0x38, 0xf7, 0x81, 0x15, 0x0a, 0x79, 0xf7, 0x6f, 0xf5, 0x78, 0xf7, + 0x97, 0x46, 0x1e, 0x7c, 0x87, 0xdc, 0xfb, 0x52, 0xbf, 0x7b, 0x7f, 0x79, 0xa8, 0x7b, 0xef, 0x53, + 0x08, 0xfc, 0xfb, 0xb7, 0x7a, 0xfc, 0xfb, 0x4b, 0x43, 0xfc, 0xfb, 0xa0, 0x03, 0xc2, 0xc1, 0xd7, + 0x87, 0x3b, 0xf8, 0xcb, 0xe3, 0x3a, 0xf8, 0x3e, 0xe1, 0x48, 0x0f, 0x7f, 0x33, 0xda, 0xc3, 0xbf, + 0x3e, 0xe6, 0x19, 0x58, 0x9f, 0x8b, 0x5f, 0x89, 0x72, 0xf1, 0xaf, 0x8e, 0x70, 0xf1, 0xc3, 0x6b, + 0x88, 0xef, 0xe3, 0x57, 0xa2, 0x7c, 0xfc, 0xab, 0x23, 0x7c, 0xfc, 0x80, 0x52, 0xc8, 0xc9, 0xaf, + 0x0f, 0x72, 0xf2, 0x5f, 0x1e, 0xc3, 0xc9, 0x0f, 0xd6, 0xdd, 0x1e, 0x2f, 0xff, 0xed, 0x5e, 0x2f, + 0xbf, 0x38, 0xcc, 0xcb, 0x0f, 0x66, 0xa4, 0xe7, 0xe6, 0x6f, 0x46, 0xbb, 0xf9, 0xd7, 0x47, 0xba, + 0xf9, 0x61, 0x23, 0x19, 0xf2, 0xf3, 0xd7, 0x23, 0xfd, 0xfc, 0x6b, 0xa3, 0xfc, 0xfc, 0xc0, 0x48, + 0x86, 0x1d, 0xfd, 0xb7, 0x7b, 0x1d, 0xfd, 0xe2, 0x30, 0x47, 0x3f, 0x18, 0x9c, 0xe7, 0xe9, 0x57, + 0xa2, 0x3c, 0xfd, 0xab, 0x23, 0x3c, 0xfd, 0x40, 0x78, 0x21, 0x57, 0x5f, 0x1d, 0xea, 0xea, 0xbf, + 0x36, 0xa6, 0xab, 0xdf, 0x63, 0xb8, 0x9e, 0xcf, 0xd7, 0x7f, 0x90, 0x4a, 0x5f, 0x90, 0x5f, 0x2a, + 0xfe, 0xf5, 0x24, 0x4c, 0x55, 0xbc, 0x04, 0x8d, 0xd0, 0x0d, 0x69, 0xe9, 0x45, 0x6e, 0x48, 0xa3, + 0x55, 0xaa, 0x3e, 0x6c, 0x12, 0x0a, 0xef, 0x7f, 0xc8, 0x73, 0x03, 0x7d, 0x47, 0x64, 0x1e, 0xea, + 0x0b, 0xdc, 0x09, 0x41, 0xaf, 0x43, 0xae, 0xe3, 0x10, 0x5b, 0x69, 0xdb, 0x86, 0x65, 0x1b, 0x2e, + 0x4f, 0x40, 0x94, 0x4a, 0xf2, 0x47, 0xc7, 0x8b, 0x33, 0x3b, 0x0e, 0xb1, 0xb7, 0x05, 0x1c, 0xcf, + 0x74, 0x42, 0x25, 0xef, 0xc1, 0xe0, 0xc9, 0xf1, 0x1f, 0x0c, 0x7e, 0x07, 0x64, 0x9b, 0xa8, 0x7a, + 0xd7, 0x72, 0xc8, 0x6f, 0x12, 0x47, 0xaf, 0xdc, 0x2c, 0xd3, 0xd6, 0x6b, 0xc9, 0x6e, 0x14, 0xcf, + 0xda, 0xdd, 0x40, 0x74, 0x1b, 0x4e, 0xb7, 0xd4, 0x43, 0x7e, 0x57, 0xde, 0xf3, 0x30, 0x58, 0xa2, + 0x4a, 0x9a, 0xe5, 0x53, 0xa1, 0x96, 0x7a, 0xc8, 0x5e, 0x1f, 0xe6, 0x55, 0xec, 0xdd, 0xc1, 0xab, + 0x90, 0xd7, 0x0d, 0xc7, 0x35, 0x4c, 0xcd, 0x7b, 0x76, 0x87, 0x5f, 0x39, 0xce, 0x79, 0x50, 0xfe, + 0xfc, 0xcd, 0x4d, 0x98, 0x13, 0x39, 0x66, 0xc1, 0x7b, 0xc4, 0xcc, 0x97, 0x4e, 0xd3, 0x5e, 0xd0, + 0x8a, 0xe0, 0xf9, 0xe8, 0x32, 0xcc, 0x36, 0x54, 0x97, 0x1c, 0xa8, 0x47, 0x8a, 0x97, 0xec, 0x9b, + 0x65, 0x8f, 0x8f, 0x9c, 0x3f, 0x39, 0x5e, 0xcc, 0xdd, 0xe7, 0x55, 0x7d, 0x39, 0xbf, 0xb9, 0x46, + 0xa8, 0x42, 0x47, 0x2b, 0x30, 0xc3, 0x9e, 0x54, 0xb3, 0xf8, 0xcb, 0x7d, 0xc2, 0x43, 0x1e, 0x74, + 0x86, 0x21, 0xde, 0xf7, 0xc3, 0xec, 0x19, 0x36, 0xef, 0xb1, 0xbf, 0xeb, 0x30, 0xab, 0x3a, 0x47, + 0xa6, 0xc6, 0x38, 0x4c, 0x4c, 0xa7, 0xe3, 0x30, 0x17, 0x39, 0x8d, 0xf3, 0x0c, 0x5c, 0xf6, 0xa0, + 0xe2, 0xf5, 0x9e, 0xdf, 0x91, 0x60, 0xa6, 0x2b, 0xf1, 0xf2, 0xad, 0x9e, 0xa3, 0xba, 0x73, 0xd1, + 0xee, 0xf9, 0xa0, 0x1c, 0xa5, 0xb4, 0x90, 0x80, 0x97, 0x37, 0xb1, 0x38, 0xd8, 0xbd, 0x63, 0x01, + 0xb2, 0x97, 0x69, 0xe2, 0xa1, 0xbd, 0x99, 0xfa, 0xbd, 0xef, 0x2e, 0x4e, 0x14, 0x7f, 0x96, 0x84, + 0x5c, 0x77, 0x82, 0x65, 0xb5, 0xa7, 0x5f, 0x51, 0x26, 0xb1, 0x0b, 0x63, 0x79, 0xc8, 0xa3, 0x1e, + 0x99, 0xe0, 0x21, 0x36, 0xde, 0xcd, 0xa5, 0x21, 0x07, 0x92, 0xe1, 0x7e, 0x06, 0x88, 0x0b, 0x3f, + 0x4a, 0xf8, 0x33, 0x7f, 0x19, 0x26, 0xd9, 0x53, 0xe8, 0xa2, 0x6b, 0x51, 0xb7, 0x45, 0xd6, 0x68, + 0x3d, 0xe6, 0xcd, 0xa8, 0xa5, 0xa8, 0xbf, 0xd0, 0x5b, 0x0a, 0x3e, 0xe0, 0x05, 0x9e, 0xea, 0x7e, + 0xc1, 0x3b, 0xff, 0xec, 0xc0, 0xb1, 0xd9, 0x24, 0x9a, 0x2b, 0x5e, 0x54, 0xf7, 0x1e, 0xe4, 0xbe, + 0xd2, 0x4b, 0x42, 0xbc, 0xbf, 0xbe, 0x8c, 0xc5, 0xfb, 0xeb, 0xa1, 0x54, 0x96, 0xbc, 0x4f, 0x82, + 0x4d, 0x2c, 0x9e, 0xf0, 0x24, 0x44, 0xfd, 0x75, 0x09, 0x64, 0x36, 0x8d, 0xee, 0x11, 0xa2, 0xc7, + 0xa2, 0x85, 0x5e, 0x96, 0x4d, 0x62, 0xec, 0x2c, 0x9b, 0xa2, 0x0a, 0x79, 0xbf, 0x0f, 0xfc, 0x65, + 0xe2, 0x21, 0x4f, 0x61, 0xbc, 0xd0, 0xb5, 0xc3, 0xe2, 0x1f, 0x48, 0x30, 0xef, 0x7f, 0x83, 0xf9, + 0xf9, 0x3c, 0x2f, 0xfe, 0x05, 0xf2, 0x1e, 0x31, 0x7b, 0x75, 0x9d, 0xc6, 0x79, 0xec, 0x2a, 0xda, + 0x58, 0x1a, 0x84, 0xc4, 0xd9, 0x37, 0x88, 0xf8, 0x51, 0xaf, 0xd7, 0xd8, 0x7b, 0xec, 0xfc, 0xb7, + 0x53, 0xbc, 0x17, 0xe2, 0x00, 0x53, 0x56, 0x3a, 0xcc, 0xb1, 0xb4, 0xda, 0x1b, 0x26, 0x6b, 0x5c, + 0xfc, 0x3b, 0x29, 0x4c, 0xe8, 0x29, 0xf5, 0x1b, 0xee, 0x42, 0xf2, 0xa9, 0xda, 0x1c, 0x76, 0xf4, + 0xdf, 0xc5, 0x7a, 0x4c, 0x5b, 0xa3, 0x7b, 0xc0, 0xaf, 0xe3, 0xf0, 0xcb, 0x04, 0x89, 0xc1, 0xc1, + 0x5d, 0x3f, 0x4b, 0x71, 0x08, 0x13, 0xbd, 0xe1, 0x8d, 0x22, 0x39, 0xfa, 0xf3, 0xe1, 0x49, 0xfa, + 0x66, 0xea, 0xc3, 0xef, 0x2e, 0x4a, 0x37, 0x6b, 0x30, 0x1f, 0xb1, 0x08, 0xa1, 0x3c, 0x40, 0x79, + 0x6b, 0xb3, 0x56, 0xad, 0xd5, 0xd7, 0x36, 0xeb, 0xde, 0xa3, 0xef, 0x2b, 0xab, 0xca, 0xce, 0x66, + 0x79, 0x6b, 0x63, 0xa3, 0x5a, 0xaf, 0xaf, 0xad, 0xca, 0x12, 0x92, 0x61, 0xa6, 0xba, 0x19, 0x6a, + 0x27, 0xde, 0x7a, 0xbf, 0xf9, 0x0b, 0x00, 0xc1, 0x9b, 0x98, 0x94, 0xd6, 0xfa, 0xda, 0x63, 0xe5, + 0xd1, 0xca, 0xc3, 0x9d, 0xb5, 0x9a, 0x3c, 0x81, 0x10, 0xe4, 0x4b, 0x2b, 0xf5, 0x72, 0x45, 0xc1, + 0x6b, 0xb5, 0xed, 0xad, 0xcd, 0xda, 0x9a, 0x2c, 0x09, 0xbc, 0x0d, 0xc8, 0x86, 0xde, 0xd6, 0xa0, + 0x0d, 0xb7, 0x77, 0x6a, 0x15, 0xa5, 0x5e, 0xdd, 0x58, 0xab, 0xd5, 0x57, 0x36, 0xb6, 0xe5, 0x09, + 0x4a, 0x8c, 0xc1, 0x56, 0x4a, 0x5b, 0xb8, 0x2e, 0x4b, 0x7e, 0xb9, 0xbe, 0xb5, 0x53, 0xae, 0xf8, + 0x8f, 0xcd, 0xa7, 0xd2, 0x49, 0x39, 0x79, 0xd3, 0x82, 0xd3, 0x91, 0xd7, 0x95, 0x50, 0x16, 0xa6, + 0x77, 0x4c, 0xf6, 0x52, 0x83, 0x3c, 0x81, 0x72, 0xa1, 0x1b, 0x4b, 0xb2, 0x84, 0xd2, 0xfc, 0x5e, + 0x8a, 0x9c, 0x40, 0x53, 0x90, 0xa8, 0xdd, 0x95, 0x93, 0x68, 0x16, 0xb2, 0xa1, 0x6b, 0x3f, 0x72, + 0x0a, 0x65, 0xc4, 0x6d, 0x09, 0x79, 0x12, 0xcd, 0x04, 0xd7, 0x15, 0xe4, 0xa9, 0x9b, 0x97, 0x20, + 0x94, 0xcd, 0x8d, 0x00, 0xa6, 0x1e, 0xaa, 0x2e, 0x71, 0x5c, 0x79, 0x02, 0x4d, 0x43, 0x72, 0xa5, + 0xd9, 0x94, 0xa5, 0x3b, 0x3f, 0x90, 0x20, 0xed, 0xbd, 0x9f, 0x87, 0x1e, 0xc2, 0x24, 0x0f, 0xda, + 0x16, 0x07, 0x1b, 0x7b, 0x66, 0x2f, 0x16, 0x96, 0x46, 0xad, 0x06, 0xc5, 0x09, 0xf4, 0xae, 0xf8, + 0x6f, 0x0f, 0x54, 0xd2, 0xe8, 0xf2, 0x30, 0x3d, 0xf0, 0xa8, 0x0e, 0x57, 0x16, 0xaa, 0xdb, 0xc5, + 0x89, 0xcf, 0x48, 0xa5, 0x4b, 0x1f, 0xfe, 0xdb, 0xc5, 0x89, 0x0f, 0x4f, 0x2e, 0x4a, 0x3f, 0x39, + 0xb9, 0x28, 0xfd, 0xf3, 0xc9, 0x45, 0xe9, 0x5f, 0x4f, 0x2e, 0x4a, 0xbf, 0xf9, 0xef, 0x17, 0x27, + 0xde, 0x9b, 0x16, 0x58, 0xbb, 0x53, 0xec, 0x1f, 0x4e, 0xdc, 0xfd, 0x9f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x89, 0x8d, 0x59, 0xf4, 0x75, 0x63, 0x00, 0x00, } diff --git a/pkg/roachpb/api.proto b/pkg/roachpb/api.proto index 21ec4de28c75..767568022b03 100644 --- a/pkg/roachpb/api.proto +++ b/pkg/roachpb/api.proto @@ -734,10 +734,16 @@ message PushTxnRequest { // up-to-date value of the transaction record, but will be set or // merged as appropriate. storage.engine.enginepb.TxnMeta pushee_txn = 3 [(gogoproto.nullable) = false]; - // PushTo is the timestamp just after which PusheeTxn is attempted to be - // pushed. During conflict resolution, it should be set to the timestamp - // of the its conflicting write. + // PushTo is the timestamp which PusheeTxn should be pushed to. During + // conflict resolution, it should be set just after the timestamp of the + // conflicting read or write. util.hlc.Timestamp push_to = 4 [(gogoproto.nullable) = false]; + // InclusivePushTo is sent by nodes to specify that their PushTo timestamp + // is the timestamp they want the transaction to be pushed to, instead of + // the timestamp before the one they want the transaction to be pushed to. + // It is used to assist that field's migration. + // TODO(nvanbenschoten): Remove this field in 19.2. + bool inclusive_push_to = 9; // Now holds the timestamp used to compare the last heartbeat of the pushee // against. This is necessary since the request header's timestamp does not // necessarily advance with the node clock across retries and hence cannot diff --git a/pkg/settings/cluster/cockroach_versions.go b/pkg/settings/cluster/cockroach_versions.go index 58aa4b307c8c..c5bcc0baa0d5 100644 --- a/pkg/settings/cluster/cockroach_versions.go +++ b/pkg/settings/cluster/cockroach_versions.go @@ -65,6 +65,7 @@ const ( VersionCreateStats VersionDirectImport VersionSideloadedStorageNoReplicaID // see versionsSingleton for details + VersionPushTxnToInclusive // Add new versions here (step one of two). @@ -415,6 +416,7 @@ var versionsSingleton = keyedVersions([]keyedVersion{ Version: roachpb.Version{Major: 2, Minor: 1, Unstable: 7}, }, { + // VersionDirectImport is https://github.com/cockroachdb/cockroach/pull/34751. Key: VersionDirectImport, Version: roachpb.Version{Major: 2, Minor: 1, Unstable: 8}, }, @@ -436,6 +438,11 @@ var versionsSingleton = keyedVersions([]keyedVersion{ Key: VersionSideloadedStorageNoReplicaID, Version: roachpb.Version{Major: 2, Minor: 1, Unstable: 9}, }, + { + // VersionPushTxnToInclusive is https://github.com/cockroachdb/cockroach/pull/35297. + Key: VersionPushTxnToInclusive, + Version: roachpb.Version{Major: 2, Minor: 1, Unstable: 10}, + }, // Add new versions here (step two of two). diff --git a/pkg/storage/batcheval/cmd_push_txn.go b/pkg/storage/batcheval/cmd_push_txn.go index ea0b3c31f524..38a44b45113b 100644 --- a/pkg/storage/batcheval/cmd_push_txn.go +++ b/pkg/storage/batcheval/cmd_push_txn.go @@ -110,6 +110,7 @@ func PushTxn( if h.Txn != nil { return result.Result{}, ErrTransactionUnsupported } + if args.Now == (hlc.Timestamp{}) { return result.Result{}, errors.Errorf("the field Now must be provided") } @@ -183,7 +184,7 @@ func PushTxn( // If we're trying to move the timestamp forward, and it's already // far enough forward, return success. - if args.PushType == roachpb.PUSH_TIMESTAMP && args.PushTo.Less(reply.PusheeTxn.Timestamp) { + if args.PushType == roachpb.PUSH_TIMESTAMP && !reply.PusheeTxn.Timestamp.Less(args.PushTo) { // Trivial noop. return result.Result{}, nil } @@ -252,7 +253,7 @@ func PushTxn( // timestamp cache. If the transaction record was not already present // then we rely on the read timestamp cache to prevent the record from // ever being written with a timestamp beneath this timestamp. - reply.PusheeTxn.Timestamp = args.PushTo.Next() + reply.PusheeTxn.Timestamp.Forward(args.PushTo) default: return result.Result{}, errors.Errorf("unexpected push type: %v", args.PushType) } diff --git a/pkg/storage/intentresolver/contention_queue.go b/pkg/storage/intentresolver/contention_queue.go index bab0d2754c56..8d3d3a3f4c33 100644 --- a/pkg/storage/intentresolver/contention_queue.go +++ b/pkg/storage/intentresolver/contention_queue.go @@ -261,11 +261,12 @@ func (cq *contentionQueue) add( RequestHeader: roachpb.RequestHeader{ Key: pusheeTxn.Key, }, - PusherTxn: getPusherTxn(h), - PusheeTxn: *pusheeTxn, - PushTo: h.Timestamp, - Now: cq.clock.Now(), - PushType: roachpb.PUSH_ABORT, + PusherTxn: getPusherTxn(h), + PusheeTxn: *pusheeTxn, + PushTo: h.Timestamp.Next(), + InclusivePushTo: true, + Now: cq.clock.Now(), + PushType: roachpb.PUSH_ABORT, } b := &client.Batch{} b.AddRawRequest(pushReq) diff --git a/pkg/storage/intentresolver/intent_resolver.go b/pkg/storage/intentresolver/intent_resolver.go index 5663f40ce029..16553c1c1a55 100644 --- a/pkg/storage/intentresolver/intent_resolver.go +++ b/pkg/storage/intentresolver/intent_resolver.go @@ -433,9 +433,10 @@ func (ir *IntentResolver) MaybePushTransactions( RequestHeader: roachpb.RequestHeader{ Key: pushTxn.Key, }, - PusherTxn: pusherTxn, - PusheeTxn: pushTxn, - PushTo: h.Timestamp, + PusherTxn: pusherTxn, + PusheeTxn: pushTxn, + PushTo: h.Timestamp.Next(), + InclusivePushTo: true, // The timestamp is used by PushTxn for figuring out whether the // transaction is abandoned. If we used the argument's timestamp // here, we would run into busy loops because that timestamp @@ -704,9 +705,10 @@ func (ir *IntentResolver) CleanupTxnIntentsOnGCAsync( PusherTxn: roachpb.Transaction{ TxnMeta: enginepb.TxnMeta{Priority: roachpb.MaxTxnPriority}, }, - PusheeTxn: txn.TxnMeta, - Now: now, - PushType: roachpb.PUSH_ABORT, + PusheeTxn: txn.TxnMeta, + Now: now, + PushType: roachpb.PUSH_ABORT, + InclusivePushTo: true, }) pushed = true if err := ir.db.Run(ctx, b); err != nil { diff --git a/pkg/storage/replica.go b/pkg/storage/replica.go index 85044f138fc3..ded6cf1180b9 100644 --- a/pkg/storage/replica.go +++ b/pkg/storage/replica.go @@ -1377,9 +1377,10 @@ func (r *Replica) maybeWatchForMerge(ctx context.Context) error { PusherTxn: roachpb.Transaction{ TxnMeta: enginepb.TxnMeta{Priority: roachpb.MinTxnPriority}, }, - PusheeTxn: intent.Txn, - Now: r.Clock().Now(), - PushType: roachpb.PUSH_ABORT, + PusheeTxn: intent.Txn, + Now: r.Clock().Now(), + PushType: roachpb.PUSH_ABORT, + InclusivePushTo: true, }) if pErr != nil { select { diff --git a/pkg/storage/replica_test.go b/pkg/storage/replica_test.go index 4dca107ae969..a36607d13297 100644 --- a/pkg/storage/replica_test.go +++ b/pkg/storage/replica_test.go @@ -1573,7 +1573,7 @@ func pushTxnArgs( Key: pushee.Key, }, Now: pusher.Timestamp, - PushTo: pusher.Timestamp, + PushTo: pusher.Timestamp.Next(), PusherTxn: *pusher, PusheeTxn: pushee.TxnMeta, PushType: pushType, @@ -10285,7 +10285,7 @@ func TestCreateTxnRecord(t *testing.T) { }, expTxn: func(txn *roachpb.Transaction, now hlc.Timestamp) roachpb.TransactionRecord { record := txn.AsRecord() - record.Timestamp.Forward(now.Add(0, 1)) + record.Timestamp.Forward(now) return record }, }, @@ -10303,7 +10303,7 @@ func TestCreateTxnRecord(t *testing.T) { }, expTxn: func(txn *roachpb.Transaction, now hlc.Timestamp) roachpb.TransactionRecord { record := txn.AsRecord() - record.Timestamp.Forward(now.Add(0, 1)) + record.Timestamp.Forward(now) record.LastHeartbeat.Forward(now.Add(0, 5)) return record }, diff --git a/pkg/storage/store.go b/pkg/storage/store.go index 1e605ed54d79..d06f78adbcbe 100644 --- a/pkg/storage/store.go +++ b/pkg/storage/store.go @@ -2721,6 +2721,26 @@ func (s *Store) Send( return nil, roachpb.NewError(err) } + // TODO(nvanbenschoten): Remove this all in 19.2. + if !s.cfg.Settings.Version.IsActive(cluster.VersionPushTxnToInclusive) { + for _, union := range ba.Requests { + if pushReq, ok := union.GetInner().(*roachpb.PushTxnRequest); ok { + // While here, correct the request's PushTo arg. Before + // VersionPushTxnToInclusive, pushers would provide _their_ + // timestamp instead of one logical tick past their timestamp + // for the PushTo arg. Handle this by bumping the PushTo arg. + // We only do this if the InclusivePushTo arg is false, which + // allows us to distinguish between 2.1 nodes and 19.1. nodes. + // Since we only observe this field when the cluster version + // is not active, we don't need to send it or observe it in + // 19.2. + if !pushReq.InclusivePushTo { + pushReq.PushTo = pushReq.PushTo.Next() + } + } + } + } + if s.cfg.TestingKnobs.ClockBeforeSend != nil { s.cfg.TestingKnobs.ClockBeforeSend(s.cfg.Clock, ba) } diff --git a/pkg/storage/store_test.go b/pkg/storage/store_test.go index b10aa63c65e1..656dbb973e68 100644 --- a/pkg/storage/store_test.go +++ b/pkg/storage/store_test.go @@ -1543,7 +1543,7 @@ func TestStoreResolveWriteIntent(t *testing.T) { return nil } if exp, act := manual.UnixNano(), pr.PushTo.WallTime; exp > act { - return roachpb.NewError(fmt.Errorf("expected PushTo >= WallTime, but got %d < %d:\n%+v", act, exp, pr)) + return roachpb.NewError(fmt.Errorf("expected PushTo > WallTime, but got %d < %d:\n%+v", act, exp, pr)) } return nil } diff --git a/pkg/storage/txnwait/queue_test.go b/pkg/storage/txnwait/queue_test.go index 1baef5b5778d..6d2bde7fdf83 100644 --- a/pkg/storage/txnwait/queue_test.go +++ b/pkg/storage/txnwait/queue_test.go @@ -101,7 +101,7 @@ func TestIsPushed(t *testing.T) { {roachpb.PUSH_TIMESTAMP, makeTS(10, 1), roachpb.ABORTED, hlc.Timestamp{}, true}, {roachpb.PUSH_TIMESTAMP, makeTS(10, 1), roachpb.COMMITTED, hlc.Timestamp{}, true}, {roachpb.PUSH_TIMESTAMP, makeTS(10, 1), roachpb.PENDING, makeTS(10, 0), false}, - {roachpb.PUSH_TIMESTAMP, makeTS(10, 1), roachpb.PENDING, makeTS(10, 1), false}, + {roachpb.PUSH_TIMESTAMP, makeTS(10, 1), roachpb.PENDING, makeTS(10, 1), true}, {roachpb.PUSH_TIMESTAMP, makeTS(10, 1), roachpb.PENDING, makeTS(10, 2), true}, } for _, test := range testCases { diff --git a/pkg/storage/txnwait/txnqueue.go b/pkg/storage/txnwait/txnqueue.go index e169bb52e63b..2e4599acbdd7 100644 --- a/pkg/storage/txnwait/txnqueue.go +++ b/pkg/storage/txnwait/txnqueue.go @@ -60,7 +60,7 @@ func ShouldPushImmediately(req *roachpb.PushTxnRequest) bool { // for transactions with pushed timestamps. func isPushed(req *roachpb.PushTxnRequest, txn *roachpb.Transaction) bool { return (txn.Status != roachpb.PENDING || - (req.PushType == roachpb.PUSH_TIMESTAMP && req.PushTo.Less(txn.Timestamp))) + (req.PushType == roachpb.PUSH_TIMESTAMP && !txn.Timestamp.Less(req.PushTo))) } // TxnExpiration computes the timestamp after which the transaction will be From 8c81eddbd813e136e712f6f7aadbcfe3bd5a3649 Mon Sep 17 00:00:00 2001 From: Nathan VanBenschoten Date: Thu, 28 Feb 2019 20:28:09 -0500 Subject: [PATCH 2/3] storage: use header timestamp for PushTxnRequest This commit deprecates PushTxnRequest.Now and gives its responsibility to the batch header timestamp. The biggest reason to do this is so that PushTxn requests properly update their receiver's clock. This is critical because a PushTxn request can result in a timestamp cache entry to be created with a value up to this time, so for safety, we need to ensure that the leaseholder updates its clock at least to this time _before_ evaluating the request. Otherwise, a lease transfer could miss the request's effect on the timestamp cache and result in a lost push/abort. The comment on PushTxnRequest.Now mentioned that the header timestamp couldn't be used because the header's timestamp "does not necessarily advance with the node clock across retries and hence cannot detect abandoned transactions." This dates back all the way to #1102. I haven't been able to piece together what kind of retries this is referring to, but I'm almost positive that they don't still apply. Release note: None --- pkg/roachpb/api.pb.go | 843 +++++++++--------- pkg/roachpb/api.proto | 12 +- pkg/storage/batcheval/cmd_push_txn.go | 19 +- pkg/storage/client_split_test.go | 2 +- .../intentresolver/contention_queue.go | 11 +- pkg/storage/intentresolver/intent_resolver.go | 33 +- pkg/storage/replica.go | 12 +- pkg/storage/replica_test.go | 38 +- pkg/storage/replica_tscache.go | 10 - pkg/storage/store.go | 10 +- 10 files changed, 491 insertions(+), 499 deletions(-) diff --git a/pkg/roachpb/api.pb.go b/pkg/roachpb/api.pb.go index ca41803ccadd..82414b914f4b 100644 --- a/pkg/roachpb/api.pb.go +++ b/pkg/roachpb/api.pb.go @@ -69,7 +69,7 @@ func (x ReadConsistencyType) String() string { return proto.EnumName(ReadConsistencyType_name, int32(x)) } func (ReadConsistencyType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{0} + return fileDescriptor_api_e2607f120b04f650, []int{0} } // ScanFormat is an enumeration of the available response formats for MVCCScan @@ -97,7 +97,7 @@ func (x ScanFormat) String() string { return proto.EnumName(ScanFormat_name, int32(x)) } func (ScanFormat) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{1} + return fileDescriptor_api_e2607f120b04f650, []int{1} } // PushTxnType determines what action to take when pushing a transaction. @@ -128,7 +128,7 @@ func (x PushTxnType) String() string { return proto.EnumName(PushTxnType_name, int32(x)) } func (PushTxnType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{2} + return fileDescriptor_api_e2607f120b04f650, []int{2} } type ExportStorageProvider int32 @@ -166,7 +166,7 @@ func (x ExportStorageProvider) String() string { return proto.EnumName(ExportStorageProvider_name, int32(x)) } func (ExportStorageProvider) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{3} + return fileDescriptor_api_e2607f120b04f650, []int{3} } type MVCCFilter int32 @@ -189,7 +189,7 @@ func (x MVCCFilter) String() string { return proto.EnumName(MVCCFilter_name, int32(x)) } func (MVCCFilter) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{4} + return fileDescriptor_api_e2607f120b04f650, []int{4} } type ResponseHeader_ResumeReason int32 @@ -221,7 +221,7 @@ func (x ResponseHeader_ResumeReason) String() string { return proto.EnumName(ResponseHeader_ResumeReason_name, int32(x)) } func (ResponseHeader_ResumeReason) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{2, 0} + return fileDescriptor_api_e2607f120b04f650, []int{2, 0} } type QueryIntentRequest_IfMissingBehavior int32 @@ -257,7 +257,7 @@ func (x QueryIntentRequest_IfMissingBehavior) String() string { return proto.EnumName(QueryIntentRequest_IfMissingBehavior_name, int32(x)) } func (QueryIntentRequest_IfMissingBehavior) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{50, 0} + return fileDescriptor_api_e2607f120b04f650, []int{50, 0} } // RangeInfo describes a range which executed a request. It contains @@ -273,7 +273,7 @@ func (m *RangeInfo) Reset() { *m = RangeInfo{} } func (m *RangeInfo) String() string { return proto.CompactTextString(m) } func (*RangeInfo) ProtoMessage() {} func (*RangeInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{0} + return fileDescriptor_api_e2607f120b04f650, []int{0} } func (m *RangeInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -318,7 +318,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_99a1f43a94ccaa24, []int{1} + return fileDescriptor_api_e2607f120b04f650, []int{1} } func (m *RequestHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -378,7 +378,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_99a1f43a94ccaa24, []int{2} + return fileDescriptor_api_e2607f120b04f650, []int{2} } func (m *ResponseHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -414,7 +414,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_99a1f43a94ccaa24, []int{3} + return fileDescriptor_api_e2607f120b04f650, []int{3} } func (m *GetRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -454,7 +454,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_99a1f43a94ccaa24, []int{4} + return fileDescriptor_api_e2607f120b04f650, []int{4} } func (m *GetResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -499,7 +499,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_99a1f43a94ccaa24, []int{5} + return fileDescriptor_api_e2607f120b04f650, []int{5} } func (m *PutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -535,7 +535,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_99a1f43a94ccaa24, []int{6} + return fileDescriptor_api_e2607f120b04f650, []int{6} } func (m *PutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -591,7 +591,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_99a1f43a94ccaa24, []int{7} + return fileDescriptor_api_e2607f120b04f650, []int{7} } func (m *ConditionalPutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -628,7 +628,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_99a1f43a94ccaa24, []int{8} + return fileDescriptor_api_e2607f120b04f650, []int{8} } func (m *ConditionalPutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -676,7 +676,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_99a1f43a94ccaa24, []int{9} + return fileDescriptor_api_e2607f120b04f650, []int{9} } func (m *InitPutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -712,7 +712,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_99a1f43a94ccaa24, []int{10} + return fileDescriptor_api_e2607f120b04f650, []int{10} } func (m *InitPutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -754,7 +754,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_99a1f43a94ccaa24, []int{11} + return fileDescriptor_api_e2607f120b04f650, []int{11} } func (m *IncrementRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -793,7 +793,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_99a1f43a94ccaa24, []int{12} + return fileDescriptor_api_e2607f120b04f650, []int{12} } func (m *IncrementResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -829,7 +829,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_99a1f43a94ccaa24, []int{13} + return fileDescriptor_api_e2607f120b04f650, []int{13} } func (m *DeleteRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -865,7 +865,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_99a1f43a94ccaa24, []int{14} + return fileDescriptor_api_e2607f120b04f650, []int{14} } func (m *DeleteResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -916,7 +916,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_99a1f43a94ccaa24, []int{15} + return fileDescriptor_api_e2607f120b04f650, []int{15} } func (m *DeleteRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -955,7 +955,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_99a1f43a94ccaa24, []int{16} + return fileDescriptor_api_e2607f120b04f650, []int{16} } func (m *DeleteRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1004,7 +1004,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_99a1f43a94ccaa24, []int{17} + return fileDescriptor_api_e2607f120b04f650, []int{17} } func (m *ClearRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1040,7 +1040,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_99a1f43a94ccaa24, []int{18} + return fileDescriptor_api_e2607f120b04f650, []int{18} } func (m *ClearRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1111,7 +1111,7 @@ func (m *ScanOptions) Reset() { *m = ScanOptions{} } func (m *ScanOptions) String() string { return proto.CompactTextString(m) } func (*ScanOptions) ProtoMessage() {} func (*ScanOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{19} + return fileDescriptor_api_e2607f120b04f650, []int{19} } func (m *ScanOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1153,7 +1153,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_99a1f43a94ccaa24, []int{20} + return fileDescriptor_api_e2607f120b04f650, []int{20} } func (m *ScanRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1202,7 +1202,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_99a1f43a94ccaa24, []int{21} + return fileDescriptor_api_e2607f120b04f650, []int{21} } func (m *ScanResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1244,7 +1244,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_99a1f43a94ccaa24, []int{22} + return fileDescriptor_api_e2607f120b04f650, []int{22} } func (m *ReverseScanRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1293,7 +1293,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_99a1f43a94ccaa24, []int{23} + return fileDescriptor_api_e2607f120b04f650, []int{23} } func (m *ReverseScanResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1334,7 +1334,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_99a1f43a94ccaa24, []int{24} + return fileDescriptor_api_e2607f120b04f650, []int{24} } func (m *CheckConsistencyRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1371,7 +1371,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_99a1f43a94ccaa24, []int{25} + return fileDescriptor_api_e2607f120b04f650, []int{25} } func (m *CheckConsistencyResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1421,7 +1421,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_99a1f43a94ccaa24, []int{26} + return fileDescriptor_api_e2607f120b04f650, []int{26} } func (m *RecomputeStatsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1459,7 +1459,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_99a1f43a94ccaa24, []int{27} + return fileDescriptor_api_e2607f120b04f650, []int{27} } func (m *RecomputeStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1495,7 +1495,7 @@ func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest func (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) } func (*BeginTransactionRequest) ProtoMessage() {} func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{28} + return fileDescriptor_api_e2607f120b04f650, []int{28} } func (m *BeginTransactionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1531,7 +1531,7 @@ func (m *BeginTransactionResponse) Reset() { *m = BeginTransactionRespon func (m *BeginTransactionResponse) String() string { return proto.CompactTextString(m) } func (*BeginTransactionResponse) ProtoMessage() {} func (*BeginTransactionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{29} + return fileDescriptor_api_e2607f120b04f650, []int{29} } func (m *BeginTransactionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1605,7 +1605,7 @@ func (m *EndTransactionRequest) Reset() { *m = EndTransactionRequest{} } func (m *EndTransactionRequest) String() string { return proto.CompactTextString(m) } func (*EndTransactionRequest) ProtoMessage() {} func (*EndTransactionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{30} + return fileDescriptor_api_e2607f120b04f650, []int{30} } func (m *EndTransactionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1651,7 +1651,7 @@ func (m *EndTransactionResponse) Reset() { *m = EndTransactionResponse{} func (m *EndTransactionResponse) String() string { return proto.CompactTextString(m) } func (*EndTransactionResponse) ProtoMessage() {} func (*EndTransactionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{31} + return fileDescriptor_api_e2607f120b04f650, []int{31} } func (m *EndTransactionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1707,7 +1707,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_99a1f43a94ccaa24, []int{32} + return fileDescriptor_api_e2607f120b04f650, []int{32} } func (m *AdminSplitRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1744,7 +1744,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_99a1f43a94ccaa24, []int{33} + return fileDescriptor_api_e2607f120b04f650, []int{33} } func (m *AdminSplitResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1788,7 +1788,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_99a1f43a94ccaa24, []int{34} + return fileDescriptor_api_e2607f120b04f650, []int{34} } func (m *AdminMergeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1825,7 +1825,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_99a1f43a94ccaa24, []int{35} + return fileDescriptor_api_e2607f120b04f650, []int{35} } func (m *AdminMergeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1865,7 +1865,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_99a1f43a94ccaa24, []int{36} + return fileDescriptor_api_e2607f120b04f650, []int{36} } func (m *AdminTransferLeaseRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1900,7 +1900,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_99a1f43a94ccaa24, []int{37} + return fileDescriptor_api_e2607f120b04f650, []int{37} } func (m *AdminTransferLeaseResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1940,7 +1940,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_99a1f43a94ccaa24, []int{38} + return fileDescriptor_api_e2607f120b04f650, []int{38} } func (m *AdminChangeReplicasRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1975,7 +1975,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_99a1f43a94ccaa24, []int{39} + return fileDescriptor_api_e2607f120b04f650, []int{39} } func (m *AdminChangeReplicasResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2014,7 +2014,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_99a1f43a94ccaa24, []int{40} + return fileDescriptor_api_e2607f120b04f650, []int{40} } func (m *AdminRelocateRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2049,7 +2049,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_99a1f43a94ccaa24, []int{41} + return fileDescriptor_api_e2607f120b04f650, []int{41} } func (m *AdminRelocateRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2090,7 +2090,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_99a1f43a94ccaa24, []int{42} + return fileDescriptor_api_e2607f120b04f650, []int{42} } func (m *HeartbeatTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2129,7 +2129,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_99a1f43a94ccaa24, []int{43} + return fileDescriptor_api_e2607f120b04f650, []int{43} } func (m *HeartbeatTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2174,7 +2174,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_99a1f43a94ccaa24, []int{44} + return fileDescriptor_api_e2607f120b04f650, []int{44} } func (m *GCRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2210,7 +2210,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_99a1f43a94ccaa24, []int{44, 0} + return fileDescriptor_api_e2607f120b04f650, []int{44, 0} } func (m *GCRequest_GCKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2246,7 +2246,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_99a1f43a94ccaa24, []int{45} + return fileDescriptor_api_e2607f120b04f650, []int{45} } func (m *GCResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2306,11 +2306,13 @@ type PushTxnRequest struct { // It is used to assist that field's migration. // TODO(nvanbenschoten): Remove this field in 19.2. InclusivePushTo bool `protobuf:"varint,9,opt,name=inclusive_push_to,json=inclusivePushTo,proto3" json:"inclusive_push_to,omitempty"` - // Now holds the timestamp used to compare the last heartbeat of the pushee - // against. This is necessary since the request header's timestamp does not - // necessarily advance with the node clock across retries and hence cannot - // detect abandoned transactions. - Now hlc.Timestamp `protobuf:"bytes,5,opt,name=now,proto3" json:"now"` + // DeprecatedNow holds the timestamp used to compare the last heartbeat of the + // pushee against. + // + // The field remains for compatibility with 2.1 nodes. Users should set the + // same value for this field and the batch header timestamp. + // TODO(nvanbenschoten): Remove this field in 19.2. + DeprecatedNow hlc.Timestamp `protobuf:"bytes,5,opt,name=deprecated_now,json=deprecatedNow,proto3" json:"deprecated_now"` // Readers set this to PUSH_TIMESTAMP to move pushee_txn's provisional // commit timestamp forward. Writers set this to PUSH_ABORT to request // that pushee_txn be aborted if possible. Inconsistent readers set @@ -2328,7 +2330,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_99a1f43a94ccaa24, []int{46} + return fileDescriptor_api_e2607f120b04f650, []int{46} } func (m *PushTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2373,7 +2375,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_99a1f43a94ccaa24, []int{47} + return fileDescriptor_api_e2607f120b04f650, []int{47} } func (m *PushTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2419,7 +2421,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_99a1f43a94ccaa24, []int{48} + return fileDescriptor_api_e2607f120b04f650, []int{48} } func (m *QueryTxnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2460,7 +2462,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_99a1f43a94ccaa24, []int{49} + return fileDescriptor_api_e2607f120b04f650, []int{49} } func (m *QueryTxnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2522,7 +2524,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_99a1f43a94ccaa24, []int{50} + return fileDescriptor_api_e2607f120b04f650, []int{50} } func (m *QueryIntentRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2560,7 +2562,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_99a1f43a94ccaa24, []int{51} + return fileDescriptor_api_e2607f120b04f650, []int{51} } func (m *QueryIntentResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2606,7 +2608,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_99a1f43a94ccaa24, []int{52} + return fileDescriptor_api_e2607f120b04f650, []int{52} } func (m *ResolveIntentRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2643,7 +2645,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_99a1f43a94ccaa24, []int{53} + return fileDescriptor_api_e2607f120b04f650, []int{53} } func (m *ResolveIntentResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2693,7 +2695,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_99a1f43a94ccaa24, []int{54} + return fileDescriptor_api_e2607f120b04f650, []int{54} } func (m *ResolveIntentRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2730,7 +2732,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_99a1f43a94ccaa24, []int{55} + return fileDescriptor_api_e2607f120b04f650, []int{55} } func (m *ResolveIntentRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2769,7 +2771,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_99a1f43a94ccaa24, []int{56} + return fileDescriptor_api_e2607f120b04f650, []int{56} } func (m *MergeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2805,7 +2807,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_99a1f43a94ccaa24, []int{57} + return fileDescriptor_api_e2607f120b04f650, []int{57} } func (m *MergeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2852,7 +2854,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_99a1f43a94ccaa24, []int{58} + return fileDescriptor_api_e2607f120b04f650, []int{58} } func (m *TruncateLogRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2888,7 +2890,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_99a1f43a94ccaa24, []int{59} + return fileDescriptor_api_e2607f120b04f650, []int{59} } func (m *TruncateLogResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2934,7 +2936,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_99a1f43a94ccaa24, []int{60} + return fileDescriptor_api_e2607f120b04f650, []int{60} } func (m *RequestLeaseRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2985,7 +2987,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_99a1f43a94ccaa24, []int{61} + return fileDescriptor_api_e2607f120b04f650, []int{61} } func (m *TransferLeaseRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3024,7 +3026,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_99a1f43a94ccaa24, []int{62} + return fileDescriptor_api_e2607f120b04f650, []int{62} } func (m *LeaseInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3063,7 +3065,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_99a1f43a94ccaa24, []int{63} + return fileDescriptor_api_e2607f120b04f650, []int{63} } func (m *LeaseInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3100,7 +3102,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_99a1f43a94ccaa24, []int{64} + return fileDescriptor_api_e2607f120b04f650, []int{64} } func (m *RequestLeaseResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3145,7 +3147,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_99a1f43a94ccaa24, []int{65} + return fileDescriptor_api_e2607f120b04f650, []int{65} } func (m *ComputeChecksumRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3184,7 +3186,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_99a1f43a94ccaa24, []int{66} + return fileDescriptor_api_e2607f120b04f650, []int{66} } func (m *ComputeChecksumResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3225,7 +3227,7 @@ func (m *ExportStorage) Reset() { *m = ExportStorage{} } func (m *ExportStorage) String() string { return proto.CompactTextString(m) } func (*ExportStorage) ProtoMessage() {} func (*ExportStorage) Descriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{67} + return fileDescriptor_api_e2607f120b04f650, []int{67} } func (m *ExportStorage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3261,7 +3263,7 @@ func (m *ExportStorage_LocalFilePath) Reset() { *m = ExportStorage_Local func (m *ExportStorage_LocalFilePath) String() string { return proto.CompactTextString(m) } func (*ExportStorage_LocalFilePath) ProtoMessage() {} func (*ExportStorage_LocalFilePath) Descriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{67, 0} + return fileDescriptor_api_e2607f120b04f650, []int{67, 0} } func (m *ExportStorage_LocalFilePath) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3296,7 +3298,7 @@ func (m *ExportStorage_Http) Reset() { *m = ExportStorage_Http{} } func (m *ExportStorage_Http) String() string { return proto.CompactTextString(m) } func (*ExportStorage_Http) ProtoMessage() {} func (*ExportStorage_Http) Descriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{67, 1} + return fileDescriptor_api_e2607f120b04f650, []int{67, 1} } func (m *ExportStorage_Http) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3337,7 +3339,7 @@ func (m *ExportStorage_S3) Reset() { *m = ExportStorage_S3{} } func (m *ExportStorage_S3) String() string { return proto.CompactTextString(m) } func (*ExportStorage_S3) ProtoMessage() {} func (*ExportStorage_S3) Descriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{67, 2} + return fileDescriptor_api_e2607f120b04f650, []int{67, 2} } func (m *ExportStorage_S3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3378,7 +3380,7 @@ func (m *ExportStorage_GCS) Reset() { *m = ExportStorage_GCS{} } func (m *ExportStorage_GCS) String() string { return proto.CompactTextString(m) } func (*ExportStorage_GCS) ProtoMessage() {} func (*ExportStorage_GCS) Descriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{67, 3} + return fileDescriptor_api_e2607f120b04f650, []int{67, 3} } func (m *ExportStorage_GCS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3416,7 +3418,7 @@ func (m *ExportStorage_Azure) Reset() { *m = ExportStorage_Azure{} } func (m *ExportStorage_Azure) String() string { return proto.CompactTextString(m) } func (*ExportStorage_Azure) ProtoMessage() {} func (*ExportStorage_Azure) Descriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{67, 4} + return fileDescriptor_api_e2607f120b04f650, []int{67, 4} } func (m *ExportStorage_Azure) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3457,7 +3459,7 @@ func (m *ExportStorage_Workload) Reset() { *m = ExportStorage_Workload{} func (m *ExportStorage_Workload) String() string { return proto.CompactTextString(m) } func (*ExportStorage_Workload) ProtoMessage() {} func (*ExportStorage_Workload) Descriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{67, 5} + return fileDescriptor_api_e2607f120b04f650, []int{67, 5} } func (m *ExportStorage_Workload) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3499,7 +3501,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_99a1f43a94ccaa24, []int{68} + return fileDescriptor_api_e2607f120b04f650, []int{68} } func (m *WriteBatchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3535,7 +3537,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_99a1f43a94ccaa24, []int{69} + return fileDescriptor_api_e2607f120b04f650, []int{69} } func (m *WriteBatchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3582,7 +3584,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_99a1f43a94ccaa24, []int{70} + return fileDescriptor_api_e2607f120b04f650, []int{70} } func (m *ExportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3620,7 +3622,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_99a1f43a94ccaa24, []int{71} + return fileDescriptor_api_e2607f120b04f650, []int{71} } func (m *BulkOpSummary) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3658,7 +3660,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_99a1f43a94ccaa24, []int{72} + return fileDescriptor_api_e2607f120b04f650, []int{72} } func (m *ExportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3699,7 +3701,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_99a1f43a94ccaa24, []int{72, 0} + return fileDescriptor_api_e2607f120b04f650, []int{72, 0} } func (m *ExportResponse_File) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3751,7 +3753,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_99a1f43a94ccaa24, []int{73} + return fileDescriptor_api_e2607f120b04f650, []int{73} } func (m *ImportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3788,7 +3790,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_99a1f43a94ccaa24, []int{73, 0} + return fileDescriptor_api_e2607f120b04f650, []int{73, 0} } func (m *ImportRequest_File) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3826,7 +3828,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_99a1f43a94ccaa24, []int{73, 1} + return fileDescriptor_api_e2607f120b04f650, []int{73, 1} } func (m *ImportRequest_TableRekey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3863,7 +3865,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_99a1f43a94ccaa24, []int{74} + return fileDescriptor_api_e2607f120b04f650, []int{74} } func (m *ImportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3903,7 +3905,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_99a1f43a94ccaa24, []int{75} + return fileDescriptor_api_e2607f120b04f650, []int{75} } func (m *AdminScatterRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3940,7 +3942,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_99a1f43a94ccaa24, []int{76} + return fileDescriptor_api_e2607f120b04f650, []int{76} } func (m *AdminScatterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3975,7 +3977,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_99a1f43a94ccaa24, []int{76, 0} + return fileDescriptor_api_e2607f120b04f650, []int{76, 0} } func (m *AdminScatterResponse_Range) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4013,7 +4015,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_99a1f43a94ccaa24, []int{77} + return fileDescriptor_api_e2607f120b04f650, []int{77} } func (m *AddSSTableRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4049,7 +4051,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_99a1f43a94ccaa24, []int{78} + return fileDescriptor_api_e2607f120b04f650, []int{78} } func (m *AddSSTableResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4095,7 +4097,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_99a1f43a94ccaa24, []int{79} + return fileDescriptor_api_e2607f120b04f650, []int{79} } func (m *RefreshRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4131,7 +4133,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_99a1f43a94ccaa24, []int{80} + return fileDescriptor_api_e2607f120b04f650, []int{80} } func (m *RefreshResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4173,7 +4175,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_99a1f43a94ccaa24, []int{81} + return fileDescriptor_api_e2607f120b04f650, []int{81} } func (m *RefreshRangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4209,7 +4211,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_99a1f43a94ccaa24, []int{82} + return fileDescriptor_api_e2607f120b04f650, []int{82} } func (m *RefreshRangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4257,7 +4259,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_99a1f43a94ccaa24, []int{83} + return fileDescriptor_api_e2607f120b04f650, []int{83} } func (m *SubsumeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4304,7 +4306,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_99a1f43a94ccaa24, []int{84} + return fileDescriptor_api_e2607f120b04f650, []int{84} } func (m *SubsumeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4341,7 +4343,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_99a1f43a94ccaa24, []int{85} + return fileDescriptor_api_e2607f120b04f650, []int{85} } func (m *RangeStatsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4382,7 +4384,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_99a1f43a94ccaa24, []int{86} + return fileDescriptor_api_e2607f120b04f650, []int{86} } func (m *RangeStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4464,7 +4466,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_99a1f43a94ccaa24, []int{87} + return fileDescriptor_api_e2607f120b04f650, []int{87} } func (m *RequestUnion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5823,7 +5825,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_99a1f43a94ccaa24, []int{88} + return fileDescriptor_api_e2607f120b04f650, []int{88} } func (m *ResponseUnion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7172,7 +7174,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_99a1f43a94ccaa24, []int{89} + return fileDescriptor_api_e2607f120b04f650, []int{89} } func (m *Header) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7210,7 +7212,7 @@ type BatchRequest struct { func (m *BatchRequest) Reset() { *m = BatchRequest{} } func (*BatchRequest) ProtoMessage() {} func (*BatchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{90} + return fileDescriptor_api_e2607f120b04f650, []int{90} } func (m *BatchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7249,7 +7251,7 @@ type BatchResponse struct { func (m *BatchResponse) Reset() { *m = BatchResponse{} } func (*BatchResponse) ProtoMessage() {} func (*BatchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_api_99a1f43a94ccaa24, []int{91} + return fileDescriptor_api_e2607f120b04f650, []int{91} } func (m *BatchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7310,7 +7312,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_99a1f43a94ccaa24, []int{91, 0} + return fileDescriptor_api_e2607f120b04f650, []int{91, 0} } func (m *BatchResponse_Header) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7348,7 +7350,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_99a1f43a94ccaa24, []int{92} + return fileDescriptor_api_e2607f120b04f650, []int{92} } func (m *RangeFeedRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7386,7 +7388,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_99a1f43a94ccaa24, []int{93} + return fileDescriptor_api_e2607f120b04f650, []int{93} } func (m *RangeFeedValue) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7426,7 +7428,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_99a1f43a94ccaa24, []int{94} + return fileDescriptor_api_e2607f120b04f650, []int{94} } func (m *RangeFeedCheckpoint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7465,7 +7467,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_99a1f43a94ccaa24, []int{95} + return fileDescriptor_api_e2607f120b04f650, []int{95} } func (m *RangeFeedError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7504,7 +7506,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_99a1f43a94ccaa24, []int{96} + return fileDescriptor_api_e2607f120b04f650, []int{96} } func (m *RangeFeedEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8388,7 +8390,7 @@ func (this *PushTxnRequest) Equal(that interface{}) bool { if this.InclusivePushTo != that1.InclusivePushTo { return false } - if !this.Now.Equal(&that1.Now) { + if !this.DeprecatedNow.Equal(&that1.DeprecatedNow) { return false } if this.PushType != that1.PushType { @@ -11173,8 +11175,8 @@ func (m *PushTxnRequest) MarshalTo(dAtA []byte) (int, error) { i += n63 dAtA[i] = 0x2a i++ - i = encodeVarintApi(dAtA, i, uint64(m.Now.Size())) - n64, err := m.Now.MarshalTo(dAtA[i:]) + i = encodeVarintApi(dAtA, i, uint64(m.DeprecatedNow.Size())) + n64, err := m.DeprecatedNow.MarshalTo(dAtA[i:]) if err != nil { return 0, err } @@ -15627,7 +15629,7 @@ func (m *PushTxnRequest) Size() (n int) { n += 1 + l + sovApi(uint64(l)) l = m.PushTo.Size() n += 1 + l + sovApi(uint64(l)) - l = m.Now.Size() + l = m.DeprecatedNow.Size() n += 1 + l + sovApi(uint64(l)) if m.PushType != 0 { n += 1 + sovApi(uint64(m.PushType)) @@ -23001,7 +23003,7 @@ func (m *PushTxnRequest) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Now", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DeprecatedNow", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23025,7 +23027,7 @@ func (m *PushTxnRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Now.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.DeprecatedNow.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -33586,18 +33588,18 @@ var ( ErrIntOverflowApi = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("roachpb/api.proto", fileDescriptor_api_99a1f43a94ccaa24) } +func init() { proto.RegisterFile("roachpb/api.proto", fileDescriptor_api_e2607f120b04f650) } -var fileDescriptor_api_99a1f43a94ccaa24 = []byte{ - // 6233 bytes of a gzipped FileDescriptorProto +var fileDescriptor_api_e2607f120b04f650 = []byte{ + // 6252 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3d, 0x4b, 0x6c, 0x23, 0xc9, 0x75, 0x6a, 0x92, 0x92, 0xc8, 0x47, 0x91, 0x6a, 0x95, 0xe6, 0xc3, 0xd1, 0xcc, 0x8e, 0x34, 0x9c, 0xef, 0xce, 0xee, 0x6a, 0x3c, 0x33, 0xde, 0xac, 0xb3, 0x6b, 0xaf, 0x2d, 0x52, 0x9a, 0x21, 0x47, 0xa3, 0xcf, 0x16, 0xa9, 0x59, 0xcf, 0x3a, 0x9b, 0x76, 0xab, 0xbb, 0x44, 0xb5, 0x87, 0xec, 0xe6, 0x76, 0x37, 0x47, 0xd2, 0x00, 0x41, 0x02, 0xe7, 0xe0, 0xc0, 0x30, 0x8c, 0x20, 0x09, 0x82, 0xc0, 0xf9, 0x19, 0xf0, 0x21, 0x40, 0x82, 0x18, 0x31, 0x60, 0x20, 0x40, 0x80, 0xc4, 0x97, 0x1c, 0x16, - 0x46, 0x0e, 0x4e, 0x80, 0x04, 0x41, 0x0e, 0x42, 0xa2, 0x1c, 0x6c, 0xf8, 0x92, 0x43, 0x0e, 0x01, - 0xf6, 0x10, 0x04, 0xf5, 0xe9, 0x0f, 0xc9, 0xe6, 0x67, 0x66, 0x7b, 0x91, 0x0d, 0x72, 0x12, 0xeb, + 0x46, 0x0e, 0x4e, 0x80, 0x04, 0x41, 0x0e, 0x42, 0xa2, 0x1c, 0x6c, 0xe4, 0x92, 0x43, 0x0e, 0x01, + 0xf6, 0x90, 0x04, 0xf5, 0xe9, 0x0f, 0xc9, 0xe6, 0x67, 0x66, 0x7b, 0x91, 0x0d, 0x72, 0x12, 0xeb, 0x55, 0xbd, 0xd7, 0x55, 0xef, 0xbd, 0x7a, 0xf5, 0x5e, 0xd5, 0xab, 0x12, 0xcc, 0xd9, 0x96, 0xaa, 0xed, 0xb7, 0x77, 0x6f, 0xa9, 0x6d, 0x63, 0xb9, 0x6d, 0x5b, 0xae, 0x85, 0xe6, 0x34, 0x4b, 0x7b, 0xc2, 0xc0, 0xcb, 0xa2, 0x72, 0x01, 0x79, 0xad, 0x74, 0xd5, 0x55, 0x79, 0xb3, 0x85, 0x53, 0x1e, @@ -33606,7 +33608,7 @@ var fileDescriptor_api_99a1f43a94ccaa24 = []byte{ 0xda, 0x5c, 0x1e, 0xd6, 0xe6, 0xae, 0x68, 0x54, 0xe8, 0xb8, 0x46, 0xf3, 0xd6, 0x7e, 0x53, 0xbb, 0xe5, 0x1a, 0x2d, 0xe2, 0xb8, 0x6a, 0xab, 0x2d, 0x6a, 0x96, 0x58, 0x8d, 0x6b, 0xab, 0x9a, 0x61, 0x36, 0x6e, 0xd9, 0x44, 0xb3, 0x6c, 0x9d, 0xe8, 0x8a, 0xd3, 0x56, 0x4d, 0xaf, 0xcb, 0x0d, 0xab, - 0x61, 0xb1, 0x9f, 0xb7, 0xe8, 0x2f, 0x0e, 0x2d, 0xfe, 0x2a, 0x64, 0xb0, 0x6a, 0x36, 0x48, 0xd5, + 0x61, 0xb1, 0x9f, 0xb7, 0xe8, 0x2f, 0x0e, 0x2d, 0xfe, 0x32, 0x64, 0xb0, 0x6a, 0x36, 0x48, 0xd5, 0xdc, 0xb3, 0xd0, 0xe7, 0x21, 0xa5, 0x13, 0x47, 0x2b, 0x48, 0x4b, 0xd2, 0x8d, 0xec, 0x9d, 0xe2, 0x72, 0x1f, 0x2f, 0x96, 0x59, 0xdb, 0x55, 0xe2, 0x68, 0xb6, 0xd1, 0x76, 0x2d, 0xbb, 0x94, 0xfa, 0xf0, 0x78, 0x71, 0x02, 0x33, 0x2c, 0xf4, 0x59, 0x98, 0x6c, 0x12, 0xd5, 0x21, 0x85, 0x04, 0x43, @@ -33628,12 +33630,12 @@ var fileDescriptor_api_99a1f43a94ccaa24 = []byte{ 0x41, 0x1e, 0xaf, 0xd5, 0x76, 0x36, 0xd6, 0x94, 0x9d, 0xcd, 0xf5, 0xcd, 0xad, 0x77, 0x37, 0xe5, 0x09, 0x74, 0x0a, 0x64, 0x01, 0x5b, 0x5f, 0x7b, 0xac, 0x3c, 0xac, 0x6e, 0x54, 0xeb, 0xb2, 0x84, 0xce, 0xc1, 0x69, 0x01, 0xc5, 0x2b, 0x9b, 0xf7, 0xd7, 0x94, 0xd2, 0xd6, 0xce, 0xe6, 0xea, 0x0a, - 0x7e, 0x2c, 0x27, 0x16, 0x52, 0xbf, 0xf1, 0xbd, 0x8b, 0x13, 0xc5, 0x47, 0x00, 0xf7, 0x89, 0x2b, + 0x7e, 0x2c, 0x27, 0x16, 0x52, 0xbf, 0xf6, 0xbd, 0x8b, 0x13, 0xc5, 0x47, 0x00, 0xf7, 0x89, 0x2b, 0xb4, 0x01, 0x95, 0x60, 0x6a, 0x9f, 0xf5, 0x46, 0xa8, 0xe3, 0x52, 0x64, 0xb7, 0x43, 0x9a, 0x53, 0x4a, 0x53, 0x0e, 0xfc, 0xe4, 0x78, 0x51, 0xc2, 0x02, 0x93, 0x8b, 0xbc, 0xf8, 0x23, 0x09, 0xb2, 0x8c, 0x30, 0x1f, 0x23, 0x2a, 0xf7, 0x50, 0xbe, 0x34, 0x92, 0x21, 0xfd, 0xa4, 0xd1, 0x32, 0x4c, 0x3e, 0x55, 0x9b, 0x9d, 0x61, 0xda, 0xfe, 0x88, 0xd6, 0x63, 0xde, 0x0c, 0xbd, 0x05, 0x33, 0x86, - 0xe9, 0x12, 0xd3, 0x55, 0x38, 0x5a, 0x72, 0x04, 0x5a, 0x96, 0xb7, 0x66, 0x85, 0xe2, 0x5f, 0x49, + 0xe9, 0x12, 0xd3, 0x55, 0x38, 0x5a, 0x72, 0x04, 0x5a, 0x96, 0xb7, 0x66, 0x85, 0xe2, 0x5f, 0x48, 0x00, 0xdb, 0x9d, 0x38, 0x59, 0x43, 0x67, 0xeb, 0x58, 0xfd, 0xf7, 0x66, 0x2b, 0x1f, 0xc5, 0x19, 0x98, 0x32, 0xcc, 0xa6, 0x61, 0xf2, 0xfe, 0xa7, 0xb1, 0x28, 0xa1, 0x53, 0x30, 0xb9, 0xdb, 0x34, 0x4c, 0x9d, 0xa9, 0x7f, 0x1a, 0xf3, 0x82, 0x60, 0x3f, 0x86, 0x2c, 0xeb, 0x7b, 0x8c, 0xdc, 0x2f, @@ -33641,14 +33643,14 @@ var fileDescriptor_api_99a1f43a94ccaa24 = []byte{ 0x87, 0x0c, 0x39, 0x6c, 0x8f, 0x29, 0xde, 0x34, 0x39, 0x6c, 0xb3, 0x5f, 0xd1, 0xac, 0x43, 0x9f, 0x85, 0xb3, 0x6a, 0xb3, 0x69, 0x1d, 0x28, 0xc6, 0x9e, 0xa2, 0x5b, 0xc4, 0x51, 0x4c, 0xcb, 0x55, 0xc8, 0xa1, 0xe1, 0xb8, 0xcc, 0x54, 0xa4, 0xf1, 0x3c, 0xab, 0xae, 0xee, 0xad, 0x5a, 0xc4, 0xd9, - 0xb4, 0xdc, 0x35, 0x5a, 0x25, 0x18, 0xfe, 0x3e, 0x9c, 0xe9, 0xe5, 0x4d, 0x9c, 0xbc, 0xff, 0x07, + 0xb4, 0xdc, 0x35, 0x5a, 0x25, 0x18, 0xfe, 0x3e, 0x9c, 0xe9, 0xe5, 0x4d, 0x9c, 0xbc, 0xff, 0x3b, 0x09, 0xf2, 0x55, 0xd3, 0x70, 0x3f, 0x15, 0x4c, 0xf7, 0xb9, 0x97, 0x0c, 0x73, 0xef, 0x26, 0xc8, 0x7b, 0xaa, 0xd1, 0xdc, 0x32, 0xeb, 0x56, 0x6b, 0xd7, 0x71, 0x2d, 0x93, 0x38, 0x82, 0xbd, 0x7d, 0x70, 0xc1, 0xb3, 0x47, 0x30, 0xeb, 0x8f, 0x29, 0x4e, 0x66, 0x3d, 0x03, 0xb9, 0x6a, 0x6a, 0x36, 0x69, 0x11, 0x33, 0x56, 0x6e, 0x5d, 0x80, 0x8c, 0xe1, 0xd1, 0x65, 0x1c, 0x4b, 0xe2, 0x00, 0x20, 0xc6, 0xd4, 0x81, 0xb9, 0xd0, 0xb7, 0xe3, 0x34, 0x7e, 0xe7, 0x21, 0x63, 0x92, 0x03, 0x25, 0x90, 0x57, 0x12, 0xa7, 0x4d, 0x72, 0xc0, 0x8d, 0xd5, 0x63, 0xc8, 0xad, 0x92, 0x26, 0x71, 0x49, 0xfc, - 0x96, 0x7c, 0x07, 0xf2, 0x1e, 0xe9, 0x38, 0x85, 0xf4, 0x87, 0x12, 0x20, 0x41, 0x97, 0xae, 0x9e, + 0x96, 0x7c, 0x07, 0xf2, 0x1e, 0xe9, 0x38, 0x85, 0xf4, 0xfb, 0x12, 0x20, 0x41, 0x97, 0xae, 0x9e, 0x71, 0xca, 0x69, 0x91, 0x7a, 0x07, 0x6e, 0xc7, 0x36, 0xf9, 0x32, 0xcf, 0xb5, 0x14, 0x38, 0x88, 0xad, 0xf4, 0x81, 0x45, 0x4d, 0x85, 0x2d, 0xaa, 0xef, 0xad, 0x50, 0x3f, 0xe5, 0x00, 0xe6, 0xbb, 0xba, 0x17, 0xaf, 0x28, 0x53, 0xac, 0x67, 0x89, 0xa5, 0x64, 0xd8, 0xa1, 0x62, 0xc0, 0xe2, 0xfb, @@ -33659,23 +33661,23 @@ var fileDescriptor_api_99a1f43a94ccaa24 = []byte{ 0xfd, 0x69, 0xba, 0x8e, 0xd0, 0x73, 0x68, 0x19, 0x26, 0xe6, 0x10, 0x31, 0x8a, 0xef, 0x49, 0xfc, 0x5b, 0x71, 0xaa, 0xcd, 0xdb, 0x90, 0x75, 0x34, 0xd5, 0x54, 0xf6, 0x2c, 0xbb, 0xa5, 0xba, 0x4c, 0x35, 0xf2, 0x77, 0x5e, 0x8a, 0x72, 0x2a, 0x35, 0xd5, 0xbc, 0xc7, 0x1a, 0x61, 0x70, 0xfc, 0xdf, - 0x61, 0xed, 0x79, 0x90, 0x4a, 0x27, 0xe5, 0x54, 0xf1, 0xbf, 0x24, 0x98, 0xe1, 0xbd, 0x8c, 0x53, + 0x61, 0xed, 0x79, 0x90, 0x4a, 0x27, 0xe5, 0x54, 0xf1, 0x3f, 0x25, 0x98, 0xe1, 0xbd, 0x8c, 0x53, 0x7b, 0x5e, 0x87, 0x94, 0x6d, 0x1d, 0x70, 0xed, 0xc9, 0xde, 0x39, 0x1f, 0x41, 0x62, 0x9d, 0x1c, 0x85, 0xcd, 0x36, 0x6b, 0x8e, 0x4a, 0x20, 0xdc, 0x1b, 0x85, 0x61, 0x27, 0xc7, 0xc5, 0x06, 0x8e, 0x85, 0x29, 0x8d, 0xeb, 0x30, 0xbb, 0xab, 0xba, 0xda, 0x3e, 0x95, 0x0f, 0xeb, 0x24, 0x35, 0xf1, - 0xc9, 0x1b, 0x33, 0x38, 0xcf, 0xc0, 0x5e, 0xd7, 0x9d, 0xe2, 0x9f, 0x4a, 0x80, 0x30, 0x79, 0x4a, - 0x6c, 0x87, 0x7c, 0xfa, 0xc5, 0xf4, 0xdf, 0x12, 0xcc, 0x77, 0x75, 0xf6, 0xff, 0x9b, 0xb4, 0x7e, - 0x4d, 0x82, 0xb3, 0xe5, 0x7d, 0xa2, 0x3d, 0x29, 0x5b, 0xa6, 0x63, 0x38, 0x2e, 0x31, 0xb5, 0xa3, + 0xc9, 0x1b, 0x33, 0x38, 0xcf, 0xc0, 0x5e, 0xd7, 0x9d, 0xe2, 0x1f, 0x4b, 0x80, 0x30, 0x79, 0x4a, + 0x6c, 0x87, 0x7c, 0xfa, 0xc5, 0xf4, 0x5f, 0x12, 0xcc, 0x77, 0x75, 0xf6, 0xff, 0x9b, 0xb4, 0x7e, + 0x45, 0x82, 0xb3, 0xe5, 0x7d, 0xa2, 0x3d, 0x29, 0x5b, 0xa6, 0x63, 0x38, 0x2e, 0x31, 0xb5, 0xa3, 0x38, 0x45, 0x76, 0x1e, 0x32, 0x07, 0x86, 0xbb, 0xaf, 0xe8, 0xc6, 0xde, 0x1e, 0x9b, 0xd2, 0x69, 0x9c, 0xa6, 0x80, 0x55, 0x63, 0x6f, 0x4f, 0x4c, 0x68, 0x05, 0x0a, 0xfd, 0x3d, 0x88, 0xd7, 0x29, 0x38, 0x8d, 0x89, 0x66, 0xb5, 0xda, 0x1d, 0x97, 0xd4, 0x5c, 0xd5, 0x75, 0xe2, 0x1c, 0xe0, 0x59, 0x98, 0xd6, 0xed, 0x23, 0xc5, 0xee, 0x98, 0x62, 0x78, 0x53, 0xba, 0x7d, 0x84, 0x3b, 0xa6, 0x18, - 0xdc, 0x5f, 0x4a, 0x70, 0xa6, 0xf7, 0xe3, 0x71, 0xea, 0xd8, 0x97, 0x21, 0xab, 0xea, 0x3a, 0xd1, + 0xdc, 0x9f, 0x4b, 0x70, 0xa6, 0xf7, 0xe3, 0x71, 0xea, 0xd8, 0x97, 0x21, 0xab, 0xea, 0x3a, 0xd1, 0x15, 0x9d, 0x34, 0x5d, 0x55, 0x38, 0x73, 0xb7, 0x43, 0x94, 0xc4, 0x3e, 0xc7, 0x32, 0xdf, 0xe0, 0x58, 0xf6, 0xf6, 0x39, 0x96, 0x37, 0x1e, 0x95, 0xcb, 0xac, 0x3f, 0xab, 0x14, 0xd1, 0x53, 0x21, 0x46, 0x8b, 0x41, 0x8a, 0x1a, 0x9c, 0x2d, 0x91, 0x86, 0x61, 0x86, 0x23, 0xf0, 0xd8, 0x97, 0x24, - 0x05, 0x0a, 0xfd, 0x1f, 0x89, 0x53, 0xf6, 0x7f, 0x9f, 0x84, 0xd3, 0x6b, 0xa6, 0xfe, 0xc9, 0x0c, - 0x82, 0x7a, 0x13, 0x9a, 0xd5, 0x6a, 0x19, 0xae, 0x27, 0x7b, 0x5e, 0x42, 0xbf, 0x08, 0x69, 0x9d, + 0x05, 0x0a, 0xfd, 0x1f, 0x89, 0x53, 0xf6, 0x7f, 0x9b, 0x84, 0xd3, 0x6b, 0xa6, 0xfe, 0xc9, 0x0c, + 0x82, 0x7a, 0x13, 0x9a, 0xd5, 0x6a, 0x19, 0xae, 0x27, 0x7b, 0x5e, 0x42, 0x3f, 0x0f, 0x69, 0x9d, 0xa8, 0xba, 0x1f, 0xb9, 0x65, 0xbb, 0xac, 0x54, 0xc7, 0x35, 0x9a, 0xcb, 0xfb, 0x4d, 0x6d, 0xb9, 0xee, 0xed, 0x2a, 0x61, 0xbf, 0x39, 0xfa, 0x2a, 0x9c, 0xa5, 0xf3, 0xd8, 0x36, 0xd5, 0xa6, 0xc2, 0xa9, 0x29, 0xae, 0x6d, 0x34, 0x1a, 0xc4, 0x16, 0x7b, 0x1d, 0x37, 0x22, 0xfa, 0x59, 0x15, 0x18, @@ -33685,21 +33687,21 @@ var fileDescriptor_api_99a1f43a94ccaa24 = []byte{ 0xca, 0x9f, 0x1c, 0x2f, 0x02, 0xe6, 0xe0, 0xdb, 0xdb, 0x65, 0xea, 0x75, 0xf1, 0xdf, 0x6d, 0x0d, 0xdd, 0x00, 0xd9, 0xb4, 0x14, 0x9b, 0xec, 0xd9, 0xc4, 0xd9, 0x17, 0x9f, 0x4d, 0x33, 0x8e, 0xe5, 0x4d, 0x0b, 0x73, 0x30, 0x27, 0x7d, 0x06, 0xa6, 0xda, 0x96, 0xe1, 0x58, 0x66, 0x21, 0xc3, 0x39, - 0xca, 0x4b, 0xbe, 0xe9, 0x9e, 0x96, 0xd3, 0xc5, 0xdf, 0x96, 0xe0, 0x4c, 0xaf, 0x4c, 0xe3, 0x9c, + 0xca, 0x4b, 0xbe, 0xe9, 0x9e, 0x96, 0xd3, 0xc5, 0xdf, 0x94, 0xe0, 0x4c, 0xaf, 0x4c, 0xe3, 0x9c, 0x53, 0x37, 0x40, 0xb6, 0x4c, 0xa2, 0xb4, 0xf7, 0x55, 0x87, 0x08, 0x19, 0x08, 0x6f, 0x31, 0x6f, - 0x99, 0x64, 0x9b, 0x82, 0x39, 0x47, 0xbb, 0x96, 0x92, 0x5f, 0x97, 0x60, 0x6e, 0x45, 0x6f, 0x19, + 0x99, 0x64, 0x9b, 0x82, 0x39, 0x47, 0xbb, 0x96, 0x92, 0x5f, 0x95, 0x60, 0x6e, 0x45, 0x6f, 0x19, 0x66, 0xad, 0xdd, 0x34, 0x62, 0x0d, 0x3e, 0xae, 0x40, 0xc6, 0xa1, 0x34, 0xd9, 0x4e, 0x5c, 0xa2, 0x7b, 0x27, 0x2e, 0xcd, 0x6a, 0xd6, 0xc9, 0x51, 0xe0, 0xe3, 0x85, 0x3b, 0x11, 0xe7, 0x54, 0x7a, 0x5f, 0x8c, 0x6f, 0x83, 0xd8, 0x9f, 0x90, 0x77, 0x1a, 0x26, 0x1f, 0x67, 0xcf, 0xbf, 0x29, 0xc1, 0x39, 0x46, 0x9b, 0xa9, 0xcc, 0x1e, 0xb1, 0xd9, 0xc6, 0x68, 0x9c, 0x22, 0xba, 0x0c, 0x53, 0xae, 0x6a, 0x37, 0x08, 0x37, 0x04, 0x93, 0xa5, 0xec, 0x47, 0xc7, 0x8b, 0xd3, 0x35, 0xd7, 0xb2, 0x49, - 0x75, 0x15, 0x8b, 0x2a, 0x31, 0x4e, 0x15, 0x16, 0xa2, 0xfa, 0x12, 0xe7, 0x78, 0xff, 0x53, 0x12, + 0x75, 0x15, 0x8b, 0x2a, 0x31, 0x4e, 0x15, 0x16, 0xa2, 0xfa, 0x12, 0xe7, 0x78, 0xff, 0x43, 0x12, 0xdf, 0x28, 0xef, 0x73, 0x57, 0xbf, 0xdd, 0x34, 0x34, 0x35, 0xd6, 0x65, 0x6f, 0x0d, 0xb2, 0x1a, 0x23, 0xae, 0xb8, 0x47, 0x6d, 0x1e, 0x94, 0xe6, 0xef, 0x5c, 0x89, 0x24, 0xc4, 0x3e, 0xce, 0x7b, 0x52, 0x3f, 0x6a, 0x13, 0x0c, 0x9a, 0xff, 0x1b, 0xad, 0xc2, 0x34, 0x67, 0x8e, 0xe7, 0xe7, 0x0c, 0x21, 0x41, 0x27, 0x7a, 0x9d, 0x35, 0x16, 0x36, 0xc9, 0x43, 0x15, 0x8c, 0xdd, 0x85, 0xf3, 0x91, - 0x83, 0x8e, 0x93, 0xb3, 0x7f, 0xe6, 0x69, 0x12, 0x26, 0x4d, 0x4b, 0x53, 0x3f, 0x81, 0x08, 0x36, - 0xc4, 0x91, 0xc4, 0xc7, 0xe5, 0x88, 0xa7, 0x6a, 0x3d, 0x9d, 0x8d, 0x93, 0x21, 0xbf, 0x2b, 0xc1, + 0x83, 0x8e, 0x93, 0xb3, 0x7f, 0xe2, 0x69, 0x12, 0x26, 0x4d, 0x4b, 0x53, 0x3f, 0x81, 0x08, 0x36, + 0xc4, 0x91, 0xc4, 0xc7, 0xe5, 0x88, 0xa7, 0x6a, 0x3d, 0x9d, 0x8d, 0x93, 0x21, 0xbf, 0x2d, 0xc1, 0x7c, 0x85, 0xa8, 0xb6, 0xbb, 0x4b, 0x54, 0xb7, 0x7e, 0x18, 0xeb, 0xea, 0xfa, 0x3a, 0x24, 0x4d, 0xeb, 0x40, 0xf8, 0x34, 0xc3, 0x17, 0x50, 0x31, 0x7e, 0xda, 0x5e, 0x8c, 0xfd, 0x2b, 0x70, 0xaa, 0xbb, 0x5f, 0x71, 0x8e, 0xfa, 0x07, 0x49, 0xc8, 0xdc, 0x2f, 0xc7, 0x39, 0xd6, 0xcf, 0x8b, 0x7d, @@ -33709,275 +33711,276 @@ var fileDescriptor_api_99a1f43a94ccaa24 = []byte{ 0x8e, 0x43, 0x6e, 0x81, 0x92, 0x3b, 0x39, 0x5e, 0x44, 0xf5, 0x43, 0x93, 0x2e, 0xe4, 0xf7, 0xcb, 0x75, 0x8f, 0x00, 0x46, 0xae, 0x80, 0x69, 0x3e, 0x6c, 0xe1, 0x09, 0x4c, 0xb2, 0x51, 0x78, 0xc7, 0x4f, 0x52, 0xc4, 0xf1, 0x13, 0x1d, 0x94, 0xf7, 0x81, 0xe7, 0x51, 0x82, 0x00, 0x8b, 0xab, 0x82, - 0x50, 0x88, 0x77, 0x00, 0x28, 0x0b, 0xe3, 0x54, 0x83, 0x9f, 0x27, 0x21, 0xbf, 0xdd, 0x71, 0xf6, - 0x63, 0xd6, 0xfb, 0x32, 0x40, 0xbb, 0xe3, 0xec, 0x13, 0x5b, 0x71, 0x0f, 0x4d, 0x31, 0xf2, 0x11, - 0x67, 0x63, 0xde, 0xd0, 0x39, 0x5e, 0xfd, 0xd0, 0x44, 0x5b, 0x82, 0x08, 0x51, 0x82, 0x03, 0xb6, - 0x9b, 0x63, 0xc4, 0x05, 0xf5, 0x43, 0x73, 0x83, 0xf8, 0x01, 0x01, 0x27, 0x48, 0x28, 0xc1, 0xcf, - 0xc3, 0x34, 0x2d, 0x28, 0xae, 0xf5, 0x3c, 0x1a, 0x36, 0x45, 0x71, 0xea, 0x96, 0x37, 0x97, 0x27, - 0x9f, 0x6f, 0x2e, 0xa3, 0xb7, 0x20, 0xc3, 0x3f, 0x4a, 0x17, 0x99, 0x29, 0xb6, 0xc8, 0x44, 0x71, - 0x42, 0x08, 0x81, 0x2d, 0x2f, 0x69, 0xf6, 0x45, 0xba, 0xb8, 0x9c, 0x82, 0xc9, 0x3d, 0xcb, 0xd6, - 0x08, 0x3b, 0x88, 0x4b, 0x63, 0x5e, 0x40, 0x37, 0x61, 0xce, 0x30, 0xb5, 0x66, 0xc7, 0x31, 0x9e, - 0x12, 0xc5, 0x1b, 0x11, 0x77, 0x36, 0x67, 0xfd, 0x0a, 0x46, 0xd0, 0xf2, 0xbd, 0xce, 0xb4, 0x9c, - 0x29, 0xfe, 0xbe, 0x04, 0xb3, 0xbe, 0xb0, 0xe3, 0x74, 0x37, 0xcb, 0x5d, 0x92, 0x7a, 0x7e, 0x71, - 0x53, 0xe9, 0x14, 0xbf, 0x9f, 0x80, 0xd9, 0x77, 0x3a, 0xc4, 0x3e, 0x8a, 0x59, 0x17, 0x4b, 0xfc, - 0x80, 0x36, 0xf1, 0x82, 0xfa, 0xc3, 0x8e, 0x6c, 0xaf, 0xc1, 0xec, 0x81, 0x6a, 0xb8, 0xca, 0x9e, - 0x65, 0x2b, 0x9d, 0xb6, 0xae, 0xba, 0xde, 0x71, 0x56, 0x8e, 0x82, 0xef, 0x59, 0xf6, 0x0e, 0x03, - 0x22, 0x02, 0xe8, 0x89, 0x69, 0x1d, 0x98, 0x0a, 0x05, 0x1b, 0x66, 0x83, 0xf2, 0x43, 0xec, 0x5b, - 0x94, 0xde, 0xf8, 0x97, 0xe3, 0xc5, 0xbb, 0x0d, 0xc3, 0xdd, 0xef, 0xec, 0x2e, 0x6b, 0x56, 0xeb, - 0x96, 0xdf, 0x11, 0x7d, 0x37, 0xf8, 0x7d, 0xab, 0xfd, 0xa4, 0x71, 0x8b, 0x9d, 0xcc, 0x77, 0x3a, - 0x86, 0xbe, 0xbc, 0xb3, 0x53, 0x5d, 0xc5, 0x32, 0x23, 0xf9, 0x2e, 0xa7, 0x58, 0x3f, 0x34, 0xbd, - 0xb5, 0xf1, 0x23, 0x09, 0xe4, 0x80, 0x61, 0x71, 0xca, 0x73, 0x0d, 0xb2, 0x1f, 0x74, 0x88, 0x6d, - 0x10, 0xfd, 0xb9, 0x05, 0x0a, 0x02, 0x91, 0xce, 0xb7, 0xf7, 0x60, 0xa6, 0x8b, 0x0f, 0xc9, 0x8f, - 0xc7, 0x87, 0xec, 0x41, 0xc0, 0x82, 0xe2, 0xdf, 0x24, 0x00, 0xb1, 0xc1, 0x57, 0xf9, 0x96, 0xd1, - 0xa7, 0x4c, 0x61, 0x1e, 0x01, 0x18, 0x7b, 0x4a, 0xcb, 0x70, 0x1c, 0xc3, 0x6c, 0x30, 0x5d, 0xc9, - 0xdf, 0x79, 0x23, 0xa2, 0x2f, 0xfd, 0x43, 0x58, 0xae, 0xee, 0x6d, 0x70, 0xb4, 0x12, 0xd9, 0x57, - 0x9f, 0x1a, 0x96, 0x8d, 0x33, 0x86, 0x07, 0x2a, 0x96, 0x60, 0xae, 0xaf, 0x1e, 0xe5, 0x01, 0x56, - 0xb7, 0x94, 0xcd, 0xad, 0x7a, 0xa5, 0xba, 0x79, 0x5f, 0x9e, 0x40, 0x32, 0xcc, 0xe0, 0xb5, 0xfa, - 0x0e, 0xde, 0x54, 0xd6, 0x30, 0xde, 0xc2, 0xb2, 0x84, 0xb2, 0x30, 0xbd, 0x8d, 0xd7, 0x1e, 0xad, - 0x6d, 0xd6, 0xe5, 0x84, 0xd0, 0x9e, 0x5f, 0x81, 0xf9, 0xae, 0x8f, 0xc7, 0xa9, 0x3f, 0x97, 0x60, - 0x66, 0xcf, 0xea, 0x98, 0xba, 0xc2, 0x43, 0x6e, 0xb1, 0xb5, 0x90, 0x65, 0x30, 0xfe, 0xbd, 0xe2, - 0x37, 0x12, 0x70, 0x0a, 0x13, 0xc7, 0x6a, 0x3e, 0x25, 0xf1, 0x4b, 0x70, 0x0b, 0xc4, 0x4e, 0xa2, - 0xf2, 0x71, 0x04, 0x99, 0xe1, 0x34, 0xf8, 0xca, 0x31, 0xe5, 0xb8, 0xaa, 0xdb, 0x71, 0x84, 0x28, - 0xaf, 0x0c, 0x9f, 0x0b, 0x35, 0xd6, 0x16, 0x0b, 0x9c, 0xd0, 0x8e, 0x40, 0xaa, 0x7f, 0x47, 0xa0, - 0xf8, 0x4b, 0x70, 0xba, 0x87, 0x11, 0x71, 0x2e, 0xf0, 0xff, 0x94, 0x80, 0x73, 0xdd, 0xe4, 0xe3, - 0x76, 0xf7, 0xff, 0x6f, 0x30, 0x1b, 0x55, 0x20, 0xd7, 0x32, 0x4c, 0x25, 0xf0, 0xc7, 0x9e, 0x63, - 0x21, 0x9f, 0xa1, 0xc1, 0x6e, 0xb7, 0x4b, 0x46, 0x23, 0x93, 0x28, 0xbe, 0xc6, 0x29, 0xbb, 0x6f, - 0x4b, 0x30, 0x13, 0xf7, 0x56, 0xc5, 0x8b, 0x9d, 0x9a, 0x8b, 0x31, 0xd7, 0x21, 0xf7, 0x09, 0xec, - 0x6d, 0xfc, 0x89, 0x04, 0xa8, 0x6e, 0x77, 0x4c, 0x1a, 0xdf, 0x3d, 0xb4, 0x1a, 0x71, 0x0e, 0xf6, - 0x14, 0x4c, 0x1a, 0xa6, 0x4e, 0x0e, 0xd9, 0x60, 0x53, 0x98, 0x17, 0xd0, 0x6d, 0x48, 0x8b, 0x5c, - 0x29, 0x9e, 0x05, 0x90, 0x2c, 0x9d, 0x39, 0x39, 0x5e, 0x9c, 0xe6, 0x99, 0x51, 0xab, 0x1f, 0x05, - 0x3f, 0xf1, 0x34, 0x4f, 0x8e, 0xf2, 0x12, 0x53, 0xde, 0x83, 0xf9, 0xae, 0x8e, 0xc6, 0xc9, 0x85, - 0xef, 0x27, 0x60, 0x5e, 0x0c, 0x27, 0xf6, 0xbd, 0x9d, 0x17, 0x4a, 0xb4, 0x43, 0x5f, 0x00, 0x68, - 0xdb, 0xe4, 0xa9, 0xc2, 0x51, 0x93, 0x63, 0xa1, 0x66, 0x28, 0x06, 0x03, 0xa0, 0x2f, 0xc3, 0x2c, - 0x9d, 0x70, 0x6d, 0xdb, 0x6a, 0x5b, 0x0e, 0xf5, 0x24, 0x9c, 0xf1, 0xbc, 0xee, 0xb9, 0x93, 0xe3, - 0xc5, 0xdc, 0x86, 0x61, 0x6e, 0x0b, 0xc4, 0x7a, 0x0d, 0xd3, 0x99, 0xeb, 0x17, 0x3d, 0xf7, 0xe7, - 0x1f, 0x25, 0x38, 0xf5, 0x89, 0xed, 0x86, 0xfd, 0x6f, 0x70, 0xcc, 0x5f, 0x0f, 0x64, 0x56, 0xac, - 0x9a, 0x7b, 0x56, 0xfc, 0x7b, 0x94, 0xdf, 0x96, 0x60, 0x2e, 0x44, 0x3e, 0xce, 0x55, 0xff, 0xc5, - 0xd2, 0x39, 0xbf, 0x42, 0xfd, 0x80, 0xb0, 0xda, 0xc7, 0x39, 0xa9, 0xfe, 0x48, 0x82, 0x33, 0x65, - 0x7e, 0x72, 0xc5, 0x0e, 0xe8, 0x9c, 0x4e, 0x2b, 0x4e, 0x2d, 0x29, 0xc0, 0xf4, 0x53, 0x62, 0x3b, - 0x86, 0xc5, 0xd7, 0xbd, 0x1c, 0xf6, 0x8a, 0x2c, 0xad, 0xd4, 0x54, 0xdb, 0xce, 0xbe, 0xe5, 0x6d, - 0xbc, 0xfb, 0x65, 0x3f, 0x24, 0x4b, 0xca, 0xa9, 0xe2, 0x8f, 0x25, 0x38, 0xdb, 0xd7, 0xc1, 0x38, - 0x85, 0xf2, 0x35, 0xc8, 0x6a, 0x82, 0x30, 0x35, 0x77, 0x7c, 0xef, 0xbd, 0x4a, 0x9b, 0xbd, 0xa0, - 0x1b, 0x7e, 0x72, 0xbc, 0x08, 0x5e, 0x57, 0xab, 0xab, 0x18, 0x3c, 0xea, 0x55, 0xbd, 0xf8, 0x53, - 0x80, 0xdc, 0xda, 0x61, 0xdb, 0xb2, 0xdd, 0x1a, 0x5f, 0xf3, 0xd1, 0x2a, 0xa4, 0xdb, 0xb6, 0xf5, - 0xd4, 0xf0, 0x06, 0x91, 0x8f, 0x3c, 0xfb, 0xe9, 0xc2, 0xd9, 0x16, 0xed, 0xb1, 0x8f, 0x89, 0x30, - 0x64, 0x1e, 0x5a, 0x9a, 0xda, 0xbc, 0x67, 0x34, 0x3d, 0xe5, 0x5a, 0x1e, 0x45, 0x66, 0xd9, 0xc7, - 0xd8, 0x56, 0xdd, 0x7d, 0x6f, 0xae, 0xf9, 0x40, 0x74, 0x1f, 0xd2, 0x15, 0xd7, 0x6d, 0xd3, 0x4a, - 0x31, 0x51, 0xaf, 0x8e, 0x24, 0x49, 0x11, 0x04, 0x25, 0x1f, 0x19, 0x61, 0x98, 0xbb, 0x6f, 0x59, - 0x8d, 0x26, 0x29, 0x37, 0xad, 0x8e, 0x5e, 0xb6, 0xcc, 0x3d, 0xa3, 0x21, 0x0c, 0xdd, 0x95, 0x91, - 0x14, 0xef, 0x97, 0x6b, 0xb8, 0x1f, 0x1d, 0x7d, 0x11, 0xd2, 0xb5, 0xbb, 0x82, 0x14, 0x77, 0x53, - 0x2e, 0x8f, 0x24, 0x55, 0xbb, 0x8b, 0x7d, 0x24, 0x54, 0x81, 0xec, 0xca, 0xb3, 0x8e, 0x4d, 0x04, - 0x8d, 0x29, 0x46, 0xe3, 0xda, 0x48, 0x1a, 0x0c, 0x07, 0x87, 0x51, 0xd1, 0x3b, 0x90, 0x7f, 0xd7, - 0xb2, 0x9f, 0x34, 0x2d, 0xd5, 0x1b, 0xdb, 0x34, 0x23, 0xf6, 0xf2, 0x48, 0x62, 0x1e, 0x1a, 0xee, - 0x21, 0xb0, 0xf0, 0x65, 0xc8, 0x75, 0x09, 0x07, 0x21, 0x48, 0xb5, 0xa9, 0x1c, 0xa8, 0x86, 0x64, - 0x30, 0xfb, 0x8d, 0x5e, 0x83, 0x69, 0xd3, 0xd2, 0x89, 0xa7, 0xb3, 0xb9, 0xd2, 0xa9, 0x93, 0xe3, - 0xc5, 0xa9, 0x4d, 0x4b, 0xe7, 0x2b, 0xb4, 0xf8, 0x85, 0xa7, 0x68, 0x23, 0x6f, 0x7d, 0x5e, 0xb8, - 0x06, 0x29, 0x2a, 0x17, 0x3a, 0x2f, 0x77, 0x55, 0x87, 0xec, 0xd8, 0x86, 0xa0, 0xe9, 0x15, 0x45, - 0xbb, 0xbf, 0x95, 0x20, 0x51, 0xbb, 0x4b, 0x5d, 0xc5, 0xdd, 0x8e, 0xf6, 0x84, 0xb8, 0xa2, 0x95, - 0x28, 0x31, 0x17, 0xd2, 0x26, 0x7b, 0x06, 0x77, 0x1b, 0x32, 0x58, 0x94, 0xd0, 0x4b, 0x00, 0xaa, - 0xa6, 0x11, 0xc7, 0x51, 0xbc, 0x7c, 0xf3, 0x0c, 0xce, 0x70, 0xc8, 0x3a, 0x39, 0xa2, 0x68, 0x0e, - 0xd1, 0x6c, 0xc2, 0x67, 0x7c, 0x06, 0x8b, 0x12, 0x45, 0x73, 0x49, 0xab, 0xad, 0xb8, 0xd6, 0x13, - 0x62, 0x32, 0x79, 0x66, 0x70, 0x86, 0x42, 0xea, 0x14, 0x40, 0x4d, 0x05, 0x31, 0xf5, 0xb6, 0x65, - 0x98, 0x2e, 0x13, 0x54, 0x06, 0xfb, 0x65, 0x4a, 0xd2, 0x26, 0x0d, 0x43, 0x64, 0x62, 0x67, 0xb0, - 0x28, 0x89, 0x61, 0x7c, 0x47, 0x82, 0xe4, 0xfd, 0x72, 0xed, 0xb9, 0xc7, 0x81, 0x20, 0xa5, 0x76, - 0x84, 0xde, 0x67, 0x30, 0xfb, 0xcd, 0xd2, 0x2d, 0x8c, 0x66, 0x93, 0xc6, 0xea, 0x6d, 0xdb, 0xfa, - 0x1a, 0xd1, 0xbc, 0x51, 0xe4, 0x05, 0x78, 0x9b, 0x43, 0xd1, 0x12, 0x64, 0x35, 0x9b, 0xe8, 0xc4, - 0x74, 0x0d, 0xb5, 0xe9, 0x88, 0xe1, 0x84, 0x41, 0xa2, 0x73, 0xdf, 0x90, 0x60, 0x92, 0x29, 0x12, - 0xba, 0x00, 0x19, 0xcd, 0x32, 0x5d, 0xd5, 0x30, 0x85, 0x15, 0xc8, 0xe0, 0x00, 0x30, 0xb0, 0x93, - 0x97, 0x60, 0x46, 0xd5, 0x34, 0xab, 0x63, 0xba, 0x8a, 0xa9, 0xb6, 0x88, 0xe8, 0x6c, 0x56, 0xc0, - 0x36, 0xd5, 0x16, 0x41, 0x8b, 0xe0, 0x15, 0xfd, 0x0c, 0xff, 0x0c, 0x06, 0x01, 0xf2, 0x0f, 0x14, - 0x17, 0x7e, 0x2c, 0x41, 0xda, 0x53, 0x41, 0xda, 0x99, 0x06, 0x31, 0x89, 0xad, 0xba, 0x96, 0xdf, - 0x19, 0x1f, 0xd0, 0x6b, 0xd0, 0x33, 0x81, 0x41, 0x3f, 0x05, 0x93, 0xae, 0xba, 0xdb, 0xf4, 0xfa, - 0xc1, 0x0b, 0x6c, 0x7f, 0xae, 0xa9, 0x36, 0xf8, 0x16, 0x4f, 0x06, 0xf3, 0x02, 0x1d, 0x92, 0xc8, - 0xef, 0xe1, 0xdc, 0x11, 0x25, 0xda, 0x5f, 0x9e, 0xd2, 0xb2, 0x4b, 0x1a, 0x86, 0xc9, 0x84, 0x9d, - 0xc4, 0xc0, 0x40, 0x2c, 0x85, 0x00, 0x9d, 0x87, 0x0c, 0x6f, 0x40, 0x4c, 0x9d, 0x49, 0x3c, 0x89, - 0xd3, 0x0c, 0xb0, 0xe6, 0xe5, 0x46, 0x8b, 0x55, 0xfc, 0xcf, 0x25, 0x98, 0x7b, 0xd7, 0x36, 0x5c, - 0x52, 0xe2, 0xb9, 0x30, 0xf1, 0x2d, 0x69, 0x6f, 0x42, 0x46, 0x57, 0x5d, 0x95, 0x5f, 0x4d, 0x48, - 0x0c, 0xbd, 0x9a, 0xe0, 0x99, 0x42, 0xda, 0x9e, 0x5d, 0x4f, 0x40, 0x90, 0xa2, 0xbf, 0xf9, 0x4d, - 0x0c, 0xcc, 0x7e, 0x07, 0x27, 0xa3, 0xe1, 0xee, 0xc6, 0xb9, 0xc4, 0x7f, 0x3d, 0xe9, 0x2d, 0x3a, - 0x71, 0xb2, 0xe1, 0x4b, 0x30, 0x2d, 0xe2, 0x56, 0xc1, 0x84, 0xa5, 0x51, 0xf6, 0xce, 0x3b, 0xbf, - 0x12, 0x68, 0xa8, 0x04, 0xe0, 0xb8, 0xaa, 0xed, 0xb2, 0x88, 0x73, 0xac, 0x14, 0x0a, 0x6f, 0x91, - 0x62, 0x68, 0x14, 0x8a, 0x36, 0x21, 0xdb, 0x7a, 0xaa, 0x69, 0xca, 0x9e, 0xd1, 0x74, 0x45, 0xf6, - 0x44, 0x74, 0xb6, 0xd8, 0xc6, 0xa3, 0x72, 0xf9, 0x1e, 0x6b, 0xc4, 0x93, 0x18, 0x82, 0x32, 0x06, - 0x4a, 0x81, 0xff, 0x46, 0xaf, 0x82, 0x48, 0x24, 0x55, 0x1c, 0x2f, 0x2d, 0xbc, 0x94, 0x3b, 0x39, - 0x5e, 0xcc, 0x60, 0x06, 0xad, 0xd5, 0xea, 0x38, 0xc3, 0x1b, 0xd4, 0x1c, 0x17, 0x5d, 0x86, 0x9c, - 0xd5, 0x32, 0x5c, 0xc5, 0x5b, 0xe1, 0x79, 0x96, 0x04, 0x9e, 0xa1, 0x40, 0xcf, 0x03, 0x10, 0xf2, - 0xfd, 0x96, 0x04, 0xb9, 0x52, 0xa7, 0xf9, 0x64, 0xab, 0x5d, 0xeb, 0xb4, 0x5a, 0xaa, 0x7d, 0x44, - 0x55, 0x99, 0xeb, 0x91, 0xf1, 0x8c, 0x30, 0x39, 0x24, 0x85, 0xa2, 0x18, 0xcf, 0x08, 0x55, 0x14, - 0x91, 0x56, 0x46, 0xe1, 0x3c, 0x67, 0xec, 0x32, 0xe4, 0x58, 0x74, 0xa6, 0x10, 0xd3, 0xb5, 0x0d, - 0xc2, 0x83, 0xff, 0x24, 0x9e, 0x61, 0xc0, 0x35, 0x0e, 0x43, 0x57, 0x21, 0xef, 0x1c, 0x39, 0x2e, - 0x69, 0x29, 0xfc, 0xc2, 0x12, 0x0f, 0x29, 0x92, 0x38, 0xc7, 0xa1, 0x98, 0x03, 0x8b, 0x7f, 0x91, - 0x84, 0xbc, 0xa7, 0x13, 0x71, 0x3a, 0x53, 0x25, 0x98, 0xdc, 0x33, 0x9a, 0xc4, 0x3b, 0xd7, 0x1c, - 0xbc, 0xa0, 0x7a, 0x94, 0x96, 0xe9, 0x1a, 0xe7, 0xf9, 0xbb, 0x0c, 0x35, 0x0e, 0xbd, 0x58, 0xf8, - 0x89, 0x04, 0x29, 0xe6, 0xc5, 0xdc, 0x86, 0x14, 0x9b, 0xa8, 0xd2, 0x38, 0x13, 0x95, 0x35, 0xf5, - 0x17, 0xdb, 0x44, 0x68, 0xb1, 0xa5, 0x2b, 0xd7, 0xbe, 0xfa, 0xfa, 0xed, 0x3b, 0x4c, 0x27, 0x66, - 0xb0, 0x28, 0xa1, 0x12, 0xa4, 0x09, 0x1b, 0x0f, 0xd1, 0x85, 0x0f, 0x11, 0x35, 0x0d, 0xba, 0x04, - 0xef, 0x19, 0x05, 0x0f, 0x0f, 0x9d, 0x83, 0x24, 0x55, 0xb6, 0x69, 0x7e, 0x3c, 0x76, 0x72, 0xbc, - 0x98, 0xa4, 0x6a, 0x46, 0x61, 0xdc, 0x05, 0x7e, 0x90, 0x4a, 0xa7, 0xe4, 0xc9, 0xe2, 0x0f, 0x53, - 0x90, 0xab, 0xb6, 0xe2, 0x9e, 0xc6, 0x2b, 0xdd, 0x02, 0x8b, 0x72, 0xf1, 0xba, 0x3e, 0x1a, 0x21, - 0xaf, 0x2e, 0x83, 0x98, 0x7c, 0x3e, 0x83, 0x58, 0xa5, 0xcb, 0xb7, 0xb8, 0xad, 0x45, 0xbf, 0xff, - 0xca, 0xc8, 0xef, 0xd7, 0xe9, 0xb2, 0x82, 0x29, 0x8e, 0x77, 0xfa, 0xc4, 0x09, 0xa0, 0xb7, 0x99, - 0x97, 0xc0, 0x95, 0x66, 0x6a, 0x7c, 0xa5, 0x99, 0x26, 0xa6, 0xce, 0x54, 0xe6, 0x50, 0x68, 0xcc, - 0xe7, 0x20, 0xa9, 0x1b, 0xc3, 0x58, 0x1a, 0x65, 0xd4, 0x28, 0xca, 0x08, 0xc5, 0x49, 0x85, 0x15, - 0x27, 0x1c, 0xe2, 0x2c, 0x6c, 0x01, 0x04, 0xa3, 0x42, 0x4b, 0x30, 0x65, 0x35, 0x75, 0xea, 0xd6, - 0x49, 0xcc, 0xad, 0xcb, 0x9c, 0x1c, 0x2f, 0x4e, 0x6e, 0x35, 0xf5, 0xea, 0x2a, 0x9e, 0xb4, 0x9a, - 0x7a, 0x55, 0x67, 0x97, 0xdc, 0xc8, 0x81, 0xc2, 0xee, 0x15, 0xb2, 0x70, 0x05, 0x4f, 0x9b, 0xe4, - 0x60, 0x95, 0x38, 0x5a, 0x78, 0x09, 0x14, 0x6a, 0xf3, 0xc7, 0x12, 0xe4, 0x3d, 0x0e, 0xc6, 0x3b, - 0xd3, 0xd3, 0x46, 0x4b, 0x68, 0x7e, 0xf2, 0xf9, 0x34, 0xdf, 0xc3, 0x13, 0xa9, 0xf8, 0xdf, 0x94, - 0x60, 0x9e, 0xe7, 0x33, 0x69, 0xaa, 0x4b, 0x0d, 0x72, 0x8c, 0xea, 0xfd, 0x32, 0xc8, 0xb6, 0x6a, - 0xea, 0x56, 0xcb, 0x78, 0x46, 0xf8, 0xa6, 0x83, 0x23, 0xf6, 0xda, 0x67, 0x7d, 0x38, 0x8b, 0xaa, - 0xbd, 0x3d, 0x93, 0x9f, 0x4b, 0x70, 0xaa, 0xbb, 0x33, 0x71, 0x32, 0x6d, 0x1d, 0xa6, 0xd8, 0x7e, - 0x99, 0x37, 0xdd, 0x5e, 0x8b, 0x20, 0x12, 0xf5, 0x75, 0x7e, 0x27, 0xd1, 0x57, 0x78, 0x46, 0x62, - 0xe1, 0x4b, 0x30, 0xc9, 0xc0, 0x2f, 0x60, 0xe3, 0x04, 0xe7, 0x3f, 0x80, 0xb9, 0x15, 0x5d, 0xaf, - 0xd5, 0x84, 0xf6, 0xc5, 0xc7, 0x76, 0xcf, 0xcf, 0x49, 0x44, 0xf9, 0x39, 0xe1, 0x4f, 0xc6, 0xe9, - 0xe7, 0xb4, 0x21, 0x2f, 0xd2, 0x0c, 0x63, 0xde, 0x20, 0x3d, 0xa0, 0x8e, 0x99, 0x50, 0x1b, 0x5e, - 0x08, 0x6e, 0x38, 0xf9, 0x5f, 0x8c, 0x73, 0x24, 0x1d, 0x98, 0xf7, 0xe8, 0xc6, 0x7d, 0x16, 0x31, - 0x6c, 0x38, 0x6c, 0xa3, 0x29, 0xfc, 0xd9, 0x38, 0xc7, 0xf4, 0x3d, 0x09, 0xf2, 0xb5, 0xce, 0x2e, - 0xbf, 0xe6, 0x1a, 0xdf, 0x78, 0xee, 0x03, 0x34, 0xc9, 0x9e, 0xb8, 0x82, 0x22, 0x3c, 0xd1, 0xf1, - 0x6f, 0x59, 0x67, 0x28, 0x2e, 0xab, 0x12, 0x2c, 0xf8, 0x61, 0x02, 0x66, 0xfd, 0x5e, 0xc6, 0x39, - 0xf3, 0x7f, 0x19, 0x98, 0x9b, 0xa9, 0x38, 0xae, 0xea, 0x3a, 0xc2, 0x60, 0xbe, 0xfa, 0x3c, 0x29, - 0xdc, 0xa5, 0x39, 0x91, 0x7e, 0x93, 0xf1, 0x41, 0x38, 0x43, 0x49, 0xb2, 0x9f, 0x68, 0x19, 0xe6, - 0x99, 0x79, 0x53, 0xd4, 0x76, 0xbb, 0x69, 0x10, 0x5d, 0xe1, 0xbb, 0xfa, 0x29, 0xb6, 0xab, 0x3f, - 0xc7, 0xaa, 0x56, 0x78, 0x4d, 0x95, 0xed, 0xf0, 0xdf, 0x83, 0x99, 0x3d, 0x9b, 0x90, 0x67, 0x44, - 0x61, 0x4e, 0xd3, 0xf3, 0x9c, 0xf5, 0x64, 0x39, 0x62, 0x8d, 0xe2, 0x09, 0x43, 0xf2, 0x3e, 0xcc, - 0x31, 0x2e, 0xc6, 0x9d, 0x79, 0x2f, 0xa4, 0xf2, 0x53, 0x09, 0x50, 0x98, 0xfe, 0x27, 0x27, 0x98, - 0x44, 0xec, 0x82, 0x79, 0x15, 0x10, 0x3f, 0xf0, 0x77, 0x94, 0x36, 0xb1, 0x15, 0x87, 0x68, 0x96, - 0xb8, 0x5a, 0x29, 0x61, 0x59, 0xd4, 0x6c, 0x13, 0xbb, 0xc6, 0xe0, 0xc5, 0xdf, 0x2a, 0xc0, 0x8c, - 0xe0, 0xc9, 0x8e, 0x49, 0xa3, 0xea, 0xdb, 0x90, 0x6c, 0x88, 0x6d, 0x8b, 0x6c, 0x64, 0x60, 0x13, - 0x5c, 0xef, 0xae, 0x4c, 0x60, 0xda, 0x96, 0xa2, 0xb4, 0x3b, 0x6e, 0x44, 0x36, 0x55, 0x90, 0x49, - 0x13, 0x46, 0x69, 0x77, 0x5c, 0x54, 0x83, 0x59, 0x2d, 0xb8, 0xde, 0xaa, 0x50, 0xf4, 0xe4, 0xc0, - 0x44, 0xf4, 0xc8, 0x4b, 0xc2, 0x95, 0x09, 0x9c, 0xd7, 0xba, 0x2a, 0x50, 0x39, 0x7c, 0x9f, 0x32, - 0x35, 0x70, 0x93, 0xae, 0xf7, 0x2e, 0x67, 0x65, 0x22, 0x74, 0xed, 0x12, 0xbd, 0x09, 0x53, 0x3a, - 0xbb, 0xa7, 0x27, 0x34, 0x34, 0x4a, 0x89, 0xba, 0xae, 0x46, 0x56, 0x26, 0xb0, 0xc0, 0x40, 0x0f, - 0x60, 0x86, 0xff, 0x12, 0xd6, 0x61, 0x6a, 0xe0, 0x2e, 0x66, 0xff, 0x4d, 0xc5, 0xca, 0x04, 0xce, - 0xea, 0x01, 0x14, 0x7d, 0x16, 0x52, 0x8e, 0xa6, 0x9a, 0x62, 0x6f, 0xef, 0xe2, 0x80, 0xfb, 0x48, - 0x01, 0x32, 0x6b, 0x8d, 0x1e, 0xc3, 0x1c, 0xdb, 0xc9, 0x50, 0xdc, 0xe0, 0x34, 0x96, 0x25, 0xc5, - 0x77, 0x1f, 0x00, 0xfb, 0xde, 0x52, 0xf4, 0x5d, 0x8c, 0xca, 0x04, 0x96, 0x77, 0x7b, 0xaa, 0xa8, - 0xc8, 0x98, 0xbb, 0x1b, 0x22, 0x9c, 0x19, 0x28, 0xb2, 0xc8, 0xdb, 0x11, 0x54, 0x64, 0xa4, 0xab, - 0x02, 0xdd, 0x87, 0xac, 0x4a, 0xdd, 0x0f, 0x85, 0x65, 0x9c, 0x17, 0x60, 0xe0, 0x26, 0x6d, 0x5f, - 0x12, 0x7c, 0x85, 0x5d, 0x2c, 0xf1, 0x80, 0x01, 0xa1, 0x16, 0xb1, 0x1b, 0xa4, 0x90, 0x1d, 0x4e, - 0x28, 0x7c, 0x84, 0xeb, 0x13, 0x62, 0x40, 0xb4, 0x01, 0xb9, 0x7d, 0x2f, 0xc5, 0x93, 0x1d, 0x9f, - 0xcf, 0x0c, 0xdc, 0xa9, 0x8d, 0x48, 0x51, 0xad, 0x4c, 0xe0, 0x99, 0xfd, 0x10, 0x18, 0x2d, 0x43, - 0xa2, 0xa1, 0x15, 0x72, 0x8c, 0xc6, 0x85, 0x61, 0x09, 0x98, 0x95, 0x09, 0x9c, 0x68, 0x68, 0x34, - 0xa8, 0xe0, 0xe9, 0x63, 0x87, 0x66, 0x21, 0x3f, 0xd0, 0xc8, 0x74, 0xe7, 0x07, 0x56, 0x26, 0x30, - 0xcb, 0xa2, 0xa3, 0xdf, 0xdb, 0x86, 0xbc, 0xcd, 0xcf, 0xc0, 0xbd, 0x4c, 0x0f, 0x99, 0x51, 0xb9, - 0x1e, 0x6d, 0xaa, 0xfa, 0x92, 0x3d, 0x2a, 0x13, 0x38, 0x67, 0x87, 0xe1, 0xe8, 0xab, 0x70, 0xaa, - 0x9b, 0xa2, 0x50, 0xee, 0xb9, 0x3e, 0xcb, 0x15, 0x4d, 0xb7, 0x5b, 0xc7, 0x91, 0xdd, 0x57, 0x89, - 0xde, 0x80, 0x49, 0x2e, 0x35, 0xc4, 0x48, 0x2e, 0x46, 0xed, 0xa6, 0x74, 0x0b, 0x8c, 0xb7, 0xa7, - 0xf3, 0xcd, 0x15, 0x87, 0xbf, 0x4a, 0xd3, 0x6a, 0x14, 0xe6, 0x07, 0xce, 0xb7, 0xfe, 0xc3, 0x6c, - 0x3a, 0xdf, 0xdc, 0x00, 0x4a, 0xe5, 0x6e, 0xf3, 0x1a, 0x71, 0x56, 0x78, 0x6a, 0xa0, 0xdc, 0x23, - 0xce, 0x84, 0xa9, 0xdc, 0xed, 0x10, 0x98, 0x76, 0xcd, 0xe6, 0x57, 0x00, 0x15, 0x36, 0x8d, 0x4f, - 0x0f, 0xec, 0x5a, 0xff, 0xb5, 0x46, 0xda, 0x35, 0x3b, 0x80, 0xa2, 0x47, 0x20, 0x8b, 0xbb, 0x5e, - 0xc1, 0xc6, 0xcf, 0x99, 0x81, 0x5b, 0xfe, 0xd1, 0x87, 0x6b, 0x95, 0x09, 0x3c, 0xab, 0x75, 0xd7, - 0x50, 0x63, 0xc1, 0xe8, 0x29, 0x5a, 0x70, 0x49, 0xae, 0x50, 0x18, 0x68, 0x2c, 0x06, 0xdc, 0xe8, - 0xa3, 0xc6, 0x42, 0xeb, 0xa9, 0xa2, 0x6a, 0x6c, 0x98, 0x86, 0xcb, 0x0c, 0xfb, 0xc2, 0x40, 0x35, - 0xee, 0x7e, 0x81, 0x80, 0xaa, 0xb1, 0xc1, 0x21, 0x54, 0x8d, 0x5d, 0x71, 0x90, 0x2c, 0xc4, 0x71, - 0x61, 0xa0, 0x1a, 0x47, 0x9d, 0x38, 0x53, 0x35, 0x76, 0xc3, 0x70, 0xaa, 0xc6, 0xdc, 0x40, 0xf4, - 0xd0, 0x7d, 0x69, 0xa0, 0x1a, 0x0f, 0xbc, 0xdc, 0x41, 0xd5, 0x58, 0xed, 0xab, 0x44, 0xab, 0xd4, - 0x33, 0xa4, 0x1e, 0x91, 0x61, 0xee, 0x59, 0x85, 0x8b, 0x03, 0xd7, 0x9f, 0xde, 0xa3, 0xe4, 0x0a, - 0x73, 0x0b, 0x05, 0x8c, 0x1a, 0x32, 0xe6, 0x22, 0x2b, 0x6c, 0x97, 0xb9, 0xb0, 0x38, 0xd0, 0x90, - 0xf5, 0x6d, 0x36, 0x53, 0x43, 0x76, 0xe0, 0x03, 0xe9, 0x42, 0xc6, 0x77, 0x7c, 0x0a, 0x4b, 0x23, - 0x76, 0x16, 0x42, 0x0b, 0x19, 0xc7, 0x40, 0x2b, 0x90, 0xa1, 0x9e, 0xc2, 0x11, 0x33, 0x43, 0x97, - 0x06, 0xfa, 0xb8, 0x3d, 0xb9, 0xa1, 0x95, 0x09, 0x9c, 0xfe, 0x40, 0x80, 0xe8, 0xe7, 0x79, 0xd8, - 0x5d, 0x28, 0x0e, 0xfc, 0x7c, 0xd7, 0x46, 0x0b, 0xfd, 0x3c, 0xc7, 0x40, 0x1a, 0x9c, 0xe6, 0xb2, - 0x12, 0xb7, 0x41, 0x6c, 0x71, 0xed, 0xa2, 0x70, 0x99, 0x91, 0x1a, 0x18, 0xc4, 0x46, 0xde, 0x4c, - 0xa9, 0x4c, 0xe0, 0x79, 0xb5, 0xbf, 0x96, 0x4e, 0x78, 0xb1, 0xf4, 0xf0, 0xd0, 0xb7, 0x70, 0x65, - 0xe0, 0x84, 0x8f, 0xd8, 0x2c, 0xa0, 0x13, 0x5e, 0x0d, 0x81, 0xf9, 0x02, 0xa4, 0x2b, 0x8e, 0xc3, - 0xcf, 0x24, 0xae, 0x0e, 0x59, 0x80, 0x7a, 0x02, 0x60, 0xbe, 0x00, 0xe9, 0x35, 0x8e, 0x49, 0x09, - 0x69, 0x4d, 0xa2, 0xda, 0xc2, 0xcc, 0x5e, 0x1b, 0x48, 0xa8, 0xef, 0x56, 0x3f, 0x25, 0xa4, 0xf9, - 0x40, 0xba, 0x60, 0xdb, 0xde, 0x25, 0x51, 0xe1, 0x6d, 0x5e, 0x1f, 0xb8, 0x60, 0x47, 0xde, 0x65, - 0xa5, 0x0b, 0xb6, 0xdd, 0x55, 0x81, 0xbe, 0x00, 0xd3, 0xe2, 0xc6, 0x5d, 0xe1, 0xc6, 0x10, 0x1f, - 0x38, 0x1c, 0x15, 0xd3, 0x79, 0x2d, 0x70, 0xb8, 0x95, 0xe5, 0x17, 0xf6, 0xf8, 0xf0, 0x5e, 0x1e, - 0x62, 0x65, 0xfb, 0x02, 0x52, 0x6e, 0x65, 0x03, 0x30, 0xb5, 0xb2, 0x5c, 0x4f, 0xc5, 0x5a, 0x77, - 0x73, 0xa0, 0x95, 0xed, 0xcf, 0xea, 0xa4, 0x56, 0xf6, 0x83, 0x00, 0x4a, 0x47, 0xe6, 0xf0, 0x40, - 0xac, 0xf0, 0xca, 0xc0, 0x91, 0x75, 0x07, 0x94, 0x74, 0x64, 0x02, 0x87, 0x8a, 0x8d, 0x67, 0x30, - 0x71, 0x4e, 0xbf, 0x3a, 0x50, 0x6c, 0x7d, 0x71, 0x4b, 0xc5, 0x7b, 0xf1, 0x89, 0x73, 0xd8, 0x37, - 0x54, 0xb6, 0xb8, 0x60, 0x23, 0x38, 0xf5, 0xda, 0x70, 0x43, 0x15, 0x75, 0x77, 0xc8, 0x37, 0x54, - 0x5d, 0x95, 0xa5, 0x69, 0x91, 0x6f, 0xf6, 0x20, 0x95, 0x9e, 0x95, 0xe5, 0x07, 0xa9, 0xf4, 0x59, - 0xb9, 0xf0, 0x20, 0x95, 0x3e, 0x27, 0x2f, 0x3c, 0x48, 0xa5, 0xcf, 0xcb, 0x17, 0x8a, 0xff, 0x71, - 0x16, 0x72, 0x5e, 0x1c, 0xc3, 0xa3, 0x82, 0x3b, 0xe1, 0xa8, 0xe0, 0xe2, 0xa0, 0xa8, 0x40, 0x44, - 0x3e, 0x22, 0x2c, 0xb8, 0x13, 0x0e, 0x0b, 0x2e, 0x0e, 0x0a, 0x0b, 0x02, 0x1c, 0x1a, 0x17, 0xd4, - 0x07, 0xc5, 0x05, 0x2f, 0x8f, 0x11, 0x17, 0xf8, 0xa4, 0x7a, 0x03, 0x83, 0xd5, 0xfe, 0xc0, 0xe0, - 0xca, 0xf0, 0xc0, 0xc0, 0x27, 0x15, 0x8a, 0x0c, 0xde, 0xea, 0x89, 0x0c, 0x2e, 0x0d, 0x89, 0x0c, - 0x7c, 0x7c, 0x2f, 0x34, 0x58, 0x8f, 0x0c, 0x0d, 0xae, 0x8d, 0x0a, 0x0d, 0x7c, 0x3a, 0x5d, 0xb1, - 0xc1, 0xeb, 0x5d, 0xb1, 0xc1, 0xe2, 0xc0, 0xd8, 0xc0, 0xc7, 0xe6, 0xc1, 0xc1, 0x7b, 0x83, 0x83, - 0x83, 0x57, 0xc6, 0x0a, 0x0e, 0x7c, 0x7a, 0xfd, 0xd1, 0x41, 0x7d, 0x50, 0x74, 0xf0, 0xf2, 0x18, - 0xd1, 0x41, 0x20, 0xb8, 0x9e, 0xf0, 0xa0, 0x12, 0x15, 0x1e, 0x5c, 0x1d, 0x11, 0x1e, 0xf8, 0xd4, - 0xc2, 0xf1, 0x41, 0x25, 0x2a, 0x3e, 0xb8, 0x3a, 0x22, 0x3e, 0xe8, 0xa1, 0xc4, 0x03, 0x84, 0xcd, - 0xe8, 0x00, 0xe1, 0xfa, 0xc8, 0x00, 0xc1, 0xa7, 0xd6, 0x1d, 0x21, 0xdc, 0x0a, 0x45, 0x08, 0x2f, - 0x0d, 0x88, 0x10, 0x7c, 0x54, 0x1a, 0x22, 0x7c, 0xb1, 0x2f, 0x44, 0x28, 0x0e, 0x0b, 0x11, 0x7c, - 0x5c, 0x3f, 0x46, 0x78, 0x67, 0x40, 0x8c, 0x70, 0x63, 0x74, 0x8c, 0xe0, 0x13, 0xeb, 0x09, 0x12, - 0xd4, 0xa1, 0x41, 0xc2, 0x6b, 0x63, 0x06, 0x09, 0x3e, 0xf5, 0xa8, 0x28, 0xe1, 0x73, 0xdd, 0x51, - 0xc2, 0xd2, 0xe0, 0x28, 0xc1, 0x27, 0x23, 0xc2, 0x84, 0xf5, 0xc8, 0x30, 0xe1, 0xda, 0xa8, 0x30, - 0x21, 0x98, 0x7b, 0xe1, 0x38, 0x61, 0x33, 0x3a, 0x4e, 0xb8, 0x3e, 0x32, 0x4e, 0x08, 0xc4, 0xdf, - 0x15, 0x28, 0xac, 0x47, 0x06, 0x0a, 0xd7, 0x46, 0x05, 0x0a, 0x41, 0xe7, 0xc2, 0x91, 0xc2, 0xbb, - 0x03, 0x23, 0x85, 0x9b, 0xe3, 0x44, 0x0a, 0x3e, 0xd1, 0xbe, 0x50, 0xe1, 0xbd, 0xc1, 0xa1, 0xc2, - 0x2b, 0x63, 0x85, 0x0a, 0x81, 0xe9, 0xe8, 0x8b, 0x15, 0xbe, 0xd8, 0x17, 0x2b, 0x14, 0x87, 0xc5, - 0x0a, 0x81, 0x3e, 0x7b, 0xc1, 0x82, 0x3a, 0xd4, 0xb5, 0x7f, 0x6d, 0x4c, 0xd7, 0x3e, 0x50, 0xbe, - 0x08, 0xdf, 0x7e, 0x2d, 0xc2, 0xb7, 0xbf, 0x32, 0xdc, 0xb7, 0x0f, 0x96, 0x90, 0xc0, 0xb9, 0xaf, - 0x44, 0x39, 0xf7, 0x57, 0x47, 0x38, 0xf7, 0x81, 0x15, 0x0a, 0x79, 0xf7, 0x6f, 0xf5, 0x78, 0xf7, - 0x97, 0x46, 0x1e, 0x7c, 0x87, 0xdc, 0xfb, 0x52, 0xbf, 0x7b, 0x7f, 0x79, 0xa8, 0x7b, 0xef, 0x53, - 0x08, 0xfc, 0xfb, 0xb7, 0x7a, 0xfc, 0xfb, 0x4b, 0x43, 0xfc, 0xfb, 0xa0, 0x03, 0xc2, 0xc1, 0xd7, - 0x87, 0x3b, 0xf8, 0xcb, 0xe3, 0x3a, 0xf8, 0x3e, 0xe1, 0x48, 0x0f, 0x7f, 0x33, 0xda, 0xc3, 0xbf, - 0x3e, 0xe6, 0x19, 0x58, 0x9f, 0x8b, 0x5f, 0x89, 0x72, 0xf1, 0xaf, 0x8e, 0x70, 0xf1, 0xc3, 0x6b, - 0x88, 0xef, 0xe3, 0x57, 0xa2, 0x7c, 0xfc, 0xab, 0x23, 0x7c, 0xfc, 0x80, 0x52, 0xc8, 0xc9, 0xaf, - 0x0f, 0x72, 0xf2, 0x5f, 0x1e, 0xc3, 0xc9, 0x0f, 0xd6, 0xdd, 0x1e, 0x2f, 0xff, 0xed, 0x5e, 0x2f, - 0xbf, 0x38, 0xcc, 0xcb, 0x0f, 0x66, 0xa4, 0xe7, 0xe6, 0x6f, 0x46, 0xbb, 0xf9, 0xd7, 0x47, 0xba, - 0xf9, 0x61, 0x23, 0x19, 0xf2, 0xf3, 0xd7, 0x23, 0xfd, 0xfc, 0x6b, 0xa3, 0xfc, 0xfc, 0xc0, 0x48, - 0x86, 0x1d, 0xfd, 0xb7, 0x7b, 0x1d, 0xfd, 0xe2, 0x30, 0x47, 0x3f, 0x18, 0x9c, 0xe7, 0xe9, 0x57, - 0xa2, 0x3c, 0xfd, 0xab, 0x23, 0x3c, 0xfd, 0x40, 0x78, 0x21, 0x57, 0x5f, 0x1d, 0xea, 0xea, 0xbf, - 0x36, 0xa6, 0xab, 0xdf, 0x63, 0xb8, 0x9e, 0xcf, 0xd7, 0x7f, 0x90, 0x4a, 0x5f, 0x90, 0x5f, 0x2a, - 0xfe, 0xf5, 0x24, 0x4c, 0x55, 0xbc, 0x04, 0x8d, 0xd0, 0x0d, 0x69, 0xe9, 0x45, 0x6e, 0x48, 0xa3, - 0x55, 0xaa, 0x3e, 0x6c, 0x12, 0x0a, 0xef, 0x7f, 0xc8, 0x73, 0x03, 0x7d, 0x47, 0x64, 0x1e, 0xea, - 0x0b, 0xdc, 0x09, 0x41, 0xaf, 0x43, 0xae, 0xe3, 0x10, 0x5b, 0x69, 0xdb, 0x86, 0x65, 0x1b, 0x2e, - 0x4f, 0x40, 0x94, 0x4a, 0xf2, 0x47, 0xc7, 0x8b, 0x33, 0x3b, 0x0e, 0xb1, 0xb7, 0x05, 0x1c, 0xcf, - 0x74, 0x42, 0x25, 0xef, 0xc1, 0xe0, 0xc9, 0xf1, 0x1f, 0x0c, 0x7e, 0x07, 0x64, 0x9b, 0xa8, 0x7a, - 0xd7, 0x72, 0xc8, 0x6f, 0x12, 0x47, 0xaf, 0xdc, 0x2c, 0xd3, 0xd6, 0x6b, 0xc9, 0x6e, 0x14, 0xcf, - 0xda, 0xdd, 0x40, 0x74, 0x1b, 0x4e, 0xb7, 0xd4, 0x43, 0x7e, 0x57, 0xde, 0xf3, 0x30, 0x58, 0xa2, - 0x4a, 0x9a, 0xe5, 0x53, 0xa1, 0x96, 0x7a, 0xc8, 0x5e, 0x1f, 0xe6, 0x55, 0xec, 0xdd, 0xc1, 0xab, - 0x90, 0xd7, 0x0d, 0xc7, 0x35, 0x4c, 0xcd, 0x7b, 0x76, 0x87, 0x5f, 0x39, 0xce, 0x79, 0x50, 0xfe, - 0xfc, 0xcd, 0x4d, 0x98, 0x13, 0x39, 0x66, 0xc1, 0x7b, 0xc4, 0xcc, 0x97, 0x4e, 0xd3, 0x5e, 0xd0, - 0x8a, 0xe0, 0xf9, 0xe8, 0x32, 0xcc, 0x36, 0x54, 0x97, 0x1c, 0xa8, 0x47, 0x8a, 0x97, 0xec, 0x9b, - 0x65, 0x8f, 0x8f, 0x9c, 0x3f, 0x39, 0x5e, 0xcc, 0xdd, 0xe7, 0x55, 0x7d, 0x39, 0xbf, 0xb9, 0x46, - 0xa8, 0x42, 0x47, 0x2b, 0x30, 0xc3, 0x9e, 0x54, 0xb3, 0xf8, 0xcb, 0x7d, 0xc2, 0x43, 0x1e, 0x74, - 0x86, 0x21, 0xde, 0xf7, 0xc3, 0xec, 0x19, 0x36, 0xef, 0xb1, 0xbf, 0xeb, 0x30, 0xab, 0x3a, 0x47, - 0xa6, 0xc6, 0x38, 0x4c, 0x4c, 0xa7, 0xe3, 0x30, 0x17, 0x39, 0x8d, 0xf3, 0x0c, 0x5c, 0xf6, 0xa0, - 0xe2, 0xf5, 0x9e, 0xdf, 0x91, 0x60, 0xa6, 0x2b, 0xf1, 0xf2, 0xad, 0x9e, 0xa3, 0xba, 0x73, 0xd1, - 0xee, 0xf9, 0xa0, 0x1c, 0xa5, 0xb4, 0x90, 0x80, 0x97, 0x37, 0xb1, 0x38, 0xd8, 0xbd, 0x63, 0x01, - 0xb2, 0x97, 0x69, 0xe2, 0xa1, 0xbd, 0x99, 0xfa, 0xbd, 0xef, 0x2e, 0x4e, 0x14, 0x7f, 0x96, 0x84, - 0x5c, 0x77, 0x82, 0x65, 0xb5, 0xa7, 0x5f, 0x51, 0x26, 0xb1, 0x0b, 0x63, 0x79, 0xc8, 0xa3, 0x1e, - 0x99, 0xe0, 0x21, 0x36, 0xde, 0xcd, 0xa5, 0x21, 0x07, 0x92, 0xe1, 0x7e, 0x06, 0x88, 0x0b, 0x3f, - 0x4a, 0xf8, 0x33, 0x7f, 0x19, 0x26, 0xd9, 0x53, 0xe8, 0xa2, 0x6b, 0x51, 0xb7, 0x45, 0xd6, 0x68, - 0x3d, 0xe6, 0xcd, 0xa8, 0xa5, 0xa8, 0xbf, 0xd0, 0x5b, 0x0a, 0x3e, 0xe0, 0x05, 0x9e, 0xea, 0x7e, - 0xc1, 0x3b, 0xff, 0xec, 0xc0, 0xb1, 0xd9, 0x24, 0x9a, 0x2b, 0x5e, 0x54, 0xf7, 0x1e, 0xe4, 0xbe, - 0xd2, 0x4b, 0x42, 0xbc, 0xbf, 0xbe, 0x8c, 0xc5, 0xfb, 0xeb, 0xa1, 0x54, 0x96, 0xbc, 0x4f, 0x82, - 0x4d, 0x2c, 0x9e, 0xf0, 0x24, 0x44, 0xfd, 0x75, 0x09, 0x64, 0x36, 0x8d, 0xee, 0x11, 0xa2, 0xc7, - 0xa2, 0x85, 0x5e, 0x96, 0x4d, 0x62, 0xec, 0x2c, 0x9b, 0xa2, 0x0a, 0x79, 0xbf, 0x0f, 0xfc, 0x65, - 0xe2, 0x21, 0x4f, 0x61, 0xbc, 0xd0, 0xb5, 0xc3, 0xe2, 0x1f, 0x48, 0x30, 0xef, 0x7f, 0x83, 0xf9, - 0xf9, 0x3c, 0x2f, 0xfe, 0x05, 0xf2, 0x1e, 0x31, 0x7b, 0x75, 0x9d, 0xc6, 0x79, 0xec, 0x2a, 0xda, - 0x58, 0x1a, 0x84, 0xc4, 0xd9, 0x37, 0x88, 0xf8, 0x51, 0xaf, 0xd7, 0xd8, 0x7b, 0xec, 0xfc, 0xb7, - 0x53, 0xbc, 0x17, 0xe2, 0x00, 0x53, 0x56, 0x3a, 0xcc, 0xb1, 0xb4, 0xda, 0x1b, 0x26, 0x6b, 0x5c, - 0xfc, 0x3b, 0x29, 0x4c, 0xe8, 0x29, 0xf5, 0x1b, 0xee, 0x42, 0xf2, 0xa9, 0xda, 0x1c, 0x76, 0xf4, - 0xdf, 0xc5, 0x7a, 0x4c, 0x5b, 0xa3, 0x7b, 0xc0, 0xaf, 0xe3, 0xf0, 0xcb, 0x04, 0x89, 0xc1, 0xc1, - 0x5d, 0x3f, 0x4b, 0x71, 0x08, 0x13, 0xbd, 0xe1, 0x8d, 0x22, 0x39, 0xfa, 0xf3, 0xe1, 0x49, 0xfa, - 0x66, 0xea, 0xc3, 0xef, 0x2e, 0x4a, 0x37, 0x6b, 0x30, 0x1f, 0xb1, 0x08, 0xa1, 0x3c, 0x40, 0x79, - 0x6b, 0xb3, 0x56, 0xad, 0xd5, 0xd7, 0x36, 0xeb, 0xde, 0xa3, 0xef, 0x2b, 0xab, 0xca, 0xce, 0x66, - 0x79, 0x6b, 0x63, 0xa3, 0x5a, 0xaf, 0xaf, 0xad, 0xca, 0x12, 0x92, 0x61, 0xa6, 0xba, 0x19, 0x6a, - 0x27, 0xde, 0x7a, 0xbf, 0xf9, 0x0b, 0x00, 0xc1, 0x9b, 0x98, 0x94, 0xd6, 0xfa, 0xda, 0x63, 0xe5, - 0xd1, 0xca, 0xc3, 0x9d, 0xb5, 0x9a, 0x3c, 0x81, 0x10, 0xe4, 0x4b, 0x2b, 0xf5, 0x72, 0x45, 0xc1, - 0x6b, 0xb5, 0xed, 0xad, 0xcd, 0xda, 0x9a, 0x2c, 0x09, 0xbc, 0x0d, 0xc8, 0x86, 0xde, 0xd6, 0xa0, - 0x0d, 0xb7, 0x77, 0x6a, 0x15, 0xa5, 0x5e, 0xdd, 0x58, 0xab, 0xd5, 0x57, 0x36, 0xb6, 0xe5, 0x09, - 0x4a, 0x8c, 0xc1, 0x56, 0x4a, 0x5b, 0xb8, 0x2e, 0x4b, 0x7e, 0xb9, 0xbe, 0xb5, 0x53, 0xae, 0xf8, - 0x8f, 0xcd, 0xa7, 0xd2, 0x49, 0x39, 0x79, 0xd3, 0x82, 0xd3, 0x91, 0xd7, 0x95, 0x50, 0x16, 0xa6, - 0x77, 0x4c, 0xf6, 0x52, 0x83, 0x3c, 0x81, 0x72, 0xa1, 0x1b, 0x4b, 0xb2, 0x84, 0xd2, 0xfc, 0x5e, - 0x8a, 0x9c, 0x40, 0x53, 0x90, 0xa8, 0xdd, 0x95, 0x93, 0x68, 0x16, 0xb2, 0xa1, 0x6b, 0x3f, 0x72, - 0x0a, 0x65, 0xc4, 0x6d, 0x09, 0x79, 0x12, 0xcd, 0x04, 0xd7, 0x15, 0xe4, 0xa9, 0x9b, 0x97, 0x20, - 0x94, 0xcd, 0x8d, 0x00, 0xa6, 0x1e, 0xaa, 0x2e, 0x71, 0x5c, 0x79, 0x02, 0x4d, 0x43, 0x72, 0xa5, - 0xd9, 0x94, 0xa5, 0x3b, 0x3f, 0x90, 0x20, 0xed, 0xbd, 0x9f, 0x87, 0x1e, 0xc2, 0x24, 0x0f, 0xda, - 0x16, 0x07, 0x1b, 0x7b, 0x66, 0x2f, 0x16, 0x96, 0x46, 0xad, 0x06, 0xc5, 0x09, 0xf4, 0xae, 0xf8, - 0x6f, 0x0f, 0x54, 0xd2, 0xe8, 0xf2, 0x30, 0x3d, 0xf0, 0xa8, 0x0e, 0x57, 0x16, 0xaa, 0xdb, 0xc5, - 0x89, 0xcf, 0x48, 0xa5, 0x4b, 0x1f, 0xfe, 0xdb, 0xc5, 0x89, 0x0f, 0x4f, 0x2e, 0x4a, 0x3f, 0x39, - 0xb9, 0x28, 0xfd, 0xf3, 0xc9, 0x45, 0xe9, 0x5f, 0x4f, 0x2e, 0x4a, 0xbf, 0xf9, 0xef, 0x17, 0x27, - 0xde, 0x9b, 0x16, 0x58, 0xbb, 0x53, 0xec, 0x1f, 0x4e, 0xdc, 0xfd, 0x9f, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x89, 0x8d, 0x59, 0xf4, 0x75, 0x63, 0x00, 0x00, + 0x50, 0x88, 0x77, 0x00, 0x28, 0x0b, 0xe3, 0x54, 0x83, 0xff, 0x4e, 0x42, 0x7e, 0xbb, 0xe3, 0xec, + 0xc7, 0xac, 0xf7, 0x65, 0x80, 0x76, 0xc7, 0xd9, 0x27, 0xb6, 0xe2, 0x1e, 0x9a, 0x62, 0xe4, 0x23, + 0xce, 0xc6, 0xbc, 0xa1, 0x73, 0xbc, 0xfa, 0xa1, 0x89, 0xb6, 0x04, 0x11, 0xa2, 0x04, 0x07, 0x6c, + 0x37, 0xc7, 0x88, 0x0b, 0xea, 0x87, 0xe6, 0x06, 0xf1, 0x03, 0x02, 0x4e, 0x90, 0x50, 0x82, 0x9f, + 0x87, 0x69, 0x5a, 0x50, 0x5c, 0xeb, 0x79, 0x34, 0x6c, 0x8a, 0xe2, 0xd4, 0x2d, 0xf4, 0x00, 0xf2, + 0x3a, 0x69, 0xdb, 0x84, 0x9a, 0x21, 0x5d, 0xa1, 0xd3, 0x7a, 0x72, 0x7c, 0x22, 0xb9, 0x00, 0x75, + 0xd3, 0x3a, 0x40, 0x6f, 0x41, 0x86, 0xf7, 0x84, 0xae, 0x3c, 0x53, 0x6c, 0xe5, 0x89, 0x62, 0x8f, + 0x90, 0x0c, 0x5b, 0x73, 0xd2, 0xac, 0x1b, 0x74, 0xc5, 0x39, 0x05, 0x93, 0x7b, 0x96, 0xad, 0x11, + 0x76, 0x3a, 0x97, 0xc6, 0xbc, 0x80, 0x6e, 0xc2, 0x9c, 0x61, 0x6a, 0xcd, 0x8e, 0x63, 0x3c, 0x25, + 0x8a, 0x37, 0x4c, 0xee, 0x81, 0xce, 0xfa, 0x15, 0x8c, 0xa0, 0xe5, 0xbb, 0xa2, 0x69, 0x39, 0x53, + 0xfc, 0x5d, 0x09, 0x66, 0x7d, 0x0d, 0x88, 0xd3, 0x07, 0x2d, 0x77, 0x89, 0xef, 0xf9, 0x75, 0x80, + 0x8a, 0xac, 0xf8, 0xfd, 0x04, 0xcc, 0xbe, 0xd3, 0x21, 0xf6, 0x51, 0xcc, 0x0a, 0x5a, 0xe2, 0xa7, + 0xb6, 0x89, 0x17, 0x54, 0x2a, 0x76, 0x8e, 0x7b, 0x0d, 0x66, 0x0f, 0x54, 0xc3, 0x55, 0xf6, 0x2c, + 0x5b, 0xe9, 0xb4, 0x75, 0xd5, 0xf5, 0xce, 0xb8, 0x72, 0x14, 0x7c, 0xcf, 0xb2, 0x77, 0x18, 0x10, + 0x11, 0x40, 0x4f, 0x4c, 0xeb, 0xc0, 0x54, 0x28, 0xd8, 0x30, 0x1b, 0x94, 0x1f, 0x62, 0x33, 0xa3, + 0xf4, 0xc6, 0x3f, 0x1d, 0x2f, 0xde, 0x6d, 0x18, 0xee, 0x7e, 0x67, 0x77, 0x59, 0xb3, 0x5a, 0xb7, + 0xfc, 0x8e, 0xe8, 0xbb, 0xc1, 0xef, 0x5b, 0xed, 0x27, 0x8d, 0x5b, 0xec, 0xb8, 0xbe, 0xd3, 0x31, + 0xf4, 0xe5, 0x9d, 0x9d, 0xea, 0x2a, 0x96, 0x19, 0xc9, 0x77, 0x39, 0xc5, 0xfa, 0xa1, 0xe9, 0x2d, + 0x98, 0x1f, 0x49, 0x20, 0x07, 0x0c, 0x8b, 0x53, 0x9e, 0x6b, 0x90, 0xfd, 0xa0, 0x43, 0x6c, 0x83, + 0xe8, 0xcf, 0x2d, 0x50, 0x10, 0x88, 0x74, 0x12, 0xbe, 0x07, 0x33, 0x5d, 0x7c, 0x48, 0x7e, 0x3c, + 0x3e, 0x64, 0x0f, 0x02, 0x16, 0x14, 0xff, 0x2a, 0x01, 0x88, 0x0d, 0xbe, 0xca, 0xf7, 0x91, 0x3e, + 0x65, 0x0a, 0xf3, 0x08, 0xc0, 0xd8, 0x53, 0x5a, 0x86, 0xe3, 0x18, 0x66, 0x83, 0xe9, 0x4a, 0xfe, + 0xce, 0x1b, 0x11, 0x7d, 0xe9, 0x1f, 0xc2, 0x72, 0x75, 0x6f, 0x83, 0xa3, 0x95, 0xc8, 0xbe, 0xfa, + 0xd4, 0xb0, 0x6c, 0x9c, 0x31, 0x3c, 0x50, 0xb1, 0x04, 0x73, 0x7d, 0xf5, 0x28, 0x0f, 0xb0, 0xba, + 0xa5, 0x6c, 0x6e, 0xd5, 0x2b, 0xd5, 0xcd, 0xfb, 0xf2, 0x04, 0x92, 0x61, 0x06, 0xaf, 0xd5, 0x77, + 0xf0, 0xa6, 0xb2, 0x86, 0xf1, 0x16, 0x96, 0x25, 0x94, 0x85, 0xe9, 0x6d, 0xbc, 0xf6, 0x68, 0x6d, + 0xb3, 0x2e, 0x27, 0x84, 0xf6, 0xfc, 0x12, 0xcc, 0x77, 0x7d, 0x3c, 0x4e, 0xfd, 0xb9, 0x04, 0x33, + 0x7b, 0x56, 0xc7, 0xd4, 0x15, 0x1e, 0x87, 0x8b, 0xfd, 0x86, 0x2c, 0x83, 0xf1, 0xef, 0x15, 0xbf, + 0x91, 0x80, 0x53, 0x98, 0x38, 0x56, 0xf3, 0x29, 0x89, 0x5f, 0x82, 0x5b, 0x20, 0xb6, 0x17, 0x95, + 0x8f, 0x23, 0xc8, 0x0c, 0xa7, 0xc1, 0x97, 0x93, 0x29, 0xc7, 0x55, 0xdd, 0x8e, 0x23, 0x44, 0x79, + 0x65, 0xf8, 0x5c, 0xa8, 0xb1, 0xb6, 0x58, 0xe0, 0x84, 0xb6, 0x09, 0x52, 0xfd, 0xdb, 0x04, 0xc5, + 0x5f, 0x80, 0xd3, 0x3d, 0x8c, 0x88, 0x73, 0xd5, 0xff, 0x87, 0x04, 0x9c, 0xeb, 0x26, 0x1f, 0x77, + 0x0c, 0xf0, 0x7f, 0x83, 0xd9, 0xa8, 0x02, 0xb9, 0x96, 0x61, 0x2a, 0x81, 0x93, 0xf6, 0x1c, 0x4b, + 0xfa, 0x0c, 0x8d, 0x80, 0xbb, 0xfd, 0x34, 0x1a, 0xae, 0x44, 0xf1, 0x35, 0x4e, 0xd9, 0x7d, 0x5b, + 0x82, 0x99, 0xb8, 0xf7, 0x2f, 0x5e, 0xec, 0x28, 0x5d, 0x8c, 0xb9, 0x0e, 0xb9, 0x4f, 0x60, 0xc3, + 0xe3, 0x8f, 0x24, 0x40, 0x75, 0xbb, 0x63, 0x52, 0x97, 0xe9, 0xa1, 0xd5, 0x88, 0x73, 0xb0, 0xa7, + 0x60, 0xd2, 0x30, 0x75, 0x72, 0xc8, 0x06, 0x9b, 0xc2, 0xbc, 0x80, 0x6e, 0x43, 0x5a, 0x24, 0x50, + 0xf1, 0xd4, 0x80, 0x64, 0xe9, 0xcc, 0xc9, 0xf1, 0xe2, 0x34, 0x4f, 0x97, 0x5a, 0xfd, 0x28, 0xf8, + 0x89, 0xa7, 0x79, 0xc6, 0x94, 0x97, 0xad, 0xf2, 0x1e, 0xcc, 0x77, 0x75, 0x34, 0x4e, 0x2e, 0x7c, + 0x3f, 0x01, 0xf3, 0x62, 0x38, 0xb1, 0x6f, 0xf8, 0xbc, 0x50, 0xf6, 0x1d, 0xfa, 0x02, 0x40, 0xdb, + 0x26, 0x4f, 0x15, 0x8e, 0x9a, 0x1c, 0x0b, 0x35, 0x43, 0x31, 0x18, 0x00, 0x7d, 0x19, 0x66, 0xe9, + 0x84, 0x6b, 0xdb, 0x56, 0xdb, 0x72, 0xa8, 0x27, 0xe1, 0x8c, 0xe7, 0x8a, 0xcf, 0x9d, 0x1c, 0x2f, + 0xe6, 0x36, 0x0c, 0x73, 0x5b, 0x20, 0xd6, 0x6b, 0x98, 0xce, 0x5c, 0xbf, 0xe8, 0xb9, 0x3f, 0x7f, + 0x2f, 0xc1, 0xa9, 0x4f, 0x6c, 0x8b, 0xec, 0x7f, 0x83, 0x63, 0xfe, 0x7a, 0x20, 0xb3, 0x62, 0xd5, + 0xdc, 0xb3, 0xe2, 0xdf, 0xb8, 0xfc, 0xb6, 0x04, 0x73, 0x21, 0xf2, 0x71, 0xae, 0xfa, 0x2f, 0x96, + 0xe3, 0xf9, 0x15, 0xea, 0x07, 0x84, 0xd5, 0x3e, 0xce, 0x49, 0xf5, 0x07, 0x12, 0x9c, 0x29, 0xf3, + 0xe3, 0x2c, 0x76, 0x6a, 0xe7, 0x74, 0x5a, 0x71, 0x6a, 0x49, 0x01, 0xa6, 0x9f, 0x12, 0xdb, 0x31, + 0x2c, 0xbe, 0xee, 0xe5, 0xb0, 0x57, 0x64, 0xb9, 0xa6, 0xa6, 0xda, 0x76, 0xf6, 0x2d, 0x6f, 0x37, + 0xde, 0x2f, 0xfb, 0x21, 0x59, 0x52, 0x4e, 0x15, 0x7f, 0x2c, 0xc1, 0xd9, 0xbe, 0x0e, 0xc6, 0x29, + 0x94, 0xaf, 0x41, 0x56, 0x13, 0x84, 0xa9, 0xb9, 0xe3, 0x1b, 0xf2, 0x55, 0xda, 0xec, 0x05, 0xdd, + 0xf0, 0x93, 0xe3, 0x45, 0xf0, 0xba, 0x5a, 0x5d, 0xc5, 0xe0, 0x51, 0xaf, 0xea, 0xc5, 0x9f, 0x02, + 0xe4, 0xd6, 0x0e, 0xdb, 0x96, 0xed, 0xd6, 0xf8, 0x9a, 0x8f, 0x56, 0x21, 0xdd, 0xb6, 0xad, 0xa7, + 0x86, 0x37, 0x88, 0x7c, 0xe4, 0x81, 0x50, 0x17, 0xce, 0xb6, 0x68, 0x8f, 0x7d, 0x4c, 0x84, 0x21, + 0xf3, 0xd0, 0xd2, 0xd4, 0xe6, 0x3d, 0xa3, 0xe9, 0x29, 0xd7, 0xf2, 0x28, 0x32, 0xcb, 0x3e, 0xc6, + 0xb6, 0xea, 0xee, 0x7b, 0x73, 0xcd, 0x07, 0xa2, 0xfb, 0x90, 0xae, 0xb8, 0x6e, 0x9b, 0x56, 0x8a, + 0x89, 0x7a, 0x75, 0x24, 0x49, 0x8a, 0x20, 0x28, 0xf9, 0xc8, 0x08, 0xc3, 0xdc, 0x7d, 0xcb, 0x6a, + 0x34, 0x49, 0xb9, 0x69, 0x75, 0xf4, 0xb2, 0x65, 0xee, 0x19, 0x0d, 0x61, 0xe8, 0xae, 0x8c, 0xa4, + 0x78, 0xbf, 0x5c, 0xc3, 0xfd, 0xe8, 0xe8, 0x8b, 0x90, 0xae, 0xdd, 0x15, 0xa4, 0xb8, 0x9b, 0x72, + 0x79, 0x24, 0xa9, 0xda, 0x5d, 0xec, 0x23, 0xa1, 0x0a, 0x64, 0x57, 0x9e, 0x75, 0x6c, 0x22, 0x68, + 0x4c, 0x31, 0x1a, 0xd7, 0x46, 0xd2, 0x60, 0x38, 0x38, 0x8c, 0x8a, 0xde, 0x81, 0xfc, 0xbb, 0x96, + 0xfd, 0xa4, 0x69, 0xa9, 0xde, 0xd8, 0xa6, 0x19, 0xb1, 0x97, 0x47, 0x12, 0xf3, 0xd0, 0x70, 0x0f, + 0x81, 0x85, 0x2f, 0x43, 0xae, 0x4b, 0x38, 0x08, 0x41, 0xaa, 0x4d, 0xe5, 0x40, 0x35, 0x24, 0x83, + 0xd9, 0x6f, 0xf4, 0x1a, 0x4c, 0x9b, 0x96, 0x4e, 0x3c, 0x9d, 0xcd, 0x95, 0x4e, 0x9d, 0x1c, 0x2f, + 0x4e, 0x6d, 0x5a, 0x3a, 0x5f, 0xa1, 0xc5, 0x2f, 0x3c, 0x45, 0x1b, 0x79, 0xeb, 0xf3, 0xc2, 0x35, + 0x48, 0x51, 0xb9, 0xd0, 0x79, 0xb9, 0xab, 0x3a, 0x64, 0xc7, 0x36, 0x04, 0x4d, 0xaf, 0x28, 0xda, + 0xfd, 0xb5, 0x04, 0x89, 0xda, 0x5d, 0xea, 0x2a, 0xee, 0x76, 0xb4, 0x27, 0xc4, 0x15, 0xad, 0x44, + 0x89, 0xb9, 0x90, 0x36, 0xd9, 0x33, 0xb8, 0xdb, 0x90, 0xc1, 0xa2, 0x84, 0x5e, 0x02, 0x50, 0x35, + 0x8d, 0x38, 0x8e, 0xe2, 0x25, 0xa1, 0x67, 0x70, 0x86, 0x43, 0xd6, 0xc9, 0x11, 0x45, 0x73, 0x88, + 0x66, 0x13, 0x3e, 0xe3, 0x33, 0x58, 0x94, 0x28, 0x9a, 0x4b, 0x5a, 0x6d, 0xc5, 0xb5, 0x9e, 0x10, + 0x93, 0xc9, 0x33, 0x83, 0x33, 0x14, 0x52, 0xa7, 0x00, 0x6a, 0x2a, 0x88, 0xa9, 0xb7, 0x2d, 0xc3, + 0x74, 0x99, 0xa0, 0x32, 0xd8, 0x2f, 0x53, 0x92, 0x36, 0x69, 0x18, 0x22, 0x3d, 0x3b, 0x83, 0x45, + 0x49, 0x0c, 0xe3, 0x3b, 0x12, 0x24, 0xef, 0x97, 0x6b, 0xcf, 0x3d, 0x0e, 0x04, 0x29, 0xb5, 0x23, + 0xf4, 0x3e, 0x83, 0xd9, 0x6f, 0x96, 0x83, 0x61, 0x34, 0x9b, 0x34, 0x56, 0x6f, 0xdb, 0xd6, 0xd7, + 0x88, 0xe6, 0x8d, 0x22, 0x2f, 0xc0, 0xdb, 0x1c, 0x8a, 0x96, 0x20, 0xab, 0xd9, 0x44, 0x27, 0xa6, + 0x6b, 0xa8, 0x4d, 0x47, 0x0c, 0x27, 0x0c, 0x12, 0x9d, 0xfb, 0x86, 0x04, 0x93, 0x4c, 0x91, 0xd0, + 0x05, 0xc8, 0x68, 0x96, 0xe9, 0xaa, 0x86, 0x29, 0xac, 0x40, 0x06, 0x07, 0x80, 0x81, 0x9d, 0xbc, + 0x04, 0x33, 0xaa, 0xa6, 0x59, 0x1d, 0xd3, 0x55, 0x4c, 0xb5, 0x45, 0x44, 0x67, 0xb3, 0x02, 0xb6, + 0xa9, 0xb6, 0x08, 0x5a, 0x04, 0xaf, 0xe8, 0xa7, 0xfd, 0x67, 0x30, 0x08, 0x90, 0x7f, 0xca, 0xb8, + 0xf0, 0x63, 0x09, 0xd2, 0x9e, 0x0a, 0xd2, 0xce, 0x34, 0x88, 0x49, 0x6c, 0xd5, 0xb5, 0xfc, 0xce, + 0xf8, 0x80, 0x5e, 0x83, 0x9e, 0x09, 0x0c, 0xfa, 0x29, 0x98, 0x74, 0xd5, 0xdd, 0xa6, 0xd7, 0x0f, + 0x5e, 0x60, 0xfb, 0x73, 0x4d, 0xb5, 0xc1, 0xb7, 0x78, 0x32, 0x98, 0x17, 0xe8, 0x90, 0x44, 0xd2, + 0x0f, 0xe7, 0x8e, 0x28, 0xd1, 0xfe, 0xf2, 0x3c, 0x97, 0x5d, 0xd2, 0x30, 0x4c, 0x26, 0xec, 0x24, + 0x06, 0x06, 0x62, 0x79, 0x05, 0xe8, 0x3c, 0x64, 0x78, 0x03, 0x62, 0xea, 0x4c, 0xe2, 0x49, 0x9c, + 0x66, 0x80, 0x35, 0x2f, 0x61, 0x5a, 0xac, 0xe2, 0x7f, 0x2a, 0xc1, 0xdc, 0xbb, 0xb6, 0xe1, 0x92, + 0x12, 0x4f, 0x90, 0x89, 0x6f, 0x49, 0x7b, 0x13, 0x32, 0xba, 0xea, 0xaa, 0xfc, 0xbe, 0x42, 0x62, + 0xe8, 0x7d, 0x05, 0xcf, 0x14, 0xd2, 0xf6, 0xec, 0xce, 0x02, 0x82, 0x14, 0xfd, 0xcd, 0xaf, 0x67, + 0x60, 0xf6, 0x3b, 0x38, 0x2e, 0x0d, 0x77, 0x37, 0xce, 0x25, 0xfe, 0xeb, 0x49, 0x6f, 0xd1, 0x89, + 0x93, 0x0d, 0x5f, 0x82, 0x69, 0x11, 0xb7, 0x0a, 0x26, 0x2c, 0x8d, 0xb2, 0x77, 0xde, 0xa1, 0x96, + 0x40, 0x43, 0x25, 0x00, 0xc7, 0x55, 0x6d, 0x97, 0x45, 0x9c, 0x63, 0xe5, 0x55, 0x78, 0x8b, 0x14, + 0x43, 0xa3, 0x50, 0xb4, 0x09, 0xd9, 0xd6, 0x53, 0x4d, 0x53, 0xf6, 0x8c, 0xa6, 0x2b, 0x52, 0x2a, + 0xa2, 0x53, 0xc8, 0x36, 0x1e, 0x95, 0xcb, 0xf7, 0x58, 0x23, 0x9e, 0xd9, 0x10, 0x94, 0x31, 0x50, + 0x0a, 0xfc, 0x37, 0x7a, 0x15, 0x44, 0x76, 0xa9, 0xe2, 0x78, 0xb9, 0xe2, 0xa5, 0xdc, 0xc9, 0xf1, + 0x62, 0x06, 0x33, 0x68, 0xad, 0x56, 0xc7, 0x19, 0xde, 0xa0, 0xe6, 0xb8, 0xe8, 0x32, 0xe4, 0xac, + 0x96, 0xe1, 0x2a, 0xde, 0x0a, 0xcf, 0x53, 0x27, 0xf0, 0x0c, 0x05, 0x7a, 0x1e, 0x80, 0x90, 0xef, + 0xb7, 0x24, 0xc8, 0x95, 0x3a, 0xcd, 0x27, 0x5b, 0xed, 0x5a, 0xa7, 0xd5, 0x52, 0xed, 0x23, 0xaa, + 0xca, 0x5c, 0x8f, 0x8c, 0x67, 0x84, 0xc9, 0x21, 0x29, 0x14, 0xc5, 0x78, 0x46, 0xa8, 0xa2, 0x88, + 0x5c, 0x33, 0x0a, 0xe7, 0x89, 0x64, 0x97, 0x21, 0xc7, 0xa2, 0x33, 0x85, 0x98, 0xae, 0x6d, 0x10, + 0x1e, 0xfc, 0x27, 0xf1, 0x0c, 0x03, 0xae, 0x71, 0x18, 0xba, 0x0a, 0x79, 0xe7, 0xc8, 0x71, 0x49, + 0x4b, 0xe1, 0xb7, 0x98, 0x78, 0x48, 0x91, 0xc4, 0x39, 0x0e, 0xc5, 0x1c, 0x58, 0xfc, 0xb3, 0x24, + 0xe4, 0x3d, 0x9d, 0x88, 0xd3, 0x99, 0x2a, 0xc1, 0xe4, 0x9e, 0xd1, 0x24, 0xde, 0x61, 0xe7, 0xe0, + 0x05, 0xd5, 0xa3, 0xb4, 0x4c, 0xd7, 0x38, 0xcf, 0xdf, 0x65, 0xa8, 0x71, 0xe8, 0xc5, 0xc2, 0x4f, + 0x24, 0x48, 0x31, 0x2f, 0xe6, 0x36, 0xa4, 0xd8, 0x44, 0x95, 0xc6, 0x99, 0xa8, 0xac, 0xa9, 0xbf, + 0xd8, 0x26, 0x42, 0x8b, 0x2d, 0x5d, 0xb9, 0xf6, 0xd5, 0xd7, 0x6f, 0xdf, 0x61, 0x3a, 0x31, 0x83, + 0x45, 0x09, 0x95, 0x20, 0x4d, 0xd8, 0x78, 0x88, 0x2e, 0x7c, 0x88, 0xa8, 0x69, 0xd0, 0x25, 0x78, + 0xcf, 0x28, 0x78, 0x78, 0xe8, 0x1c, 0x24, 0xa9, 0xb2, 0x4d, 0xf3, 0x33, 0xb3, 0x93, 0xe3, 0xc5, + 0x24, 0x55, 0x33, 0x0a, 0xe3, 0x2e, 0xf0, 0x83, 0x54, 0x3a, 0x25, 0x4f, 0x16, 0x7f, 0x98, 0x82, + 0x5c, 0xb5, 0x15, 0xf7, 0x34, 0x5e, 0xe9, 0x16, 0x58, 0x94, 0x8b, 0xd7, 0xf5, 0xd1, 0x08, 0x79, + 0x75, 0x19, 0xc4, 0xe4, 0xf3, 0x19, 0xc4, 0x2a, 0x5d, 0xbe, 0xc5, 0x15, 0x2e, 0xfa, 0xfd, 0x57, + 0x46, 0x7e, 0xbf, 0x4e, 0x97, 0x15, 0x4c, 0x71, 0xbc, 0x23, 0x29, 0x4e, 0x00, 0xbd, 0xcd, 0xbc, + 0x04, 0xae, 0x34, 0x53, 0xe3, 0x2b, 0xcd, 0x34, 0x31, 0x75, 0xa6, 0x32, 0x87, 0x42, 0x63, 0x3e, + 0x07, 0x49, 0xdd, 0x18, 0xc6, 0xd2, 0x28, 0xa3, 0x46, 0x51, 0x46, 0x28, 0x4e, 0x2a, 0xac, 0x38, + 0xe1, 0x10, 0x67, 0x61, 0x0b, 0x20, 0x18, 0x15, 0x5a, 0x82, 0x29, 0xab, 0xa9, 0x53, 0xb7, 0x4e, + 0x62, 0x6e, 0x5d, 0xe6, 0xe4, 0x78, 0x71, 0x72, 0xab, 0xa9, 0x57, 0x57, 0xf1, 0xa4, 0xd5, 0xd4, + 0xab, 0x3a, 0xbb, 0xf9, 0x46, 0x0e, 0x14, 0x76, 0xd9, 0x90, 0x85, 0x2b, 0x78, 0xda, 0x24, 0x07, + 0xab, 0xc4, 0xd1, 0xc2, 0x4b, 0xa0, 0x50, 0x9b, 0x3f, 0x94, 0x20, 0xef, 0x71, 0x30, 0xde, 0x99, + 0x9e, 0x36, 0x5a, 0x42, 0xf3, 0x93, 0xcf, 0xa7, 0xf9, 0x1e, 0x9e, 0xc8, 0xcf, 0xff, 0xa6, 0x04, + 0xf3, 0x3c, 0xc9, 0x49, 0x53, 0x5d, 0x6a, 0x90, 0x63, 0x54, 0xef, 0x97, 0x41, 0xb6, 0x55, 0x53, + 0xb7, 0x5a, 0xc6, 0x33, 0xc2, 0x37, 0x1d, 0x1c, 0xb1, 0xd7, 0x3e, 0xeb, 0xc3, 0x59, 0x54, 0xed, + 0xed, 0x99, 0xfc, 0x9b, 0x04, 0xa7, 0xba, 0x3b, 0x13, 0x27, 0xd3, 0xd6, 0x61, 0x8a, 0xed, 0x97, + 0x79, 0xd3, 0xed, 0xb5, 0x08, 0x22, 0x51, 0x5f, 0xe7, 0x17, 0x15, 0x7d, 0x85, 0x67, 0x24, 0x16, + 0xbe, 0x04, 0x93, 0x0c, 0xfc, 0x02, 0x36, 0x4e, 0x70, 0xfe, 0x03, 0x98, 0x5b, 0xd1, 0xf5, 0x5a, + 0x4d, 0x68, 0x5f, 0x7c, 0x6c, 0xf7, 0xfc, 0x9c, 0x44, 0x94, 0x9f, 0x13, 0xfe, 0x64, 0x9c, 0x7e, + 0x4e, 0x1b, 0xf2, 0x22, 0xf7, 0x30, 0xe6, 0x0d, 0xd2, 0x03, 0xea, 0x98, 0x09, 0xb5, 0xe1, 0x85, + 0xe0, 0xda, 0x93, 0xff, 0xc5, 0x38, 0x47, 0xd2, 0x81, 0x79, 0x8f, 0x6e, 0xdc, 0x67, 0x11, 0xc3, + 0x86, 0xc3, 0x36, 0x9a, 0xc2, 0x9f, 0x8d, 0x73, 0x4c, 0xdf, 0x93, 0x20, 0x5f, 0xeb, 0xec, 0xf2, + 0xbb, 0xaf, 0xf1, 0x8d, 0xe7, 0x3e, 0x40, 0x93, 0xec, 0x89, 0x7b, 0x29, 0xc2, 0x13, 0x1d, 0xff, + 0xea, 0x75, 0x86, 0xe2, 0xb2, 0x2a, 0xc1, 0x82, 0x1f, 0x26, 0x60, 0xd6, 0xef, 0x65, 0x9c, 0x33, + 0xff, 0x17, 0x81, 0xb9, 0x99, 0x8a, 0xe3, 0xaa, 0xae, 0x23, 0x0c, 0xe6, 0xab, 0xcf, 0x93, 0xd7, + 0x5d, 0x9a, 0x13, 0x39, 0x39, 0x19, 0x1f, 0x84, 0x33, 0x94, 0x24, 0xfb, 0x89, 0x96, 0x61, 0x9e, + 0x99, 0x37, 0x45, 0x6d, 0xb7, 0x9b, 0x06, 0xd1, 0x15, 0xbe, 0xab, 0x9f, 0x62, 0xbb, 0xfa, 0x73, + 0xac, 0x6a, 0x85, 0xd7, 0x54, 0xd9, 0x0e, 0xff, 0x3d, 0x98, 0xd9, 0xb3, 0x09, 0x79, 0x46, 0x14, + 0xe6, 0x34, 0x3d, 0xcf, 0x59, 0x4f, 0x96, 0x23, 0xd6, 0x28, 0x9e, 0x30, 0x24, 0xef, 0xc3, 0x1c, + 0xe3, 0x62, 0xdc, 0xe9, 0xf8, 0x42, 0x2a, 0x3f, 0x95, 0x00, 0x85, 0xe9, 0x7f, 0x72, 0x82, 0x49, + 0xc4, 0x2e, 0x98, 0x57, 0x01, 0xf1, 0x03, 0x7f, 0x47, 0x69, 0x13, 0x5b, 0x71, 0x88, 0x66, 0x89, + 0xfb, 0x96, 0x12, 0x96, 0x45, 0xcd, 0x36, 0xb1, 0x6b, 0x0c, 0x5e, 0xfc, 0x8d, 0x02, 0xcc, 0x08, + 0x9e, 0xec, 0x98, 0x34, 0xaa, 0xbe, 0x0d, 0xc9, 0x86, 0xd8, 0xb6, 0xc8, 0x46, 0x06, 0x36, 0xc1, + 0x9d, 0xef, 0xca, 0x04, 0xa6, 0x6d, 0x29, 0x4a, 0xbb, 0xe3, 0x46, 0xa4, 0x58, 0x05, 0x99, 0x34, + 0x61, 0x94, 0x76, 0xc7, 0x45, 0x35, 0x98, 0xd5, 0x82, 0x3b, 0xaf, 0x0a, 0x45, 0x4f, 0x0e, 0xcc, + 0x4e, 0x8f, 0xbc, 0x39, 0x5c, 0x99, 0xc0, 0x79, 0xad, 0xab, 0x02, 0x95, 0xc3, 0x97, 0x2c, 0x53, + 0x03, 0x37, 0xe9, 0x7a, 0x2f, 0x78, 0x56, 0x26, 0x42, 0x77, 0x31, 0xd1, 0x9b, 0x30, 0xa5, 0xb3, + 0xcb, 0x7b, 0x42, 0x43, 0xa3, 0x94, 0xa8, 0xeb, 0xbe, 0x64, 0x65, 0x02, 0x0b, 0x0c, 0xf4, 0x00, + 0x66, 0xf8, 0x2f, 0x61, 0x1d, 0xa6, 0x06, 0xee, 0x62, 0xf6, 0x5f, 0x5f, 0xac, 0x4c, 0xe0, 0xac, + 0x1e, 0x40, 0xd1, 0x67, 0x21, 0xe5, 0x68, 0xaa, 0x29, 0xf6, 0xf6, 0x2e, 0x0e, 0xb8, 0xa4, 0x14, + 0x20, 0xb3, 0xd6, 0xe8, 0x31, 0xcc, 0xb1, 0x9d, 0x0c, 0xc5, 0x0d, 0x4e, 0x63, 0x59, 0xa6, 0x7c, + 0xf7, 0x01, 0xb0, 0xef, 0x2d, 0x45, 0x5f, 0xd0, 0xa8, 0x4c, 0x60, 0x79, 0xb7, 0xa7, 0x8a, 0x8a, + 0x8c, 0xb9, 0xbb, 0x21, 0xc2, 0x99, 0x81, 0x22, 0x8b, 0xbc, 0x32, 0x41, 0x45, 0x46, 0xba, 0x2a, + 0xd0, 0x7d, 0xc8, 0xaa, 0xd4, 0xfd, 0x50, 0x58, 0x1a, 0x7a, 0x01, 0x06, 0x6e, 0xd2, 0xf6, 0x65, + 0xc6, 0x57, 0xd8, 0x6d, 0x13, 0x0f, 0x18, 0x10, 0x6a, 0x11, 0xbb, 0x41, 0x0a, 0xd9, 0xe1, 0x84, + 0xc2, 0x47, 0xb8, 0x3e, 0x21, 0x06, 0x44, 0x1b, 0x90, 0xdb, 0xf7, 0xf2, 0x3e, 0xd9, 0xf1, 0xf9, + 0xcc, 0xc0, 0x9d, 0xda, 0x88, 0xbc, 0xd5, 0xca, 0x04, 0x9e, 0xd9, 0x0f, 0x81, 0xd1, 0x32, 0x24, + 0x1a, 0x5a, 0x21, 0xc7, 0x68, 0x5c, 0x18, 0x96, 0x95, 0x59, 0x99, 0xc0, 0x89, 0x86, 0x46, 0x83, + 0x0a, 0x9e, 0x3e, 0x76, 0x68, 0x16, 0xf2, 0x03, 0x8d, 0x4c, 0x77, 0xd2, 0x60, 0x65, 0x02, 0xb3, + 0xd4, 0x3a, 0xfa, 0xbd, 0x6d, 0xc8, 0xdb, 0xfc, 0x0c, 0xdc, 0xcb, 0xf4, 0x90, 0x19, 0x95, 0xeb, + 0xd1, 0xa6, 0xaa, 0x2f, 0xd9, 0xa3, 0x32, 0x81, 0x73, 0x76, 0x18, 0x8e, 0xbe, 0x0a, 0xa7, 0xba, + 0x29, 0x0a, 0xe5, 0x9e, 0xeb, 0xb3, 0x5c, 0xd1, 0x74, 0xbb, 0x75, 0x1c, 0xd9, 0x7d, 0x95, 0xe8, + 0x0d, 0x98, 0xe4, 0x52, 0x43, 0x8c, 0xe4, 0x62, 0xd4, 0x6e, 0x4a, 0xb7, 0xc0, 0x78, 0x7b, 0x3a, + 0xdf, 0x5c, 0x71, 0xf8, 0xab, 0x34, 0xad, 0x46, 0x61, 0x7e, 0xe0, 0x7c, 0xeb, 0x3f, 0xcc, 0xa6, + 0xf3, 0xcd, 0x0d, 0xa0, 0x54, 0xee, 0x36, 0xaf, 0x11, 0x67, 0x85, 0xa7, 0x06, 0xca, 0x3d, 0xe2, + 0x4c, 0x98, 0xca, 0xdd, 0x0e, 0x81, 0x69, 0xd7, 0x6c, 0x7e, 0x2f, 0x50, 0x61, 0xd3, 0xf8, 0xf4, + 0xc0, 0xae, 0xf5, 0xdf, 0x75, 0xa4, 0x5d, 0xb3, 0x03, 0x28, 0x7a, 0x04, 0xb2, 0xb8, 0x00, 0x16, + 0x6c, 0xfc, 0x9c, 0x19, 0xb8, 0xe5, 0x1f, 0x7d, 0xb8, 0x56, 0x99, 0xc0, 0xb3, 0x5a, 0x77, 0x0d, + 0x35, 0x16, 0x8c, 0x9e, 0xa2, 0x05, 0x37, 0xe7, 0x0a, 0x85, 0x81, 0xc6, 0x62, 0xc0, 0x35, 0x3f, + 0x6a, 0x2c, 0xb4, 0x9e, 0x2a, 0xaa, 0xc6, 0x86, 0x69, 0xb8, 0xcc, 0xb0, 0x2f, 0x0c, 0x54, 0xe3, + 0xee, 0x67, 0x09, 0xa8, 0x1a, 0x1b, 0x1c, 0x42, 0xd5, 0xd8, 0x15, 0x07, 0xc9, 0x42, 0x1c, 0x17, + 0x06, 0xaa, 0x71, 0xd4, 0x89, 0x33, 0x55, 0x63, 0x37, 0x0c, 0xa7, 0x6a, 0xcc, 0x0d, 0x44, 0x0f, + 0xdd, 0x97, 0x06, 0xaa, 0xf1, 0xc0, 0x1b, 0x1f, 0x54, 0x8d, 0xd5, 0xbe, 0x4a, 0xb4, 0x4a, 0x3d, + 0x43, 0xea, 0x11, 0x19, 0xe6, 0x9e, 0x55, 0xb8, 0x38, 0x70, 0xfd, 0xe9, 0x3d, 0x4a, 0xae, 0x30, + 0xb7, 0x50, 0xc0, 0xa8, 0x21, 0x63, 0x2e, 0xb2, 0xc2, 0x76, 0x99, 0x0b, 0x8b, 0x03, 0x0d, 0x59, + 0xdf, 0x66, 0x33, 0x35, 0x64, 0x07, 0x3e, 0x90, 0x2e, 0x64, 0x7c, 0xc7, 0xa7, 0xb0, 0x34, 0x62, + 0x67, 0x21, 0xb4, 0x90, 0x71, 0x0c, 0xb4, 0x02, 0x19, 0xea, 0x29, 0x1c, 0x31, 0x33, 0x74, 0x69, + 0xa0, 0x8f, 0xdb, 0x93, 0x1b, 0x5a, 0x99, 0xc0, 0xe9, 0x0f, 0x04, 0x88, 0x7e, 0x9e, 0x87, 0xdd, + 0x85, 0xe2, 0xc0, 0xcf, 0x77, 0x6d, 0xb4, 0xd0, 0xcf, 0x73, 0x0c, 0xa4, 0xc1, 0x69, 0x2e, 0x2b, + 0x71, 0x45, 0xc4, 0x16, 0x77, 0x31, 0x0a, 0x97, 0x19, 0xa9, 0x81, 0x41, 0x6c, 0xe4, 0x75, 0x95, + 0xca, 0x04, 0x9e, 0x57, 0xfb, 0x6b, 0xe9, 0x84, 0x17, 0x4b, 0x0f, 0x0f, 0x7d, 0x0b, 0x57, 0x06, + 0x4e, 0xf8, 0x88, 0xcd, 0x02, 0x3a, 0xe1, 0xd5, 0x10, 0x98, 0x2f, 0x40, 0xba, 0xe2, 0x38, 0xfc, + 0x4c, 0xe2, 0xea, 0x90, 0x05, 0xa8, 0x27, 0x00, 0xe6, 0x0b, 0x90, 0x5e, 0xe3, 0x98, 0x94, 0x90, + 0xd6, 0x24, 0xaa, 0x2d, 0xcc, 0xec, 0xb5, 0x81, 0x84, 0xfa, 0xae, 0xfa, 0x53, 0x42, 0x9a, 0x0f, + 0xa4, 0x0b, 0xb6, 0xed, 0xdd, 0x1c, 0x15, 0xde, 0xe6, 0xf5, 0x81, 0x0b, 0x76, 0xe4, 0x05, 0x57, + 0xba, 0x60, 0xdb, 0x5d, 0x15, 0xe8, 0x0b, 0x30, 0x2d, 0xae, 0xe1, 0x15, 0x6e, 0x0c, 0xf1, 0x81, + 0xc3, 0x51, 0x31, 0x9d, 0xd7, 0x02, 0x87, 0x5b, 0x59, 0x7e, 0x8b, 0x8f, 0x0f, 0xef, 0xe5, 0x21, + 0x56, 0xb6, 0x2f, 0x20, 0xe5, 0x56, 0x36, 0x00, 0x53, 0x2b, 0xcb, 0xf5, 0x54, 0xac, 0x75, 0x37, + 0x07, 0x5a, 0xd9, 0xfe, 0xac, 0x4e, 0x6a, 0x65, 0x3f, 0x08, 0xa0, 0x74, 0x64, 0x0e, 0x0f, 0xc4, + 0x0a, 0xaf, 0x0c, 0x1c, 0x59, 0x77, 0x40, 0x49, 0x47, 0x26, 0x70, 0xa8, 0xd8, 0x78, 0x06, 0x13, + 0xe7, 0xf4, 0xab, 0x03, 0xc5, 0xd6, 0x17, 0xb7, 0x54, 0xbc, 0x67, 0xa0, 0x38, 0x87, 0x7d, 0x43, + 0x65, 0x8b, 0x5b, 0x37, 0x82, 0x53, 0xaf, 0x0d, 0x37, 0x54, 0x51, 0x17, 0x8a, 0x7c, 0x43, 0xd5, + 0x55, 0x59, 0x9a, 0x16, 0xf9, 0x66, 0x0f, 0x52, 0xe9, 0x59, 0x59, 0x7e, 0x90, 0x4a, 0x9f, 0x95, + 0x0b, 0x0f, 0x52, 0xe9, 0x73, 0xf2, 0xc2, 0x83, 0x54, 0xfa, 0xbc, 0x7c, 0xa1, 0xf8, 0xef, 0x67, + 0x21, 0xe7, 0xc5, 0x31, 0x3c, 0x2a, 0xb8, 0x13, 0x8e, 0x0a, 0x2e, 0x0e, 0x8a, 0x0a, 0x44, 0xe4, + 0x23, 0xc2, 0x82, 0x3b, 0xe1, 0xb0, 0xe0, 0xe2, 0xa0, 0xb0, 0x20, 0xc0, 0xa1, 0x71, 0x41, 0x7d, + 0x50, 0x5c, 0xf0, 0xf2, 0x18, 0x71, 0x81, 0x4f, 0xaa, 0x37, 0x30, 0x58, 0xed, 0x0f, 0x0c, 0xae, + 0x0c, 0x0f, 0x0c, 0x7c, 0x52, 0xa1, 0xc8, 0xe0, 0xad, 0x9e, 0xc8, 0xe0, 0xd2, 0x90, 0xc8, 0xc0, + 0xc7, 0xf7, 0x42, 0x83, 0xf5, 0xc8, 0xd0, 0xe0, 0xda, 0xa8, 0xd0, 0xc0, 0xa7, 0xd3, 0x15, 0x1b, + 0xbc, 0xde, 0x15, 0x1b, 0x2c, 0x0e, 0x8c, 0x0d, 0x7c, 0x6c, 0x1e, 0x1c, 0xbc, 0x37, 0x38, 0x38, + 0x78, 0x65, 0xac, 0xe0, 0xc0, 0xa7, 0xd7, 0x1f, 0x1d, 0xd4, 0x07, 0x45, 0x07, 0x2f, 0x8f, 0x11, + 0x1d, 0x04, 0x82, 0xeb, 0x09, 0x0f, 0x2a, 0x51, 0xe1, 0xc1, 0xd5, 0x11, 0xe1, 0x81, 0x4f, 0x2d, + 0x1c, 0x1f, 0x54, 0xa2, 0xe2, 0x83, 0xab, 0x23, 0xe2, 0x83, 0x1e, 0x4a, 0x3c, 0x40, 0xd8, 0x8c, + 0x0e, 0x10, 0xae, 0x8f, 0x0c, 0x10, 0x7c, 0x6a, 0xdd, 0x11, 0xc2, 0xad, 0x50, 0x84, 0xf0, 0xd2, + 0x80, 0x08, 0xc1, 0x47, 0xa5, 0x21, 0xc2, 0x17, 0xfb, 0x42, 0x84, 0xe2, 0xb0, 0x10, 0xc1, 0xc7, + 0xf5, 0x63, 0x84, 0x77, 0x06, 0xc4, 0x08, 0x37, 0x46, 0xc7, 0x08, 0x3e, 0xb1, 0x9e, 0x20, 0x41, + 0x1d, 0x1a, 0x24, 0xbc, 0x36, 0x66, 0x90, 0xe0, 0x53, 0x8f, 0x8a, 0x12, 0x3e, 0xd7, 0x1d, 0x25, + 0x2c, 0x0d, 0x8e, 0x12, 0x7c, 0x32, 0x22, 0x4c, 0x58, 0x8f, 0x0c, 0x13, 0xae, 0x8d, 0x0a, 0x13, + 0x82, 0xb9, 0x17, 0x8e, 0x13, 0x36, 0xa3, 0xe3, 0x84, 0xeb, 0x23, 0xe3, 0x84, 0x40, 0xfc, 0x5d, + 0x81, 0xc2, 0x7a, 0x64, 0xa0, 0x70, 0x6d, 0x54, 0xa0, 0x10, 0x74, 0x2e, 0x1c, 0x29, 0xbc, 0x3b, + 0x30, 0x52, 0xb8, 0x39, 0x4e, 0xa4, 0xe0, 0x13, 0xed, 0x0b, 0x15, 0xde, 0x1b, 0x1c, 0x2a, 0xbc, + 0x32, 0x56, 0xa8, 0x10, 0x98, 0x8e, 0xbe, 0x58, 0xe1, 0x8b, 0x7d, 0xb1, 0x42, 0x71, 0x58, 0xac, + 0x10, 0xe8, 0xb3, 0x17, 0x2c, 0xa8, 0x43, 0x5d, 0xfb, 0xd7, 0xc6, 0x74, 0xed, 0x03, 0xe5, 0x8b, + 0xf0, 0xed, 0xd7, 0x22, 0x7c, 0xfb, 0x2b, 0xc3, 0x7d, 0xfb, 0x60, 0x09, 0x09, 0x9c, 0xfb, 0x4a, + 0x94, 0x73, 0x7f, 0x75, 0x84, 0x73, 0x1f, 0x58, 0xa1, 0x90, 0x77, 0xff, 0x56, 0x8f, 0x77, 0x7f, + 0x69, 0xe4, 0xc1, 0x77, 0xc8, 0xbd, 0x2f, 0xf5, 0xbb, 0xf7, 0x97, 0x87, 0xba, 0xf7, 0x3e, 0x85, + 0xc0, 0xbf, 0x7f, 0xab, 0xc7, 0xbf, 0xbf, 0x34, 0xc4, 0xbf, 0x0f, 0x3a, 0x20, 0x1c, 0x7c, 0x7d, + 0xb8, 0x83, 0xbf, 0x3c, 0xae, 0x83, 0xef, 0x13, 0x8e, 0xf4, 0xf0, 0x37, 0xa3, 0x3d, 0xfc, 0xeb, + 0x63, 0x9e, 0x81, 0xf5, 0xb9, 0xf8, 0x95, 0x28, 0x17, 0xff, 0xea, 0x08, 0x17, 0x3f, 0xbc, 0x86, + 0xf8, 0x3e, 0x7e, 0x25, 0xca, 0xc7, 0xbf, 0x3a, 0xc2, 0xc7, 0x0f, 0x28, 0x85, 0x9c, 0xfc, 0xfa, + 0x20, 0x27, 0xff, 0xe5, 0x31, 0x9c, 0xfc, 0x60, 0xdd, 0xed, 0xf1, 0xf2, 0xdf, 0xee, 0xf5, 0xf2, + 0x8b, 0xc3, 0xbc, 0xfc, 0x60, 0x46, 0x7a, 0x6e, 0xfe, 0x66, 0xb4, 0x9b, 0x7f, 0x7d, 0xa4, 0x9b, + 0x1f, 0x36, 0x92, 0x21, 0x3f, 0x7f, 0x3d, 0xd2, 0xcf, 0xbf, 0x36, 0xca, 0xcf, 0x0f, 0x8c, 0x64, + 0xd8, 0xd1, 0x7f, 0xbb, 0xd7, 0xd1, 0x2f, 0x0e, 0x73, 0xf4, 0x83, 0xc1, 0x79, 0x9e, 0x7e, 0x25, + 0xca, 0xd3, 0xbf, 0x3a, 0xc2, 0xd3, 0x0f, 0x84, 0x17, 0x72, 0xf5, 0xd5, 0xa1, 0xae, 0xfe, 0x6b, + 0x63, 0xba, 0xfa, 0x3d, 0x86, 0xeb, 0xf9, 0x7c, 0xfd, 0x07, 0xa9, 0xf4, 0x05, 0xf9, 0xa5, 0xe2, + 0x5f, 0x4e, 0xc2, 0x54, 0xc5, 0x4b, 0xd0, 0x08, 0x5d, 0x9b, 0x96, 0x5e, 0xe4, 0xda, 0x34, 0x5a, + 0xa5, 0xea, 0xc3, 0x26, 0xa1, 0xf0, 0xfe, 0x87, 0xbc, 0x41, 0xd0, 0x77, 0x44, 0xe6, 0xa1, 0xbe, + 0xc0, 0x9d, 0x10, 0xf4, 0x3a, 0xe4, 0x3a, 0x0e, 0xb1, 0x95, 0xb6, 0x6d, 0x58, 0xb6, 0xe1, 0xf2, + 0x04, 0x44, 0xa9, 0x24, 0x7f, 0x74, 0xbc, 0x38, 0xb3, 0xe3, 0x10, 0x7b, 0x5b, 0xc0, 0xf1, 0x4c, + 0x27, 0x54, 0xf2, 0x5e, 0x11, 0x9e, 0x1c, 0xff, 0x15, 0xe1, 0x77, 0x40, 0xb6, 0x89, 0xaa, 0x77, + 0x2d, 0x87, 0xfc, 0x26, 0x71, 0xf4, 0xca, 0xcd, 0x32, 0x6d, 0xbd, 0x96, 0xec, 0x46, 0xf1, 0xac, + 0xdd, 0x0d, 0x44, 0xb7, 0xe1, 0x74, 0x4b, 0x3d, 0xe4, 0x17, 0xe8, 0x3d, 0x0f, 0x83, 0x25, 0xaa, + 0xa4, 0x59, 0x3e, 0x15, 0x6a, 0xa9, 0x87, 0xec, 0x49, 0x62, 0x5e, 0xc5, 0x1e, 0x23, 0xbc, 0x0a, + 0x79, 0xdd, 0x70, 0x5c, 0xc3, 0xd4, 0xbc, 0xb7, 0x78, 0xf8, 0x95, 0xe3, 0x9c, 0x07, 0xe5, 0x6f, + 0xe2, 0xdc, 0x84, 0x39, 0x91, 0x63, 0x16, 0x3c, 0x52, 0xcc, 0x7c, 0xe9, 0x34, 0xed, 0x05, 0xad, + 0x08, 0xde, 0x94, 0x2e, 0xc3, 0x6c, 0x43, 0x75, 0xc9, 0x81, 0x7a, 0xa4, 0x78, 0xc9, 0xbe, 0x59, + 0xf6, 0x22, 0xc9, 0xf9, 0x93, 0xe3, 0xc5, 0xdc, 0x7d, 0x5e, 0xd5, 0x97, 0xf3, 0x9b, 0x6b, 0x84, + 0x2a, 0x74, 0xb4, 0x02, 0x33, 0xec, 0x9d, 0x35, 0x8b, 0x3f, 0xe7, 0x27, 0x3c, 0xe4, 0x41, 0x67, + 0x18, 0xe2, 0xd1, 0x3f, 0xcc, 0xde, 0x66, 0xf3, 0x5e, 0x00, 0xbc, 0x0e, 0xb3, 0xaa, 0x73, 0x64, + 0x6a, 0x8c, 0xc3, 0xc4, 0x74, 0x3a, 0x0e, 0x73, 0x91, 0xd3, 0x38, 0xcf, 0xc0, 0x65, 0x0f, 0x2a, + 0x9e, 0xf4, 0xf9, 0x2d, 0x09, 0x66, 0xba, 0x12, 0x2f, 0xdf, 0xea, 0x39, 0xaa, 0x3b, 0x17, 0xed, + 0x9e, 0x0f, 0xca, 0x51, 0x4a, 0x0b, 0x09, 0x78, 0x79, 0x13, 0x8b, 0x83, 0xdd, 0x3b, 0x16, 0x20, + 0x7b, 0x99, 0x26, 0x1e, 0xda, 0x9b, 0xa9, 0xdf, 0xf9, 0xee, 0xe2, 0x44, 0xf1, 0x67, 0x49, 0xc8, + 0x75, 0x27, 0x58, 0x56, 0x7b, 0xfa, 0x15, 0x65, 0x12, 0xbb, 0x30, 0x96, 0x87, 0xbc, 0xf4, 0x91, + 0x09, 0x5e, 0x67, 0xe3, 0xdd, 0x5c, 0x1a, 0x72, 0x20, 0x19, 0xee, 0x67, 0x80, 0xb8, 0xf0, 0xa3, + 0x84, 0x3f, 0xf3, 0x97, 0x61, 0x92, 0xbd, 0x8f, 0x2e, 0xba, 0x16, 0x75, 0x5b, 0x64, 0x8d, 0xd6, + 0x63, 0xde, 0x8c, 0x5a, 0x8a, 0xfa, 0x0b, 0x3d, 0xb0, 0xe0, 0x03, 0x5e, 0xe0, 0xfd, 0x6e, 0xf1, + 0xa8, 0xc7, 0xe4, 0xf3, 0x3d, 0xea, 0xc1, 0x0f, 0x1c, 0x9b, 0x4d, 0xa2, 0xb9, 0xe2, 0x99, 0x75, + 0xef, 0x95, 0xee, 0x2b, 0xbd, 0x24, 0xc4, 0xa3, 0xec, 0xcb, 0x58, 0x3c, 0xca, 0x1e, 0x4a, 0x65, + 0xc9, 0xfb, 0x24, 0xd8, 0xc4, 0xe2, 0x09, 0x4f, 0x42, 0xd4, 0x5f, 0x97, 0x40, 0x66, 0xd3, 0xe8, + 0x1e, 0x21, 0x7a, 0x2c, 0x5a, 0xe8, 0x65, 0xd9, 0x24, 0xc6, 0xce, 0xb2, 0x29, 0xaa, 0x90, 0xf7, + 0xfb, 0xc0, 0x9f, 0x2b, 0x1e, 0xf2, 0x3e, 0xc6, 0x0b, 0x5d, 0x3b, 0x2c, 0xfe, 0x9e, 0x04, 0xf3, + 0xfe, 0x37, 0x98, 0x9f, 0xcf, 0xf3, 0xe2, 0x5f, 0x20, 0xef, 0x11, 0xb3, 0xa7, 0xd8, 0x69, 0x9c, + 0xc7, 0xae, 0xa2, 0x8d, 0xa5, 0x41, 0x48, 0x9c, 0x7d, 0x83, 0x88, 0x1f, 0xf5, 0x7a, 0x8d, 0x3d, + 0xd2, 0xce, 0x7f, 0x3b, 0xc5, 0x7b, 0x21, 0x0e, 0x30, 0x65, 0xa5, 0xc3, 0x1c, 0x4b, 0xab, 0xbd, + 0x61, 0xb2, 0xc6, 0xc5, 0xbf, 0x91, 0xc2, 0x84, 0x9e, 0x52, 0xbf, 0xe1, 0x2e, 0x24, 0x9f, 0xaa, + 0xcd, 0x61, 0x47, 0xff, 0x5d, 0xac, 0xc7, 0xb4, 0x35, 0xba, 0x07, 0xfc, 0x3a, 0x0e, 0xbf, 0x4c, + 0x90, 0x18, 0x1c, 0xdc, 0xf5, 0xb3, 0x14, 0x87, 0x30, 0xd1, 0x1b, 0xde, 0x28, 0x92, 0xa3, 0x3f, + 0x1f, 0x9e, 0xa4, 0x6f, 0xa6, 0x3e, 0xfc, 0xee, 0xa2, 0x74, 0xb3, 0x06, 0xf3, 0x11, 0x8b, 0x10, + 0xca, 0x03, 0x94, 0xb7, 0x36, 0x6b, 0xd5, 0x5a, 0x7d, 0x6d, 0xb3, 0xee, 0xbd, 0x04, 0xbf, 0xb2, + 0xaa, 0xec, 0x6c, 0x96, 0xb7, 0x36, 0x36, 0xaa, 0xf5, 0xfa, 0xda, 0xaa, 0x2c, 0x21, 0x19, 0x66, + 0xaa, 0x9b, 0xa1, 0x76, 0xe2, 0x01, 0xf8, 0x9b, 0x3f, 0x07, 0x10, 0x3c, 0x94, 0x49, 0x69, 0xad, + 0xaf, 0x3d, 0x56, 0x1e, 0xad, 0x3c, 0xdc, 0x59, 0xab, 0xc9, 0x13, 0x08, 0x41, 0xbe, 0xb4, 0x52, + 0x2f, 0x57, 0x14, 0xbc, 0x56, 0xdb, 0xde, 0xda, 0xac, 0xad, 0xc9, 0x92, 0xc0, 0xdb, 0x80, 0x6c, + 0xe8, 0x6d, 0x0d, 0xda, 0x70, 0x7b, 0xa7, 0x56, 0x51, 0xea, 0xd5, 0x8d, 0xb5, 0x5a, 0x7d, 0x65, + 0x63, 0x5b, 0x9e, 0xa0, 0xc4, 0x18, 0x6c, 0xa5, 0xb4, 0x85, 0xeb, 0xb2, 0xe4, 0x97, 0xeb, 0x5b, + 0x3b, 0xe5, 0x8a, 0xff, 0x02, 0x7d, 0x2a, 0x9d, 0x94, 0x93, 0x37, 0x2d, 0x38, 0x1d, 0x79, 0x5d, + 0x09, 0x65, 0x61, 0x7a, 0xc7, 0x64, 0x2f, 0x35, 0xc8, 0x13, 0x28, 0x17, 0xba, 0xb1, 0x24, 0x4b, + 0x28, 0xcd, 0xef, 0xa5, 0xc8, 0x09, 0x34, 0x05, 0x89, 0xda, 0x5d, 0x39, 0x89, 0x66, 0x21, 0x1b, + 0xba, 0xf6, 0x23, 0xa7, 0x50, 0x46, 0xdc, 0x96, 0x90, 0x27, 0xd1, 0x4c, 0x70, 0x5d, 0x41, 0x9e, + 0xba, 0x79, 0x09, 0x42, 0xd9, 0xdc, 0x08, 0x60, 0xea, 0xa1, 0xea, 0x12, 0xc7, 0x95, 0x27, 0xd0, + 0x34, 0x24, 0x57, 0x9a, 0x4d, 0x59, 0xba, 0xf3, 0x03, 0x09, 0xd2, 0xde, 0xa3, 0x7a, 0xe8, 0x21, + 0x4c, 0xf2, 0xa0, 0x6d, 0x71, 0xb0, 0xb1, 0x67, 0xf6, 0x62, 0x61, 0x69, 0xd4, 0x6a, 0x50, 0x9c, + 0x40, 0xef, 0x8a, 0x7f, 0x01, 0x41, 0x25, 0x8d, 0x2e, 0x0f, 0xd3, 0x03, 0x8f, 0xea, 0x70, 0x65, + 0xa1, 0xba, 0x5d, 0x9c, 0xf8, 0x8c, 0x54, 0xba, 0xf4, 0xe1, 0xbf, 0x5c, 0x9c, 0xf8, 0xf0, 0xe4, + 0xa2, 0xf4, 0x93, 0x93, 0x8b, 0xd2, 0x3f, 0x9e, 0x5c, 0x94, 0xfe, 0xf9, 0xe4, 0xa2, 0xf4, 0xeb, + 0xff, 0x7a, 0x71, 0xe2, 0xbd, 0x69, 0x81, 0xb5, 0x3b, 0xc5, 0xfe, 0x0b, 0xc5, 0xdd, 0xff, 0x09, + 0x00, 0x00, 0xff, 0xff, 0xe7, 0x79, 0x12, 0xc1, 0x8a, 0x63, 0x00, 0x00, } diff --git a/pkg/roachpb/api.proto b/pkg/roachpb/api.proto index 767568022b03..14bc77196de6 100644 --- a/pkg/roachpb/api.proto +++ b/pkg/roachpb/api.proto @@ -744,11 +744,13 @@ message PushTxnRequest { // It is used to assist that field's migration. // TODO(nvanbenschoten): Remove this field in 19.2. bool inclusive_push_to = 9; - // Now holds the timestamp used to compare the last heartbeat of the pushee - // against. This is necessary since the request header's timestamp does not - // necessarily advance with the node clock across retries and hence cannot - // detect abandoned transactions. - util.hlc.Timestamp now = 5 [(gogoproto.nullable) = false]; + // DeprecatedNow holds the timestamp used to compare the last heartbeat of the + // pushee against. + // + // The field remains for compatibility with 2.1 nodes. Users should set the + // same value for this field and the batch header timestamp. + // TODO(nvanbenschoten): Remove this field in 19.2. + util.hlc.Timestamp deprecated_now = 5 [(gogoproto.nullable) = false]; // Readers set this to PUSH_TIMESTAMP to move pushee_txn's provisional // commit timestamp forward. Writers set this to PUSH_ABORT to request // that pushee_txn be aborted if possible. Inconsistent readers set diff --git a/pkg/storage/batcheval/cmd_push_txn.go b/pkg/storage/batcheval/cmd_push_txn.go index 38a44b45113b..03bdbbb57b01 100644 --- a/pkg/storage/batcheval/cmd_push_txn.go +++ b/pkg/storage/batcheval/cmd_push_txn.go @@ -111,8 +111,13 @@ func PushTxn( return result.Result{}, ErrTransactionUnsupported } - if args.Now == (hlc.Timestamp{}) { - return result.Result{}, errors.Errorf("the field Now must be provided") + // Verify that the PushTxn's timestamp is not less than the timestamp that + // the request intends to push the transaction to. Transactions should not + // be pushed into the future or their effect may not be fully reflected in + // a future leaseholder's timestamp cache. This is analogous to how reads + // should not be performed at a timestamp in the future. + if h.Timestamp.Less(args.PushTo) { + return result.Result{}, errors.Errorf("PushTo %s larger than PushRequest header timestamp %s", args.PushTo, h.Timestamp) } if !bytes.Equal(args.Key, args.PusheeTxn.Key) { @@ -200,7 +205,7 @@ func PushTxn( var reason string switch { - case txnwait.IsExpired(args.Now, &reply.PusheeTxn): + case txnwait.IsExpired(h.Timestamp, &reply.PusheeTxn): reason = "pushee is expired" // When cleaning up, actually clean up (as opposed to simply pushing // the garbage in the path of future writers). @@ -244,9 +249,11 @@ func PushTxn( case roachpb.PUSH_ABORT: // If aborting the transaction, set the new status. reply.PusheeTxn.Status = roachpb.ABORTED - // Forward the timestamp to accommodate AbortSpan GC. See method - // comment for details. - reply.PusheeTxn.Timestamp.Forward(reply.PusheeTxn.LastActive()) + // If the transaction record was already present, forward the timestamp + // to accommodate AbortSpan GC. See method comment for details. + if ok { + reply.PusheeTxn.Timestamp.Forward(reply.PusheeTxn.LastActive()) + } case roachpb.PUSH_TIMESTAMP: // Otherwise, update timestamp to be one greater than the request's // timestamp. This new timestamp will be use to update the read diff --git a/pkg/storage/client_split_test.go b/pkg/storage/client_split_test.go index dd5fa5f2ca64..1a792d93acce 100644 --- a/pkg/storage/client_split_test.go +++ b/pkg/storage/client_split_test.go @@ -2536,12 +2536,12 @@ func TestDistributedTxnCleanup(t *testing.T) { // normal or min priority txn. if force { ba := roachpb.BatchRequest{} + ba.Timestamp = store.Clock().Now() ba.RangeID = lhs.RangeID ba.Add(&roachpb.PushTxnRequest{ RequestHeader: roachpb.RequestHeader{ Key: proto.Key, }, - Now: store.Clock().Now(), PusheeTxn: proto.TxnMeta, PushType: roachpb.PUSH_ABORT, Force: true, diff --git a/pkg/storage/intentresolver/contention_queue.go b/pkg/storage/intentresolver/contention_queue.go index 8d3d3a3f4c33..0593e9597974 100644 --- a/pkg/storage/intentresolver/contention_queue.go +++ b/pkg/storage/intentresolver/contention_queue.go @@ -257,7 +257,10 @@ func (cq *contentionQueue) add( log.VEventf(ctx, 3, "%s at front of queue; breaking from loop", txnID(curPusher.txn)) break Loop } - pushReq := &roachpb.PushTxnRequest{ + + b := &client.Batch{} + b.Header.Timestamp = cq.clock.Now() + b.AddRawRequest(&roachpb.PushTxnRequest{ RequestHeader: roachpb.RequestHeader{ Key: pusheeTxn.Key, }, @@ -265,11 +268,9 @@ func (cq *contentionQueue) add( PusheeTxn: *pusheeTxn, PushTo: h.Timestamp.Next(), InclusivePushTo: true, - Now: cq.clock.Now(), + DeprecatedNow: b.Header.Timestamp, PushType: roachpb.PUSH_ABORT, - } - b := &client.Batch{} - b.AddRawRequest(pushReq) + }) log.VEventf(ctx, 3, "%s pushing %s to detect dependency cycles", txnID(curPusher.txn), pusheeTxn.ID.Short()) if err := cq.db.Run(ctx, b); err != nil { log.VErrEventf(ctx, 2, "while waiting in push contention queue to push %s: %s", pusheeTxn.ID.Short(), b.MustPErr()) diff --git a/pkg/storage/intentresolver/intent_resolver.go b/pkg/storage/intentresolver/intent_resolver.go index 16553c1c1a55..d62b4b39580f 100644 --- a/pkg/storage/intentresolver/intent_resolver.go +++ b/pkg/storage/intentresolver/intent_resolver.go @@ -422,14 +422,14 @@ func (ir *IntentResolver) MaybePushTransactions( return nil, nil } + pusherTxn := getPusherTxn(h) log.Eventf(ctx, "pushing %d transaction(s)", len(pushTxns)) // Attempt to push the transaction(s). - now := ir.clock.Now() - pusherTxn := getPusherTxn(h) - var pushReqs []roachpb.Request + b := &client.Batch{} + b.Header.Timestamp = ir.clock.Now() for _, pushTxn := range pushTxns { - pushReqs = append(pushReqs, &roachpb.PushTxnRequest{ + b.AddRawRequest(&roachpb.PushTxnRequest{ RequestHeader: roachpb.RequestHeader{ Key: pushTxn.Key, }, @@ -437,24 +437,14 @@ func (ir *IntentResolver) MaybePushTransactions( PusheeTxn: pushTxn, PushTo: h.Timestamp.Next(), InclusivePushTo: true, - // The timestamp is used by PushTxn for figuring out whether the - // transaction is abandoned. If we used the argument's timestamp - // here, we would run into busy loops because that timestamp - // usually stays fixed among retries, so it will never realize - // that a transaction has timed out. See #877. - Now: now, - PushType: pushType, + DeprecatedNow: b.Header.Timestamp, + PushType: pushType, }) } - b := &client.Batch{} - b.AddRawRequest(pushReqs...) - var pErr *roachpb.Error - if err := ir.db.Run(ctx, b); err != nil { - pErr = b.MustPErr() - } + err := ir.db.Run(ctx, b) cleanupInFlightPushes() - if pErr != nil { - return nil, pErr + if err != nil { + return nil, b.MustPErr() } br := b.RawResponse() @@ -462,7 +452,7 @@ func (ir *IntentResolver) MaybePushTransactions( for _, resp := range br.Responses { txn := resp.GetInner().(*roachpb.PushTxnResponse).PusheeTxn if _, ok := pushedTxns[txn.ID]; ok { - log.Fatalf(ctx, "have two PushTxn responses for %s\nreqs: %+v", txn.ID, pushReqs) + log.Fatalf(ctx, "have two PushTxn responses for %s", txn.ID) } pushedTxns[txn.ID] = txn log.Eventf(ctx, "%s is now %s", txn.ID, txn.Status) @@ -700,13 +690,14 @@ func (ir *IntentResolver) CleanupTxnIntentsOnGCAsync( return } b := &client.Batch{} + b.Header.Timestamp = now b.AddRawRequest(&roachpb.PushTxnRequest{ RequestHeader: roachpb.RequestHeader{Key: txn.Key}, PusherTxn: roachpb.Transaction{ TxnMeta: enginepb.TxnMeta{Priority: roachpb.MaxTxnPriority}, }, PusheeTxn: txn.TxnMeta, - Now: now, + DeprecatedNow: b.Header.Timestamp, PushType: roachpb.PUSH_ABORT, InclusivePushTo: true, }) diff --git a/pkg/storage/replica.go b/pkg/storage/replica.go index ded6cf1180b9..acb212dc2359 100644 --- a/pkg/storage/replica.go +++ b/pkg/storage/replica.go @@ -1372,30 +1372,32 @@ func (r *Replica) maybeWatchForMerge(ctx context.Context) error { // roachpb.PUSH_TOUCH, though it might appear more semantically correct, // returns immediately and causes us to spin hot, whereas // roachpb.PUSH_ABORT efficiently blocks until the transaction completes. - res, pErr := client.SendWrapped(ctx, r.DB().NonTransactionalSender(), &roachpb.PushTxnRequest{ + b := &client.Batch{} + b.Header.Timestamp = r.Clock().Now() + b.AddRawRequest(&roachpb.PushTxnRequest{ RequestHeader: roachpb.RequestHeader{Key: intent.Txn.Key}, PusherTxn: roachpb.Transaction{ TxnMeta: enginepb.TxnMeta{Priority: roachpb.MinTxnPriority}, }, PusheeTxn: intent.Txn, - Now: r.Clock().Now(), + DeprecatedNow: b.Header.Timestamp, PushType: roachpb.PUSH_ABORT, InclusivePushTo: true, }) - if pErr != nil { + if err := r.DB().Run(ctx, b); err != nil { select { case <-r.store.stopper.ShouldQuiesce(): // The server is shutting down. The error while pushing the // transaction was probably caused by the shutdown, so ignore it. return default: - log.Warningf(ctx, "error while watching for merge to complete: PushTxn: %s", pErr) + log.Warningf(ctx, "error while watching for merge to complete: PushTxn: %s", err) // We can't safely unblock traffic until we can prove that the merge // transaction is committed or aborted. Nothing to do but try again. continue } } - pushTxnRes = res.(*roachpb.PushTxnResponse) + pushTxnRes = b.RawResponse().Responses[0].GetInner().(*roachpb.PushTxnResponse) break } diff --git a/pkg/storage/replica_test.go b/pkg/storage/replica_test.go index a36607d13297..8d058817ea41 100644 --- a/pkg/storage/replica_test.go +++ b/pkg/storage/replica_test.go @@ -1572,7 +1572,6 @@ func pushTxnArgs( RequestHeader: roachpb.RequestHeader{ Key: pushee.Key, }, - Now: pusher.Timestamp, PushTo: pusher.Timestamp.Next(), PusherTxn: *pusher, PusheeTxn: pushee.TxnMeta, @@ -3227,7 +3226,6 @@ func TestSerializableDeadline(t *testing.T) { pusher := newTransaction( "test pusher", key, roachpb.MaxUserPriority, tc.Clock()) pushReq := pushTxnArgs(pusher, txn, roachpb.PUSH_TIMESTAMP) - pushReq.Now = tc.Clock().Now() resp, pErr := tc.SendWrapped(&pushReq) if pErr != nil { t.Fatal(pErr) @@ -3281,7 +3279,6 @@ func TestTxnRecordUnderTxnSpanGCThreshold(t *testing.T) { // will be aborted before it even tries. pushee := newTransaction("pushee", key, 1, tc.Clock()) pushReq := pushTxnArgs(pusher, pushee, roachpb.PUSH_ABORT) - pushReq.Now = tc.Clock().Now() pushReq.Force = true resp, pErr := tc.SendWrapped(&pushReq) if pErr != nil { @@ -4992,10 +4989,9 @@ func TestPushTxnHeartbeatTimeout(t *testing.T) { // Now, attempt to push the transaction with Now set to the txn start time + offset. args := pushTxnArgs(pusher, pushee, test.pushType) - args.Now = pushee.OrigTimestamp.Add(test.timeOffset, 0) - args.PushTo = args.Now + args.PushTo = pushee.OrigTimestamp.Add(test.timeOffset, 0) - reply, pErr := tc.SendWrapped(&args) + reply, pErr := tc.SendWrappedWith(roachpb.Header{Timestamp: args.PushTo}, &args) if test.expSuccess != (pErr == nil) { t.Fatalf("%d: expSuccess=%t; got pErr %s, args=%+v, reply=%+v", i, @@ -5035,21 +5031,23 @@ func TestResolveIntentPushTxnReplyTxn(t *testing.T) { var rra roachpb.ResolveIntentRangeRequest ctx := context.Background() + h := roachpb.Header{Txn: txn, Timestamp: tc.Clock().Now()} // Should not be able to push or resolve in a transaction. - if _, err := batcheval.PushTxn(ctx, b, batcheval.CommandArgs{Stats: &ms, Header: roachpb.Header{Txn: txn}, Args: &pa}, &roachpb.PushTxnResponse{}); !testutils.IsError(err, batcheval.ErrTransactionUnsupported.Error()) { + if _, err := batcheval.PushTxn(ctx, b, batcheval.CommandArgs{Stats: &ms, Header: h, Args: &pa}, &roachpb.PushTxnResponse{}); !testutils.IsError(err, batcheval.ErrTransactionUnsupported.Error()) { t.Fatalf("transactional PushTxn returned unexpected error: %v", err) } - if _, err := batcheval.ResolveIntent(ctx, b, batcheval.CommandArgs{Stats: &ms, Header: roachpb.Header{Txn: txn}, Args: &ra}, &roachpb.ResolveIntentResponse{}); !testutils.IsError(err, batcheval.ErrTransactionUnsupported.Error()) { + if _, err := batcheval.ResolveIntent(ctx, b, batcheval.CommandArgs{Stats: &ms, Header: h, Args: &ra}, &roachpb.ResolveIntentResponse{}); !testutils.IsError(err, batcheval.ErrTransactionUnsupported.Error()) { t.Fatalf("transactional ResolveIntent returned unexpected error: %v", err) } - if _, err := batcheval.ResolveIntentRange(ctx, b, batcheval.CommandArgs{Stats: &ms, Header: roachpb.Header{Txn: txn}, Args: &rra}, &roachpb.ResolveIntentRangeResponse{}); !testutils.IsError(err, batcheval.ErrTransactionUnsupported.Error()) { + if _, err := batcheval.ResolveIntentRange(ctx, b, batcheval.CommandArgs{Stats: &ms, Header: h, Args: &rra}, &roachpb.ResolveIntentRangeResponse{}); !testutils.IsError(err, batcheval.ErrTransactionUnsupported.Error()) { t.Fatalf("transactional ResolveIntentRange returned unexpected error: %v", err) } // Should not get a transaction back from PushTxn. It used to erroneously // return args.PusherTxn. + h = roachpb.Header{Timestamp: tc.Clock().Now()} var reply roachpb.PushTxnResponse - if _, err := batcheval.PushTxn(ctx, b, batcheval.CommandArgs{EvalCtx: tc.repl, Stats: &ms, Args: &pa}, &reply); err != nil { + if _, err := batcheval.PushTxn(ctx, b, batcheval.CommandArgs{EvalCtx: tc.repl, Stats: &ms, Header: h, Args: &pa}, &reply); err != nil { t.Fatal(err) } else if reply.Txn != nil { t.Fatalf("expected nil response txn, but got %s", reply.Txn) @@ -5121,7 +5119,7 @@ func TestPushTxnPriorities(t *testing.T) { // Now, attempt to push the transaction with intent epoch set appropriately. args := pushTxnArgs(pusher, pushee, test.pushType) - _, pErr := tc.SendWrapped(&args) + _, pErr := tc.SendWrappedWith(roachpb.Header{Timestamp: args.PushTo}, &args) if test.expSuccess != (pErr == nil) { t.Errorf("expected success on trial %d? %t; got err %s", i, test.expSuccess, pErr) @@ -5162,9 +5160,9 @@ func TestPushTxnPushTimestamp(t *testing.T) { // Now, push the transaction using a PUSH_TIMESTAMP push request. args := pushTxnArgs(pusher, pushee, roachpb.PUSH_TIMESTAMP) - resp, pErr := tc.SendWrapped(&args) + resp, pErr := tc.SendWrappedWith(roachpb.Header{Timestamp: args.PushTo}, &args) if pErr != nil { - t.Errorf("unexpected error on push: %s", pErr) + t.Fatalf("unexpected error on push: %s", pErr) } expTS := pusher.Timestamp expTS.Logical++ @@ -5204,9 +5202,9 @@ func TestPushTxnPushTimestampAlreadyPushed(t *testing.T) { // Now, push the transaction using a PUSH_TIMESTAMP push request. args := pushTxnArgs(pusher, pushee, roachpb.PUSH_TIMESTAMP) - resp, pErr := tc.SendWrapped(&args) + resp, pErr := tc.SendWrappedWith(roachpb.Header{Timestamp: args.PushTo}, &args) if pErr != nil { - t.Errorf("unexpected pError on push: %s", pErr) + t.Fatalf("unexpected pError on push: %s", pErr) } reply := resp.(*roachpb.PushTxnResponse) if reply.PusheeTxn.Timestamp != pushee.Timestamp { @@ -8247,7 +8245,6 @@ func TestNoopRequestsNotProposed(t *testing.T) { Key: txn.TxnMeta.Key, }, PusheeTxn: txn.TxnMeta, - Now: cfg.Clock.Now(), PushType: roachpb.PUSH_ABORT, Force: true, } @@ -10276,7 +10273,6 @@ func TestCreateTxnRecord(t *testing.T) { setup: func(txn *roachpb.Transaction, now hlc.Timestamp) error { pt := pushTxnArgs(pusher, txn, roachpb.PUSH_TIMESTAMP) pt.PushTo = now - pt.Now = now return sendWrappedWithErr(roachpb.Header{}, &pt) }, run: func(txn *roachpb.Transaction, _ hlc.Timestamp) error { @@ -10294,7 +10290,6 @@ func TestCreateTxnRecord(t *testing.T) { setup: func(txn *roachpb.Transaction, now hlc.Timestamp) error { pt := pushTxnArgs(pusher, txn, roachpb.PUSH_TIMESTAMP) pt.PushTo = now - pt.Now = now return sendWrappedWithErr(roachpb.Header{}, &pt) }, run: func(txn *roachpb.Transaction, now hlc.Timestamp) error { @@ -10313,7 +10308,6 @@ func TestCreateTxnRecord(t *testing.T) { setup: func(txn *roachpb.Transaction, now hlc.Timestamp) error { pt := pushTxnArgs(pusher, txn, roachpb.PUSH_TIMESTAMP) pt.PushTo = now - pt.Now = now return sendWrappedWithErr(roachpb.Header{}, &pt) }, run: func(txn *roachpb.Transaction, _ hlc.Timestamp) error { @@ -10329,7 +10323,6 @@ func TestCreateTxnRecord(t *testing.T) { setup: func(txn *roachpb.Transaction, now hlc.Timestamp) error { pt := pushTxnArgs(pusher, txn, roachpb.PUSH_TIMESTAMP) pt.PushTo = now - pt.Now = now return sendWrappedWithErr(roachpb.Header{}, &pt) }, run: func(txn *roachpb.Transaction, _ hlc.Timestamp) error { @@ -10345,7 +10338,6 @@ func TestCreateTxnRecord(t *testing.T) { name: "begin transaction after push abort", setup: func(txn *roachpb.Transaction, now hlc.Timestamp) error { pt := pushTxnArgs(pusher, txn, roachpb.PUSH_ABORT) - pt.Now = now return sendWrappedWithErr(roachpb.Header{}, &pt) }, run: func(txn *roachpb.Transaction, _ hlc.Timestamp) error { @@ -10359,7 +10351,6 @@ func TestCreateTxnRecord(t *testing.T) { name: "heartbeat transaction after push abort", setup: func(txn *roachpb.Transaction, now hlc.Timestamp) error { pt := pushTxnArgs(pusher, txn, roachpb.PUSH_ABORT) - pt.Now = now return sendWrappedWithErr(roachpb.Header{}, &pt) }, run: func(txn *roachpb.Transaction, now hlc.Timestamp) error { @@ -10373,7 +10364,6 @@ func TestCreateTxnRecord(t *testing.T) { name: "heartbeat transaction after push abort and restart", setup: func(txn *roachpb.Transaction, now hlc.Timestamp) error { pt := pushTxnArgs(pusher, txn, roachpb.PUSH_ABORT) - pt.Now = now return sendWrappedWithErr(roachpb.Header{}, &pt) }, run: func(txn *roachpb.Transaction, now hlc.Timestamp) error { @@ -10393,7 +10383,6 @@ func TestCreateTxnRecord(t *testing.T) { name: "end transaction (abort) after push abort", setup: func(txn *roachpb.Transaction, now hlc.Timestamp) error { pt := pushTxnArgs(pusher, txn, roachpb.PUSH_ABORT) - pt.Now = now return sendWrappedWithErr(roachpb.Header{}, &pt) }, run: func(txn *roachpb.Transaction, _ hlc.Timestamp) error { @@ -10408,7 +10397,6 @@ func TestCreateTxnRecord(t *testing.T) { name: "end transaction (commit) after push abort", setup: func(txn *roachpb.Transaction, now hlc.Timestamp) error { pt := pushTxnArgs(pusher, txn, roachpb.PUSH_ABORT) - pt.Now = now return sendWrappedWithErr(roachpb.Header{}, &pt) }, run: func(txn *roachpb.Transaction, _ hlc.Timestamp) error { diff --git a/pkg/storage/replica_tscache.go b/pkg/storage/replica_tscache.go index 2cd15737978d..1e66465433ec 100644 --- a/pkg/storage/replica_tscache.go +++ b/pkg/storage/replica_tscache.go @@ -80,16 +80,6 @@ func (r *Replica) updateTimestampCache( // creation of the transaction record entirely. pushee := br.Responses[i].GetInner().(*roachpb.PushTxnResponse).PusheeTxn - // Update the local clock to the pushee's new timestamp. This - // ensures that we can safely update the timestamp cache based - // on this value. The pushee's timestamp is not reflected in - // the batch request's or response's timestamp. - // TODO(nvanbenschoten): there are some concerns that this is - // incorrect because this pushee.Timestamp was not accounted - // for in the local clock before this request's lease check. - // Do something about it. - r.store.Clock().Update(pushee.Timestamp) - var readCache bool switch pushee.Status { case roachpb.PENDING: diff --git a/pkg/storage/store.go b/pkg/storage/store.go index d06f78adbcbe..60d32af70b3c 100644 --- a/pkg/storage/store.go +++ b/pkg/storage/store.go @@ -2721,10 +2721,16 @@ func (s *Store) Send( return nil, roachpb.NewError(err) } + // In 2.1 it was possible for nodes to send PushTxn requests without + // properly reflecting the time that they wanted the push to happen + // in the batch's header timestamp. Ensure that this timestamp is + // sufficiently advanced to prevent lost timestamp cache updates. // TODO(nvanbenschoten): Remove this all in 19.2. if !s.cfg.Settings.Version.IsActive(cluster.VersionPushTxnToInclusive) { for _, union := range ba.Requests { if pushReq, ok := union.GetInner().(*roachpb.PushTxnRequest); ok { + ba.Timestamp.Forward(pushReq.DeprecatedNow) + // While here, correct the request's PushTo arg. Before // VersionPushTxnToInclusive, pushers would provide _their_ // timestamp instead of one logical tick past their timestamp @@ -3068,7 +3074,9 @@ func (s *Store) maybeWaitForPushee( // request may have been waiting to push the txn. If we don't // move the timestamp forward to the current time, we may fail // to push a txn which has expired. - pushReqCopy.Now.Forward(s.Clock().Now()) + now := s.Clock().Now() + ba.Timestamp.Forward(now) + pushReqCopy.DeprecatedNow.Forward(now) ba.Requests = nil ba.Add(&pushReqCopy) } else if ba.IsSingleQueryTxnRequest() { From 3164bf0c16c672ed5799649c4b368299534b7290 Mon Sep 17 00:00:00 2001 From: Nathan VanBenschoten Date: Thu, 28 Feb 2019 21:09:15 -0500 Subject: [PATCH 3/3] storage: assert that timestamp cache updates are safe This new assertion would fire if bug like the one hypothesized in the following comment exist: https://github.com/cockroachdb/cockroach/pull/22315#discussion_r252834889 Release note: None --- pkg/storage/replica_test.go | 11 +++++++-- pkg/storage/replica_tscache.go | 43 +++++++++++++++++++++++++++------- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/pkg/storage/replica_test.go b/pkg/storage/replica_test.go index 8d058817ea41..621e4faba05b 100644 --- a/pkg/storage/replica_test.go +++ b/pkg/storage/replica_test.go @@ -292,6 +292,7 @@ func (tc *testContext) Sender() client.Sender { tc.Fatal(err) } } + tc.Clock().Update(ba.Timestamp) return ba }) } @@ -4841,7 +4842,10 @@ func TestPushTxnUpgradeExistingTxn(t *testing.T) { pushee.Timestamp = test.ts args := pushTxnArgs(pusher, pushee, roachpb.PUSH_ABORT) - resp, pErr := tc.SendWrapped(&args) + // Set header timestamp to the maximum of the pusher and pushee timestamps. + h := roachpb.Header{Timestamp: args.PushTo} + h.Timestamp.Forward(pushee.Timestamp) + resp, pErr := tc.SendWrappedWith(h, &args) if pErr != nil { t.Fatal(pErr) } @@ -5119,7 +5123,10 @@ func TestPushTxnPriorities(t *testing.T) { // Now, attempt to push the transaction with intent epoch set appropriately. args := pushTxnArgs(pusher, pushee, test.pushType) - _, pErr := tc.SendWrappedWith(roachpb.Header{Timestamp: args.PushTo}, &args) + // Set header timestamp to the maximum of the pusher and pushee timestamps. + h := roachpb.Header{Timestamp: args.PushTo} + h.Timestamp.Forward(pushee.Timestamp) + _, pErr := tc.SendWrappedWith(h, &args) if test.expSuccess != (pErr == nil) { t.Errorf("expected success on trial %d? %t; got err %s", i, test.expSuccess, pErr) diff --git a/pkg/storage/replica_tscache.go b/pkg/storage/replica_tscache.go index 1e66465433ec..577d712e2286 100644 --- a/pkg/storage/replica_tscache.go +++ b/pkg/storage/replica_tscache.go @@ -16,9 +16,12 @@ package storage import ( "context" + "fmt" "github.com/cockroachdb/cockroach/pkg/keys" "github.com/cockroachdb/cockroach/pkg/roachpb" + "github.com/cockroachdb/cockroach/pkg/storage/tscache" + "github.com/cockroachdb/cockroach/pkg/util" "github.com/cockroachdb/cockroach/pkg/util/hlc" "github.com/cockroachdb/cockroach/pkg/util/uuid" ) @@ -29,7 +32,10 @@ import ( func (r *Replica) updateTimestampCache( ba *roachpb.BatchRequest, br *roachpb.BatchResponse, pErr *roachpb.Error, ) { - tc := r.store.tsCache + addToTSCache := r.store.tsCache.Add + if util.RaceEnabled { + addToTSCache = checkedTSCacheUpdate(r.store.Clock().Now(), r.store.tsCache, ba, br, pErr) + } // Update the timestamp cache using the timestamp at which the batch // was executed. Note this may have moved forward from ba.Timestamp, // as when the request is retried locally on WriteTooOldErrors. @@ -66,7 +72,7 @@ func (r *Replica) updateTimestampCache( // to or greater than the transaction's OrigTimestamp, // which is consulted in CanCreateTxnRecord. key := keys.TransactionKey(start, txnID) - tc.Add(key, nil, ts, txnID, false /* readCache */) + addToTSCache(key, nil, ts, txnID, false /* readCache */) case *roachpb.PushTxnRequest: // A successful PushTxn request bumps the timestamp cache for // the pushee's transaction key. The pushee will consult the @@ -92,7 +98,7 @@ func (r *Replica) updateTimestampCache( continue } key := keys.TransactionKey(start, pushee.ID) - tc.Add(key, nil, pushee.Timestamp, t.PusherTxn.ID, readCache) + addToTSCache(key, nil, pushee.Timestamp, t.PusherTxn.ID, readCache) case *roachpb.ConditionalPutRequest: if pErr != nil { // ConditionalPut still updates on ConditionFailedErrors. @@ -100,7 +106,7 @@ func (r *Replica) updateTimestampCache( continue } } - tc.Add(start, end, ts, txnID, true /* readCache */) + addToTSCache(start, end, ts, txnID, true /* readCache */) case *roachpb.InitPutRequest: if pErr != nil { // InitPut still updates on ConditionFailedErrors. @@ -108,7 +114,7 @@ func (r *Replica) updateTimestampCache( continue } } - tc.Add(start, end, ts, txnID, true /* readCache */) + addToTSCache(start, end, ts, txnID, true /* readCache */) case *roachpb.ScanRequest: resp := br.Responses[i].GetInner().(*roachpb.ScanResponse) if resp.ResumeSpan != nil { @@ -117,7 +123,7 @@ func (r *Replica) updateTimestampCache( // end key for the span to update the timestamp cache. end = resp.ResumeSpan.Key } - tc.Add(start, end, ts, txnID, true /* readCache */) + addToTSCache(start, end, ts, txnID, true /* readCache */) case *roachpb.ReverseScanRequest: resp := br.Responses[i].GetInner().(*roachpb.ReverseScanResponse) if resp.ResumeSpan != nil { @@ -127,7 +133,7 @@ func (r *Replica) updateTimestampCache( // the span to update the timestamp cache. start = resp.ResumeSpan.EndKey } - tc.Add(start, end, ts, txnID, true /* readCache */) + addToTSCache(start, end, ts, txnID, true /* readCache */) case *roachpb.QueryIntentRequest: if t.IfMissing == roachpb.QueryIntentRequest_PREVENT { resp := br.Responses[i].GetInner().(*roachpb.QueryIntentResponse) @@ -140,16 +146,35 @@ func (r *Replica) updateTimestampCache( // transaction ID so that we block the intent regardless // of whether it is part of the current batch's transaction // or not. - tc.Add(start, end, t.Txn.Timestamp, uuid.UUID{}, true /* readCache */) + addToTSCache(start, end, t.Txn.Timestamp, uuid.UUID{}, true /* readCache */) } } default: - tc.Add(start, end, ts, txnID, !roachpb.UpdatesWriteTimestampCache(args)) + addToTSCache(start, end, ts, txnID, !roachpb.UpdatesWriteTimestampCache(args)) } } } } +// checkedTSCacheUpdate wraps tscache.Cache and asserts that any update to the +// cache is at or below the specified time. +func checkedTSCacheUpdate( + now hlc.Timestamp, + tc tscache.Cache, + ba *roachpb.BatchRequest, + br *roachpb.BatchResponse, + pErr *roachpb.Error, +) func(roachpb.Key, roachpb.Key, hlc.Timestamp, uuid.UUID, bool) { + return func(start, end roachpb.Key, ts hlc.Timestamp, txnID uuid.UUID, readCache bool) { + if now.Less(ts) { + panic(fmt.Sprintf("Unsafe timestamp cache update! Cannot add timestamp %s to timestamp "+ + "cache after evaluating %v (resp=%v; err=%v) with local hlc clock at timestamp %s. "+ + "The timestamp cache update could be lost on a lease transfer.", ts, ba, br, pErr, now)) + } + tc.Add(start, end, ts, txnID, readCache) + } +} + // applyTimestampCache moves the batch timestamp forward depending on // the presence of overlapping entries in the timestamp cache. If the // batch is transactional, the txn timestamp and the txn.WriteTooOld