diff --git a/dashboard/apps/web/littlehorse-public-api/acls.ts b/dashboard/apps/web/littlehorse-public-api/acls.ts index de3f3c4e5..6242f2f5e 100644 --- a/dashboard/apps/web/littlehorse-public-api/acls.ts +++ b/dashboard/apps/web/littlehorse-public-api/acls.ts @@ -1016,7 +1016,7 @@ export type Exact
= P extends Builtin ? P function toTimestamp(dateStr: string): Timestamp { const date = new globalThis.Date(dateStr); - const seconds = date.getTime() / 1_000; + const seconds = Math.trunc(date.getTime() / 1_000); const nanos = (date.getTime() % 1_000) * 1_000_000; return { seconds, nanos }; } diff --git a/dashboard/apps/web/littlehorse-public-api/external_event.ts b/dashboard/apps/web/littlehorse-public-api/external_event.ts index bd0bca3ef..e89822485 100644 --- a/dashboard/apps/web/littlehorse-public-api/external_event.ts +++ b/dashboard/apps/web/littlehorse-public-api/external_event.ts @@ -338,7 +338,7 @@ export type Exact
= P extends Builtin ? P function toTimestamp(dateStr: string): Timestamp { const date = new globalThis.Date(dateStr); - const seconds = date.getTime() / 1_000; + const seconds = Math.trunc(date.getTime() / 1_000); const nanos = (date.getTime() % 1_000) * 1_000_000; return { seconds, nanos }; } diff --git a/dashboard/apps/web/littlehorse-public-api/node_run.ts b/dashboard/apps/web/littlehorse-public-api/node_run.ts index 47d045e66..69fe060ec 100644 --- a/dashboard/apps/web/littlehorse-public-api/node_run.ts +++ b/dashboard/apps/web/littlehorse-public-api/node_run.ts @@ -1262,7 +1262,7 @@ export type Exact
= P extends Builtin ? P function toTimestamp(dateStr: string): Timestamp { const date = new globalThis.Date(dateStr); - const seconds = date.getTime() / 1_000; + const seconds = Math.trunc(date.getTime() / 1_000); const nanos = (date.getTime() % 1_000) * 1_000_000; return { seconds, nanos }; } diff --git a/dashboard/apps/web/littlehorse-public-api/object_id.ts b/dashboard/apps/web/littlehorse-public-api/object_id.ts index 724c0c389..a55508119 100644 --- a/dashboard/apps/web/littlehorse-public-api/object_id.ts +++ b/dashboard/apps/web/littlehorse-public-api/object_id.ts @@ -1241,7 +1241,7 @@ export type Exact
= P extends Builtin ? P function toTimestamp(dateStr: string): Timestamp { const date = new globalThis.Date(dateStr); - const seconds = date.getTime() / 1_000; + const seconds = Math.trunc(date.getTime() / 1_000); const nanos = (date.getTime() % 1_000) * 1_000_000; return { seconds, nanos }; } diff --git a/dashboard/apps/web/littlehorse-public-api/service.ts b/dashboard/apps/web/littlehorse-public-api/service.ts index 4e6979ae8..8dbff6c80 100644 --- a/dashboard/apps/web/littlehorse-public-api/service.ts +++ b/dashboard/apps/web/littlehorse-public-api/service.ts @@ -8638,7 +8638,7 @@ export type Exact
= P extends Builtin ? P function toTimestamp(dateStr: string): Timestamp { const date = new globalThis.Date(dateStr); - const seconds = date.getTime() / 1_000; + const seconds = Math.trunc(date.getTime() / 1_000); const nanos = (date.getTime() % 1_000) * 1_000_000; return { seconds, nanos }; } diff --git a/dashboard/apps/web/littlehorse-public-api/task_def.ts b/dashboard/apps/web/littlehorse-public-api/task_def.ts index 69feae403..c382810b8 100644 --- a/dashboard/apps/web/littlehorse-public-api/task_def.ts +++ b/dashboard/apps/web/littlehorse-public-api/task_def.ts @@ -117,7 +117,7 @@ export type Exact
= P extends Builtin ? P function toTimestamp(dateStr: string): Timestamp { const date = new globalThis.Date(dateStr); - const seconds = date.getTime() / 1_000; + const seconds = Math.trunc(date.getTime() / 1_000); const nanos = (date.getTime() % 1_000) * 1_000_000; return { seconds, nanos }; } diff --git a/dashboard/apps/web/littlehorse-public-api/task_run.ts b/dashboard/apps/web/littlehorse-public-api/task_run.ts index a8c7601c7..f428cff64 100644 --- a/dashboard/apps/web/littlehorse-public-api/task_run.ts +++ b/dashboard/apps/web/littlehorse-public-api/task_run.ts @@ -871,7 +871,7 @@ export type Exact
= P extends Builtin ? P function toTimestamp(dateStr: string): Timestamp { const date = new globalThis.Date(dateStr); - const seconds = date.getTime() / 1_000; + const seconds = Math.trunc(date.getTime() / 1_000); const nanos = (date.getTime() % 1_000) * 1_000_000; return { seconds, nanos }; } diff --git a/dashboard/apps/web/littlehorse-public-api/user_tasks.ts b/dashboard/apps/web/littlehorse-public-api/user_tasks.ts index 60346777d..8a50ecf2a 100644 --- a/dashboard/apps/web/littlehorse-public-api/user_tasks.ts +++ b/dashboard/apps/web/littlehorse-public-api/user_tasks.ts @@ -1666,7 +1666,7 @@ export type Exact
= P extends Builtin ? P function toTimestamp(dateStr: string): Timestamp { const date = new globalThis.Date(dateStr); - const seconds = date.getTime() / 1_000; + const seconds = Math.trunc(date.getTime() / 1_000); const nanos = (date.getTime() % 1_000) * 1_000_000; return { seconds, nanos }; } diff --git a/dashboard/apps/web/littlehorse-public-api/variable.ts b/dashboard/apps/web/littlehorse-public-api/variable.ts index cbc667a6f..f0807341d 100644 --- a/dashboard/apps/web/littlehorse-public-api/variable.ts +++ b/dashboard/apps/web/littlehorse-public-api/variable.ts @@ -327,7 +327,7 @@ export type Exact
= P extends Builtin ? P function toTimestamp(dateStr: string): Timestamp { const date = new globalThis.Date(dateStr); - const seconds = date.getTime() / 1_000; + const seconds = Math.trunc(date.getTime() / 1_000); const nanos = (date.getTime() % 1_000) * 1_000_000; return { seconds, nanos }; } diff --git a/dashboard/apps/web/littlehorse-public-api/wf_run.ts b/dashboard/apps/web/littlehorse-public-api/wf_run.ts index 9d76f0fff..4c65b7c52 100644 --- a/dashboard/apps/web/littlehorse-public-api/wf_run.ts +++ b/dashboard/apps/web/littlehorse-public-api/wf_run.ts @@ -1470,7 +1470,7 @@ export type Exact
= P extends Builtin ? P function toTimestamp(dateStr: string): Timestamp { const date = new globalThis.Date(dateStr); - const seconds = date.getTime() / 1_000; + const seconds = Math.trunc(date.getTime() / 1_000); const nanos = (date.getTime() % 1_000) * 1_000_000; return { seconds, nanos }; } diff --git a/dashboard/apps/web/littlehorse-public-api/wf_spec.ts b/dashboard/apps/web/littlehorse-public-api/wf_spec.ts index ee3d8ee6b..070417209 100644 --- a/dashboard/apps/web/littlehorse-public-api/wf_spec.ts +++ b/dashboard/apps/web/littlehorse-public-api/wf_spec.ts @@ -119,6 +119,12 @@ export interface WfSpec_ThreadSpecsEntry { export interface WfSpec_ParentWfSpecReference { /** Name of the Parent WfSpec */ wfSpecName: string; + /** + * FOR NOW: no validation of variables on parent. In the future we will pass + * wf_spec_major_version, but we should probably examine the rules for + * evolution in the future. + */ + wfSpecMajorVersion: number; } export interface WorkflowRetentionPolicy { @@ -660,7 +666,7 @@ export const WfSpec_ThreadSpecsEntry = { }; function createBaseWfSpec_ParentWfSpecReference(): WfSpec_ParentWfSpecReference { - return { wfSpecName: "" }; + return { wfSpecName: "", wfSpecMajorVersion: 0 }; } export const WfSpec_ParentWfSpecReference = { @@ -668,6 +674,9 @@ export const WfSpec_ParentWfSpecReference = { if (message.wfSpecName !== "") { writer.uint32(10).string(message.wfSpecName); } + if (message.wfSpecMajorVersion !== 0) { + writer.uint32(16).int32(message.wfSpecMajorVersion); + } return writer; }, @@ -685,6 +694,13 @@ export const WfSpec_ParentWfSpecReference = { message.wfSpecName = reader.string(); continue; + case 2: + if (tag !== 16) { + break; + } + + message.wfSpecMajorVersion = reader.int32(); + continue; } if ((tag & 7) === 4 || tag === 0) { break; @@ -695,7 +711,10 @@ export const WfSpec_ParentWfSpecReference = { }, fromJSON(object: any): WfSpec_ParentWfSpecReference { - return { wfSpecName: isSet(object.wfSpecName) ? globalThis.String(object.wfSpecName) : "" }; + return { + wfSpecName: isSet(object.wfSpecName) ? globalThis.String(object.wfSpecName) : "", + wfSpecMajorVersion: isSet(object.wfSpecMajorVersion) ? globalThis.Number(object.wfSpecMajorVersion) : 0, + }; }, toJSON(message: WfSpec_ParentWfSpecReference): unknown { @@ -703,6 +722,9 @@ export const WfSpec_ParentWfSpecReference = { if (message.wfSpecName !== "") { obj.wfSpecName = message.wfSpecName; } + if (message.wfSpecMajorVersion !== 0) { + obj.wfSpecMajorVersion = Math.round(message.wfSpecMajorVersion); + } return obj; }, @@ -712,6 +734,7 @@ export const WfSpec_ParentWfSpecReference = { fromPartial, I>>(object: I): WfSpec_ParentWfSpecReference { const message = createBaseWfSpec_ParentWfSpecReference(); message.wfSpecName = object.wfSpecName ?? ""; + message.wfSpecMajorVersion = object.wfSpecMajorVersion ?? 0; return message; }, }; @@ -3448,7 +3471,7 @@ export type Exact
= P extends Builtin ? P function toTimestamp(dateStr: string): Timestamp { const date = new globalThis.Date(dateStr); - const seconds = date.getTime() / 1_000; + const seconds = Math.trunc(date.getTime() / 1_000); const nanos = (date.getTime() % 1_000) * 1_000_000; return { seconds, nanos }; } diff --git a/schemas/variable.proto b/schemas/variable.proto index faead307f..c82e33cf9 100644 --- a/schemas/variable.proto +++ b/schemas/variable.proto @@ -4,7 +4,6 @@ package littlehorse; import "google/protobuf/timestamp.proto"; import "object_id.proto"; -import "wf_spec.proto"; option go_package = ".;model"; option java_multiple_files = true; @@ -29,5 +28,4 @@ message Variable { VariableValue value = 2; google.protobuf.Timestamp created_at = 3; WfSpecId wf_spec_id = 4; - ThreadVarDef thread_var_def = 5; } diff --git a/schemas/wf_spec.proto b/schemas/wf_spec.proto index d3f26b1d4..3fa7fe720 100644 --- a/schemas/wf_spec.proto +++ b/schemas/wf_spec.proto @@ -35,6 +35,7 @@ message WfSpec { message ParentWfSpecReference { // Name of the Parent WfSpec string wf_spec_name = 1; + int32 wf_spec_major_version = 2; // FOR NOW: no validation of variables on parent. In the future we will pass // wf_spec_major_version, but we should probably examine the rules for // evolution in the future. diff --git a/sdk-go/common/model/wf_spec.pb.go b/sdk-go/common/model/wf_spec.pb.go index 55a5bb56e..b77314905 100644 --- a/sdk-go/common/model/wf_spec.pb.go +++ b/sdk-go/common/model/wf_spec.pb.go @@ -1886,7 +1886,8 @@ type WfSpec_ParentWfSpecReference struct { unknownFields protoimpl.UnknownFields // Name of the Parent WfSpec - WfSpecName string `protobuf:"bytes,1,opt,name=wf_spec_name,json=wfSpecName,proto3" json:"wf_spec_name,omitempty"` + WfSpecName string `protobuf:"bytes,1,opt,name=wf_spec_name,json=wfSpecName,proto3" json:"wf_spec_name,omitempty"` + WfSpecMajorVersion int32 `protobuf:"varint,2,opt,name=wf_spec_major_version,json=wfSpecMajorVersion,proto3" json:"wf_spec_major_version,omitempty"` } func (x *WfSpec_ParentWfSpecReference) Reset() { @@ -1928,6 +1929,13 @@ func (x *WfSpec_ParentWfSpecReference) GetWfSpecName() string { return "" } +func (x *WfSpec_ParentWfSpecReference) GetWfSpecMajorVersion() int32 { + if x != nil { + return x.WfSpecMajorVersion + } + return 0 +} + type WaitForThreadsNode_ThreadToWaitFor struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1985,7 +1993,7 @@ var file_wf_spec_proto_rawDesc = []byte{ 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x77, 0x66, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, - 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa2, 0x06, 0x0a, 0x06, 0x57, 0x66, 0x53, 0x70, + 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd5, 0x06, 0x0a, 0x06, 0x57, 0x66, 0x53, 0x70, 0x65, 0x63, 0x12, 0x25, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x57, 0x66, 0x53, 0x70, 0x65, 0x63, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, @@ -2028,354 +2036,357 @@ var file_wf_spec_proto_rawDesc = []byte{ 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x15, 0x50, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6c, 0x0a, 0x15, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x57, 0x66, 0x53, 0x70, 0x65, 0x63, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x77, 0x66, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x66, 0x53, 0x70, - 0x65, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x72, 0x65, 0x74, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, - 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x77, 0x66, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x22, 0x6c, 0x0a, 0x17, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x41, 0x0a, 0x1c, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x77, 0x66, 0x5f, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, - 0x19, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x41, 0x66, 0x74, 0x65, 0x72, 0x57, 0x66, 0x54, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x77, 0x66, - 0x5f, 0x67, 0x63, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x64, 0x0a, 0x09, 0x4a, 0x73, - 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x38, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x6c, 0x69, 0x74, - 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x79, 0x70, 0x65, - 0x22, 0x4a, 0x0a, 0x15, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x12, 0x31, 0x0a, 0x07, 0x76, 0x61, 0x72, - 0x5f, 0x64, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x74, + 0x65, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x15, 0x77, 0x66, 0x5f, 0x73, 0x70, 0x65, + 0x63, 0x5f, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x77, 0x66, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x61, 0x6a, + 0x6f, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x72, 0x65, + 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0c, + 0x0a, 0x0a, 0x5f, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x11, 0x0a, 0x0f, + 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x77, 0x66, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x22, + 0x6c, 0x0a, 0x17, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x74, 0x65, 0x6e, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x41, 0x0a, 0x1c, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x77, 0x66, 0x5f, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x48, 0x00, 0x52, 0x19, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x41, 0x66, 0x74, 0x65, 0x72, + 0x57, 0x66, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0e, 0x0a, + 0x0c, 0x77, 0x66, 0x5f, 0x67, 0x63, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x64, 0x0a, + 0x09, 0x4a, 0x73, 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x38, 0x0a, 0x0a, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, + 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x54, + 0x79, 0x70, 0x65, 0x22, 0x4a, 0x0a, 0x15, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x61, 0x62, 0x6c, + 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x12, 0x31, 0x0a, 0x07, + 0x76, 0x61, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x52, 0x06, 0x76, 0x61, 0x72, 0x44, 0x65, 0x66, 0x22, + 0x82, 0x02, 0x0a, 0x0c, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x56, 0x61, 0x72, 0x44, 0x65, 0x66, + 0x12, 0x31, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x52, 0x06, 0x76, 0x61, 0x72, + 0x44, 0x65, 0x66, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x12, + 0x39, 0x0a, 0x0c, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, + 0x72, 0x73, 0x65, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0b, 0x6a, + 0x73, 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x0c, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x25, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x57, + 0x66, 0x52, 0x75, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x65, 0x76, 0x65, 0x6c, 0x22, 0xfe, 0x02, 0x0a, 0x0a, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, + 0x70, 0x65, 0x63, 0x12, 0x38, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, + 0x2e, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x3e, 0x0a, + 0x0d, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, + 0x73, 0x65, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x56, 0x61, 0x72, 0x44, 0x65, 0x66, 0x52, + 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x73, 0x12, 0x40, 0x0a, + 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, + 0x72, 0x73, 0x65, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x44, 0x65, 0x66, + 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x44, 0x65, 0x66, 0x73, 0x12, + 0x52, 0x0a, 0x10, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6c, 0x69, 0x74, 0x74, + 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x52, 0x65, + 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x00, 0x52, + 0x0f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x88, 0x01, 0x01, 0x1a, 0x4b, 0x0a, 0x0a, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, + 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x76, 0x0a, 0x15, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x52, + 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x49, + 0x0a, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, + 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x1d, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x73, 0x41, 0x66, 0x74, 0x65, 0x72, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x54, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x0a, 0x10, 0x74, 0x68, 0x72, + 0x65, 0x61, 0x64, 0x5f, 0x67, 0x63, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x8e, 0x01, + 0x0a, 0x0c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x44, 0x65, 0x66, 0x12, 0x52, + 0x0a, 0x15, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x5f, 0x64, 0x65, 0x66, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x49, 0x64, 0x52, 0x12, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, + 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x5f, 0x73, 0x70, + 0x65, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x68, + 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xe5, + 0x01, 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x4e, 0x6f, + 0x64, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x70, 0x65, + 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x68, + 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x49, 0x0a, 0x09, + 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2b, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x56, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x1a, 0x5d, 0x0a, 0x0e, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x35, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x44, 0x65, 0x66, 0x52, 0x06, 0x76, 0x61, 0x72, 0x44, 0x65, 0x66, 0x22, 0x82, 0x02, 0x0a, - 0x0c, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x56, 0x61, 0x72, 0x44, 0x65, 0x66, 0x12, 0x31, 0x0a, - 0x07, 0x76, 0x61, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x52, 0x06, 0x76, 0x61, 0x72, 0x44, 0x65, 0x66, - 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x0c, - 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, - 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0b, 0x6a, 0x73, 0x6f, 0x6e, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, - 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x57, 0x66, 0x52, 0x75, - 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x22, 0xfe, 0x02, 0x0a, 0x0a, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, - 0x12, 0x38, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x54, 0x68, - 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x0d, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, - 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x56, 0x61, 0x72, 0x44, 0x65, 0x66, 0x52, 0x0c, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x73, 0x12, 0x40, 0x0a, 0x0e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, - 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x44, 0x65, 0x66, 0x52, 0x0d, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x44, 0x65, 0x66, 0x73, 0x12, 0x52, 0x0a, 0x10, - 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, - 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x52, 0x65, 0x74, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, - 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x88, 0x01, 0x01, - 0x1a, 0x4b, 0x0a, 0x0a, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x4e, 0x6f, - 0x64, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x13, 0x0a, - 0x11, 0x5f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x22, 0x76, 0x0a, 0x15, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x52, 0x65, 0x74, 0x65, - 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x49, 0x0a, 0x20, 0x73, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x72, - 0x65, 0x61, 0x64, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x1d, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x41, 0x66, 0x74, 0x65, 0x72, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x54, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x0a, 0x10, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, - 0x5f, 0x67, 0x63, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x8e, 0x01, 0x0a, 0x0c, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x44, 0x65, 0x66, 0x12, 0x52, 0x0a, 0x15, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x65, - 0x66, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, - 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x49, 0x64, 0x52, 0x12, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x49, 0x64, 0x12, - 0x2a, 0x0a, 0x11, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x68, 0x61, 0x6e, 0x64, - 0x6c, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xe5, 0x01, 0x0a, 0x0f, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12, - 0x28, 0x0a, 0x10, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x68, 0x72, 0x65, 0x61, - 0x64, 0x53, 0x70, 0x65, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x49, 0x0a, 0x09, 0x76, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, - 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x1a, 0x5d, 0x0a, 0x0e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, - 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, - 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0xb4, 0x02, 0x0a, 0x18, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x70, 0x6c, 0x65, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x4e, 0x6f, 0x64, 0x65, - 0x12, 0x28, 0x0a, 0x10, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x68, 0x72, 0x65, - 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x09, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, - 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x3b, - 0x0a, 0x08, 0x69, 0x74, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x08, 0x69, 0x74, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x1a, 0x5d, 0x0a, 0x0e, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa4, 0x02, 0x0a, 0x11, 0x46, - 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x44, 0x65, 0x66, - 0x12, 0x2a, 0x0a, 0x11, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x5f, 0x73, 0x70, 0x65, 0x63, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x68, 0x61, 0x6e, - 0x64, 0x6c, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x10, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, - 0x69, 0x63, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x12, 0x5d, 0x0a, 0x13, 0x61, 0x6e, 0x79, - 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x6f, 0x66, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, - 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x48, 0x61, 0x6e, 0x64, - 0x6c, 0x65, 0x72, 0x44, 0x65, 0x66, 0x2e, 0x4c, 0x48, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x10, 0x61, 0x6e, 0x79, 0x46, 0x61, 0x69, 0x6c, 0x75, - 0x72, 0x65, 0x4f, 0x66, 0x54, 0x79, 0x70, 0x65, 0x22, 0x43, 0x0a, 0x0d, 0x4c, 0x48, 0x46, 0x61, - 0x69, 0x6c, 0x75, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x41, 0x49, - 0x4c, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, - 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x42, 0x12, 0x0a, - 0x10, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x61, 0x74, 0x63, - 0x68, 0x22, 0xd1, 0x02, 0x0a, 0x12, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x54, 0x68, 0x72, - 0x65, 0x61, 0x64, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x49, 0x0a, 0x07, 0x74, 0x68, 0x72, 0x65, - 0x61, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6c, 0x69, 0x74, 0x74, - 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x54, - 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x61, - 0x64, 0x54, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x52, 0x07, 0x74, 0x68, 0x72, 0x65, - 0x61, 0x64, 0x73, 0x12, 0x45, 0x0a, 0x0b, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6c, 0x69, - 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, - 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, - 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x68, 0x72, - 0x65, 0x61, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x06, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6c, 0x69, 0x74, - 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, - 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x06, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x5e, 0x0a, 0x0f, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x54, - 0x6f, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x12, 0x4b, 0x0a, 0x11, 0x74, 0x68, 0x72, 0x65, - 0x61, 0x64, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb4, 0x02, 0x0a, 0x18, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x4e, + 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x70, + 0x65, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, + 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, + 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x34, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x54, 0x68, 0x72, 0x65, + 0x61, 0x64, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x12, 0x3b, 0x0a, 0x08, 0x69, 0x74, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x52, 0x75, 0x6e, 0x4e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, - 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x22, 0xb1, 0x01, 0x0a, 0x11, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x52, 0x0a, 0x15, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x65, - 0x66, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, - 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x49, 0x64, 0x52, 0x12, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x49, 0x64, 0x12, - 0x48, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, - 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, - 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x10, 0x0a, 0x0e, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x59, 0x0a, 0x08, 0x45, - 0x78, 0x69, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x75, - 0x72, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, - 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, - 0x72, 0x65, 0x44, 0x65, 0x66, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, - 0x44, 0x65, 0x66, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, - 0x72, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x22, 0x95, 0x01, 0x0a, 0x0a, 0x46, 0x61, 0x69, 0x6c, 0x75, - 0x72, 0x65, 0x44, 0x65, 0x66, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x61, 0x69, - 0x6c, 0x75, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, - 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x88, - 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0xf8, - 0x05, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x0e, 0x6f, 0x75, 0x74, 0x67, 0x6f, - 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x64, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x45, 0x64, - 0x67, 0x65, 0x52, 0x0d, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x45, 0x64, 0x67, 0x65, - 0x73, 0x12, 0x49, 0x0a, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x68, 0x61, 0x6e, - 0x64, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, 0x69, - 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, - 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x44, 0x65, 0x66, 0x52, 0x0f, 0x66, 0x61, 0x69, - 0x6c, 0x75, 0x72, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x73, 0x12, 0x3d, 0x0a, 0x0a, - 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, - 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x65, - 0x78, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x74, 0x74, - 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x69, 0x74, 0x4e, 0x6f, 0x64, 0x65, - 0x48, 0x00, 0x52, 0x04, 0x65, 0x78, 0x69, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, - 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, - 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x47, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x69, 0x74, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x1a, 0x5d, + 0x0a, 0x0e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, + 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa4, 0x02, + 0x0a, 0x11, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, + 0x44, 0x65, 0x66, 0x12, 0x2a, 0x0a, 0x11, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x5f, 0x73, + 0x70, 0x65, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x2b, 0x0a, 0x10, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x5f, 0x66, 0x61, 0x69, 0x6c, + 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x70, 0x65, + 0x63, 0x69, 0x66, 0x69, 0x63, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x12, 0x5d, 0x0a, 0x13, + 0x61, 0x6e, 0x79, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x6f, 0x66, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x6c, 0x69, 0x74, 0x74, + 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x48, + 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x44, 0x65, 0x66, 0x2e, 0x4c, 0x48, 0x46, 0x61, 0x69, 0x6c, + 0x75, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x10, 0x61, 0x6e, 0x79, 0x46, 0x61, + 0x69, 0x6c, 0x75, 0x72, 0x65, 0x4f, 0x66, 0x54, 0x79, 0x70, 0x65, 0x22, 0x43, 0x0a, 0x0d, 0x4c, + 0x48, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, + 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x52, 0x52, + 0x4f, 0x52, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, + 0x42, 0x12, 0x0a, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x63, + 0x61, 0x74, 0x63, 0x68, 0x22, 0xd1, 0x02, 0x0a, 0x12, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, + 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x49, 0x0a, 0x07, 0x74, + 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6c, + 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, + 0x6f, 0x72, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x54, 0x68, + 0x72, 0x65, 0x61, 0x64, 0x54, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x52, 0x07, 0x74, + 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, 0x45, 0x0a, 0x0b, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, + 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, + 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0a, + 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, + 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, + 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x57, 0x61, 0x69, 0x74, + 0x46, 0x6f, 0x72, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x5e, 0x0a, 0x0f, 0x54, 0x68, 0x72, 0x65, + 0x61, 0x64, 0x54, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x12, 0x4b, 0x0a, 0x11, 0x74, + 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, + 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, + 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x52, + 0x75, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x74, 0x68, 0x72, + 0x65, 0x61, 0x64, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x22, 0xb1, 0x01, 0x0a, 0x11, 0x45, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x52, + 0x0a, 0x15, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x5f, 0x64, 0x65, 0x66, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, - 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x41, - 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, - 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x4e, 0x6f, - 0x64, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x68, 0x72, 0x65, 0x61, - 0x64, 0x12, 0x4b, 0x0a, 0x10, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x74, 0x68, - 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, - 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, - 0x72, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0e, - 0x77, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, 0x28, - 0x0a, 0x03, 0x6e, 0x6f, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x69, - 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x4e, 0x6f, 0x70, 0x4e, 0x6f, 0x64, - 0x65, 0x48, 0x00, 0x52, 0x03, 0x6e, 0x6f, 0x70, 0x12, 0x2e, 0x0a, 0x05, 0x73, 0x6c, 0x65, 0x65, - 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, - 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x4e, 0x6f, 0x64, 0x65, 0x48, - 0x00, 0x52, 0x05, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x12, 0x38, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x69, - 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x54, 0x61, - 0x73, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x61, - 0x73, 0x6b, 0x12, 0x5d, 0x0a, 0x16, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, - 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x54, 0x68, - 0x72, 0x65, 0x61, 0x64, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x14, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, - 0x73, 0x42, 0x06, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0xaa, 0x03, 0x0a, 0x0c, 0x55, 0x73, - 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2b, 0x0a, 0x12, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x64, 0x65, 0x66, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, - 0x44, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, + 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x49, 0x64, 0x52, 0x12, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, + 0x49, 0x64, 0x12, 0x48, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, - 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x88, 0x01, 0x01, 0x12, 0x3d, 0x0a, 0x07, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x74, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x10, 0x0a, 0x0e, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x59, + 0x0a, 0x08, 0x45, 0x78, 0x69, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x0b, 0x66, 0x61, + 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x46, 0x61, + 0x69, 0x6c, 0x75, 0x72, 0x65, 0x44, 0x65, 0x66, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, + 0x75, 0x72, 0x65, 0x44, 0x65, 0x66, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x66, 0x61, + 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x22, 0x95, 0x01, 0x0a, 0x0a, 0x46, 0x61, + 0x69, 0x6c, 0x75, 0x72, 0x65, 0x44, 0x65, 0x66, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x61, 0x69, 0x6c, + 0x75, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, + 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, + 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x22, 0xf8, 0x05, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x0e, 0x6f, 0x75, + 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x64, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, + 0x2e, 0x45, 0x64, 0x67, 0x65, 0x52, 0x0d, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x45, + 0x64, 0x67, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, + 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x46, 0x61, 0x69, + 0x6c, 0x75, 0x72, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x44, 0x65, 0x66, 0x52, 0x0f, + 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x73, 0x12, + 0x3d, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, + 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, + 0x48, 0x00, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2b, + 0x0a, 0x04, 0x65, 0x78, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, + 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x69, 0x74, 0x4e, + 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x04, 0x65, 0x78, 0x69, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x74, + 0x61, 0x73, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x74, 0x74, + 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4e, 0x6f, 0x64, 0x65, + 0x48, 0x00, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x47, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x45, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, + 0x48, 0x00, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x41, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, + 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, + 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x68, 0x72, 0x65, 0x61, + 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x68, + 0x72, 0x65, 0x61, 0x64, 0x12, 0x4b, 0x0a, 0x10, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, + 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x57, 0x61, 0x69, + 0x74, 0x46, 0x6f, 0x72, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x48, + 0x00, 0x52, 0x0e, 0x77, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, + 0x73, 0x12, 0x28, 0x0a, 0x03, 0x6e, 0x6f, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x4e, 0x6f, 0x70, + 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x03, 0x6e, 0x6f, 0x70, 0x12, 0x2e, 0x0a, 0x05, 0x73, + 0x6c, 0x65, 0x65, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x74, + 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x4e, 0x6f, + 0x64, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x12, 0x38, 0x0a, 0x09, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x54, 0x61, 0x73, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, + 0x72, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x5d, 0x0a, 0x16, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6d, + 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, + 0x72, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, + 0x65, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x14, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x54, 0x68, 0x72, + 0x65, 0x61, 0x64, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0xaa, 0x03, 0x0a, + 0x0c, 0x55, 0x73, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2b, 0x0a, + 0x12, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x64, 0x65, 0x66, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x54, + 0x61, 0x73, 0x6b, 0x44, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x88, 0x01, 0x01, 0x12, + 0x3d, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x48, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x36, + 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x55, 0x54, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x07, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x36, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, + 0x61, 0x73, 0x6b, 0x5f, 0x64, 0x65, 0x66, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x05, 0x48, 0x02, 0x52, 0x12, 0x75, 0x73, 0x65, 0x72, 0x54, 0x61, 0x73, + 0x6b, 0x44, 0x65, 0x66, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x3a, + 0x0a, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x01, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x07, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, - 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x55, 0x54, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x36, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x73, 0x6b, - 0x5f, 0x64, 0x65, 0x66, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x05, 0x48, 0x02, 0x52, 0x12, 0x75, 0x73, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, - 0x66, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x05, 0x6e, - 0x6f, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x03, + 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, + 0x61, 0x73, 0x6b, 0x5f, 0x64, 0x65, 0x66, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x08, 0x0a, 0x06, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x22, 0xb4, 0x01, 0x0a, 0x0d, 0x45, 0x64, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x0a, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x17, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x43, 0x6f, + 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x04, 0x6c, 0x65, 0x66, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, + 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x04, 0x6c, 0x65, 0x66, 0x74, 0x12, 0x35, 0x0a, 0x05, 0x72, 0x69, 0x67, + 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, + 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x22, 0xc7, 0x01, 0x0a, 0x04, 0x45, 0x64, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x69, 0x6e, + 0x6b, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x3d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, + 0x2e, 0x45, 0x64, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x4c, + 0x0a, 0x12, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x75, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x69, 0x74, + 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x0c, 0x0a, 0x0a, + 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x09, 0x0a, 0x07, 0x4e, 0x6f, + 0x70, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0xde, 0x01, 0x0a, 0x09, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x4e, + 0x6f, 0x64, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x72, 0x61, 0x77, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, + 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x61, 0x77, + 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x3f, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, + 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x73, 0x6f, 0x5f, + 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x03, 0x52, 0x05, 0x6e, - 0x6f, 0x74, 0x65, 0x73, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x73, 0x6b, - 0x5f, 0x64, 0x65, 0x66, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0x0a, 0x06, - 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x22, 0xb4, 0x01, 0x0a, 0x0d, 0x45, 0x64, 0x67, 0x65, 0x43, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6c, - 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x12, 0x33, 0x0a, 0x04, 0x6c, 0x65, 0x66, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x04, 0x6c, 0x65, 0x66, 0x74, 0x12, 0x35, 0x0a, 0x05, 0x72, 0x69, 0x67, 0x68, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, - 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, - 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0xc7, 0x01, - 0x0a, 0x04, 0x45, 0x64, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x6b, 0x5f, 0x6e, - 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x73, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x09, - 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x45, 0x64, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x4c, 0x0a, 0x12, 0x76, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, - 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x75, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x09, 0x0a, 0x07, 0x4e, 0x6f, 0x70, 0x4e, 0x6f, - 0x64, 0x65, 0x22, 0xde, 0x01, 0x0a, 0x09, 0x53, 0x6c, 0x65, 0x65, 0x70, 0x4e, 0x6f, 0x64, 0x65, - 0x12, 0x42, 0x0a, 0x0b, 0x72, 0x61, 0x77, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, - 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, - 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x61, 0x77, 0x53, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x3f, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, - 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, - 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x73, 0x6f, 0x5f, 0x64, 0x61, 0x74, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, - 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, - 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x69, 0x73, 0x6f, 0x44, - 0x61, 0x74, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x5f, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x22, 0xc7, 0x02, 0x0a, 0x16, 0x57, 0x66, 0x53, 0x70, 0x65, 0x63, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, - 0x0a, 0x11, 0x6e, 0x65, 0x77, 0x5f, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6e, 0x65, 0x77, 0x4d, 0x61, - 0x6a, 0x6f, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x65, - 0x77, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x73, 0x0a, - 0x16, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x6d, 0x69, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, - 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x57, 0x66, 0x53, 0x70, - 0x65, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x69, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x74, 0x68, - 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x1a, 0x69, 0x0a, 0x19, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, + 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x69, + 0x73, 0x6f, 0x44, 0x61, 0x74, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x5f, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xc7, 0x02, 0x0a, 0x16, 0x57, 0x66, 0x53, 0x70, 0x65, + 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x6e, 0x65, 0x77, 0x5f, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6e, 0x65, + 0x77, 0x4d, 0x61, 0x6a, 0x6f, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, + 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x73, 0x0a, 0x16, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, + 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x3d, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x57, + 0x66, 0x53, 0x70, 0x65, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, + 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x14, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x69, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x69, 0x0a, 0x19, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, + 0x70, 0x65, 0x63, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, + 0x65, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x69, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0x84, 0x02, 0x0a, 0x13, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, 0x4d, + 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x14, 0x6e, 0x65, 0x77, 0x5f, + 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6e, 0x65, 0x77, 0x54, 0x68, 0x72, 0x65, 0x61, + 0x64, 0x53, 0x70, 0x65, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5d, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, + 0x2e, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x69, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x4d, 0x69, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x5d, 0x0a, 0x13, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x54, - 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x84, 0x02, - 0x0a, 0x13, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x69, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x14, 0x6e, 0x65, 0x77, 0x5f, 0x74, 0x68, 0x72, - 0x65, 0x61, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x11, 0x6e, 0x65, 0x77, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, - 0x65, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5d, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x34, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x54, 0x68, - 0x72, 0x65, 0x61, 0x64, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x4d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x5d, 0x0a, 0x13, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x69, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x4e, 0x6f, 0x64, 0x65, - 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x33, 0x0a, 0x0d, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x69, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x6f, 0x64, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, - 0x77, 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x2a, 0x4e, 0x0a, 0x18, 0x57, 0x66, 0x52, - 0x75, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, - 0x56, 0x41, 0x52, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, - 0x5f, 0x56, 0x41, 0x52, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x49, 0x4e, 0x48, 0x45, 0x52, 0x49, - 0x54, 0x45, 0x44, 0x5f, 0x56, 0x41, 0x52, 0x10, 0x02, 0x42, 0x47, 0x0a, 0x1f, 0x69, 0x6f, 0x2e, - 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x73, 0x64, 0x6b, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x07, - 0x2e, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0xaa, 0x02, 0x18, 0x4c, 0x69, 0x74, 0x74, 0x6c, 0x65, - 0x48, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x4e, + 0x6f, 0x64, 0x65, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x33, 0x0a, 0x0d, 0x4e, 0x6f, 0x64, 0x65, 0x4d, + 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x6e, 0x65, 0x77, 0x5f, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x6e, 0x65, 0x77, 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x2a, 0x4e, 0x0a, 0x18, + 0x57, 0x66, 0x52, 0x75, 0x6e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x55, 0x42, 0x4c, + 0x49, 0x43, 0x5f, 0x56, 0x41, 0x52, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x52, 0x49, 0x56, + 0x41, 0x54, 0x45, 0x5f, 0x56, 0x41, 0x52, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x49, 0x4e, 0x48, + 0x45, 0x52, 0x49, 0x54, 0x45, 0x44, 0x5f, 0x56, 0x41, 0x52, 0x10, 0x02, 0x42, 0x47, 0x0a, 0x1f, + 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x68, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x73, + 0x64, 0x6b, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x07, 0x2e, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0xaa, 0x02, 0x18, 0x4c, 0x69, 0x74, + 0x74, 0x6c, 0x65, 0x48, 0x6f, 0x72, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/sdk-java/src/main/java/io/littlehorse/sdk/common/proto/WfSpec.java b/sdk-java/src/main/java/io/littlehorse/sdk/common/proto/WfSpec.java index 2214d4e33..31abfbf05 100644 --- a/sdk-java/src/main/java/io/littlehorse/sdk/common/proto/WfSpec.java +++ b/sdk-java/src/main/java/io/littlehorse/sdk/common/proto/WfSpec.java @@ -76,6 +76,18 @@ public interface ParentWfSpecReferenceOrBuilder extends */ com.google.protobuf.ByteString getWfSpecNameBytes(); + + /** + *
+ * FOR NOW: no validation of variables on parent. In the future we will pass + * wf_spec_major_version, but we should probably examine the rules for + * evolution in the future. + *+ * + *
int32 wf_spec_major_version = 2;
+ * @return The wfSpecMajorVersion.
+ */
+ int getWfSpecMajorVersion();
}
/**
* @@ -169,6 +181,23 @@ public java.lang.String getWfSpecName() { } } + public static final int WF_SPEC_MAJOR_VERSION_FIELD_NUMBER = 2; + private int wfSpecMajorVersion_ = 0; + /** + *+ * FOR NOW: no validation of variables on parent. In the future we will pass + * wf_spec_major_version, but we should probably examine the rules for + * evolution in the future. + *+ * + *int32 wf_spec_major_version = 2;
+ * @return The wfSpecMajorVersion. + */ + @java.lang.Override + public int getWfSpecMajorVersion() { + return wfSpecMajorVersion_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -186,6 +215,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(wfSpecName_)) { com.google.protobuf.GeneratedMessageV3.writeString(output, 1, wfSpecName_); } + if (wfSpecMajorVersion_ != 0) { + output.writeInt32(2, wfSpecMajorVersion_); + } getUnknownFields().writeTo(output); } @@ -198,6 +230,10 @@ public int getSerializedSize() { if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(wfSpecName_)) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, wfSpecName_); } + if (wfSpecMajorVersion_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, wfSpecMajorVersion_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -215,6 +251,8 @@ public boolean equals(final java.lang.Object obj) { if (!getWfSpecName() .equals(other.getWfSpecName())) return false; + if (getWfSpecMajorVersion() + != other.getWfSpecMajorVersion()) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -228,6 +266,8 @@ public int hashCode() { hash = (19 * hash) + getDescriptor().hashCode(); hash = (37 * hash) + WF_SPEC_NAME_FIELD_NUMBER; hash = (53 * hash) + getWfSpecName().hashCode(); + hash = (37 * hash) + WF_SPEC_MAJOR_VERSION_FIELD_NUMBER; + hash = (53 * hash) + getWfSpecMajorVersion(); hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -369,6 +409,7 @@ public Builder clear() { super.clear(); bitField0_ = 0; wfSpecName_ = ""; + wfSpecMajorVersion_ = 0; return this; } @@ -405,6 +446,9 @@ private void buildPartial0(io.littlehorse.sdk.common.proto.WfSpec.ParentWfSpecRe if (((from_bitField0_ & 0x00000001) != 0)) { result.wfSpecName_ = wfSpecName_; } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.wfSpecMajorVersion_ = wfSpecMajorVersion_; + } } @java.lang.Override @@ -456,6 +500,9 @@ public Builder mergeFrom(io.littlehorse.sdk.common.proto.WfSpec.ParentWfSpecRefe bitField0_ |= 0x00000001; onChanged(); } + if (other.getWfSpecMajorVersion() != 0) { + setWfSpecMajorVersion(other.getWfSpecMajorVersion()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -487,6 +534,11 @@ public Builder mergeFrom( bitField0_ |= 0x00000001; break; } // case 10 + case 16: { + wfSpecMajorVersion_ = input.readInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { done = true; // was an endgroup tag @@ -595,6 +647,56 @@ public Builder setWfSpecNameBytes( onChanged(); return this; } + + private int wfSpecMajorVersion_ ; + /** + *+ * FOR NOW: no validation of variables on parent. In the future we will pass + * wf_spec_major_version, but we should probably examine the rules for + * evolution in the future. + *+ * + *int32 wf_spec_major_version = 2;
+ * @return The wfSpecMajorVersion. + */ + @java.lang.Override + public int getWfSpecMajorVersion() { + return wfSpecMajorVersion_; + } + /** + *+ * FOR NOW: no validation of variables on parent. In the future we will pass + * wf_spec_major_version, but we should probably examine the rules for + * evolution in the future. + *+ * + *int32 wf_spec_major_version = 2;
+ * @param value The wfSpecMajorVersion to set. + * @return This builder for chaining. + */ + public Builder setWfSpecMajorVersion(int value) { + + wfSpecMajorVersion_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *+ * FOR NOW: no validation of variables on parent. In the future we will pass + * wf_spec_major_version, but we should probably examine the rules for + * evolution in the future. + *+ * + *int32 wf_spec_major_version = 2;
+ * @return This builder for chaining. + */ + public Builder clearWfSpecMajorVersion() { + bitField0_ = (bitField0_ & ~0x00000002); + wfSpecMajorVersion_ = 0; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { diff --git a/sdk-java/src/main/java/io/littlehorse/sdk/common/proto/WfSpecOuterClass.java b/sdk-java/src/main/java/io/littlehorse/sdk/common/proto/WfSpecOuterClass.java index 35fe53df1..7d6b3b004 100644 --- a/sdk-java/src/main/java/io/littlehorse/sdk/common/proto/WfSpecOuterClass.java +++ b/sdk-java/src/main/java/io/littlehorse/sdk/common/proto/WfSpecOuterClass.java @@ -191,7 +191,7 @@ public static void registerAllExtensions( "\n\rwf_spec.proto\022\013littlehorse\032\037google/pro" + "tobuf/timestamp.proto\032\022common_enums.prot" + "o\032\023common_wfspec.proto\032\017object_id.proto\"" + - "\225\005\n\006WfSpec\022!\n\002id\030\001 \001(\0132\025.littlehorse.WfS" + + "\264\005\n\006WfSpec\022!\n\002id\030\001 \001(\0132\025.littlehorse.WfS" + "pecId\022.\n\ncreated_at\030\002 \001(\0132\032.google.proto" + "buf.Timestamp\0223\n\020frozen_variables\030\003 \003(\0132" + "\031.littlehorse.ThreadVarDef\022+\n\006status\030\004 \001" + @@ -205,121 +205,122 @@ public static void registerAllExtensions( "littlehorse.WfSpec.ParentWfSpecReference" + "H\002\210\001\001\032K\n\020ThreadSpecsEntry\022\013\n\003key\030\001 \001(\t\022&" + "\n\005value\030\002 \001(\0132\027.littlehorse.ThreadSpec:\002" + - "8\001\032-\n\025ParentWfSpecReference\022\024\n\014wf_spec_n" + - "ame\030\001 \001(\tB\023\n\021_retention_policyB\014\n\n_migra" + - "tionB\021\n\017_parent_wf_spec\"Q\n\027WorkflowReten" + - "tionPolicy\022&\n\034seconds_after_wf_terminati" + - "on\030\001 \001(\003H\000B\016\n\014wf_gc_policy\"N\n\tJsonIndex\022" + - "\022\n\nfield_path\030\001 \001(\t\022-\n\nfield_type\030\002 \001(\0162" + - "\031.littlehorse.VariableType\"B\n\025Searchable" + - "VariableDef\022)\n\007var_def\030\001 \001(\0132\030.littlehor" + - "se.VariableDef\"\312\001\n\014ThreadVarDef\022)\n\007var_d" + - "ef\030\001 \001(\0132\030.littlehorse.VariableDef\022\020\n\010re" + - "quired\030\002 \001(\010\022\022\n\nsearchable\030\003 \001(\010\022,\n\014json" + - "_indexes\030\004 \003(\0132\026.littlehorse.JsonIndex\022;" + - "\n\014access_level\030\005 \001(\0162%.littlehorse.WfRun" + - "VariableAccessLevel\"\275\002\n\nThreadSpec\0221\n\005no" + - "des\030\001 \003(\0132\".littlehorse.ThreadSpec.Nodes" + - "Entry\0220\n\rvariable_defs\030\002 \003(\0132\031.littlehor" + - "se.ThreadVarDef\0221\n\016interrupt_defs\030\003 \003(\0132" + - "\031.littlehorse.InterruptDef\022A\n\020retention_" + - "policy\030\004 \001(\0132\".littlehorse.ThreadRetenti" + - "onPolicyH\000\210\001\001\032?\n\nNodesEntry\022\013\n\003key\030\001 \001(\t" + - "\022 \n\005value\030\002 \001(\0132\021.littlehorse.Node:\0028\001B\023" + - "\n\021_retention_policy\"W\n\025ThreadRetentionPo" + - "licy\022*\n seconds_after_thread_termination" + - "\030\001 \001(\003H\000B\022\n\020thread_gc_policy\"i\n\014Interrup" + - "tDef\022>\n\025external_event_def_id\030\001 \001(\0132\037.li" + - "ttlehorse.ExternalEventDefId\022\031\n\021handler_" + - "spec_name\030\002 \001(\t\"\276\001\n\017StartThreadNode\022\030\n\020t" + - "hread_spec_name\030\001 \001(\t\022>\n\tvariables\030\002 \003(\013" + - "2+.littlehorse.StartThreadNode.Variables" + - "Entry\032Q\n\016VariablesEntry\022\013\n\003key\030\001 \001(\t\022.\n\005" + - "value\030\002 \001(\0132\037.littlehorse.VariableAssign" + - "ment:\0028\001\"\203\002\n\030StartMultipleThreadsNode\022\030\n" + - "\020thread_spec_name\030\001 \001(\t\022G\n\tvariables\030\002 \003" + - "(\01324.littlehorse.StartMultipleThreadsNod" + - "e.VariablesEntry\0221\n\010iterable\030\003 \001(\0132\037.lit" + - "tlehorse.VariableAssignment\032Q\n\016Variables" + - "Entry\022\013\n\003key\030\001 \001(\t\022.\n\005value\030\002 \001(\0132\037.litt" + - "lehorse.VariableAssignment:\0028\001\"\360\001\n\021Failu" + - "reHandlerDef\022\031\n\021handler_spec_name\030\002 \001(\t\022" + - "\032\n\020specific_failure\030\001 \001(\tH\000\022K\n\023any_failu" + - "re_of_type\030\003 \001(\0162,.littlehorse.FailureHa" + - "ndlerDef.LHFailureTypeH\000\"C\n\rLHFailureTyp" + - "e\022\026\n\022FAILURE_TYPE_ERROR\020\000\022\032\n\026FAILURE_TYP" + - "E_EXCEPTION\020\001B\022\n\020failure_to_catch\"\243\002\n\022Wa" + - "itForThreadsNode\022@\n\007threads\030\001 \003(\0132/.litt" + - "lehorse.WaitForThreadsNode.ThreadToWaitF" + - "or\0229\n\013thread_list\030\003 \001(\0132\037.littlehorse.Va" + - "riableAssignmentH\000\210\001\001\0221\n\006policy\030\002 \001(\0162!." + - "littlehorse.WaitForThreadsPolicy\032M\n\017Thre" + - "adToWaitFor\022:\n\021thread_run_number\030\001 \001(\0132\037" + - ".littlehorse.VariableAssignmentB\016\n\014_thre" + - "ad_list\"\215\001\n\021ExternalEventNode\022>\n\025externa" + - "l_event_def_id\030\001 \001(\0132\037.littlehorse.Exter" + - "nalEventDefId\0228\n\017timeout_seconds\030\002 \001(\0132\037" + - ".littlehorse.VariableAssignment\"\020\n\016Entry" + - "pointNode\"M\n\010ExitNode\0221\n\013failure_def\030\001 \001" + - "(\0132\027.littlehorse.FailureDefH\000\210\001\001B\016\n\014_fai" + - "lure_def\"v\n\nFailureDef\022\024\n\014failure_name\030\001" + - " \001(\t\022\017\n\007message\030\002 \001(\t\0225\n\007content\030\003 \001(\0132\037" + - ".littlehorse.VariableAssignmentH\000\210\001\001B\n\n\010" + - "_content\"\350\004\n\004Node\022)\n\016outgoing_edges\030\001 \003(" + - "\0132\021.littlehorse.Edge\0228\n\020failure_handlers" + - "\030\004 \003(\0132\036.littlehorse.FailureHandlerDef\0221" + - "\n\nentrypoint\030\005 \001(\0132\033.littlehorse.Entrypo" + - "intNodeH\000\022%\n\004exit\030\006 \001(\0132\025.littlehorse.Ex" + - "itNodeH\000\022%\n\004task\030\007 \001(\0132\025.littlehorse.Tas" + - "kNodeH\000\0228\n\016external_event\030\010 \001(\0132\036.little" + - "horse.ExternalEventNodeH\000\0224\n\014start_threa" + - "d\030\t \001(\0132\034.littlehorse.StartThreadNodeH\000\022" + - ";\n\020wait_for_threads\030\n \001(\0132\037.littlehorse." + - "WaitForThreadsNodeH\000\022#\n\003nop\030\013 \001(\0132\024.litt" + - "lehorse.NopNodeH\000\022\'\n\005sleep\030\014 \001(\0132\026.littl" + - "ehorse.SleepNodeH\000\022.\n\tuser_task\030\r \001(\0132\031." + - "littlehorse.UserTaskNodeH\000\022G\n\026start_mult" + - "iple_threads\030\017 \001(\0132%.littlehorse.StartMu" + - "ltipleThreadsNodeH\000B\006\n\004node\"\342\002\n\014UserTask" + - "Node\022\032\n\022user_task_def_name\030\001 \001(\t\0228\n\nuser" + - "_group\030\002 \001(\0132\037.littlehorse.VariableAssig" + - "nmentH\000\210\001\001\0225\n\007user_id\030\003 \001(\0132\037.littlehors" + - "e.VariableAssignmentH\001\210\001\001\022-\n\007actions\030\004 \003" + - "(\0132\034.littlehorse.UTActionTrigger\022\"\n\025user" + - "_task_def_version\030\005 \001(\005H\002\210\001\001\0223\n\005notes\030\006 " + - "\001(\0132\037.littlehorse.VariableAssignmentH\003\210\001" + - "\001B\r\n\013_user_groupB\n\n\010_user_idB\030\n\026_user_ta" + - "sk_def_versionB\010\n\006_notes\"\233\001\n\rEdgeConditi" + - "on\022+\n\ncomparator\030\001 \001(\0162\027.littlehorse.Com" + - "parator\022-\n\004left\030\002 \001(\0132\037.littlehorse.Vari" + - "ableAssignment\022.\n\005right\030\003 \001(\0132\037.littleho" + - "rse.VariableAssignment\"\233\001\n\004Edge\022\026\n\016sink_" + - "node_name\030\001 \001(\t\0222\n\tcondition\030\002 \001(\0132\032.lit" + - "tlehorse.EdgeConditionH\000\210\001\001\0229\n\022variable_" + - "mutations\030\003 \003(\0132\035.littlehorse.VariableMu" + - "tationB\014\n\n_condition\"\t\n\007NopNode\"\276\001\n\tSlee" + - "pNode\0226\n\013raw_seconds\030\001 \001(\0132\037.littlehorse" + - ".VariableAssignmentH\000\0224\n\ttimestamp\030\002 \001(\013" + - "2\037.littlehorse.VariableAssignmentH\000\0223\n\010i" + - "so_date\030\003 \001(\0132\037.littlehorse.VariableAssi" + - "gnmentH\000B\016\n\014sleep_length\"\207\002\n\026WfSpecVersi" + - "onMigration\022\031\n\021new_major_version\030\001 \001(\005\022\024" + - "\n\014new_revision\030\002 \001(\005\022]\n\026thread_spec_migr" + - "ations\030\003 \003(\0132=.littlehorse.WfSpecVersion" + - "Migration.ThreadSpecMigrationsEntry\032]\n\031T" + - "hreadSpecMigrationsEntry\022\013\n\003key\030\001 \001(\t\022/\n" + - "\005value\030\002 \001(\0132 .littlehorse.ThreadSpecMig" + - "ration:\0028\001\"\325\001\n\023ThreadSpecMigration\022\034\n\024ne" + - "w_thread_spec_name\030\001 \001(\t\022M\n\017node_migrati" + - "ons\030\002 \003(\01324.littlehorse.ThreadSpecMigrat" + - "ion.NodeMigrationsEntry\032Q\n\023NodeMigration" + - "sEntry\022\013\n\003key\030\001 \001(\t\022)\n\005value\030\002 \001(\0132\032.lit" + - "tlehorse.NodeMigration:\0028\001\"&\n\rNodeMigrat" + - "ion\022\025\n\rnew_node_name\030\001 \001(\t*N\n\030WfRunVaria" + - "bleAccessLevel\022\016\n\nPUBLIC_VAR\020\000\022\017\n\013PRIVAT" + - "E_VAR\020\001\022\021\n\rINHERITED_VAR\020\002BG\n\037io.littleh" + - "orse.sdk.common.protoP\001Z\007.;model\252\002\030Littl" + - "eHorse.Common.Protob\006proto3" + "8\001\032L\n\025ParentWfSpecReference\022\024\n\014wf_spec_n" + + "ame\030\001 \001(\t\022\035\n\025wf_spec_major_version\030\002 \001(\005" + + "B\023\n\021_retention_policyB\014\n\n_migrationB\021\n\017_" + + "parent_wf_spec\"Q\n\027WorkflowRetentionPolic" + + "y\022&\n\034seconds_after_wf_termination\030\001 \001(\003H" + + "\000B\016\n\014wf_gc_policy\"N\n\tJsonIndex\022\022\n\nfield_" + + "path\030\001 \001(\t\022-\n\nfield_type\030\002 \001(\0162\031.littleh" + + "orse.VariableType\"B\n\025SearchableVariableD" + + "ef\022)\n\007var_def\030\001 \001(\0132\030.littlehorse.Variab" + + "leDef\"\312\001\n\014ThreadVarDef\022)\n\007var_def\030\001 \001(\0132" + + "\030.littlehorse.VariableDef\022\020\n\010required\030\002 " + + "\001(\010\022\022\n\nsearchable\030\003 \001(\010\022,\n\014json_indexes\030" + + "\004 \003(\0132\026.littlehorse.JsonIndex\022;\n\014access_" + + "level\030\005 \001(\0162%.littlehorse.WfRunVariableA" + + "ccessLevel\"\275\002\n\nThreadSpec\0221\n\005nodes\030\001 \003(\013" + + "2\".littlehorse.ThreadSpec.NodesEntry\0220\n\r" + + "variable_defs\030\002 \003(\0132\031.littlehorse.Thread" + + "VarDef\0221\n\016interrupt_defs\030\003 \003(\0132\031.littleh" + + "orse.InterruptDef\022A\n\020retention_policy\030\004 " + + "\001(\0132\".littlehorse.ThreadRetentionPolicyH" + + "\000\210\001\001\032?\n\nNodesEntry\022\013\n\003key\030\001 \001(\t\022 \n\005value" + + "\030\002 \001(\0132\021.littlehorse.Node:\0028\001B\023\n\021_retent" + + "ion_policy\"W\n\025ThreadRetentionPolicy\022*\n s" + + "econds_after_thread_termination\030\001 \001(\003H\000B" + + "\022\n\020thread_gc_policy\"i\n\014InterruptDef\022>\n\025e" + + "xternal_event_def_id\030\001 \001(\0132\037.littlehorse" + + ".ExternalEventDefId\022\031\n\021handler_spec_name" + + "\030\002 \001(\t\"\276\001\n\017StartThreadNode\022\030\n\020thread_spe" + + "c_name\030\001 \001(\t\022>\n\tvariables\030\002 \003(\0132+.little" + + "horse.StartThreadNode.VariablesEntry\032Q\n\016" + + "VariablesEntry\022\013\n\003key\030\001 \001(\t\022.\n\005value\030\002 \001" + + "(\0132\037.littlehorse.VariableAssignment:\0028\001\"" + + "\203\002\n\030StartMultipleThreadsNode\022\030\n\020thread_s" + + "pec_name\030\001 \001(\t\022G\n\tvariables\030\002 \003(\01324.litt" + + "lehorse.StartMultipleThreadsNode.Variabl" + + "esEntry\0221\n\010iterable\030\003 \001(\0132\037.littlehorse." + + "VariableAssignment\032Q\n\016VariablesEntry\022\013\n\003" + + "key\030\001 \001(\t\022.\n\005value\030\002 \001(\0132\037.littlehorse.V" + + "ariableAssignment:\0028\001\"\360\001\n\021FailureHandler" + + "Def\022\031\n\021handler_spec_name\030\002 \001(\t\022\032\n\020specif" + + "ic_failure\030\001 \001(\tH\000\022K\n\023any_failure_of_typ" + + "e\030\003 \001(\0162,.littlehorse.FailureHandlerDef." + + "LHFailureTypeH\000\"C\n\rLHFailureType\022\026\n\022FAIL" + + "URE_TYPE_ERROR\020\000\022\032\n\026FAILURE_TYPE_EXCEPTI" + + "ON\020\001B\022\n\020failure_to_catch\"\243\002\n\022WaitForThre" + + "adsNode\022@\n\007threads\030\001 \003(\0132/.littlehorse.W" + + "aitForThreadsNode.ThreadToWaitFor\0229\n\013thr" + + "ead_list\030\003 \001(\0132\037.littlehorse.VariableAss" + + "ignmentH\000\210\001\001\0221\n\006policy\030\002 \001(\0162!.littlehor" + + "se.WaitForThreadsPolicy\032M\n\017ThreadToWaitF" + + "or\022:\n\021thread_run_number\030\001 \001(\0132\037.littleho" + + "rse.VariableAssignmentB\016\n\014_thread_list\"\215" + + "\001\n\021ExternalEventNode\022>\n\025external_event_d" + + "ef_id\030\001 \001(\0132\037.littlehorse.ExternalEventD" + + "efId\0228\n\017timeout_seconds\030\002 \001(\0132\037.littleho" + + "rse.VariableAssignment\"\020\n\016EntrypointNode" + + "\"M\n\010ExitNode\0221\n\013failure_def\030\001 \001(\0132\027.litt" + + "lehorse.FailureDefH\000\210\001\001B\016\n\014_failure_def\"" + + "v\n\nFailureDef\022\024\n\014failure_name\030\001 \001(\t\022\017\n\007m" + + "essage\030\002 \001(\t\0225\n\007content\030\003 \001(\0132\037.littleho" + + "rse.VariableAssignmentH\000\210\001\001B\n\n\010_content\"" + + "\350\004\n\004Node\022)\n\016outgoing_edges\030\001 \003(\0132\021.littl" + + "ehorse.Edge\0228\n\020failure_handlers\030\004 \003(\0132\036." + + "littlehorse.FailureHandlerDef\0221\n\nentrypo" + + "int\030\005 \001(\0132\033.littlehorse.EntrypointNodeH\000" + + "\022%\n\004exit\030\006 \001(\0132\025.littlehorse.ExitNodeH\000\022" + + "%\n\004task\030\007 \001(\0132\025.littlehorse.TaskNodeH\000\0228" + + "\n\016external_event\030\010 \001(\0132\036.littlehorse.Ext" + + "ernalEventNodeH\000\0224\n\014start_thread\030\t \001(\0132\034" + + ".littlehorse.StartThreadNodeH\000\022;\n\020wait_f" + + "or_threads\030\n \001(\0132\037.littlehorse.WaitForTh" + + "readsNodeH\000\022#\n\003nop\030\013 \001(\0132\024.littlehorse.N" + + "opNodeH\000\022\'\n\005sleep\030\014 \001(\0132\026.littlehorse.Sl" + + "eepNodeH\000\022.\n\tuser_task\030\r \001(\0132\031.littlehor" + + "se.UserTaskNodeH\000\022G\n\026start_multiple_thre" + + "ads\030\017 \001(\0132%.littlehorse.StartMultipleThr" + + "eadsNodeH\000B\006\n\004node\"\342\002\n\014UserTaskNode\022\032\n\022u" + + "ser_task_def_name\030\001 \001(\t\0228\n\nuser_group\030\002 " + + "\001(\0132\037.littlehorse.VariableAssignmentH\000\210\001" + + "\001\0225\n\007user_id\030\003 \001(\0132\037.littlehorse.Variabl" + + "eAssignmentH\001\210\001\001\022-\n\007actions\030\004 \003(\0132\034.litt" + + "lehorse.UTActionTrigger\022\"\n\025user_task_def" + + "_version\030\005 \001(\005H\002\210\001\001\0223\n\005notes\030\006 \001(\0132\037.lit" + + "tlehorse.VariableAssignmentH\003\210\001\001B\r\n\013_use" + + "r_groupB\n\n\010_user_idB\030\n\026_user_task_def_ve" + + "rsionB\010\n\006_notes\"\233\001\n\rEdgeCondition\022+\n\ncom" + + "parator\030\001 \001(\0162\027.littlehorse.Comparator\022-" + + "\n\004left\030\002 \001(\0132\037.littlehorse.VariableAssig" + + "nment\022.\n\005right\030\003 \001(\0132\037.littlehorse.Varia" + + "bleAssignment\"\233\001\n\004Edge\022\026\n\016sink_node_name" + + "\030\001 \001(\t\0222\n\tcondition\030\002 \001(\0132\032.littlehorse." + + "EdgeConditionH\000\210\001\001\0229\n\022variable_mutations" + + "\030\003 \003(\0132\035.littlehorse.VariableMutationB\014\n" + + "\n_condition\"\t\n\007NopNode\"\276\001\n\tSleepNode\0226\n\013" + + "raw_seconds\030\001 \001(\0132\037.littlehorse.Variable" + + "AssignmentH\000\0224\n\ttimestamp\030\002 \001(\0132\037.little" + + "horse.VariableAssignmentH\000\0223\n\010iso_date\030\003" + + " \001(\0132\037.littlehorse.VariableAssignmentH\000B" + + "\016\n\014sleep_length\"\207\002\n\026WfSpecVersionMigrati" + + "on\022\031\n\021new_major_version\030\001 \001(\005\022\024\n\014new_rev" + + "ision\030\002 \001(\005\022]\n\026thread_spec_migrations\030\003 " + + "\003(\0132=.littlehorse.WfSpecVersionMigration" + + ".ThreadSpecMigrationsEntry\032]\n\031ThreadSpec" + + "MigrationsEntry\022\013\n\003key\030\001 \001(\t\022/\n\005value\030\002 " + + "\001(\0132 .littlehorse.ThreadSpecMigration:\0028" + + "\001\"\325\001\n\023ThreadSpecMigration\022\034\n\024new_thread_" + + "spec_name\030\001 \001(\t\022M\n\017node_migrations\030\002 \003(\013" + + "24.littlehorse.ThreadSpecMigration.NodeM" + + "igrationsEntry\032Q\n\023NodeMigrationsEntry\022\013\n" + + "\003key\030\001 \001(\t\022)\n\005value\030\002 \001(\0132\032.littlehorse." + + "NodeMigration:\0028\001\"&\n\rNodeMigration\022\025\n\rne" + + "w_node_name\030\001 \001(\t*N\n\030WfRunVariableAccess" + + "Level\022\016\n\nPUBLIC_VAR\020\000\022\017\n\013PRIVATE_VAR\020\001\022\021" + + "\n\rINHERITED_VAR\020\002BG\n\037io.littlehorse.sdk." + + "common.protoP\001Z\007.;model\252\002\030LittleHorse.Co" + + "mmon.Protob\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -346,7 +347,7 @@ public static void registerAllExtensions( internal_static_littlehorse_WfSpec_ParentWfSpecReference_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_littlehorse_WfSpec_ParentWfSpecReference_descriptor, - new java.lang.String[] { "WfSpecName", }); + new java.lang.String[] { "WfSpecName", "WfSpecMajorVersion", }); internal_static_littlehorse_WorkflowRetentionPolicy_descriptor = getDescriptor().getMessageTypes().get(1); internal_static_littlehorse_WorkflowRetentionPolicy_fieldAccessorTable = new diff --git a/sdk-python/littlehorse/model/wf_spec_pb2.py b/sdk-python/littlehorse/model/wf_spec_pb2.py index fd426cb35..ee86772dd 100644 --- a/sdk-python/littlehorse/model/wf_spec_pb2.py +++ b/sdk-python/littlehorse/model/wf_spec_pb2.py @@ -17,7 +17,7 @@ import littlehorse.model.object_id_pb2 as object__id__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rwf_spec.proto\x12\x0blittlehorse\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x12\x63ommon_enums.proto\x1a\x13\x63ommon_wfspec.proto\x1a\x0fobject_id.proto\"\x95\x05\n\x06WfSpec\x12!\n\x02id\x18\x01 \x01(\x0b\x32\x15.littlehorse.WfSpecId\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x33\n\x10\x66rozen_variables\x18\x03 \x03(\x0b\x32\x19.littlehorse.ThreadVarDef\x12+\n\x06status\x18\x04 \x01(\x0e\x32\x1b.littlehorse.MetadataStatus\x12:\n\x0cthread_specs\x18\x05 \x03(\x0b\x32$.littlehorse.WfSpec.ThreadSpecsEntry\x12\x1e\n\x16\x65ntrypoint_thread_name\x18\x06 \x01(\t\x12\x43\n\x10retention_policy\x18\x07 \x01(\x0b\x32$.littlehorse.WorkflowRetentionPolicyH\x00\x88\x01\x01\x12;\n\tmigration\x18\x08 \x01(\x0b\x32#.littlehorse.WfSpecVersionMigrationH\x01\x88\x01\x01\x12\x46\n\x0eparent_wf_spec\x18\t \x01(\x0b\x32).littlehorse.WfSpec.ParentWfSpecReferenceH\x02\x88\x01\x01\x1aK\n\x10ThreadSpecsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.littlehorse.ThreadSpec:\x02\x38\x01\x1a-\n\x15ParentWfSpecReference\x12\x14\n\x0cwf_spec_name\x18\x01 \x01(\tB\x13\n\x11_retention_policyB\x0c\n\n_migrationB\x11\n\x0f_parent_wf_spec\"Q\n\x17WorkflowRetentionPolicy\x12&\n\x1cseconds_after_wf_termination\x18\x01 \x01(\x03H\x00\x42\x0e\n\x0cwf_gc_policy\"N\n\tJsonIndex\x12\x12\n\nfield_path\x18\x01 \x01(\t\x12-\n\nfield_type\x18\x02 \x01(\x0e\x32\x19.littlehorse.VariableType\"B\n\x15SearchableVariableDef\x12)\n\x07var_def\x18\x01 \x01(\x0b\x32\x18.littlehorse.VariableDef\"\xca\x01\n\x0cThreadVarDef\x12)\n\x07var_def\x18\x01 \x01(\x0b\x32\x18.littlehorse.VariableDef\x12\x10\n\x08required\x18\x02 \x01(\x08\x12\x12\n\nsearchable\x18\x03 \x01(\x08\x12,\n\x0cjson_indexes\x18\x04 \x03(\x0b\x32\x16.littlehorse.JsonIndex\x12;\n\x0c\x61\x63\x63\x65ss_level\x18\x05 \x01(\x0e\x32%.littlehorse.WfRunVariableAccessLevel\"\xbd\x02\n\nThreadSpec\x12\x31\n\x05nodes\x18\x01 \x03(\x0b\x32\".littlehorse.ThreadSpec.NodesEntry\x12\x30\n\rvariable_defs\x18\x02 \x03(\x0b\x32\x19.littlehorse.ThreadVarDef\x12\x31\n\x0einterrupt_defs\x18\x03 \x03(\x0b\x32\x19.littlehorse.InterruptDef\x12\x41\n\x10retention_policy\x18\x04 \x01(\x0b\x32\".littlehorse.ThreadRetentionPolicyH\x00\x88\x01\x01\x1a?\n\nNodesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.littlehorse.Node:\x02\x38\x01\x42\x13\n\x11_retention_policy\"W\n\x15ThreadRetentionPolicy\x12*\n seconds_after_thread_termination\x18\x01 \x01(\x03H\x00\x42\x12\n\x10thread_gc_policy\"i\n\x0cInterruptDef\x12>\n\x15\x65xternal_event_def_id\x18\x01 \x01(\x0b\x32\x1f.littlehorse.ExternalEventDefId\x12\x19\n\x11handler_spec_name\x18\x02 \x01(\t\"\xbe\x01\n\x0fStartThreadNode\x12\x18\n\x10thread_spec_name\x18\x01 \x01(\t\x12>\n\tvariables\x18\x02 \x03(\x0b\x32+.littlehorse.StartThreadNode.VariablesEntry\x1aQ\n\x0eVariablesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.littlehorse.VariableAssignment:\x02\x38\x01\"\x83\x02\n\x18StartMultipleThreadsNode\x12\x18\n\x10thread_spec_name\x18\x01 \x01(\t\x12G\n\tvariables\x18\x02 \x03(\x0b\x32\x34.littlehorse.StartMultipleThreadsNode.VariablesEntry\x12\x31\n\x08iterable\x18\x03 \x01(\x0b\x32\x1f.littlehorse.VariableAssignment\x1aQ\n\x0eVariablesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.littlehorse.VariableAssignment:\x02\x38\x01\"\xf0\x01\n\x11\x46\x61ilureHandlerDef\x12\x19\n\x11handler_spec_name\x18\x02 \x01(\t\x12\x1a\n\x10specific_failure\x18\x01 \x01(\tH\x00\x12K\n\x13\x61ny_failure_of_type\x18\x03 \x01(\x0e\x32,.littlehorse.FailureHandlerDef.LHFailureTypeH\x00\"C\n\rLHFailureType\x12\x16\n\x12\x46\x41ILURE_TYPE_ERROR\x10\x00\x12\x1a\n\x16\x46\x41ILURE_TYPE_EXCEPTION\x10\x01\x42\x12\n\x10\x66\x61ilure_to_catch\"\xa3\x02\n\x12WaitForThreadsNode\x12@\n\x07threads\x18\x01 \x03(\x0b\x32/.littlehorse.WaitForThreadsNode.ThreadToWaitFor\x12\x39\n\x0bthread_list\x18\x03 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentH\x00\x88\x01\x01\x12\x31\n\x06policy\x18\x02 \x01(\x0e\x32!.littlehorse.WaitForThreadsPolicy\x1aM\n\x0fThreadToWaitFor\x12:\n\x11thread_run_number\x18\x01 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentB\x0e\n\x0c_thread_list\"\x8d\x01\n\x11\x45xternalEventNode\x12>\n\x15\x65xternal_event_def_id\x18\x01 \x01(\x0b\x32\x1f.littlehorse.ExternalEventDefId\x12\x38\n\x0ftimeout_seconds\x18\x02 \x01(\x0b\x32\x1f.littlehorse.VariableAssignment\"\x10\n\x0e\x45ntrypointNode\"M\n\x08\x45xitNode\x12\x31\n\x0b\x66\x61ilure_def\x18\x01 \x01(\x0b\x32\x17.littlehorse.FailureDefH\x00\x88\x01\x01\x42\x0e\n\x0c_failure_def\"v\n\nFailureDef\x12\x14\n\x0c\x66\x61ilure_name\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x35\n\x07\x63ontent\x18\x03 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentH\x00\x88\x01\x01\x42\n\n\x08_content\"\xe8\x04\n\x04Node\x12)\n\x0eoutgoing_edges\x18\x01 \x03(\x0b\x32\x11.littlehorse.Edge\x12\x38\n\x10\x66\x61ilure_handlers\x18\x04 \x03(\x0b\x32\x1e.littlehorse.FailureHandlerDef\x12\x31\n\nentrypoint\x18\x05 \x01(\x0b\x32\x1b.littlehorse.EntrypointNodeH\x00\x12%\n\x04\x65xit\x18\x06 \x01(\x0b\x32\x15.littlehorse.ExitNodeH\x00\x12%\n\x04task\x18\x07 \x01(\x0b\x32\x15.littlehorse.TaskNodeH\x00\x12\x38\n\x0e\x65xternal_event\x18\x08 \x01(\x0b\x32\x1e.littlehorse.ExternalEventNodeH\x00\x12\x34\n\x0cstart_thread\x18\t \x01(\x0b\x32\x1c.littlehorse.StartThreadNodeH\x00\x12;\n\x10wait_for_threads\x18\n \x01(\x0b\x32\x1f.littlehorse.WaitForThreadsNodeH\x00\x12#\n\x03nop\x18\x0b \x01(\x0b\x32\x14.littlehorse.NopNodeH\x00\x12\'\n\x05sleep\x18\x0c \x01(\x0b\x32\x16.littlehorse.SleepNodeH\x00\x12.\n\tuser_task\x18\r \x01(\x0b\x32\x19.littlehorse.UserTaskNodeH\x00\x12G\n\x16start_multiple_threads\x18\x0f \x01(\x0b\x32%.littlehorse.StartMultipleThreadsNodeH\x00\x42\x06\n\x04node\"\xe2\x02\n\x0cUserTaskNode\x12\x1a\n\x12user_task_def_name\x18\x01 \x01(\t\x12\x38\n\nuser_group\x18\x02 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentH\x00\x88\x01\x01\x12\x35\n\x07user_id\x18\x03 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentH\x01\x88\x01\x01\x12-\n\x07\x61\x63tions\x18\x04 \x03(\x0b\x32\x1c.littlehorse.UTActionTrigger\x12\"\n\x15user_task_def_version\x18\x05 \x01(\x05H\x02\x88\x01\x01\x12\x33\n\x05notes\x18\x06 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentH\x03\x88\x01\x01\x42\r\n\x0b_user_groupB\n\n\x08_user_idB\x18\n\x16_user_task_def_versionB\x08\n\x06_notes\"\x9b\x01\n\rEdgeCondition\x12+\n\ncomparator\x18\x01 \x01(\x0e\x32\x17.littlehorse.Comparator\x12-\n\x04left\x18\x02 \x01(\x0b\x32\x1f.littlehorse.VariableAssignment\x12.\n\x05right\x18\x03 \x01(\x0b\x32\x1f.littlehorse.VariableAssignment\"\x9b\x01\n\x04\x45\x64ge\x12\x16\n\x0esink_node_name\x18\x01 \x01(\t\x12\x32\n\tcondition\x18\x02 \x01(\x0b\x32\x1a.littlehorse.EdgeConditionH\x00\x88\x01\x01\x12\x39\n\x12variable_mutations\x18\x03 \x03(\x0b\x32\x1d.littlehorse.VariableMutationB\x0c\n\n_condition\"\t\n\x07NopNode\"\xbe\x01\n\tSleepNode\x12\x36\n\x0braw_seconds\x18\x01 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentH\x00\x12\x34\n\ttimestamp\x18\x02 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentH\x00\x12\x33\n\x08iso_date\x18\x03 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentH\x00\x42\x0e\n\x0csleep_length\"\x87\x02\n\x16WfSpecVersionMigration\x12\x19\n\x11new_major_version\x18\x01 \x01(\x05\x12\x14\n\x0cnew_revision\x18\x02 \x01(\x05\x12]\n\x16thread_spec_migrations\x18\x03 \x03(\x0b\x32=.littlehorse.WfSpecVersionMigration.ThreadSpecMigrationsEntry\x1a]\n\x19ThreadSpecMigrationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12/\n\x05value\x18\x02 \x01(\x0b\x32 .littlehorse.ThreadSpecMigration:\x02\x38\x01\"\xd5\x01\n\x13ThreadSpecMigration\x12\x1c\n\x14new_thread_spec_name\x18\x01 \x01(\t\x12M\n\x0fnode_migrations\x18\x02 \x03(\x0b\x32\x34.littlehorse.ThreadSpecMigration.NodeMigrationsEntry\x1aQ\n\x13NodeMigrationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.littlehorse.NodeMigration:\x02\x38\x01\"&\n\rNodeMigration\x12\x15\n\rnew_node_name\x18\x01 \x01(\t*N\n\x18WfRunVariableAccessLevel\x12\x0e\n\nPUBLIC_VAR\x10\x00\x12\x0f\n\x0bPRIVATE_VAR\x10\x01\x12\x11\n\rINHERITED_VAR\x10\x02\x42G\n\x1fio.littlehorse.sdk.common.protoP\x01Z\x07.;model\xaa\x02\x18LittleHorse.Common.Protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rwf_spec.proto\x12\x0blittlehorse\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x12\x63ommon_enums.proto\x1a\x13\x63ommon_wfspec.proto\x1a\x0fobject_id.proto\"\xb4\x05\n\x06WfSpec\x12!\n\x02id\x18\x01 \x01(\x0b\x32\x15.littlehorse.WfSpecId\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x33\n\x10\x66rozen_variables\x18\x03 \x03(\x0b\x32\x19.littlehorse.ThreadVarDef\x12+\n\x06status\x18\x04 \x01(\x0e\x32\x1b.littlehorse.MetadataStatus\x12:\n\x0cthread_specs\x18\x05 \x03(\x0b\x32$.littlehorse.WfSpec.ThreadSpecsEntry\x12\x1e\n\x16\x65ntrypoint_thread_name\x18\x06 \x01(\t\x12\x43\n\x10retention_policy\x18\x07 \x01(\x0b\x32$.littlehorse.WorkflowRetentionPolicyH\x00\x88\x01\x01\x12;\n\tmigration\x18\x08 \x01(\x0b\x32#.littlehorse.WfSpecVersionMigrationH\x01\x88\x01\x01\x12\x46\n\x0eparent_wf_spec\x18\t \x01(\x0b\x32).littlehorse.WfSpec.ParentWfSpecReferenceH\x02\x88\x01\x01\x1aK\n\x10ThreadSpecsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.littlehorse.ThreadSpec:\x02\x38\x01\x1aL\n\x15ParentWfSpecReference\x12\x14\n\x0cwf_spec_name\x18\x01 \x01(\t\x12\x1d\n\x15wf_spec_major_version\x18\x02 \x01(\x05\x42\x13\n\x11_retention_policyB\x0c\n\n_migrationB\x11\n\x0f_parent_wf_spec\"Q\n\x17WorkflowRetentionPolicy\x12&\n\x1cseconds_after_wf_termination\x18\x01 \x01(\x03H\x00\x42\x0e\n\x0cwf_gc_policy\"N\n\tJsonIndex\x12\x12\n\nfield_path\x18\x01 \x01(\t\x12-\n\nfield_type\x18\x02 \x01(\x0e\x32\x19.littlehorse.VariableType\"B\n\x15SearchableVariableDef\x12)\n\x07var_def\x18\x01 \x01(\x0b\x32\x18.littlehorse.VariableDef\"\xca\x01\n\x0cThreadVarDef\x12)\n\x07var_def\x18\x01 \x01(\x0b\x32\x18.littlehorse.VariableDef\x12\x10\n\x08required\x18\x02 \x01(\x08\x12\x12\n\nsearchable\x18\x03 \x01(\x08\x12,\n\x0cjson_indexes\x18\x04 \x03(\x0b\x32\x16.littlehorse.JsonIndex\x12;\n\x0c\x61\x63\x63\x65ss_level\x18\x05 \x01(\x0e\x32%.littlehorse.WfRunVariableAccessLevel\"\xbd\x02\n\nThreadSpec\x12\x31\n\x05nodes\x18\x01 \x03(\x0b\x32\".littlehorse.ThreadSpec.NodesEntry\x12\x30\n\rvariable_defs\x18\x02 \x03(\x0b\x32\x19.littlehorse.ThreadVarDef\x12\x31\n\x0einterrupt_defs\x18\x03 \x03(\x0b\x32\x19.littlehorse.InterruptDef\x12\x41\n\x10retention_policy\x18\x04 \x01(\x0b\x32\".littlehorse.ThreadRetentionPolicyH\x00\x88\x01\x01\x1a?\n\nNodesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.littlehorse.Node:\x02\x38\x01\x42\x13\n\x11_retention_policy\"W\n\x15ThreadRetentionPolicy\x12*\n seconds_after_thread_termination\x18\x01 \x01(\x03H\x00\x42\x12\n\x10thread_gc_policy\"i\n\x0cInterruptDef\x12>\n\x15\x65xternal_event_def_id\x18\x01 \x01(\x0b\x32\x1f.littlehorse.ExternalEventDefId\x12\x19\n\x11handler_spec_name\x18\x02 \x01(\t\"\xbe\x01\n\x0fStartThreadNode\x12\x18\n\x10thread_spec_name\x18\x01 \x01(\t\x12>\n\tvariables\x18\x02 \x03(\x0b\x32+.littlehorse.StartThreadNode.VariablesEntry\x1aQ\n\x0eVariablesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.littlehorse.VariableAssignment:\x02\x38\x01\"\x83\x02\n\x18StartMultipleThreadsNode\x12\x18\n\x10thread_spec_name\x18\x01 \x01(\t\x12G\n\tvariables\x18\x02 \x03(\x0b\x32\x34.littlehorse.StartMultipleThreadsNode.VariablesEntry\x12\x31\n\x08iterable\x18\x03 \x01(\x0b\x32\x1f.littlehorse.VariableAssignment\x1aQ\n\x0eVariablesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.littlehorse.VariableAssignment:\x02\x38\x01\"\xf0\x01\n\x11\x46\x61ilureHandlerDef\x12\x19\n\x11handler_spec_name\x18\x02 \x01(\t\x12\x1a\n\x10specific_failure\x18\x01 \x01(\tH\x00\x12K\n\x13\x61ny_failure_of_type\x18\x03 \x01(\x0e\x32,.littlehorse.FailureHandlerDef.LHFailureTypeH\x00\"C\n\rLHFailureType\x12\x16\n\x12\x46\x41ILURE_TYPE_ERROR\x10\x00\x12\x1a\n\x16\x46\x41ILURE_TYPE_EXCEPTION\x10\x01\x42\x12\n\x10\x66\x61ilure_to_catch\"\xa3\x02\n\x12WaitForThreadsNode\x12@\n\x07threads\x18\x01 \x03(\x0b\x32/.littlehorse.WaitForThreadsNode.ThreadToWaitFor\x12\x39\n\x0bthread_list\x18\x03 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentH\x00\x88\x01\x01\x12\x31\n\x06policy\x18\x02 \x01(\x0e\x32!.littlehorse.WaitForThreadsPolicy\x1aM\n\x0fThreadToWaitFor\x12:\n\x11thread_run_number\x18\x01 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentB\x0e\n\x0c_thread_list\"\x8d\x01\n\x11\x45xternalEventNode\x12>\n\x15\x65xternal_event_def_id\x18\x01 \x01(\x0b\x32\x1f.littlehorse.ExternalEventDefId\x12\x38\n\x0ftimeout_seconds\x18\x02 \x01(\x0b\x32\x1f.littlehorse.VariableAssignment\"\x10\n\x0e\x45ntrypointNode\"M\n\x08\x45xitNode\x12\x31\n\x0b\x66\x61ilure_def\x18\x01 \x01(\x0b\x32\x17.littlehorse.FailureDefH\x00\x88\x01\x01\x42\x0e\n\x0c_failure_def\"v\n\nFailureDef\x12\x14\n\x0c\x66\x61ilure_name\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x35\n\x07\x63ontent\x18\x03 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentH\x00\x88\x01\x01\x42\n\n\x08_content\"\xe8\x04\n\x04Node\x12)\n\x0eoutgoing_edges\x18\x01 \x03(\x0b\x32\x11.littlehorse.Edge\x12\x38\n\x10\x66\x61ilure_handlers\x18\x04 \x03(\x0b\x32\x1e.littlehorse.FailureHandlerDef\x12\x31\n\nentrypoint\x18\x05 \x01(\x0b\x32\x1b.littlehorse.EntrypointNodeH\x00\x12%\n\x04\x65xit\x18\x06 \x01(\x0b\x32\x15.littlehorse.ExitNodeH\x00\x12%\n\x04task\x18\x07 \x01(\x0b\x32\x15.littlehorse.TaskNodeH\x00\x12\x38\n\x0e\x65xternal_event\x18\x08 \x01(\x0b\x32\x1e.littlehorse.ExternalEventNodeH\x00\x12\x34\n\x0cstart_thread\x18\t \x01(\x0b\x32\x1c.littlehorse.StartThreadNodeH\x00\x12;\n\x10wait_for_threads\x18\n \x01(\x0b\x32\x1f.littlehorse.WaitForThreadsNodeH\x00\x12#\n\x03nop\x18\x0b \x01(\x0b\x32\x14.littlehorse.NopNodeH\x00\x12\'\n\x05sleep\x18\x0c \x01(\x0b\x32\x16.littlehorse.SleepNodeH\x00\x12.\n\tuser_task\x18\r \x01(\x0b\x32\x19.littlehorse.UserTaskNodeH\x00\x12G\n\x16start_multiple_threads\x18\x0f \x01(\x0b\x32%.littlehorse.StartMultipleThreadsNodeH\x00\x42\x06\n\x04node\"\xe2\x02\n\x0cUserTaskNode\x12\x1a\n\x12user_task_def_name\x18\x01 \x01(\t\x12\x38\n\nuser_group\x18\x02 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentH\x00\x88\x01\x01\x12\x35\n\x07user_id\x18\x03 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentH\x01\x88\x01\x01\x12-\n\x07\x61\x63tions\x18\x04 \x03(\x0b\x32\x1c.littlehorse.UTActionTrigger\x12\"\n\x15user_task_def_version\x18\x05 \x01(\x05H\x02\x88\x01\x01\x12\x33\n\x05notes\x18\x06 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentH\x03\x88\x01\x01\x42\r\n\x0b_user_groupB\n\n\x08_user_idB\x18\n\x16_user_task_def_versionB\x08\n\x06_notes\"\x9b\x01\n\rEdgeCondition\x12+\n\ncomparator\x18\x01 \x01(\x0e\x32\x17.littlehorse.Comparator\x12-\n\x04left\x18\x02 \x01(\x0b\x32\x1f.littlehorse.VariableAssignment\x12.\n\x05right\x18\x03 \x01(\x0b\x32\x1f.littlehorse.VariableAssignment\"\x9b\x01\n\x04\x45\x64ge\x12\x16\n\x0esink_node_name\x18\x01 \x01(\t\x12\x32\n\tcondition\x18\x02 \x01(\x0b\x32\x1a.littlehorse.EdgeConditionH\x00\x88\x01\x01\x12\x39\n\x12variable_mutations\x18\x03 \x03(\x0b\x32\x1d.littlehorse.VariableMutationB\x0c\n\n_condition\"\t\n\x07NopNode\"\xbe\x01\n\tSleepNode\x12\x36\n\x0braw_seconds\x18\x01 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentH\x00\x12\x34\n\ttimestamp\x18\x02 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentH\x00\x12\x33\n\x08iso_date\x18\x03 \x01(\x0b\x32\x1f.littlehorse.VariableAssignmentH\x00\x42\x0e\n\x0csleep_length\"\x87\x02\n\x16WfSpecVersionMigration\x12\x19\n\x11new_major_version\x18\x01 \x01(\x05\x12\x14\n\x0cnew_revision\x18\x02 \x01(\x05\x12]\n\x16thread_spec_migrations\x18\x03 \x03(\x0b\x32=.littlehorse.WfSpecVersionMigration.ThreadSpecMigrationsEntry\x1a]\n\x19ThreadSpecMigrationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12/\n\x05value\x18\x02 \x01(\x0b\x32 .littlehorse.ThreadSpecMigration:\x02\x38\x01\"\xd5\x01\n\x13ThreadSpecMigration\x12\x1c\n\x14new_thread_spec_name\x18\x01 \x01(\t\x12M\n\x0fnode_migrations\x18\x02 \x03(\x0b\x32\x34.littlehorse.ThreadSpecMigration.NodeMigrationsEntry\x1aQ\n\x13NodeMigrationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.littlehorse.NodeMigration:\x02\x38\x01\"&\n\rNodeMigration\x12\x15\n\rnew_node_name\x18\x01 \x01(\t*N\n\x18WfRunVariableAccessLevel\x12\x0e\n\nPUBLIC_VAR\x10\x00\x12\x0f\n\x0bPRIVATE_VAR\x10\x01\x12\x11\n\rINHERITED_VAR\x10\x02\x42G\n\x1fio.littlehorse.sdk.common.protoP\x01Z\x07.;model\xaa\x02\x18LittleHorse.Common.Protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -38,74 +38,74 @@ _WFSPECVERSIONMIGRATION_THREADSPECMIGRATIONSENTRY._serialized_options = b'8\001' _THREADSPECMIGRATION_NODEMIGRATIONSENTRY._options = None _THREADSPECMIGRATION_NODEMIGRATIONSENTRY._serialized_options = b'8\001' - _globals['_WFRUNVARIABLEACCESSLEVEL']._serialized_start=5108 - _globals['_WFRUNVARIABLEACCESSLEVEL']._serialized_end=5186 + _globals['_WFRUNVARIABLEACCESSLEVEL']._serialized_start=5139 + _globals['_WFRUNVARIABLEACCESSLEVEL']._serialized_end=5217 _globals['_WFSPEC']._serialized_start=122 - _globals['_WFSPEC']._serialized_end=783 + _globals['_WFSPEC']._serialized_end=814 _globals['_WFSPEC_THREADSPECSENTRY']._serialized_start=607 _globals['_WFSPEC_THREADSPECSENTRY']._serialized_end=682 _globals['_WFSPEC_PARENTWFSPECREFERENCE']._serialized_start=684 - _globals['_WFSPEC_PARENTWFSPECREFERENCE']._serialized_end=729 - _globals['_WORKFLOWRETENTIONPOLICY']._serialized_start=785 - _globals['_WORKFLOWRETENTIONPOLICY']._serialized_end=866 - _globals['_JSONINDEX']._serialized_start=868 - _globals['_JSONINDEX']._serialized_end=946 - _globals['_SEARCHABLEVARIABLEDEF']._serialized_start=948 - _globals['_SEARCHABLEVARIABLEDEF']._serialized_end=1014 - _globals['_THREADVARDEF']._serialized_start=1017 - _globals['_THREADVARDEF']._serialized_end=1219 - _globals['_THREADSPEC']._serialized_start=1222 - _globals['_THREADSPEC']._serialized_end=1539 - _globals['_THREADSPEC_NODESENTRY']._serialized_start=1455 - _globals['_THREADSPEC_NODESENTRY']._serialized_end=1518 - _globals['_THREADRETENTIONPOLICY']._serialized_start=1541 - _globals['_THREADRETENTIONPOLICY']._serialized_end=1628 - _globals['_INTERRUPTDEF']._serialized_start=1630 - _globals['_INTERRUPTDEF']._serialized_end=1735 - _globals['_STARTTHREADNODE']._serialized_start=1738 - _globals['_STARTTHREADNODE']._serialized_end=1928 - _globals['_STARTTHREADNODE_VARIABLESENTRY']._serialized_start=1847 - _globals['_STARTTHREADNODE_VARIABLESENTRY']._serialized_end=1928 - _globals['_STARTMULTIPLETHREADSNODE']._serialized_start=1931 - _globals['_STARTMULTIPLETHREADSNODE']._serialized_end=2190 - _globals['_STARTMULTIPLETHREADSNODE_VARIABLESENTRY']._serialized_start=1847 - _globals['_STARTMULTIPLETHREADSNODE_VARIABLESENTRY']._serialized_end=1928 - _globals['_FAILUREHANDLERDEF']._serialized_start=2193 - _globals['_FAILUREHANDLERDEF']._serialized_end=2433 - _globals['_FAILUREHANDLERDEF_LHFAILURETYPE']._serialized_start=2346 - _globals['_FAILUREHANDLERDEF_LHFAILURETYPE']._serialized_end=2413 - _globals['_WAITFORTHREADSNODE']._serialized_start=2436 - _globals['_WAITFORTHREADSNODE']._serialized_end=2727 - _globals['_WAITFORTHREADSNODE_THREADTOWAITFOR']._serialized_start=2634 - _globals['_WAITFORTHREADSNODE_THREADTOWAITFOR']._serialized_end=2711 - _globals['_EXTERNALEVENTNODE']._serialized_start=2730 - _globals['_EXTERNALEVENTNODE']._serialized_end=2871 - _globals['_ENTRYPOINTNODE']._serialized_start=2873 - _globals['_ENTRYPOINTNODE']._serialized_end=2889 - _globals['_EXITNODE']._serialized_start=2891 - _globals['_EXITNODE']._serialized_end=2968 - _globals['_FAILUREDEF']._serialized_start=2970 - _globals['_FAILUREDEF']._serialized_end=3088 - _globals['_NODE']._serialized_start=3091 - _globals['_NODE']._serialized_end=3707 - _globals['_USERTASKNODE']._serialized_start=3710 - _globals['_USERTASKNODE']._serialized_end=4064 - _globals['_EDGECONDITION']._serialized_start=4067 - _globals['_EDGECONDITION']._serialized_end=4222 - _globals['_EDGE']._serialized_start=4225 - _globals['_EDGE']._serialized_end=4380 - _globals['_NOPNODE']._serialized_start=4382 - _globals['_NOPNODE']._serialized_end=4391 - _globals['_SLEEPNODE']._serialized_start=4394 - _globals['_SLEEPNODE']._serialized_end=4584 - _globals['_WFSPECVERSIONMIGRATION']._serialized_start=4587 - _globals['_WFSPECVERSIONMIGRATION']._serialized_end=4850 - _globals['_WFSPECVERSIONMIGRATION_THREADSPECMIGRATIONSENTRY']._serialized_start=4757 - _globals['_WFSPECVERSIONMIGRATION_THREADSPECMIGRATIONSENTRY']._serialized_end=4850 - _globals['_THREADSPECMIGRATION']._serialized_start=4853 - _globals['_THREADSPECMIGRATION']._serialized_end=5066 - _globals['_THREADSPECMIGRATION_NODEMIGRATIONSENTRY']._serialized_start=4985 - _globals['_THREADSPECMIGRATION_NODEMIGRATIONSENTRY']._serialized_end=5066 - _globals['_NODEMIGRATION']._serialized_start=5068 - _globals['_NODEMIGRATION']._serialized_end=5106 + _globals['_WFSPEC_PARENTWFSPECREFERENCE']._serialized_end=760 + _globals['_WORKFLOWRETENTIONPOLICY']._serialized_start=816 + _globals['_WORKFLOWRETENTIONPOLICY']._serialized_end=897 + _globals['_JSONINDEX']._serialized_start=899 + _globals['_JSONINDEX']._serialized_end=977 + _globals['_SEARCHABLEVARIABLEDEF']._serialized_start=979 + _globals['_SEARCHABLEVARIABLEDEF']._serialized_end=1045 + _globals['_THREADVARDEF']._serialized_start=1048 + _globals['_THREADVARDEF']._serialized_end=1250 + _globals['_THREADSPEC']._serialized_start=1253 + _globals['_THREADSPEC']._serialized_end=1570 + _globals['_THREADSPEC_NODESENTRY']._serialized_start=1486 + _globals['_THREADSPEC_NODESENTRY']._serialized_end=1549 + _globals['_THREADRETENTIONPOLICY']._serialized_start=1572 + _globals['_THREADRETENTIONPOLICY']._serialized_end=1659 + _globals['_INTERRUPTDEF']._serialized_start=1661 + _globals['_INTERRUPTDEF']._serialized_end=1766 + _globals['_STARTTHREADNODE']._serialized_start=1769 + _globals['_STARTTHREADNODE']._serialized_end=1959 + _globals['_STARTTHREADNODE_VARIABLESENTRY']._serialized_start=1878 + _globals['_STARTTHREADNODE_VARIABLESENTRY']._serialized_end=1959 + _globals['_STARTMULTIPLETHREADSNODE']._serialized_start=1962 + _globals['_STARTMULTIPLETHREADSNODE']._serialized_end=2221 + _globals['_STARTMULTIPLETHREADSNODE_VARIABLESENTRY']._serialized_start=1878 + _globals['_STARTMULTIPLETHREADSNODE_VARIABLESENTRY']._serialized_end=1959 + _globals['_FAILUREHANDLERDEF']._serialized_start=2224 + _globals['_FAILUREHANDLERDEF']._serialized_end=2464 + _globals['_FAILUREHANDLERDEF_LHFAILURETYPE']._serialized_start=2377 + _globals['_FAILUREHANDLERDEF_LHFAILURETYPE']._serialized_end=2444 + _globals['_WAITFORTHREADSNODE']._serialized_start=2467 + _globals['_WAITFORTHREADSNODE']._serialized_end=2758 + _globals['_WAITFORTHREADSNODE_THREADTOWAITFOR']._serialized_start=2665 + _globals['_WAITFORTHREADSNODE_THREADTOWAITFOR']._serialized_end=2742 + _globals['_EXTERNALEVENTNODE']._serialized_start=2761 + _globals['_EXTERNALEVENTNODE']._serialized_end=2902 + _globals['_ENTRYPOINTNODE']._serialized_start=2904 + _globals['_ENTRYPOINTNODE']._serialized_end=2920 + _globals['_EXITNODE']._serialized_start=2922 + _globals['_EXITNODE']._serialized_end=2999 + _globals['_FAILUREDEF']._serialized_start=3001 + _globals['_FAILUREDEF']._serialized_end=3119 + _globals['_NODE']._serialized_start=3122 + _globals['_NODE']._serialized_end=3738 + _globals['_USERTASKNODE']._serialized_start=3741 + _globals['_USERTASKNODE']._serialized_end=4095 + _globals['_EDGECONDITION']._serialized_start=4098 + _globals['_EDGECONDITION']._serialized_end=4253 + _globals['_EDGE']._serialized_start=4256 + _globals['_EDGE']._serialized_end=4411 + _globals['_NOPNODE']._serialized_start=4413 + _globals['_NOPNODE']._serialized_end=4422 + _globals['_SLEEPNODE']._serialized_start=4425 + _globals['_SLEEPNODE']._serialized_end=4615 + _globals['_WFSPECVERSIONMIGRATION']._serialized_start=4618 + _globals['_WFSPECVERSIONMIGRATION']._serialized_end=4881 + _globals['_WFSPECVERSIONMIGRATION_THREADSPECMIGRATIONSENTRY']._serialized_start=4788 + _globals['_WFSPECVERSIONMIGRATION_THREADSPECMIGRATIONSENTRY']._serialized_end=4881 + _globals['_THREADSPECMIGRATION']._serialized_start=4884 + _globals['_THREADSPECMIGRATION']._serialized_end=5097 + _globals['_THREADSPECMIGRATION_NODEMIGRATIONSENTRY']._serialized_start=5016 + _globals['_THREADSPECMIGRATION_NODEMIGRATIONSENTRY']._serialized_end=5097 + _globals['_NODEMIGRATION']._serialized_start=5099 + _globals['_NODEMIGRATION']._serialized_end=5137 # @@protoc_insertion_point(module_scope) diff --git a/sdk-python/littlehorse/model/wf_spec_pb2.pyi b/sdk-python/littlehorse/model/wf_spec_pb2.pyi index efc67bae2..6bf17c51d 100644 --- a/sdk-python/littlehorse/model/wf_spec_pb2.pyi +++ b/sdk-python/littlehorse/model/wf_spec_pb2.pyi @@ -29,10 +29,12 @@ class WfSpec(_message.Message): value: ThreadSpec def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[ThreadSpec, _Mapping]] = ...) -> None: ... class ParentWfSpecReference(_message.Message): - __slots__ = ["wf_spec_name"] + __slots__ = ["wf_spec_name", "wf_spec_major_version"] WF_SPEC_NAME_FIELD_NUMBER: _ClassVar[int] + WF_SPEC_MAJOR_VERSION_FIELD_NUMBER: _ClassVar[int] wf_spec_name: str - def __init__(self, wf_spec_name: _Optional[str] = ...) -> None: ... + wf_spec_major_version: int + def __init__(self, wf_spec_name: _Optional[str] = ..., wf_spec_major_version: _Optional[int] = ...) -> None: ... ID_FIELD_NUMBER: _ClassVar[int] CREATED_AT_FIELD_NUMBER: _ClassVar[int] FROZEN_VARIABLES_FIELD_NUMBER: _ClassVar[int] diff --git a/server/src/main/java/io/littlehorse/common/model/getable/global/wfspec/ParentWfSpecReferenceModel.java b/server/src/main/java/io/littlehorse/common/model/getable/global/wfspec/ParentWfSpecReferenceModel.java index e570259d2..1f20a5815 100644 --- a/server/src/main/java/io/littlehorse/common/model/getable/global/wfspec/ParentWfSpecReferenceModel.java +++ b/server/src/main/java/io/littlehorse/common/model/getable/global/wfspec/ParentWfSpecReferenceModel.java @@ -10,6 +10,12 @@ public class ParentWfSpecReferenceModel extends LHSerializable{ private String wfSpecName; + private int wfSpecMajorVersion; + + public ParentWfSpecReferenceModel(String wfSpecName, int wfSpecMajorVersion) { + this.wfSpecName = wfSpecName; + this.wfSpecMajorVersion = wfSpecMajorVersion; + } @Override public Class getProtoBaseClass() { @@ -18,7 +24,9 @@ public Class getProtoBaseClass() { @Override public ParentWfSpecReference.Builder toProto() { - ParentWfSpecReference.Builder out = ParentWfSpecReference.newBuilder().setWfSpecName(wfSpecName); + ParentWfSpecReference.Builder out = ParentWfSpecReference.newBuilder() + .setWfSpecName(wfSpecName) + .setWfSpecMajorVersion(wfSpecMajorVersion); return out; } @@ -26,5 +34,6 @@ public ParentWfSpecReference.Builder toProto() { public void initFrom(Message proto, ExecutionContext ctx) { ParentWfSpecReference p = (ParentWfSpecReference) proto; wfSpecName = p.getWfSpecName(); + wfSpecMajorVersion = p.getWfSpecMajorVersion(); } } diff --git a/server/src/main/java/io/littlehorse/common/model/getable/global/wfspec/WfSpecModel.java b/server/src/main/java/io/littlehorse/common/model/getable/global/wfspec/WfSpecModel.java index 86f163d22..b75527c01 100644 --- a/server/src/main/java/io/littlehorse/common/model/getable/global/wfspec/WfSpecModel.java +++ b/server/src/main/java/io/littlehorse/common/model/getable/global/wfspec/WfSpecModel.java @@ -24,6 +24,7 @@ import io.littlehorse.sdk.common.proto.ThreadSpec; import io.littlehorse.sdk.common.proto.ThreadType; import io.littlehorse.sdk.common.proto.ThreadVarDef; +import io.littlehorse.sdk.common.proto.WfRunVariableAccessLevel; import io.littlehorse.sdk.common.proto.WfSpec; import io.littlehorse.sdk.common.proto.WfSpecId; import io.littlehorse.server.streams.storeinternals.GetableIndex; @@ -225,7 +226,7 @@ public void validateAndMaybeBumpVersion(Optional oldVersion, Metada throw new LHApiException(Status.INVALID_ARGUMENT, "Unknown entrypoint thread"); } - validateVariablesHelper(); + validateVariablesHelper(ctx); for (Map.Entry e : threadSpecs.entrySet()) { ThreadSpecModel ts = e.getValue(); @@ -241,10 +242,17 @@ public void validateAndMaybeBumpVersion(Optional oldVersion, Metada } if (parentWfSpec != null) { - validateParentHelper(ctx); + getParentWfSpec(ctx); } } + /** + * Returns entrypoint thread instance + */ + public ThreadSpecModel getEntrypointThread(){ + return threadSpecs.get(entrypointThreadName); + } + /** * Returns a Map from Variable Name to ThreadVarDefModel. Excludes the reserved "INPUT" * variable. @@ -297,14 +305,34 @@ public Map getRequiredVariables() { * 2. Validating variable types for mutations, assignments, and task input. * 3. Incorporation of JsonSchema or Protobuf Schema for further validation. */ - private void validateVariablesHelper() throws LHApiException { + private void validateVariablesHelper(MetadataCommandExecution ctx) throws LHApiException { varToThreadSpec = new HashMap<>(); + boolean hasParentWorkflow = parentWfSpec != null; + WfSpecModel parentWfSpec = null; + if (hasParentWorkflow) { + parentWfSpec = getParentWfSpec(ctx); + } for (ThreadSpecModel tspec : threadSpecs.values()) { // for (Map.Entry e : tspec.variableDefs.entrySet()) { for (ThreadVarDefModel tvd : tspec.getVariableDefs()) { VariableDefModel vd = tvd.getVarDef(); String varName = vd.getName(); - + if (tvd.getAccessLevel().equals(WfRunVariableAccessLevel.INHERITED_VAR) && !hasParentWorkflow) { + throw new LHApiException( + Status.INVALID_ARGUMENT, "Only child workflows are allowed to access inherited variables"); + } else if (tvd.getAccessLevel().equals(WfRunVariableAccessLevel.INHERITED_VAR)) { + ThreadVarDefModel parentVariable = + parentWfSpec.getAllVariables().get(varName); + if (parentVariable == null) { + throw new LHApiException( + Status.INVALID_ARGUMENT, + "Inherited variable %s does not exist in parent WfSpec".formatted(varName)); + } else if (parentVariable.getAccessLevel().equals(WfRunVariableAccessLevel.PRIVATE_VAR)) { + throw new LHApiException( + Status.INVALID_ARGUMENT, + "Inherited variable %s is defined as PRIVATE in parent WfSpec".formatted(varName)); + } + } if (varToThreadSpec.containsKey(varName)) { if (!varName.equals(LHConstants.EXT_EVT_HANDLER_VAR)) { throw new LHApiException( @@ -405,13 +433,14 @@ public WfRunModel startNewRun(RunWfRequestModel evt, ProcessorExecutionContext p * checking of variables, though. That is a future feature we will add in 1.0 * or 1.1 */ - private void validateParentHelper(MetadataCommandExecution ctx) { - WfSpecModel parent = ctx.service().getWfSpec(parentWfSpec.getWfSpecName(), null, null); + private WfSpecModel getParentWfSpec(MetadataCommandExecution ctx) { + WfSpecModel parent = ctx.service().getWfSpec(parentWfSpec.getWfSpecName(), parentWfSpec.getWfSpecMajorVersion(), 0); if (parent == null) { throw new LHApiException( Status.INVALID_ARGUMENT, "Provided spec refers to nonexistent parent wfSpec %s".formatted(parentWfSpec.getWfSpecName())); } + return parent; } public static WfSpecId parseId(String fullId) { diff --git a/server/src/main/java/io/littlehorse/common/util/WfSpecUtil.java b/server/src/main/java/io/littlehorse/common/util/WfSpecUtil.java index ae6baebee..8d9baf9ac 100644 --- a/server/src/main/java/io/littlehorse/common/util/WfSpecUtil.java +++ b/server/src/main/java/io/littlehorse/common/util/WfSpecUtil.java @@ -3,12 +3,16 @@ import com.google.protobuf.Timestamp; import io.littlehorse.common.model.getable.global.wfspec.WfSpecModel; import io.littlehorse.common.model.getable.global.wfspec.thread.ThreadVarDefModel; +import io.littlehorse.common.model.getable.global.wfspec.variable.VariableDefModel; +import io.littlehorse.sdk.common.proto.WfRunVariableAccessLevel; import io.littlehorse.sdk.common.proto.WfSpec; import io.littlehorse.sdk.common.proto.WfSpecId; import java.util.Arrays; import java.util.Date; +import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; public class WfSpecUtil { private WfSpecUtil() {} @@ -54,4 +58,14 @@ private static boolean variablesMatch(Map left, Map left, Listright) { + Set publicVariables = right.stream() + .filter(threadVarDefModel -> threadVarDefModel.getAccessLevel().equals(WfRunVariableAccessLevel.PUBLIC_VAR)) + .map(ThreadVarDefModel::getVarDef) + .map(VariableDefModel::getName) + .collect(Collectors.toSet()); + Set + + }*/ } diff --git a/server/src/test/java/e2e/SharedVariablesTest.java b/server/src/test/java/e2e/SharedVariablesTest.java index 12d4e7e13..6a996e11f 100644 --- a/server/src/test/java/e2e/SharedVariablesTest.java +++ b/server/src/test/java/e2e/SharedVariablesTest.java @@ -53,7 +53,7 @@ public Workflow buildParentWf() { WfRunVariable inputNumber = thread.addVariable("input-number", VariableType.INT).required(); WfRunVariable publicVariable = thread.addVariable("public-variable", VariableType.INT) - .withAccessLevel(WfRunVariableAccessLevel.PUBLIC_VAR); + .withAccessLevel(WfRunVariableAccessLevel.INHERITED_VAR); thread.mutate(inputNumber, VariableMutationType.MULTIPLY, 2); thread.mutate(publicVariable, VariableMutationType.ASSIGN, inputNumber); }); diff --git a/server/src/test/java/io/littlehorse/TestUtil.java b/server/src/test/java/io/littlehorse/TestUtil.java index 644b6fcda..45964e25e 100644 --- a/server/src/test/java/io/littlehorse/TestUtil.java +++ b/server/src/test/java/io/littlehorse/TestUtil.java @@ -156,7 +156,7 @@ public static WfSpecModel wfSpec(String name) { WfSpecModel spec = new WfSpecModel(Mockito.mock()); spec.setId(new WfSpecIdModel(name, 0, 0)); spec.setCreatedAt(new Date()); - spec.setEntrypointThreadName("testEntrypointThreadName"); + spec.setEntrypointThreadName("entrypoint"); spec.setThreadSpecs(Map.of("entrypoint", threadSpec())); return spec; } diff --git a/server/src/test/java/io/littlehorse/common/model/getable/global/wfspec/WfSpecModelTest.java b/server/src/test/java/io/littlehorse/common/model/getable/global/wfspec/WfSpecModelTest.java new file mode 100644 index 000000000..ad43326a4 --- /dev/null +++ b/server/src/test/java/io/littlehorse/common/model/getable/global/wfspec/WfSpecModelTest.java @@ -0,0 +1,102 @@ +package io.littlehorse.common.model.getable.global.wfspec; + +import static org.mockito.Mockito.*; + +import io.littlehorse.TestUtil; +import io.littlehorse.common.LHSerializable; +import io.littlehorse.common.exceptions.LHApiException; +import io.littlehorse.common.model.getable.global.wfspec.thread.ThreadSpecModel; +import io.littlehorse.common.model.getable.global.wfspec.thread.ThreadVarDefModel; +import io.littlehorse.common.model.getable.global.wfspec.variable.VariableDefModel; +import io.littlehorse.sdk.common.proto.VariableDef; +import io.littlehorse.sdk.common.proto.VariableType; +import io.littlehorse.sdk.common.proto.WfRunVariableAccessLevel; +import io.littlehorse.server.streams.topology.core.MetadataCommandExecution; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Answers; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +public class WfSpecModelTest { + + private final WfSpecModel wfSpec = TestUtil.wfSpec("my-wf"); + private final WfSpecModel parentWfSpec = TestUtil.wfSpec("my-parent-wf"); + private final MetadataCommandExecution mockContext = mock(Answers.RETURNS_DEEP_STUBS); + private ThreadSpecModel childEntrypointThread; + private VariableDefModel variableDef; + + @BeforeEach + public void setup() { + childEntrypointThread = spy(wfSpec.getThreadSpecs().get(wfSpec.getEntrypointThreadName())); + VariableDef variableDefProto = VariableDef.newBuilder() + .setName("my-var") + .setType(VariableType.BOOL) + .build(); + variableDef = LHSerializable.fromProto(variableDefProto, VariableDefModel.class, mockContext); + ThreadVarDefModel inheritedVariable = + new ThreadVarDefModel(variableDef, false, false, WfRunVariableAccessLevel.INHERITED_VAR); + childEntrypointThread.setVariableDefs(List.of(inheritedVariable)); + wfSpec.setThreadSpecs(Map.of(wfSpec.getEntrypointThreadName(), childEntrypointThread)); + } + + @Test + public void shouldPreventInheritedVariablesFromParentWfSpec() { + wfSpec.setParentWfSpec(null); + verify(childEntrypointThread, never()).validate(); + Throwable caughtException = + Assertions.catchThrowable(() -> wfSpec.validateAndMaybeBumpVersion(Optional.empty(), mockContext)); + Assertions.assertThat(caughtException) + .isNotNull() + .isInstanceOf(LHApiException.class) + .hasMessageContaining("Only child workflows are allowed to access inherited variables"); + } + + @Test + public void shouldValidateInheritedVariableExists() { + when(mockContext.service().getWfSpec("my-parent-wf", 1, 0)).thenReturn(parentWfSpec); + wfSpec.setParentWfSpec(new ParentWfSpecReferenceModel("my-parent-wf", 1)); + verify(childEntrypointThread, never()).validate(); + Throwable caughtException = + Assertions.catchThrowable(() -> wfSpec.validateAndMaybeBumpVersion(Optional.empty(), mockContext)); + Assertions.assertThat(caughtException) + .isNotNull() + .isInstanceOf(LHApiException.class) + .hasMessageContaining("Inherited variable my-var does not exist in parent WfSpec"); + } + + @Test + public void shouldValidateInheritedIsAccessible() { + ThreadVarDefModel parentVariable = + new ThreadVarDefModel(variableDef, false, false, WfRunVariableAccessLevel.PRIVATE_VAR); + ThreadSpecModel parentEntrypoint = parentWfSpec.getThreadSpecs().get(parentWfSpec.getEntrypointThreadName()); + parentEntrypoint.setVariableDefs(List.of(parentVariable)); + when(mockContext.service().getWfSpec("my-parent-wf", 2, 0)).thenReturn(parentWfSpec); + wfSpec.setParentWfSpec(new ParentWfSpecReferenceModel("my-parent-wf", 2)); + verify(childEntrypointThread, never()).validate(); + Throwable caughtException = + Assertions.catchThrowable(() -> wfSpec.validateAndMaybeBumpVersion(Optional.empty(), mockContext)); + Assertions.assertThat(caughtException) + .isNotNull() + .isInstanceOf(LHApiException.class) + .hasMessageContaining("Inherited variable my-var is defined as PRIVATE in parent WfSpec"); + } + + + @Test + public void shouldIncreaseTheMajorVersionWhenAPublicVariableChangesItsAccessLevel() { + WfSpecModel oldVersion = TestUtil.wfSpec("my-wf"); + ThreadSpecModel entrypointThread = spy(wfSpec.getThreadSpecs().get(wfSpec.getEntrypointThreadName())); + doNothing().when(entrypointThread).validate(); + entrypointThread.setVariableDefs(List.of()); + wfSpec.setThreadSpecs(Map.of(wfSpec.getEntrypointThreadName(), entrypointThread)); + Assertions.assertThat(wfSpec.getId().getMajorVersion()).isEqualTo(0); + wfSpec.validateAndMaybeBumpVersion(Optional.of(oldVersion), mockContext); + Assertions.assertThat(wfSpec.getId().getMajorVersion()).isEqualTo(1); + } +}