From 7fb1bbea68ffa95149b300c8f061ffa9e8b3c6bf Mon Sep 17 00:00:00 2001 From: Yichao Yang Date: Tue, 22 Mar 2022 16:46:49 -0700 Subject: [PATCH] Activity local dispatch (#2618) --- api/historyservice/v1/request_response.pb.go | 599 ++++++++++-------- common/dynamicconfig/constants.go | 2 + go.mod | 6 +- go.sum | 11 +- proto/api | 2 +- .../historyservice/v1/request_response.proto | 1 + service/frontend/workflowHandler.go | 9 +- service/history/configs/config.go | 10 +- service/history/historyEngine_test.go | 109 +++- service/history/tests/vars.go | 1 + service/history/workflow/mutable_state.go | 2 +- .../history/workflow/mutable_state_impl.go | 14 +- .../history/workflow/mutable_state_mock.go | 8 +- service/history/workflowTaskHandler.go | 134 +++- .../history/workflowTaskHandlerCallbacks.go | 8 +- service/matching/matchingEngine.go | 38 +- 16 files changed, 597 insertions(+), 357 deletions(-) diff --git a/api/historyservice/v1/request_response.pb.go b/api/historyservice/v1/request_response.pb.go index d15d125e23c..090645bc4af 100644 --- a/api/historyservice/v1/request_response.pb.go +++ b/api/historyservice/v1/request_response.pb.go @@ -1181,7 +1181,8 @@ func (m *RespondWorkflowTaskCompletedRequest) GetCompleteRequest() *v1.RespondWo } type RespondWorkflowTaskCompletedResponse struct { - StartedResponse *RecordWorkflowTaskStartedResponse `protobuf:"bytes,1,opt,name=started_response,json=startedResponse,proto3" json:"started_response,omitempty"` + StartedResponse *RecordWorkflowTaskStartedResponse `protobuf:"bytes,1,opt,name=started_response,json=startedResponse,proto3" json:"started_response,omitempty"` + ActivityTasks []*v1.PollActivityTaskQueueResponse `protobuf:"bytes,2,rep,name=activity_tasks,json=activityTasks,proto3" json:"activity_tasks,omitempty"` } func (m *RespondWorkflowTaskCompletedResponse) Reset() { *m = RespondWorkflowTaskCompletedResponse{} } @@ -1223,6 +1224,13 @@ func (m *RespondWorkflowTaskCompletedResponse) GetStartedResponse() *RecordWorkf return nil } +func (m *RespondWorkflowTaskCompletedResponse) GetActivityTasks() []*v1.PollActivityTaskQueueResponse { + if m != nil { + return m.ActivityTasks + } + return nil +} + type RespondWorkflowTaskFailedRequest struct { NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` FailedRequest *v1.RespondWorkflowTaskFailedRequest `protobuf:"bytes,2,opt,name=failed_request,json=failedRequest,proto3" json:"failed_request,omitempty"` @@ -4936,263 +4944,265 @@ func init() { } var fileDescriptor_b8c78c1d460a3711 = []byte{ - // 4096 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4b, 0x6c, 0x1c, 0x67, - 0x72, 0x56, 0x73, 0x38, 0xe4, 0xb0, 0x66, 0x38, 0x33, 0x6c, 0xbe, 0x86, 0xa4, 0x34, 0x22, 0xdb, - 0x96, 0x45, 0x3f, 0x34, 0xb4, 0xa4, 0x5d, 0xdb, 0xab, 0xac, 0xd7, 0x91, 0xa8, 0xd7, 0x08, 0x92, - 0x96, 0x6e, 0x72, 0x65, 0xc3, 0xbb, 0xde, 0x76, 0x73, 0xfa, 0x27, 0xa7, 0xc3, 0x9e, 0xee, 0x71, - 0xff, 0x3d, 0x24, 0xc7, 0x39, 0xe4, 0xb1, 0x48, 0x90, 0xdd, 0x00, 0x89, 0x80, 0x5c, 0x16, 0xc8, - 0xe6, 0x12, 0x20, 0x48, 0x10, 0x20, 0xc8, 0x21, 0xa7, 0x3d, 0xe4, 0x1a, 0xe4, 0x94, 0x18, 0x01, - 0x82, 0x2c, 0x36, 0x87, 0xc4, 0x32, 0x02, 0x24, 0x48, 0x0e, 0x7b, 0xc8, 0x21, 0xc7, 0xe0, 0x7f, - 0xf5, 0x7b, 0x5e, 0xa4, 0x14, 0xed, 0x3a, 0xbe, 0x71, 0xfe, 0xbf, 0xaa, 0xfe, 0xaa, 0xfa, 0xab, - 0xbe, 0xff, 0x55, 0x4d, 0xf8, 0xba, 0x87, 0x5a, 0x6d, 0xc7, 0xd5, 0xad, 0x0d, 0x8c, 0xdc, 0x43, - 0xe4, 0x6e, 0xe8, 0x6d, 0x73, 0xa3, 0x69, 0x62, 0xcf, 0x71, 0xbb, 0xa4, 0xc5, 0x6c, 0xa0, 0x8d, - 0xc3, 0xcb, 0x1b, 0x2e, 0xfa, 0xb8, 0x83, 0xb0, 0xa7, 0xb9, 0x08, 0xb7, 0x1d, 0x1b, 0xa3, 0x5a, - 0xdb, 0x75, 0x3c, 0x47, 0xbe, 0x20, 0xb8, 0x6b, 0x8c, 0xbb, 0xa6, 0xb7, 0xcd, 0x5a, 0x94, 0xbb, - 0x76, 0x78, 0x79, 0xb9, 0xba, 0xef, 0x38, 0xfb, 0x16, 0xda, 0xa0, 0x4c, 0xbb, 0x9d, 0xbd, 0x0d, - 0xa3, 0xe3, 0xea, 0x9e, 0xe9, 0xd8, 0x4c, 0xcc, 0xf2, 0xf9, 0x78, 0xbf, 0x67, 0xb6, 0x10, 0xf6, - 0xf4, 0x56, 0x9b, 0x13, 0xac, 0x19, 0xa8, 0x8d, 0x6c, 0x03, 0xd9, 0x0d, 0x13, 0xe1, 0x8d, 0x7d, - 0x67, 0xdf, 0xa1, 0xed, 0xf4, 0x2f, 0x4e, 0xf2, 0xa2, 0x6f, 0x08, 0xb1, 0xa0, 0xe1, 0xb4, 0x5a, - 0x8e, 0x4d, 0x34, 0x6f, 0x21, 0x8c, 0xf5, 0x7d, 0xae, 0xf0, 0xf2, 0x85, 0x08, 0x15, 0xd7, 0x34, - 0x49, 0x76, 0x31, 0x42, 0xe6, 0xe9, 0xf8, 0xe0, 0xe3, 0x0e, 0xea, 0xa0, 0x24, 0x61, 0x74, 0x54, - 0x64, 0x77, 0x5a, 0x98, 0x10, 0x1d, 0x39, 0xee, 0xc1, 0x9e, 0xe5, 0x1c, 0x71, 0xaa, 0x97, 0x22, - 0x54, 0xa2, 0x33, 0x29, 0xed, 0x85, 0x08, 0xdd, 0xc7, 0x1d, 0x94, 0xa6, 0x5b, 0xd4, 0x84, 0x3d, - 0xdd, 0xb4, 0x3a, 0x6e, 0x8a, 0x66, 0xaf, 0xf5, 0x99, 0xd8, 0x24, 0xf5, 0xcb, 0x69, 0xd4, 0xbe, - 0x39, 0xcc, 0x9b, 0x9c, 0xf4, 0xd5, 0xbe, 0xa4, 0x31, 0xcb, 0x2f, 0xf6, 0x25, 0x26, 0x8e, 0xe5, - 0x84, 0x97, 0xd2, 0x08, 0x7b, 0x7b, 0xaa, 0x96, 0x46, 0x6e, 0xeb, 0x2d, 0x84, 0xdb, 0x7a, 0x23, - 0xc5, 0x1b, 0xaf, 0xa7, 0xd1, 0xbb, 0xa8, 0x6d, 0x99, 0x0d, 0x1a, 0x88, 0x49, 0x8e, 0xab, 0x69, - 0x1c, 0x6d, 0xe4, 0x62, 0x13, 0x7b, 0xc8, 0x66, 0x63, 0xa0, 0x63, 0xd4, 0xe8, 0x10, 0x76, 0xcc, - 0x99, 0xde, 0x19, 0x82, 0x49, 0x18, 0xa5, 0xb5, 0x3a, 0x9e, 0xbe, 0x6b, 0x21, 0x0d, 0x7b, 0xba, - 0x27, 0x46, 0x7d, 0x23, 0x35, 0x52, 0x06, 0x26, 0xe2, 0xf2, 0xb5, 0xb4, 0x81, 0x75, 0xa3, 0x65, - 0xda, 0x03, 0x79, 0x95, 0xdf, 0x9d, 0x80, 0x73, 0xdb, 0x9e, 0xee, 0x7a, 0xef, 0xf1, 0xe1, 0x6e, - 0x09, 0xb3, 0x54, 0xc6, 0x20, 0xaf, 0x41, 0xc1, 0xf7, 0xad, 0x66, 0x1a, 0x15, 0x69, 0x55, 0x5a, - 0x9f, 0x52, 0xf3, 0x7e, 0x5b, 0xdd, 0x90, 0x1b, 0x30, 0x8d, 0x89, 0x0c, 0x8d, 0x0f, 0x52, 0x19, - 0x5b, 0x95, 0xd6, 0xf3, 0x57, 0xbe, 0xe1, 0x4f, 0x14, 0x85, 0x86, 0x98, 0x41, 0xb5, 0xc3, 0xcb, - 0xb5, 0xbe, 0x23, 0xab, 0x05, 0x2a, 0x54, 0xe8, 0xd1, 0x84, 0xf9, 0xb6, 0xee, 0x22, 0xdb, 0xd3, - 0x7c, 0xcf, 0x6b, 0xa6, 0xbd, 0xe7, 0x54, 0x32, 0x74, 0xb0, 0xaf, 0xd4, 0xd2, 0xe0, 0xc8, 0x8f, - 0xc8, 0xc3, 0xcb, 0xb5, 0x2d, 0xca, 0xed, 0x8f, 0x52, 0xb7, 0xf7, 0x1c, 0x75, 0xb6, 0x9d, 0x6c, - 0x94, 0x2b, 0x30, 0xa9, 0x7b, 0x44, 0x9a, 0x57, 0x19, 0x5f, 0x95, 0xd6, 0xb3, 0xaa, 0xf8, 0x29, - 0xb7, 0x40, 0xf1, 0x67, 0x30, 0xd0, 0x02, 0x1d, 0xb7, 0x4d, 0x06, 0x69, 0x1a, 0xc1, 0xae, 0x4a, - 0x96, 0x2a, 0xb4, 0x5c, 0x63, 0xc0, 0x56, 0x13, 0xc0, 0x56, 0xdb, 0x11, 0xc0, 0x76, 0x63, 0xfc, - 0xf1, 0xbf, 0x9c, 0x97, 0xd4, 0xf3, 0x47, 0x71, 0xcb, 0x6f, 0xf9, 0x92, 0x08, 0xad, 0xdc, 0x84, - 0xa5, 0x86, 0x63, 0x7b, 0xa6, 0xdd, 0x41, 0x9a, 0x8e, 0x35, 0x1b, 0x1d, 0x69, 0xa6, 0x6d, 0x7a, - 0xa6, 0xee, 0x39, 0x6e, 0x65, 0x62, 0x55, 0x5a, 0x2f, 0x5e, 0xb9, 0x14, 0xf5, 0x31, 0xcd, 0x2e, - 0x62, 0xec, 0x26, 0xe7, 0xbb, 0x8e, 0x1f, 0xa2, 0xa3, 0xba, 0x60, 0x52, 0x17, 0x1a, 0xa9, 0xed, - 0xf2, 0x03, 0x98, 0x11, 0x3d, 0x86, 0xc6, 0x61, 0xa5, 0x32, 0x49, 0xed, 0x58, 0x8d, 0x8e, 0xc0, - 0x3b, 0xc9, 0x18, 0xb7, 0xd9, 0x9f, 0x6a, 0xd9, 0x67, 0xe5, 0x2d, 0xf2, 0x23, 0x58, 0xb0, 0x74, - 0xec, 0x69, 0x0d, 0xa7, 0xd5, 0xb6, 0x10, 0xf5, 0x8c, 0x8b, 0x70, 0xc7, 0xf2, 0x2a, 0xb9, 0x34, - 0x99, 0x1c, 0x62, 0xe8, 0x1c, 0x75, 0x2d, 0x47, 0x37, 0xb0, 0x3a, 0x47, 0xf8, 0x37, 0x7d, 0x76, - 0x95, 0x72, 0xcb, 0xdf, 0x85, 0x95, 0x3d, 0xd3, 0xc5, 0x9e, 0xe6, 0xcf, 0x02, 0x41, 0x11, 0x6d, - 0x57, 0x6f, 0x1c, 0x38, 0x7b, 0x7b, 0x95, 0x29, 0x2a, 0x7c, 0x29, 0xe1, 0xf8, 0x9b, 0x7c, 0xc5, - 0xb9, 0x31, 0xfe, 0x43, 0xe2, 0xf7, 0x0a, 0x95, 0x21, 0xc2, 0x6e, 0x47, 0xc7, 0x07, 0x37, 0x98, - 0x00, 0xe5, 0x4d, 0xa8, 0xf6, 0x0a, 0x49, 0x96, 0x35, 0xf2, 0x3c, 0x4c, 0xb8, 0x1d, 0x3b, 0xc8, - 0x83, 0xac, 0xdb, 0xb1, 0xeb, 0x86, 0xf2, 0x9f, 0x12, 0x2c, 0xdc, 0x41, 0xde, 0x03, 0x96, 0xd5, - 0xdb, 0x24, 0xa9, 0x47, 0xc8, 0x9f, 0x3b, 0x30, 0xe5, 0x47, 0x13, 0xcf, 0x9d, 0x97, 0x7b, 0x79, - 0x28, 0xa9, 0x5a, 0xc0, 0x2b, 0x5f, 0x85, 0x05, 0x74, 0xdc, 0x46, 0x0d, 0x0f, 0x19, 0x9a, 0x8d, - 0x8e, 0x3d, 0x0d, 0x1d, 0x92, 0x84, 0x31, 0x0d, 0x9a, 0x24, 0x19, 0x75, 0x56, 0xf4, 0x3e, 0x44, - 0xc7, 0xde, 0x2d, 0xd2, 0x57, 0x37, 0xe4, 0xd7, 0x61, 0xae, 0xd1, 0x71, 0x69, 0x66, 0xed, 0xba, - 0xba, 0xdd, 0x68, 0x6a, 0x9e, 0x73, 0x80, 0x6c, 0x1a, 0xfb, 0x05, 0x55, 0xe6, 0x7d, 0x37, 0x68, - 0xd7, 0x0e, 0xe9, 0x51, 0xfe, 0x3c, 0x07, 0x8b, 0x09, 0x6b, 0xb9, 0x83, 0x22, 0xb6, 0x48, 0xa7, - 0xb0, 0xa5, 0x0e, 0xd3, 0xc1, 0x2c, 0x77, 0xdb, 0x88, 0x3b, 0xe6, 0xc5, 0x41, 0xc2, 0x76, 0xba, - 0x6d, 0xa4, 0x16, 0x8e, 0x42, 0xbf, 0x64, 0x05, 0xa6, 0xd3, 0xbc, 0x91, 0xb7, 0x43, 0x5e, 0xf8, - 0x1a, 0x2c, 0xb5, 0x5d, 0x74, 0x68, 0x3a, 0x1d, 0xac, 0x51, 0xdc, 0x41, 0x46, 0x40, 0x3f, 0x4e, - 0xe9, 0x17, 0x04, 0xc1, 0x36, 0xeb, 0x17, 0xac, 0x97, 0x60, 0x96, 0x46, 0x3b, 0x0b, 0x4d, 0x9f, - 0x29, 0x4b, 0x99, 0xca, 0xa4, 0xeb, 0x36, 0xe9, 0x11, 0xe4, 0x9b, 0x00, 0x34, 0x6a, 0xe9, 0xae, - 0x82, 0xa6, 0x71, 0xc2, 0x2a, 0x7f, 0xd3, 0x41, 0x0c, 0x23, 0x01, 0xfa, 0x2e, 0xf9, 0xa1, 0x4e, - 0x79, 0xe2, 0x4f, 0x79, 0x0b, 0x66, 0xb0, 0x67, 0x36, 0x0e, 0xba, 0x5a, 0x48, 0xd6, 0xe4, 0x08, - 0xb2, 0x4a, 0x8c, 0xdd, 0x6f, 0x90, 0x7f, 0x15, 0x5e, 0x4d, 0x48, 0xd4, 0x70, 0xa3, 0x89, 0x8c, - 0x8e, 0x85, 0x34, 0xcf, 0x61, 0x5e, 0xa1, 0x08, 0xe7, 0x74, 0xbc, 0x4a, 0x7e, 0xb8, 0x5c, 0xbb, - 0x10, 0x1b, 0x66, 0x9b, 0x0b, 0xdc, 0x71, 0xa8, 0x13, 0x77, 0x98, 0xb4, 0x9e, 0x31, 0x38, 0xdd, - 0x2b, 0x06, 0xe5, 0x6f, 0x43, 0xd1, 0x0f, 0x0f, 0xba, 0x88, 0x56, 0x4a, 0x14, 0x10, 0xd3, 0xd7, - 0x01, 0x1f, 0x17, 0x13, 0x21, 0xc7, 0xa2, 0xd7, 0x0f, 0x35, 0xfa, 0x53, 0x7e, 0x0f, 0x4a, 0x11, - 0xe1, 0x1d, 0x5c, 0x29, 0x53, 0xe9, 0xb5, 0x1e, 0x70, 0x9b, 0x2a, 0xb6, 0x83, 0xd5, 0x62, 0x58, - 0x6e, 0x07, 0xcb, 0x1f, 0xc2, 0xcc, 0x21, 0xd9, 0x11, 0x38, 0xb6, 0xc6, 0xb6, 0x63, 0x26, 0xc2, - 0x95, 0x19, 0xea, 0xca, 0xd7, 0x6b, 0x7d, 0xf6, 0xd3, 0x64, 0x8c, 0x47, 0x8c, 0xf1, 0xae, 0xe0, - 0x53, 0xcb, 0x87, 0xb1, 0x16, 0xf9, 0x1b, 0x70, 0xd6, 0x24, 0xe1, 0x1b, 0x9f, 0x46, 0x64, 0x93, - 0x44, 0x35, 0x2a, 0xf2, 0xaa, 0xb4, 0x9e, 0x53, 0x2b, 0x26, 0xde, 0x8e, 0xce, 0xca, 0x2d, 0xd6, - 0x2f, 0x7f, 0x05, 0x16, 0x13, 0x91, 0xec, 0x1d, 0x53, 0xb8, 0x9b, 0x65, 0x00, 0x12, 0x8d, 0xe6, - 0x9d, 0x63, 0xbb, 0x6e, 0xdc, 0x1b, 0xcf, 0xe5, 0xca, 0x53, 0xf7, 0xc6, 0x73, 0x53, 0x65, 0xb8, - 0x37, 0x9e, 0x83, 0x72, 0xfe, 0xde, 0x78, 0xae, 0x50, 0x9e, 0xbe, 0x37, 0x9e, 0x2b, 0x96, 0x4b, - 0xca, 0x7f, 0x49, 0xb0, 0xb8, 0xe5, 0x58, 0xd6, 0xff, 0x13, 0x6c, 0xfc, 0xb7, 0x49, 0xa8, 0x24, - 0xcd, 0xfd, 0x12, 0x1c, 0xbf, 0x04, 0xc7, 0xa7, 0x0e, 0x8e, 0x85, 0x9e, 0xe0, 0x98, 0x0a, 0x33, - 0xc5, 0xa7, 0x06, 0x33, 0xbf, 0x98, 0xd8, 0xdb, 0x07, 0xdc, 0x66, 0x46, 0x03, 0xb7, 0xe9, 0x72, - 0x51, 0xf9, 0xbe, 0x04, 0x2b, 0x2a, 0xc2, 0xc8, 0x8b, 0x41, 0xe9, 0x73, 0x80, 0x36, 0xa5, 0x0a, - 0x67, 0xd3, 0x55, 0x61, 0xb0, 0xa3, 0xfc, 0x74, 0x0c, 0x56, 0x55, 0xd4, 0x70, 0x5c, 0x23, 0xbc, - 0xe9, 0xe5, 0x89, 0x3a, 0x82, 0xc2, 0xef, 0x83, 0x9c, 0x3c, 0xfe, 0x8c, 0xae, 0xf9, 0x4c, 0xe2, - 0xdc, 0x23, 0x9f, 0x87, 0xbc, 0x9f, 0x4d, 0x3e, 0x04, 0x81, 0x68, 0xaa, 0x1b, 0xf2, 0x22, 0x4c, - 0xd2, 0xcc, 0xf3, 0xf1, 0x66, 0x82, 0xfc, 0xac, 0x1b, 0xf2, 0x39, 0x00, 0x71, 0xb4, 0xe5, 0xb0, - 0x32, 0xa5, 0x4e, 0xf1, 0x96, 0xba, 0x21, 0x7f, 0x04, 0x85, 0xb6, 0x63, 0x59, 0xfe, 0xc9, 0x94, - 0x21, 0xca, 0xdb, 0x03, 0x4f, 0xa6, 0x04, 0xc2, 0xc3, 0xce, 0x0a, 0xcf, 0xad, 0x9a, 0x27, 0x22, - 0xf9, 0x0f, 0xe5, 0x1f, 0x27, 0x61, 0xad, 0x8f, 0x73, 0x39, 0xf2, 0x27, 0x00, 0x5b, 0x3a, 0x31, - 0x60, 0xf7, 0x05, 0xe3, 0xb1, 0xbe, 0x60, 0xfc, 0x1a, 0xc8, 0xc2, 0xa7, 0x46, 0x1c, 0xf0, 0xcb, - 0x7e, 0x8f, 0xa0, 0x5e, 0x87, 0x72, 0x0f, 0xb0, 0x2f, 0xe2, 0xa8, 0xdc, 0xc4, 0x1a, 0x92, 0x4d, - 0xae, 0x21, 0xa1, 0x53, 0xf5, 0x44, 0xf4, 0x54, 0xfd, 0x16, 0x54, 0x38, 0xb8, 0x86, 0xce, 0xd4, - 0x7c, 0xc7, 0x32, 0x49, 0x77, 0x2c, 0x0b, 0xac, 0x3f, 0x38, 0x27, 0xf3, 0xfd, 0xca, 0x7e, 0x28, - 0x20, 0x59, 0x78, 0xd8, 0x7b, 0x0e, 0x3f, 0x63, 0x7e, 0x6d, 0x10, 0xd0, 0xed, 0xb8, 0xba, 0x8d, - 0x4d, 0x64, 0x47, 0x4e, 0x82, 0xf4, 0x56, 0xa0, 0x7c, 0x14, 0x6b, 0x91, 0xf7, 0xe1, 0x5c, 0xca, - 0xc1, 0x3f, 0xb4, 0xba, 0x4c, 0x8d, 0xb0, 0xba, 0x2c, 0x27, 0xe2, 0x3f, 0x58, 0x68, 0xd6, 0xa0, - 0x10, 0xc1, 0xf8, 0x3c, 0xc5, 0xf8, 0xfc, 0x6e, 0x08, 0xdc, 0xef, 0x40, 0x31, 0x98, 0x44, 0x7a, - 0xe1, 0x50, 0x18, 0xf2, 0xc2, 0x61, 0xda, 0xe7, 0xa3, 0xd7, 0x0b, 0x9b, 0x50, 0x10, 0xf3, 0x4b, - 0xc5, 0x4c, 0x0f, 0x29, 0x26, 0xcf, 0xb9, 0xa8, 0x10, 0x07, 0x26, 0x3f, 0xee, 0x20, 0xbe, 0xc0, - 0x64, 0xd6, 0xf3, 0x57, 0xbe, 0x55, 0x1b, 0xea, 0x5e, 0xb8, 0x36, 0x30, 0x67, 0x6a, 0xef, 0x32, - 0xb9, 0xb7, 0x6c, 0xcf, 0xed, 0xaa, 0x62, 0x94, 0xe5, 0x8f, 0xa0, 0x10, 0xee, 0x90, 0xcb, 0x90, - 0x39, 0x40, 0x5d, 0x0e, 0x57, 0xe4, 0x4f, 0xf9, 0x1a, 0x64, 0x0f, 0x75, 0xab, 0xd3, 0x63, 0x53, - 0x44, 0x6f, 0x56, 0xc3, 0x29, 0x46, 0xa4, 0x75, 0x55, 0xc6, 0x72, 0x6d, 0xec, 0x2d, 0x89, 0xc1, - 0x7c, 0x08, 0x34, 0xaf, 0x37, 0x3c, 0xf3, 0xd0, 0xf4, 0xba, 0x5f, 0x82, 0xe6, 0x10, 0xa0, 0x19, - 0x76, 0x56, 0x6f, 0xd0, 0xfc, 0xcd, 0x71, 0x01, 0x9a, 0xa9, 0xce, 0xe5, 0xa0, 0xf9, 0x10, 0x4a, - 0x31, 0xb8, 0xe2, 0xb0, 0x79, 0x21, 0xaa, 0x4a, 0x28, 0xa9, 0xd9, 0x26, 0xa5, 0x4b, 0x41, 0x47, - 0x2d, 0x46, 0x21, 0x2d, 0x11, 0xf0, 0x63, 0x27, 0x09, 0xf8, 0x10, 0x8e, 0x65, 0xa2, 0x38, 0x86, - 0xa0, 0x2a, 0xf6, 0x69, 0xbc, 0x49, 0x8b, 0x25, 0xea, 0xf8, 0x90, 0x03, 0xae, 0x70, 0x39, 0xd7, - 0x99, 0x98, 0xed, 0x48, 0xda, 0x3e, 0x80, 0x99, 0x26, 0xd2, 0x5d, 0x6f, 0x17, 0xe9, 0x9e, 0x66, - 0x20, 0x4f, 0x37, 0x2d, 0xcc, 0xef, 0x1c, 0x07, 0xdf, 0xab, 0x95, 0x7d, 0xd6, 0x9b, 0x8c, 0x33, - 0xb9, 0x32, 0x4d, 0x9c, 0x78, 0x65, 0xba, 0x14, 0x0a, 0x75, 0x3f, 0x05, 0x28, 0x84, 0x4f, 0x05, - 0xf1, 0xfb, 0x50, 0x74, 0x28, 0x3f, 0x96, 0xe0, 0x05, 0x36, 0xd7, 0x11, 0x18, 0xe0, 0xb7, 0x7e, - 0x23, 0x25, 0x99, 0x03, 0x65, 0x7e, 0xd7, 0x88, 0x62, 0x97, 0xd0, 0x37, 0x07, 0x46, 0xed, 0x10, - 0x2a, 0xa8, 0x25, 0x21, 0x5d, 0x04, 0xf0, 0x1f, 0x4a, 0xf0, 0x62, 0x7f, 0x46, 0x1e, 0xc3, 0x38, - 0x58, 0x44, 0xc5, 0xd5, 0x3b, 0x0f, 0xe2, 0xbb, 0x4f, 0x0b, 0x28, 0xc9, 0x71, 0x25, 0xd2, 0xa0, - 0xfc, 0xa5, 0x44, 0xb0, 0x2b, 0xa1, 0xdd, 0x6d, 0xdd, 0xb4, 0x46, 0x72, 0x6b, 0x13, 0x8a, 0x7b, - 0x94, 0x27, 0xe6, 0xd4, 0xeb, 0x27, 0x71, 0x6a, 0x64, 0x74, 0x75, 0x7a, 0x2f, 0xfc, 0x53, 0x79, - 0x81, 0xe0, 0x41, 0x4f, 0x16, 0x6e, 0xd6, 0x8f, 0x25, 0x50, 0x92, 0xa8, 0x71, 0x57, 0x44, 0xf4, - 0x08, 0x86, 0xb5, 0xc3, 0x39, 0x14, 0xb5, 0x6d, 0x73, 0x08, 0xdb, 0x06, 0xa9, 0x10, 0x4a, 0x33, - 0x61, 0xe0, 0x16, 0x89, 0xf5, 0x3e, 0x7c, 0x3c, 0x5c, 0x5e, 0x86, 0x72, 0x43, 0xb7, 0x1b, 0xc8, - 0x07, 0x5f, 0xc4, 0xf4, 0xcf, 0xa9, 0x25, 0xd6, 0xae, 0x8a, 0xe6, 0x70, 0xfa, 0x84, 0x65, 0x3e, - 0xa7, 0xf4, 0xe9, 0xa7, 0x42, 0x32, 0x7d, 0x5e, 0xf2, 0xb3, 0xa7, 0x07, 0x5f, 0x32, 0x90, 0xc3, - 0x84, 0xff, 0xf7, 0x81, 0xdc, 0x73, 0xf4, 0xde, 0x81, 0x9c, 0xc6, 0xc2, 0xcd, 0xfa, 0x2b, 0x1a, - 0xc8, 0x49, 0xfb, 0xe9, 0x0c, 0x8f, 0x64, 0xd8, 0xaf, 0x40, 0x31, 0x1a, 0x2f, 0x23, 0x44, 0xf1, - 0xa0, 0xf1, 0xd5, 0xe9, 0x48, 0xc8, 0x29, 0x17, 0xd2, 0xe3, 0xcd, 0x67, 0xe2, 0xc6, 0xfd, 0xcd, - 0x18, 0x54, 0xb7, 0xcd, 0x7d, 0x5b, 0xb7, 0x4e, 0xf3, 0xa6, 0xb8, 0x07, 0x45, 0x4c, 0x85, 0xc4, - 0x0c, 0x7b, 0x67, 0xf0, 0xa3, 0x62, 0xdf, 0xb1, 0xd5, 0x69, 0x26, 0x56, 0xa8, 0x62, 0xc2, 0x0a, - 0x3a, 0xf6, 0x90, 0x4b, 0x46, 0x4a, 0xd9, 0xa7, 0x65, 0x46, 0xdd, 0xa7, 0x2d, 0x09, 0x69, 0x89, - 0x2e, 0xb9, 0x06, 0xb3, 0x8d, 0xa6, 0x69, 0x19, 0xc1, 0x38, 0x8e, 0x6d, 0x75, 0xe9, 0xa6, 0x20, - 0xa7, 0xce, 0xd0, 0x2e, 0xc1, 0xf4, 0x4d, 0xdb, 0xea, 0x2a, 0x6b, 0x70, 0xbe, 0xa7, 0x2d, 0xdc, - 0xd7, 0xff, 0x20, 0xc1, 0x45, 0x4e, 0x63, 0x7a, 0xcd, 0x53, 0x3f, 0xe4, 0x7e, 0x4f, 0x82, 0x25, - 0xee, 0xf5, 0x23, 0xd3, 0x6b, 0x6a, 0x69, 0xaf, 0xba, 0x77, 0x87, 0x9d, 0x80, 0x41, 0x0a, 0xa9, - 0x0b, 0x38, 0x4a, 0x28, 0xe2, 0xec, 0x3a, 0xac, 0x0f, 0x16, 0xd1, 0xff, 0x3d, 0xee, 0xaf, 0x25, - 0x38, 0xaf, 0xa2, 0x96, 0x73, 0x88, 0x98, 0xa4, 0x13, 0x5e, 0x3e, 0x3f, 0xbb, 0xbd, 0x7b, 0x74, - 0x07, 0x9e, 0x89, 0xed, 0xc0, 0x15, 0x85, 0xc0, 0x5e, 0x2f, 0xf5, 0xc5, 0xdc, 0x8f, 0xc1, 0xda, - 0x0e, 0x72, 0x5b, 0xa6, 0xad, 0x7b, 0xe8, 0x34, 0xb3, 0xee, 0xc0, 0x8c, 0x27, 0xe4, 0xc4, 0x26, - 0xfb, 0xc6, 0xc0, 0xc9, 0x1e, 0xa8, 0x81, 0x5a, 0xf6, 0x85, 0xff, 0x02, 0xe4, 0xdc, 0x8b, 0xa0, - 0xf4, 0xb3, 0x88, 0xbb, 0xfe, 0x8f, 0x24, 0xa8, 0xde, 0x44, 0x64, 0xa9, 0x3a, 0x8d, 0xdf, 0x9f, - 0x59, 0x74, 0x11, 0xe4, 0xe8, 0xa9, 0x1e, 0x37, 0xe1, 0x4f, 0x25, 0x38, 0x47, 0x2f, 0x0d, 0x4f, - 0x59, 0xf8, 0xe1, 0x12, 0x19, 0x23, 0x17, 0x7e, 0xf4, 0x1d, 0x59, 0x2d, 0x50, 0xa1, 0x02, 0x0e, - 0xde, 0x84, 0x6a, 0x2f, 0xf2, 0xfe, 0x20, 0xf0, 0x07, 0x19, 0xb8, 0xc0, 0x85, 0xb0, 0x45, 0xea, - 0x34, 0xa6, 0xb6, 0x7a, 0x2c, 0xb4, 0xb7, 0x87, 0xb0, 0x75, 0x08, 0x15, 0x62, 0x6b, 0xad, 0xfc, - 0x76, 0x28, 0x45, 0x78, 0xcd, 0x47, 0xf2, 0xca, 0xae, 0x22, 0x48, 0xea, 0x82, 0x42, 0x5c, 0xb6, - 0x0d, 0xc8, 0xb0, 0xf1, 0x67, 0x9f, 0x61, 0xd9, 0x5e, 0x19, 0xb6, 0x0e, 0x2f, 0x0d, 0xf2, 0x08, - 0x0f, 0xd1, 0xbf, 0x97, 0x60, 0x45, 0x1c, 0x7d, 0xc3, 0xa7, 0x82, 0x9f, 0x0b, 0x00, 0xbf, 0x0a, - 0x0b, 0x26, 0xd6, 0x52, 0xaa, 0x51, 0xe8, 0xdc, 0xe4, 0xd4, 0x59, 0x13, 0xdf, 0x8e, 0x97, 0x99, - 0x28, 0x55, 0x38, 0x9b, 0x6e, 0x10, 0xb7, 0xf8, 0xbf, 0xc7, 0xc8, 0xbe, 0x98, 0x9c, 0x12, 0x36, - 0x89, 0xdf, 0xfc, 0xd1, 0x4e, 0xb2, 0xa7, 0x7f, 0x76, 0xa6, 0xaf, 0x41, 0x21, 0x08, 0xc9, 0xe0, - 0xc1, 0xd0, 0x6f, 0xab, 0x1b, 0xf2, 0x07, 0x30, 0x2b, 0xb6, 0xfc, 0xc6, 0x69, 0xe2, 0x4e, 0xf6, - 0xa5, 0x04, 0xc3, 0x6f, 0xf9, 0x87, 0x15, 0x7a, 0x51, 0x4c, 0xaf, 0x85, 0xb2, 0xa3, 0x5c, 0x0b, - 0x95, 0x02, 0x76, 0xda, 0xa0, 0x5c, 0x24, 0x38, 0xd1, 0xd7, 0xeb, 0x7c, 0x7e, 0xfe, 0x58, 0x82, - 0xd5, 0x9b, 0x08, 0x37, 0x5c, 0x73, 0xf7, 0x54, 0xc8, 0xff, 0x6d, 0x98, 0x1c, 0xf5, 0x1c, 0x32, - 0x68, 0x58, 0x55, 0x48, 0x54, 0x7e, 0x7f, 0x1c, 0xd6, 0xfa, 0x50, 0x73, 0xcc, 0xfc, 0x0e, 0x94, - 0x83, 0x8b, 0xec, 0x86, 0x63, 0xef, 0x99, 0xfb, 0xfc, 0x5e, 0xe2, 0x72, 0xba, 0x2e, 0xa9, 0x13, - 0xb4, 0x49, 0x19, 0xd5, 0x12, 0x8a, 0x36, 0xc8, 0xfb, 0xb0, 0x98, 0x72, 0x5f, 0x4e, 0x6f, 0xe7, - 0x99, 0xc1, 0x1b, 0x23, 0x0c, 0x42, 0xef, 0xe4, 0xe7, 0x8f, 0xd2, 0x9a, 0xe5, 0xef, 0x80, 0xdc, - 0x46, 0xb6, 0x61, 0xda, 0xfb, 0x9a, 0xce, 0x0e, 0x25, 0x26, 0xc2, 0x95, 0x0c, 0xbd, 0x89, 0xbe, - 0xd4, 0x7b, 0x8c, 0x2d, 0xc6, 0x23, 0xce, 0x31, 0x74, 0x84, 0x99, 0x76, 0xa4, 0xd1, 0x44, 0x58, - 0xfe, 0x2e, 0x94, 0x85, 0x74, 0x0a, 0x64, 0x2e, 0x7d, 0xfa, 0x27, 0xb2, 0xaf, 0x0e, 0x94, 0x1d, - 0x8d, 0x25, 0x3a, 0x42, 0xa9, 0x1d, 0xea, 0x72, 0x91, 0x2d, 0x23, 0x98, 0x17, 0xf2, 0xa3, 0x18, - 0x92, 0x1d, 0x34, 0x13, 0x7c, 0x90, 0xc4, 0xd3, 0xc5, 0x6c, 0x3b, 0xd9, 0xa1, 0xfc, 0x46, 0x06, - 0x2a, 0x2a, 0xaf, 0x77, 0x45, 0x34, 0xe4, 0xf1, 0xa3, 0x2b, 0x3f, 0x17, 0x50, 0xb2, 0x07, 0xf3, - 0xd1, 0x87, 0xea, 0xae, 0x66, 0x7a, 0xa8, 0x25, 0x66, 0xf0, 0xca, 0x48, 0x8f, 0xd5, 0xdd, 0xba, - 0x87, 0x5a, 0xea, 0xec, 0x61, 0xa2, 0x0d, 0xcb, 0x6f, 0xc1, 0x04, 0x05, 0x0a, 0xcc, 0x21, 0xa8, - 0xe7, 0x45, 0xe9, 0x4d, 0xdd, 0xd3, 0x6f, 0x58, 0xce, 0xae, 0xca, 0xe9, 0xe5, 0xdb, 0x50, 0xb4, - 0xd1, 0x91, 0x46, 0xf6, 0x17, 0x5c, 0x42, 0x76, 0x48, 0x09, 0x05, 0x1b, 0x1d, 0xa9, 0x1d, 0x06, - 0x31, 0x58, 0x59, 0x81, 0xa5, 0x94, 0x29, 0x08, 0xf6, 0x93, 0x0b, 0xdb, 0x5d, 0xbb, 0xb1, 0xdd, - 0xd4, 0x5d, 0x83, 0x3f, 0x5f, 0xf3, 0xe9, 0xb9, 0x00, 0x45, 0xec, 0x74, 0xdc, 0x06, 0xd2, 0x1a, - 0x56, 0x07, 0x7b, 0xc8, 0xe5, 0x13, 0x34, 0xcd, 0x5a, 0x37, 0x59, 0xa3, 0xbc, 0x04, 0x39, 0x4c, - 0x98, 0xc5, 0x1b, 0x60, 0x56, 0x9d, 0xa4, 0xbf, 0xeb, 0x86, 0x7c, 0x1d, 0xf2, 0xec, 0x1d, 0x9d, - 0xdd, 0x41, 0x67, 0x86, 0xbc, 0x83, 0x06, 0xc6, 0x44, 0x9a, 0x95, 0x25, 0x58, 0x4c, 0xa8, 0x27, - 0x4e, 0x21, 0x59, 0x98, 0x25, 0x7d, 0x22, 0x95, 0x46, 0x08, 0xab, 0xf3, 0x90, 0xf7, 0xc3, 0x8a, - 0xab, 0x3d, 0xa5, 0x82, 0x68, 0xaa, 0x1b, 0xa1, 0x7d, 0x5d, 0x26, 0xb4, 0xaf, 0x93, 0x2b, 0x30, - 0xc9, 0xe7, 0x98, 0x3f, 0x6b, 0x88, 0x9f, 0x64, 0xd0, 0xe0, 0xc6, 0x3d, 0x78, 0x86, 0xf4, 0xdb, - 0xe8, 0xa3, 0x7b, 0xfc, 0xf5, 0x6c, 0xe2, 0x64, 0xaf, 0x67, 0xe7, 0x00, 0xc4, 0xc5, 0xae, 0xc9, - 0xde, 0x29, 0x33, 0xea, 0x14, 0x6f, 0xa1, 0x85, 0x2c, 0xd1, 0xb7, 0x86, 0xdc, 0x49, 0xde, 0x1a, - 0xb6, 0x78, 0xf1, 0x4c, 0x70, 0x57, 0x49, 0x65, 0x4d, 0x0d, 0x29, 0x6b, 0x86, 0x30, 0xfb, 0x77, - 0x8c, 0x54, 0xe2, 0x35, 0x98, 0x14, 0x4f, 0x06, 0x30, 0xe4, 0x93, 0x81, 0x60, 0x08, 0xbf, 0x7c, - 0xe4, 0xa3, 0x2f, 0x1f, 0x9b, 0x50, 0x60, 0xa5, 0x15, 0xbc, 0x72, 0xb8, 0x30, 0x64, 0xe5, 0x70, - 0x9e, 0x56, 0x5c, 0xf0, 0xa2, 0xe1, 0xd7, 0x81, 0x16, 0xfd, 0x52, 0x24, 0x44, 0xae, 0x66, 0x1a, - 0xc8, 0xf6, 0x4c, 0xaf, 0x4b, 0x9f, 0x25, 0xa7, 0x54, 0x99, 0xf4, 0xbd, 0x47, 0xbb, 0xea, 0xbc, - 0x47, 0x7e, 0x0f, 0x4a, 0x31, 0xf4, 0xe0, 0x45, 0x2e, 0xb5, 0xd1, 0x70, 0x43, 0x2d, 0x46, 0x31, - 0x43, 0x59, 0x80, 0xb9, 0x68, 0x4c, 0xf3, 0x60, 0xff, 0xbe, 0x04, 0x2b, 0x62, 0x69, 0x7d, 0xce, - 0xf5, 0x6c, 0xca, 0xff, 0x48, 0x70, 0x36, 0x5d, 0x17, 0xbe, 0xc2, 0x37, 0x61, 0xb6, 0xa1, 0x37, - 0x9a, 0x28, 0xfa, 0xad, 0x01, 0x5f, 0xe4, 0xdf, 0x4a, 0xf5, 0x50, 0xe8, 0x6b, 0x85, 0xf0, 0xf8, - 0x11, 0xf1, 0x33, 0x54, 0x68, 0xb8, 0x49, 0xb6, 0x61, 0xc1, 0xd0, 0x3d, 0x7d, 0x57, 0xc7, 0xf1, - 0xc1, 0xc6, 0x4e, 0x39, 0xd8, 0x9c, 0x90, 0x1b, 0x6e, 0x55, 0xfe, 0x49, 0x82, 0x65, 0x61, 0x3a, - 0x9f, 0xb2, 0xbb, 0x0e, 0x0e, 0xdf, 0xff, 0x37, 0x1d, 0xec, 0x69, 0xba, 0x61, 0xb8, 0x08, 0x63, - 0x31, 0x0b, 0xa4, 0xed, 0x3a, 0x6b, 0xea, 0x07, 0x97, 0xf1, 0x39, 0xcc, 0x0c, 0xbb, 0x1e, 0x8e, - 0x3f, 0x85, 0x83, 0xfb, 0xe3, 0xb1, 0x20, 0xc0, 0x22, 0x96, 0xf1, 0x39, 0x7d, 0x01, 0xa6, 0xa9, - 0x9e, 0x58, 0xb3, 0x3b, 0xad, 0x5d, 0xbe, 0x18, 0x64, 0xd5, 0x02, 0x6b, 0x7c, 0x48, 0xdb, 0xe4, - 0x15, 0x98, 0x12, 0xc6, 0xe1, 0xca, 0xd8, 0x6a, 0x66, 0x3d, 0xab, 0xe6, 0xb8, 0x75, 0x58, 0xfe, - 0x10, 0x4a, 0x81, 0x79, 0x74, 0x2a, 0xfb, 0x7e, 0x40, 0xe1, 0xd3, 0x12, 0x13, 0xfc, 0xa7, 0xbb, - 0x4d, 0xc2, 0x47, 0xf7, 0x1b, 0x45, 0x3b, 0xd2, 0x26, 0xbf, 0x01, 0x8b, 0x6c, 0xec, 0x86, 0x63, - 0x7b, 0xae, 0x63, 0x59, 0xc8, 0x15, 0x55, 0x5c, 0xe3, 0xd4, 0x91, 0xf3, 0xb4, 0x7b, 0xd3, 0xef, - 0xe5, 0xc5, 0x59, 0x04, 0x5b, 0xf8, 0x74, 0xb1, 0xe7, 0x68, 0xf1, 0x53, 0xa9, 0xc1, 0xcc, 0xa6, - 0xe5, 0x60, 0x44, 0x17, 0x1f, 0x31, 0xc5, 0xe1, 0xf9, 0x93, 0x22, 0xf3, 0xa7, 0xcc, 0x81, 0x1c, - 0xa6, 0xe7, 0x99, 0xfb, 0x1a, 0x94, 0xee, 0x20, 0x6f, 0x58, 0x19, 0x1f, 0x41, 0x39, 0xa0, 0xe6, - 0xae, 0xbf, 0x0f, 0xc0, 0xc9, 0xc9, 0x2e, 0x96, 0x65, 0xd1, 0xa5, 0x61, 0x02, 0x9b, 0x8a, 0xa1, - 0xce, 0x62, 0xd3, 0x42, 0xfe, 0x54, 0x7e, 0x2a, 0xc1, 0x0c, 0xbb, 0xe1, 0x0b, 0x9f, 0x68, 0x7b, - 0xab, 0x24, 0xdf, 0x86, 0x1c, 0xd9, 0x3a, 0xec, 0x13, 0x90, 0x1b, 0xa3, 0xf5, 0x70, 0xaf, 0xf4, - 0xaf, 0xb6, 0x63, 0x77, 0xf3, 0x8c, 0x43, 0xf5, 0x79, 0xc3, 0x35, 0x01, 0x99, 0x48, 0x4d, 0x40, - 0x1d, 0x4a, 0x87, 0x26, 0x36, 0x77, 0x4d, 0xcb, 0xf4, 0xba, 0xa3, 0x3d, 0x57, 0x17, 0x03, 0x46, - 0xba, 0x5d, 0x98, 0x03, 0x39, 0x6c, 0x1b, 0x9f, 0x82, 0xc7, 0x12, 0x9c, 0xbb, 0x83, 0x3c, 0x35, - 0xf8, 0xf0, 0xea, 0x01, 0xfb, 0xe8, 0xca, 0xdf, 0xeb, 0xdc, 0x87, 0x09, 0x5a, 0xf5, 0x42, 0x52, - 0x36, 0xd3, 0x33, 0x24, 0x43, 0x5f, 0x6e, 0xb1, 0xeb, 0x15, 0xff, 0x27, 0xad, 0x8f, 0x51, 0xb9, - 0x0c, 0x92, 0xc8, 0x7c, 0xcb, 0x44, 0x1f, 0xa3, 0xf9, 0xfe, 0x22, 0xcf, 0xdb, 0x48, 0x2c, 0x2b, - 0x3f, 0x1a, 0x83, 0x6a, 0x2f, 0x95, 0xf8, 0xb4, 0xff, 0x1a, 0x14, 0xd9, 0x94, 0xf0, 0x2f, 0xc4, - 0x84, 0x6e, 0xef, 0x0f, 0xf9, 0x7a, 0xdb, 0x5f, 0x3c, 0x0b, 0x0e, 0xd1, 0xca, 0x2a, 0x5d, 0x58, - 0x86, 0x8b, 0xb6, 0xe5, 0x2e, 0xc8, 0x49, 0xa2, 0x70, 0xd5, 0x4b, 0x96, 0x55, 0xbd, 0x3c, 0x88, - 0x56, 0xbd, 0xbc, 0x39, 0xa2, 0xef, 0x7c, 0xcd, 0x82, 0x42, 0x18, 0xe5, 0x13, 0x58, 0xbd, 0x83, - 0xbc, 0x9b, 0xf7, 0xdf, 0xed, 0x33, 0x67, 0x8f, 0x78, 0xc1, 0x2e, 0xc9, 0x0a, 0xe1, 0x9b, 0x51, - 0xc7, 0xf6, 0x4f, 0x2f, 0xb4, 0x86, 0x97, 0xfc, 0x85, 0x95, 0xdf, 0x92, 0x60, 0xad, 0xcf, 0xe0, - 0x7c, 0x76, 0x3e, 0x82, 0x99, 0x90, 0x58, 0x7a, 0x76, 0x12, 0x4a, 0x5c, 0x3d, 0x81, 0x12, 0x6a, - 0xd9, 0x8d, 0x36, 0x60, 0xe5, 0x07, 0x12, 0xcc, 0xd1, 0x0a, 0x21, 0x81, 0xdf, 0x23, 0xac, 0xf5, - 0xdf, 0x8c, 0x1f, 0xf3, 0xbf, 0x3a, 0xf0, 0x98, 0x9f, 0x36, 0x54, 0x70, 0xb4, 0x3f, 0x80, 0xf9, - 0x18, 0x01, 0xf7, 0x83, 0x0a, 0xb9, 0x58, 0x75, 0xc1, 0x1b, 0xa3, 0x0e, 0xc5, 0x6b, 0x09, 0x7c, - 0x39, 0xca, 0xef, 0x49, 0x30, 0xa7, 0x22, 0xbd, 0xdd, 0xb6, 0xd8, 0xbd, 0x09, 0x1e, 0xc1, 0xf2, - 0xed, 0xb8, 0xe5, 0xe9, 0xd5, 0x78, 0xe1, 0x8f, 0x14, 0xd9, 0x74, 0x24, 0x87, 0x0b, 0xac, 0x5f, - 0x84, 0xf9, 0x18, 0x01, 0xd7, 0xf4, 0x2f, 0xc6, 0x60, 0x9e, 0xc5, 0x4a, 0x3c, 0x3a, 0x6f, 0xc1, - 0xb8, 0x5f, 0x6d, 0x59, 0x0c, 0x9f, 0xa7, 0xd3, 0x10, 0xf3, 0x26, 0xd2, 0x8d, 0xfb, 0xc8, 0xf3, - 0x90, 0x4b, 0x0b, 0x97, 0x68, 0x81, 0x0b, 0x65, 0xef, 0xb7, 0x5d, 0x48, 0x9e, 0xcf, 0x32, 0x69, - 0xe7, 0xb3, 0x37, 0xa1, 0x62, 0xda, 0x84, 0xc2, 0x3c, 0x44, 0x1a, 0xb2, 0x7d, 0x38, 0x09, 0x6a, - 0xb3, 0xe6, 0xfd, 0xfe, 0x5b, 0xb6, 0x48, 0xf6, 0xba, 0x21, 0xbf, 0x02, 0x33, 0x2d, 0xfd, 0xd8, - 0x6c, 0x75, 0x5a, 0x5a, 0x9b, 0xd0, 0x63, 0xf3, 0x13, 0xf6, 0x85, 0x61, 0x56, 0x2d, 0xf1, 0x8e, - 0x2d, 0x7d, 0x1f, 0x6d, 0x9b, 0x9f, 0x20, 0xf9, 0x25, 0x28, 0xd1, 0x32, 0x4c, 0x4a, 0xc8, 0xea, - 0x07, 0x27, 0x68, 0xfd, 0x20, 0xad, 0xce, 0x24, 0x64, 0xec, 0x1b, 0x85, 0xff, 0x60, 0x5f, 0xab, - 0x45, 0xfc, 0xc5, 0x03, 0xe9, 0x29, 0x39, 0x2c, 0x35, 0x2f, 0xc7, 0x9e, 0x62, 0x5e, 0xa6, 0xd9, - 0x9a, 0x49, 0xb3, 0xf5, 0x9f, 0x25, 0x58, 0xdc, 0xea, 0xb8, 0xfb, 0xe8, 0x8b, 0x18, 0x1d, 0xca, - 0x32, 0x54, 0x92, 0xc6, 0x89, 0xda, 0x89, 0x31, 0x58, 0x7c, 0x80, 0xbe, 0xa0, 0x96, 0x3f, 0x93, - 0xbc, 0xb8, 0x01, 0x95, 0xa4, 0xc3, 0x78, 0x62, 0xa4, 0xc8, 0x90, 0xd2, 0x64, 0xfc, 0x88, 0x7e, - 0x17, 0xb0, 0xe7, 0x22, 0xdc, 0x0c, 0xdf, 0xc1, 0x8d, 0x02, 0x9e, 0x1f, 0xc4, 0xc1, 0xf3, 0x97, - 0x87, 0x04, 0xcf, 0x9e, 0xa3, 0x06, 0x18, 0x4a, 0x3f, 0x15, 0x48, 0xa3, 0xe3, 0x41, 0xf3, 0x43, - 0x09, 0x5e, 0xb9, 0x83, 0x6c, 0xe4, 0xea, 0x1e, 0xba, 0xaf, 0x63, 0x4f, 0x9c, 0x90, 0x63, 0xe9, - 0xf7, 0x3c, 0x0e, 0xbc, 0x97, 0xe0, 0xd5, 0xa1, 0x34, 0xe3, 0x96, 0xdc, 0x86, 0x95, 0xe8, 0xde, - 0x2b, 0x7a, 0xaf, 0x76, 0x11, 0x4a, 0x2e, 0x6a, 0x39, 0x9e, 0x1f, 0x9f, 0x6c, 0xdf, 0x30, 0xa5, - 0x16, 0x59, 0x33, 0x0f, 0x50, 0xac, 0x74, 0xe0, 0x6c, 0xba, 0x1c, 0x1e, 0x18, 0xdf, 0x82, 0x09, - 0x76, 0xfa, 0xe2, 0xfb, 0x8e, 0xb7, 0x87, 0xdc, 0x18, 0xf2, 0xd3, 0x45, 0x5c, 0x2c, 0x17, 0xa6, - 0xfc, 0x5d, 0x16, 0x16, 0xd2, 0x49, 0xfa, 0x9d, 0x12, 0xbe, 0x0a, 0x8b, 0x2d, 0xfd, 0x58, 0x8b, - 0x63, 0x6f, 0xf0, 0x65, 0xc0, 0x5c, 0x4b, 0x3f, 0x8e, 0xef, 0xbc, 0x0c, 0xf9, 0x1e, 0x94, 0x99, - 0x44, 0xcb, 0x69, 0xe8, 0xd6, 0x68, 0xf7, 0x84, 0x6c, 0x7b, 0x7c, 0x9f, 0x30, 0xd2, 0x1b, 0xa6, - 0x4f, 0x92, 0x8e, 0x65, 0x57, 0xe6, 0xef, 0x9e, 0xca, 0x31, 0x35, 0x35, 0x32, 0x2d, 0x6c, 0xab, - 0x1c, 0x9b, 0x2b, 0xf9, 0xb7, 0x25, 0x98, 0x6d, 0xea, 0xb6, 0xe1, 0x1c, 0xf2, 0x4d, 0x3f, 0x0d, - 0x42, 0x72, 0xa4, 0x1c, 0xa5, 0x32, 0xbd, 0x87, 0x02, 0x77, 0xb9, 0x60, 0xff, 0x14, 0xcc, 0x95, - 0x90, 0x9b, 0x89, 0x8e, 0xe5, 0x1f, 0x48, 0x30, 0x9b, 0xa2, 0x70, 0x4a, 0xb1, 0xfa, 0x87, 0xd1, - 0x6d, 0xfb, 0x9d, 0x53, 0xe9, 0xb8, 0x85, 0x5c, 0x3e, 0x5e, 0x68, 0x1b, 0xbf, 0xfc, 0x3d, 0x09, - 0x16, 0x7b, 0x28, 0x9f, 0xa2, 0x90, 0x1a, 0x55, 0xe8, 0xeb, 0x43, 0x2a, 0x94, 0x18, 0x80, 0x6e, - 0xe8, 0x43, 0x87, 0x89, 0xf7, 0x61, 0x3e, 0x95, 0x46, 0x7e, 0x07, 0xce, 0xfa, 0x73, 0x96, 0x16, - 0xb8, 0x12, 0x0d, 0xdc, 0x25, 0x41, 0x93, 0x88, 0x5e, 0xe5, 0x4f, 0x24, 0x58, 0x1d, 0xe4, 0x0f, - 0x59, 0x81, 0x69, 0xbd, 0x71, 0x80, 0x8c, 0x98, 0xd8, 0x3c, 0x6d, 0xe4, 0x69, 0xf0, 0x21, 0x2c, - 0x87, 0x68, 0xe2, 0xa7, 0xe1, 0x61, 0xab, 0xc5, 0x17, 0x7d, 0x91, 0x8f, 0xa2, 0xc7, 0xe2, 0xdf, - 0x91, 0x60, 0x59, 0x45, 0xbb, 0x1d, 0xd3, 0x32, 0x9e, 0xf7, 0xe5, 0xe1, 0x39, 0xb2, 0x48, 0xa5, - 0x68, 0xc2, 0x30, 0xed, 0x46, 0xfb, 0xd3, 0xcf, 0xaa, 0x67, 0x7e, 0xf2, 0x59, 0xf5, 0xcc, 0xcf, - 0x3e, 0xab, 0x4a, 0xbf, 0xfe, 0xa4, 0x2a, 0xfd, 0xd9, 0x93, 0xaa, 0xf4, 0xb7, 0x4f, 0xaa, 0xd2, - 0xa7, 0x4f, 0xaa, 0xd2, 0xbf, 0x3e, 0xa9, 0x4a, 0xff, 0xfe, 0xa4, 0x7a, 0xe6, 0x67, 0x4f, 0xaa, - 0xd2, 0xe3, 0xcf, 0xab, 0x67, 0x3e, 0xfd, 0xbc, 0x7a, 0xe6, 0x27, 0x9f, 0x57, 0xcf, 0x7c, 0x70, - 0x6d, 0xdf, 0x09, 0x94, 0x31, 0x9d, 0xbe, 0xff, 0x54, 0xe8, 0x97, 0xa2, 0x2d, 0xbb, 0x13, 0xd4, - 0x9d, 0x57, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0xd4, 0xff, 0xe5, 0x18, 0x93, 0x48, 0x00, 0x00, + // 4114 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x49, 0x6c, 0x1c, 0x57, + 0x7a, 0x56, 0xb1, 0xd9, 0x64, 0xf3, 0xef, 0x66, 0x77, 0xb3, 0xb8, 0x35, 0x49, 0xa9, 0x45, 0x96, + 0x2d, 0x8b, 0x5e, 0xd4, 0xb4, 0xa4, 0x19, 0xdb, 0xa3, 0x8c, 0xed, 0x48, 0xd4, 0xd6, 0x82, 0xa4, + 0xa1, 0x8b, 0x1c, 0xd9, 0xf0, 0x8c, 0xa7, 0x5c, 0xec, 0x7a, 0x64, 0x57, 0x58, 0x5d, 0xd5, 0xae, + 0x57, 0x4d, 0xb2, 0x9d, 0x43, 0x96, 0x41, 0x82, 0xcc, 0x04, 0x48, 0x04, 0xe4, 0x32, 0x87, 0xc9, + 0x25, 0x40, 0x90, 0x20, 0x40, 0x90, 0x43, 0x4e, 0x73, 0xc8, 0x35, 0xc8, 0x29, 0x31, 0x02, 0x04, + 0x19, 0x4c, 0x0e, 0x89, 0x65, 0x04, 0x48, 0x90, 0x1c, 0xe6, 0x90, 0x43, 0x8e, 0xc1, 0xdb, 0x6a, + 0xef, 0x8d, 0x94, 0xa2, 0x59, 0x7c, 0x63, 0xbf, 0xf7, 0xff, 0xff, 0x7b, 0xff, 0xf6, 0xbd, 0xed, + 0x2f, 0xc2, 0xd7, 0x3d, 0xd4, 0x6a, 0x3b, 0xae, 0x6e, 0x6d, 0x60, 0xe4, 0x1e, 0x22, 0x77, 0x43, + 0x6f, 0x9b, 0x1b, 0x4d, 0x13, 0x7b, 0x8e, 0xdb, 0x25, 0x2d, 0x66, 0x03, 0x6d, 0x1c, 0x5e, 0xde, + 0x70, 0xd1, 0x27, 0x1d, 0x84, 0x3d, 0xcd, 0x45, 0xb8, 0xed, 0xd8, 0x18, 0xd5, 0xda, 0xae, 0xe3, + 0x39, 0xf2, 0x05, 0xc1, 0x5d, 0x63, 0xdc, 0x35, 0xbd, 0x6d, 0xd6, 0xa2, 0xdc, 0xb5, 0xc3, 0xcb, + 0xcb, 0xd5, 0x7d, 0xc7, 0xd9, 0xb7, 0xd0, 0x06, 0x65, 0xda, 0xed, 0xec, 0x6d, 0x18, 0x1d, 0x57, + 0xf7, 0x4c, 0xc7, 0x66, 0x62, 0x96, 0xcf, 0xc7, 0xfb, 0x3d, 0xb3, 0x85, 0xb0, 0xa7, 0xb7, 0xda, + 0x9c, 0x60, 0xcd, 0x40, 0x6d, 0x64, 0x1b, 0xc8, 0x6e, 0x98, 0x08, 0x6f, 0xec, 0x3b, 0xfb, 0x0e, + 0x6d, 0xa7, 0x7f, 0x71, 0x92, 0x17, 0x7d, 0x45, 0x88, 0x06, 0x0d, 0xa7, 0xd5, 0x72, 0x6c, 0x32, + 0xf3, 0x16, 0xc2, 0x58, 0xdf, 0xe7, 0x13, 0x5e, 0xbe, 0x10, 0xa1, 0xe2, 0x33, 0x4d, 0x92, 0x5d, + 0x8c, 0x90, 0x79, 0x3a, 0x3e, 0xf8, 0xa4, 0x83, 0x3a, 0x28, 0x49, 0x18, 0x1d, 0x15, 0xd9, 0x9d, + 0x16, 0x26, 0x44, 0x47, 0x8e, 0x7b, 0xb0, 0x67, 0x39, 0x47, 0x9c, 0xea, 0xa5, 0x08, 0x95, 0xe8, + 0x4c, 0x4a, 0x7b, 0x21, 0x42, 0xf7, 0x49, 0x07, 0xa5, 0xcd, 0x2d, 0xaa, 0xc2, 0x9e, 0x6e, 0x5a, + 0x1d, 0x37, 0x65, 0x66, 0xaf, 0xf5, 0x71, 0x6c, 0x92, 0xfa, 0xe5, 0x34, 0x6a, 0x5f, 0x1d, 0x66, + 0x4d, 0x4e, 0xfa, 0x6a, 0x5f, 0xd2, 0x98, 0xe6, 0x17, 0xfb, 0x12, 0x13, 0xc3, 0x72, 0xc2, 0x4b, + 0x69, 0x84, 0xbd, 0x2d, 0x55, 0x4b, 0x23, 0xb7, 0xf5, 0x16, 0xc2, 0x6d, 0xbd, 0x91, 0x62, 0x8d, + 0xd7, 0xd3, 0xe8, 0x5d, 0xd4, 0xb6, 0xcc, 0x06, 0x0d, 0xc4, 0x24, 0xc7, 0xd5, 0x34, 0x8e, 0x36, + 0x72, 0xb1, 0x89, 0x3d, 0x64, 0xb3, 0x31, 0xd0, 0x31, 0x6a, 0x74, 0x08, 0x3b, 0xe6, 0x4c, 0xef, + 0x0e, 0xc1, 0x24, 0x94, 0xd2, 0x5a, 0x1d, 0x4f, 0xdf, 0xb5, 0x90, 0x86, 0x3d, 0xdd, 0x13, 0xa3, + 0xbe, 0x91, 0x1a, 0x29, 0x03, 0x13, 0x71, 0xf9, 0x5a, 0xda, 0xc0, 0xba, 0xd1, 0x32, 0xed, 0x81, + 0xbc, 0xca, 0xef, 0x4f, 0xc0, 0xb9, 0x6d, 0x4f, 0x77, 0xbd, 0xf7, 0xf9, 0x70, 0xb7, 0x84, 0x5a, + 0x2a, 0x63, 0x90, 0xd7, 0xa0, 0xe0, 0xdb, 0x56, 0x33, 0x8d, 0x8a, 0xb4, 0x2a, 0xad, 0x4f, 0xa9, + 0x79, 0xbf, 0xad, 0x6e, 0xc8, 0x0d, 0x98, 0xc6, 0x44, 0x86, 0xc6, 0x07, 0xa9, 0x8c, 0xad, 0x4a, + 0xeb, 0xf9, 0x2b, 0xef, 0xf8, 0x8e, 0xa2, 0xd0, 0x10, 0x53, 0xa8, 0x76, 0x78, 0xb9, 0xd6, 0x77, + 0x64, 0xb5, 0x40, 0x85, 0x8a, 0x79, 0x34, 0x61, 0xbe, 0xad, 0xbb, 0xc8, 0xf6, 0x34, 0xdf, 0xf2, + 0x9a, 0x69, 0xef, 0x39, 0x95, 0x0c, 0x1d, 0xec, 0x2b, 0xb5, 0x34, 0x38, 0xf2, 0x23, 0xf2, 0xf0, + 0x72, 0x6d, 0x8b, 0x72, 0xfb, 0xa3, 0xd4, 0xed, 0x3d, 0x47, 0x9d, 0x6d, 0x27, 0x1b, 0xe5, 0x0a, + 0x4c, 0xea, 0x1e, 0x91, 0xe6, 0x55, 0xc6, 0x57, 0xa5, 0xf5, 0xac, 0x2a, 0x7e, 0xca, 0x2d, 0x50, + 0x7c, 0x0f, 0x06, 0xb3, 0x40, 0xc7, 0x6d, 0x93, 0x41, 0x9a, 0x46, 0xb0, 0xab, 0x92, 0xa5, 0x13, + 0x5a, 0xae, 0x31, 0x60, 0xab, 0x09, 0x60, 0xab, 0xed, 0x08, 0x60, 0xbb, 0x31, 0xfe, 0xf8, 0x5f, + 0xcf, 0x4b, 0xea, 0xf9, 0xa3, 0xb8, 0xe6, 0xb7, 0x7c, 0x49, 0x84, 0x56, 0x6e, 0xc2, 0x52, 0xc3, + 0xb1, 0x3d, 0xd3, 0xee, 0x20, 0x4d, 0xc7, 0x9a, 0x8d, 0x8e, 0x34, 0xd3, 0x36, 0x3d, 0x53, 0xf7, + 0x1c, 0xb7, 0x32, 0xb1, 0x2a, 0xad, 0x17, 0xaf, 0x5c, 0x8a, 0xda, 0x98, 0x66, 0x17, 0x51, 0x76, + 0x93, 0xf3, 0x5d, 0xc7, 0x0f, 0xd1, 0x51, 0x5d, 0x30, 0xa9, 0x0b, 0x8d, 0xd4, 0x76, 0xf9, 0x01, + 0xcc, 0x88, 0x1e, 0x43, 0xe3, 0xb0, 0x52, 0x99, 0xa4, 0x7a, 0xac, 0x46, 0x47, 0xe0, 0x9d, 0x64, + 0x8c, 0xdb, 0xec, 0x4f, 0xb5, 0xec, 0xb3, 0xf2, 0x16, 0xf9, 0x11, 0x2c, 0x58, 0x3a, 0xf6, 0xb4, + 0x86, 0xd3, 0x6a, 0x5b, 0x88, 0x5a, 0xc6, 0x45, 0xb8, 0x63, 0x79, 0x95, 0x5c, 0x9a, 0x4c, 0x0e, + 0x31, 0xd4, 0x47, 0x5d, 0xcb, 0xd1, 0x0d, 0xac, 0xce, 0x11, 0xfe, 0x4d, 0x9f, 0x5d, 0xa5, 0xdc, + 0xf2, 0x77, 0x60, 0x65, 0xcf, 0x74, 0xb1, 0xa7, 0xf9, 0x5e, 0x20, 0x28, 0xa2, 0xed, 0xea, 0x8d, + 0x03, 0x67, 0x6f, 0xaf, 0x32, 0x45, 0x85, 0x2f, 0x25, 0x0c, 0x7f, 0x93, 0xaf, 0x38, 0x37, 0xc6, + 0x7f, 0x40, 0xec, 0x5e, 0xa1, 0x32, 0x44, 0xd8, 0xed, 0xe8, 0xf8, 0xe0, 0x06, 0x13, 0xa0, 0xbc, + 0x09, 0xd5, 0x5e, 0x21, 0xc9, 0xb2, 0x46, 0x9e, 0x87, 0x09, 0xb7, 0x63, 0x07, 0x79, 0x90, 0x75, + 0x3b, 0x76, 0xdd, 0x50, 0xfe, 0x4b, 0x82, 0x85, 0x3b, 0xc8, 0x7b, 0xc0, 0xb2, 0x7a, 0x9b, 0x24, + 0xf5, 0x08, 0xf9, 0x73, 0x07, 0xa6, 0xfc, 0x68, 0xe2, 0xb9, 0xf3, 0x72, 0x2f, 0x0b, 0x25, 0xa7, + 0x16, 0xf0, 0xca, 0x57, 0x61, 0x01, 0x1d, 0xb7, 0x51, 0xc3, 0x43, 0x86, 0x66, 0xa3, 0x63, 0x4f, + 0x43, 0x87, 0x24, 0x61, 0x4c, 0x83, 0x26, 0x49, 0x46, 0x9d, 0x15, 0xbd, 0x0f, 0xd1, 0xb1, 0x77, + 0x8b, 0xf4, 0xd5, 0x0d, 0xf9, 0x75, 0x98, 0x6b, 0x74, 0x5c, 0x9a, 0x59, 0xbb, 0xae, 0x6e, 0x37, + 0x9a, 0x9a, 0xe7, 0x1c, 0x20, 0x9b, 0xc6, 0x7e, 0x41, 0x95, 0x79, 0xdf, 0x0d, 0xda, 0xb5, 0x43, + 0x7a, 0x94, 0xbf, 0xc8, 0xc1, 0x62, 0x42, 0x5b, 0x6e, 0xa0, 0x88, 0x2e, 0xd2, 0x29, 0x74, 0xa9, + 0xc3, 0x74, 0xe0, 0xe5, 0x6e, 0x1b, 0x71, 0xc3, 0xbc, 0x38, 0x48, 0xd8, 0x4e, 0xb7, 0x8d, 0xd4, + 0xc2, 0x51, 0xe8, 0x97, 0xac, 0xc0, 0x74, 0x9a, 0x35, 0xf2, 0x76, 0xc8, 0x0a, 0x5f, 0x83, 0xa5, + 0xb6, 0x8b, 0x0e, 0x4d, 0xa7, 0x83, 0x35, 0x8a, 0x3b, 0xc8, 0x08, 0xe8, 0xc7, 0x29, 0xfd, 0x82, + 0x20, 0xd8, 0x66, 0xfd, 0x82, 0xf5, 0x12, 0xcc, 0xd2, 0x68, 0x67, 0xa1, 0xe9, 0x33, 0x65, 0x29, + 0x53, 0x99, 0x74, 0xdd, 0x26, 0x3d, 0x82, 0x7c, 0x13, 0x80, 0x46, 0x2d, 0xdd, 0x55, 0xd0, 0x34, + 0x4e, 0x68, 0xe5, 0x6f, 0x3a, 0x88, 0x62, 0x24, 0x40, 0xdf, 0x23, 0x3f, 0xd4, 0x29, 0x4f, 0xfc, + 0x29, 0x6f, 0xc1, 0x0c, 0xf6, 0xcc, 0xc6, 0x41, 0x57, 0x0b, 0xc9, 0x9a, 0x1c, 0x41, 0x56, 0x89, + 0xb1, 0xfb, 0x0d, 0xf2, 0xaf, 0xc3, 0xab, 0x09, 0x89, 0x1a, 0x6e, 0x34, 0x91, 0xd1, 0xb1, 0x90, + 0xe6, 0x39, 0xcc, 0x2a, 0x14, 0xe1, 0x9c, 0x8e, 0x57, 0xc9, 0x0f, 0x97, 0x6b, 0x17, 0x62, 0xc3, + 0x6c, 0x73, 0x81, 0x3b, 0x0e, 0x35, 0xe2, 0x0e, 0x93, 0xd6, 0x33, 0x06, 0xa7, 0x7b, 0xc5, 0xa0, + 0xfc, 0x2d, 0x28, 0xfa, 0xe1, 0x41, 0x17, 0xd1, 0x4a, 0x89, 0x02, 0x62, 0xfa, 0x3a, 0xe0, 0xe3, + 0x62, 0x22, 0xe4, 0x58, 0xf4, 0xfa, 0xa1, 0x46, 0x7f, 0xca, 0xef, 0x43, 0x29, 0x22, 0xbc, 0x83, + 0x2b, 0x65, 0x2a, 0xbd, 0xd6, 0x03, 0x6e, 0x53, 0xc5, 0x76, 0xb0, 0x5a, 0x0c, 0xcb, 0xed, 0x60, + 0xf9, 0x23, 0x98, 0x39, 0x24, 0x3b, 0x02, 0xc7, 0xd6, 0xd8, 0x76, 0xcc, 0x44, 0xb8, 0x32, 0x43, + 0x4d, 0xf9, 0x7a, 0xad, 0xcf, 0x7e, 0x9a, 0x8c, 0xf1, 0x88, 0x31, 0xde, 0x15, 0x7c, 0x6a, 0xf9, + 0x30, 0xd6, 0x22, 0xbf, 0x03, 0x67, 0x4d, 0x12, 0xbe, 0x71, 0x37, 0x22, 0x9b, 0x24, 0xaa, 0x51, + 0x91, 0x57, 0xa5, 0xf5, 0x9c, 0x5a, 0x31, 0xf1, 0x76, 0xd4, 0x2b, 0xb7, 0x58, 0xbf, 0xfc, 0x15, + 0x58, 0x4c, 0x44, 0xb2, 0x77, 0x4c, 0xe1, 0x6e, 0x96, 0x01, 0x48, 0x34, 0x9a, 0x77, 0x8e, 0xed, + 0xba, 0x71, 0x6f, 0x3c, 0x97, 0x2b, 0x4f, 0xdd, 0x1b, 0xcf, 0x4d, 0x95, 0xe1, 0xde, 0x78, 0x0e, + 0xca, 0xf9, 0x7b, 0xe3, 0xb9, 0x42, 0x79, 0xfa, 0xde, 0x78, 0xae, 0x58, 0x2e, 0x29, 0xff, 0x2d, + 0xc1, 0xe2, 0x96, 0x63, 0x59, 0xbf, 0x24, 0xd8, 0xf8, 0xef, 0x93, 0x50, 0x49, 0xaa, 0xfb, 0x25, + 0x38, 0x7e, 0x09, 0x8e, 0x4f, 0x1d, 0x1c, 0x0b, 0x3d, 0xc1, 0x31, 0x15, 0x66, 0x8a, 0x4f, 0x0d, + 0x66, 0x7e, 0x3e, 0xb1, 0xb7, 0x0f, 0xb8, 0xcd, 0x8c, 0x06, 0x6e, 0xd3, 0xe5, 0xa2, 0xf2, 0x3d, + 0x09, 0x56, 0x54, 0x84, 0x91, 0x17, 0x83, 0xd2, 0xe7, 0x00, 0x6d, 0x4a, 0x15, 0xce, 0xa6, 0x4f, + 0x85, 0xc1, 0x8e, 0xf2, 0x93, 0x31, 0x58, 0x55, 0x51, 0xc3, 0x71, 0x8d, 0xf0, 0xa6, 0x97, 0x27, + 0xea, 0x08, 0x13, 0xfe, 0x00, 0xe4, 0xe4, 0xf1, 0x67, 0xf4, 0x99, 0xcf, 0x24, 0xce, 0x3d, 0xf2, + 0x79, 0xc8, 0xfb, 0xd9, 0xe4, 0x43, 0x10, 0x88, 0xa6, 0xba, 0x21, 0x2f, 0xc2, 0x24, 0xcd, 0x3c, + 0x1f, 0x6f, 0x26, 0xc8, 0xcf, 0xba, 0x21, 0x9f, 0x03, 0x10, 0x47, 0x5b, 0x0e, 0x2b, 0x53, 0xea, + 0x14, 0x6f, 0xa9, 0x1b, 0xf2, 0xc7, 0x50, 0x68, 0x3b, 0x96, 0xe5, 0x9f, 0x4c, 0x19, 0xa2, 0xbc, + 0x3d, 0xf0, 0x64, 0x4a, 0x20, 0x3c, 0x6c, 0xac, 0xb0, 0x6f, 0xd5, 0x3c, 0x11, 0xc9, 0x7f, 0x28, + 0xff, 0x34, 0x09, 0x6b, 0x7d, 0x8c, 0xcb, 0x91, 0x3f, 0x01, 0xd8, 0xd2, 0x89, 0x01, 0xbb, 0x2f, + 0x18, 0x8f, 0xf5, 0x05, 0xe3, 0xd7, 0x40, 0x16, 0x36, 0x35, 0xe2, 0x80, 0x5f, 0xf6, 0x7b, 0x04, + 0xf5, 0x3a, 0x94, 0x7b, 0x80, 0x7d, 0x11, 0x47, 0xe5, 0x26, 0xd6, 0x90, 0x6c, 0x72, 0x0d, 0x09, + 0x9d, 0xaa, 0x27, 0xa2, 0xa7, 0xea, 0xb7, 0xa0, 0xc2, 0xc1, 0x35, 0x74, 0xa6, 0xe6, 0x3b, 0x96, + 0x49, 0xba, 0x63, 0x59, 0x60, 0xfd, 0xc1, 0x39, 0x99, 0xef, 0x57, 0xf6, 0x43, 0x01, 0xc9, 0xc2, + 0xc3, 0xde, 0x73, 0xf8, 0x19, 0xf3, 0x6b, 0x83, 0x80, 0x6e, 0xc7, 0xd5, 0x6d, 0x6c, 0x22, 0x3b, + 0x72, 0x12, 0xa4, 0xb7, 0x02, 0xe5, 0xa3, 0x58, 0x8b, 0xbc, 0x0f, 0xe7, 0x52, 0x0e, 0xfe, 0xa1, + 0xd5, 0x65, 0x6a, 0x84, 0xd5, 0x65, 0x39, 0x11, 0xff, 0xc1, 0x42, 0xb3, 0x06, 0x85, 0x08, 0xc6, + 0xe7, 0x29, 0xc6, 0xe7, 0x77, 0x43, 0xe0, 0x7e, 0x07, 0x8a, 0x81, 0x13, 0xe9, 0x85, 0x43, 0x61, + 0xc8, 0x0b, 0x87, 0x69, 0x9f, 0x8f, 0x5e, 0x2f, 0x6c, 0x42, 0x41, 0xf8, 0x97, 0x8a, 0x99, 0x1e, + 0x52, 0x4c, 0x9e, 0x73, 0x51, 0x21, 0x0e, 0x4c, 0x7e, 0xd2, 0x41, 0x7c, 0x81, 0xc9, 0xac, 0xe7, + 0xaf, 0x7c, 0xb3, 0x36, 0xd4, 0xbd, 0x70, 0x6d, 0x60, 0xce, 0xd4, 0xde, 0x63, 0x72, 0x6f, 0xd9, + 0x9e, 0xdb, 0x55, 0xc5, 0x28, 0xcb, 0x1f, 0x43, 0x21, 0xdc, 0x21, 0x97, 0x21, 0x73, 0x80, 0xba, + 0x1c, 0xae, 0xc8, 0x9f, 0xf2, 0x35, 0xc8, 0x1e, 0xea, 0x56, 0xa7, 0xc7, 0xa6, 0x88, 0xde, 0xac, + 0x86, 0x53, 0x8c, 0x48, 0xeb, 0xaa, 0x8c, 0xe5, 0xda, 0xd8, 0x5b, 0x12, 0x83, 0xf9, 0x10, 0x68, + 0x5e, 0x6f, 0x78, 0xe6, 0xa1, 0xe9, 0x75, 0xbf, 0x04, 0xcd, 0x21, 0x40, 0x33, 0x6c, 0xac, 0xde, + 0xa0, 0xf9, 0xdb, 0xe3, 0x02, 0x34, 0x53, 0x8d, 0xcb, 0x41, 0xf3, 0x21, 0x94, 0x62, 0x70, 0xc5, + 0x61, 0xf3, 0x42, 0x74, 0x2a, 0xa1, 0xa4, 0x66, 0x9b, 0x94, 0x2e, 0x05, 0x1d, 0xb5, 0x18, 0x85, + 0xb4, 0x44, 0xc0, 0x8f, 0x9d, 0x24, 0xe0, 0x43, 0x38, 0x96, 0x89, 0xe2, 0x18, 0x82, 0xaa, 0xd8, + 0xa7, 0xf1, 0x26, 0x2d, 0x96, 0xa8, 0xe3, 0x43, 0x0e, 0xb8, 0xc2, 0xe5, 0x5c, 0x67, 0x62, 0xb6, + 0x23, 0x69, 0xfb, 0x00, 0x66, 0x9a, 0x48, 0x77, 0xbd, 0x5d, 0xa4, 0x7b, 0x9a, 0x81, 0x3c, 0xdd, + 0xb4, 0x30, 0xbf, 0x73, 0x1c, 0x7c, 0xaf, 0x56, 0xf6, 0x59, 0x6f, 0x32, 0xce, 0xe4, 0xca, 0x34, + 0x71, 0xe2, 0x95, 0xe9, 0x52, 0x28, 0xd4, 0xfd, 0x14, 0xa0, 0x10, 0x3e, 0x15, 0xc4, 0xef, 0x43, + 0xd1, 0xa1, 0xfc, 0x48, 0x82, 0x17, 0x98, 0xaf, 0x23, 0x30, 0xc0, 0x6f, 0xfd, 0x46, 0x4a, 0x32, + 0x07, 0xca, 0xfc, 0xae, 0x11, 0xc5, 0x2e, 0xa1, 0x6f, 0x0e, 0x8c, 0xda, 0x21, 0xa6, 0xa0, 0x96, + 0x84, 0x74, 0x3f, 0x80, 0xc7, 0xe0, 0xc5, 0xfe, 0x8c, 0x3c, 0x86, 0x71, 0xb0, 0x88, 0x8a, 0xab, + 0x77, 0x1e, 0xc4, 0x77, 0x9f, 0x16, 0x50, 0x92, 0xe3, 0x4a, 0x34, 0x71, 0x10, 0x14, 0x75, 0x9e, + 0x57, 0x74, 0x91, 0xc2, 0x95, 0x31, 0x8a, 0xcd, 0xef, 0x9c, 0x34, 0x85, 0xf9, 0x40, 0xd3, 0x7a, + 0xa8, 0x0b, 0x2b, 0x7f, 0x25, 0x11, 0x88, 0x4c, 0x18, 0xe1, 0xb6, 0x6e, 0x5a, 0x23, 0x79, 0xaf, + 0x09, 0xc5, 0x3d, 0xca, 0x13, 0xf3, 0xdd, 0xf5, 0x93, 0xf8, 0x2e, 0x32, 0xba, 0x3a, 0xbd, 0x17, + 0xfe, 0xa9, 0xbc, 0x40, 0x60, 0xa7, 0x27, 0x0b, 0xdf, 0x2e, 0xff, 0x48, 0x02, 0x25, 0x09, 0x4e, + 0x77, 0x45, 0xe2, 0x8c, 0xa0, 0x58, 0x3b, 0x9c, 0xaa, 0x51, 0xdd, 0x36, 0x87, 0xd0, 0x6d, 0xd0, + 0x14, 0x42, 0xd9, 0x2c, 0x14, 0xdc, 0x22, 0x29, 0xd5, 0x87, 0x8f, 0x07, 0xc8, 0xcb, 0x50, 0x6e, + 0xe8, 0x76, 0x03, 0xf9, 0x18, 0x8f, 0xd8, 0xfc, 0x73, 0x6a, 0x89, 0xb5, 0xab, 0xa2, 0x39, 0x9c, + 0xa5, 0x61, 0x99, 0xcf, 0x29, 0x4b, 0xfb, 0x4d, 0x21, 0x99, 0xa5, 0x2f, 0xf9, 0x49, 0xda, 0x83, + 0x8f, 0x7b, 0x3c, 0x14, 0xc8, 0x61, 0xc2, 0xff, 0xff, 0x40, 0xee, 0x39, 0x7a, 0xef, 0x40, 0x4e, + 0x63, 0xe1, 0x6a, 0xfd, 0x35, 0x0d, 0xe4, 0xa4, 0xfe, 0xd4, 0xc3, 0x23, 0x29, 0xf6, 0x6b, 0x50, + 0x8c, 0xc6, 0xcb, 0x08, 0x51, 0x3c, 0x68, 0x7c, 0x75, 0x3a, 0x12, 0x72, 0xca, 0x85, 0xf4, 0x78, + 0xf3, 0x99, 0xb8, 0x72, 0x7f, 0x3b, 0x06, 0xd5, 0x6d, 0x73, 0xdf, 0xd6, 0xad, 0xd3, 0x3c, 0x5d, + 0xee, 0x41, 0x11, 0x53, 0x21, 0x31, 0xc5, 0xde, 0x1d, 0xfc, 0x76, 0xd9, 0x77, 0x6c, 0x75, 0x9a, + 0x89, 0x15, 0x53, 0x31, 0x61, 0x05, 0x1d, 0x7b, 0xc8, 0x25, 0x23, 0xa5, 0x6c, 0x07, 0x33, 0xa3, + 0x6e, 0x07, 0x97, 0x84, 0xb4, 0x44, 0x97, 0x5c, 0x83, 0xd9, 0x46, 0xd3, 0xb4, 0x8c, 0x60, 0x1c, + 0xc7, 0xb6, 0xba, 0x74, 0xef, 0x91, 0x53, 0x67, 0x68, 0x97, 0x60, 0xfa, 0x86, 0x6d, 0x75, 0x95, + 0x35, 0x38, 0xdf, 0x53, 0x17, 0x6e, 0xeb, 0x7f, 0x94, 0xe0, 0x22, 0xa7, 0x31, 0xbd, 0xe6, 0xa9, + 0xdf, 0x8b, 0xbf, 0x2b, 0xc1, 0x12, 0xb7, 0xfa, 0x91, 0xe9, 0x35, 0xb5, 0xb4, 0xc7, 0xe3, 0xbb, + 0xc3, 0x3a, 0x60, 0xd0, 0x84, 0xd4, 0x05, 0x1c, 0x25, 0x14, 0x71, 0x76, 0x1d, 0xd6, 0x07, 0x8b, + 0xe8, 0xff, 0xec, 0xf7, 0x37, 0x12, 0x9c, 0x57, 0x51, 0xcb, 0x39, 0x44, 0x4c, 0xd2, 0x09, 0xef, + 0xb8, 0x9f, 0xdd, 0x11, 0x21, 0xba, 0xd1, 0xcf, 0xc4, 0x36, 0xfa, 0x8a, 0x42, 0x60, 0xaf, 0xd7, + 0xf4, 0x85, 0xef, 0xc7, 0x60, 0x6d, 0x07, 0xb9, 0x2d, 0xd3, 0xd6, 0x3d, 0x74, 0x1a, 0xaf, 0x3b, + 0x30, 0xe3, 0x09, 0x39, 0x31, 0x67, 0xdf, 0x18, 0xe8, 0xec, 0x81, 0x33, 0x50, 0xcb, 0xbe, 0xf0, + 0x9f, 0x83, 0x9c, 0x7b, 0x11, 0x94, 0x7e, 0x1a, 0x71, 0xd3, 0xff, 0xb1, 0x04, 0xd5, 0x9b, 0x88, + 0x2c, 0x55, 0xa7, 0xb1, 0xfb, 0x33, 0x8b, 0x2e, 0x82, 0x1c, 0x3d, 0xa7, 0xc7, 0x55, 0xf8, 0x33, + 0x09, 0xce, 0xd1, 0xbb, 0xc9, 0x53, 0xd6, 0x97, 0xb8, 0x44, 0xc6, 0xc8, 0xf5, 0x25, 0x7d, 0x47, + 0x56, 0x0b, 0x54, 0xa8, 0x80, 0x83, 0x37, 0xa1, 0xda, 0x8b, 0xbc, 0x3f, 0x08, 0xfc, 0x51, 0x06, + 0x2e, 0x70, 0x21, 0x6c, 0x91, 0x3a, 0x8d, 0xaa, 0xad, 0x1e, 0x0b, 0xed, 0xed, 0x21, 0x74, 0x1d, + 0x62, 0x0a, 0xb1, 0xb5, 0x56, 0x7e, 0x3b, 0x94, 0x22, 0xbc, 0xb4, 0x24, 0x79, 0x33, 0x58, 0x11, + 0x24, 0x75, 0x41, 0x21, 0xee, 0xf4, 0x06, 0x64, 0xd8, 0xf8, 0xb3, 0xcf, 0xb0, 0x6c, 0xaf, 0x0c, + 0x5b, 0x87, 0x97, 0x06, 0x59, 0x84, 0x87, 0xe8, 0x3f, 0x48, 0xb0, 0x22, 0x4e, 0xd8, 0xe1, 0x53, + 0xc1, 0xcf, 0x04, 0x80, 0x5f, 0x85, 0x05, 0x13, 0x6b, 0x29, 0x45, 0x2f, 0xd4, 0x37, 0x39, 0x75, + 0xd6, 0xc4, 0xb7, 0xe3, 0xd5, 0x2c, 0x4a, 0x15, 0xce, 0xa6, 0x2b, 0xc4, 0x35, 0xfe, 0x1f, 0x7a, + 0x78, 0x25, 0xa7, 0x84, 0x4d, 0x62, 0x37, 0x7f, 0xb4, 0x93, 0xec, 0xe9, 0x9f, 0x9d, 0xea, 0x6b, + 0x50, 0x08, 0x42, 0x32, 0x78, 0x97, 0xf4, 0xdb, 0xea, 0x86, 0xfc, 0x21, 0xcc, 0x8a, 0x2d, 0xbf, + 0x71, 0x9a, 0xb8, 0x93, 0x7d, 0x29, 0xc1, 0xf0, 0x5b, 0xfe, 0x61, 0x85, 0xde, 0x47, 0xd3, 0xdb, + 0xa7, 0xec, 0x28, 0xb7, 0x4f, 0xa5, 0x80, 0x9d, 0x36, 0x28, 0x17, 0x09, 0x4e, 0xf4, 0xb5, 0x3a, + 0xf7, 0xcf, 0x9f, 0x48, 0xb0, 0x7a, 0x13, 0xe1, 0x86, 0x6b, 0xee, 0x9e, 0x0a, 0xf9, 0xbf, 0x05, + 0x93, 0xa3, 0x9e, 0x43, 0x06, 0x0d, 0xab, 0x0a, 0x89, 0xca, 0x1f, 0x8e, 0xc3, 0x5a, 0x1f, 0x6a, + 0x8e, 0x99, 0xdf, 0x86, 0x72, 0x70, 0x5f, 0xde, 0x70, 0xec, 0x3d, 0x73, 0x9f, 0x5f, 0x7f, 0x5c, + 0x4e, 0x9f, 0x4b, 0xaa, 0x83, 0x36, 0x29, 0xa3, 0x5a, 0x42, 0xd1, 0x06, 0x79, 0x1f, 0x16, 0x53, + 0xae, 0xe5, 0xe9, 0x23, 0x00, 0x53, 0x78, 0x63, 0x84, 0x41, 0xe8, 0xd5, 0xff, 0xfc, 0x51, 0x5a, + 0xb3, 0xfc, 0x6d, 0x90, 0xdb, 0xc8, 0x36, 0x4c, 0x7b, 0x5f, 0xe3, 0x57, 0x20, 0x26, 0xc2, 0x95, + 0x0c, 0xbd, 0x54, 0xb9, 0xd4, 0x7b, 0x8c, 0x2d, 0xc6, 0x23, 0xce, 0x31, 0x74, 0x84, 0x99, 0x76, + 0xa4, 0xd1, 0x44, 0x58, 0xfe, 0x0e, 0x94, 0x85, 0x74, 0x0a, 0x64, 0x2e, 0xad, 0x30, 0x20, 0xb2, + 0xaf, 0x0e, 0x94, 0x1d, 0x8d, 0x25, 0x3a, 0x42, 0xa9, 0x1d, 0xea, 0x72, 0x91, 0x2d, 0x23, 0x98, + 0x17, 0xf2, 0xa3, 0x18, 0x92, 0x1d, 0xe4, 0x09, 0x3e, 0x48, 0xe2, 0x85, 0x64, 0xb6, 0x9d, 0xec, + 0x50, 0x7e, 0x2b, 0x03, 0x15, 0x95, 0x97, 0xd5, 0x22, 0x1a, 0xf2, 0xf8, 0xd1, 0x95, 0x9f, 0x09, + 0x28, 0xd9, 0x83, 0xf9, 0xe8, 0x7b, 0x78, 0x57, 0x33, 0x3d, 0xd4, 0x12, 0x1e, 0xbc, 0x32, 0xd2, + 0x9b, 0x78, 0xb7, 0xee, 0xa1, 0x96, 0x3a, 0x7b, 0x98, 0x68, 0xc3, 0xf2, 0x5b, 0x30, 0x41, 0x81, + 0x02, 0x73, 0x08, 0xea, 0x79, 0x1f, 0x7b, 0x53, 0xf7, 0xf4, 0x1b, 0x96, 0xb3, 0xab, 0x72, 0x7a, + 0xf9, 0x36, 0x14, 0x6d, 0x74, 0xa4, 0x91, 0xfd, 0x05, 0x97, 0x90, 0x1d, 0x52, 0x42, 0xc1, 0x46, + 0x47, 0x6a, 0x87, 0x41, 0x0c, 0x56, 0x56, 0x60, 0x29, 0xc5, 0x05, 0xc1, 0x7e, 0x72, 0x61, 0xbb, + 0x6b, 0x37, 0xb6, 0x9b, 0xba, 0x6b, 0xf0, 0x57, 0x72, 0xee, 0x9e, 0x0b, 0x50, 0xc4, 0x4e, 0xc7, + 0x6d, 0x20, 0xad, 0x61, 0x75, 0xb0, 0x87, 0x5c, 0xee, 0xa0, 0x69, 0xd6, 0xba, 0xc9, 0x1a, 0xe5, + 0x25, 0xc8, 0x61, 0xc2, 0x2c, 0x9e, 0x1a, 0xb3, 0xea, 0x24, 0xfd, 0x5d, 0x37, 0xe4, 0xeb, 0x90, + 0x67, 0xcf, 0xf5, 0xec, 0xaa, 0x3b, 0x33, 0xe4, 0x55, 0x37, 0x30, 0x26, 0xd2, 0xac, 0x2c, 0xc1, + 0x62, 0x62, 0x7a, 0xe2, 0x14, 0x92, 0x85, 0x59, 0xd2, 0x27, 0x52, 0x69, 0x84, 0xb0, 0x3a, 0x0f, + 0x79, 0x3f, 0xac, 0xf8, 0xb4, 0xa7, 0x54, 0x10, 0x4d, 0x75, 0x23, 0xb4, 0xaf, 0xcb, 0x84, 0xf6, + 0x75, 0x72, 0x05, 0x26, 0xb9, 0x8f, 0xf9, 0xeb, 0x89, 0xf8, 0x49, 0x06, 0x0d, 0x2e, 0xf6, 0x83, + 0xd7, 0x4e, 0xbf, 0x8d, 0xbe, 0xed, 0xc7, 0x1f, 0xe9, 0x26, 0x4e, 0xf6, 0x48, 0x77, 0x0e, 0x40, + 0xdc, 0x1f, 0x9b, 0xec, 0x39, 0x34, 0xa3, 0x4e, 0xf1, 0x16, 0x5a, 0x2f, 0x13, 0x7d, 0xd2, 0xc8, + 0x9d, 0xe4, 0x49, 0x63, 0x8b, 0xd7, 0xe8, 0x04, 0x77, 0x95, 0x54, 0xd6, 0xd4, 0x90, 0xb2, 0x66, + 0x08, 0xb3, 0x7f, 0xc7, 0x48, 0x25, 0x5e, 0x83, 0x49, 0xf1, 0x32, 0x01, 0x43, 0xbe, 0x4c, 0x08, + 0x86, 0xf0, 0x03, 0x4b, 0x3e, 0xfa, 0xc0, 0xb2, 0x09, 0x05, 0x56, 0xc1, 0xc1, 0x0b, 0x94, 0x0b, + 0x43, 0x16, 0x28, 0xe7, 0x69, 0x61, 0x07, 0xaf, 0x4d, 0x7e, 0x1d, 0x68, 0x6d, 0x31, 0x45, 0x42, + 0xe4, 0x6a, 0xa6, 0x81, 0x6c, 0xcf, 0xf4, 0xba, 0xf4, 0xf5, 0x73, 0x4a, 0x95, 0x49, 0xdf, 0xfb, + 0xb4, 0xab, 0xce, 0x7b, 0xe4, 0xf7, 0xa1, 0x14, 0x43, 0x0f, 0x5e, 0x4b, 0x53, 0x1b, 0x0d, 0x37, + 0xd4, 0x62, 0x14, 0x33, 0x94, 0x05, 0x98, 0x8b, 0xc6, 0x34, 0x0f, 0xf6, 0xef, 0x49, 0xb0, 0x22, + 0x96, 0xd6, 0xe7, 0x5c, 0x36, 0xa7, 0xfc, 0xaf, 0x04, 0x67, 0xd3, 0xe7, 0xc2, 0x57, 0xf8, 0x26, + 0xcc, 0x36, 0xf4, 0x46, 0x13, 0x45, 0x3f, 0x69, 0xe0, 0x8b, 0xfc, 0x5b, 0xa9, 0x16, 0x0a, 0x7d, + 0x14, 0x11, 0x1e, 0x3f, 0x22, 0x7e, 0x86, 0x0a, 0x0d, 0x37, 0xc9, 0x36, 0x2c, 0x18, 0xba, 0xa7, + 0xef, 0xea, 0x38, 0x3e, 0xd8, 0xd8, 0x29, 0x07, 0x9b, 0x13, 0x72, 0xc3, 0xad, 0xca, 0x3f, 0x4b, + 0xb0, 0x2c, 0x54, 0xe7, 0x2e, 0xbb, 0xeb, 0xe0, 0xf0, 0xfd, 0x7f, 0xd3, 0xc1, 0x9e, 0xa6, 0x1b, + 0x86, 0x8b, 0x30, 0x16, 0x5e, 0x20, 0x6d, 0xd7, 0x59, 0x53, 0x3f, 0xb8, 0x8c, 0xfb, 0x30, 0x33, + 0xec, 0x7a, 0x38, 0xfe, 0x14, 0x0e, 0xee, 0x8f, 0xc7, 0x82, 0x00, 0x8b, 0x68, 0xc6, 0x7d, 0xfa, + 0x02, 0x4c, 0xd3, 0x79, 0x62, 0xcd, 0xee, 0xb4, 0x76, 0xf9, 0x62, 0x90, 0x55, 0x0b, 0xac, 0xf1, + 0x21, 0x6d, 0x93, 0x57, 0x60, 0x4a, 0x28, 0xc7, 0xde, 0x97, 0xb2, 0x6a, 0x8e, 0x6b, 0x87, 0xe5, + 0x8f, 0xa0, 0x14, 0xa8, 0x47, 0x5d, 0xd9, 0xf7, 0x3b, 0x0d, 0x9f, 0x96, 0xa8, 0xe0, 0xbf, 0x10, + 0x6e, 0x12, 0x3e, 0xba, 0xdf, 0x28, 0xda, 0x91, 0x36, 0xf9, 0x0d, 0x58, 0x64, 0x63, 0x37, 0x1c, + 0xdb, 0x73, 0x1d, 0xcb, 0x42, 0xae, 0x28, 0x16, 0x1b, 0xa7, 0x86, 0x9c, 0xa7, 0xdd, 0x9b, 0x7e, + 0x2f, 0xaf, 0x01, 0x23, 0xd8, 0xc2, 0xdd, 0xc5, 0x5e, 0xbd, 0xc5, 0x4f, 0xa5, 0x06, 0x33, 0x9b, + 0x96, 0x83, 0x11, 0x5d, 0x7c, 0x84, 0x8b, 0xc3, 0xfe, 0x93, 0x22, 0xfe, 0x53, 0xe6, 0x40, 0x0e, + 0xd3, 0xf3, 0xcc, 0x7d, 0x0d, 0x4a, 0x77, 0x90, 0x37, 0xac, 0x8c, 0x8f, 0xa1, 0x1c, 0x50, 0x73, + 0xd3, 0xdf, 0x07, 0xe0, 0xe4, 0x64, 0x17, 0xcb, 0xb2, 0xe8, 0xd2, 0x30, 0x81, 0x4d, 0xc5, 0x50, + 0x63, 0x31, 0xb7, 0x90, 0x3f, 0x95, 0x9f, 0x48, 0x30, 0xc3, 0x6e, 0xf8, 0xc2, 0x27, 0xda, 0xde, + 0x53, 0x92, 0x6f, 0x43, 0x8e, 0x6c, 0x1d, 0xf6, 0x09, 0xc8, 0x8d, 0xd1, 0xb2, 0xbb, 0x57, 0xfa, + 0x17, 0xf5, 0xb1, 0xbb, 0x79, 0xc6, 0xa1, 0xfa, 0xbc, 0xe1, 0xd2, 0x83, 0x4c, 0xa4, 0xf4, 0xa0, + 0x0e, 0xa5, 0x43, 0x13, 0x9b, 0xbb, 0xa6, 0x45, 0x1f, 0x27, 0x47, 0x79, 0x15, 0x2f, 0x06, 0x8c, + 0x74, 0xbb, 0x30, 0x07, 0x72, 0x58, 0x37, 0xee, 0x82, 0xc7, 0x12, 0x9c, 0xbb, 0x83, 0x3c, 0x35, + 0xf8, 0xbe, 0xeb, 0x01, 0xfb, 0xb6, 0xcb, 0xdf, 0xeb, 0xdc, 0x87, 0x09, 0x5a, 0x5c, 0x43, 0x52, + 0x36, 0xd3, 0x33, 0x24, 0x43, 0x1f, 0x88, 0xb1, 0xeb, 0x15, 0xff, 0x27, 0x2d, 0xc3, 0x51, 0xb9, + 0x0c, 0x92, 0xc8, 0x7c, 0xcb, 0x44, 0xdf, 0xbc, 0xf9, 0xfe, 0x22, 0xcf, 0xdb, 0x48, 0x2c, 0x2b, + 0x3f, 0x1c, 0x83, 0x6a, 0xaf, 0x29, 0x71, 0xb7, 0xff, 0x06, 0x14, 0x99, 0x4b, 0xf8, 0x87, 0x68, + 0x62, 0x6e, 0x1f, 0x0c, 0xf9, 0x48, 0xdc, 0x5f, 0x3c, 0x0b, 0x0e, 0xd1, 0xca, 0x0a, 0x6a, 0x58, + 0x86, 0x8b, 0xb6, 0xe5, 0x2e, 0xc8, 0x49, 0xa2, 0x70, 0x71, 0x4d, 0x96, 0x15, 0xd7, 0x3c, 0x88, + 0x16, 0xd7, 0xbc, 0x39, 0xa2, 0xed, 0xfc, 0x99, 0x05, 0xf5, 0x36, 0xca, 0xa7, 0xb0, 0x7a, 0x07, + 0x79, 0x37, 0xef, 0xbf, 0xd7, 0xc7, 0x67, 0x8f, 0x78, 0x5d, 0x30, 0xc9, 0x0a, 0x61, 0x9b, 0x51, + 0xc7, 0xf6, 0x4f, 0x2f, 0xb4, 0x54, 0x98, 0xfc, 0x85, 0x95, 0xdf, 0x91, 0x60, 0xad, 0xcf, 0xe0, + 0xdc, 0x3b, 0x1f, 0xc3, 0x4c, 0x48, 0x2c, 0x7f, 0x52, 0x97, 0xe2, 0x27, 0xb4, 0xa1, 0x27, 0xa1, + 0x96, 0xdd, 0x68, 0x03, 0x56, 0xbe, 0x2f, 0xc1, 0x1c, 0x2d, 0x44, 0x12, 0xf8, 0x3d, 0xc2, 0x5a, + 0xff, 0x8d, 0xf8, 0x31, 0xff, 0xab, 0x03, 0x8f, 0xf9, 0x69, 0x43, 0x05, 0x47, 0xfb, 0x03, 0x98, + 0x8f, 0x11, 0x70, 0x3b, 0xa8, 0x90, 0x8b, 0x15, 0x31, 0xbc, 0x31, 0xea, 0x50, 0xbc, 0x92, 0xc0, + 0x97, 0xa3, 0xfc, 0x81, 0x04, 0x73, 0x2a, 0xd2, 0xdb, 0x6d, 0x8b, 0xdd, 0x9b, 0xe0, 0x11, 0x34, + 0xdf, 0x8e, 0x6b, 0x9e, 0x5e, 0xf4, 0x17, 0xfe, 0x16, 0x92, 0xb9, 0x23, 0x39, 0x5c, 0xa0, 0xfd, + 0x22, 0xcc, 0xc7, 0x08, 0xf8, 0x4c, 0xff, 0x72, 0x0c, 0xe6, 0x59, 0xac, 0xc4, 0xa3, 0xf3, 0x16, + 0x8c, 0xfb, 0x45, 0x9d, 0xc5, 0xf0, 0x79, 0x3a, 0x0d, 0x31, 0x6f, 0x22, 0xdd, 0xb8, 0x8f, 0x3c, + 0x0f, 0xb9, 0xb4, 0xb8, 0x82, 0xd6, 0xd1, 0x50, 0xf6, 0x7e, 0xdb, 0x85, 0xe4, 0xf9, 0x2c, 0x93, + 0x76, 0x3e, 0x7b, 0x13, 0x2a, 0xa6, 0x4d, 0x28, 0xcc, 0x43, 0xa4, 0x21, 0xdb, 0x87, 0x93, 0xa0, + 0x04, 0x6c, 0xde, 0xef, 0xbf, 0x65, 0x8b, 0x64, 0xaf, 0x1b, 0xf2, 0x2b, 0x30, 0xd3, 0xd2, 0x8f, + 0xcd, 0x56, 0xa7, 0xa5, 0xb5, 0x09, 0x3d, 0x36, 0x3f, 0x65, 0x1f, 0x32, 0x66, 0xd5, 0x12, 0xef, + 0xd8, 0xd2, 0xf7, 0xd1, 0xb6, 0xf9, 0x29, 0x92, 0x5f, 0x82, 0x12, 0xad, 0xf6, 0xa4, 0x84, 0xac, + 0x4c, 0x71, 0x82, 0x96, 0x29, 0xd2, 0x22, 0x50, 0x42, 0xc6, 0x3e, 0x85, 0xf8, 0x4f, 0xf6, 0x51, + 0x5c, 0xc4, 0x5e, 0x3c, 0x90, 0x9e, 0x92, 0xc1, 0x52, 0xf3, 0x72, 0xec, 0x29, 0xe6, 0x65, 0x9a, + 0xae, 0x99, 0x34, 0x5d, 0xff, 0x45, 0x82, 0xc5, 0xad, 0x8e, 0xbb, 0x8f, 0x7e, 0x11, 0xa3, 0x43, + 0x59, 0x86, 0x4a, 0x52, 0x39, 0x51, 0x3b, 0x31, 0x06, 0x8b, 0x0f, 0xd0, 0x2f, 0xa8, 0xe6, 0xcf, + 0x24, 0x2f, 0x6e, 0x40, 0x25, 0x69, 0x30, 0x9e, 0x18, 0x29, 0x32, 0xa4, 0x34, 0x19, 0x3f, 0xa4, + 0x9f, 0x1f, 0xec, 0xb9, 0x08, 0x37, 0xc3, 0x77, 0x70, 0xa3, 0x80, 0xe7, 0x87, 0x71, 0xf0, 0xfc, + 0xd5, 0x21, 0xc1, 0xb3, 0xe7, 0xa8, 0x01, 0x86, 0xd2, 0x2f, 0x12, 0xd2, 0xe8, 0x78, 0xd0, 0xfc, + 0x40, 0x82, 0x57, 0xee, 0x20, 0x1b, 0xb9, 0xba, 0x87, 0xee, 0xeb, 0xd8, 0x13, 0x27, 0xe4, 0x58, + 0xfa, 0x3d, 0x8f, 0x03, 0xef, 0x25, 0x78, 0x75, 0xa8, 0x99, 0x71, 0x4d, 0x6e, 0xc3, 0x4a, 0x74, + 0xef, 0x15, 0xbd, 0x57, 0xbb, 0x08, 0x25, 0x17, 0xb5, 0x1c, 0xcf, 0x8f, 0x4f, 0xb6, 0x6f, 0x98, + 0x52, 0x8b, 0xac, 0x99, 0x07, 0x28, 0x56, 0x3a, 0x70, 0x36, 0x5d, 0x0e, 0x0f, 0x8c, 0x6f, 0xc2, + 0x04, 0x3b, 0x7d, 0xf1, 0x7d, 0xc7, 0xdb, 0x43, 0x6e, 0x0c, 0xf9, 0xe9, 0x22, 0x2e, 0x96, 0x0b, + 0x53, 0xfe, 0x3e, 0x0b, 0x0b, 0xe9, 0x24, 0xfd, 0x4e, 0x09, 0x5f, 0x85, 0xc5, 0x96, 0x7e, 0xac, + 0xc5, 0xb1, 0x37, 0xf8, 0x00, 0x61, 0xae, 0xa5, 0x1f, 0xc7, 0x77, 0x5e, 0x86, 0x7c, 0x0f, 0xca, + 0x4c, 0xa2, 0xe5, 0x34, 0x74, 0x6b, 0xb4, 0x7b, 0x42, 0xb6, 0x3d, 0xbe, 0x4f, 0x18, 0xe9, 0x0d, + 0xd3, 0xa7, 0x49, 0xc3, 0xb2, 0x2b, 0xf3, 0xf7, 0x4e, 0x65, 0x98, 0x9a, 0x1a, 0x71, 0x0b, 0xdb, + 0x2a, 0xc7, 0x7c, 0x25, 0xff, 0xae, 0x04, 0xb3, 0x4d, 0xdd, 0x36, 0x9c, 0x43, 0xbe, 0xe9, 0xa7, + 0x41, 0x48, 0x8e, 0x94, 0xa3, 0x14, 0xc0, 0xf7, 0x98, 0xc0, 0x5d, 0x2e, 0xd8, 0x3f, 0x05, 0xf3, + 0x49, 0xc8, 0xcd, 0x44, 0xc7, 0xf2, 0xf7, 0x25, 0x98, 0x4d, 0x99, 0x70, 0x4a, 0x4d, 0xfc, 0x47, + 0xd1, 0x6d, 0xfb, 0x9d, 0x53, 0xcd, 0x71, 0x0b, 0xb9, 0x7c, 0xbc, 0xd0, 0x36, 0x7e, 0xf9, 0xbb, + 0x12, 0x2c, 0xf6, 0x98, 0x7c, 0xca, 0x84, 0xd4, 0xe8, 0x84, 0xbe, 0x3e, 0xe4, 0x84, 0x12, 0x03, + 0xd0, 0x0d, 0x7d, 0xe8, 0x30, 0xf1, 0x01, 0xcc, 0xa7, 0xd2, 0xc8, 0xef, 0xc2, 0x59, 0xdf, 0x67, + 0x69, 0x81, 0x2b, 0xd1, 0xc0, 0x5d, 0x12, 0x34, 0x89, 0xe8, 0x55, 0xfe, 0x54, 0x82, 0xd5, 0x41, + 0xf6, 0x90, 0x15, 0x98, 0xd6, 0x1b, 0x07, 0xc8, 0x88, 0x89, 0xcd, 0xd3, 0x46, 0x9e, 0x06, 0x1f, + 0xc1, 0x72, 0x88, 0x26, 0x7e, 0x1a, 0x1e, 0xb6, 0x28, 0x7d, 0xd1, 0x17, 0xf9, 0x28, 0x7a, 0x2c, + 0xfe, 0x3d, 0x09, 0x96, 0x55, 0xb4, 0xdb, 0x31, 0x2d, 0xe3, 0x79, 0x5f, 0x1e, 0x9e, 0x23, 0x8b, + 0x54, 0xca, 0x4c, 0x18, 0xa6, 0xdd, 0x68, 0x7f, 0xf6, 0x79, 0xf5, 0xcc, 0x8f, 0x3f, 0xaf, 0x9e, + 0xf9, 0xe9, 0xe7, 0x55, 0xe9, 0x37, 0x9f, 0x54, 0xa5, 0x3f, 0x7f, 0x52, 0x95, 0xfe, 0xee, 0x49, + 0x55, 0xfa, 0xec, 0x49, 0x55, 0xfa, 0xb7, 0x27, 0x55, 0xe9, 0x3f, 0x9e, 0x54, 0xcf, 0xfc, 0xf4, + 0x49, 0x55, 0x7a, 0xfc, 0x45, 0xf5, 0xcc, 0x67, 0x5f, 0x54, 0xcf, 0xfc, 0xf8, 0x8b, 0xea, 0x99, + 0x0f, 0xaf, 0xed, 0x3b, 0xc1, 0x64, 0x4c, 0xa7, 0xef, 0xff, 0x2e, 0xfa, 0x95, 0x68, 0xcb, 0xee, + 0x04, 0x35, 0xe7, 0xd5, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x65, 0x1d, 0xeb, 0xfa, 0x48, + 0x00, 0x00, } func (this *StartWorkflowExecutionRequest) Equal(that interface{}) bool { @@ -5776,6 +5786,14 @@ func (this *RespondWorkflowTaskCompletedResponse) Equal(that interface{}) bool { if !this.StartedResponse.Equal(that1.StartedResponse) { return false } + if len(this.ActivityTasks) != len(that1.ActivityTasks) { + return false + } + for i := range this.ActivityTasks { + if !this.ActivityTasks[i].Equal(that1.ActivityTasks[i]) { + return false + } + } return true } func (this *RespondWorkflowTaskFailedRequest) Equal(that interface{}) bool { @@ -8046,11 +8064,14 @@ func (this *RespondWorkflowTaskCompletedResponse) GoString() string { if this == nil { return "nil" } - s := make([]string, 0, 5) + s := make([]string, 0, 6) s = append(s, "&historyservice.RespondWorkflowTaskCompletedResponse{") if this.StartedResponse != nil { s = append(s, "StartedResponse: "+fmt.Sprintf("%#v", this.StartedResponse)+",\n") } + if this.ActivityTasks != nil { + s = append(s, "ActivityTasks: "+fmt.Sprintf("%#v", this.ActivityTasks)+",\n") + } s = append(s, "}") return strings.Join(s, "") } @@ -10008,6 +10029,20 @@ func (m *RespondWorkflowTaskCompletedResponse) MarshalToSizedBuffer(dAtA []byte) _ = i var l int _ = l + if len(m.ActivityTasks) > 0 { + for iNdEx := len(m.ActivityTasks) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ActivityTasks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRequestResponse(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } if m.StartedResponse != nil { { size, err := m.StartedResponse.MarshalToSizedBuffer(dAtA[:i]) @@ -13371,6 +13406,12 @@ func (m *RespondWorkflowTaskCompletedResponse) Size() (n int) { l = m.StartedResponse.Size() n += 1 + l + sovRequestResponse(uint64(l)) } + if len(m.ActivityTasks) > 0 { + for _, e := range m.ActivityTasks { + l = e.Size() + n += 1 + l + sovRequestResponse(uint64(l)) + } + } return n } @@ -14796,8 +14837,14 @@ func (this *RespondWorkflowTaskCompletedResponse) String() string { if this == nil { return "nil" } + repeatedStringForActivityTasks := "[]*PollActivityTaskQueueResponse{" + for _, f := range this.ActivityTasks { + repeatedStringForActivityTasks += strings.Replace(fmt.Sprintf("%v", f), "PollActivityTaskQueueResponse", "v1.PollActivityTaskQueueResponse", 1) + "," + } + repeatedStringForActivityTasks += "}" s := strings.Join([]string{`&RespondWorkflowTaskCompletedResponse{`, `StartedResponse:` + strings.Replace(this.StartedResponse.String(), "RecordWorkflowTaskStartedResponse", "RecordWorkflowTaskStartedResponse", 1) + `,`, + `ActivityTasks:` + repeatedStringForActivityTasks + `,`, `}`, }, "") return s @@ -18892,6 +18939,40 @@ func (m *RespondWorkflowTaskCompletedResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ActivityTasks", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRequestResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRequestResponse + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRequestResponse + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ActivityTasks = append(m.ActivityTasks, &v1.PollActivityTaskQueueResponse{}) + if err := m.ActivityTasks[len(m.ActivityTasks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRequestResponse(dAtA[iNdEx:]) diff --git a/common/dynamicconfig/constants.go b/common/dynamicconfig/constants.go index ef3fd7857aa..7199cb2e2e8 100644 --- a/common/dynamicconfig/constants.go +++ b/common/dynamicconfig/constants.go @@ -109,6 +109,8 @@ const ( EnableParentClosePolicyWorker = "system.enableParentClosePolicyWorker" // EnableStickyQuery indicates if sticky query should be enabled per namespace EnableStickyQuery = "system.enableStickyQuery" + // EnableActivityLocalDispatch indicates if acitivty local dispatch is enabled per namespace + EnableActivityLocalDispatch = "system.enableActivityLocalDispatch" // key for size limit diff --git a/go.mod b/go.mod index f678e4e25ec..214a08ced9b 100644 --- a/go.mod +++ b/go.mod @@ -39,7 +39,7 @@ require ( go.opentelemetry.io/otel/sdk v1.4.0 go.opentelemetry.io/otel/sdk/export/metric v0.27.0 go.opentelemetry.io/otel/sdk/metric v0.27.0 - go.temporal.io/api v1.7.1-0.20220321175358-f623ba3ce7d4 + go.temporal.io/api v1.7.1-0.20220322230426-36cd7fadac67 go.temporal.io/sdk v1.14.0 go.temporal.io/version v0.3.0 go.uber.org/atomic v1.9.0 @@ -105,7 +105,7 @@ require ( golang.org/x/text v0.3.7 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20220317150908-0efb43f6373e // indirect - google.golang.org/protobuf v1.27.1 // indirect + google.golang.org/genproto v0.0.0-20220322021311-435b647f9ef2 // indirect + google.golang.org/protobuf v1.28.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect ) diff --git a/go.sum b/go.sum index 4e814585b65..d6d1d931158 100644 --- a/go.sum +++ b/go.sum @@ -439,8 +439,8 @@ go.opentelemetry.io/otel/trace v1.4.0 h1:4OOUrPZdVFQkbzl/JSdvGCWIdw5ONXXxzHlaLlW go.opentelemetry.io/otel/trace v1.4.0/go.mod h1:uc3eRsqDfWs9R7b92xbQbU42/eTNz4N+gLP8qJCi4aE= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.temporal.io/api v1.7.1-0.20220223032354-6e6fe738916a/go.mod h1:OnUq5eS+Nyx+irKb3Ws5YB7yjGFf5XmI3WcVRU9COEo= -go.temporal.io/api v1.7.1-0.20220321175358-f623ba3ce7d4 h1:+jDzci7ob+fSBqmSLfN66f3EG88wyZBcOfiDunkhYUc= -go.temporal.io/api v1.7.1-0.20220321175358-f623ba3ce7d4/go.mod h1:tECxXXsJgzLShh6b8w1zCTrxkQBrrf1UsleZEK8pQlw= +go.temporal.io/api v1.7.1-0.20220322230426-36cd7fadac67 h1:FgGiyUQ0iR2B4iktL7mFaDpq6FRR6rqx5/hQeMZrp5I= +go.temporal.io/api v1.7.1-0.20220322230426-36cd7fadac67/go.mod h1:WTzSbbNciKViPgr9W7g2QHw/7m8dORozCaZjiA4kdfw= go.temporal.io/sdk v1.14.0 h1:7tJO72gK4xmsZ8W3Xp1rwKYdkwQ/mgnKN5LmROyZTac= go.temporal.io/sdk v1.14.0/go.mod h1:7rvvSS6oCXp19JSFQtSOhLxCX3wpEQSJZJlyCGleo9M= go.temporal.io/version v0.3.0 h1:dMrei9l9NyHt8nG6EB8vAwDLLTwx2SvRyucCSumAiig= @@ -846,8 +846,8 @@ google.golang.org/genproto v0.0.0-20220114231437-d2e6a121cae0/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20220201184016-50beb8ab5c44/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220204002441-d6cc3cc0770e/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220317150908-0efb43f6373e h1:fNKDNuUyC4WH+inqDMpfXDdfvwfYILbsX+oskGZ8hxg= -google.golang.org/genproto v0.0.0-20220317150908-0efb43f6373e/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220322021311-435b647f9ef2 h1:3n0D2NdPGm0g0wrVJzXJWW5CBOoqgGBkDX9cRMJHZAY= +google.golang.org/genproto v0.0.0-20220322021311-435b647f9ef2/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -893,8 +893,9 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/proto/api b/proto/api index bd0759810fe..53ed805cb3c 160000 --- a/proto/api +++ b/proto/api @@ -1 +1 @@ -Subproject commit bd0759810febac586e426ec808cce7b93fb8bb22 +Subproject commit 53ed805cb3c00c3640fd9bd4418efd55da1080bd diff --git a/proto/internal/temporal/server/api/historyservice/v1/request_response.proto b/proto/internal/temporal/server/api/historyservice/v1/request_response.proto index c6abbc5a37a..37f05ebd009 100644 --- a/proto/internal/temporal/server/api/historyservice/v1/request_response.proto +++ b/proto/internal/temporal/server/api/historyservice/v1/request_response.proto @@ -188,6 +188,7 @@ message RespondWorkflowTaskCompletedRequest { message RespondWorkflowTaskCompletedResponse { RecordWorkflowTaskStartedResponse started_response = 1; + repeated temporal.api.workflowservice.v1.PollActivityTaskQueueResponse activity_tasks = 2; } message RespondWorkflowTaskFailedRequest { diff --git a/service/frontend/workflowHandler.go b/service/frontend/workflowHandler.go index 10834626062..db9fdd81973 100644 --- a/service/frontend/workflowHandler.go +++ b/service/frontend/workflowHandler.go @@ -982,7 +982,9 @@ func (wh *WorkflowHandler) RespondWorkflowTaskCompleted( return nil, err } - completedResp := &workflowservice.RespondWorkflowTaskCompletedResponse{} + completedResp := &workflowservice.RespondWorkflowTaskCompletedResponse{ + ActivityTasks: histResp.ActivityTasks, + } if request.GetReturnNewWorkflowTask() && histResp != nil && histResp.StartedResponse != nil { taskToken := &tokenspb.Task{ NamespaceId: taskToken.GetNamespaceId(), @@ -991,7 +993,10 @@ func (wh *WorkflowHandler) RespondWorkflowTaskCompleted( ScheduleId: histResp.StartedResponse.GetScheduledEventId(), ScheduleAttempt: histResp.StartedResponse.GetAttempt(), } - token, _ := wh.tokenSerializer.Serialize(taskToken) + token, err := wh.tokenSerializer.Serialize(taskToken) + if err != nil { + return nil, err + } workflowExecution := &commonpb.WorkflowExecution{ WorkflowId: taskToken.GetWorkflowId(), RunId: taskToken.GetRunId(), diff --git a/service/history/configs/config.go b/service/history/configs/config.go index 37006f50854..294e20caf91 100644 --- a/service/history/configs/config.go +++ b/service/history/configs/config.go @@ -251,6 +251,7 @@ type Config struct { ESProcessorAckTimeout dynamicconfig.DurationPropertyFn EnableCrossNamespaceCommands dynamicconfig.BoolPropertyFn + EnableActivityLocalDispatch dynamicconfig.BoolPropertyFnWithNamespaceFilter } const ( @@ -436,6 +437,7 @@ func NewConfig(dc *dynamicconfig.Collection, numberOfShards int32, isAdvancedVis ESProcessorAckTimeout: dc.GetDurationProperty(dynamicconfig.WorkerESProcessorAckTimeout, 1*time.Minute), EnableCrossNamespaceCommands: dc.GetBoolProperty(dynamicconfig.EnableCrossNamespaceCommands, true), + EnableActivityLocalDispatch: dc.GetBoolPropertyFnWithNamespaceFilter(dynamicconfig.EnableActivityLocalDispatch, false), } return cfg @@ -445,11 +447,3 @@ func NewConfig(dc *dynamicconfig.Collection, numberOfShards int32, isAdvancedVis func (config *Config) GetShardID(namespaceID namespace.ID, workflowID string) int32 { return common.WorkflowIDToHistoryShard(namespaceID.String(), workflowID, config.NumberOfShards) } - -func NewDynamicConfig() *Config { - dc := dynamicconfig.NewNoopCollection() - config := NewConfig(dc, 1, false, "") - // reduce the duration of long poll to increase test speed - config.LongPollExpirationInterval = dc.GetDurationPropertyFilteredByNamespace(dynamicconfig.HistoryLongPollExpirationInterval, 10*time.Second) - return config -} diff --git a/service/history/historyEngine_test.go b/service/history/historyEngine_test.go index a26def14619..791f3a03a0f 100644 --- a/service/history/historyEngine_test.go +++ b/service/history/historyEngine_test.go @@ -1639,6 +1639,111 @@ func (s *engineSuite) TestRespondWorkflowTaskCompletedSingleActivityScheduledWor s.Equal(5*time.Second, timestamp.DurationValue(activity1Attributes.HeartbeatTimeout)) } +func (s *engineSuite) TestRespondWorkflowTaskCompleted_ActivityLocalDispatch() { + we := commonpb.WorkflowExecution{ + WorkflowId: tests.WorkflowID, + RunId: tests.RunID, + } + tl := "testTaskQueue" + tt := &tokenspb.Task{ + ScheduleAttempt: 1, + WorkflowId: tests.WorkflowID, + RunId: we.GetRunId(), + ScheduleId: 2, + } + taskToken, _ := tt.Marshal() + identity := "testIdentity" + input := payloads.EncodeString("input") + + msBuilder := workflow.TestLocalMutableState(s.mockHistoryEngine.shard, s.eventsCache, + tests.LocalNamespaceEntry, log.NewTestLogger(), we.GetRunId()) + addWorkflowExecutionStartedEvent(msBuilder, we, "wType", tl, payloads.EncodeString("input"), 100*time.Second, 90*time.Second, 200*time.Second, identity) + di := addWorkflowTaskScheduledEvent(msBuilder) + addWorkflowTaskStartedEvent(msBuilder, di.ScheduleID, tl, identity) + + scheduleToCloseTimeout := timestamp.DurationPtr(90 * time.Second) + scheduleToStartTimeout := timestamp.DurationPtr(10 * time.Second) + startToCloseTimeout := timestamp.DurationPtr(50 * time.Second) + heartbeatTimeout := timestamp.DurationPtr(5 * time.Second) + commands := []*commandpb.Command{ + { + CommandType: enumspb.COMMAND_TYPE_SCHEDULE_ACTIVITY_TASK, + Attributes: &commandpb.Command_ScheduleActivityTaskCommandAttributes{ScheduleActivityTaskCommandAttributes: &commandpb.ScheduleActivityTaskCommandAttributes{ + ActivityId: "activity1", + ActivityType: &commonpb.ActivityType{Name: "activity_type1"}, + TaskQueue: &taskqueuepb.TaskQueue{Name: tl}, + Input: input, + ScheduleToCloseTimeout: scheduleToCloseTimeout, + ScheduleToStartTimeout: scheduleToStartTimeout, + StartToCloseTimeout: startToCloseTimeout, + HeartbeatTimeout: heartbeatTimeout, + RequestStart: false, + }}, + }, + { + CommandType: enumspb.COMMAND_TYPE_SCHEDULE_ACTIVITY_TASK, + Attributes: &commandpb.Command_ScheduleActivityTaskCommandAttributes{ScheduleActivityTaskCommandAttributes: &commandpb.ScheduleActivityTaskCommandAttributes{ + ActivityId: "activity2", + ActivityType: &commonpb.ActivityType{Name: "activity_type2"}, + TaskQueue: &taskqueuepb.TaskQueue{Name: tl}, + Input: input, + ScheduleToCloseTimeout: scheduleToCloseTimeout, + ScheduleToStartTimeout: scheduleToStartTimeout, + StartToCloseTimeout: startToCloseTimeout, + HeartbeatTimeout: heartbeatTimeout, + RequestStart: true, + }}, + }, + } + + ms := workflow.TestCloneToProto(msBuilder) + gwmsResponse := &persistence.GetWorkflowExecutionResponse{State: ms} + + s.mockExecutionMgr.EXPECT().GetWorkflowExecution(gomock.Any(), gomock.Any()).Return(gwmsResponse, nil) + s.mockExecutionMgr.EXPECT().UpdateWorkflowExecution(gomock.Any(), gomock.Any()).Return(tests.UpdateWorkflowExecutionResponse, nil) + + resp, err := s.mockHistoryEngine.RespondWorkflowTaskCompleted(context.Background(), &historyservice.RespondWorkflowTaskCompletedRequest{ + NamespaceId: tests.NamespaceID.String(), + CompleteRequest: &workflowservice.RespondWorkflowTaskCompletedRequest{ + TaskToken: taskToken, + Commands: commands, + Identity: identity, + }, + }) + s.NoError(err) + executionBuilder := s.getBuilder(tests.NamespaceID, we) + s.Equal(int64(7), executionBuilder.GetNextEventID()) + s.Equal(int64(3), executionBuilder.GetExecutionInfo().LastWorkflowTaskStartId) + s.Equal(enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING, executionBuilder.GetExecutionState().State) + s.False(executionBuilder.HasPendingWorkflowTask()) + + ai1, ok := executionBuilder.GetActivityByActivityID("activity1") + s.True(ok) + s.Equal(common.EmptyEventID, ai1.StartedId) + + ai2, ok := executionBuilder.GetActivityByActivityID("activity2") + s.True(ok) + s.Equal(common.TransientEventID, ai2.StartedId) + s.NotZero(ai2.StartedTime) + + scheduledEvent := s.getActivityScheduledEvent(executionBuilder, ai2.ScheduleId) + + s.Len(resp.ActivityTasks, 1) + activityTask := resp.ActivityTasks[0] + s.Equal("activity2", activityTask.ActivityId) + s.Equal("activity_type2", activityTask.ActivityType.GetName()) + s.Equal(input, activityTask.Input) + s.Equal(we, *activityTask.WorkflowExecution) + s.Equal(scheduledEvent.EventTime, activityTask.CurrentAttemptScheduledTime) + s.Equal(scheduledEvent.EventTime, activityTask.ScheduledTime) + s.Equal(*scheduleToCloseTimeout, *activityTask.ScheduleToCloseTimeout) + s.Equal(startToCloseTimeout, activityTask.StartToCloseTimeout) + s.Equal(heartbeatTimeout, activityTask.HeartbeatTimeout) + s.Equal(int32(1), activityTask.Attempt) + s.Nil(activityTask.HeartbeatDetails) + s.Equal(tests.LocalNamespaceEntry.Name().String(), activityTask.WorkflowNamespace) +} + func (s *engineSuite) TestRespondWorkflowTaskCompleted_WorkflowTaskHeartbeatTimeout() { we := commonpb.WorkflowExecution{ @@ -5038,7 +5143,7 @@ func addActivityTaskScheduledEvent( ScheduleToStartTimeout: &scheduleToStartTimeout, StartToCloseTimeout: &startToCloseTimeout, HeartbeatTimeout: &heartbeatTimeout, - }) + }, false) return event, ai } @@ -5066,7 +5171,7 @@ func addActivityTaskScheduledEventWithRetry( StartToCloseTimeout: &startToCloseTimeout, HeartbeatTimeout: &heartbeatTimeout, RetryPolicy: retryPolicy, - }) + }, false) return event, ai } diff --git a/service/history/tests/vars.go b/service/history/tests/vars.go index b4d52b43c14..eb39b414b9f 100644 --- a/service/history/tests/vars.go +++ b/service/history/tests/vars.go @@ -144,5 +144,6 @@ func NewDynamicConfig() *configs.Config { config := configs.NewConfig(dc, 1, false, "") // reduce the duration of long poll to increase test speed config.LongPollExpirationInterval = dc.GetDurationPropertyFilteredByNamespace(dynamicconfig.HistoryLongPollExpirationInterval, 10*time.Second) + config.EnableActivityLocalDispatch = dynamicconfig.GetBoolPropertyFnFilteredByNamespace(true) return config } diff --git a/service/history/workflow/mutable_state.go b/service/history/workflow/mutable_state.go index 2ae4fb048f0..27b2c505db1 100644 --- a/service/history/workflow/mutable_state.go +++ b/service/history/workflow/mutable_state.go @@ -88,7 +88,7 @@ type ( AddActivityTaskCanceledEvent(int64, int64, int64, *commonpb.Payloads, string) (*historypb.HistoryEvent, error) AddActivityTaskCompletedEvent(int64, int64, *workflowservice.RespondActivityTaskCompletedRequest) (*historypb.HistoryEvent, error) AddActivityTaskFailedEvent(int64, int64, *failurepb.Failure, enumspb.RetryState, string) (*historypb.HistoryEvent, error) - AddActivityTaskScheduledEvent(int64, *commandpb.ScheduleActivityTaskCommandAttributes) (*historypb.HistoryEvent, *persistencespb.ActivityInfo, error) + AddActivityTaskScheduledEvent(int64, *commandpb.ScheduleActivityTaskCommandAttributes, bool) (*historypb.HistoryEvent, *persistencespb.ActivityInfo, error) AddActivityTaskStartedEvent(*persistencespb.ActivityInfo, int64, string, string) (*historypb.HistoryEvent, error) AddActivityTaskTimedOutEvent(int64, int64, *failurepb.Failure, enumspb.RetryState) (*historypb.HistoryEvent, error) AddChildWorkflowExecutionCanceledEvent(int64, *commonpb.WorkflowExecution, *historypb.WorkflowExecutionCanceledEventAttributes) (*historypb.HistoryEvent, error) diff --git a/service/history/workflow/mutable_state_impl.go b/service/history/workflow/mutable_state_impl.go index 2f9d20515a0..03789fd9866 100644 --- a/service/history/workflow/mutable_state_impl.go +++ b/service/history/workflow/mutable_state_impl.go @@ -1816,6 +1816,7 @@ func (e *MutableStateImpl) ReplicateWorkflowTaskFailedEvent() error { func (e *MutableStateImpl) AddActivityTaskScheduledEvent( workflowTaskCompletedEventID int64, command *commandpb.ScheduleActivityTaskCommandAttributes, + bypassTaskGeneration bool, ) (*historypb.HistoryEvent, *persistencespb.ActivityInfo, error) { opTag := tag.WorkflowActionActivityTaskScheduled @@ -1834,12 +1835,15 @@ func (e *MutableStateImpl) AddActivityTaskScheduledEvent( event := e.hBuilder.AddActivityTaskScheduledEvent(workflowTaskCompletedEventID, command) ai, err := e.ReplicateActivityTaskScheduledEvent(workflowTaskCompletedEventID, event) // TODO merge active & passive task generation - if err := e.taskGenerator.GenerateActivityTasks( - timestamp.TimeValue(event.GetEventTime()), - event, - ); err != nil { - return nil, nil, err + if !bypassTaskGeneration { + if err := e.taskGenerator.GenerateActivityTasks( + timestamp.TimeValue(event.GetEventTime()), + event, + ); err != nil { + return nil, nil, err + } } + return event, ai, err } diff --git a/service/history/workflow/mutable_state_mock.go b/service/history/workflow/mutable_state_mock.go index 6dc3c8b047c..c14a9d45f87 100644 --- a/service/history/workflow/mutable_state_mock.go +++ b/service/history/workflow/mutable_state_mock.go @@ -136,9 +136,9 @@ func (mr *MockMutableStateMockRecorder) AddActivityTaskFailedEvent(arg0, arg1, a } // AddActivityTaskScheduledEvent mocks base method. -func (m *MockMutableState) AddActivityTaskScheduledEvent(arg0 int64, arg1 *v1.ScheduleActivityTaskCommandAttributes) (*v13.HistoryEvent, *v19.ActivityInfo, error) { +func (m *MockMutableState) AddActivityTaskScheduledEvent(arg0 int64, arg1 *v1.ScheduleActivityTaskCommandAttributes, arg2 bool) (*v13.HistoryEvent, *v19.ActivityInfo, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AddActivityTaskScheduledEvent", arg0, arg1) + ret := m.ctrl.Call(m, "AddActivityTaskScheduledEvent", arg0, arg1, arg2) ret0, _ := ret[0].(*v13.HistoryEvent) ret1, _ := ret[1].(*v19.ActivityInfo) ret2, _ := ret[2].(error) @@ -146,9 +146,9 @@ func (m *MockMutableState) AddActivityTaskScheduledEvent(arg0 int64, arg1 *v1.Sc } // AddActivityTaskScheduledEvent indicates an expected call of AddActivityTaskScheduledEvent. -func (mr *MockMutableStateMockRecorder) AddActivityTaskScheduledEvent(arg0, arg1 interface{}) *gomock.Call { +func (mr *MockMutableStateMockRecorder) AddActivityTaskScheduledEvent(arg0, arg1, arg2 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddActivityTaskScheduledEvent", reflect.TypeOf((*MockMutableState)(nil).AddActivityTaskScheduledEvent), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddActivityTaskScheduledEvent", reflect.TypeOf((*MockMutableState)(nil).AddActivityTaskScheduledEvent), arg0, arg1, arg2) } // AddActivityTaskStartedEvent mocks base method. diff --git a/service/history/workflowTaskHandler.go b/service/history/workflowTaskHandler.go index 88a11b83c10..23099308ca3 100644 --- a/service/history/workflowTaskHandler.go +++ b/service/history/workflowTaskHandler.go @@ -35,9 +35,10 @@ import ( enumspb "go.temporal.io/api/enums/v1" failurepb "go.temporal.io/api/failure/v1" "go.temporal.io/api/serviceerror" + "go.temporal.io/api/workflowservice/v1" - "go.temporal.io/server/common/searchattribute" - + "go.temporal.io/server/api/historyservice/v1" + tokenspb "go.temporal.io/server/api/token/v1" "go.temporal.io/server/common" "go.temporal.io/server/common/backoff" "go.temporal.io/server/common/enums" @@ -47,6 +48,7 @@ import ( "go.temporal.io/server/common/namespace" "go.temporal.io/server/common/payloads" "go.temporal.io/server/common/primitives/timestamp" + "go.temporal.io/server/common/searchattribute" "go.temporal.io/server/service/history/configs" "go.temporal.io/server/service/history/shard" "go.temporal.io/server/service/history/workflow" @@ -78,12 +80,17 @@ type ( metricsClient metrics.Client config *configs.Config shard shard.Context + tokenSerializer common.TaskTokenSerializer } workflowTaskFailedCause struct { failedCause enumspb.WorkflowTaskFailedCause causeErr error } + + workflowTaskResponseMutation func( + resp *historyservice.RespondWorkflowTaskCompletedResponse, + ) error ) func newWorkflowTaskHandler( @@ -123,77 +130,83 @@ func newWorkflowTaskHandler( metricsClient: metricsClient, config: config, shard: shard, + tokenSerializer: common.NewProtoTaskTokenSerializer(), } } func (handler *workflowTaskHandlerImpl) handleCommands( ctx context.Context, commands []*commandpb.Command, -) error { +) ([]workflowTaskResponseMutation, error) { if err := handler.attrValidator.validateCommandSequence( commands, ); err != nil { - return err + return nil, err } + + var mutations []workflowTaskResponseMutation for _, command := range commands { - err := handler.handleCommand(ctx, command) + mutation, err := handler.handleCommand(ctx, command) if err != nil || handler.stopProcessing { - return err + return nil, err + } + if mutation != nil { + mutations = append(mutations, mutation) } } - return nil + return mutations, nil } -func (handler *workflowTaskHandlerImpl) handleCommand(ctx context.Context, command *commandpb.Command) error { +func (handler *workflowTaskHandlerImpl) handleCommand(ctx context.Context, command *commandpb.Command) (workflowTaskResponseMutation, error) { switch command.GetCommandType() { case enumspb.COMMAND_TYPE_SCHEDULE_ACTIVITY_TASK: return handler.handleCommandScheduleActivity(ctx, command.GetScheduleActivityTaskCommandAttributes()) case enumspb.COMMAND_TYPE_COMPLETE_WORKFLOW_EXECUTION: - return handler.handleCommandCompleteWorkflow(ctx, command.GetCompleteWorkflowExecutionCommandAttributes()) + return nil, handler.handleCommandCompleteWorkflow(ctx, command.GetCompleteWorkflowExecutionCommandAttributes()) case enumspb.COMMAND_TYPE_FAIL_WORKFLOW_EXECUTION: - return handler.handleCommandFailWorkflow(ctx, command.GetFailWorkflowExecutionCommandAttributes()) + return nil, handler.handleCommandFailWorkflow(ctx, command.GetFailWorkflowExecutionCommandAttributes()) case enumspb.COMMAND_TYPE_CANCEL_WORKFLOW_EXECUTION: - return handler.handleCommandCancelWorkflow(ctx, command.GetCancelWorkflowExecutionCommandAttributes()) + return nil, handler.handleCommandCancelWorkflow(ctx, command.GetCancelWorkflowExecutionCommandAttributes()) case enumspb.COMMAND_TYPE_START_TIMER: - return handler.handleCommandStartTimer(ctx, command.GetStartTimerCommandAttributes()) + return nil, handler.handleCommandStartTimer(ctx, command.GetStartTimerCommandAttributes()) case enumspb.COMMAND_TYPE_REQUEST_CANCEL_ACTIVITY_TASK: - return handler.handleCommandRequestCancelActivity(ctx, command.GetRequestCancelActivityTaskCommandAttributes()) + return nil, handler.handleCommandRequestCancelActivity(ctx, command.GetRequestCancelActivityTaskCommandAttributes()) case enumspb.COMMAND_TYPE_CANCEL_TIMER: - return handler.handleCommandCancelTimer(ctx, command.GetCancelTimerCommandAttributes()) + return nil, handler.handleCommandCancelTimer(ctx, command.GetCancelTimerCommandAttributes()) case enumspb.COMMAND_TYPE_RECORD_MARKER: - return handler.handleCommandRecordMarker(ctx, command.GetRecordMarkerCommandAttributes()) + return nil, handler.handleCommandRecordMarker(ctx, command.GetRecordMarkerCommandAttributes()) case enumspb.COMMAND_TYPE_REQUEST_CANCEL_EXTERNAL_WORKFLOW_EXECUTION: - return handler.handleCommandRequestCancelExternalWorkflow(ctx, command.GetRequestCancelExternalWorkflowExecutionCommandAttributes()) + return nil, handler.handleCommandRequestCancelExternalWorkflow(ctx, command.GetRequestCancelExternalWorkflowExecutionCommandAttributes()) case enumspb.COMMAND_TYPE_SIGNAL_EXTERNAL_WORKFLOW_EXECUTION: - return handler.handleCommandSignalExternalWorkflow(ctx, command.GetSignalExternalWorkflowExecutionCommandAttributes()) + return nil, handler.handleCommandSignalExternalWorkflow(ctx, command.GetSignalExternalWorkflowExecutionCommandAttributes()) case enumspb.COMMAND_TYPE_CONTINUE_AS_NEW_WORKFLOW_EXECUTION: - return handler.handleCommandContinueAsNewWorkflow(ctx, command.GetContinueAsNewWorkflowExecutionCommandAttributes()) + return nil, handler.handleCommandContinueAsNewWorkflow(ctx, command.GetContinueAsNewWorkflowExecutionCommandAttributes()) case enumspb.COMMAND_TYPE_START_CHILD_WORKFLOW_EXECUTION: - return handler.handleCommandStartChildWorkflow(ctx, command.GetStartChildWorkflowExecutionCommandAttributes()) + return nil, handler.handleCommandStartChildWorkflow(ctx, command.GetStartChildWorkflowExecutionCommandAttributes()) case enumspb.COMMAND_TYPE_UPSERT_WORKFLOW_SEARCH_ATTRIBUTES: - return handler.handleCommandUpsertWorkflowSearchAttributes(ctx, command.GetUpsertWorkflowSearchAttributesCommandAttributes()) + return nil, handler.handleCommandUpsertWorkflowSearchAttributes(ctx, command.GetUpsertWorkflowSearchAttributesCommandAttributes()) default: - return serviceerror.NewInvalidArgument(fmt.Sprintf("Unknown command type: %v", command.GetCommandType())) + return nil, serviceerror.NewInvalidArgument(fmt.Sprintf("Unknown command type: %v", command.GetCommandType())) } } func (handler *workflowTaskHandlerImpl) handleCommandScheduleActivity( _ context.Context, attr *commandpb.ScheduleActivityTaskCommandAttributes, -) error { +) (workflowTaskResponseMutation, error) { handler.metricsClient.IncCounter( metrics.HistoryRespondWorkflowTaskCompletedScope, @@ -206,7 +219,7 @@ func (handler *workflowTaskHandlerImpl) handleCommandScheduleActivity( if attr.GetNamespace() != "" { targetNamespaceEntry, err := handler.namespaceRegistry.GetNamespace(namespace.Name(attr.GetNamespace())) if err != nil { - return serviceerror.NewUnavailable(fmt.Sprintf("Unable to schedule activity across namespace %v.", attr.GetNamespace())) + return nil, serviceerror.NewUnavailable(fmt.Sprintf("Unable to schedule activity across namespace %v.", attr.GetNamespace())) } targetNamespaceID = targetNamespaceEntry.ID() } @@ -222,7 +235,7 @@ func (handler *workflowTaskHandlerImpl) handleCommandScheduleActivity( }, enumspb.WORKFLOW_TASK_FAILED_CAUSE_BAD_SCHEDULE_ACTIVITY_ATTRIBUTES, ); err != nil || handler.stopProcessing { - return err + return nil, err } failWorkflow, err := handler.sizeLimitChecker.failWorkflowIfPayloadSizeExceedsLimit( @@ -232,19 +245,82 @@ func (handler *workflowTaskHandlerImpl) handleCommandScheduleActivity( ) if err != nil || failWorkflow { handler.stopProcessing = true - return err + return nil, err } enums.SetDefaultTaskQueueKind(&attr.GetTaskQueue().Kind) - _, _, err = handler.mutableState.AddActivityTaskScheduledEvent(handler.workflowTaskCompletedID, attr) + localDispatchActivity := false + namespace := handler.mutableState.GetNamespaceEntry().Name().String() + if attr.RequestStart && handler.config.EnableActivityLocalDispatch(namespace) { + localDispatchActivity = true + } + + event, ai, err := handler.mutableState.AddActivityTaskScheduledEvent( + handler.workflowTaskCompletedID, + attr, + localDispatchActivity, + ) if err != nil { if _, ok := err.(*serviceerror.InvalidArgument); ok { - return handler.failCommand(enumspb.WORKFLOW_TASK_FAILED_CAUSE_SCHEDULE_ACTIVITY_DUPLICATE_ID, err) + return nil, handler.failCommand(enumspb.WORKFLOW_TASK_FAILED_CAUSE_SCHEDULE_ACTIVITY_DUPLICATE_ID, err) } - return err + return nil, err } - return nil + + if !localDispatchActivity { + return nil, nil + } + + if _, err := handler.mutableState.AddActivityTaskStartedEvent( + ai, + event.GetEventId(), + uuid.New(), + handler.identity, + ); err != nil { + return nil, err + } + return func(resp *historyservice.RespondWorkflowTaskCompletedResponse) error { + runID := handler.mutableState.GetExecutionState().RunId + attr := event.GetActivityTaskScheduledEventAttributes() + + taskToken := &tokenspb.Task{ + NamespaceId: namespaceID.String(), + WorkflowId: executionInfo.WorkflowId, + RunId: runID, + ScheduleId: event.EventId, + ScheduleAttempt: ai.Attempt, + ActivityId: attr.ActivityId, + ActivityType: attr.ActivityType.GetName(), + } + serializedToken, err := handler.tokenSerializer.Serialize(taskToken) + if err != nil { + return err + } + activityTask := &workflowservice.PollActivityTaskQueueResponse{ + ActivityId: attr.ActivityId, + ActivityType: attr.ActivityType, + Header: attr.Header, + Input: attr.Input, + WorkflowExecution: &commonpb.WorkflowExecution{ + WorkflowId: executionInfo.WorkflowId, + RunId: runID, + }, + CurrentAttemptScheduledTime: ai.ScheduledTime, + ScheduledTime: event.EventTime, + ScheduleToCloseTimeout: attr.ScheduleToCloseTimeout, + StartedTime: ai.StartedTime, + StartToCloseTimeout: attr.StartToCloseTimeout, + HeartbeatTimeout: attr.HeartbeatTimeout, + TaskToken: serializedToken, + Attempt: ai.Attempt, + HeartbeatDetails: ai.LastHeartbeatDetails, + WorkflowType: handler.mutableState.GetWorkflowType(), + WorkflowNamespace: namespace, + } + resp.ActivityTasks = append(resp.ActivityTasks, activityTask) + return nil + }, nil } func (handler *workflowTaskHandlerImpl) handleCommandRequestCancelActivity( diff --git a/service/history/workflowTaskHandlerCallbacks.go b/service/history/workflowTaskHandlerCallbacks.go index a42ab45f1d0..bbaee0c40de 100644 --- a/service/history/workflowTaskHandlerCallbacks.go +++ b/service/history/workflowTaskHandlerCallbacks.go @@ -419,6 +419,7 @@ func (handler *workflowTaskHandlerCallbacksImpl) handleWorkflowTaskCompleted( newStateBuilder workflow.MutableState hasUnhandledEvents bool + responseMutations []workflowTaskResponseMutation ) hasUnhandledEvents = msBuilder.HasBufferedEvents() @@ -468,7 +469,7 @@ func (handler *workflowTaskHandlerCallbacksImpl) handleWorkflowTaskCompleted( handler.searchAttributesMapper, ) - if err := workflowTaskHandler.handleCommands( + if responseMutations, err = workflowTaskHandler.handleCommands( ctx, request.Commands, ); err != nil { @@ -621,6 +622,11 @@ func (handler *workflowTaskHandlerCallbacksImpl) handleWorkflowTaskCompleted( // sticky is always enabled when worker request for new workflow task from RespondWorkflowTaskCompleted resp.StartedResponse.StickyExecutionEnabled = true } + for _, mutation := range responseMutations { + if err := mutation(resp); err != nil { + return nil, err + } + } return resp, nil diff --git a/service/matching/matchingEngine.go b/service/matching/matchingEngine.go index 91383106edc..5316453d6f2 100644 --- a/service/matching/matchingEngine.go +++ b/service/matching/matchingEngine.go @@ -819,18 +819,6 @@ func (e *matchingEngineImpl) createPollActivityTaskQueueResponse( serializedToken, _ := e.tokenSerializer.Serialize(taskToken) - // REMOVE THE CODE BELOW HERE after 1.10 - - // TODO ScheduleToCloseTimeout can be 0, meaning no timeout - // however, SDK cannot handle ScheduleToCloseTimeout being 0 - // so need to override - scheduleToCloseTimeout := timestamp.DurationValue(attributes.ScheduleToCloseTimeout) - if scheduleToCloseTimeout == 0 { - scheduleToCloseTimeout = historyResponse.StartedTime.Add( - timestamp.DurationValue(attributes.StartToCloseTimeout), - ).Sub(timestamp.TimeValue(scheduledEvent.EventTime)) - } - return &matchingservice.PollActivityTaskQueueResponse{ ActivityId: attributes.ActivityId, ActivityType: attributes.ActivityType, @@ -839,7 +827,7 @@ func (e *matchingEngineImpl) createPollActivityTaskQueueResponse( WorkflowExecution: task.workflowExecution(), CurrentAttemptScheduledTime: historyResponse.CurrentAttemptScheduledTime, ScheduledTime: scheduledEvent.EventTime, - ScheduleToCloseTimeout: timestamp.DurationPtr(scheduleToCloseTimeout), + ScheduleToCloseTimeout: attributes.ScheduleToCloseTimeout, StartedTime: historyResponse.StartedTime, StartToCloseTimeout: attributes.StartToCloseTimeout, HeartbeatTimeout: attributes.HeartbeatTimeout, @@ -849,30 +837,6 @@ func (e *matchingEngineImpl) createPollActivityTaskQueueResponse( WorkflowType: historyResponse.WorkflowType, WorkflowNamespace: historyResponse.WorkflowNamespace, } - - // REMOVE THE CODE ABOVE HERE after 1.10 - // UNCOMMENT THE CODE BELOW after 1.10 for original behavior - - //return &matchingservice.PollActivityTaskQueueResponse{ - // ActivityId: attributes.ActivityId, - // ActivityType: attributes.ActivityType, - // Header: attributes.Header, - // Input: attributes.Input, - // WorkflowExecution: task.workflowExecution(), - // CurrentAttemptScheduledTime: historyResponse.CurrentAttemptScheduledTime, - // ScheduledTime: scheduledEvent.EventTime, - // ScheduleToCloseTimeout: attributes.ScheduleToCloseTimeout, - // StartedTime: historyResponse.StartedTime, - // StartToCloseTimeout: attributes.StartToCloseTimeout, - // HeartbeatTimeout: attributes.HeartbeatTimeout, - // TaskToken: serializedToken, - // Attempt: taskToken.ScheduleAttempt, - // HeartbeatDetails: historyResponse.HeartbeatDetails, - // WorkflowType: historyResponse.WorkflowType, - // WorkflowNamespace: historyResponse.WorkflowNamespace, - //} - - // UNCOMMENT THE CODE ABOVE after 1.10 for original behavior } func (e *matchingEngineImpl) recordWorkflowTaskStarted(