From 72207533f76b4a7176b3fb32ebcff2835c5c5313 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Mon, 24 Jun 2024 07:38:22 +0100 Subject: [PATCH 01/27] initial timestamps Signed-off-by: Chris Martin --- .../armada/event/conversion/conversions.go | 49 +- .../event/conversion/conversions_test.go | 66 +- .../armada/event/event_repository_test.go | 5 +- internal/armada/event/event_test.go | 3 +- internal/armadactl/watch.go | 5 +- internal/common/eventutil/eventutil.go | 3 +- internal/common/proto/protoutil.go | 18 + pkg/api/api.swagger.go | 2 +- pkg/api/api.swagger.json | 2 +- pkg/api/binoculars/api.swagger.go | 2 +- pkg/api/binoculars/api.swagger.json | 2 +- pkg/api/event.pb.go | 1197 ++++++++++------- pkg/api/event.proto | 38 +- pkg/api/event_util.go | 4 +- pkg/api/submit.pb.go | 414 +++--- pkg/api/submit.proto | 2 +- pkg/client/domain/watch.go | 11 +- pkg/client/domain/watch_test.go | 12 +- .../jobservice/fakearmada/event_server.go | 10 +- 19 files changed, 1023 insertions(+), 822 deletions(-) diff --git a/internal/armada/event/conversion/conversions.go b/internal/armada/event/conversion/conversions.go index 0e16860b9bb..ecb8a749dfd 100644 --- a/internal/armada/event/conversion/conversions.go +++ b/internal/armada/event/conversion/conversions.go @@ -6,6 +6,7 @@ import ( log "github.com/sirupsen/logrus" "github.com/armadaproject/armada/internal/common/eventutil" + protoutil "github.com/armadaproject/armada/internal/common/proto" "github.com/armadaproject/armada/pkg/api" "github.com/armadaproject/armada/pkg/armadaevents" ) @@ -87,7 +88,7 @@ func FromInternalSubmit(owner string, groups []string, queue string, jobSet stri JobId: jobId, JobSetId: jobSet, Queue: queue, - Created: time, + Created: protoutil.ToTimestamp(time), Job: *job, } @@ -95,7 +96,7 @@ func FromInternalSubmit(owner string, groups []string, queue string, jobSet stri JobId: jobId, JobSetId: jobSet, Queue: queue, - Created: time, + Created: protoutil.ToTimestamp(time), } return []*api.EventMessage{ @@ -125,7 +126,7 @@ func FromInternalPreemptionRequested(userId string, queueName string, jobSetName JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), Requestor: userId, }, }, @@ -146,7 +147,7 @@ func FromInternalCancel(userId string, queueName string, jobSetName string, time JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), Requestor: userId, }, }, @@ -167,7 +168,7 @@ func FromInternalCancelled(userId string, queueName string, jobSetName string, t JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), Requestor: userId, }, }, @@ -187,7 +188,7 @@ func FromInternalReprioritiseJob(userId string, queueName string, jobSetName str JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), NewPriority: float64(e.Priority), Requestor: userId, }, @@ -208,7 +209,7 @@ func FromInternalReprioritisedJob(userId string, queueName string, jobSetName st JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), NewPriority: float64(e.Priority), Requestor: userId, }, @@ -229,7 +230,7 @@ func FromInternalLogJobRunLeased(queueName string, jobSetName string, time time. JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), ClusterId: e.ExecutorId, }, }, @@ -247,7 +248,7 @@ func FromInternalJobSucceeded(queueName string, jobSetName string, time time.Tim JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), } if len(e.ResourceInfos) > 0 { @@ -285,7 +286,7 @@ func FromInternalJobRunErrors(queueName string, jobSetName string, time time.Tim JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), }, }, } @@ -305,7 +306,7 @@ func FromInternalJobRunErrors(queueName string, jobSetName string, time time.Tim PodNumber: reason.PodUnschedulable.GetPodNumber(), JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), }, }, } @@ -318,7 +319,7 @@ func FromInternalJobRunErrors(queueName string, jobSetName string, time time.Tim JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), ClusterId: objectMeta.GetExecutorId(), Reason: reason.PodLeaseReturned.GetMessage(), KubernetesId: objectMeta.GetKubernetesId(), @@ -338,7 +339,7 @@ func FromInternalJobRunErrors(queueName string, jobSetName string, time time.Tim PodNamespace: objectMeta.GetNamespace(), PodName: objectMeta.GetName(), Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), ClusterId: objectMeta.GetExecutorId(), Reason: reason.PodTerminated.GetMessage(), KubernetesId: objectMeta.GetKubernetesId(), @@ -379,7 +380,7 @@ func FromInternalJobErrors(queueName string, jobSetName string, time time.Time, JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), Reason: "preempted", }, }, @@ -392,7 +393,7 @@ func FromInternalJobErrors(queueName string, jobSetName string, time time.Time, JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), Reason: reason.MaxRunsExceeded.Message, }, }, @@ -405,7 +406,7 @@ func FromInternalJobErrors(queueName string, jobSetName string, time time.Time, JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), Reason: reason.GangJobUnschedulable.Message, }, }, @@ -418,7 +419,7 @@ func FromInternalJobErrors(queueName string, jobSetName string, time time.Time, JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), Reason: reason.JobRejected.Message, Cause: api.Cause_Rejected, }, @@ -433,7 +434,7 @@ func FromInternalJobErrors(queueName string, jobSetName string, time time.Time, JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), }, }, } @@ -453,7 +454,7 @@ func FromInternalJobRunRunning(queueName string, jobSetName string, time time.Ti JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), } if len(e.ResourceInfos) > 0 { @@ -485,7 +486,7 @@ func FromInternalJobRunAssigned(queueName string, jobSetName string, time time.T JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), } if len(e.ResourceInfos) > 0 { @@ -540,7 +541,7 @@ func FromInternalJobRunPreempted(queueName string, jobSetName string, time time. JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), RunId: runId, PreemptiveJobId: preemptiveJobId, PreemptiveRunId: preemptiveRunId, @@ -565,7 +566,7 @@ func FromInternalResourceUtilisation(queueName string, jobSetName string, time t JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), ClusterId: e.GetResourceInfo().GetObjectMeta().GetExecutorId(), KubernetesId: e.GetResourceInfo().GetObjectMeta().GetKubernetesId(), MaxResourcesForPeriod: e.MaxResourcesForPeriod, @@ -595,7 +596,7 @@ func FromInternalStandaloneIngressInfo(queueName string, jobSetName string, time JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), ClusterId: e.GetObjectMeta().GetExecutorId(), KubernetesId: e.GetObjectMeta().GetKubernetesId(), NodeName: e.GetNodeName(), @@ -620,7 +621,7 @@ func makeJobFailed(jobId string, queueName string, jobSetName string, time time. JobId: jobId, JobSetId: jobSetName, Queue: queueName, - Created: time, + Created: protoutil.ToTimestamp(time), ClusterId: podError.GetObjectMeta().GetExecutorId(), PodNamespace: podError.GetObjectMeta().GetNamespace(), KubernetesId: podError.GetObjectMeta().GetKubernetesId(), diff --git a/internal/armada/event/conversion/conversions_test.go b/internal/armada/event/conversion/conversions_test.go index 379d848fa8e..5902260ac4d 100644 --- a/internal/armada/event/conversion/conversions_test.go +++ b/internal/armada/event/conversion/conversions_test.go @@ -11,6 +11,7 @@ import ( v11 "k8s.io/api/networking/v1" "k8s.io/apimachinery/pkg/api/resource" + protoutil "github.com/armadaproject/armada/internal/common/proto" "github.com/armadaproject/armada/internal/scheduler/schedulerobjects" "github.com/armadaproject/armada/pkg/api" "github.com/armadaproject/armada/pkg/armadaevents" @@ -31,18 +32,15 @@ var ( ) const ( - jobSetName = "testJobset" - executorId = "testCluster" - nodeName = "testNode" - podName = "test-pod" - queue = "test-queue" - userId = "testUser" - namespace = "test-ns" - priority = 3 - newPriority = 4 - podNumber = 6 - errMsg = "sample error message" - leaseReturnedMsg = "lease returned error message" + jobSetName = "testJobset" + executorId = "testCluster" + nodeName = "testNode" + podName = "test-pod" + queue = "test-queue" + userId = "testUser" + namespace = "test-ns" + priority = 3 + podNumber = 6 ) var baseTime, _ = time.Parse("2006-01-02T15:04:05.000Z", "2022-03-01T15:04:05.000Z") @@ -83,7 +81,7 @@ func TestConvertSubmitted(t *testing.T) { JobId: jobIdString, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), Job: api.Job{ Id: jobIdString, JobSetId: jobSetName, @@ -91,7 +89,7 @@ func TestConvertSubmitted(t *testing.T) { Namespace: namespace, Owner: userId, Priority: priority, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), K8SIngress: []*v11.Ingress{}, K8SService: []*v1.Service{}, PodSpec: &v1.PodSpec{ @@ -114,7 +112,7 @@ func TestConvertSubmitted(t *testing.T) { JobId: jobIdString, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), }}, }, } @@ -140,7 +138,7 @@ func TestConvertCancel(t *testing.T) { JobId: jobIdString, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), Requestor: userId, }, }, @@ -169,7 +167,7 @@ func TestConvertCancelled(t *testing.T) { JobId: jobIdString, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), Requestor: userId, }, }, @@ -198,7 +196,7 @@ func TestConvertReprioritising(t *testing.T) { JobId: jobIdString, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), Requestor: userId, }, }, @@ -227,7 +225,7 @@ func TestConvertReprioritised(t *testing.T) { JobId: jobIdString, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), Requestor: userId, }, }, @@ -267,7 +265,7 @@ func TestConvertLeased(t *testing.T) { JobId: jobIdString, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), ClusterId: executorId, }, }, @@ -305,7 +303,7 @@ func TestConvertLeaseExpired(t *testing.T) { JobId: jobIdString, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), }, }, }, @@ -359,7 +357,7 @@ func TestConvertPodUnschedulable(t *testing.T) { PodNumber: podNumber, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), }, }, }, @@ -410,7 +408,7 @@ func TestConvertPodLeaseReturned(t *testing.T) { PodNumber: podNumber, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), RunAttempted: true, }, }, @@ -464,7 +462,7 @@ func TestConvertPodTerminated(t *testing.T) { PodNumber: podNumber, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), }, }, }, @@ -548,7 +546,7 @@ func TestConvertJobError(t *testing.T) { PodNumber: podNumber, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), Cause: api.Cause_DeadlineExceeded, ContainerStatuses: []*api.ContainerStatus{ { @@ -569,7 +567,7 @@ func TestConvertJobError(t *testing.T) { Reason: "Max runs", JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), Cause: api.Cause_Error, }, }, @@ -614,7 +612,7 @@ func TestConvertJobSucceeded(t *testing.T) { JobId: jobIdString, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), ClusterId: executorId, KubernetesId: runIdString, NodeName: nodeName, @@ -665,7 +663,7 @@ func TestConvertJobRunning(t *testing.T) { JobId: jobIdString, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), ClusterId: executorId, KubernetesId: runIdString, NodeName: nodeName, @@ -715,7 +713,7 @@ func TestIgnoredEventDoesntDuplicate(t *testing.T) { JobId: jobIdString, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), }, }, }, @@ -760,7 +758,7 @@ func TestConvertJobAssigned(t *testing.T) { JobId: jobIdString, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), ClusterId: executorId, KubernetesId: runIdString, PodNumber: podNumber, @@ -816,7 +814,7 @@ func TestConvertResourceUtilisation(t *testing.T) { JobId: jobIdString, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), ClusterId: executorId, KubernetesId: runIdString, MaxResourcesForPeriod: map[string]resource.Quantity{ @@ -872,7 +870,7 @@ func TestConvertIngressInfo(t *testing.T) { JobId: jobIdString, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), ClusterId: executorId, KubernetesId: runIdString, NodeName: nodeName, @@ -909,7 +907,7 @@ func TestConvertJobPreemptionRequested(t *testing.T) { JobId: jobIdString, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), Requestor: userId, }, }, @@ -941,7 +939,7 @@ func TestConvertJobRunPreempted(t *testing.T) { JobId: jobIdString, JobSetId: jobSetName, Queue: queue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), RunId: runIdString, PreemptiveJobId: preemptiveJobIdString, PreemptiveRunId: preemptiveRunIdString, diff --git a/internal/armada/event/event_repository_test.go b/internal/armada/event/event_repository_test.go index fec8063d896..14483cf745e 100644 --- a/internal/armada/event/event_repository_test.go +++ b/internal/armada/event/event_repository_test.go @@ -12,6 +12,7 @@ import ( "github.com/armadaproject/armada/internal/armada/event/sequence" "github.com/armadaproject/armada/internal/common/armadacontext" "github.com/armadaproject/armada/internal/common/compress" + protoutil "github.com/armadaproject/armada/internal/common/proto" "github.com/armadaproject/armada/pkg/api" "github.com/armadaproject/armada/pkg/armadaevents" ) @@ -113,7 +114,7 @@ var expectedPending = api.EventMessage{ JobId: jobIdString, JobSetId: jobSetName, Queue: testQueue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), ClusterId: executorId, KubernetesId: runIdString, PodNumber: podNumber, @@ -129,7 +130,7 @@ var expectedRunning = api.EventMessage{ JobId: jobIdString, JobSetId: jobSetName, Queue: testQueue, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), ClusterId: executorId, KubernetesId: runIdString, NodeName: nodeName, diff --git a/internal/armada/event/event_test.go b/internal/armada/event/event_test.go index 28a37bfc459..38354890855 100644 --- a/internal/armada/event/event_test.go +++ b/internal/armada/event/event_test.go @@ -23,6 +23,7 @@ import ( "github.com/armadaproject/armada/internal/common/auth/permission" "github.com/armadaproject/armada/internal/common/compress" "github.com/armadaproject/armada/internal/common/database/lookout" + protoutil "github.com/armadaproject/armada/internal/common/proto" "github.com/armadaproject/armada/pkg/api" "github.com/armadaproject/armada/pkg/armadaevents" "github.com/armadaproject/armada/pkg/client/queue" @@ -104,7 +105,7 @@ func TestEventServer_ForceNew(t *testing.T) { JobId: jobIdString, JobSetId: jobSetId, Queue: q.Name, - Created: baseTime, + Created: protoutil.ToTimestamp(baseTime), }} assert.Equal(t, expected, stream.sendMessages[len(stream.sendMessages)-1].Message.Events) }, diff --git a/internal/armadactl/watch.go b/internal/armadactl/watch.go index 872a01388c8..bf9a583a3ee 100644 --- a/internal/armadactl/watch.go +++ b/internal/armadactl/watch.go @@ -6,6 +6,8 @@ import ( "reflect" "time" + protoutil "github.com/armadaproject/armada/internal/common/proto" + "github.com/armadaproject/armada/internal/common/armadacontext" "github.com/armadaproject/armada/pkg/api" "github.com/armadaproject/armada/pkg/client" @@ -53,7 +55,8 @@ func (a *App) Watch(queue string, jobSetId string, raw bool, exitOnInactive bool } func (a *App) printSummary(state *domain.WatchContext, e api.Event) { - summary := fmt.Sprintf("%s | ", e.GetCreated().Format(time.Stamp)) + ts := protoutil.ToStdTime(e.GetCreated()) + summary := fmt.Sprintf("%s | ", ts.Format(time.Stamp)) summary += state.GetCurrentStateSummary() summary += fmt.Sprintf(" | %s, job id: %s", reflect.TypeOf(e).String()[5:], e.GetJobId()) diff --git a/internal/common/eventutil/eventutil.go b/internal/common/eventutil/eventutil.go index 9ca907556b3..9a7a62bd496 100644 --- a/internal/common/eventutil/eventutil.go +++ b/internal/common/eventutil/eventutil.go @@ -14,6 +14,7 @@ import ( "github.com/armadaproject/armada/internal/common/armadacontext" "github.com/armadaproject/armada/internal/common/armadaerrors" + protoutil "github.com/armadaproject/armada/internal/common/proto" "github.com/armadaproject/armada/internal/common/slices" "github.com/armadaproject/armada/pkg/api" "github.com/armadaproject/armada/pkg/armadaevents" @@ -163,7 +164,7 @@ func ApiJobFromLogSubmitJob(ownerId string, groups []string, queueName string, j PodSpecs: podSpecs, SchedulingResourceRequirements: schedulingResourceRequirements, - Created: time, + Created: protoutil.ToTimestamp(time), Owner: ownerId, QueueOwnershipUserGroups: groups, }, nil diff --git a/internal/common/proto/protoutil.go b/internal/common/proto/protoutil.go index 5745327c873..f937e08709b 100644 --- a/internal/common/proto/protoutil.go +++ b/internal/common/proto/protoutil.go @@ -1,7 +1,10 @@ package protoutil import ( + "time" + "github.com/gogo/protobuf/proto" + "github.com/gogo/protobuf/types" "github.com/pkg/errors" "github.com/armadaproject/armada/internal/common/compress" @@ -72,3 +75,18 @@ func MustMarshallAndCompress(msg proto.Message, compressor compress.Compressor) } return b } + +func ToStdTime(ts *types.Timestamp) time.Time { + if ts == nil { + return time.Unix(0, 0).UTC() + } + + return time.Unix(ts.Seconds, int64(ts.Nanos)).UTC() +} + +func ToTimestamp(t time.Time) *types.Timestamp { + return &types.Timestamp{ + Seconds: t.Unix(), + Nanos: int32(t.Nanosecond()), + } +} diff --git a/pkg/api/api.swagger.go b/pkg/api/api.swagger.go index f922cb52759..52a82d14c1a 100644 --- a/pkg/api/api.swagger.go +++ b/pkg/api/api.swagger.go @@ -5477,7 +5477,7 @@ func SwaggerJsonTemplate() string { " \"x-go-package\": \"k8s.io/api/core/v1\"\n" + " },\n" + " \"v1Time\": {\n" + - " \"description\": \"Programs using times should typically store and pass them as values,\\nnot pointers. That is, time variables and struct fields should be of\\ntype time.Time, not *time.Time.\\n\\nA Time value can be used by multiple goroutines simultaneously except\\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\\nUnmarshalText are not concurrency-safe.\\n\\nTime instants can be compared using the Before, After, and Equal methods.\\nThe Sub method subtracts two instants, producing a Duration.\\nThe Add method adds a Time and a Duration, producing a Time.\\n\\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\\nAs this time is unlikely to come up in practice, the IsZero method gives\\na simple way of detecting a time that has not been initialized explicitly.\\n\\nEach Time has associated with it a Location, consulted when computing the\\npresentation form of the time, such as in the Format, Hour, and Year methods.\\nThe methods Local, UTC, and In return a Time with a specific location.\\nChanging the location in this way changes only the presentation; it does not\\nchange the instant in time being denoted and therefore does not affect the\\ncomputations described in earlier paragraphs.\\n\\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\\nthe location name. They therefore lose information about Daylight Saving Time.\\n\\nIn addition to the required “wall clock” reading, a Time may contain an optional\\nreading of the current process's monotonic clock, to provide additional precision\\nfor comparison or subtraction.\\nSee the “Monotonic Clocks” section in the package documentation for details.\\n\\nNote that the Go == operator compares not just the time instant but also the\\nLocation and the monotonic clock reading. Therefore, Time values should not\\nbe used as map or database keys without first guaranteeing that the\\nidentical Location has been set for all values, which can be achieved\\nthrough use of the UTC or Local method, and that the monotonic clock reading\\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\\nto t == u, since t.Equal uses the most accurate comparison available and\\ncorrectly handles the case when only one of its arguments has a monotonic\\nclock reading.\",\n" + + " \"description\": \"Programs using times should typically store and pass them as values,\\nnot pointers. That is, time variables and struct fields should be of\\ntype time.Time, not *time.Time.\\n\\nA Time value can be used by multiple goroutines simultaneously except\\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\\nUnmarshalText are not concurrency-safe.\\n\\nTime instants can be compared using the Before, After, and Equal methods.\\nThe Sub method subtracts two instants, producing a Duration.\\nThe Add method adds a Time and a Duration, producing a Time.\\n\\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\\nAs this time is unlikely to come up in practice, the IsZero method gives\\na simple way of detecting a time that has not been initialized explicitly.\\n\\nEach time has an associated Location. The methods Local, UTC, and In return a\\nTime with a specific Location. Changing the Location of a Time value with\\nthese methods does not change the actual instant it represents, only the time\\nzone in which to interpret it.\\n\\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\\nthe location name. They therefore lose information about Daylight Saving Time.\\n\\nIn addition to the required “wall clock” reading, a Time may contain an optional\\nreading of the current process's monotonic clock, to provide additional precision\\nfor comparison or subtraction.\\nSee the “Monotonic Clocks” section in the package documentation for details.\\n\\nNote that the Go == operator compares not just the time instant but also the\\nLocation and the monotonic clock reading. Therefore, Time values should not\\nbe used as map or database keys without first guaranteeing that the\\nidentical Location has been set for all values, which can be achieved\\nthrough use of the UTC or Local method, and that the monotonic clock reading\\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\\nto t == u, since t.Equal uses the most accurate comparison available and\\ncorrectly handles the case when only one of its arguments has a monotonic\\nclock reading.\",\n" + " \"type\": \"string\",\n" + " \"format\": \"date-time\",\n" + " \"title\": \"A Time represents an instant in time with nanosecond precision.\",\n" + diff --git a/pkg/api/api.swagger.json b/pkg/api/api.swagger.json index 422a9fb425e..9c3dfce1529 100644 --- a/pkg/api/api.swagger.json +++ b/pkg/api/api.swagger.json @@ -5466,7 +5466,7 @@ "x-go-package": "k8s.io/api/core/v1" }, "v1Time": { - "description": "Programs using times should typically store and pass them as values,\nnot pointers. That is, time variables and struct fields should be of\ntype time.Time, not *time.Time.\n\nA Time value can be used by multiple goroutines simultaneously except\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\nUnmarshalText are not concurrency-safe.\n\nTime instants can be compared using the Before, After, and Equal methods.\nThe Sub method subtracts two instants, producing a Duration.\nThe Add method adds a Time and a Duration, producing a Time.\n\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\nAs this time is unlikely to come up in practice, the IsZero method gives\na simple way of detecting a time that has not been initialized explicitly.\n\nEach Time has associated with it a Location, consulted when computing the\npresentation form of the time, such as in the Format, Hour, and Year methods.\nThe methods Local, UTC, and In return a Time with a specific location.\nChanging the location in this way changes only the presentation; it does not\nchange the instant in time being denoted and therefore does not affect the\ncomputations described in earlier paragraphs.\n\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\nthe location name. They therefore lose information about Daylight Saving Time.\n\nIn addition to the required “wall clock” reading, a Time may contain an optional\nreading of the current process's monotonic clock, to provide additional precision\nfor comparison or subtraction.\nSee the “Monotonic Clocks” section in the package documentation for details.\n\nNote that the Go == operator compares not just the time instant but also the\nLocation and the monotonic clock reading. Therefore, Time values should not\nbe used as map or database keys without first guaranteeing that the\nidentical Location has been set for all values, which can be achieved\nthrough use of the UTC or Local method, and that the monotonic clock reading\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\nto t == u, since t.Equal uses the most accurate comparison available and\ncorrectly handles the case when only one of its arguments has a monotonic\nclock reading.", + "description": "Programs using times should typically store and pass them as values,\nnot pointers. That is, time variables and struct fields should be of\ntype time.Time, not *time.Time.\n\nA Time value can be used by multiple goroutines simultaneously except\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\nUnmarshalText are not concurrency-safe.\n\nTime instants can be compared using the Before, After, and Equal methods.\nThe Sub method subtracts two instants, producing a Duration.\nThe Add method adds a Time and a Duration, producing a Time.\n\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\nAs this time is unlikely to come up in practice, the IsZero method gives\na simple way of detecting a time that has not been initialized explicitly.\n\nEach time has an associated Location. The methods Local, UTC, and In return a\nTime with a specific Location. Changing the Location of a Time value with\nthese methods does not change the actual instant it represents, only the time\nzone in which to interpret it.\n\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\nthe location name. They therefore lose information about Daylight Saving Time.\n\nIn addition to the required “wall clock” reading, a Time may contain an optional\nreading of the current process's monotonic clock, to provide additional precision\nfor comparison or subtraction.\nSee the “Monotonic Clocks” section in the package documentation for details.\n\nNote that the Go == operator compares not just the time instant but also the\nLocation and the monotonic clock reading. Therefore, Time values should not\nbe used as map or database keys without first guaranteeing that the\nidentical Location has been set for all values, which can be achieved\nthrough use of the UTC or Local method, and that the monotonic clock reading\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\nto t == u, since t.Equal uses the most accurate comparison available and\ncorrectly handles the case when only one of its arguments has a monotonic\nclock reading.", "type": "string", "format": "date-time", "title": "A Time represents an instant in time with nanosecond precision.", diff --git a/pkg/api/binoculars/api.swagger.go b/pkg/api/binoculars/api.swagger.go index 206e611b3c9..4a9905f6feb 100644 --- a/pkg/api/binoculars/api.swagger.go +++ b/pkg/api/binoculars/api.swagger.go @@ -238,7 +238,7 @@ func SwaggerJsonTemplate() string { " \"x-go-package\": \"k8s.io/api/core/v1\"\n" + " },\n" + " \"v1Time\": {\n" + - " \"description\": \"Programs using times should typically store and pass them as values,\\nnot pointers. That is, time variables and struct fields should be of\\ntype time.Time, not *time.Time.\\n\\nA Time value can be used by multiple goroutines simultaneously except\\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\\nUnmarshalText are not concurrency-safe.\\n\\nTime instants can be compared using the Before, After, and Equal methods.\\nThe Sub method subtracts two instants, producing a Duration.\\nThe Add method adds a Time and a Duration, producing a Time.\\n\\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\\nAs this time is unlikely to come up in practice, the IsZero method gives\\na simple way of detecting a time that has not been initialized explicitly.\\n\\nEach Time has associated with it a Location, consulted when computing the\\npresentation form of the time, such as in the Format, Hour, and Year methods.\\nThe methods Local, UTC, and In return a Time with a specific location.\\nChanging the location in this way changes only the presentation; it does not\\nchange the instant in time being denoted and therefore does not affect the\\ncomputations described in earlier paragraphs.\\n\\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\\nthe location name. They therefore lose information about Daylight Saving Time.\\n\\nIn addition to the required “wall clock” reading, a Time may contain an optional\\nreading of the current process's monotonic clock, to provide additional precision\\nfor comparison or subtraction.\\nSee the “Monotonic Clocks” section in the package documentation for details.\\n\\nNote that the Go == operator compares not just the time instant but also the\\nLocation and the monotonic clock reading. Therefore, Time values should not\\nbe used as map or database keys without first guaranteeing that the\\nidentical Location has been set for all values, which can be achieved\\nthrough use of the UTC or Local method, and that the monotonic clock reading\\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\\nto t == u, since t.Equal uses the most accurate comparison available and\\ncorrectly handles the case when only one of its arguments has a monotonic\\nclock reading.\",\n" + + " \"description\": \"Programs using times should typically store and pass them as values,\\nnot pointers. That is, time variables and struct fields should be of\\ntype time.Time, not *time.Time.\\n\\nA Time value can be used by multiple goroutines simultaneously except\\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\\nUnmarshalText are not concurrency-safe.\\n\\nTime instants can be compared using the Before, After, and Equal methods.\\nThe Sub method subtracts two instants, producing a Duration.\\nThe Add method adds a Time and a Duration, producing a Time.\\n\\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\\nAs this time is unlikely to come up in practice, the IsZero method gives\\na simple way of detecting a time that has not been initialized explicitly.\\n\\nEach time has an associated Location. The methods Local, UTC, and In return a\\nTime with a specific Location. Changing the Location of a Time value with\\nthese methods does not change the actual instant it represents, only the time\\nzone in which to interpret it.\\n\\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\\nthe location name. They therefore lose information about Daylight Saving Time.\\n\\nIn addition to the required “wall clock” reading, a Time may contain an optional\\nreading of the current process's monotonic clock, to provide additional precision\\nfor comparison or subtraction.\\nSee the “Monotonic Clocks” section in the package documentation for details.\\n\\nNote that the Go == operator compares not just the time instant but also the\\nLocation and the monotonic clock reading. Therefore, Time values should not\\nbe used as map or database keys without first guaranteeing that the\\nidentical Location has been set for all values, which can be achieved\\nthrough use of the UTC or Local method, and that the monotonic clock reading\\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\\nto t == u, since t.Equal uses the most accurate comparison available and\\ncorrectly handles the case when only one of its arguments has a monotonic\\nclock reading.\",\n" + " \"type\": \"string\",\n" + " \"format\": \"date-time\",\n" + " \"title\": \"A Time represents an instant in time with nanosecond precision.\",\n" + diff --git a/pkg/api/binoculars/api.swagger.json b/pkg/api/binoculars/api.swagger.json index e1ee15d781b..adf9a3af046 100644 --- a/pkg/api/binoculars/api.swagger.json +++ b/pkg/api/binoculars/api.swagger.json @@ -227,7 +227,7 @@ "x-go-package": "k8s.io/api/core/v1" }, "v1Time": { - "description": "Programs using times should typically store and pass them as values,\nnot pointers. That is, time variables and struct fields should be of\ntype time.Time, not *time.Time.\n\nA Time value can be used by multiple goroutines simultaneously except\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\nUnmarshalText are not concurrency-safe.\n\nTime instants can be compared using the Before, After, and Equal methods.\nThe Sub method subtracts two instants, producing a Duration.\nThe Add method adds a Time and a Duration, producing a Time.\n\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\nAs this time is unlikely to come up in practice, the IsZero method gives\na simple way of detecting a time that has not been initialized explicitly.\n\nEach Time has associated with it a Location, consulted when computing the\npresentation form of the time, such as in the Format, Hour, and Year methods.\nThe methods Local, UTC, and In return a Time with a specific location.\nChanging the location in this way changes only the presentation; it does not\nchange the instant in time being denoted and therefore does not affect the\ncomputations described in earlier paragraphs.\n\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\nthe location name. They therefore lose information about Daylight Saving Time.\n\nIn addition to the required “wall clock” reading, a Time may contain an optional\nreading of the current process's monotonic clock, to provide additional precision\nfor comparison or subtraction.\nSee the “Monotonic Clocks” section in the package documentation for details.\n\nNote that the Go == operator compares not just the time instant but also the\nLocation and the monotonic clock reading. Therefore, Time values should not\nbe used as map or database keys without first guaranteeing that the\nidentical Location has been set for all values, which can be achieved\nthrough use of the UTC or Local method, and that the monotonic clock reading\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\nto t == u, since t.Equal uses the most accurate comparison available and\ncorrectly handles the case when only one of its arguments has a monotonic\nclock reading.", + "description": "Programs using times should typically store and pass them as values,\nnot pointers. That is, time variables and struct fields should be of\ntype time.Time, not *time.Time.\n\nA Time value can be used by multiple goroutines simultaneously except\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\nUnmarshalText are not concurrency-safe.\n\nTime instants can be compared using the Before, After, and Equal methods.\nThe Sub method subtracts two instants, producing a Duration.\nThe Add method adds a Time and a Duration, producing a Time.\n\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\nAs this time is unlikely to come up in practice, the IsZero method gives\na simple way of detecting a time that has not been initialized explicitly.\n\nEach time has an associated Location. The methods Local, UTC, and In return a\nTime with a specific Location. Changing the Location of a Time value with\nthese methods does not change the actual instant it represents, only the time\nzone in which to interpret it.\n\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\nthe location name. They therefore lose information about Daylight Saving Time.\n\nIn addition to the required “wall clock” reading, a Time may contain an optional\nreading of the current process's monotonic clock, to provide additional precision\nfor comparison or subtraction.\nSee the “Monotonic Clocks” section in the package documentation for details.\n\nNote that the Go == operator compares not just the time instant but also the\nLocation and the monotonic clock reading. Therefore, Time values should not\nbe used as map or database keys without first guaranteeing that the\nidentical Location has been set for all values, which can be achieved\nthrough use of the UTC or Local method, and that the monotonic clock reading\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\nto t == u, since t.Equal uses the most accurate comparison available and\ncorrectly handles the case when only one of its arguments has a monotonic\nclock reading.", "type": "string", "format": "date-time", "title": "A Time represents an instant in time with nanosecond precision.", diff --git a/pkg/api/event.pb.go b/pkg/api/event.pb.go index e92fb2334e8..40318daf484 100644 --- a/pkg/api/event.pb.go +++ b/pkg/api/event.pb.go @@ -12,12 +12,10 @@ import ( math_bits "math/bits" reflect "reflect" strings "strings" - time "time" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" types "github.com/gogo/protobuf/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" @@ -30,7 +28,6 @@ import ( var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -73,11 +70,11 @@ func (Cause) EnumDescriptor() ([]byte, []int) { } type JobSubmittedEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` - Job Job `protobuf:"bytes,5,opt,name=job,proto3" json:"job"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` + Job Job `protobuf:"bytes,5,opt,name=job,proto3" json:"job"` } func (m *JobSubmittedEvent) Reset() { *m = JobSubmittedEvent{} } @@ -133,11 +130,11 @@ func (m *JobSubmittedEvent) GetQueue() string { return "" } -func (m *JobSubmittedEvent) GetCreated() time.Time { +func (m *JobSubmittedEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobSubmittedEvent) GetJob() Job { @@ -148,10 +145,10 @@ func (m *JobSubmittedEvent) GetJob() Job { } type JobQueuedEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` } func (m *JobQueuedEvent) Reset() { *m = JobQueuedEvent{} } @@ -207,19 +204,19 @@ func (m *JobQueuedEvent) GetQueue() string { return "" } -func (m *JobQueuedEvent) GetCreated() time.Time { +func (m *JobQueuedEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } type JobLeasedEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` - ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` + ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` } func (m *JobLeasedEvent) Reset() { *m = JobLeasedEvent{} } @@ -275,11 +272,11 @@ func (m *JobLeasedEvent) GetQueue() string { return "" } -func (m *JobLeasedEvent) GetCreated() time.Time { +func (m *JobLeasedEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobLeasedEvent) GetClusterId() string { @@ -290,15 +287,15 @@ func (m *JobLeasedEvent) GetClusterId() string { } type JobLeaseReturnedEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` - ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` - KubernetesId string `protobuf:"bytes,7,opt,name=kubernetes_id,json=kubernetesId,proto3" json:"kubernetesId,omitempty"` - PodNumber int32 `protobuf:"varint,8,opt,name=pod_number,json=podNumber,proto3" json:"podNumber,omitempty"` - RunAttempted bool `protobuf:"varint,9,opt,name=run_attempted,json=runAttempted,proto3" json:"runAttempted,omitempty"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` + ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + KubernetesId string `protobuf:"bytes,7,opt,name=kubernetes_id,json=kubernetesId,proto3" json:"kubernetesId,omitempty"` + PodNumber int32 `protobuf:"varint,8,opt,name=pod_number,json=podNumber,proto3" json:"podNumber,omitempty"` + RunAttempted bool `protobuf:"varint,9,opt,name=run_attempted,json=runAttempted,proto3" json:"runAttempted,omitempty"` } func (m *JobLeaseReturnedEvent) Reset() { *m = JobLeaseReturnedEvent{} } @@ -354,11 +351,11 @@ func (m *JobLeaseReturnedEvent) GetQueue() string { return "" } -func (m *JobLeaseReturnedEvent) GetCreated() time.Time { +func (m *JobLeaseReturnedEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobLeaseReturnedEvent) GetClusterId() string { @@ -397,10 +394,10 @@ func (m *JobLeaseReturnedEvent) GetRunAttempted() bool { } type JobLeaseExpiredEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` } func (m *JobLeaseExpiredEvent) Reset() { *m = JobLeaseExpiredEvent{} } @@ -456,23 +453,23 @@ func (m *JobLeaseExpiredEvent) GetQueue() string { return "" } -func (m *JobLeaseExpiredEvent) GetCreated() time.Time { +func (m *JobLeaseExpiredEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } type JobPendingEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` - ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` - KubernetesId string `protobuf:"bytes,6,opt,name=kubernetes_id,json=kubernetesId,proto3" json:"kubernetesId,omitempty"` - PodNumber int32 `protobuf:"varint,7,opt,name=pod_number,json=podNumber,proto3" json:"podNumber,omitempty"` - PodName string `protobuf:"bytes,8,opt,name=pod_name,json=podName,proto3" json:"podName,omitempty"` - PodNamespace string `protobuf:"bytes,9,opt,name=pod_namespace,json=podNamespace,proto3" json:"podNamespace,omitempty"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` + ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` + KubernetesId string `protobuf:"bytes,6,opt,name=kubernetes_id,json=kubernetesId,proto3" json:"kubernetesId,omitempty"` + PodNumber int32 `protobuf:"varint,7,opt,name=pod_number,json=podNumber,proto3" json:"podNumber,omitempty"` + PodName string `protobuf:"bytes,8,opt,name=pod_name,json=podName,proto3" json:"podName,omitempty"` + PodNamespace string `protobuf:"bytes,9,opt,name=pod_namespace,json=podNamespace,proto3" json:"podNamespace,omitempty"` } func (m *JobPendingEvent) Reset() { *m = JobPendingEvent{} } @@ -528,11 +525,11 @@ func (m *JobPendingEvent) GetQueue() string { return "" } -func (m *JobPendingEvent) GetCreated() time.Time { +func (m *JobPendingEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobPendingEvent) GetClusterId() string { @@ -571,16 +568,16 @@ func (m *JobPendingEvent) GetPodNamespace() string { } type JobRunningEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` - ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` - KubernetesId string `protobuf:"bytes,6,opt,name=kubernetes_id,json=kubernetesId,proto3" json:"kubernetesId,omitempty"` - NodeName string `protobuf:"bytes,7,opt,name=node_name,json=nodeName,proto3" json:"nodeName,omitempty"` - PodNumber int32 `protobuf:"varint,8,opt,name=pod_number,json=podNumber,proto3" json:"podNumber,omitempty"` - PodName string `protobuf:"bytes,9,opt,name=pod_name,json=podName,proto3" json:"podName,omitempty"` - PodNamespace string `protobuf:"bytes,10,opt,name=pod_namespace,json=podNamespace,proto3" json:"podNamespace,omitempty"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` + ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` + KubernetesId string `protobuf:"bytes,6,opt,name=kubernetes_id,json=kubernetesId,proto3" json:"kubernetesId,omitempty"` + NodeName string `protobuf:"bytes,7,opt,name=node_name,json=nodeName,proto3" json:"nodeName,omitempty"` + PodNumber int32 `protobuf:"varint,8,opt,name=pod_number,json=podNumber,proto3" json:"podNumber,omitempty"` + PodName string `protobuf:"bytes,9,opt,name=pod_name,json=podName,proto3" json:"podName,omitempty"` + PodNamespace string `protobuf:"bytes,10,opt,name=pod_namespace,json=podNamespace,proto3" json:"podNamespace,omitempty"` } func (m *JobRunningEvent) Reset() { *m = JobRunningEvent{} } @@ -636,11 +633,11 @@ func (m *JobRunningEvent) GetQueue() string { return "" } -func (m *JobRunningEvent) GetCreated() time.Time { +func (m *JobRunningEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobRunningEvent) GetClusterId() string { @@ -689,7 +686,7 @@ type JobIngressInfoEvent struct { JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` KubernetesId string `protobuf:"bytes,6,opt,name=kubernetes_id,json=kubernetesId,proto3" json:"kubernetesId,omitempty"` NodeName string `protobuf:"bytes,7,opt,name=node_name,json=nodeName,proto3" json:"nodeName,omitempty"` @@ -752,11 +749,11 @@ func (m *JobIngressInfoEvent) GetQueue() string { return "" } -func (m *JobIngressInfoEvent) GetCreated() time.Time { +func (m *JobIngressInfoEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobIngressInfoEvent) GetClusterId() string { @@ -809,17 +806,17 @@ func (m *JobIngressInfoEvent) GetIngressAddresses() map[int32]string { } type JobUnableToScheduleEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` - ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` - KubernetesId string `protobuf:"bytes,7,opt,name=kubernetes_id,json=kubernetesId,proto3" json:"kubernetesId,omitempty"` - NodeName string `protobuf:"bytes,8,opt,name=node_name,json=nodeName,proto3" json:"nodeName,omitempty"` - PodNumber int32 `protobuf:"varint,9,opt,name=pod_number,json=podNumber,proto3" json:"podNumber,omitempty"` - PodName string `protobuf:"bytes,10,opt,name=pod_name,json=podName,proto3" json:"podName,omitempty"` - PodNamespace string `protobuf:"bytes,11,opt,name=pod_namespace,json=podNamespace,proto3" json:"podNamespace,omitempty"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` + ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + KubernetesId string `protobuf:"bytes,7,opt,name=kubernetes_id,json=kubernetesId,proto3" json:"kubernetesId,omitempty"` + NodeName string `protobuf:"bytes,8,opt,name=node_name,json=nodeName,proto3" json:"nodeName,omitempty"` + PodNumber int32 `protobuf:"varint,9,opt,name=pod_number,json=podNumber,proto3" json:"podNumber,omitempty"` + PodName string `protobuf:"bytes,10,opt,name=pod_name,json=podName,proto3" json:"podName,omitempty"` + PodNamespace string `protobuf:"bytes,11,opt,name=pod_namespace,json=podNamespace,proto3" json:"podNamespace,omitempty"` } func (m *JobUnableToScheduleEvent) Reset() { *m = JobUnableToScheduleEvent{} } @@ -875,11 +872,11 @@ func (m *JobUnableToScheduleEvent) GetQueue() string { return "" } -func (m *JobUnableToScheduleEvent) GetCreated() time.Time { +func (m *JobUnableToScheduleEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobUnableToScheduleEvent) GetClusterId() string { @@ -935,7 +932,7 @@ type JobFailedEvent struct { JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` ExitCodes map[string]int32 `protobuf:"bytes,7,rep,name=exit_codes,json=exitCodes,proto3" json:"exitCodes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // Deprecated: Do not use. @@ -1001,11 +998,11 @@ func (m *JobFailedEvent) GetQueue() string { return "" } -func (m *JobFailedEvent) GetCreated() time.Time { +func (m *JobFailedEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobFailedEvent) GetClusterId() string { @@ -1080,11 +1077,11 @@ func (m *JobFailedEvent) GetCause() Cause { } type JobPreemptingEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` - Requestor string `protobuf:"bytes,5,opt,name=requestor,proto3" json:"requestor,omitempty"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` + Requestor string `protobuf:"bytes,5,opt,name=requestor,proto3" json:"requestor,omitempty"` } func (m *JobPreemptingEvent) Reset() { *m = JobPreemptingEvent{} } @@ -1140,11 +1137,11 @@ func (m *JobPreemptingEvent) GetQueue() string { return "" } -func (m *JobPreemptingEvent) GetCreated() time.Time { +func (m *JobPreemptingEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobPreemptingEvent) GetRequestor() string { @@ -1155,14 +1152,14 @@ func (m *JobPreemptingEvent) GetRequestor() string { } type JobPreemptedEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` - ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` - RunId string `protobuf:"bytes,6,opt,name=run_id,json=runId,proto3" json:"runId,omitempty"` - PreemptiveJobId string `protobuf:"bytes,7,opt,name=preemptive_job_id,json=preemptiveJobId,proto3" json:"preemptiveJobId,omitempty"` - PreemptiveRunId string `protobuf:"bytes,8,opt,name=preemptive_run_id,json=preemptiveRunId,proto3" json:"preemptiveRunId,omitempty"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` + ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` + RunId string `protobuf:"bytes,6,opt,name=run_id,json=runId,proto3" json:"runId,omitempty"` + PreemptiveJobId string `protobuf:"bytes,7,opt,name=preemptive_job_id,json=preemptiveJobId,proto3" json:"preemptiveJobId,omitempty"` + PreemptiveRunId string `protobuf:"bytes,8,opt,name=preemptive_run_id,json=preemptiveRunId,proto3" json:"preemptiveRunId,omitempty"` } func (m *JobPreemptedEvent) Reset() { *m = JobPreemptedEvent{} } @@ -1218,11 +1215,11 @@ func (m *JobPreemptedEvent) GetQueue() string { return "" } -func (m *JobPreemptedEvent) GetCreated() time.Time { +func (m *JobPreemptedEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobPreemptedEvent) GetClusterId() string { @@ -1254,16 +1251,16 @@ func (m *JobPreemptedEvent) GetPreemptiveRunId() string { } type JobSucceededEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` - ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` - KubernetesId string `protobuf:"bytes,6,opt,name=kubernetes_id,json=kubernetesId,proto3" json:"kubernetesId,omitempty"` - NodeName string `protobuf:"bytes,7,opt,name=node_name,json=nodeName,proto3" json:"nodeName,omitempty"` - PodNumber int32 `protobuf:"varint,8,opt,name=pod_number,json=podNumber,proto3" json:"podNumber,omitempty"` - PodName string `protobuf:"bytes,9,opt,name=pod_name,json=podName,proto3" json:"podName,omitempty"` - PodNamespace string `protobuf:"bytes,10,opt,name=pod_namespace,json=podNamespace,proto3" json:"podNamespace,omitempty"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` + ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` + KubernetesId string `protobuf:"bytes,6,opt,name=kubernetes_id,json=kubernetesId,proto3" json:"kubernetesId,omitempty"` + NodeName string `protobuf:"bytes,7,opt,name=node_name,json=nodeName,proto3" json:"nodeName,omitempty"` + PodNumber int32 `protobuf:"varint,8,opt,name=pod_number,json=podNumber,proto3" json:"podNumber,omitempty"` + PodName string `protobuf:"bytes,9,opt,name=pod_name,json=podName,proto3" json:"podName,omitempty"` + PodNamespace string `protobuf:"bytes,10,opt,name=pod_namespace,json=podNamespace,proto3" json:"podNamespace,omitempty"` } func (m *JobSucceededEvent) Reset() { *m = JobSucceededEvent{} } @@ -1319,11 +1316,11 @@ func (m *JobSucceededEvent) GetQueue() string { return "" } -func (m *JobSucceededEvent) GetCreated() time.Time { +func (m *JobSucceededEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobSucceededEvent) GetClusterId() string { @@ -1372,7 +1369,7 @@ type JobUtilisationEvent struct { JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` KubernetesId string `protobuf:"bytes,6,opt,name=kubernetes_id,json=kubernetesId,proto3" json:"kubernetesId,omitempty"` MaxResourcesForPeriod map[string]resource.Quantity `protobuf:"bytes,7,rep,name=MaxResourcesForPeriod,proto3" json:"MaxResourcesForPeriod" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` @@ -1436,11 +1433,11 @@ func (m *JobUtilisationEvent) GetQueue() string { return "" } -func (m *JobUtilisationEvent) GetCreated() time.Time { +func (m *JobUtilisationEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobUtilisationEvent) GetClusterId() string { @@ -1500,12 +1497,12 @@ func (m *JobUtilisationEvent) GetTotalCumulativeUsage() map[string]resource.Quan } type JobReprioritizingEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` - NewPriority float64 `protobuf:"fixed64,5,opt,name=new_priority,json=newPriority,proto3" json:"newPriority,omitempty"` - Requestor string `protobuf:"bytes,6,opt,name=requestor,proto3" json:"requestor,omitempty"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` + NewPriority float64 `protobuf:"fixed64,5,opt,name=new_priority,json=newPriority,proto3" json:"newPriority,omitempty"` + Requestor string `protobuf:"bytes,6,opt,name=requestor,proto3" json:"requestor,omitempty"` } func (m *JobReprioritizingEvent) Reset() { *m = JobReprioritizingEvent{} } @@ -1561,11 +1558,11 @@ func (m *JobReprioritizingEvent) GetQueue() string { return "" } -func (m *JobReprioritizingEvent) GetCreated() time.Time { +func (m *JobReprioritizingEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobReprioritizingEvent) GetNewPriority() float64 { @@ -1583,12 +1580,12 @@ func (m *JobReprioritizingEvent) GetRequestor() string { } type JobReprioritizedEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` - NewPriority float64 `protobuf:"fixed64,5,opt,name=new_priority,json=newPriority,proto3" json:"newPriority,omitempty"` - Requestor string `protobuf:"bytes,6,opt,name=requestor,proto3" json:"requestor,omitempty"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` + NewPriority float64 `protobuf:"fixed64,5,opt,name=new_priority,json=newPriority,proto3" json:"newPriority,omitempty"` + Requestor string `protobuf:"bytes,6,opt,name=requestor,proto3" json:"requestor,omitempty"` } func (m *JobReprioritizedEvent) Reset() { *m = JobReprioritizedEvent{} } @@ -1644,11 +1641,11 @@ func (m *JobReprioritizedEvent) GetQueue() string { return "" } -func (m *JobReprioritizedEvent) GetCreated() time.Time { +func (m *JobReprioritizedEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobReprioritizedEvent) GetNewPriority() float64 { @@ -1666,12 +1663,12 @@ func (m *JobReprioritizedEvent) GetRequestor() string { } type JobCancellingEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` - Requestor string `protobuf:"bytes,5,opt,name=requestor,proto3" json:"requestor,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` + Requestor string `protobuf:"bytes,5,opt,name=requestor,proto3" json:"requestor,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` } func (m *JobCancellingEvent) Reset() { *m = JobCancellingEvent{} } @@ -1727,11 +1724,11 @@ func (m *JobCancellingEvent) GetQueue() string { return "" } -func (m *JobCancellingEvent) GetCreated() time.Time { +func (m *JobCancellingEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobCancellingEvent) GetRequestor() string { @@ -1749,12 +1746,12 @@ func (m *JobCancellingEvent) GetReason() string { } type JobCancelledEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` - Requestor string `protobuf:"bytes,5,opt,name=requestor,proto3" json:"requestor,omitempty"` - Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` + Requestor string `protobuf:"bytes,5,opt,name=requestor,proto3" json:"requestor,omitempty"` + Reason string `protobuf:"bytes,6,opt,name=reason,proto3" json:"reason,omitempty"` } func (m *JobCancelledEvent) Reset() { *m = JobCancelledEvent{} } @@ -1810,11 +1807,11 @@ func (m *JobCancelledEvent) GetQueue() string { return "" } -func (m *JobCancelledEvent) GetCreated() time.Time { +func (m *JobCancelledEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobCancelledEvent) GetRequestor() string { @@ -1832,16 +1829,16 @@ func (m *JobCancelledEvent) GetReason() string { } type JobTerminatedEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created time.Time `protobuf:"bytes,4,opt,name=created,proto3,stdtime" json:"created"` - ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` - KubernetesId string `protobuf:"bytes,6,opt,name=kubernetes_id,json=kubernetesId,proto3" json:"kubernetesId,omitempty"` - PodNumber int32 `protobuf:"varint,7,opt,name=pod_number,json=podNumber,proto3" json:"podNumber,omitempty"` - PodName string `protobuf:"bytes,9,opt,name=pod_name,json=podName,proto3" json:"podName,omitempty"` - PodNamespace string `protobuf:"bytes,10,opt,name=pod_namespace,json=podNamespace,proto3" json:"podNamespace,omitempty"` - Reason string `protobuf:"bytes,8,opt,name=reason,proto3" json:"reason,omitempty"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` + ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` + KubernetesId string `protobuf:"bytes,6,opt,name=kubernetes_id,json=kubernetesId,proto3" json:"kubernetesId,omitempty"` + PodNumber int32 `protobuf:"varint,7,opt,name=pod_number,json=podNumber,proto3" json:"podNumber,omitempty"` + PodName string `protobuf:"bytes,9,opt,name=pod_name,json=podName,proto3" json:"podName,omitempty"` + PodNamespace string `protobuf:"bytes,10,opt,name=pod_namespace,json=podNamespace,proto3" json:"podNamespace,omitempty"` + Reason string `protobuf:"bytes,8,opt,name=reason,proto3" json:"reason,omitempty"` } func (m *JobTerminatedEvent) Reset() { *m = JobTerminatedEvent{} } @@ -1897,11 +1894,11 @@ func (m *JobTerminatedEvent) GetQueue() string { return "" } -func (m *JobTerminatedEvent) GetCreated() time.Time { +func (m *JobTerminatedEvent) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *JobTerminatedEvent) GetClusterId() string { @@ -2548,154 +2545,153 @@ func init() { func init() { proto.RegisterFile("pkg/api/event.proto", fileDescriptor_7758595c3bb8cf56) } var fileDescriptor_7758595c3bb8cf56 = []byte{ - // 2337 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcf, 0x6f, 0x1b, 0xc7, - 0xf5, 0xd7, 0x52, 0xe2, 0xaf, 0xa1, 0x7e, 0x8e, 0x7e, 0x78, 0x4d, 0xdb, 0xa2, 0xc0, 0x00, 0xdf, - 0x28, 0x46, 0x4c, 0xe6, 0x2b, 0x27, 0x45, 0x60, 0x14, 0x28, 0x4c, 0x45, 0x49, 0x24, 0xc4, 0xb5, - 0x43, 0xd9, 0x48, 0x5b, 0x04, 0x60, 0x96, 0xbb, 0x23, 0x6a, 0x25, 0x72, 0x67, 0xb3, 0x3b, 0x6b, - 0x5b, 0x31, 0x02, 0x14, 0x2d, 0x50, 0xe4, 0x52, 0x34, 0x68, 0x7b, 0x6e, 0x02, 0xf4, 0xd6, 0x53, - 0xff, 0x82, 0x1e, 0x8a, 0x1e, 0x72, 0x74, 0xd1, 0x4b, 0x4e, 0x6c, 0x6b, 0x3b, 0x45, 0xc1, 0x43, - 0xef, 0xbd, 0x15, 0xf3, 0x66, 0x76, 0x39, 0xb3, 0xa6, 0x61, 0x59, 0x69, 0x52, 0x43, 0xe0, 0x25, - 0x31, 0x3f, 0x6f, 0xde, 0x9b, 0x37, 0x6f, 0x3e, 0x3b, 0xef, 0xcd, 0x0f, 0xa1, 0x45, 0xff, 0xb0, - 0x53, 0xb7, 0x7c, 0xb7, 0x4e, 0x6e, 0x13, 0x8f, 0xd5, 0xfc, 0x80, 0x32, 0x8a, 0x27, 0x2d, 0xdf, - 0x2d, 0x57, 0x3a, 0x94, 0x76, 0xba, 0xa4, 0x0e, 0x50, 0x3b, 0xda, 0xab, 0x33, 0xb7, 0x47, 0x42, - 0x66, 0xf5, 0x7c, 0xd1, 0xaa, 0xbc, 0x14, 0xab, 0x86, 0x51, 0xbb, 0xe7, 0xb2, 0x34, 0xba, 0x4f, - 0xac, 0x2e, 0xdb, 0x97, 0xe8, 0xb9, 0xb4, 0x31, 0xd2, 0xf3, 0xd9, 0x91, 0x14, 0x5e, 0xea, 0xb8, - 0x6c, 0x3f, 0x6a, 0xd7, 0x6c, 0xda, 0xab, 0x77, 0x68, 0x87, 0x0e, 0x5b, 0xf1, 0x5f, 0xf0, 0x03, - 0xfe, 0x25, 0x9b, 0x9f, 0x97, 0xb6, 0x78, 0x27, 0x96, 0xe7, 0x51, 0x66, 0x31, 0x97, 0x7a, 0xa1, - 0x94, 0xbe, 0x7a, 0xf8, 0x7a, 0x58, 0x73, 0x29, 0x97, 0xf6, 0x2c, 0x7b, 0xdf, 0xf5, 0x48, 0x70, - 0x54, 0x8f, 0x7d, 0x0a, 0x48, 0x48, 0xa3, 0xc0, 0x26, 0xf5, 0x0e, 0xf1, 0x48, 0x60, 0x31, 0xe2, - 0x08, 0xad, 0xea, 0xaf, 0x33, 0x68, 0x61, 0x87, 0xb6, 0x77, 0x61, 0x24, 0x8c, 0x38, 0x5b, 0x3c, - 0x1a, 0xf8, 0x22, 0xca, 0x1d, 0xd0, 0x76, 0xcb, 0x75, 0x4c, 0x63, 0xcd, 0x58, 0x2f, 0x36, 0x16, - 0x07, 0xfd, 0xca, 0xdc, 0x01, 0x6d, 0x6f, 0x3b, 0x2f, 0xd3, 0x9e, 0xcb, 0x60, 0x0c, 0xcd, 0x2c, - 0x00, 0xf8, 0x55, 0x84, 0x78, 0xdb, 0x90, 0x30, 0xde, 0x3e, 0x03, 0xed, 0x57, 0x06, 0xfd, 0x0a, - 0x3e, 0xa0, 0xed, 0x5d, 0xc2, 0x34, 0x95, 0x42, 0x8c, 0xe1, 0x97, 0x50, 0xf6, 0xc3, 0x88, 0x44, - 0xc4, 0x9c, 0x1c, 0x76, 0x00, 0x80, 0xda, 0x01, 0x00, 0x78, 0x1b, 0xe5, 0xed, 0x80, 0x70, 0x9f, - 0xcd, 0xa9, 0x35, 0x63, 0xbd, 0xb4, 0x51, 0xae, 0x89, 0x40, 0xd4, 0xe2, 0x70, 0xd5, 0x6e, 0xc6, - 0x33, 0xd4, 0x58, 0xfc, 0xa2, 0x5f, 0x99, 0x18, 0xf4, 0x2b, 0xb1, 0xca, 0xa7, 0x7f, 0xad, 0x18, - 0xcd, 0xf8, 0x07, 0x7e, 0x11, 0x4d, 0x1e, 0xd0, 0xb6, 0x99, 0x05, 0x33, 0x85, 0x9a, 0xe5, 0xbb, - 0xb5, 0x1d, 0xda, 0x6e, 0x94, 0xa4, 0x12, 0x17, 0x36, 0xf9, 0x7f, 0xaa, 0xff, 0x34, 0xd0, 0xec, - 0x0e, 0x6d, 0xbf, 0xcb, 0x1d, 0x38, 0xdd, 0x31, 0xa9, 0x7e, 0x9e, 0x81, 0xa1, 0xbe, 0x43, 0xac, - 0xf0, 0xb4, 0x4f, 0xff, 0x77, 0x10, 0xb2, 0xbb, 0x51, 0xc8, 0x48, 0xc0, 0x7d, 0xcd, 0x42, 0xd7, - 0x67, 0x06, 0xfd, 0xca, 0xa2, 0x44, 0x35, 0x67, 0x8b, 0x09, 0x58, 0xfd, 0xc5, 0x14, 0x5a, 0x8e, - 0x43, 0xd4, 0x24, 0x2c, 0x0a, 0xbc, 0x71, 0xa4, 0x46, 0x46, 0x0a, 0xbf, 0x8c, 0x72, 0x01, 0xb1, - 0x42, 0xea, 0x99, 0x39, 0xd0, 0x59, 0x1a, 0xf4, 0x2b, 0xf3, 0x02, 0x51, 0x14, 0x64, 0x1b, 0xfc, - 0x3d, 0x34, 0x73, 0x18, 0xb5, 0x49, 0xe0, 0x11, 0x46, 0x42, 0xde, 0x51, 0x1e, 0x94, 0xca, 0x83, - 0x7e, 0x65, 0x65, 0x28, 0xd0, 0xfa, 0x9a, 0x56, 0x71, 0xee, 0xa6, 0x4f, 0x9d, 0x96, 0x17, 0xf5, - 0xda, 0x24, 0x30, 0x0b, 0x6b, 0xc6, 0x7a, 0x56, 0xb8, 0xe9, 0x53, 0xe7, 0xfb, 0x00, 0xaa, 0x6e, - 0x26, 0x20, 0xef, 0x38, 0x88, 0xbc, 0x96, 0xc5, 0x40, 0x44, 0x1c, 0xb3, 0xb8, 0x66, 0xac, 0x17, - 0x44, 0xc7, 0x41, 0xe4, 0x5d, 0x8d, 0x71, 0xb5, 0x63, 0x15, 0xaf, 0xfe, 0xcb, 0x40, 0x4b, 0x31, - 0x23, 0xb6, 0xee, 0xfa, 0x6e, 0x70, 0xda, 0x57, 0x89, 0x9f, 0x4f, 0xa1, 0xb9, 0x1d, 0xda, 0xbe, - 0x41, 0x3c, 0xc7, 0xf5, 0x3a, 0x63, 0xf2, 0x8f, 0x22, 0xff, 0x63, 0x74, 0xce, 0x7d, 0x2d, 0x3a, - 0xe7, 0x8f, 0x4d, 0xe7, 0x57, 0x50, 0x01, 0xf4, 0xac, 0x1e, 0x81, 0x8f, 0xa0, 0xd8, 0x58, 0x1e, - 0xf4, 0x2b, 0x0b, 0xbc, 0x81, 0xd5, 0x53, 0x63, 0x95, 0x97, 0x10, 0x77, 0x35, 0xd6, 0x08, 0x7d, - 0xcb, 0x26, 0xf0, 0x01, 0x48, 0x57, 0x65, 0x1b, 0xc0, 0x55, 0x57, 0x55, 0xbc, 0xfa, 0x47, 0xc1, - 0x87, 0x66, 0xe4, 0x79, 0x63, 0x3e, 0x7c, 0x53, 0x7c, 0xb8, 0x8c, 0x8a, 0x1e, 0x75, 0x88, 0x98, - 0xd8, 0xfc, 0x30, 0x46, 0x1c, 0x4c, 0xcd, 0x6c, 0x21, 0xc6, 0x4e, 0xbc, 0x26, 0xaa, 0x24, 0x2a, - 0x9e, 0x8c, 0x44, 0xe8, 0x19, 0x49, 0xf4, 0xfb, 0x1c, 0x5a, 0xdc, 0xa1, 0xed, 0x6d, 0xaf, 0x13, - 0x90, 0x30, 0xdc, 0xf6, 0xf6, 0xe8, 0x98, 0x48, 0xa7, 0x8b, 0x48, 0xe8, 0x64, 0x44, 0x2a, 0x3d, - 0x1b, 0x91, 0xf0, 0x3d, 0xb4, 0xe0, 0x0a, 0x12, 0xb5, 0x2c, 0xc7, 0xe1, 0xff, 0x27, 0xa1, 0x59, - 0x5c, 0x9b, 0x5c, 0x2f, 0x6d, 0xd4, 0xe2, 0x2a, 0x3f, 0xcd, 0xb2, 0x9a, 0x04, 0xae, 0xc6, 0x0a, - 0x5b, 0x1e, 0x0b, 0x8e, 0x1a, 0xab, 0x83, 0x7e, 0xa5, 0xec, 0xa6, 0x44, 0x4a, 0xc7, 0xf3, 0x69, - 0x59, 0xf9, 0x10, 0x2d, 0x8f, 0x34, 0x85, 0x5f, 0x40, 0x93, 0x87, 0xe4, 0x08, 0x38, 0x9c, 0x6d, - 0x2c, 0x0c, 0xfa, 0x95, 0x99, 0x43, 0x72, 0xa4, 0x98, 0xe2, 0x52, 0xce, 0xc4, 0xdb, 0x56, 0x37, - 0x22, 0x92, 0xba, 0xc0, 0x44, 0x00, 0x54, 0x26, 0x02, 0x70, 0x25, 0xf3, 0xba, 0x51, 0xfd, 0xf7, - 0x14, 0x32, 0x77, 0x68, 0xfb, 0x96, 0x67, 0xb5, 0xbb, 0xe4, 0x26, 0xdd, 0xb5, 0xf7, 0x89, 0x13, - 0x75, 0xc9, 0xf8, 0xbb, 0x79, 0x0e, 0xaa, 0x51, 0xed, 0x2b, 0x2b, 0x9c, 0xe8, 0x2b, 0x2b, 0x3e, - 0xc7, 0x5f, 0x59, 0xf5, 0x7e, 0x1e, 0x76, 0x8a, 0x6f, 0x5a, 0x6e, 0x77, 0xbc, 0xff, 0xf9, 0x6f, - 0x30, 0xee, 0x7d, 0x84, 0xc8, 0x5d, 0x97, 0xb5, 0x6c, 0xea, 0x90, 0xd0, 0xcc, 0xc3, 0x7a, 0x55, - 0x8d, 0xd7, 0x2b, 0x25, 0xcc, 0xb5, 0xad, 0xbb, 0x2e, 0xdb, 0xe4, 0x8d, 0xc4, 0x1a, 0x75, 0x96, - 0x7b, 0x42, 0x62, 0x6c, 0x68, 0xd8, 0x34, 0x9a, 0xc5, 0x04, 0x7e, 0x9c, 0xcf, 0x85, 0xaf, 0xc3, - 0xe7, 0xe2, 0x89, 0xf8, 0x8c, 0x4e, 0xc4, 0xe7, 0x99, 0x93, 0xf1, 0x79, 0xf6, 0x19, 0xb3, 0x86, - 0x83, 0xb0, 0x4d, 0x3d, 0x66, 0xb9, 0x1e, 0x09, 0x5a, 0x21, 0xb3, 0x58, 0xc4, 0xd3, 0x46, 0x09, - 0xa6, 0x61, 0x09, 0xa6, 0x61, 0x33, 0x16, 0xef, 0x82, 0xb4, 0x51, 0x19, 0xf4, 0x2b, 0xe7, 0x6c, - 0x1d, 0xd4, 0xb2, 0xc3, 0xc2, 0x63, 0x42, 0xfc, 0x1a, 0xca, 0xda, 0x56, 0x14, 0x12, 0x73, 0x7a, - 0xcd, 0x58, 0x9f, 0xdd, 0x40, 0xc2, 0x30, 0x47, 0x04, 0x99, 0x41, 0xa8, 0x92, 0x19, 0x80, 0xb2, - 0x83, 0x66, 0xf5, 0x59, 0x57, 0xd3, 0x49, 0xf1, 0x78, 0xe9, 0x24, 0xfb, 0xd4, 0x74, 0xf2, 0xdb, - 0x0c, 0xc2, 0x7c, 0x5b, 0x17, 0x10, 0x2e, 0x3a, 0xf5, 0x95, 0xfc, 0x6b, 0xa8, 0x18, 0x90, 0x0f, - 0x23, 0x12, 0x32, 0x1a, 0xa8, 0x5f, 0x75, 0x02, 0xaa, 0xdc, 0x4c, 0xc0, 0xea, 0x57, 0x93, 0x70, - 0x48, 0x2a, 0xa3, 0x34, 0x5e, 0xfb, 0x46, 0xaf, 0x7d, 0x17, 0x51, 0x2e, 0x88, 0xbc, 0x61, 0x79, - 0x0a, 0xee, 0x06, 0x91, 0xa7, 0xc7, 0x03, 0x00, 0xbc, 0x8d, 0x16, 0x7c, 0xc9, 0xb9, 0xdb, 0xa4, - 0x25, 0xc3, 0x28, 0xf2, 0xed, 0x85, 0x41, 0xbf, 0x72, 0x76, 0x28, 0xdc, 0x49, 0x05, 0x74, 0x2e, - 0x25, 0x4a, 0x99, 0x92, 0x1e, 0x14, 0x46, 0x99, 0x6a, 0xa6, 0x7c, 0x99, 0x4b, 0x89, 0xaa, 0x7f, - 0x9a, 0x92, 0x87, 0xe1, 0xb6, 0x4d, 0x88, 0x33, 0x9e, 0xe7, 0xf1, 0xb6, 0xf6, 0x44, 0xdb, 0xda, - 0xcf, 0x8a, 0xb0, 0xad, 0xbd, 0xc5, 0xdc, 0xae, 0x1b, 0xc2, 0x1d, 0xcd, 0x98, 0x48, 0xdf, 0x08, - 0x91, 0x3e, 0x31, 0xd0, 0xf2, 0x35, 0xeb, 0x6e, 0x53, 0x5e, 0x6e, 0x85, 0x6f, 0xd2, 0xe0, 0x06, - 0x09, 0x5c, 0xea, 0xc8, 0x5a, 0xea, 0x72, 0x5c, 0x4b, 0xa5, 0xa7, 0xa2, 0x36, 0x52, 0x4b, 0x14, - 0x57, 0x17, 0xe4, 0x58, 0x47, 0x5b, 0x6e, 0x8e, 0x86, 0x4f, 0x7b, 0xed, 0x8f, 0x7f, 0x66, 0xa0, - 0x15, 0x46, 0x99, 0xd5, 0x6d, 0xd9, 0x51, 0x2f, 0xea, 0x5a, 0xb0, 0xd8, 0x46, 0xa1, 0xd5, 0xe1, - 0x75, 0x0d, 0x8f, 0xf5, 0xc6, 0x13, 0x63, 0x7d, 0x93, 0xab, 0x6d, 0x26, 0x5a, 0xb7, 0xb8, 0x92, - 0x08, 0xf5, 0x79, 0x19, 0xea, 0x25, 0x36, 0xa2, 0x49, 0x73, 0x24, 0x5a, 0xfe, 0xdc, 0x40, 0xe5, - 0x27, 0xcf, 0xde, 0xf1, 0x8a, 0xa4, 0x1f, 0xaa, 0x45, 0x52, 0x69, 0xa3, 0x56, 0x13, 0x57, 0xa7, - 0x35, 0xf5, 0xea, 0xb4, 0xe6, 0x1f, 0x76, 0x60, 0x48, 0xf1, 0xd5, 0x69, 0xed, 0xdd, 0xc8, 0xf2, - 0x98, 0xcb, 0x8e, 0x9e, 0x56, 0x54, 0x95, 0x3f, 0x33, 0xd0, 0xd9, 0x27, 0x0e, 0xfa, 0x79, 0xf0, - 0xb0, 0xfa, 0x55, 0x06, 0xad, 0xec, 0xd0, 0x76, 0x93, 0xf8, 0x81, 0x4b, 0x03, 0x97, 0xb9, 0x1f, - 0x9d, 0xfa, 0xd2, 0xef, 0xbb, 0x68, 0xda, 0x23, 0x77, 0x5a, 0x72, 0xc0, 0x47, 0xb0, 0x4c, 0x19, - 0xb0, 0x93, 0x5a, 0xf6, 0xc8, 0x9d, 0x1b, 0x12, 0x56, 0x5c, 0x28, 0x29, 0xb0, 0x5e, 0x38, 0xe6, - 0x8e, 0x5d, 0x38, 0x3e, 0xca, 0xc0, 0xc5, 0xa1, 0x12, 0xe7, 0xd3, 0x5e, 0x54, 0xfc, 0x4f, 0xc2, - 0xfc, 0x67, 0xb1, 0x8b, 0xd9, 0xb4, 0x3c, 0x9b, 0x74, 0xbb, 0xe3, 0x5d, 0xcc, 0xc8, 0x28, 0x3d, - 0xdb, 0xd9, 0x44, 0xf5, 0xbe, 0x78, 0x18, 0x22, 0x63, 0x7a, 0xda, 0x69, 0xfb, 0xad, 0x84, 0xf4, - 0x0f, 0x53, 0x40, 0xd3, 0x9b, 0x24, 0xe8, 0xb9, 0x9e, 0x35, 0xde, 0x47, 0x3e, 0xcf, 0xd7, 0xa8, - 0xdf, 0xce, 0x56, 0x41, 0x21, 0x50, 0xe1, 0x18, 0x04, 0x7a, 0x34, 0x8d, 0xa6, 0x81, 0x33, 0xd7, - 0x48, 0xc8, 0x0b, 0x0a, 0x7c, 0x1d, 0x15, 0xc3, 0xf8, 0xe5, 0x16, 0xb0, 0xa7, 0xb4, 0xb1, 0x12, - 0xd7, 0x61, 0xfa, 0x93, 0x2e, 0x11, 0x80, 0xa4, 0xf1, 0xd0, 0xf8, 0xdb, 0x13, 0xcd, 0xa1, 0x0d, - 0xbc, 0x89, 0x72, 0xc0, 0x03, 0x47, 0x16, 0x1e, 0x8b, 0xb1, 0x35, 0xe5, 0x25, 0x94, 0x70, 0x52, - 0x34, 0xd3, 0xec, 0x48, 0x55, 0x6e, 0xa4, 0x0b, 0xaf, 0x89, 0x80, 0x6f, 0x8a, 0x11, 0xe5, 0x8d, - 0x91, 0x30, 0x22, 0x9a, 0xe9, 0x46, 0x04, 0x86, 0x3f, 0x40, 0xb3, 0xf0, 0xaf, 0x56, 0x20, 0x1f, - 0xdc, 0x24, 0x7c, 0x54, 0x8d, 0x69, 0xaf, 0x71, 0x1a, 0xe7, 0x06, 0xfd, 0xca, 0x99, 0xae, 0x8a, - 0x6b, 0xa6, 0x67, 0x34, 0x11, 0x7e, 0x1f, 0x09, 0xa0, 0x45, 0xc4, 0x03, 0x0e, 0xf9, 0x2c, 0xec, - 0xac, 0xd6, 0x81, 0xfa, 0xb8, 0x43, 0xcc, 0x6b, 0x57, 0x81, 0x35, 0xf3, 0xd3, 0xaa, 0x04, 0xbf, - 0x85, 0xf2, 0xbe, 0x78, 0x2c, 0x01, 0xfc, 0x8d, 0x4f, 0x14, 0x53, 0x6f, 0x28, 0x24, 0xc3, 0x04, - 0xa2, 0x59, 0x8b, 0xb5, 0xb9, 0xa1, 0x40, 0xdc, 0xb2, 0x03, 0x95, 0x15, 0x43, 0xea, 0xe5, 0xbb, - 0x30, 0x24, 0x1b, 0xea, 0x86, 0x24, 0x88, 0x7b, 0x08, 0x47, 0x70, 0x6d, 0xd4, 0x62, 0xb4, 0x15, - 0xca, 0x8b, 0x23, 0xe0, 0x5d, 0x69, 0xe3, 0x42, 0x52, 0xbd, 0x8f, 0xba, 0x58, 0x12, 0x97, 0x62, - 0x51, 0x4a, 0xa4, 0xf5, 0x32, 0x9f, 0x96, 0x72, 0x16, 0xec, 0xc1, 0x11, 0x36, 0x7c, 0x4b, 0x0a, - 0x0b, 0x94, 0x83, 0x6d, 0xc1, 0x02, 0xd1, 0x4c, 0x67, 0x81, 0xc0, 0x04, 0xc1, 0xe5, 0x69, 0x0c, - 0x7c, 0x5c, 0x1a, 0xc1, 0xd5, 0x63, 0x9a, 0x98, 0xe0, 0x12, 0x4b, 0x13, 0x5c, 0xc2, 0xb8, 0x85, - 0x66, 0x02, 0xb5, 0x1a, 0x83, 0x8d, 0x90, 0xc2, 0xaa, 0xc7, 0x4b, 0x35, 0xc1, 0x2a, 0x4d, 0x49, - 0x67, 0x95, 0x26, 0xc2, 0xbb, 0x08, 0xd9, 0x49, 0x1d, 0x02, 0x67, 0xbe, 0xa5, 0x8d, 0x33, 0xb1, - 0xf5, 0x54, 0x85, 0xd2, 0x30, 0xf9, 0xe6, 0x67, 0xd8, 0x5c, 0xb3, 0xab, 0x98, 0xe1, 0x61, 0xb0, - 0xe3, 0x44, 0x0c, 0xa7, 0xe3, 0x4a, 0x18, 0xf4, 0x0c, 0x2d, 0x57, 0xd8, 0x18, 0xd3, 0xc3, 0x90, - 0xc0, 0xdc, 0x4b, 0x96, 0xa4, 0x21, 0x38, 0x38, 0x57, 0xbc, 0x4c, 0x25, 0x28, 0xe1, 0xe5, 0xb0, - 0xb9, 0xee, 0xe5, 0x10, 0xc7, 0xef, 0xa1, 0x52, 0x34, 0xdc, 0xfc, 0x99, 0x73, 0x60, 0xd5, 0x7c, - 0xd2, 0xbe, 0x50, 0x14, 0x85, 0x8a, 0x82, 0x66, 0x57, 0xb5, 0x84, 0x7f, 0x80, 0xa6, 0xe3, 0xeb, - 0x5d, 0xd7, 0xdb, 0xa3, 0xe6, 0x82, 0x6e, 0x39, 0x7d, 0xb3, 0x2b, 0x2c, 0xbb, 0x43, 0x54, 0xb7, - 0xac, 0x08, 0xb0, 0x8d, 0x66, 0x03, 0x6d, 0x13, 0x64, 0x62, 0xb0, 0x7d, 0x6e, 0x04, 0x1f, 0x92, - 0x59, 0x3b, 0x3f, 0xe8, 0x57, 0x4c, 0x5d, 0x4d, 0xeb, 0x21, 0x65, 0x92, 0xcf, 0x9e, 0x1f, 0x1f, - 0x1d, 0x9b, 0xcb, 0xfa, 0xec, 0xe9, 0x67, 0xca, 0x32, 0x4d, 0xc5, 0x98, 0x3e, 0x7b, 0x09, 0xcc, - 0x67, 0xcf, 0x4f, 0x4e, 0xec, 0xcd, 0x15, 0x7d, 0xf6, 0x52, 0x67, 0xf9, 0x62, 0xf6, 0x86, 0xcd, - 0xf5, 0xd9, 0x1b, 0xe2, 0x8d, 0x02, 0xca, 0xc1, 0x53, 0xe8, 0xb0, 0xfa, 0xd3, 0x0c, 0x9a, 0x4b, - 0xdd, 0x7c, 0xe0, 0xff, 0x43, 0x53, 0x90, 0x17, 0x45, 0x89, 0x82, 0x07, 0xfd, 0xca, 0xac, 0xa7, - 0x27, 0x45, 0x90, 0xe3, 0x0d, 0x54, 0x88, 0x6f, 0xa0, 0xe4, 0x15, 0x04, 0x94, 0x27, 0x31, 0xa6, - 0x96, 0x27, 0x31, 0x86, 0xeb, 0x28, 0xdf, 0x13, 0x09, 0x4d, 0x16, 0x28, 0xb0, 0x96, 0x49, 0x48, - 0x4d, 0xbb, 0x12, 0x52, 0xb2, 0xe6, 0xd4, 0x31, 0x6e, 0xd9, 0x92, 0x0b, 0x98, 0xec, 0xb3, 0x5c, - 0xc0, 0x54, 0x3f, 0x42, 0x18, 0x02, 0xb8, 0xcb, 0x02, 0x62, 0xf5, 0xe2, 0x8c, 0xbb, 0x86, 0x32, - 0x49, 0xa1, 0x36, 0x3f, 0xe8, 0x57, 0xa6, 0x5d, 0xb5, 0x0e, 0xc9, 0xb8, 0x0e, 0x6e, 0x0c, 0x47, - 0x23, 0x72, 0xe8, 0x02, 0x74, 0xa8, 0xe6, 0xed, 0xa7, 0x0d, 0xb0, 0xfa, 0xcb, 0x0c, 0x9a, 0xd9, - 0x81, 0xea, 0xad, 0x29, 0x6a, 0xcd, 0x63, 0xf4, 0xfb, 0x12, 0xca, 0xde, 0xb1, 0x98, 0xbd, 0x0f, - 0xbd, 0x16, 0xc4, 0xd0, 0x00, 0x50, 0x87, 0x06, 0x00, 0xde, 0x44, 0x73, 0x7b, 0x01, 0xed, 0xb5, - 0x64, 0x77, 0xbc, 0xc6, 0x12, 0x81, 0x87, 0xa5, 0x8e, 0x8b, 0xa4, 0xa3, 0x5a, 0x91, 0x35, 0xa3, - 0x09, 0x86, 0x45, 0xe5, 0xd4, 0x53, 0x8b, 0xca, 0x37, 0xd0, 0x2c, 0x09, 0x02, 0x1a, 0x6c, 0xef, - 0x5d, 0x73, 0xc3, 0x90, 0x73, 0x36, 0x0b, 0x3e, 0xc2, 0x87, 0xa4, 0x4b, 0x14, 0xe5, 0x94, 0x4e, - 0xf5, 0x37, 0x06, 0x9a, 0x7e, 0x8f, 0xfb, 0x1f, 0xc7, 0x24, 0xf1, 0xc0, 0x78, 0xaa, 0x07, 0x27, - 0xab, 0x9b, 0x2f, 0xa1, 0x3c, 0xc4, 0x29, 0x89, 0x8f, 0x48, 0x57, 0x01, 0xed, 0x69, 0x0a, 0x39, - 0x81, 0x5c, 0x7c, 0x07, 0x65, 0x81, 0x56, 0xb8, 0x88, 0xb2, 0x5b, 0xdc, 0xf7, 0xf9, 0x09, 0x5c, - 0x42, 0xf9, 0xad, 0xdb, 0xae, 0xcd, 0x88, 0x33, 0x6f, 0xe0, 0x3c, 0x9a, 0xbc, 0x7e, 0xfd, 0xda, - 0x7c, 0x06, 0x2f, 0xa1, 0xf9, 0x37, 0x88, 0xe5, 0x74, 0x5d, 0x8f, 0x6c, 0xdd, 0x15, 0x99, 0x69, - 0x7e, 0x12, 0x4f, 0xa3, 0x42, 0x93, 0x1c, 0x10, 0x68, 0x3c, 0xb5, 0xf1, 0x0f, 0x03, 0x65, 0xc5, - 0x06, 0x81, 0xa0, 0xb9, 0xb7, 0x08, 0x13, 0x7c, 0x00, 0x24, 0xc4, 0x38, 0x49, 0x82, 0x09, 0x45, - 0xca, 0x67, 0x86, 0x3c, 0xd3, 0x38, 0x5b, 0x7d, 0xe1, 0x27, 0x7f, 0x79, 0xf4, 0xab, 0xcc, 0x85, - 0xaa, 0x59, 0xbf, 0xfd, 0xff, 0xf5, 0x03, 0xda, 0xbe, 0x14, 0x12, 0x56, 0xbf, 0x07, 0x81, 0xf9, - 0xb8, 0x7e, 0xcf, 0x75, 0x3e, 0xbe, 0x62, 0x5c, 0x7c, 0xc5, 0xc0, 0x57, 0x50, 0x16, 0xc2, 0x8b, - 0x05, 0x61, 0xd5, 0x50, 0x3f, 0xd9, 0xf6, 0xe4, 0x27, 0x19, 0x03, 0x74, 0x73, 0x6f, 0xc3, 0x9f, - 0x3d, 0xe0, 0x95, 0xc7, 0xf6, 0x0b, 0x5b, 0x3c, 0x48, 0x65, 0xb1, 0x5a, 0x8b, 0x46, 0x9b, 0xfb, - 0xc4, 0x3e, 0x6c, 0x92, 0xd0, 0xa7, 0x5e, 0x48, 0x1a, 0x1f, 0x7c, 0xf9, 0xf7, 0xd5, 0x89, 0x1f, - 0x3f, 0x58, 0x35, 0xbe, 0x78, 0xb0, 0x6a, 0xdc, 0x7f, 0xb0, 0x6a, 0xfc, 0xed, 0xc1, 0xaa, 0xf1, - 0xe9, 0xc3, 0xd5, 0x89, 0xfb, 0x0f, 0x57, 0x27, 0xbe, 0x7c, 0xb8, 0x3a, 0xf1, 0xa3, 0x17, 0x95, - 0xbf, 0x93, 0xb0, 0x82, 0x9e, 0xe5, 0x58, 0x7e, 0x40, 0x79, 0xa0, 0xe4, 0xaf, 0xf8, 0xcf, 0x1c, - 0x7e, 0x97, 0x59, 0xba, 0x0a, 0xc0, 0x0d, 0x21, 0xae, 0x6d, 0xd3, 0xda, 0x55, 0xdf, 0x6d, 0xe7, - 0xc0, 0x97, 0xcb, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xf6, 0xfc, 0x80, 0xa6, 0xf4, 0x31, 0x00, - 0x00, + // 2333 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcd, 0x6f, 0x1b, 0xc7, + 0x15, 0xd7, 0x52, 0xe2, 0xd7, 0x50, 0x9f, 0x63, 0x49, 0x5e, 0xd3, 0xb6, 0x28, 0x30, 0x40, 0xa3, + 0x18, 0x31, 0x99, 0xca, 0x49, 0x11, 0x18, 0x05, 0x0a, 0x53, 0x51, 0x12, 0xa9, 0x71, 0xed, 0x50, + 0x36, 0xd2, 0x16, 0x01, 0x98, 0xe5, 0xee, 0x88, 0x5a, 0x89, 0xdc, 0xd9, 0xec, 0xce, 0xda, 0x56, + 0x8c, 0x00, 0x45, 0x0b, 0x14, 0xb9, 0xf5, 0x0b, 0xe8, 0xb1, 0x5f, 0x40, 0x2f, 0x3d, 0xf6, 0x2f, + 0xe8, 0xa1, 0x28, 0x72, 0x0c, 0x92, 0x4b, 0x4e, 0x44, 0x6b, 0x07, 0x09, 0xc0, 0x53, 0xef, 0xbd, + 0x14, 0xf3, 0x66, 0x76, 0x39, 0xb3, 0xa6, 0x60, 0x59, 0x69, 0x52, 0x43, 0xe1, 0xc5, 0x96, 0x7e, + 0x6f, 0xde, 0x9b, 0xb7, 0x6f, 0x7e, 0x33, 0xef, 0xcd, 0x87, 0xd0, 0x19, 0xff, 0xa0, 0x53, 0xb7, + 0x7c, 0xb7, 0x4e, 0xee, 0x10, 0x8f, 0xd5, 0xfc, 0x80, 0x32, 0x8a, 0x27, 0x2d, 0xdf, 0x2d, 0x57, + 0x3a, 0x94, 0x76, 0xba, 0xa4, 0x0e, 0x50, 0x3b, 0xda, 0xad, 0x33, 0xb7, 0x47, 0x42, 0x66, 0xf5, + 0x7c, 0xd1, 0xaa, 0xbc, 0x18, 0xab, 0x86, 0x51, 0xbb, 0xe7, 0xb2, 0x34, 0xba, 0x47, 0xac, 0x2e, + 0xdb, 0x93, 0xe8, 0xf9, 0xb4, 0x31, 0xd2, 0xf3, 0xd9, 0xa1, 0x14, 0x5e, 0xee, 0xb8, 0x6c, 0x2f, + 0x6a, 0xd7, 0x6c, 0xda, 0xab, 0x77, 0x68, 0x87, 0x0e, 0x5b, 0xf1, 0xdf, 0xe0, 0x17, 0xf8, 0x49, + 0x36, 0xbf, 0x20, 0x6d, 0xf1, 0x4e, 0x2c, 0xcf, 0xa3, 0xcc, 0x62, 0x2e, 0xf5, 0x42, 0x29, 0x7d, + 0xf1, 0xe0, 0xe5, 0xb0, 0xe6, 0x52, 0x2e, 0xed, 0x59, 0xf6, 0x9e, 0xeb, 0x91, 0xe0, 0xb0, 0x1e, + 0xfb, 0x14, 0x90, 0x90, 0x46, 0x81, 0x4d, 0xea, 0x1d, 0xe2, 0x91, 0xc0, 0x62, 0xc4, 0x11, 0x5a, + 0xd5, 0xdf, 0x66, 0xd0, 0xc2, 0x36, 0x6d, 0xef, 0xc0, 0x97, 0x30, 0xe2, 0x6c, 0xf2, 0x68, 0xe0, + 0x4b, 0x28, 0xb7, 0x4f, 0xdb, 0x2d, 0xd7, 0x31, 0x8d, 0x55, 0x63, 0xad, 0xd8, 0x38, 0x33, 0xe8, + 0x57, 0xe6, 0xf6, 0x69, 0x7b, 0xcb, 0x79, 0x9e, 0xf6, 0x5c, 0x06, 0xdf, 0xd0, 0xcc, 0x02, 0x80, + 0x5f, 0x44, 0x88, 0xb7, 0x0d, 0x09, 0xe3, 0xed, 0x33, 0xd0, 0x7e, 0x79, 0xd0, 0xaf, 0xe0, 0x7d, + 0xda, 0xde, 0x21, 0x4c, 0x53, 0x29, 0xc4, 0x18, 0x7e, 0x0e, 0x65, 0xdf, 0x8d, 0x48, 0x44, 0xcc, + 0xc9, 0x61, 0x07, 0x00, 0xa8, 0x1d, 0x00, 0x80, 0xbf, 0x8f, 0xf2, 0x76, 0x40, 0xb8, 0xcf, 0xe6, + 0xd4, 0xaa, 0xb1, 0x56, 0x5a, 0x2f, 0xd7, 0x44, 0x20, 0x6a, 0x71, 0xb8, 0x6a, 0xb7, 0xe2, 0x11, + 0x6a, 0x2c, 0x0d, 0xfa, 0x95, 0x05, 0xd9, 0x5c, 0x31, 0x15, 0x5b, 0xc0, 0xcf, 0xa2, 0xc9, 0x7d, + 0xda, 0x36, 0xb3, 0x60, 0xa8, 0x50, 0xb3, 0x7c, 0xb7, 0xb6, 0x4d, 0xdb, 0x8d, 0xd2, 0x87, 0xfd, + 0xca, 0xc4, 0xa0, 0x5f, 0xe1, 0xc2, 0x26, 0xff, 0xa7, 0x3a, 0x30, 0xd0, 0xec, 0x36, 0x6d, 0xbf, + 0xc9, 0x5d, 0x38, 0xed, 0x51, 0xa9, 0xfe, 0x29, 0x03, 0x1f, 0xfb, 0x06, 0xb1, 0xc2, 0xd3, 0x4f, + 0x81, 0xef, 0x20, 0x64, 0x77, 0xa3, 0x90, 0x91, 0x80, 0x7b, 0x9b, 0x85, 0xce, 0xcf, 0x0e, 0xfa, + 0x95, 0x33, 0x12, 0xd5, 0xdc, 0x2d, 0x26, 0x60, 0xf5, 0x57, 0x53, 0x68, 0x29, 0x0e, 0x52, 0x93, + 0xb0, 0x28, 0xf0, 0xc6, 0xb1, 0x3a, 0x22, 0x56, 0xf8, 0x79, 0x94, 0x0b, 0x88, 0x15, 0x52, 0xcf, + 0xcc, 0x81, 0xce, 0xe2, 0xa0, 0x5f, 0x99, 0x17, 0x88, 0xa2, 0x20, 0xdb, 0xe0, 0xef, 0xa1, 0x99, + 0x83, 0xa8, 0x4d, 0x02, 0x8f, 0x30, 0x12, 0xf2, 0x8e, 0xf2, 0xa0, 0x54, 0x1e, 0xf4, 0x2b, 0xcb, + 0x43, 0x81, 0xd6, 0xd7, 0xb4, 0x8a, 0x73, 0x37, 0x7d, 0xea, 0xb4, 0xbc, 0xa8, 0xd7, 0x26, 0x81, + 0x59, 0x58, 0x35, 0xd6, 0xb2, 0xc2, 0x4d, 0x9f, 0x3a, 0x3f, 0x00, 0x50, 0x75, 0x33, 0x01, 0x79, + 0xc7, 0x41, 0xe4, 0xb5, 0x2c, 0x06, 0x22, 0xe2, 0x98, 0xc5, 0x55, 0x63, 0xad, 0x20, 0x3a, 0x0e, + 0x22, 0xef, 0x5a, 0x8c, 0xab, 0x1d, 0xab, 0x78, 0xf5, 0xdf, 0x06, 0x5a, 0x8c, 0x39, 0xb1, 0x79, + 0xcf, 0x77, 0x83, 0xd3, 0xbf, 0x56, 0xfc, 0x62, 0x0a, 0xcd, 0x6d, 0xd3, 0xf6, 0x4d, 0xe2, 0x39, + 0xae, 0xd7, 0x19, 0x4f, 0x80, 0xd1, 0x13, 0xe0, 0x11, 0x4a, 0xe7, 0xbe, 0x14, 0xa5, 0xf3, 0xc7, + 0xa6, 0xf4, 0x0b, 0xa8, 0x00, 0x7a, 0x56, 0x8f, 0xc0, 0x44, 0x28, 0x8a, 0x4f, 0xe4, 0x0d, 0xac, + 0x9e, 0x1a, 0xad, 0xbc, 0x84, 0xb8, 0xab, 0xb1, 0x46, 0xe8, 0x5b, 0x36, 0x81, 0x49, 0x20, 0x5d, + 0x95, 0x6d, 0x00, 0x57, 0x5d, 0x55, 0xf1, 0xea, 0xdf, 0x05, 0x23, 0x9a, 0x91, 0xe7, 0x8d, 0x19, + 0xf1, 0xd5, 0x31, 0xe2, 0x0a, 0x2a, 0x7a, 0xd4, 0x21, 0x62, 0x68, 0xf3, 0xc3, 0x28, 0x71, 0x30, + 0x35, 0xb6, 0x85, 0x18, 0x3b, 0xf1, 0xca, 0xa8, 0xd2, 0xa8, 0x78, 0x32, 0x1a, 0xa1, 0x27, 0xa4, + 0xd1, 0x5f, 0x73, 0xe8, 0xcc, 0x36, 0x6d, 0x6f, 0x79, 0x9d, 0x80, 0x84, 0xe1, 0x96, 0xb7, 0x4b, + 0xc7, 0x54, 0x3a, 0x6d, 0x54, 0x42, 0x27, 0xa3, 0x52, 0xe9, 0xc9, 0xa8, 0x84, 0xef, 0xa3, 0x05, + 0x57, 0xd0, 0xa8, 0x65, 0x39, 0x0e, 0xff, 0x9f, 0x84, 0x66, 0x71, 0x75, 0x72, 0xad, 0xb4, 0x5e, + 0x8b, 0x6b, 0xfe, 0x34, 0xcf, 0x6a, 0x12, 0xb8, 0x16, 0x2b, 0x6c, 0x7a, 0x2c, 0x38, 0x6c, 0xac, + 0x0c, 0xfa, 0x95, 0xb2, 0x9b, 0x12, 0x29, 0x1d, 0xcf, 0xa7, 0x65, 0xe5, 0x03, 0xb4, 0x34, 0xd2, + 0x14, 0x7e, 0x06, 0x4d, 0x1e, 0x90, 0x43, 0x60, 0x71, 0xb6, 0xb1, 0x30, 0xe8, 0x57, 0x66, 0x0e, + 0xc8, 0xa1, 0x62, 0x8a, 0x4b, 0x39, 0x17, 0xef, 0x58, 0xdd, 0x88, 0x48, 0xf2, 0x02, 0x17, 0x01, + 0x50, 0xb9, 0x08, 0xc0, 0xd5, 0xcc, 0xcb, 0x46, 0xf5, 0x3f, 0x53, 0xc8, 0xdc, 0xa6, 0xed, 0xdb, + 0x9e, 0xd5, 0xee, 0x92, 0x5b, 0x74, 0xc7, 0xde, 0x23, 0x4e, 0xd4, 0x25, 0xe3, 0x99, 0xf3, 0x54, + 0xd4, 0xa5, 0xda, 0x3c, 0x2b, 0x9c, 0x68, 0x9e, 0x15, 0x9f, 0xe2, 0x79, 0x56, 0xfd, 0x38, 0x0f, + 0xfb, 0xc6, 0x57, 0x2d, 0xb7, 0x3b, 0xde, 0x0b, 0xfd, 0x6f, 0x38, 0xf7, 0x36, 0x42, 0xe4, 0x9e, + 0xcb, 0x5a, 0x36, 0x75, 0x48, 0x68, 0xe6, 0x61, 0xcd, 0xaa, 0xc6, 0x6b, 0x96, 0x12, 0xe8, 0xda, + 0xe6, 0x3d, 0x97, 0x6d, 0xf0, 0x46, 0x62, 0x9d, 0x3a, 0xc7, 0x3d, 0x21, 0x31, 0x36, 0x34, 0x6c, + 0x1a, 0xcd, 0x62, 0x02, 0x3f, 0xca, 0xe8, 0xc2, 0x97, 0x61, 0x74, 0xf1, 0x44, 0x8c, 0x46, 0x27, + 0x62, 0xf4, 0xcc, 0xc9, 0x18, 0x3d, 0xfb, 0x84, 0x99, 0xc3, 0x41, 0xd8, 0xa6, 0x1e, 0xb3, 0x5c, + 0x8f, 0x04, 0xad, 0x90, 0x59, 0x2c, 0xe2, 0xa9, 0xa3, 0x04, 0xc3, 0xb0, 0x08, 0xc3, 0xb0, 0x11, + 0x8b, 0x77, 0x40, 0xda, 0xa8, 0x0c, 0xfa, 0x95, 0xf3, 0xb6, 0x0e, 0x6a, 0x19, 0x62, 0xe1, 0x11, + 0x21, 0x7e, 0x09, 0x65, 0x6d, 0x2b, 0x0a, 0x89, 0x39, 0xbd, 0x6a, 0xac, 0xcd, 0xae, 0x23, 0x61, + 0x98, 0x23, 0x82, 0xce, 0x20, 0x54, 0xe9, 0x0c, 0x40, 0xd9, 0x41, 0xb3, 0xfa, 0xa8, 0xab, 0x29, + 0xa5, 0x78, 0xbc, 0x94, 0x92, 0x7d, 0x6c, 0x4a, 0xf9, 0x73, 0x06, 0x61, 0xbe, 0xc1, 0x0b, 0x08, + 0x17, 0x7d, 0x03, 0x2a, 0xfa, 0x97, 0x50, 0x31, 0x20, 0xef, 0x46, 0x24, 0x64, 0x34, 0x50, 0xe7, + 0x75, 0x02, 0xaa, 0xec, 0x4c, 0xc0, 0xea, 0x17, 0x93, 0x70, 0x74, 0x2a, 0xe3, 0x34, 0x5e, 0xff, + 0x8e, 0x5a, 0xff, 0x2e, 0xa1, 0x5c, 0x10, 0x79, 0xc3, 0x32, 0x15, 0x1c, 0x0e, 0x22, 0x4f, 0x8f, + 0x08, 0x00, 0x78, 0x0b, 0x2d, 0xf8, 0x92, 0x77, 0x77, 0x48, 0x4b, 0x06, 0x52, 0x64, 0xdd, 0x8b, + 0x83, 0x7e, 0xe5, 0xdc, 0x50, 0xb8, 0x9d, 0x0a, 0xe9, 0x5c, 0x4a, 0x94, 0x32, 0x25, 0x3d, 0x28, + 0x8c, 0x32, 0xd5, 0x4c, 0xf9, 0x32, 0x97, 0x12, 0x55, 0xff, 0x31, 0x25, 0x0f, 0xc9, 0x6d, 0x9b, + 0x10, 0x67, 0x3c, 0xd2, 0xe3, 0x2d, 0xee, 0x09, 0xb7, 0xb8, 0x7f, 0x2c, 0xc2, 0x16, 0xf7, 0x36, + 0x73, 0xbb, 0x6e, 0x08, 0xb7, 0x37, 0x63, 0x2a, 0x7d, 0x45, 0x54, 0xfa, 0xc0, 0x40, 0x4b, 0xd7, + 0xad, 0x7b, 0x4d, 0x79, 0xf1, 0x15, 0xbe, 0x4a, 0x83, 0x9b, 0x24, 0x70, 0xa9, 0x23, 0x6b, 0xaa, + 0x2b, 0x71, 0x4d, 0x95, 0x1e, 0x8c, 0xda, 0x48, 0x2d, 0x51, 0x64, 0x5d, 0x94, 0xd7, 0x44, 0xa3, + 0x2d, 0x37, 0x47, 0xc3, 0xa7, 0x7d, 0x17, 0x80, 0x7f, 0x6e, 0xa0, 0x65, 0x46, 0x99, 0xd5, 0x6d, + 0xd9, 0x51, 0x2f, 0xea, 0x5a, 0xb0, 0xe0, 0x46, 0xa1, 0xd5, 0xe1, 0xf5, 0x0d, 0x8f, 0xf5, 0xfa, + 0x91, 0xb1, 0xbe, 0xc5, 0xd5, 0x36, 0x12, 0xad, 0xdb, 0x5c, 0x49, 0x84, 0xfa, 0x82, 0x0c, 0xf5, + 0x22, 0x1b, 0xd1, 0xa4, 0x39, 0x12, 0x2d, 0xff, 0xc1, 0x40, 0xe5, 0xa3, 0x47, 0xef, 0x78, 0xc5, + 0xd2, 0x8f, 0xd4, 0x62, 0xa9, 0xb4, 0x5e, 0xab, 0x89, 0x6b, 0xd5, 0x9a, 0x7a, 0xad, 0x5a, 0xf3, + 0x0f, 0x3a, 0xf0, 0x49, 0xf1, 0xb5, 0x6a, 0xed, 0xcd, 0xc8, 0xf2, 0x98, 0xcb, 0x0e, 0x1f, 0x57, + 0x5c, 0x95, 0x7f, 0x6f, 0xa0, 0x73, 0x47, 0x7e, 0xf4, 0xd3, 0xe0, 0x61, 0xf5, 0x8b, 0x0c, 0x5a, + 0xde, 0xa6, 0xed, 0x26, 0xf1, 0x03, 0x97, 0x06, 0x2e, 0x73, 0xdf, 0xfb, 0x06, 0x94, 0x80, 0xdf, + 0x45, 0xd3, 0x1e, 0xb9, 0xdb, 0x92, 0x9f, 0x7c, 0x08, 0x0b, 0x95, 0x01, 0x7b, 0xaa, 0x25, 0x8f, + 0xdc, 0xbd, 0x29, 0x61, 0x45, 0xb3, 0xa4, 0xc0, 0x7a, 0x01, 0x99, 0x3b, 0x76, 0x01, 0xf9, 0x79, + 0x06, 0x2e, 0x14, 0x95, 0x48, 0x9f, 0xfe, 0xd2, 0xe2, 0xff, 0x12, 0xe8, 0x4f, 0xc4, 0x8e, 0x66, + 0xc3, 0xf2, 0x6c, 0xd2, 0xed, 0x8e, 0x77, 0x34, 0x47, 0xc4, 0xe9, 0xc9, 0x4e, 0x2a, 0xaa, 0x1f, + 0x8b, 0xa7, 0x23, 0x32, 0xaa, 0xa7, 0x9f, 0xba, 0x5f, 0x4b, 0x50, 0xff, 0x36, 0x05, 0x54, 0xbd, + 0x45, 0x82, 0x9e, 0xeb, 0x59, 0xe3, 0x5d, 0xe5, 0xd3, 0x7d, 0xc1, 0xfa, 0xf5, 0x6c, 0x1b, 0x14, + 0x0a, 0x15, 0x8e, 0x41, 0xa1, 0xcf, 0xa6, 0xd1, 0x34, 0xb0, 0xe6, 0x3a, 0x09, 0x79, 0x69, 0x81, + 0x6f, 0xa0, 0x62, 0x18, 0xbf, 0xef, 0x02, 0xfe, 0x94, 0xd6, 0x97, 0xe3, 0x8a, 0x4c, 0x7f, 0xf8, + 0x25, 0x02, 0x90, 0x34, 0x1e, 0x1a, 0x7f, 0x7d, 0xa2, 0x39, 0xb4, 0x81, 0x37, 0x50, 0x0e, 0x98, + 0xe0, 0xc8, 0x12, 0xe4, 0x4c, 0x6c, 0x4d, 0x79, 0x2d, 0x25, 0x9c, 0x14, 0xcd, 0x34, 0x3b, 0x52, + 0x95, 0x1b, 0xe9, 0xc2, 0x7b, 0x23, 0x60, 0x9c, 0x62, 0x44, 0x79, 0x85, 0x24, 0x8c, 0x88, 0x66, + 0xba, 0x11, 0x81, 0xe1, 0x77, 0xd0, 0x2c, 0xfc, 0xd4, 0x0a, 0xe4, 0x83, 0x9c, 0x84, 0x91, 0xaa, + 0x31, 0xed, 0xb5, 0x4e, 0xe3, 0xfc, 0xa0, 0x5f, 0x39, 0xdb, 0x55, 0x71, 0xcd, 0xf4, 0x8c, 0x26, + 0xc2, 0x6f, 0x23, 0x01, 0xb4, 0x88, 0x78, 0xde, 0x21, 0x9f, 0x8e, 0x9d, 0xd3, 0x3a, 0x50, 0x9f, + 0x7e, 0x88, 0x71, 0xed, 0x2a, 0xb0, 0x66, 0x7e, 0x5a, 0x95, 0xe0, 0xd7, 0x50, 0xde, 0x17, 0x0f, + 0x29, 0x80, 0xbf, 0xf1, 0x19, 0x63, 0xea, 0x7d, 0x85, 0x64, 0x98, 0x40, 0x34, 0x6b, 0xb1, 0x36, + 0x37, 0x14, 0x88, 0xfb, 0x77, 0xa0, 0xb2, 0x62, 0x48, 0xbd, 0x96, 0x17, 0x86, 0x64, 0x43, 0xdd, + 0x90, 0x04, 0x71, 0x0f, 0xe1, 0x08, 0x2e, 0x93, 0x5a, 0x8c, 0xb6, 0x42, 0x79, 0x9d, 0x04, 0xbc, + 0x2b, 0xad, 0x5f, 0x4c, 0xea, 0xf8, 0x51, 0xd7, 0x4d, 0xe2, 0xaa, 0x2c, 0x4a, 0x89, 0xb4, 0x5e, + 0xe6, 0xd3, 0x52, 0xce, 0x82, 0x5d, 0x38, 0xd4, 0x86, 0xb9, 0xa4, 0xb0, 0x40, 0x39, 0xea, 0x16, + 0x2c, 0x10, 0xcd, 0x74, 0x16, 0x08, 0x4c, 0x10, 0x5c, 0x9e, 0xcd, 0xc0, 0xe4, 0xd2, 0x08, 0xae, + 0x1e, 0xda, 0xc4, 0x04, 0x97, 0x58, 0x9a, 0xe0, 0x12, 0xc6, 0x2d, 0x34, 0x13, 0xa8, 0x55, 0x19, + 0x6c, 0x89, 0x14, 0x56, 0x3d, 0x5a, 0xb2, 0x09, 0x56, 0x69, 0x4a, 0x3a, 0xab, 0x34, 0x11, 0xde, + 0x41, 0xc8, 0x4e, 0xaa, 0x11, 0x38, 0x05, 0x2e, 0xad, 0x9f, 0x8d, 0xad, 0xa7, 0xea, 0x94, 0x86, + 0xc9, 0xb7, 0x41, 0xc3, 0xe6, 0x9a, 0x5d, 0xc5, 0x0c, 0x0f, 0x83, 0x1d, 0x27, 0x63, 0x38, 0x2f, + 0x57, 0xc2, 0xa0, 0x67, 0x69, 0xb9, 0xc2, 0xc6, 0x98, 0x1e, 0x86, 0x04, 0xe6, 0x5e, 0xb2, 0x24, + 0x11, 0xc1, 0x51, 0xba, 0xe2, 0x65, 0x2a, 0x45, 0x09, 0x2f, 0x87, 0xcd, 0x75, 0x2f, 0x87, 0x38, + 0x7e, 0x0b, 0x95, 0xa2, 0xe1, 0x36, 0xd0, 0x9c, 0x03, 0xab, 0xe6, 0x51, 0x3b, 0x44, 0x51, 0x1a, + 0x2a, 0x0a, 0x9a, 0x5d, 0xd5, 0x12, 0xfe, 0x21, 0x9a, 0x8e, 0x2f, 0x7d, 0x5d, 0x6f, 0x97, 0x9a, + 0x0b, 0xba, 0xe5, 0xf4, 0x7d, 0xaf, 0xb0, 0xec, 0x0e, 0x51, 0xdd, 0xb2, 0x22, 0xc0, 0x36, 0x9a, + 0x0d, 0xb4, 0xed, 0x90, 0x89, 0xc1, 0xf6, 0xf9, 0x11, 0x7c, 0x48, 0x46, 0xed, 0xc2, 0xa0, 0x5f, + 0x31, 0x75, 0x35, 0xad, 0x87, 0x94, 0x49, 0x3e, 0x7a, 0x7e, 0x7c, 0x94, 0x6c, 0x2e, 0xe9, 0xa3, + 0xa7, 0x9f, 0x31, 0xcb, 0x34, 0x15, 0x63, 0xfa, 0xe8, 0x25, 0x30, 0x1f, 0x3d, 0x3f, 0x39, 0xc3, + 0x37, 0x97, 0xf5, 0xd1, 0x4b, 0x9d, 0xee, 0x8b, 0xd1, 0x1b, 0x36, 0xd7, 0x47, 0x6f, 0x88, 0x37, + 0x0a, 0x28, 0x07, 0x0f, 0xa6, 0xc3, 0xea, 0xcf, 0x32, 0x68, 0x2e, 0x75, 0x17, 0x82, 0xbf, 0x85, + 0xa6, 0x20, 0x2f, 0x8a, 0x22, 0x05, 0x0f, 0xfa, 0x95, 0x59, 0x4f, 0x4f, 0x8a, 0x20, 0xc7, 0xeb, + 0xa8, 0x10, 0xdf, 0x49, 0xc9, 0x4b, 0x09, 0x28, 0x50, 0x62, 0x4c, 0x2d, 0x50, 0x62, 0x0c, 0xd7, + 0x51, 0xbe, 0x27, 0x12, 0x9a, 0x2c, 0x51, 0x60, 0x2d, 0x93, 0x90, 0x9a, 0x76, 0x25, 0xa4, 0x64, + 0xcd, 0xa9, 0x63, 0xdc, 0xbb, 0x25, 0x57, 0x32, 0xd9, 0x27, 0xb9, 0x92, 0xa9, 0xbe, 0x87, 0x30, + 0x04, 0x70, 0x87, 0x05, 0xc4, 0xea, 0xc5, 0x19, 0x77, 0x15, 0x65, 0x92, 0x52, 0x6d, 0x7e, 0xd0, + 0xaf, 0x4c, 0xbb, 0x6a, 0x1d, 0x92, 0x71, 0x1d, 0xdc, 0x18, 0x7e, 0x8d, 0xc8, 0xa1, 0x0b, 0xd0, + 0xa1, 0x9a, 0xb7, 0x1f, 0xf7, 0x81, 0xd5, 0x5f, 0x67, 0xd0, 0xcc, 0x36, 0xd4, 0x6f, 0x4d, 0x51, + 0x6d, 0x1e, 0xa3, 0xdf, 0xe7, 0x50, 0xf6, 0xae, 0xc5, 0xec, 0x3d, 0xe8, 0xb5, 0x20, 0x3e, 0x0d, + 0x00, 0xf5, 0xd3, 0x00, 0xc0, 0x1b, 0x68, 0x6e, 0x37, 0xa0, 0xbd, 0x96, 0xec, 0x8e, 0xd7, 0x58, + 0x22, 0xf0, 0xb0, 0xd4, 0x71, 0x91, 0x74, 0x54, 0x2b, 0xb2, 0x66, 0x34, 0xc1, 0xb0, 0xac, 0x9c, + 0x7a, 0x6c, 0x59, 0xf9, 0x0a, 0x9a, 0x25, 0x41, 0x40, 0x83, 0xad, 0xdd, 0xeb, 0x6e, 0x18, 0x72, + 0xce, 0x66, 0xc1, 0x47, 0x98, 0x48, 0xba, 0x44, 0x51, 0x4e, 0xe9, 0x54, 0x7f, 0x67, 0xa0, 0xe9, + 0xb7, 0xb8, 0xff, 0x71, 0x4c, 0x12, 0x0f, 0x8c, 0xc7, 0x7a, 0x70, 0xb2, 0xca, 0xf9, 0x32, 0xca, + 0x43, 0x9c, 0x92, 0xf8, 0x88, 0x74, 0x15, 0xd0, 0x9e, 0xa6, 0x90, 0x13, 0xc8, 0xa5, 0x37, 0x50, + 0x16, 0x68, 0x85, 0x8b, 0x28, 0xbb, 0xc9, 0x7d, 0x9f, 0x9f, 0xc0, 0x25, 0x94, 0xdf, 0xbc, 0xe3, + 0xda, 0x8c, 0x38, 0xf3, 0x06, 0xce, 0xa3, 0xc9, 0x1b, 0x37, 0xae, 0xcf, 0x67, 0xf0, 0x22, 0x9a, + 0x7f, 0x85, 0x58, 0x4e, 0xd7, 0xf5, 0xc8, 0xe6, 0x3d, 0x91, 0x99, 0xe6, 0x27, 0xf1, 0x34, 0x2a, + 0x34, 0xc9, 0x3e, 0x81, 0xc6, 0x53, 0xeb, 0x9f, 0x1b, 0x28, 0x2b, 0xb6, 0x08, 0x04, 0xcd, 0xbd, + 0x46, 0x98, 0xe0, 0x03, 0x20, 0x21, 0xc6, 0x49, 0x12, 0x4c, 0x28, 0x52, 0x3e, 0x3b, 0xe4, 0x99, + 0xc6, 0xd9, 0xea, 0x33, 0x3f, 0xfd, 0xe4, 0xb3, 0xdf, 0x64, 0x2e, 0x56, 0xcd, 0xfa, 0x9d, 0x6f, + 0xd7, 0xf7, 0x69, 0xfb, 0x72, 0x48, 0x58, 0xfd, 0x3e, 0x04, 0xe6, 0xfd, 0xfa, 0x7d, 0xd7, 0x79, + 0xff, 0xaa, 0x71, 0xe9, 0x05, 0x03, 0x5f, 0x45, 0x59, 0x08, 0x2f, 0x16, 0x84, 0x55, 0x43, 0x7d, + 0xb4, 0xed, 0xc9, 0x0f, 0x32, 0x06, 0xe8, 0xe6, 0x5e, 0x87, 0x3f, 0x8e, 0xc0, 0xcb, 0x8f, 0xec, + 0x18, 0x36, 0x79, 0x90, 0xca, 0x62, 0xb5, 0x16, 0x8d, 0x36, 0xf6, 0x88, 0x7d, 0xd0, 0x24, 0xa1, + 0x4f, 0xbd, 0x90, 0x34, 0xde, 0xf9, 0xf4, 0x5f, 0x2b, 0x13, 0x3f, 0x79, 0xb0, 0x62, 0x7c, 0xf8, + 0x60, 0xc5, 0xf8, 0xe8, 0xc1, 0x8a, 0xf1, 0xcf, 0x07, 0x2b, 0xc6, 0x2f, 0x1f, 0xae, 0x4c, 0x7c, + 0xf4, 0x70, 0x65, 0xe2, 0xd3, 0x87, 0x2b, 0x13, 0x3f, 0x7e, 0x56, 0xf9, 0x6b, 0x0a, 0x2b, 0xe8, + 0x59, 0x8e, 0xe5, 0x07, 0x94, 0x07, 0x4a, 0xfe, 0x16, 0xff, 0x31, 0xc4, 0x5f, 0x32, 0x8b, 0xd7, + 0x00, 0xb8, 0x29, 0xc4, 0xb5, 0x2d, 0x5a, 0xbb, 0xe6, 0xbb, 0xed, 0x1c, 0xf8, 0x72, 0xe5, 0xbf, + 0x01, 0x00, 0x00, 0xff, 0xff, 0x0c, 0x6e, 0x85, 0x25, 0x1a, 0x32, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2936,14 +2932,18 @@ func (m *JobSubmittedEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x2a - n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err2 != nil { - return 0, err2 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n2 - i = encodeVarintEvent(dAtA, i, uint64(n2)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -2988,14 +2988,18 @@ func (m *JobQueuedEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err3 != nil { - return 0, err3 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n3 - i = encodeVarintEvent(dAtA, i, uint64(n3)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -3047,14 +3051,18 @@ func (m *JobLeasedEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - n4, err4 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err4 != nil { - return 0, err4 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n4 - i = encodeVarintEvent(dAtA, i, uint64(n4)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -3135,14 +3143,18 @@ func (m *JobLeaseReturnedEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - n5, err5 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err5 != nil { - return 0, err5 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n5 - i = encodeVarintEvent(dAtA, i, uint64(n5)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -3187,14 +3199,18 @@ func (m *JobLeaseExpiredEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n6, err6 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err6 != nil { - return 0, err6 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n6 - i = encodeVarintEvent(dAtA, i, uint64(n6)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -3272,14 +3288,18 @@ func (m *JobPendingEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - n7, err7 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err7 != nil { - return 0, err7 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n7 - i = encodeVarintEvent(dAtA, i, uint64(n7)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -3364,14 +3384,18 @@ func (m *JobRunningEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - n8, err8 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err8 != nil { - return 0, err8 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n8 - i = encodeVarintEvent(dAtA, i, uint64(n8)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -3473,14 +3497,18 @@ func (m *JobIngressInfoEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - n9, err9 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err9 != nil { - return 0, err9 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n9 - i = encodeVarintEvent(dAtA, i, uint64(n9)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -3572,14 +3600,18 @@ func (m *JobUnableToScheduleEvent) MarshalToSizedBuffer(dAtA []byte) (int, error i-- dAtA[i] = 0x2a } - n10, err10 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err10 != nil { - return 0, err10 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n10 - i = encodeVarintEvent(dAtA, i, uint64(n10)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -3707,14 +3739,18 @@ func (m *JobFailedEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - n11, err11 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err11 != nil { - return 0, err11 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n11 - i = encodeVarintEvent(dAtA, i, uint64(n11)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -3766,14 +3802,18 @@ func (m *JobPreemptingEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - n12, err12 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err12 != nil { - return 0, err12 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n12 - i = encodeVarintEvent(dAtA, i, uint64(n12)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -3846,14 +3886,18 @@ func (m *JobPreemptedEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - n13, err13 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err13 != nil { - return 0, err13 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n13 - i = encodeVarintEvent(dAtA, i, uint64(n13)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -3938,14 +3982,18 @@ func (m *JobSucceededEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - n14, err14 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err14 != nil { - return 0, err14 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n14 - i = encodeVarintEvent(dAtA, i, uint64(n14)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -4078,14 +4126,18 @@ func (m *JobUtilisationEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - n17, err17 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err17 != nil { - return 0, err17 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n17 - i = encodeVarintEvent(dAtA, i, uint64(n17)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -4143,14 +4195,18 @@ func (m *JobReprioritizingEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) i-- dAtA[i] = 0x29 } - n18, err18 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err18 != nil { - return 0, err18 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n18 - i = encodeVarintEvent(dAtA, i, uint64(n18)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -4208,14 +4264,18 @@ func (m *JobReprioritizedEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x29 } - n19, err19 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err19 != nil { - return 0, err19 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n19 - i = encodeVarintEvent(dAtA, i, uint64(n19)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -4274,14 +4334,18 @@ func (m *JobCancellingEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - n20, err20 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err20 != nil { - return 0, err20 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n20 - i = encodeVarintEvent(dAtA, i, uint64(n20)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -4340,14 +4404,18 @@ func (m *JobCancelledEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - n21, err21 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err21 != nil { - return 0, err21 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n21 - i = encodeVarintEvent(dAtA, i, uint64(n21)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -4432,14 +4500,18 @@ func (m *JobTerminatedEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - n22, err22 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err22 != nil { - return 0, err22 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i -= n22 - i = encodeVarintEvent(dAtA, i, uint64(n22)) - i-- - dAtA[i] = 0x22 if len(m.Queue) > 0 { i -= len(m.Queue) copy(dAtA[i:], m.Queue) @@ -5136,8 +5208,10 @@ func (m *JobSubmittedEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } l = m.Job.Size() n += 1 + l + sovEvent(uint64(l)) return n @@ -5161,8 +5235,10 @@ func (m *JobQueuedEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } return n } @@ -5184,8 +5260,10 @@ func (m *JobLeasedEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } l = len(m.ClusterId) if l > 0 { n += 1 + l + sovEvent(uint64(l)) @@ -5211,8 +5289,10 @@ func (m *JobLeaseReturnedEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } l = len(m.ClusterId) if l > 0 { n += 1 + l + sovEvent(uint64(l)) @@ -5252,8 +5332,10 @@ func (m *JobLeaseExpiredEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } return n } @@ -5275,8 +5357,10 @@ func (m *JobPendingEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } l = len(m.ClusterId) if l > 0 { n += 1 + l + sovEvent(uint64(l)) @@ -5317,8 +5401,10 @@ func (m *JobRunningEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } l = len(m.ClusterId) if l > 0 { n += 1 + l + sovEvent(uint64(l)) @@ -5363,8 +5449,10 @@ func (m *JobIngressInfoEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } l = len(m.ClusterId) if l > 0 { n += 1 + l + sovEvent(uint64(l)) @@ -5417,8 +5505,10 @@ func (m *JobUnableToScheduleEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } l = len(m.ClusterId) if l > 0 { n += 1 + l + sovEvent(uint64(l)) @@ -5467,8 +5557,10 @@ func (m *JobFailedEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } l = len(m.ClusterId) if l > 0 { n += 1 + l + sovEvent(uint64(l)) @@ -5534,8 +5626,10 @@ func (m *JobPreemptingEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } l = len(m.Requestor) if l > 0 { n += 1 + l + sovEvent(uint64(l)) @@ -5561,8 +5655,10 @@ func (m *JobPreemptedEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } l = len(m.ClusterId) if l > 0 { n += 1 + l + sovEvent(uint64(l)) @@ -5600,8 +5696,10 @@ func (m *JobSucceededEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } l = len(m.ClusterId) if l > 0 { n += 1 + l + sovEvent(uint64(l)) @@ -5646,8 +5744,10 @@ func (m *JobUtilisationEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } l = len(m.ClusterId) if l > 0 { n += 1 + l + sovEvent(uint64(l)) @@ -5710,8 +5810,10 @@ func (m *JobReprioritizingEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } if m.NewPriority != 0 { n += 9 } @@ -5740,8 +5842,10 @@ func (m *JobReprioritizedEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } if m.NewPriority != 0 { n += 9 } @@ -5770,8 +5874,10 @@ func (m *JobCancellingEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } l = len(m.Requestor) if l > 0 { n += 1 + l + sovEvent(uint64(l)) @@ -5801,8 +5907,10 @@ func (m *JobCancelledEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } l = len(m.Requestor) if l > 0 { n += 1 + l + sovEvent(uint64(l)) @@ -5832,8 +5940,10 @@ func (m *JobTerminatedEvent) Size() (n int) { if l > 0 { n += 1 + l + sovEvent(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovEvent(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovEvent(uint64(l)) + } l = len(m.ClusterId) if l > 0 { n += 1 + l + sovEvent(uint64(l)) @@ -6206,7 +6316,7 @@ func (this *JobSubmittedEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `Job:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Job), "Job", "Job", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -6220,7 +6330,7 @@ func (this *JobQueuedEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `}`, }, "") return s @@ -6233,7 +6343,7 @@ func (this *JobLeasedEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `ClusterId:` + fmt.Sprintf("%v", this.ClusterId) + `,`, `}`, }, "") @@ -6247,7 +6357,7 @@ func (this *JobLeaseReturnedEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `ClusterId:` + fmt.Sprintf("%v", this.ClusterId) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `KubernetesId:` + fmt.Sprintf("%v", this.KubernetesId) + `,`, @@ -6265,7 +6375,7 @@ func (this *JobLeaseExpiredEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `}`, }, "") return s @@ -6278,7 +6388,7 @@ func (this *JobPendingEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `ClusterId:` + fmt.Sprintf("%v", this.ClusterId) + `,`, `KubernetesId:` + fmt.Sprintf("%v", this.KubernetesId) + `,`, `PodNumber:` + fmt.Sprintf("%v", this.PodNumber) + `,`, @@ -6296,7 +6406,7 @@ func (this *JobRunningEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `ClusterId:` + fmt.Sprintf("%v", this.ClusterId) + `,`, `KubernetesId:` + fmt.Sprintf("%v", this.KubernetesId) + `,`, `NodeName:` + fmt.Sprintf("%v", this.NodeName) + `,`, @@ -6325,7 +6435,7 @@ func (this *JobIngressInfoEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `ClusterId:` + fmt.Sprintf("%v", this.ClusterId) + `,`, `KubernetesId:` + fmt.Sprintf("%v", this.KubernetesId) + `,`, `NodeName:` + fmt.Sprintf("%v", this.NodeName) + `,`, @@ -6345,7 +6455,7 @@ func (this *JobUnableToScheduleEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `ClusterId:` + fmt.Sprintf("%v", this.ClusterId) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `KubernetesId:` + fmt.Sprintf("%v", this.KubernetesId) + `,`, @@ -6380,7 +6490,7 @@ func (this *JobFailedEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `ClusterId:` + fmt.Sprintf("%v", this.ClusterId) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `ExitCodes:` + mapStringForExitCodes + `,`, @@ -6403,7 +6513,7 @@ func (this *JobPreemptingEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `Requestor:` + fmt.Sprintf("%v", this.Requestor) + `,`, `}`, }, "") @@ -6417,7 +6527,7 @@ func (this *JobPreemptedEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `ClusterId:` + fmt.Sprintf("%v", this.ClusterId) + `,`, `RunId:` + fmt.Sprintf("%v", this.RunId) + `,`, `PreemptiveJobId:` + fmt.Sprintf("%v", this.PreemptiveJobId) + `,`, @@ -6434,7 +6544,7 @@ func (this *JobSucceededEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `ClusterId:` + fmt.Sprintf("%v", this.ClusterId) + `,`, `KubernetesId:` + fmt.Sprintf("%v", this.KubernetesId) + `,`, `NodeName:` + fmt.Sprintf("%v", this.NodeName) + `,`, @@ -6473,7 +6583,7 @@ func (this *JobUtilisationEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `ClusterId:` + fmt.Sprintf("%v", this.ClusterId) + `,`, `KubernetesId:` + fmt.Sprintf("%v", this.KubernetesId) + `,`, `MaxResourcesForPeriod:` + mapStringForMaxResourcesForPeriod + `,`, @@ -6494,7 +6604,7 @@ func (this *JobReprioritizingEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `NewPriority:` + fmt.Sprintf("%v", this.NewPriority) + `,`, `Requestor:` + fmt.Sprintf("%v", this.Requestor) + `,`, `}`, @@ -6509,7 +6619,7 @@ func (this *JobReprioritizedEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `NewPriority:` + fmt.Sprintf("%v", this.NewPriority) + `,`, `Requestor:` + fmt.Sprintf("%v", this.Requestor) + `,`, `}`, @@ -6524,7 +6634,7 @@ func (this *JobCancellingEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `Requestor:` + fmt.Sprintf("%v", this.Requestor) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `}`, @@ -6539,7 +6649,7 @@ func (this *JobCancelledEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `Requestor:` + fmt.Sprintf("%v", this.Requestor) + `,`, `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, `}`, @@ -6554,7 +6664,7 @@ func (this *JobTerminatedEvent) String() string { `JobId:` + fmt.Sprintf("%v", this.JobId) + `,`, `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `ClusterId:` + fmt.Sprintf("%v", this.ClusterId) + `,`, `KubernetesId:` + fmt.Sprintf("%v", this.KubernetesId) + `,`, `PodNumber:` + fmt.Sprintf("%v", this.PodNumber) + `,`, @@ -6978,7 +7088,10 @@ func (m *JobSubmittedEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -7190,7 +7303,10 @@ func (m *JobQueuedEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -7369,7 +7485,10 @@ func (m *JobLeasedEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -7580,7 +7699,10 @@ func (m *JobLeaseReturnedEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -7894,7 +8016,10 @@ func (m *JobLeaseExpiredEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -8073,7 +8198,10 @@ func (m *JobPendingEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -8399,7 +8527,10 @@ func (m *JobRunningEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -8757,7 +8888,10 @@ func (m *JobIngressInfoEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -9228,7 +9362,10 @@ func (m *JobUnableToScheduleEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -9618,7 +9755,10 @@ func (m *JobFailedEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -10174,7 +10314,10 @@ func (m *JobPreemptingEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -10385,7 +10528,10 @@ func (m *JobPreemptedEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -10692,7 +10838,10 @@ func (m *JobSucceededEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -11050,7 +11199,10 @@ func (m *JobUtilisationEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -11666,7 +11818,10 @@ func (m *JobReprioritizingEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -11888,7 +12043,10 @@ func (m *JobReprioritizedEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -12110,7 +12268,10 @@ func (m *JobCancellingEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -12353,7 +12514,10 @@ func (m *JobCancelledEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -12596,7 +12760,10 @@ func (m *JobTerminatedEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/pkg/api/event.proto b/pkg/api/event.proto index 908c7fa26cb..4637285c4f9 100644 --- a/pkg/api/event.proto +++ b/pkg/api/event.proto @@ -19,7 +19,7 @@ message JobSubmittedEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; Job job = 5 [(gogoproto.nullable) = false]; } @@ -27,14 +27,14 @@ message JobQueuedEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; } message JobLeasedEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; string cluster_id = 5; } @@ -42,7 +42,7 @@ message JobLeaseReturnedEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; string cluster_id = 5; string reason = 6; string kubernetes_id = 7; @@ -54,14 +54,14 @@ message JobLeaseExpiredEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; } message JobPendingEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; string cluster_id = 5; string kubernetes_id = 6; int32 pod_number = 7; @@ -73,7 +73,7 @@ message JobRunningEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; string cluster_id = 5; string kubernetes_id = 6; string node_name = 7; @@ -86,7 +86,7 @@ message JobIngressInfoEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; string cluster_id = 5; string kubernetes_id = 6; string node_name = 7; @@ -100,7 +100,7 @@ message JobUnableToScheduleEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; string cluster_id = 5; string reason = 6; string kubernetes_id = 7; @@ -114,7 +114,7 @@ message JobFailedEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; string cluster_id = 5; string reason = 6; map exit_codes = 7 [deprecated = true]; @@ -131,7 +131,7 @@ message JobPreemptingEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; string requestor = 5; } @@ -139,7 +139,7 @@ message JobPreemptedEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; string cluster_id = 5; string run_id = 6; string preemptive_job_id = 7; @@ -150,7 +150,7 @@ message JobSucceededEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; string cluster_id = 5; string kubernetes_id = 6; string node_name = 7; @@ -163,7 +163,7 @@ message JobUtilisationEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; string cluster_id = 5; string kubernetes_id = 6; map MaxResourcesForPeriod = 7 [(gogoproto.nullable) = false]; @@ -178,7 +178,7 @@ message JobReprioritizingEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; double new_priority = 5; string requestor = 6; } @@ -187,7 +187,7 @@ message JobReprioritizedEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; double new_priority = 5; string requestor = 6; } @@ -196,7 +196,7 @@ message JobCancellingEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; string requestor = 5; string reason = 6; } @@ -205,7 +205,7 @@ message JobCancelledEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; string requestor = 5; string reason = 6; } @@ -214,7 +214,7 @@ message JobTerminatedEvent { string job_id = 1; string job_set_id = 2; string queue = 3; - google.protobuf.Timestamp created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 4; string cluster_id = 5; string kubernetes_id = 6; int32 pod_number = 7; diff --git a/pkg/api/event_util.go b/pkg/api/event_util.go index fabf707ed99..d66913e86ca 100644 --- a/pkg/api/event_util.go +++ b/pkg/api/event_util.go @@ -3,8 +3,8 @@ package api import ( "encoding/json" "reflect" - "time" + "github.com/gogo/protobuf/types" "github.com/pkg/errors" ) @@ -12,7 +12,7 @@ type Event interface { GetJobId() string GetJobSetId() string GetQueue() string - GetCreated() time.Time + GetCreated() *types.Timestamp } type KubernetesEvent interface { diff --git a/pkg/api/submit.pb.go b/pkg/api/submit.pb.go index 1840186f78e..6b622d5a171 100644 --- a/pkg/api/submit.pb.go +++ b/pkg/api/submit.pb.go @@ -12,12 +12,10 @@ import ( math_bits "math/bits" reflect "reflect" strings "strings" - time "time" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" types "github.com/gogo/protobuf/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" @@ -31,7 +29,6 @@ import ( var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -736,7 +733,7 @@ type Job struct { // This field is populated automatically at submission. // Submitting a job with this field already populated results in an error. SchedulingResourceRequirements v1.ResourceRequirements `protobuf:"bytes,21,opt,name=scheduling_resource_requirements,json=schedulingResourceRequirements,proto3" json:"schedulingResourceRequirements"` - Created time.Time `protobuf:"bytes,6,opt,name=created,proto3,stdtime" json:"created"` + Created *types.Timestamp `protobuf:"bytes,6,opt,name=created,proto3" json:"created,omitempty"` // Services can be provided either as Armada-specific config objects or as proper k8s objects. // These options are exclusive, i.e., if either ingress or services is provided, // then neither of k8s_ingress or k8s_service can be provided, and vice versa. @@ -890,11 +887,11 @@ func (m *Job) GetSchedulingResourceRequirements() v1.ResourceRequirements { return v1.ResourceRequirements{} } -func (m *Job) GetCreated() time.Time { +func (m *Job) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *Job) GetIngress() []*IngressConfig { @@ -2081,193 +2078,193 @@ func init() { func init() { proto.RegisterFile("pkg/api/submit.proto", fileDescriptor_e998bacb27df16c1) } var fileDescriptor_e998bacb27df16c1 = []byte{ - // 2972 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcb, 0x6f, 0x1b, 0xd7, - 0xd5, 0xe7, 0x88, 0x7a, 0xf1, 0x50, 0x0f, 0xea, 0xea, 0xe1, 0x11, 0xed, 0x88, 0xf2, 0x24, 0xf1, - 0x27, 0x0b, 0x09, 0x15, 0x2b, 0x5f, 0x50, 0xdb, 0x4d, 0xe1, 0x8a, 0x12, 0x6d, 0x4b, 0xb1, 0x65, - 0x85, 0xb2, 0x92, 0xa6, 0x28, 0xca, 0x0c, 0x39, 0x57, 0xd4, 0x48, 0xe4, 0x0c, 0x33, 0x33, 0x94, - 0xab, 0x16, 0x01, 0x8a, 0xa2, 0x68, 0x17, 0xdd, 0xa4, 0xe8, 0xae, 0x05, 0xd2, 0x45, 0x77, 0xe9, - 0xa2, 0x9b, 0xa2, 0xe8, 0x9f, 0x90, 0x65, 0x80, 0xa2, 0x40, 0xba, 0x61, 0x5a, 0xbb, 0x0f, 0x80, - 0xbb, 0xee, 0xbb, 0x28, 0xee, 0xb9, 0x77, 0x38, 0x77, 0xf8, 0x10, 0x45, 0xdb, 0x4a, 0x36, 0xdd, - 0xe9, 0xfe, 0xee, 0x79, 0xcf, 0xb9, 0xe7, 0x9e, 0x73, 0x29, 0x98, 0xa9, 0x1e, 0x95, 0x56, 0xf4, - 0xaa, 0xb9, 0xe2, 0xd6, 0x0a, 0x15, 0xd3, 0x4b, 0x57, 0x1d, 0xdb, 0xb3, 0x49, 0x54, 0xaf, 0x9a, - 0xc9, 0x8b, 0x25, 0xdb, 0x2e, 0x95, 0xe9, 0x0a, 0x42, 0x85, 0xda, 0xfe, 0x0a, 0xad, 0x54, 0xbd, - 0x13, 0x4e, 0x91, 0x4c, 0xb5, 0x6e, 0x7a, 0x66, 0x85, 0xba, 0x9e, 0x5e, 0xa9, 0x0a, 0x02, 0xed, - 0xe8, 0xba, 0x9b, 0x36, 0x6d, 0x94, 0x5d, 0xb4, 0x1d, 0xba, 0x72, 0x7c, 0x6d, 0xa5, 0x44, 0x2d, - 0xea, 0xe8, 0x1e, 0x35, 0x04, 0xcd, 0x92, 0x44, 0x63, 0x51, 0xef, 0x91, 0xed, 0x1c, 0x99, 0x56, - 0xa9, 0x13, 0xe5, 0x25, 0xa1, 0x8e, 0x51, 0xea, 0x96, 0x65, 0x7b, 0xba, 0x67, 0xda, 0x96, 0x2b, - 0x76, 0x5f, 0x2d, 0x99, 0xde, 0x41, 0xad, 0x90, 0x2e, 0xda, 0x95, 0x95, 0x92, 0x5d, 0xb2, 0x03, - 0xab, 0xd8, 0x0a, 0x17, 0xf8, 0x97, 0x20, 0x6f, 0xfa, 0x7c, 0x40, 0xf5, 0xb2, 0x77, 0xc0, 0x51, - 0xed, 0xd7, 0x31, 0x98, 0xd9, 0xb2, 0x0b, 0xbb, 0x18, 0x87, 0x1c, 0xfd, 0xa0, 0x46, 0x5d, 0x6f, - 0xd3, 0xa3, 0x15, 0xb2, 0x0a, 0xa3, 0x55, 0xc7, 0xb4, 0x1d, 0xd3, 0x3b, 0x51, 0x95, 0x45, 0x65, - 0x49, 0xc9, 0xcc, 0x35, 0xea, 0x29, 0xe2, 0x63, 0xaf, 0xd8, 0x15, 0xd3, 0xc3, 0xd0, 0xe4, 0x9a, - 0x74, 0xe4, 0x0d, 0x88, 0x59, 0x7a, 0x85, 0xba, 0x55, 0xbd, 0x48, 0xd5, 0xe8, 0xa2, 0xb2, 0x14, - 0xcb, 0x5c, 0x68, 0xd4, 0x53, 0xd3, 0x4d, 0x50, 0xe2, 0x0a, 0x28, 0xc9, 0xeb, 0x10, 0x2b, 0x96, - 0x4d, 0x6a, 0x79, 0x79, 0xd3, 0x50, 0x47, 0x91, 0x0d, 0x75, 0x71, 0x70, 0xd3, 0x90, 0x75, 0xf9, - 0x18, 0xd9, 0x85, 0xe1, 0xb2, 0x5e, 0xa0, 0x65, 0x57, 0x1d, 0x5c, 0x8c, 0x2e, 0xc5, 0x57, 0x5f, - 0x4e, 0xeb, 0x55, 0x33, 0xdd, 0xc9, 0x95, 0xf4, 0x3d, 0xa4, 0xcb, 0x5a, 0x9e, 0x73, 0x92, 0x99, - 0x69, 0xd4, 0x53, 0x09, 0xce, 0x28, 0x89, 0x15, 0xa2, 0x48, 0x09, 0xe2, 0x52, 0x9c, 0xd5, 0x21, - 0x94, 0xbc, 0xdc, 0x5d, 0xf2, 0x5a, 0x40, 0xcc, 0xc5, 0xcf, 0x37, 0xea, 0xa9, 0x59, 0x49, 0x84, - 0xa4, 0x43, 0x96, 0x4c, 0x7e, 0xaa, 0xc0, 0x8c, 0x43, 0x3f, 0xa8, 0x99, 0x0e, 0x35, 0xf2, 0x96, - 0x6d, 0xd0, 0xbc, 0x70, 0x66, 0x18, 0x55, 0x5e, 0xeb, 0xae, 0x32, 0x27, 0xb8, 0xb6, 0x6d, 0x83, - 0xca, 0x8e, 0x69, 0x8d, 0x7a, 0xea, 0x92, 0xd3, 0xb6, 0x19, 0x18, 0xa0, 0x2a, 0x39, 0xd2, 0xbe, - 0x4f, 0x1e, 0xc0, 0x68, 0xd5, 0x36, 0xf2, 0x6e, 0x95, 0x16, 0xd5, 0x81, 0x45, 0x65, 0x29, 0xbe, - 0x7a, 0x31, 0xcd, 0x13, 0x14, 0x6d, 0x60, 0x49, 0x9c, 0x3e, 0xbe, 0x96, 0xde, 0xb1, 0x8d, 0xdd, - 0x2a, 0x2d, 0xe2, 0xf7, 0x9c, 0xaa, 0xf2, 0x45, 0x48, 0xf6, 0x88, 0x00, 0xc9, 0x0e, 0xc4, 0x7c, - 0x81, 0xae, 0x3a, 0x82, 0xee, 0x9c, 0x2a, 0x91, 0xa7, 0x15, 0x5f, 0xb8, 0xa1, 0xb4, 0x12, 0x18, - 0x59, 0x87, 0x11, 0xd3, 0x2a, 0x39, 0xd4, 0x75, 0xd5, 0x18, 0xca, 0x23, 0x28, 0x68, 0x93, 0x63, - 0xeb, 0xb6, 0xb5, 0x6f, 0x96, 0x32, 0xb3, 0xcc, 0x30, 0x41, 0x26, 0x49, 0xf1, 0x39, 0xc9, 0x6d, - 0x18, 0x75, 0xa9, 0x73, 0x6c, 0x16, 0xa9, 0xab, 0x82, 0x24, 0x65, 0x97, 0x83, 0x42, 0x0a, 0x1a, - 0xe3, 0xd3, 0xc9, 0xc6, 0xf8, 0x18, 0xcb, 0x71, 0xb7, 0x78, 0x40, 0x8d, 0x5a, 0x99, 0x3a, 0x6a, - 0x3c, 0xc8, 0xf1, 0x26, 0x28, 0xe7, 0x78, 0x13, 0x4c, 0xea, 0x10, 0x97, 0xbe, 0x16, 0x79, 0x11, - 0xa2, 0x47, 0x94, 0x1f, 0xac, 0x58, 0x66, 0xaa, 0x51, 0x4f, 0x8d, 0x1f, 0x51, 0xf9, 0x4c, 0xb1, - 0x5d, 0x72, 0x15, 0x86, 0x8e, 0xf5, 0x72, 0x8d, 0xe2, 0x77, 0x89, 0x65, 0xa6, 0x1b, 0xf5, 0xd4, - 0x24, 0x02, 0x12, 0x21, 0xa7, 0xb8, 0x39, 0x70, 0x5d, 0x49, 0xee, 0x43, 0xa2, 0x35, 0x1f, 0xcf, - 0x45, 0x4f, 0x05, 0x2e, 0x74, 0x49, 0xc2, 0xf3, 0x50, 0xa7, 0xfd, 0x3b, 0x0a, 0xe3, 0xa1, 0x4f, - 0x4d, 0x6e, 0xc2, 0xa0, 0x77, 0x52, 0xa5, 0xa8, 0x66, 0x62, 0x35, 0x21, 0x27, 0xc3, 0xc3, 0x93, - 0x2a, 0xc5, 0x33, 0x3e, 0xc1, 0x28, 0x42, 0x09, 0x8a, 0x3c, 0x4c, 0x79, 0xd5, 0x76, 0x3c, 0x57, - 0x1d, 0x58, 0x8c, 0x2e, 0x8d, 0x73, 0xe5, 0x08, 0xc8, 0xca, 0x11, 0x20, 0xef, 0x87, 0x8b, 0x41, - 0x14, 0x93, 0xe6, 0xc5, 0xf6, 0xd4, 0x7b, 0xfa, 0x2a, 0x70, 0x03, 0xe2, 0x5e, 0xd9, 0xcd, 0x53, - 0x4b, 0x2f, 0x94, 0xa9, 0xa1, 0x0e, 0x2e, 0x2a, 0x4b, 0xa3, 0x19, 0xb5, 0x51, 0x4f, 0xcd, 0x78, - 0x2c, 0xa2, 0x88, 0x4a, 0xbc, 0x10, 0xa0, 0x58, 0x33, 0xa9, 0xe3, 0xe5, 0x59, 0x15, 0x55, 0x87, - 0xa4, 0x9a, 0x49, 0x1d, 0x6f, 0x5b, 0xaf, 0xd0, 0x50, 0xcd, 0x14, 0x18, 0xb9, 0x05, 0xe3, 0x35, - 0x97, 0xe6, 0x8b, 0xe5, 0x9a, 0xeb, 0x51, 0x67, 0x73, 0x47, 0x1d, 0x46, 0x8d, 0xc9, 0x46, 0x3d, - 0x35, 0x57, 0x73, 0xe9, 0xba, 0x8f, 0x4b, 0xcc, 0x63, 0x32, 0xfe, 0x65, 0xa5, 0x98, 0xe6, 0xc1, - 0x78, 0xe8, 0x5c, 0x92, 0xeb, 0x1d, 0x3e, 0xb9, 0xa0, 0xc0, 0x4f, 0x4e, 0xda, 0x3f, 0x79, 0xdf, - 0x1f, 0x5c, 0xfb, 0x8b, 0x02, 0x89, 0xd6, 0x9a, 0xcb, 0xf8, 0x3f, 0xa8, 0xd1, 0x1a, 0x15, 0x0e, - 0x22, 0x3f, 0x02, 0x32, 0x3f, 0x02, 0xe4, 0xff, 0x01, 0x0e, 0xed, 0x42, 0xde, 0xa5, 0x78, 0x91, - 0x0d, 0x04, 0x1f, 0xe5, 0xd0, 0x2e, 0xec, 0xd2, 0x96, 0x8b, 0xcc, 0xc7, 0x88, 0x01, 0x53, 0x8c, - 0xcb, 0xe1, 0xfa, 0xf2, 0x8c, 0xc0, 0x4f, 0xb6, 0xf9, 0xae, 0xd7, 0x40, 0xe6, 0x85, 0x46, 0x3d, - 0x35, 0x7f, 0x68, 0x17, 0x24, 0x4c, 0xf6, 0x68, 0xb2, 0x65, 0x4b, 0xfb, 0x8d, 0x02, 0x53, 0x5b, - 0x76, 0x61, 0xc7, 0xa1, 0x8c, 0xe0, 0x4b, 0x73, 0xee, 0x55, 0x18, 0x61, 0x5c, 0xa6, 0xc1, 0x5d, - 0x8a, 0xf1, 0xfb, 0xf7, 0xd0, 0x2e, 0x6c, 0x1a, 0xa1, 0xfb, 0x97, 0x23, 0xda, 0x7f, 0xf8, 0x17, - 0x58, 0xd7, 0xad, 0x22, 0x2d, 0xfb, 0x46, 0x2e, 0xc3, 0x30, 0x97, 0x21, 0x5b, 0x89, 0x0c, 0xb2, - 0x95, 0x08, 0x3c, 0xa5, 0x95, 0xcd, 0x30, 0x44, 0x7b, 0x86, 0x41, 0x72, 0x68, 0xb0, 0xb7, 0x43, - 0xe4, 0x15, 0x18, 0x76, 0xa8, 0xee, 0xda, 0x96, 0x38, 0xa3, 0x48, 0xcd, 0x11, 0x99, 0x9a, 0x23, - 0xda, 0x3f, 0x14, 0x98, 0xde, 0x42, 0xa3, 0xc2, 0x11, 0x08, 0x7b, 0xa5, 0xf4, 0xeb, 0xd5, 0x40, - 0x4f, 0xaf, 0x6e, 0xc1, 0xf0, 0xbe, 0x59, 0xf6, 0xa8, 0x83, 0x11, 0x88, 0xaf, 0x4e, 0x35, 0x13, - 0x8f, 0x7a, 0xb7, 0x71, 0x83, 0x5b, 0xce, 0x89, 0x64, 0xcb, 0x39, 0x22, 0xf9, 0x39, 0x78, 0x06, - 0x3f, 0xdf, 0x82, 0x31, 0x59, 0x36, 0xf9, 0x3a, 0x0c, 0xbb, 0x9e, 0xee, 0x51, 0x57, 0x55, 0x16, - 0xa3, 0x4b, 0x13, 0xab, 0xe3, 0x4d, 0xf5, 0x0c, 0xe5, 0xc2, 0x38, 0x81, 0x2c, 0x8c, 0x23, 0xda, - 0x17, 0x93, 0x10, 0xdd, 0xb2, 0x0b, 0x64, 0x11, 0x06, 0x9a, 0xc1, 0x49, 0x34, 0xea, 0xa9, 0x31, - 0x53, 0x0e, 0xcb, 0x80, 0x69, 0x84, 0xfb, 0xcc, 0xf1, 0x33, 0xf6, 0x99, 0xe7, 0x9e, 0x51, 0xa1, - 0xa6, 0x79, 0xe4, 0xcc, 0x4d, 0x73, 0xa6, 0xd9, 0xff, 0xf2, 0x9e, 0x68, 0xc6, 0x8f, 0x59, 0x1f, - 0xed, 0xee, 0x3b, 0xe1, 0x1b, 0x0e, 0xc2, 0x45, 0xe7, 0xe9, 0xef, 0xb5, 0xe3, 0x2e, 0xcd, 0x6d, - 0x1c, 0x15, 0x2c, 0x36, 0x15, 0x3c, 0xef, 0x5e, 0xf6, 0x2a, 0x0c, 0xd9, 0x8f, 0x2c, 0xea, 0x88, - 0x21, 0x02, 0xa3, 0x8e, 0x80, 0x1c, 0x75, 0x04, 0x08, 0x85, 0x8b, 0x18, 0xfe, 0x3c, 0x2e, 0xdd, - 0x03, 0xb3, 0x9a, 0xaf, 0xb9, 0xd4, 0xc9, 0x97, 0x1c, 0xbb, 0x56, 0x75, 0xd5, 0x49, 0x3c, 0xdb, - 0x57, 0x1a, 0xf5, 0x94, 0x86, 0x64, 0x0f, 0x7c, 0xaa, 0x3d, 0x97, 0x3a, 0x77, 0x90, 0x46, 0x92, - 0xa9, 0x76, 0xa3, 0x21, 0x3f, 0x56, 0xe0, 0x4a, 0xd1, 0xae, 0x54, 0x59, 0xb7, 0x40, 0x8d, 0xfc, - 0x69, 0x2a, 0xa7, 0x17, 0x95, 0xa5, 0xb1, 0xcc, 0x6b, 0x8d, 0x7a, 0xea, 0x95, 0x80, 0xe3, 0xed, - 0xde, 0xca, 0xb5, 0xde, 0xd4, 0xa1, 0x61, 0x6e, 0xf0, 0x8c, 0xc3, 0x9c, 0x3c, 0x18, 0x0c, 0x3d, - 0xf7, 0xc1, 0x60, 0xec, 0x79, 0x0c, 0x06, 0xbf, 0x54, 0x60, 0x51, 0xb4, 0xd8, 0xa6, 0x55, 0xca, - 0x3b, 0xd4, 0xb5, 0x6b, 0x4e, 0x91, 0xe6, 0x45, 0x6a, 0x54, 0xa8, 0xe5, 0xb9, 0xea, 0x2c, 0xda, - 0xbe, 0xd4, 0x49, 0x53, 0x4e, 0x30, 0xe4, 0x24, 0xfa, 0xcc, 0x95, 0x4f, 0xeb, 0xa9, 0x48, 0xa3, - 0x9e, 0x5a, 0x08, 0x24, 0x77, 0xa2, 0xcb, 0xf5, 0xd8, 0x27, 0x9b, 0x30, 0x52, 0x74, 0x28, 0x9b, - 0xe6, 0xb1, 0xcd, 0x8a, 0xaf, 0x26, 0xd3, 0x7c, 0x9c, 0x4f, 0xfb, 0x73, 0x7a, 0xfa, 0xa1, 0xff, - 0x7a, 0x90, 0x99, 0x16, 0x4a, 0x7d, 0x96, 0x8f, 0xbe, 0x48, 0x29, 0x39, 0x7f, 0x21, 0x0f, 0x40, - 0x13, 0xcf, 0x65, 0x00, 0x4a, 0x3c, 0xc3, 0x00, 0xf4, 0x1d, 0x88, 0x1f, 0x5d, 0x77, 0xf3, 0xbe, - 0x41, 0x53, 0x28, 0xea, 0xb2, 0x1c, 0xde, 0xe0, 0x51, 0x83, 0x05, 0x59, 0x58, 0xc9, 0xfb, 0xda, - 0xa3, 0xeb, 0xee, 0x66, 0x9b, 0x89, 0x10, 0xa0, 0xac, 0x24, 0x31, 0xe9, 0x42, 0x9b, 0x4a, 0xba, - 0xa7, 0x89, 0xb0, 0xbb, 0x29, 0x57, 0xac, 0x5b, 0xe4, 0x0a, 0x34, 0x3c, 0xb6, 0xcd, 0x9c, 0x75, - 0x6c, 0x23, 0x9b, 0x30, 0xc5, 0xcf, 0xac, 0xe7, 0x95, 0xf3, 0x2e, 0x2d, 0xda, 0x96, 0xe1, 0xaa, - 0x73, 0x8b, 0xca, 0x52, 0x94, 0x77, 0x60, 0xb8, 0xf9, 0xd0, 0x2b, 0xef, 0xf2, 0x2d, 0xb9, 0x03, - 0x6b, 0xd9, 0xfa, 0xdf, 0x04, 0xf8, 0xd4, 0xd3, 0xc0, 0x3f, 0x15, 0x98, 0xdb, 0x62, 0xfd, 0xac, - 0xa8, 0x4d, 0xe6, 0xf7, 0xa9, 0xdf, 0x19, 0x49, 0xed, 0x98, 0x72, 0x86, 0x76, 0xec, 0xdc, 0x2f, - 0xf3, 0x37, 0x61, 0xcc, 0xa2, 0x8f, 0xf2, 0x2d, 0xc5, 0x16, 0xef, 0x4d, 0x8b, 0x3e, 0xda, 0x69, - 0xaf, 0xb7, 0x71, 0x09, 0xd6, 0x7e, 0x3b, 0x00, 0x17, 0xda, 0x1c, 0x75, 0xab, 0xb6, 0xe5, 0x52, - 0xf2, 0x2b, 0x05, 0x54, 0x27, 0xd8, 0xc0, 0x4f, 0xcc, 0x2a, 0x5e, 0xad, 0xec, 0x71, 0xdf, 0xe3, - 0xab, 0x37, 0xfc, 0x8b, 0xb5, 0x93, 0x80, 0x74, 0xae, 0x85, 0x39, 0xc7, 0x79, 0xf9, 0x8d, 0xfb, - 0x72, 0xa3, 0x9e, 0xba, 0xec, 0x74, 0xa6, 0x90, 0xac, 0xbd, 0xd0, 0x85, 0x24, 0xe9, 0xc0, 0xa5, - 0xd3, 0xe4, 0x9f, 0x4b, 0x5a, 0x58, 0x30, 0x2b, 0x8d, 0x46, 0xdc, 0x4b, 0x7c, 0xba, 0xec, 0x67, - 0x60, 0xb8, 0x0a, 0x43, 0xd4, 0x71, 0x6c, 0x47, 0xd6, 0x89, 0x80, 0x4c, 0x8a, 0x80, 0xf6, 0x21, - 0x4e, 0x50, 0x61, 0x7d, 0xe4, 0x00, 0x08, 0x9f, 0xde, 0xf8, 0x5a, 0x8c, 0x6f, 0xfc, 0x7b, 0x24, - 0x5b, 0xc7, 0xb7, 0xc0, 0xc6, 0xcc, 0x42, 0xa3, 0x9e, 0x4a, 0xe2, 0x90, 0x16, 0x80, 0x72, 0xa4, - 0x13, 0xad, 0x7b, 0xda, 0x9f, 0x47, 0x61, 0x08, 0x2f, 0x78, 0x72, 0x05, 0x06, 0x71, 0xec, 0xe7, - 0xde, 0xe1, 0xe8, 0x6b, 0x85, 0x47, 0x7e, 0xdc, 0x27, 0x59, 0x98, 0xf4, 0x13, 0x31, 0xbf, 0xaf, - 0x17, 0x3d, 0xe1, 0xa5, 0x92, 0xb9, 0xd4, 0xa8, 0xa7, 0x54, 0x7f, 0xeb, 0x36, 0xee, 0x48, 0xcc, - 0x13, 0xe1, 0x1d, 0x72, 0x03, 0xe2, 0xd8, 0xa7, 0xf0, 0xb6, 0x45, 0xcc, 0x71, 0x58, 0x75, 0x19, - 0xcc, 0xdb, 0x0d, 0xb9, 0xea, 0x06, 0x28, 0x3b, 0x0e, 0xd8, 0xdd, 0xf8, 0xbc, 0x7c, 0x64, 0xc2, - 0xe3, 0x80, 0x78, 0x1b, 0x73, 0x5c, 0x82, 0x49, 0x09, 0x26, 0x9b, 0x57, 0x7a, 0xd9, 0xac, 0x98, - 0x9e, 0xff, 0x22, 0xbb, 0x80, 0x81, 0xc5, 0x60, 0x34, 0xef, 0xf0, 0x7b, 0x48, 0xc0, 0xb3, 0x99, - 0x05, 0x57, 0x75, 0x42, 0x1b, 0xa1, 0x96, 0x64, 0x22, 0xbc, 0x47, 0x7e, 0xa7, 0xc0, 0x95, 0x16, - 0x4d, 0xf9, 0xc2, 0x49, 0xf3, 0x14, 0xe7, 0x8b, 0x65, 0xdd, 0x75, 0xf9, 0x53, 0xcb, 0x88, 0xf4, - 0x3e, 0xdb, 0xc9, 0x80, 0xcc, 0x89, 0x7f, 0x9a, 0xd7, 0x19, 0xd3, 0xb6, 0x5e, 0xa1, 0xdc, 0xa6, - 0xab, 0xe2, 0x86, 0xbf, 0xec, 0xf4, 0xa2, 0xcf, 0xf5, 0x26, 0x21, 0xbb, 0x10, 0xaf, 0x52, 0xa7, - 0x62, 0xba, 0x2e, 0x76, 0xee, 0xfc, 0xd5, 0x78, 0x4e, 0xb2, 0x6a, 0x27, 0xd8, 0xe5, 0xf1, 0x96, - 0xc8, 0xe5, 0x78, 0x4b, 0x70, 0xf2, 0x5f, 0x0a, 0xc4, 0x25, 0x3e, 0x92, 0x83, 0x51, 0xb7, 0x56, - 0x38, 0xa4, 0xc5, 0x66, 0x85, 0x59, 0xe8, 0xac, 0x21, 0xbd, 0xcb, 0xc9, 0x44, 0xf7, 0x20, 0x78, - 0x42, 0xdd, 0x83, 0xc0, 0xf0, 0x8c, 0x53, 0xa7, 0xc0, 0x9f, 0x63, 0xfc, 0x33, 0xce, 0x80, 0xd0, - 0x19, 0x67, 0x40, 0xf2, 0x3d, 0x18, 0x11, 0x72, 0x59, 0xc6, 0x1f, 0x99, 0x96, 0x21, 0x67, 0x3c, - 0x5b, 0xcb, 0x19, 0xcf, 0xd6, 0xcd, 0x93, 0x31, 0x70, 0xfa, 0xc9, 0x48, 0x9a, 0x30, 0xdd, 0x21, - 0x6f, 0x9e, 0xa2, 0x4a, 0x29, 0x3d, 0xef, 0xca, 0x8f, 0x15, 0xb8, 0x72, 0xb6, 0x14, 0x39, 0x9b, - 0xfa, 0xb7, 0x64, 0xf5, 0xfe, 0x30, 0x15, 0x12, 0xd8, 0xa2, 0xad, 0x57, 0x19, 0xfd, 0xc9, 0x10, - 0x5c, 0x3c, 0x85, 0x9f, 0x35, 0xd9, 0xf3, 0x15, 0xfd, 0x7b, 0x66, 0xa5, 0x56, 0x09, 0x3a, 0xec, - 0x7d, 0x47, 0x2f, 0xb2, 0x22, 0x2f, 0xf2, 0xe2, 0x1b, 0xbd, 0xac, 0x48, 0xdf, 0xe7, 0x12, 0x7c, - 0xf4, 0xb6, 0xe0, 0xe7, 0x67, 0x23, 0x25, 0xce, 0xc6, 0x85, 0x4a, 0x67, 0xaa, 0x5c, 0xb7, 0x0d, - 0xf2, 0x7b, 0x05, 0x2e, 0x77, 0x35, 0x0e, 0xcf, 0xb0, 0x6d, 0x97, 0x31, 0xd7, 0xe2, 0xab, 0xeb, - 0x4f, 0x6b, 0x64, 0xe6, 0x64, 0xc7, 0xb6, 0xcb, 0xe2, 0xa2, 0x14, 0xa6, 0xbe, 0x50, 0x39, 0x8d, - 0x36, 0x77, 0xfa, 0x36, 0xbb, 0x2e, 0x4f, 0x0b, 0xc8, 0x79, 0x25, 0xa2, 0xd6, 0xdb, 0xc1, 0xb3, - 0xa9, 0x7e, 0x10, 0x4e, 0xc2, 0x97, 0xda, 0x23, 0x8b, 0x51, 0xe8, 0x2f, 0x11, 0xff, 0x30, 0x00, - 0xa9, 0x1e, 0x32, 0xc8, 0xc7, 0x67, 0x48, 0xc6, 0xb5, 0xb3, 0x58, 0x73, 0x4e, 0x09, 0xf9, 0x55, - 0x7c, 0x59, 0x2d, 0x0b, 0x31, 0x2c, 0xc9, 0xf7, 0x4c, 0xd7, 0x23, 0xd7, 0x61, 0x18, 0x5b, 0x51, - 0xbf, 0x64, 0x43, 0x50, 0xb2, 0x79, 0x73, 0xcc, 0x77, 0xe5, 0xe6, 0x98, 0x23, 0xda, 0x1e, 0x10, - 0xfe, 0xec, 0x58, 0x96, 0xfa, 0x37, 0x72, 0x0b, 0xc6, 0x8b, 0x1c, 0xa5, 0x86, 0xd4, 0x67, 0xe3, - 0x6f, 0x06, 0xcd, 0x8d, 0x70, 0xb7, 0x3d, 0x26, 0xe3, 0xda, 0x0d, 0x98, 0x44, 0xed, 0x77, 0x68, - 0xf3, 0xd9, 0xf9, 0x8c, 0x0d, 0x8c, 0x76, 0x0b, 0xd4, 0x5d, 0xcf, 0xa1, 0x7a, 0xc5, 0xb4, 0x4a, - 0xad, 0x32, 0x5e, 0x84, 0xa8, 0x55, 0xab, 0xa0, 0x88, 0x71, 0x1e, 0x48, 0xab, 0x56, 0x91, 0x03, - 0x69, 0xd5, 0x2a, 0xda, 0x9b, 0x40, 0x90, 0x6f, 0x83, 0x96, 0xa9, 0x47, 0xfb, 0x55, 0xff, 0x89, - 0x02, 0xc0, 0xdf, 0x29, 0x37, 0xad, 0x7d, 0xfb, 0xcc, 0x6d, 0xd7, 0x0d, 0x88, 0x63, 0x44, 0x8d, - 0xfc, 0xa1, 0x8d, 0x17, 0x9d, 0xb2, 0x34, 0xc4, 0xfb, 0x25, 0x0e, 0x6f, 0xd9, 0xa1, 0xdb, 0x0e, - 0x02, 0x94, 0xb1, 0x96, 0xa9, 0xee, 0xfa, 0xac, 0xd1, 0x80, 0x95, 0xc3, 0xad, 0xac, 0x01, 0xaa, - 0x3d, 0x82, 0x69, 0x74, 0x75, 0xaf, 0x6a, 0xe8, 0x5e, 0x30, 0x36, 0xbc, 0x21, 0xbf, 0xf0, 0x87, - 0xb3, 0xe1, 0xb4, 0x39, 0xa6, 0x8f, 0xb6, 0xb8, 0x06, 0x6a, 0x46, 0xf7, 0x8a, 0x07, 0x9d, 0xb4, - 0xbf, 0x07, 0xe3, 0xfb, 0xba, 0x59, 0xf6, 0x5f, 0xbe, 0xfc, 0x9c, 0x54, 0x03, 0x2b, 0xc2, 0x0c, - 0x3c, 0xad, 0x38, 0xcb, 0xdb, 0xad, 0x79, 0x3a, 0x26, 0xe3, 0x4d, 0x7f, 0xd7, 0xf1, 0x8d, 0xe4, - 0xab, 0xf2, 0xb7, 0x45, 0x7b, 0x6f, 0x7f, 0xc3, 0x0c, 0x7d, 0xf8, 0x1b, 0x87, 0x58, 0xd6, 0x32, - 0xee, 0xeb, 0xce, 0x11, 0x75, 0xb4, 0x8f, 0x14, 0x98, 0x0d, 0x9f, 0x8c, 0xfb, 0xd4, 0x75, 0xf5, - 0x12, 0x25, 0x5f, 0xeb, 0xcf, 0xff, 0xbb, 0x91, 0xe0, 0x19, 0x3a, 0x4a, 0x2d, 0x43, 0x14, 0xf4, - 0x09, 0x64, 0x6b, 0xea, 0xe3, 0xe7, 0x8b, 0xca, 0x0d, 0xd7, 0xdd, 0x48, 0x8e, 0xd1, 0x67, 0x46, - 0x60, 0x88, 0x1e, 0x53, 0xcb, 0x5b, 0x4e, 0x42, 0x5c, 0xfa, 0x0d, 0x96, 0xc4, 0x61, 0x44, 0x2c, - 0x13, 0x91, 0xe5, 0xab, 0x10, 0x97, 0x7e, 0xac, 0x23, 0x63, 0x30, 0xba, 0x6d, 0x1b, 0x74, 0xc7, - 0x76, 0xbc, 0x44, 0x84, 0xad, 0xee, 0x52, 0xdd, 0x28, 0x33, 0x52, 0x65, 0xf9, 0xe7, 0x0a, 0x8c, - 0xfa, 0x0f, 0xff, 0x04, 0x60, 0xf8, 0xed, 0xbd, 0xec, 0x5e, 0x76, 0x23, 0x11, 0x61, 0x02, 0x77, - 0xb2, 0xdb, 0x1b, 0x9b, 0xdb, 0x77, 0x12, 0x0a, 0x5b, 0xe4, 0xf6, 0xb6, 0xb7, 0xd9, 0x62, 0x80, - 0x8c, 0x43, 0x6c, 0x77, 0x6f, 0x7d, 0x3d, 0x9b, 0xdd, 0xc8, 0x6e, 0x24, 0xa2, 0x8c, 0xe9, 0xf6, - 0xda, 0xe6, 0xbd, 0xec, 0x46, 0x62, 0x90, 0xd1, 0xed, 0x6d, 0xbf, 0xb5, 0xfd, 0xe0, 0xdd, 0xed, - 0xc4, 0x10, 0xa7, 0xcb, 0xdc, 0xdf, 0x7c, 0xf8, 0x30, 0xbb, 0x91, 0x18, 0x66, 0x74, 0xf7, 0xb2, - 0x6b, 0xbb, 0xd9, 0x8d, 0xc4, 0x08, 0xdb, 0xda, 0xc9, 0x65, 0xb3, 0xf7, 0x77, 0xd8, 0xd6, 0x28, - 0x5b, 0xae, 0xaf, 0x6d, 0xaf, 0x67, 0xef, 0x31, 0x29, 0xb1, 0xd5, 0x3f, 0x46, 0x61, 0x0c, 0x43, - 0xe8, 0x3f, 0x26, 0xbd, 0x0e, 0x71, 0xfe, 0x1d, 0xf9, 0x3c, 0x26, 0x05, 0x39, 0x39, 0xd7, 0xf6, - 0xc8, 0x97, 0x65, 0xe1, 0xd2, 0x22, 0xe4, 0x16, 0x8c, 0x49, 0x4c, 0x2e, 0x99, 0x08, 0xb8, 0x58, - 0xe1, 0x4e, 0xbe, 0x80, 0xeb, 0x6e, 0xa9, 0xa5, 0x45, 0x98, 0x56, 0x7e, 0x5a, 0xfa, 0xd4, 0x2a, - 0x31, 0xf5, 0xd6, 0x1a, 0x3e, 0x8f, 0x5a, 0x84, 0x7c, 0x13, 0xe2, 0xbc, 0x7a, 0x72, 0xad, 0x17, - 0x02, 0xfe, 0x50, 0x51, 0x3d, 0xc5, 0x84, 0x34, 0x8c, 0xde, 0xa1, 0x1e, 0x67, 0x9f, 0x09, 0xd8, - 0x83, 0x5a, 0x9e, 0x94, 0x5c, 0xd1, 0x22, 0x64, 0x0b, 0x62, 0x3e, 0xbd, 0x4b, 0xb8, 0x7d, 0xdd, - 0x6e, 0x81, 0x64, 0xb2, 0xc3, 0xb6, 0x38, 0x0a, 0x5a, 0xe4, 0x35, 0x65, 0xf5, 0x67, 0x31, 0x18, - 0xe6, 0xd3, 0x37, 0x79, 0x07, 0x80, 0xff, 0x85, 0x95, 0x76, 0xb6, 0xe3, 0x4f, 0xab, 0xc9, 0xb9, - 0xce, 0x23, 0xbb, 0x36, 0xff, 0xa3, 0x3f, 0xfd, 0xfd, 0x17, 0x03, 0xd3, 0xda, 0xc4, 0xca, 0xf1, - 0xb5, 0x95, 0x43, 0xbb, 0x20, 0xfe, 0x71, 0xec, 0xa6, 0xb2, 0x4c, 0xde, 0x05, 0xe0, 0xd7, 0x66, - 0x58, 0x6e, 0xe8, 0x17, 0xbc, 0x24, 0x0f, 0x5b, 0xfb, 0xf5, 0xda, 0x2e, 0x98, 0xdf, 0x9d, 0x4c, - 0xf0, 0x77, 0x61, 0xac, 0x29, 0x78, 0x97, 0x7a, 0x44, 0x95, 0x7e, 0x94, 0x0b, 0x4b, 0xef, 0x16, - 0xfb, 0x4b, 0x28, 0x7c, 0x4e, 0x9b, 0x12, 0xc2, 0x5d, 0xea, 0x49, 0xf2, 0x2d, 0x48, 0xc8, 0x0f, - 0x45, 0x68, 0xfe, 0xc5, 0xce, 0x4f, 0x48, 0x5c, 0xcd, 0xa5, 0xd3, 0xde, 0x97, 0xb4, 0x14, 0x2a, - 0x9b, 0xd7, 0x66, 0x7c, 0x4f, 0xa4, 0xb7, 0x22, 0xca, 0xf4, 0xbd, 0x07, 0x71, 0xf1, 0xf3, 0x33, - 0xaa, 0x6a, 0x86, 0x3a, 0xfc, 0x9b, 0x74, 0x57, 0x67, 0x92, 0x28, 0x7f, 0x46, 0x9b, 0xf4, 0xe5, - 0x57, 0x39, 0x1f, 0x13, 0x7d, 0xa7, 0xff, 0x03, 0x39, 0x83, 0xe2, 0x26, 0xb4, 0x18, 0x13, 0x87, - 0x25, 0x90, 0x09, 0x2a, 0x3e, 0xdb, 0x21, 0x7d, 0x09, 0x85, 0x2e, 0x68, 0xf3, 0x4c, 0x68, 0x81, - 0x51, 0x51, 0x63, 0x85, 0xbf, 0xe2, 0x8b, 0x1b, 0x81, 0x29, 0xd9, 0xee, 0xff, 0x20, 0x5f, 0x44, - 0xc1, 0xb3, 0xc9, 0x44, 0xd3, 0xda, 0x95, 0x1f, 0xb0, 0x66, 0xe3, 0x43, 0x61, 0xf4, 0xb3, 0x9c, - 0x71, 0x61, 0x74, 0x32, 0x64, 0x74, 0x0d, 0x69, 0x24, 0xa3, 0xbf, 0xf5, 0x8c, 0x75, 0x40, 0x45, - 0x2d, 0x64, 0xb9, 0xcd, 0x03, 0x72, 0xbb, 0xaf, 0xfa, 0x20, 0xe4, 0x90, 0x76, 0x39, 0xc6, 0x73, - 0xaa, 0x1b, 0x22, 0xd1, 0x08, 0x91, 0xe3, 0xc1, 0x03, 0xf1, 0x9a, 0x42, 0x6e, 0xc2, 0xf0, 0x5d, - 0xfc, 0x07, 0x4a, 0xd2, 0xc5, 0xd3, 0x24, 0x3f, 0xa7, 0x9c, 0x68, 0xfd, 0x80, 0x16, 0x8f, 0x9a, - 0xb7, 0xfd, 0xfb, 0x9f, 0xff, 0x6d, 0x21, 0xf2, 0xc3, 0xc7, 0x0b, 0xca, 0xa7, 0x8f, 0x17, 0x94, - 0xcf, 0x1e, 0x2f, 0x28, 0x7f, 0x7d, 0xbc, 0xa0, 0x7c, 0xf4, 0x64, 0x21, 0xf2, 0xd9, 0x93, 0x85, - 0xc8, 0xe7, 0x4f, 0x16, 0x22, 0xdf, 0xfe, 0x3f, 0xe9, 0x7f, 0x3a, 0x75, 0xa7, 0xa2, 0x1b, 0x7a, - 0xd5, 0xb1, 0x0f, 0x69, 0xd1, 0x13, 0xab, 0x15, 0xf1, 0x4f, 0x9c, 0x9f, 0x0c, 0xcc, 0xac, 0x21, - 0xb0, 0xc3, 0xb7, 0xd3, 0x9b, 0x76, 0x7a, 0xad, 0x6a, 0x16, 0x86, 0xd1, 0x96, 0xd7, 0xff, 0x1b, - 0x00, 0x00, 0xff, 0xff, 0x52, 0xad, 0xfa, 0xb1, 0xe1, 0x2a, 0x00, 0x00, + // 2967 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x6f, 0x1b, 0xc7, + 0x15, 0xe7, 0x8a, 0xfa, 0xe2, 0xa3, 0x3e, 0xa8, 0xd1, 0x87, 0x57, 0xb4, 0x23, 0xca, 0x9b, 0xc4, + 0x95, 0x85, 0x84, 0x8a, 0x95, 0x06, 0xb5, 0xdd, 0x14, 0xae, 0x28, 0xd1, 0xb6, 0x64, 0x5b, 0x56, + 0x28, 0x2b, 0x69, 0x8a, 0xa2, 0xcc, 0x92, 0x3b, 0xa2, 0x56, 0x22, 0x77, 0x99, 0xdd, 0xa5, 0x5c, + 0xb5, 0x08, 0x50, 0x14, 0x45, 0x7b, 0xe8, 0x25, 0x45, 0x6f, 0x2d, 0x90, 0x1e, 0x7a, 0x4b, 0x0f, + 0xbd, 0x14, 0x45, 0xff, 0x84, 0x1c, 0x03, 0x14, 0x05, 0xd2, 0x0b, 0xd1, 0x38, 0xfd, 0x00, 0x78, + 0xeb, 0xbd, 0x87, 0x62, 0xde, 0xcc, 0x72, 0x67, 0xf9, 0x21, 0x8a, 0xb6, 0x95, 0x5c, 0x7a, 0xd3, + 0xfc, 0xe6, 0x7d, 0xef, 0x9b, 0x37, 0xef, 0x0d, 0x05, 0x33, 0xd5, 0xa3, 0xd2, 0x8a, 0x5e, 0x35, + 0x57, 0xdc, 0x5a, 0xa1, 0x62, 0x7a, 0xe9, 0xaa, 0x63, 0x7b, 0x36, 0x89, 0xea, 0x55, 0x33, 0x79, + 0xb1, 0x64, 0xdb, 0xa5, 0x32, 0x5d, 0x41, 0xa8, 0x50, 0xdb, 0x5f, 0xa1, 0x95, 0xaa, 0x77, 0xc2, + 0x29, 0x92, 0xa9, 0xd6, 0x4d, 0xcf, 0xac, 0x50, 0xd7, 0xd3, 0x2b, 0x55, 0x41, 0xa0, 0x1d, 0x5d, + 0x77, 0xd3, 0xa6, 0x8d, 0xb2, 0x8b, 0xb6, 0x43, 0x57, 0x8e, 0xaf, 0xad, 0x94, 0xa8, 0x45, 0x1d, + 0xdd, 0xa3, 0x86, 0xa0, 0x59, 0x92, 0x68, 0x2c, 0xea, 0x3d, 0xb6, 0x9d, 0x23, 0xd3, 0x2a, 0x75, + 0xa2, 0xbc, 0x24, 0xd4, 0x31, 0x4a, 0xdd, 0xb2, 0x6c, 0x4f, 0xf7, 0x4c, 0xdb, 0x72, 0xc5, 0xee, + 0xab, 0x25, 0xd3, 0x3b, 0xa8, 0x15, 0xd2, 0x45, 0xbb, 0xb2, 0x52, 0xb2, 0x4b, 0x76, 0x60, 0x15, + 0x5b, 0xe1, 0x02, 0xff, 0x12, 0xe4, 0x4d, 0x9f, 0x0f, 0xa8, 0x5e, 0xf6, 0x0e, 0x38, 0xaa, 0xfd, + 0x36, 0x06, 0x33, 0x5b, 0x76, 0x61, 0x17, 0xe3, 0x90, 0xa3, 0xef, 0xd7, 0xa8, 0xeb, 0x6d, 0x7a, + 0xb4, 0x42, 0x56, 0x61, 0xb4, 0xea, 0x98, 0xb6, 0x63, 0x7a, 0x27, 0xaa, 0xb2, 0xa8, 0x2c, 0x29, + 0x99, 0xb9, 0x46, 0x3d, 0x45, 0x7c, 0xec, 0x15, 0xbb, 0x62, 0x7a, 0x18, 0x9a, 0x5c, 0x93, 0x8e, + 0xbc, 0x01, 0x31, 0x4b, 0xaf, 0x50, 0xb7, 0xaa, 0x17, 0xa9, 0x1a, 0x5d, 0x54, 0x96, 0x62, 0x99, + 0x0b, 0x8d, 0x7a, 0x6a, 0xba, 0x09, 0x4a, 0x5c, 0x01, 0x25, 0x79, 0x1d, 0x62, 0xc5, 0xb2, 0x49, + 0x2d, 0x2f, 0x6f, 0x1a, 0xea, 0x28, 0xb2, 0xa1, 0x2e, 0x0e, 0x6e, 0x1a, 0xb2, 0x2e, 0x1f, 0x23, + 0xbb, 0x30, 0x5c, 0xd6, 0x0b, 0xb4, 0xec, 0xaa, 0x83, 0x8b, 0xd1, 0xa5, 0xf8, 0xea, 0xcb, 0x69, + 0xbd, 0x6a, 0xa6, 0x3b, 0xb9, 0x92, 0xbe, 0x8f, 0x74, 0x59, 0xcb, 0x73, 0x4e, 0x32, 0x33, 0x8d, + 0x7a, 0x2a, 0xc1, 0x19, 0x25, 0xb1, 0x42, 0x14, 0x29, 0x41, 0x5c, 0x8a, 0xb3, 0x3a, 0x84, 0x92, + 0x97, 0xbb, 0x4b, 0x5e, 0x0b, 0x88, 0xb9, 0xf8, 0xf9, 0x46, 0x3d, 0x35, 0x2b, 0x89, 0x90, 0x74, + 0xc8, 0x92, 0xc9, 0xcf, 0x15, 0x98, 0x71, 0xe8, 0xfb, 0x35, 0xd3, 0xa1, 0x46, 0xde, 0xb2, 0x0d, + 0x9a, 0x17, 0xce, 0x0c, 0xa3, 0xca, 0x6b, 0xdd, 0x55, 0xe6, 0x04, 0xd7, 0xb6, 0x6d, 0x50, 0xd9, + 0x31, 0xad, 0x51, 0x4f, 0x5d, 0x72, 0xda, 0x36, 0x03, 0x03, 0x54, 0x25, 0x47, 0xda, 0xf7, 0xc9, + 0x43, 0x18, 0xad, 0xda, 0x46, 0xde, 0xad, 0xd2, 0xa2, 0x3a, 0xb0, 0xa8, 0x2c, 0xc5, 0x57, 0x2f, + 0xa6, 0x79, 0x82, 0xa2, 0x0d, 0x2c, 0x89, 0xd3, 0xc7, 0xd7, 0xd2, 0x3b, 0xb6, 0xb1, 0x5b, 0xa5, + 0x45, 0xfc, 0x9e, 0x53, 0x55, 0xbe, 0x08, 0xc9, 0x1e, 0x11, 0x20, 0xd9, 0x81, 0x98, 0x2f, 0xd0, + 0x55, 0x47, 0xd0, 0x9d, 0x53, 0x25, 0xf2, 0xb4, 0xe2, 0x0b, 0x37, 0x94, 0x56, 0x02, 0x23, 0xeb, + 0x30, 0x62, 0x5a, 0x25, 0x87, 0xba, 0xae, 0x1a, 0x43, 0x79, 0x04, 0x05, 0x6d, 0x72, 0x6c, 0xdd, + 0xb6, 0xf6, 0xcd, 0x52, 0x66, 0x96, 0x19, 0x26, 0xc8, 0x24, 0x29, 0x3e, 0x27, 0xb9, 0x0d, 0xa3, + 0x2e, 0x75, 0x8e, 0xcd, 0x22, 0x75, 0x55, 0x90, 0xa4, 0xec, 0x72, 0x50, 0x48, 0x41, 0x63, 0x7c, + 0x3a, 0xd9, 0x18, 0x1f, 0x63, 0x39, 0xee, 0x16, 0x0f, 0xa8, 0x51, 0x2b, 0x53, 0x47, 0x8d, 0x07, + 0x39, 0xde, 0x04, 0xe5, 0x1c, 0x6f, 0x82, 0x49, 0x1d, 0xe2, 0xd2, 0xd7, 0x22, 0x2f, 0x42, 0xf4, + 0x88, 0xf2, 0x83, 0x15, 0xcb, 0x4c, 0x35, 0xea, 0xa9, 0xf1, 0x23, 0x2a, 0x9f, 0x29, 0xb6, 0x4b, + 0xae, 0xc2, 0xd0, 0xb1, 0x5e, 0xae, 0x51, 0xfc, 0x2e, 0xb1, 0xcc, 0x74, 0xa3, 0x9e, 0x9a, 0x44, + 0x40, 0x22, 0xe4, 0x14, 0x37, 0x07, 0xae, 0x2b, 0xc9, 0x7d, 0x48, 0xb4, 0xe6, 0xe3, 0xb9, 0xe8, + 0xa9, 0xc0, 0x85, 0x2e, 0x49, 0x78, 0x1e, 0xea, 0xb4, 0xff, 0x44, 0x61, 0x3c, 0xf4, 0xa9, 0xc9, + 0x4d, 0x18, 0xf4, 0x4e, 0xaa, 0x14, 0xd5, 0x4c, 0xac, 0x26, 0xe4, 0x64, 0x78, 0x74, 0x52, 0xa5, + 0x78, 0xc6, 0x27, 0x18, 0x45, 0x28, 0x41, 0x91, 0x87, 0x29, 0xaf, 0xda, 0x8e, 0xe7, 0xaa, 0x03, + 0x8b, 0xd1, 0xa5, 0x71, 0xae, 0x1c, 0x01, 0x59, 0x39, 0x02, 0xe4, 0xbd, 0x70, 0x31, 0x88, 0x62, + 0xd2, 0xbc, 0xd8, 0x9e, 0x7a, 0x4f, 0x5f, 0x05, 0x6e, 0x40, 0xdc, 0x2b, 0xbb, 0x79, 0x6a, 0xe9, + 0x85, 0x32, 0x35, 0xd4, 0xc1, 0x45, 0x65, 0x69, 0x34, 0xa3, 0x36, 0xea, 0xa9, 0x19, 0x8f, 0x45, + 0x14, 0x51, 0x89, 0x17, 0x02, 0x14, 0x6b, 0x26, 0x75, 0xbc, 0x3c, 0xab, 0xa2, 0xea, 0x90, 0x54, + 0x33, 0xa9, 0xe3, 0x6d, 0xeb, 0x15, 0x1a, 0xaa, 0x99, 0x02, 0x23, 0xb7, 0x60, 0xbc, 0xe6, 0xd2, + 0x7c, 0xb1, 0x5c, 0x73, 0x3d, 0xea, 0x6c, 0xee, 0xa8, 0xc3, 0xa8, 0x31, 0xd9, 0xa8, 0xa7, 0xe6, + 0x6a, 0x2e, 0x5d, 0xf7, 0x71, 0x89, 0x79, 0x4c, 0xc6, 0xbf, 0xac, 0x14, 0xd3, 0x3c, 0x18, 0x0f, + 0x9d, 0x4b, 0x72, 0xbd, 0xc3, 0x27, 0x17, 0x14, 0xf8, 0xc9, 0x49, 0xfb, 0x27, 0xef, 0xfb, 0x83, + 0x6b, 0x7f, 0x53, 0x20, 0xd1, 0x5a, 0x73, 0x19, 0xff, 0xfb, 0x35, 0x5a, 0xa3, 0xc2, 0x41, 0xe4, + 0x47, 0x40, 0xe6, 0x47, 0x80, 0x7c, 0x1d, 0xe0, 0xd0, 0x2e, 0xe4, 0x5d, 0x8a, 0x17, 0xd9, 0x40, + 0xf0, 0x51, 0x0e, 0xed, 0xc2, 0x2e, 0x6d, 0xb9, 0xc8, 0x7c, 0x8c, 0x18, 0x30, 0xc5, 0xb8, 0x1c, + 0xae, 0x2f, 0xcf, 0x08, 0xfc, 0x64, 0x9b, 0xef, 0x7a, 0x0d, 0x64, 0x5e, 0x68, 0xd4, 0x53, 0xf3, + 0x87, 0x76, 0x41, 0xc2, 0x64, 0x8f, 0x26, 0x5b, 0xb6, 0xb4, 0xdf, 0x29, 0x30, 0xb5, 0x65, 0x17, + 0x76, 0x1c, 0xca, 0x08, 0xbe, 0x34, 0xe7, 0x5e, 0x85, 0x11, 0xc6, 0x65, 0x1a, 0xdc, 0xa5, 0x18, + 0xbf, 0x7f, 0x0f, 0xed, 0xc2, 0xa6, 0x11, 0xba, 0x7f, 0x39, 0xa2, 0xfd, 0x97, 0x7f, 0x81, 0x75, + 0xdd, 0x2a, 0xd2, 0xb2, 0x6f, 0xe4, 0x32, 0x0c, 0x73, 0x19, 0xb2, 0x95, 0xc8, 0x20, 0x5b, 0x89, + 0xc0, 0x53, 0x5a, 0xd9, 0x0c, 0x43, 0xb4, 0x67, 0x18, 0x24, 0x87, 0x06, 0x7b, 0x3b, 0x44, 0x5e, + 0x81, 0x61, 0x87, 0xea, 0xae, 0x6d, 0x89, 0x33, 0x8a, 0xd4, 0x1c, 0x91, 0xa9, 0x39, 0xa2, 0xfd, + 0x53, 0x81, 0xe9, 0x2d, 0x34, 0x2a, 0x1c, 0x81, 0xb0, 0x57, 0x4a, 0xbf, 0x5e, 0x0d, 0xf4, 0xf4, + 0xea, 0x16, 0x0c, 0xef, 0x9b, 0x65, 0x8f, 0x3a, 0x18, 0x81, 0xf8, 0xea, 0x54, 0x33, 0xf1, 0xa8, + 0x77, 0x1b, 0x37, 0xb8, 0xe5, 0x9c, 0x48, 0xb6, 0x9c, 0x23, 0x92, 0x9f, 0x83, 0x67, 0xf0, 0xf3, + 0x1e, 0x8c, 0xc9, 0xb2, 0xc9, 0x37, 0x61, 0xd8, 0xf5, 0x74, 0x8f, 0xba, 0xaa, 0xb2, 0x18, 0x5d, + 0x9a, 0x58, 0x1d, 0x6f, 0xaa, 0x67, 0x28, 0x17, 0xc6, 0x09, 0x64, 0x61, 0x1c, 0xd1, 0x3e, 0x9f, + 0x84, 0xe8, 0x96, 0x5d, 0x20, 0x8b, 0x30, 0xd0, 0x0c, 0x4e, 0xa2, 0x51, 0x4f, 0x8d, 0x99, 0x72, + 0x58, 0x06, 0x4c, 0x23, 0xdc, 0x67, 0x8e, 0x9f, 0xb1, 0xcf, 0x3c, 0xf7, 0x8c, 0x0a, 0x35, 0xcd, + 0x23, 0x67, 0x6e, 0x9a, 0x33, 0xcd, 0xfe, 0x97, 0xf7, 0x44, 0x33, 0x7e, 0xcc, 0xfa, 0x68, 0x77, + 0xdf, 0x0e, 0xdf, 0x70, 0x10, 0x2e, 0x3a, 0x4f, 0x7f, 0xaf, 0x1d, 0x77, 0x69, 0x6e, 0xe3, 0xa8, + 0x60, 0xb1, 0xa9, 0xe0, 0x79, 0xf7, 0xb2, 0x57, 0x61, 0xc8, 0x7e, 0x6c, 0x51, 0x47, 0x0c, 0x11, + 0x18, 0x75, 0x04, 0xe4, 0xa8, 0x23, 0x40, 0x28, 0x5c, 0xc4, 0xf0, 0xe7, 0x71, 0xe9, 0x1e, 0x98, + 0xd5, 0x7c, 0xcd, 0xa5, 0x4e, 0xbe, 0xe4, 0xd8, 0xb5, 0xaa, 0xab, 0x4e, 0xe2, 0xd9, 0xbe, 0xd2, + 0xa8, 0xa7, 0x34, 0x24, 0x7b, 0xe8, 0x53, 0xed, 0xb9, 0xd4, 0xb9, 0x83, 0x34, 0x92, 0x4c, 0xb5, + 0x1b, 0x0d, 0xf9, 0xa9, 0x02, 0x57, 0x8a, 0x76, 0xa5, 0xca, 0xba, 0x05, 0x6a, 0xe4, 0x4f, 0x53, + 0x39, 0xbd, 0xa8, 0x2c, 0x8d, 0x65, 0x5e, 0x6b, 0xd4, 0x53, 0xaf, 0x04, 0x1c, 0x6f, 0xf5, 0x56, + 0xae, 0xf5, 0xa6, 0x0e, 0x0d, 0x73, 0x83, 0x67, 0x1c, 0xe6, 0xe4, 0xc1, 0x60, 0xe8, 0xb9, 0x0f, + 0x06, 0x63, 0xcf, 0x63, 0x30, 0xf8, 0xb5, 0x02, 0x8b, 0xa2, 0xc5, 0x36, 0xad, 0x52, 0xde, 0xa1, + 0xae, 0x5d, 0x73, 0x8a, 0x34, 0x2f, 0x52, 0xa3, 0x42, 0x2d, 0xcf, 0x55, 0x67, 0xd1, 0xf6, 0xa5, + 0x4e, 0x9a, 0x72, 0x82, 0x21, 0x27, 0xd1, 0x67, 0xae, 0x7c, 0x52, 0x4f, 0x45, 0x1a, 0xf5, 0xd4, + 0x42, 0x20, 0xb9, 0x13, 0x5d, 0xae, 0xc7, 0x3e, 0xb9, 0x07, 0x23, 0x45, 0x87, 0xb2, 0x69, 0x1e, + 0xdb, 0xac, 0xf8, 0x6a, 0x32, 0xcd, 0xc7, 0xf9, 0xb4, 0x3f, 0xa7, 0xa7, 0x1f, 0xf9, 0xaf, 0x07, + 0x7c, 0x7a, 0x11, 0xe4, 0xf2, 0xf4, 0x22, 0x20, 0x79, 0x04, 0x9a, 0x78, 0x2e, 0x23, 0x50, 0xe2, + 0x19, 0x46, 0xa0, 0xef, 0x41, 0xfc, 0xe8, 0xba, 0x9b, 0xf7, 0x0d, 0x9a, 0x42, 0x51, 0x97, 0xe5, + 0x00, 0x07, 0xcf, 0x1a, 0x2c, 0xcc, 0xc2, 0x4a, 0xde, 0xd9, 0x1e, 0x5d, 0x77, 0x37, 0xdb, 0x4c, + 0x84, 0x00, 0x65, 0x45, 0x89, 0x49, 0x17, 0xda, 0x54, 0xd2, 0x3d, 0x51, 0x84, 0xdd, 0x4d, 0xb9, + 0x62, 0xdd, 0x22, 0x57, 0xa0, 0xe1, 0xc1, 0x6d, 0xe6, 0xac, 0x83, 0x1b, 0xd9, 0x84, 0x29, 0x7e, + 0x6a, 0x3d, 0xaf, 0x9c, 0x77, 0x69, 0xd1, 0xb6, 0x0c, 0x57, 0x9d, 0x5b, 0x54, 0x96, 0xa2, 0xbc, + 0x07, 0xc3, 0xcd, 0x47, 0x5e, 0x79, 0x97, 0x6f, 0xc9, 0x3d, 0x58, 0xcb, 0xd6, 0xff, 0x67, 0xc0, + 0xa7, 0x9e, 0x07, 0xfe, 0xa5, 0xc0, 0xdc, 0x16, 0xeb, 0x68, 0x45, 0x75, 0x32, 0x7f, 0x48, 0xfd, + 0xde, 0x48, 0x6a, 0xc8, 0x94, 0x33, 0x34, 0x64, 0xe7, 0x7e, 0x9d, 0xbf, 0x09, 0x63, 0x16, 0x7d, + 0x9c, 0x6f, 0x29, 0xb7, 0x78, 0x73, 0x5a, 0xf4, 0xf1, 0x4e, 0x7b, 0xc5, 0x8d, 0x4b, 0xb0, 0xf6, + 0xfb, 0x01, 0xb8, 0xd0, 0xe6, 0xa8, 0x5b, 0xb5, 0x2d, 0x97, 0x92, 0xdf, 0x28, 0xa0, 0x3a, 0xc1, + 0x06, 0x7e, 0x62, 0x56, 0xf3, 0x6a, 0x65, 0x8f, 0xfb, 0x1e, 0x5f, 0xbd, 0xe1, 0x5f, 0xad, 0x9d, + 0x04, 0xa4, 0x73, 0x2d, 0xcc, 0x39, 0xce, 0xcb, 0xef, 0xdc, 0x97, 0x1b, 0xf5, 0xd4, 0x65, 0xa7, + 0x33, 0x85, 0x64, 0xed, 0x85, 0x2e, 0x24, 0x49, 0x07, 0x2e, 0x9d, 0x26, 0xff, 0x5c, 0xd2, 0xc2, + 0x82, 0x59, 0x69, 0x38, 0xe2, 0x5e, 0xe2, 0xe3, 0x65, 0x3f, 0x23, 0xc3, 0x55, 0x18, 0xa2, 0x8e, + 0x63, 0x3b, 0xb2, 0x4e, 0x04, 0x64, 0x52, 0x04, 0xb4, 0x0f, 0x70, 0x86, 0x0a, 0xeb, 0x23, 0x07, + 0x40, 0xf8, 0xfc, 0xc6, 0xd7, 0x62, 0x80, 0xe3, 0xdf, 0x23, 0xd9, 0x3a, 0xc0, 0x05, 0x36, 0x66, + 0x16, 0x1a, 0xf5, 0x54, 0x12, 0xc7, 0xb4, 0x00, 0x94, 0x23, 0x9d, 0x68, 0xdd, 0xd3, 0xfe, 0x3a, + 0x0a, 0x43, 0x78, 0xc5, 0x93, 0x2b, 0x30, 0x88, 0x83, 0x3f, 0xf7, 0x0e, 0x87, 0x5f, 0x2b, 0x3c, + 0xf4, 0xe3, 0x3e, 0xc9, 0xc2, 0xa4, 0x9f, 0x88, 0xf9, 0x7d, 0xbd, 0xe8, 0x09, 0x2f, 0x95, 0xcc, + 0xa5, 0x46, 0x3d, 0xa5, 0xfa, 0x5b, 0xb7, 0x71, 0x47, 0x62, 0x9e, 0x08, 0xef, 0x90, 0x1b, 0x10, + 0xc7, 0x4e, 0x85, 0x37, 0x2e, 0x62, 0x92, 0xc3, 0xaa, 0xcb, 0x60, 0xde, 0x70, 0xc8, 0x55, 0x37, + 0x40, 0xd9, 0x71, 0xc0, 0xfe, 0xc6, 0xe7, 0xe5, 0x43, 0x13, 0x1e, 0x07, 0xc4, 0xdb, 0x98, 0xe3, + 0x12, 0x4c, 0x4a, 0x30, 0xd9, 0xbc, 0xd4, 0xcb, 0x66, 0xc5, 0xf4, 0xfc, 0x37, 0xd9, 0x05, 0x0c, + 0x2c, 0x06, 0xa3, 0x79, 0x8b, 0xdf, 0x47, 0x02, 0x9e, 0xcd, 0x2c, 0xb8, 0xaa, 0x13, 0xda, 0x08, + 0x35, 0x25, 0x13, 0xe1, 0x3d, 0xf2, 0x07, 0x05, 0xae, 0xb4, 0x68, 0xca, 0x17, 0x4e, 0x9a, 0xa7, + 0x38, 0x5f, 0x2c, 0xeb, 0xae, 0xcb, 0x1f, 0x5b, 0x46, 0xa4, 0x17, 0xda, 0x4e, 0x06, 0x64, 0x4e, + 0xfc, 0xd3, 0xbc, 0xce, 0x98, 0xb6, 0xf5, 0x0a, 0xe5, 0x36, 0x5d, 0x15, 0x8d, 0xc5, 0x65, 0xa7, + 0x17, 0x7d, 0xae, 0x37, 0x09, 0xd9, 0x85, 0x78, 0x95, 0x3a, 0x15, 0xd3, 0x75, 0xb1, 0x77, 0xe7, + 0xef, 0xc6, 0x73, 0x92, 0x55, 0x3b, 0xc1, 0x2e, 0x8f, 0xb7, 0x44, 0x2e, 0xc7, 0x5b, 0x82, 0x93, + 0xff, 0x56, 0x20, 0x2e, 0xf1, 0x91, 0x1c, 0x8c, 0xba, 0xb5, 0xc2, 0x21, 0x2d, 0x36, 0x2b, 0xcc, + 0x42, 0x67, 0x0d, 0xe9, 0x5d, 0x4e, 0x26, 0xba, 0x07, 0xc1, 0x13, 0xea, 0x1e, 0x04, 0x86, 0x67, + 0x9c, 0x3a, 0x05, 0xfe, 0x20, 0xe3, 0x9f, 0x71, 0x06, 0x84, 0xce, 0x38, 0x03, 0x92, 0xef, 0xc2, + 0x88, 0x90, 0xcb, 0x32, 0xfe, 0xc8, 0xb4, 0x0c, 0x39, 0xe3, 0xd9, 0x5a, 0xce, 0x78, 0xb6, 0x6e, + 0x9e, 0x8c, 0x81, 0xd3, 0x4f, 0x46, 0xd2, 0x84, 0xe9, 0x0e, 0x79, 0xf3, 0x14, 0x55, 0x4a, 0xe9, + 0x79, 0x57, 0x7e, 0xa4, 0xc0, 0x95, 0xb3, 0xa5, 0xc8, 0xd9, 0xd4, 0xdf, 0x93, 0xd5, 0xfb, 0xe3, + 0x54, 0x48, 0x60, 0x8b, 0xb6, 0x5e, 0x65, 0xf4, 0x67, 0x43, 0x70, 0xf1, 0x14, 0x7e, 0xd6, 0x66, + 0xcf, 0x57, 0xf4, 0x1f, 0x98, 0x95, 0x5a, 0x25, 0xe8, 0xb1, 0xf7, 0x1d, 0xbd, 0xc8, 0x8a, 0xbc, + 0xc8, 0x8b, 0x6f, 0xf5, 0xb2, 0x22, 0xfd, 0x80, 0x4b, 0xf0, 0xd1, 0xdb, 0x82, 0x9f, 0x9f, 0x8d, + 0x94, 0x38, 0x1b, 0x17, 0x2a, 0x9d, 0xa9, 0x72, 0xdd, 0x36, 0xc8, 0x1f, 0x15, 0xb8, 0xdc, 0xd5, + 0x38, 0x3c, 0xc3, 0xb6, 0x5d, 0xc6, 0x5c, 0x8b, 0xaf, 0xae, 0x3f, 0xad, 0x91, 0x99, 0x93, 0x1d, + 0xdb, 0x2e, 0x8b, 0x8b, 0x52, 0x98, 0xfa, 0x42, 0xe5, 0x34, 0xda, 0xdc, 0xe9, 0xdb, 0xec, 0xba, + 0x3c, 0x2d, 0x20, 0xe7, 0x95, 0x88, 0x5a, 0x6f, 0x07, 0xcf, 0xa6, 0xfa, 0x61, 0x38, 0x09, 0x5f, + 0x6a, 0x8f, 0x2c, 0x46, 0xa1, 0xbf, 0x44, 0xfc, 0xd3, 0x00, 0xa4, 0x7a, 0xc8, 0x20, 0x1f, 0x9d, + 0x21, 0x19, 0xd7, 0xce, 0x62, 0xcd, 0x39, 0x25, 0xe4, 0x57, 0xf1, 0x65, 0xb5, 0x2c, 0xc4, 0xb0, + 0x24, 0xdf, 0x37, 0x5d, 0x8f, 0x5c, 0x87, 0x61, 0x6c, 0x45, 0xfd, 0x92, 0x0d, 0x41, 0xc9, 0xe6, + 0xcd, 0x31, 0xdf, 0x95, 0x9b, 0x63, 0x8e, 0x68, 0x7b, 0x40, 0xf8, 0xc3, 0x63, 0x59, 0xea, 0xdf, + 0xc8, 0x2d, 0x18, 0x2f, 0x72, 0x94, 0x1a, 0x52, 0x9f, 0x8d, 0xbf, 0x1a, 0x34, 0x37, 0xc2, 0xdd, + 0xf6, 0x98, 0x8c, 0x6b, 0x37, 0x60, 0x12, 0xb5, 0xdf, 0xa1, 0xcd, 0x87, 0xe7, 0x33, 0x36, 0x30, + 0xda, 0x2d, 0x50, 0x77, 0x3d, 0x87, 0xea, 0x15, 0xd3, 0x2a, 0xb5, 0xca, 0x78, 0x11, 0xa2, 0x56, + 0xad, 0x82, 0x22, 0xc6, 0x79, 0x20, 0xad, 0x5a, 0x45, 0x0e, 0xa4, 0x55, 0xab, 0x68, 0x6f, 0x02, + 0x41, 0xbe, 0x0d, 0x5a, 0xa6, 0x1e, 0xed, 0x57, 0xfd, 0xc7, 0x0a, 0x00, 0x7f, 0xa9, 0xdc, 0xb4, + 0xf6, 0xed, 0x33, 0xb7, 0x5d, 0x37, 0x20, 0x8e, 0x11, 0x35, 0xf2, 0x87, 0x36, 0x5e, 0x74, 0xca, + 0xd2, 0x10, 0xef, 0x97, 0x38, 0xbc, 0x65, 0x87, 0x6e, 0x3b, 0x08, 0x50, 0xc6, 0x5a, 0xa6, 0xba, + 0xeb, 0xb3, 0x46, 0x03, 0x56, 0x0e, 0xb7, 0xb2, 0x06, 0xa8, 0xf6, 0x18, 0xa6, 0xd1, 0xd5, 0xbd, + 0xaa, 0xa1, 0x7b, 0xc1, 0xd8, 0xf0, 0x86, 0xfc, 0xc6, 0x1f, 0xce, 0x86, 0xd3, 0xe6, 0x98, 0x3e, + 0xda, 0xe2, 0x1a, 0xa8, 0x19, 0xdd, 0x2b, 0x1e, 0x74, 0xd2, 0xfe, 0x2e, 0x8c, 0xef, 0xeb, 0x66, + 0xd9, 0x7f, 0xfb, 0xf2, 0x73, 0x52, 0x0d, 0xac, 0x08, 0x33, 0xf0, 0xb4, 0xe2, 0x2c, 0x6f, 0xb5, + 0xe6, 0xe9, 0x98, 0x8c, 0x37, 0xfd, 0x5d, 0xc7, 0x37, 0x92, 0xaf, 0xca, 0xdf, 0x16, 0xed, 0xbd, + 0xfd, 0x0d, 0x33, 0xf4, 0xe1, 0x6f, 0x1c, 0x62, 0x59, 0xcb, 0x78, 0xa0, 0x3b, 0x47, 0xd4, 0xd1, + 0x3e, 0x54, 0x60, 0x36, 0x7c, 0x32, 0x1e, 0x50, 0xd7, 0xd5, 0x4b, 0x94, 0x7c, 0xa3, 0x3f, 0xff, + 0xef, 0x46, 0x82, 0x87, 0xe8, 0x28, 0xb5, 0x0c, 0x51, 0xd0, 0x27, 0x90, 0xad, 0xa9, 0x8f, 0x9f, + 0x2f, 0x2a, 0x37, 0x5c, 0x77, 0x23, 0x39, 0x46, 0x9f, 0x19, 0x81, 0x21, 0x7a, 0x4c, 0x2d, 0x6f, + 0x39, 0x09, 0x71, 0xe9, 0x57, 0x58, 0x12, 0x87, 0x11, 0xb1, 0x4c, 0x44, 0x96, 0xaf, 0x42, 0x5c, + 0xfa, 0xb9, 0x8e, 0x8c, 0xc1, 0xe8, 0xb6, 0x6d, 0xd0, 0x1d, 0xdb, 0xf1, 0x12, 0x11, 0xb6, 0xba, + 0x4b, 0x75, 0xa3, 0xcc, 0x48, 0x95, 0xe5, 0x5f, 0x2a, 0x30, 0xea, 0x3f, 0xfd, 0x13, 0x80, 0xe1, + 0xb7, 0xf6, 0xb2, 0x7b, 0xd9, 0x8d, 0x44, 0x84, 0x09, 0xdc, 0xc9, 0x6e, 0x6f, 0x6c, 0x6e, 0xdf, + 0x49, 0x28, 0x6c, 0x91, 0xdb, 0xdb, 0xde, 0x66, 0x8b, 0x01, 0x32, 0x0e, 0xb1, 0xdd, 0xbd, 0xf5, + 0xf5, 0x6c, 0x76, 0x23, 0xbb, 0x91, 0x88, 0x32, 0xa6, 0xdb, 0x6b, 0x9b, 0xf7, 0xb3, 0x1b, 0x89, + 0x41, 0x46, 0xb7, 0xb7, 0x7d, 0x6f, 0xfb, 0xe1, 0x3b, 0xdb, 0x89, 0x21, 0x4e, 0x97, 0x79, 0xb0, + 0xf9, 0xe8, 0x51, 0x76, 0x23, 0x31, 0xcc, 0xe8, 0xee, 0x67, 0xd7, 0x76, 0xb3, 0x1b, 0x89, 0x11, + 0xb6, 0xb5, 0x93, 0xcb, 0x66, 0x1f, 0xec, 0xb0, 0xad, 0x51, 0xb6, 0x5c, 0x5f, 0xdb, 0x5e, 0xcf, + 0xde, 0x67, 0x52, 0x62, 0xab, 0x7f, 0x8e, 0xc2, 0x18, 0x86, 0xd0, 0x7f, 0x4c, 0x7a, 0x1d, 0xe2, + 0xfc, 0x3b, 0xf2, 0x79, 0x4c, 0x0a, 0x72, 0x72, 0xae, 0xed, 0x99, 0x2f, 0xcb, 0xc2, 0xa5, 0x45, + 0xc8, 0x2d, 0x18, 0x93, 0x98, 0x5c, 0x32, 0x11, 0x70, 0xb1, 0xc2, 0x9d, 0x7c, 0x01, 0xd7, 0xdd, + 0x52, 0x4b, 0x8b, 0x30, 0xad, 0xfc, 0xb4, 0xf4, 0xa9, 0x55, 0x62, 0xea, 0xad, 0x35, 0x7c, 0x1e, + 0xb5, 0x08, 0xf9, 0x36, 0xc4, 0x79, 0xf5, 0xe4, 0x5a, 0x2f, 0x04, 0xfc, 0xa1, 0xa2, 0x7a, 0x8a, + 0x09, 0x69, 0x18, 0xbd, 0x43, 0x3d, 0xce, 0x3e, 0x13, 0xb0, 0x07, 0xb5, 0x3c, 0x29, 0xb9, 0xa2, + 0x45, 0xc8, 0x16, 0xc4, 0x7c, 0x7a, 0x97, 0x70, 0xfb, 0xba, 0xdd, 0x02, 0xc9, 0x64, 0x87, 0x6d, + 0x71, 0x14, 0xb4, 0xc8, 0x6b, 0xca, 0xea, 0x2f, 0x62, 0x30, 0xcc, 0xa7, 0x6f, 0xf2, 0x36, 0x00, + 0xff, 0x0b, 0x2b, 0xed, 0x6c, 0xc7, 0x1f, 0x57, 0x93, 0x73, 0x9d, 0x47, 0x76, 0x6d, 0xfe, 0x27, + 0x7f, 0xf9, 0xc7, 0xaf, 0x06, 0xa6, 0xb5, 0x89, 0x95, 0xe3, 0x6b, 0x2b, 0x87, 0x76, 0x41, 0xfc, + 0xeb, 0xd8, 0x4d, 0x65, 0x99, 0xbc, 0x03, 0xc0, 0xaf, 0xcd, 0xb0, 0xdc, 0xd0, 0x6f, 0x78, 0x49, + 0x1e, 0xb6, 0xf6, 0xeb, 0xb5, 0x5d, 0x30, 0xbf, 0x3b, 0x99, 0xe0, 0xef, 0xc3, 0x58, 0x53, 0xf0, + 0x2e, 0xf5, 0x88, 0x2a, 0xfd, 0x2c, 0x17, 0x96, 0xde, 0x2d, 0xf6, 0x97, 0x50, 0xf8, 0x9c, 0x36, + 0x25, 0x84, 0xbb, 0xd4, 0x93, 0xe4, 0x5b, 0x90, 0x90, 0x1f, 0x8a, 0xd0, 0xfc, 0x8b, 0x9d, 0x9f, + 0x90, 0xb8, 0x9a, 0x4b, 0xa7, 0xbd, 0x2f, 0x69, 0x29, 0x54, 0x36, 0xaf, 0xcd, 0xf8, 0x9e, 0x48, + 0x6f, 0x45, 0x94, 0xe9, 0x7b, 0x17, 0xe2, 0xe2, 0x07, 0x68, 0x54, 0xd5, 0x0c, 0x75, 0xf8, 0x57, + 0xe9, 0xae, 0xce, 0x24, 0x51, 0xfe, 0x8c, 0x36, 0xe9, 0xcb, 0xaf, 0x72, 0x3e, 0x26, 0xfa, 0x4e, + 0xff, 0x07, 0x72, 0x06, 0xc5, 0x4d, 0x68, 0x31, 0x26, 0x0e, 0x4b, 0x20, 0x13, 0x54, 0x7c, 0xb6, + 0x43, 0xfa, 0x12, 0x0a, 0x5d, 0xd0, 0xe6, 0x99, 0xd0, 0x02, 0xa3, 0xa2, 0xc6, 0x0a, 0x7f, 0xc5, + 0x17, 0x37, 0x02, 0x53, 0xb2, 0xdd, 0xff, 0x41, 0xbe, 0x88, 0x82, 0x67, 0x93, 0x89, 0xa6, 0xb5, + 0x2b, 0x3f, 0x62, 0xcd, 0xc6, 0x07, 0xc2, 0xe8, 0x67, 0x39, 0xe3, 0xc2, 0xe8, 0x64, 0xc8, 0xe8, + 0x1a, 0xd2, 0x48, 0x46, 0x7f, 0xe7, 0x19, 0xeb, 0x80, 0x8a, 0x5a, 0xc8, 0x72, 0x9b, 0x07, 0xe4, + 0x76, 0x5f, 0xf5, 0x41, 0xc8, 0x21, 0xed, 0x72, 0x8c, 0xe7, 0x54, 0x37, 0x44, 0xa2, 0x11, 0x22, + 0xc7, 0x83, 0x07, 0xe2, 0x35, 0x85, 0xdc, 0x84, 0xe1, 0xbb, 0xf8, 0x2f, 0x94, 0xa4, 0x8b, 0xa7, + 0x49, 0x7e, 0x4e, 0x39, 0xd1, 0xfa, 0x01, 0x2d, 0x1e, 0x35, 0x6f, 0xfb, 0xf7, 0x3e, 0xfb, 0x7c, + 0x21, 0xf2, 0xe3, 0x27, 0x0b, 0xca, 0x27, 0x4f, 0x16, 0x94, 0x4f, 0x9f, 0x2c, 0x28, 0x7f, 0x7f, + 0xb2, 0xa0, 0x7c, 0xf8, 0xc5, 0x42, 0xe4, 0xd3, 0x2f, 0x16, 0x22, 0x9f, 0x7d, 0xb1, 0x10, 0xf9, + 0xee, 0xd7, 0xa4, 0xff, 0xea, 0xd4, 0x9d, 0x8a, 0x6e, 0xe8, 0x55, 0xc7, 0x3e, 0xa4, 0x45, 0x4f, + 0xac, 0x56, 0xc4, 0xbf, 0x71, 0x7e, 0x3c, 0x30, 0xb3, 0x86, 0xc0, 0x0e, 0xdf, 0x4e, 0x6f, 0xda, + 0xe9, 0xb5, 0xaa, 0x59, 0x18, 0x46, 0x5b, 0x5e, 0xff, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3e, + 0x08, 0x3e, 0x67, 0xe3, 0x2a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3899,14 +3896,18 @@ func (m *Job) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x3a } - n10, err10 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err10 != nil { - return 0, err10 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintSubmit(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 } - i -= n10 - i = encodeVarintSubmit(dAtA, i, uint64(n10)) - i-- - dAtA[i] = 0x32 if m.PodSpec != nil { { size, err := m.PodSpec.MarshalToSizedBuffer(dAtA[:i]) @@ -5148,8 +5149,10 @@ func (m *Job) Size() (n int) { l = m.PodSpec.Size() n += 1 + l + sovSubmit(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovSubmit(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovSubmit(uint64(l)) + } l = len(m.Namespace) if l > 0 { n += 1 + l + sovSubmit(uint64(l)) @@ -5880,7 +5883,7 @@ func (this *Job) String() string { `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, `Priority:` + fmt.Sprintf("%v", this.Priority) + `,`, `PodSpec:` + strings.Replace(fmt.Sprintf("%v", this.PodSpec), "PodSpec", "v1.PodSpec", 1) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, `Owner:` + fmt.Sprintf("%v", this.Owner) + `,`, `Labels:` + mapStringForLabels + `,`, @@ -8416,7 +8419,10 @@ func (m *Job) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/pkg/api/submit.proto b/pkg/api/submit.proto index 3fcd4b068be..f716afa33bd 100644 --- a/pkg/api/submit.proto +++ b/pkg/api/submit.proto @@ -135,7 +135,7 @@ message Job { // This field is populated automatically at submission. // Submitting a job with this field already populated results in an error. k8s.io.api.core.v1.ResourceRequirements scheduling_resource_requirements = 21 [(gogoproto.nullable) = false]; - google.protobuf.Timestamp created = 6 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp created = 6; // Services can be provided either as Armada-specific config objects or as proper k8s objects. // These options are exclusive, i.e., if either ingress or services is provided, // then neither of k8s_ingress or k8s_service can be provided, and vice versa. diff --git a/pkg/client/domain/watch.go b/pkg/client/domain/watch.go index 4efd4425aa1..610c06db0ac 100644 --- a/pkg/client/domain/watch.go +++ b/pkg/client/domain/watch.go @@ -5,6 +5,7 @@ import ( "strings" "time" + protoutil "github.com/armadaproject/armada/internal/common/proto" armadaresource "github.com/armadaproject/armada/internal/common/resource" "github.com/armadaproject/armada/pkg/api" ) @@ -166,15 +167,16 @@ func (context *WatchContext) AreJobsFinished(ids []string) bool { } func updateJobInfo(info *JobInfo, event api.Event) { + eventTs := protoutil.ToStdTime(event.GetCreated()) if isLifeCycleEvent(event) && !isPodEvent(event) { - if info.LastUpdate.After(event.GetCreated()) { + if info.LastUpdate.After(eventTs) { if submitEvent, ok := event.(*api.JobSubmittedEvent); ok { info.Job = &submitEvent.Job } // skipping event as it is out of time order return } - info.LastUpdate = event.GetCreated() + info.LastUpdate = eventTs } switch typed := event.(type) { @@ -234,16 +236,17 @@ func resetPodStatus(info *JobInfo) { func updatePodStatus(info *JobInfo, event api.KubernetesEvent, status PodStatus) { info.ClusterId = event.GetClusterId() podNumber := event.GetPodNumber() + eventTs := protoutil.ToStdTime(event.GetCreated()) for len(info.PodStatus) <= int(podNumber) { info.PodStatus = append(info.PodStatus, Submitted) info.PodLastUpdated = append(info.PodLastUpdated, time.Time{}) } - if info.PodLastUpdated[podNumber].After(event.GetCreated()) { + if info.PodLastUpdated[podNumber].After(eventTs) { // skipping event as it is out of time order return } - info.PodLastUpdated[podNumber] = event.GetCreated() + info.PodLastUpdated[podNumber] = eventTs info.PodStatus[podNumber] = status //if info.Status == Cancelled { diff --git a/pkg/client/domain/watch_test.go b/pkg/client/domain/watch_test.go index 43cede3e6a4..83b2c3397f4 100644 --- a/pkg/client/domain/watch_test.go +++ b/pkg/client/domain/watch_test.go @@ -4,10 +4,12 @@ import ( "testing" "time" + "github.com/gogo/protobuf/types" "github.com/stretchr/testify/assert" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" + protoutil "github.com/armadaproject/armada/internal/common/proto" armadaresource "github.com/armadaproject/armada/internal/common/resource" "github.com/armadaproject/armada/pkg/api" ) @@ -182,11 +184,11 @@ func TestWatchContext_EventsOutOfOrder(t *testing.T) { }, } - watchContext.ProcessEvent(&api.JobUtilisationEvent{JobId: "1", Created: now.Add(10 * time.Second)}) + watchContext.ProcessEvent(&api.JobUtilisationEvent{JobId: "1", Created: protoutil.ToTimestamp(now.Add(10 * time.Second))}) assert.Equal(t, &JobInfo{MaxUsedResources: armadaresource.ComputeResources{}}, watchContext.GetJobInfo("1")) assert.Equal(t, map[JobStatus]int{}, watchContext.stateSummary) - watchContext.ProcessEvent(&api.JobSucceededEvent{JobId: "1", Created: now}) + watchContext.ProcessEvent(&api.JobSucceededEvent{JobId: "1", Created: protoutil.ToTimestamp(now)}) assert.Equal( t, &JobInfo{ @@ -200,7 +202,7 @@ func TestWatchContext_EventsOutOfOrder(t *testing.T) { ) assert.Equal(t, map[JobStatus]int{Succeeded: 1}, watchContext.stateSummary) - watchContext.ProcessEvent(&api.JobQueuedEvent{JobId: "1", Created: now.Add(-1 * time.Second)}) + watchContext.ProcessEvent(&api.JobQueuedEvent{JobId: "1", Created: protoutil.ToTimestamp(now.Add(-1 * time.Second))}) assert.Equal( t, &JobInfo{ @@ -214,7 +216,7 @@ func TestWatchContext_EventsOutOfOrder(t *testing.T) { ) assert.Equal(t, map[JobStatus]int{Succeeded: 1}, watchContext.stateSummary) - watchContext.ProcessEvent(&api.JobSubmittedEvent{JobId: "1", Job: job, Created: now.Add(-2 * time.Second)}) + watchContext.ProcessEvent(&api.JobSubmittedEvent{JobId: "1", Job: job, Created: protoutil.ToTimestamp(now.Add(-2 * time.Second))}) assert.Equal( t, &JobInfo{ @@ -236,7 +238,7 @@ func TestWatchContext_UtilisationEvent(t *testing.T) { JobId: "job1", JobSetId: "", Queue: "", - Created: time.Now(), + Created: types.TimestampNow(), ClusterId: "", KubernetesId: "", MaxResourcesForPeriod: armadaresource.ComputeResources{ diff --git a/testsuite/performance/jobservice/fakearmada/event_server.go b/testsuite/performance/jobservice/fakearmada/event_server.go index 33968087015..a74585eaeee 100644 --- a/testsuite/performance/jobservice/fakearmada/event_server.go +++ b/testsuite/performance/jobservice/fakearmada/event_server.go @@ -52,14 +52,14 @@ var messageScript = []*scriptedMessage{ JobId: "fake_job_id", JobSetId: request.Id, Queue: request.Queue, - Created: time.Now(), + Created: types.TimestampNow(), Job: api.Job{ Id: "fake_job_id", ClientId: "", Queue: request.Queue, JobSetId: request.Id, Namespace: "fakeNamespace", - Created: time.Now(), + Created: types.TimestampNow(), }, }, }, @@ -75,7 +75,7 @@ var messageScript = []*scriptedMessage{ JobId: "fake_job_id", JobSetId: request.Id, Queue: request.Queue, - Created: time.Now(), + Created: types.TimestampNow(), }, }, } @@ -90,7 +90,7 @@ var messageScript = []*scriptedMessage{ JobId: "fake_job_id", JobSetId: request.Id, Queue: request.Queue, - Created: time.Now(), + Created: types.TimestampNow(), ClusterId: "fakeCluster", KubernetesId: "fakeK8s", NodeName: "fakeNode", @@ -111,7 +111,7 @@ var messageScript = []*scriptedMessage{ JobId: "fake_job_id", JobSetId: request.Id, Queue: request.Queue, - Created: time.Now(), + Created: types.TimestampNow(), ClusterId: "fakeCluster", KubernetesId: "fakeK8s", NodeName: "fakeNode", From efe01d0b398d4d4dd92a4ceb1f8bf6f56889c32f Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Mon, 24 Jun 2024 07:47:04 +0100 Subject: [PATCH 02/27] initial timestamps Signed-off-by: Chris Martin --- internal/armada/queryapi/query_api.go | 14 +- internal/armada/queryapi/query_api_test.go | 12 +- internal/armada/queryapi/util.go | 10 +- pkg/api/job.pb.go | 331 +++++++++++---------- pkg/api/job.proto | 14 +- 5 files changed, 197 insertions(+), 184 deletions(-) diff --git a/internal/armada/queryapi/query_api.go b/internal/armada/queryapi/query_api.go index a7853ac9744..7715a6b33c3 100644 --- a/internal/armada/queryapi/query_api.go +++ b/internal/armada/queryapi/query_api.go @@ -94,10 +94,10 @@ func (q *QueryApi) GetJobDetails(ctx context.Context, req *api.JobDetailsRequest Jobset: row.Jobset, Namespace: NilStringToString(row.Namespace), State: apiJobState, - SubmittedTs: DbTimeToGoTime(row.Submitted), - CancelTs: DbTimeToGoTime(row.Cancelled), + SubmittedTs: DbTimeToTimestamp(row.Submitted), + CancelTs: DbTimeToTimestamp(row.Cancelled), CancelReason: NilStringToString(row.CancelReason), - LastTransitionTs: DbTimeToGoTime(row.LastTransitionTime), + LastTransitionTs: DbTimeToTimestamp(row.LastTransitionTime), LatestRunId: NilStringToString(row.LatestRunID), JobSpec: jobSpec, } @@ -201,9 +201,9 @@ func parseJobDetails(row database.JobRun) *api.JobRunDetails { State: runState, Cluster: row.Cluster, Node: NilStringToString(row.Node), - LeasedTs: DbTimeToGoTime(row.Leased), - PendingTs: DbTimeToGoTime(row.Pending), - StartedTs: DbTimeToGoTime(row.Started), - FinishedTs: DbTimeToGoTime(row.Finished), + LeasedTs: DbTimeToTimestamp(row.Leased), + PendingTs: DbTimeToTimestamp(row.Pending), + StartedTs: DbTimeToTimestamp(row.Started), + FinishedTs: DbTimeToTimestamp(row.Finished), } } diff --git a/internal/armada/queryapi/query_api_test.go b/internal/armada/queryapi/query_api_test.go index 731bbb248d0..3b86c61854f 100644 --- a/internal/armada/queryapi/query_api_test.go +++ b/internal/armada/queryapi/query_api_test.go @@ -16,6 +16,7 @@ import ( "github.com/armadaproject/armada/internal/common/compress" dbcommon "github.com/armadaproject/armada/internal/common/database" "github.com/armadaproject/armada/internal/common/database/lookout" + protoutil "github.com/armadaproject/armada/internal/common/proto" "github.com/armadaproject/armada/pkg/api" ) @@ -25,6 +26,7 @@ const ( var ( baseTime, _ = time.Parse("2006-01-02T15:04:05.000Z", "2022-03-01T15:04:05.000Z") + baseTimestamp = protoutil.ToTimestamp(baseTime) testDecompressor = func() compress.Decompressor { return &compress.NoOpDecompressor{} } ) @@ -348,10 +350,10 @@ func newJobDetails(jobId string, state api.JobState, latestRunId string, runs .. Jobset: "testJobset", Namespace: "testNamespace", State: state, - SubmittedTs: &baseTime, + SubmittedTs: baseTimestamp, CancelTs: nil, CancelReason: "", - LastTransitionTs: &baseTime, + LastTransitionTs: baseTimestamp, LatestRunId: latestRunId, JobSpec: nil, JobRuns: runs, @@ -365,9 +367,9 @@ func newJobRunDetails(jobId string, runId string, state api.JobRunState, leased State: state, Cluster: "testCluster", Node: "testNode", - LeasedTs: &leased, - PendingTs: &baseTime, - StartedTs: &baseTime, + LeasedTs: protoutil.ToTimestamp(leased), + PendingTs: baseTimestamp, + StartedTs: baseTimestamp, FinishedTs: nil, } } diff --git a/internal/armada/queryapi/util.go b/internal/armada/queryapi/util.go index 239af87ba23..877a81fc015 100644 --- a/internal/armada/queryapi/util.go +++ b/internal/armada/queryapi/util.go @@ -1,9 +1,10 @@ package queryapi import ( - "time" - + "github.com/gogo/protobuf/types" "github.com/jackc/pgx/v5/pgtype" + + protoutil "github.com/armadaproject/armada/internal/common/proto" ) func NilStringToString(s *string) string { @@ -13,10 +14,9 @@ func NilStringToString(s *string) string { return *s } -func DbTimeToGoTime(t pgtype.Timestamp) *time.Time { +func DbTimeToTimestamp(t pgtype.Timestamp) *types.Timestamp { if !t.Valid { return nil } - tt := t.Time.UTC() - return &tt + return protoutil.ToTimestamp(t.Time.UTC()) } diff --git a/pkg/api/job.pb.go b/pkg/api/job.pb.go index 8774b995235..6867c6383db 100644 --- a/pkg/api/job.pb.go +++ b/pkg/api/job.pb.go @@ -11,13 +11,11 @@ import ( math_bits "math/bits" reflect "reflect" strings "strings" - time "time" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - _ "github.com/gogo/protobuf/types" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + types "github.com/gogo/protobuf/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" @@ -28,7 +26,6 @@ import ( var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -86,15 +83,15 @@ func (JobRunState) EnumDescriptor() ([]byte, []int) { } type JobRunDetails struct { - RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"runId,omitempty"` - JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - State JobRunState `protobuf:"varint,3,opt,name=state,proto3,enum=api.JobRunState" json:"state,omitempty"` - Cluster string `protobuf:"bytes,4,opt,name=cluster,proto3" json:"cluster,omitempty"` - Node string `protobuf:"bytes,5,opt,name=node,proto3" json:"node,omitempty"` - LeasedTs *time.Time `protobuf:"bytes,7,opt,name=leased_ts,json=leasedTs,proto3,stdtime" json:"leasedTs,omitempty"` - PendingTs *time.Time `protobuf:"bytes,8,opt,name=pending_ts,json=pendingTs,proto3,stdtime" json:"pendingTs,omitempty"` - StartedTs *time.Time `protobuf:"bytes,9,opt,name=started_ts,json=startedTs,proto3,stdtime" json:"startedTs,omitempty"` - FinishedTs *time.Time `protobuf:"bytes,10,opt,name=finished_ts,json=finishedTs,proto3,stdtime" json:"finishedTs,omitempty"` + RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"runId,omitempty"` + JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + State JobRunState `protobuf:"varint,3,opt,name=state,proto3,enum=api.JobRunState" json:"state,omitempty"` + Cluster string `protobuf:"bytes,4,opt,name=cluster,proto3" json:"cluster,omitempty"` + Node string `protobuf:"bytes,5,opt,name=node,proto3" json:"node,omitempty"` + LeasedTs *types.Timestamp `protobuf:"bytes,7,opt,name=leased_ts,json=leasedTs,proto3" json:"leasedTs,omitempty"` + PendingTs *types.Timestamp `protobuf:"bytes,8,opt,name=pending_ts,json=pendingTs,proto3" json:"pendingTs,omitempty"` + StartedTs *types.Timestamp `protobuf:"bytes,9,opt,name=started_ts,json=startedTs,proto3" json:"startedTs,omitempty"` + FinishedTs *types.Timestamp `protobuf:"bytes,10,opt,name=finished_ts,json=finishedTs,proto3" json:"finishedTs,omitempty"` } func (m *JobRunDetails) Reset() { *m = JobRunDetails{} } @@ -164,28 +161,28 @@ func (m *JobRunDetails) GetNode() string { return "" } -func (m *JobRunDetails) GetLeasedTs() *time.Time { +func (m *JobRunDetails) GetLeasedTs() *types.Timestamp { if m != nil { return m.LeasedTs } return nil } -func (m *JobRunDetails) GetPendingTs() *time.Time { +func (m *JobRunDetails) GetPendingTs() *types.Timestamp { if m != nil { return m.PendingTs } return nil } -func (m *JobRunDetails) GetStartedTs() *time.Time { +func (m *JobRunDetails) GetStartedTs() *types.Timestamp { if m != nil { return m.StartedTs } return nil } -func (m *JobRunDetails) GetFinishedTs() *time.Time { +func (m *JobRunDetails) GetFinishedTs() *types.Timestamp { if m != nil { return m.FinishedTs } @@ -198,10 +195,10 @@ type JobDetails struct { Jobset string `protobuf:"bytes,3,opt,name=jobset,proto3" json:"jobset,omitempty"` Namespace string `protobuf:"bytes,4,opt,name=namespace,proto3" json:"namespace,omitempty"` State JobState `protobuf:"varint,5,opt,name=state,proto3,enum=api.JobState" json:"state,omitempty"` - SubmittedTs *time.Time `protobuf:"bytes,6,opt,name=submitted_ts,json=submittedTs,proto3,stdtime" json:"submittedTs,omitempty"` - CancelTs *time.Time `protobuf:"bytes,7,opt,name=cancel_ts,json=cancelTs,proto3,stdtime" json:"cancelTs,omitempty"` + SubmittedTs *types.Timestamp `protobuf:"bytes,6,opt,name=submitted_ts,json=submittedTs,proto3" json:"submittedTs,omitempty"` + CancelTs *types.Timestamp `protobuf:"bytes,7,opt,name=cancel_ts,json=cancelTs,proto3" json:"cancelTs,omitempty"` CancelReason string `protobuf:"bytes,8,opt,name=cancel_reason,json=cancelReason,proto3" json:"cancelReason,omitempty"` - LastTransitionTs *time.Time `protobuf:"bytes,9,opt,name=last_transition_ts,json=lastTransitionTs,proto3,stdtime" json:"lastTransitionTs,omitempty"` + LastTransitionTs *types.Timestamp `protobuf:"bytes,9,opt,name=last_transition_ts,json=lastTransitionTs,proto3" json:"lastTransitionTs,omitempty"` LatestRunId string `protobuf:"bytes,10,opt,name=latest_run_id,json=latestRunId,proto3" json:"latestRunId,omitempty"` JobSpec *Job `protobuf:"bytes,11,opt,name=job_spec,json=jobSpec,proto3" json:"jobSpec,omitempty"` JobRuns []*JobRunDetails `protobuf:"bytes,12,rep,name=job_runs,json=jobRuns,proto3" json:"jobRuns,omitempty"` @@ -274,14 +271,14 @@ func (m *JobDetails) GetState() JobState { return JobState_QUEUED } -func (m *JobDetails) GetSubmittedTs() *time.Time { +func (m *JobDetails) GetSubmittedTs() *types.Timestamp { if m != nil { return m.SubmittedTs } return nil } -func (m *JobDetails) GetCancelTs() *time.Time { +func (m *JobDetails) GetCancelTs() *types.Timestamp { if m != nil { return m.CancelTs } @@ -295,7 +292,7 @@ func (m *JobDetails) GetCancelReason() string { return "" } -func (m *JobDetails) GetLastTransitionTs() *time.Time { +func (m *JobDetails) GetLastTransitionTs() *types.Timestamp { if m != nil { return m.LastTransitionTs } @@ -615,87 +612,87 @@ func init() { func init() { proto.RegisterFile("pkg/api/job.proto", fileDescriptor_e45f6b75bfad87a4) } var fileDescriptor_e45f6b75bfad87a4 = []byte{ - // 1274 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0x51, 0x6f, 0xdb, 0xd4, - 0x17, 0xaf, 0xd3, 0xa6, 0x4d, 0x4e, 0x9a, 0xd6, 0xbd, 0x6d, 0xd7, 0x34, 0xdb, 0x92, 0xca, 0x7f, - 0xfd, 0x59, 0x99, 0xb6, 0x44, 0x14, 0x21, 0x4d, 0x45, 0x13, 0xb4, 0x8d, 0x99, 0x52, 0x46, 0xa8, - 0x9c, 0x14, 0x06, 0x1a, 0x8a, 0xec, 0xe4, 0x2e, 0x73, 0x96, 0xd8, 0x9e, 0xef, 0xf5, 0x44, 0x25, - 0x1e, 0x10, 0x12, 0x0f, 0xbc, 0x4d, 0xe2, 0x33, 0xec, 0xbb, 0xc0, 0xdb, 0x24, 0x5e, 0xf6, 0x42, - 0x80, 0x0e, 0x09, 0x29, 0x4f, 0x7c, 0x04, 0xe4, 0x7b, 0x6d, 0xe7, 0xda, 0xe9, 0x94, 0xc2, 0x5b, - 0xfc, 0x3b, 0xe7, 0xfc, 0xee, 0x3d, 0xe7, 0xfc, 0xce, 0xb1, 0x03, 0x6b, 0xce, 0x93, 0x5e, 0x55, - 0x77, 0xcc, 0x6a, 0xdf, 0x36, 0x2a, 0x8e, 0x6b, 0x53, 0x1b, 0xcd, 0xeb, 0x8e, 0x59, 0xbc, 0xdd, - 0x33, 0xe9, 0x63, 0xcf, 0xa8, 0x74, 0xec, 0x61, 0xb5, 0x67, 0xf7, 0xec, 0x2a, 0xb3, 0x19, 0xde, - 0x23, 0xf6, 0xc4, 0x1e, 0xd8, 0x2f, 0x1e, 0x53, 0xdc, 0x08, 0x69, 0x88, 0x67, 0x0c, 0x4d, 0x1a, - 0xa0, 0xe5, 0x9e, 0x6d, 0xf7, 0x06, 0x78, 0x12, 0x4b, 0xcd, 0x21, 0x26, 0x54, 0x1f, 0x3a, 0x81, - 0xc3, 0xb5, 0xc0, 0xc1, 0x8f, 0xd4, 0x2d, 0xcb, 0xa6, 0x3a, 0x35, 0x6d, 0x8b, 0x70, 0xab, 0xf2, - 0xeb, 0x02, 0xe4, 0x8f, 0x6d, 0x43, 0xf3, 0xac, 0x1a, 0xa6, 0xba, 0x39, 0x20, 0xe8, 0x26, 0x2c, - 0xba, 0x9e, 0xd5, 0x36, 0xbb, 0x05, 0x69, 0x47, 0xda, 0xcd, 0x1e, 0xae, 0x8f, 0x47, 0xe5, 0x55, - 0xd7, 0xb3, 0xea, 0xdd, 0x5b, 0xf6, 0xd0, 0xa4, 0x78, 0xe8, 0xd0, 0x33, 0x2d, 0xcd, 0x00, 0xdf, - 0xb7, 0x6f, 0x1b, 0xbe, 0x6f, 0x6a, 0xe2, 0xdb, 0xb7, 0x8d, 0xb8, 0x2f, 0x03, 0xd0, 0xfb, 0x90, - 0x26, 0x54, 0xa7, 0xb8, 0x30, 0xbf, 0x23, 0xed, 0xae, 0xec, 0xc9, 0x15, 0xdd, 0x31, 0x2b, 0xfc, - 0xe8, 0xa6, 0x8f, 0xf3, 0x60, 0xe6, 0x22, 0x06, 0x33, 0x00, 0x55, 0x61, 0xa9, 0x33, 0xf0, 0x08, - 0xc5, 0x6e, 0x61, 0x81, 0x9d, 0xb4, 0x39, 0x1e, 0x95, 0xd7, 0x02, 0x48, 0x70, 0x0f, 0xbd, 0xd0, - 0x5b, 0xb0, 0x60, 0xd9, 0x5d, 0x5c, 0x48, 0x33, 0x6f, 0x34, 0x1e, 0x95, 0x57, 0xfc, 0x67, 0xc1, - 0x95, 0xd9, 0x51, 0x13, 0xb2, 0x03, 0xac, 0x13, 0xdc, 0x6d, 0x53, 0x52, 0x58, 0xda, 0x91, 0x76, - 0x73, 0x7b, 0xc5, 0x0a, 0xaf, 0x58, 0x25, 0x2c, 0x69, 0xa5, 0x15, 0x96, 0xf4, 0xb0, 0x38, 0x1e, - 0x95, 0x11, 0x0f, 0x68, 0x91, 0x09, 0xd9, 0xf3, 0xdf, 0xca, 0x92, 0x96, 0x09, 0x71, 0xf4, 0x19, - 0x80, 0x83, 0xad, 0xae, 0x69, 0xf5, 0x7c, 0xd6, 0xcc, 0x4c, 0xd6, 0xab, 0xe3, 0x51, 0x79, 0x3d, - 0x88, 0x98, 0xa2, 0xcd, 0x46, 0x06, 0x9f, 0x97, 0x50, 0xdd, 0xa5, 0xfc, 0xb6, 0xd9, 0xcb, 0xf1, - 0x06, 0x11, 0xd3, 0xbc, 0x91, 0x01, 0x7d, 0x01, 0xb9, 0x47, 0xa6, 0x65, 0x92, 0xc7, 0x9c, 0x18, - 0x66, 0x12, 0x5f, 0x1b, 0x8f, 0xca, 0x1b, 0x61, 0xc8, 0x14, 0x33, 0x4c, 0x2c, 0xca, 0x8b, 0x45, - 0x80, 0x63, 0xdb, 0x10, 0xc4, 0x15, 0x08, 0x46, 0x9a, 0x29, 0x98, 0xb7, 0x21, 0xfd, 0xd4, 0xc3, - 0x1e, 0x16, 0xb5, 0xc5, 0x00, 0xd1, 0x95, 0x01, 0xe8, 0x16, 0xa3, 0x25, 0x98, 0x32, 0x71, 0x65, - 0x0f, 0x37, 0xc6, 0xa3, 0xb2, 0xcc, 0x11, 0xc1, 0x39, 0xf0, 0x41, 0xef, 0x41, 0xd6, 0xd2, 0x87, - 0x98, 0x38, 0x7a, 0x07, 0x07, 0x72, 0xda, 0xf2, 0x2b, 0x15, 0x81, 0x42, 0xcc, 0xc4, 0x13, 0xdd, - 0x09, 0x05, 0x9c, 0x66, 0x02, 0xce, 0x87, 0x02, 0x9e, 0xad, 0xde, 0x87, 0xb0, 0xcc, 0x67, 0x36, - 0xe8, 0xdc, 0xe2, 0xcc, 0x02, 0x5f, 0x1f, 0x8f, 0xca, 0x9b, 0x51, 0xcc, 0x54, 0x85, 0x73, 0x82, - 0xc9, 0x97, 0x70, 0x47, 0xb7, 0x3a, 0x78, 0xf0, 0x2f, 0x24, 0xcc, 0x03, 0xa6, 0x25, 0x1c, 0xe2, - 0xe8, 0x03, 0xc8, 0x07, 0xa4, 0x2e, 0xd6, 0x89, 0x6d, 0x31, 0x15, 0x67, 0x59, 0xf0, 0x15, 0x6e, - 0xd0, 0x18, 0x2e, 0x24, 0xbb, 0x2c, 0xe2, 0x68, 0x00, 0x68, 0xa0, 0x13, 0xda, 0xa6, 0xae, 0x6e, - 0x11, 0xd3, 0x5f, 0x39, 0x97, 0xd3, 0xac, 0x32, 0x1e, 0x95, 0x8b, 0x7e, 0x64, 0x2b, 0x0a, 0x9c, - 0xba, 0xa6, 0x9c, 0xb4, 0xa3, 0xbb, 0x90, 0x1f, 0xe8, 0x14, 0x13, 0xda, 0x0e, 0x76, 0x17, 0xb0, - 0xeb, 0x6e, 0xfb, 0x65, 0xe4, 0x06, 0x2d, 0xb1, 0xc1, 0x72, 0x02, 0x8c, 0xf6, 0x21, 0xe3, 0xcb, - 0x92, 0x38, 0xb8, 0x53, 0xc8, 0xb1, 0x2b, 0x66, 0xc2, 0xee, 0xf2, 0x4d, 0xd3, 0xb7, 0x8d, 0xa6, - 0x83, 0x3b, 0xe2, 0xa6, 0x09, 0x20, 0x54, 0xe3, 0xb1, 0xae, 0x67, 0x91, 0xc2, 0xf2, 0xce, 0xfc, - 0x6e, 0x6e, 0x0f, 0x09, 0xab, 0x2d, 0x10, 0x7e, 0xc4, 0xa2, 0x79, 0x16, 0x49, 0xb0, 0xf8, 0x90, - 0xf2, 0xb3, 0x04, 0x6b, 0x93, 0x39, 0xd1, 0xf0, 0x53, 0x0f, 0x13, 0x8a, 0x6e, 0xc3, 0x12, 0x1f, - 0x17, 0x52, 0x90, 0x76, 0xe6, 0x05, 0x61, 0xd7, 0xbb, 0x24, 0x21, 0xec, 0x7a, 0x97, 0xa0, 0x23, - 0x58, 0xc5, 0x5f, 0x3b, 0xba, 0xd5, 0x6d, 0x47, 0xd9, 0xf8, 0xb3, 0x93, 0x61, 0x8b, 0x60, 0x8b, - 0x9b, 0x8e, 0xa7, 0x32, 0xc9, 0xc7, 0x0c, 0xe8, 0x43, 0x58, 0x11, 0x48, 0x5c, 0xcf, 0x62, 0x33, - 0x95, 0xe1, 0xad, 0x8f, 0x5c, 0x35, 0x2f, 0xd6, 0x7a, 0x11, 0x57, 0xfe, 0x96, 0x00, 0x89, 0xb9, - 0x10, 0xc7, 0xb6, 0x08, 0x46, 0x06, 0xe4, 0x7c, 0xc6, 0x2e, 0x87, 0x59, 0x42, 0xb9, 0xbd, 0x1b, - 0x61, 0xad, 0x12, 0xde, 0x02, 0xa4, 0x5a, 0xd4, 0x3d, 0x3b, 0x2c, 0xf8, 0x2b, 0xa7, 0x1f, 0x81, - 0xc2, 0xe1, 0x30, 0x41, 0x8b, 0xcf, 0x60, 0x35, 0x11, 0x88, 0xfe, 0x07, 0xf3, 0x4f, 0xf0, 0x59, - 0xb0, 0x6f, 0xd6, 0xc6, 0xa3, 0x72, 0xfe, 0x09, 0x3e, 0x13, 0xc2, 0x7d, 0x2b, 0xda, 0x87, 0xf4, - 0x33, 0x7d, 0x10, 0xec, 0x9a, 0xdc, 0xde, 0x6a, 0xe2, 0x56, 0x7c, 0xba, 0x99, 0x87, 0x38, 0xdd, - 0x0c, 0xd8, 0x4f, 0xdd, 0x91, 0x94, 0x1f, 0x52, 0xb0, 0x19, 0x6b, 0x78, 0x94, 0xb5, 0x0b, 0xab, - 0x41, 0x1d, 0x13, 0x99, 0xdf, 0x9e, 0x56, 0x89, 0x98, 0xfc, 0x04, 0xe5, 0xf9, 0xb3, 0x16, 0xf6, - 0x45, 0x5c, 0x6c, 0x61, 0xcc, 0x50, 0xfc, 0x86, 0xd5, 0x3f, 0xc1, 0x70, 0xb9, 0x42, 0xdc, 0x8d, - 0x17, 0xe2, 0x22, 0x29, 0xcf, 0xaa, 0x85, 0x0a, 0x1b, 0x89, 0xac, 0x22, 0x31, 0xf3, 0xe1, 0x8c, - 0x89, 0x99, 0x7d, 0x48, 0xc4, 0xc4, 0xcc, 0x11, 0xe5, 0x00, 0xe4, 0x60, 0xb9, 0x7a, 0xff, 0x71, - 0x1e, 0x94, 0xbf, 0xf8, 0x50, 0x85, 0x1c, 0x41, 0x47, 0xbe, 0x02, 0x60, 0xe3, 0xe1, 0xaf, 0xe6, - 0xb0, 0x19, 0xff, 0x17, 0x97, 0xb9, 0x17, 0x6b, 0x04, 0x5b, 0xef, 0x41, 0x13, 0xd8, 0x6b, 0xa2, - 0x1f, 0x62, 0xe2, 0x6b, 0x22, 0x02, 0x8b, 0x04, 0x56, 0xe2, 0x51, 0x97, 0x2b, 0xfc, 0x1d, 0xb1, - 0xf0, 0x17, 0xbf, 0x5d, 0xde, 0x5c, 0xf3, 0x9b, 0xdf, 0xa7, 0x20, 0x27, 0x7c, 0x4b, 0xa1, 0x4d, - 0x58, 0xd3, 0x4e, 0x1b, 0xed, 0x66, 0xeb, 0xa0, 0xa5, 0xb6, 0x4f, 0x1b, 0x1f, 0x37, 0x3e, 0xfd, - 0xbc, 0x21, 0xcf, 0xa1, 0x0d, 0x90, 0x27, 0xf0, 0x7d, 0xf5, 0xa0, 0xa9, 0xd6, 0x64, 0x29, 0xee, - 0x7c, 0xa2, 0x36, 0x6a, 0xf5, 0xc6, 0x3d, 0x39, 0x15, 0x87, 0xb5, 0xd3, 0x46, 0xc3, 0x87, 0xe7, - 0xd1, 0x16, 0xac, 0x4f, 0xe0, 0xe6, 0xe9, 0xd1, 0x91, 0xaa, 0xd6, 0xd4, 0x9a, 0xbc, 0x10, 0x27, - 0xff, 0xe8, 0xa0, 0x7e, 0x5f, 0xad, 0xc9, 0xe9, 0xb8, 0xfb, 0x89, 0xa6, 0xaa, 0x9f, 0x9c, 0xb4, - 0xd4, 0x9a, 0xbc, 0x18, 0x37, 0x1c, 0x1d, 0x34, 0x8e, 0xd4, 0xfb, 0x7e, 0xc4, 0x12, 0xba, 0x0a, - 0x5b, 0x89, 0x4b, 0xb6, 0xd5, 0x07, 0x27, 0x75, 0x4d, 0xad, 0xc9, 0x19, 0x74, 0x1d, 0xb6, 0xb5, - 0xd3, 0x46, 0x33, 0x66, 0xd5, 0xd4, 0xd6, 0xa9, 0xd6, 0x50, 0x6b, 0x72, 0x76, 0xef, 0x45, 0x0a, - 0x16, 0x8e, 0x6d, 0x83, 0xa0, 0x07, 0xb0, 0x7c, 0x0f, 0xd3, 0xa8, 0xa1, 0x68, 0x33, 0xd9, 0x60, - 0x26, 0xa8, 0xe2, 0x95, 0x8b, 0xfb, 0xae, 0x6c, 0x7f, 0xf7, 0xcb, 0x9f, 0x3f, 0xa6, 0xd6, 0x95, - 0x95, 0xea, 0xb3, 0x77, 0xfc, 0xcf, 0xf6, 0x2a, 0x61, 0xf6, 0x7d, 0xe9, 0x26, 0x7a, 0x08, 0x79, - 0xce, 0x1c, 0x7e, 0xd3, 0x5c, 0x99, 0x5a, 0x61, 0x9c, 0x7b, 0xeb, 0x0d, 0xab, 0x4d, 0x29, 0x32, - 0xf2, 0x0d, 0x65, 0x35, 0x24, 0x0f, 0x16, 0x83, 0xcf, 0x8e, 0x41, 0xe6, 0xec, 0xc2, 0x17, 0xf9, - 0xf6, 0x45, 0x9b, 0x82, 0x9f, 0x51, 0x7c, 0xf3, 0x12, 0x89, 0x1f, 0xe3, 0x7a, 0x96, 0x70, 0xcc, - 0x61, 0xfd, 0xd5, 0x1f, 0xa5, 0xb9, 0x6f, 0xcf, 0x4b, 0xd2, 0x4f, 0xe7, 0x25, 0xe9, 0xe5, 0x79, - 0x49, 0xfa, 0xfd, 0xbc, 0x24, 0x3d, 0x7f, 0x5d, 0x9a, 0x7b, 0xf9, 0xba, 0x34, 0xf7, 0xea, 0x75, - 0x69, 0xee, 0xcb, 0x1b, 0xc2, 0x9f, 0x13, 0xdd, 0x1d, 0xea, 0x5d, 0xdd, 0x71, 0xed, 0x3e, 0xee, - 0xd0, 0xe0, 0xa9, 0x1a, 0xfc, 0x1b, 0x31, 0x16, 0xd9, 0x4b, 0xfc, 0xdd, 0x7f, 0x02, 0x00, 0x00, - 0xff, 0xff, 0x5b, 0x9b, 0x23, 0x20, 0xe6, 0x0c, 0x00, 0x00, + // 1268 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0x41, 0x6f, 0xe3, 0xc4, + 0x17, 0xaf, 0x93, 0xa6, 0x4d, 0x26, 0x9b, 0xc6, 0x9d, 0xa6, 0x6d, 0x9a, 0xfd, 0xff, 0xe3, 0x2a, + 0x08, 0xb6, 0xac, 0x76, 0x13, 0x11, 0x84, 0xb4, 0x2a, 0x5a, 0x41, 0xd3, 0x98, 0x55, 0xca, 0x92, + 0xad, 0x9c, 0x44, 0xac, 0x10, 0x28, 0xb2, 0x93, 0xd9, 0xac, 0xb3, 0x89, 0xed, 0xf5, 0x8c, 0x57, + 0x54, 0xe2, 0x80, 0x90, 0x38, 0x70, 0x43, 0xe2, 0xc4, 0x07, 0xe0, 0xbb, 0xc0, 0x01, 0x69, 0x25, + 0x2e, 0x7b, 0xb2, 0xa0, 0x8b, 0x84, 0xe4, 0x13, 0x1f, 0x01, 0x79, 0xc6, 0x76, 0xc6, 0x6e, 0xab, + 0x14, 0x6e, 0xf1, 0xef, 0xbd, 0xf7, 0x9b, 0x99, 0xf7, 0x7e, 0xef, 0xcd, 0x04, 0x6c, 0x5a, 0xcf, + 0x26, 0x0d, 0xd5, 0xd2, 0x1b, 0x53, 0x53, 0xab, 0x5b, 0xb6, 0x49, 0x4c, 0x98, 0x56, 0x2d, 0xbd, + 0x72, 0x77, 0xa2, 0x93, 0xa7, 0x8e, 0x56, 0x1f, 0x99, 0xf3, 0xc6, 0xc4, 0x9c, 0x98, 0x0d, 0x6a, + 0xd3, 0x9c, 0x27, 0xf4, 0x8b, 0x7e, 0xd0, 0x5f, 0x2c, 0xa6, 0x52, 0x0a, 0x69, 0xb0, 0xa3, 0xcd, + 0x75, 0x12, 0xa0, 0xd2, 0xc4, 0x34, 0x27, 0x33, 0xb4, 0x88, 0x25, 0xfa, 0x1c, 0x61, 0xa2, 0xce, + 0xad, 0xc0, 0xe1, 0x7f, 0x81, 0x83, 0x1f, 0xa9, 0x1a, 0x86, 0x49, 0x54, 0xa2, 0x9b, 0x06, 0x66, + 0xd6, 0xda, 0xaf, 0xab, 0xa0, 0x70, 0x62, 0x6a, 0x8a, 0x63, 0xb4, 0x11, 0x51, 0xf5, 0x19, 0x86, + 0xb7, 0xc1, 0x9a, 0xed, 0x18, 0x43, 0x7d, 0x5c, 0x16, 0xf6, 0x85, 0x83, 0x5c, 0x6b, 0xcb, 0x73, + 0xa5, 0xa2, 0xed, 0x18, 0x9d, 0xf1, 0x1d, 0x73, 0xae, 0x13, 0x34, 0xb7, 0xc8, 0x99, 0x92, 0xa1, + 0x80, 0xef, 0x3b, 0x35, 0x35, 0xdf, 0x37, 0xb5, 0xf0, 0x9d, 0x9a, 0x5a, 0xdc, 0x97, 0x02, 0xf0, + 0x7d, 0x90, 0xc1, 0x44, 0x25, 0xa8, 0x9c, 0xde, 0x17, 0x0e, 0x36, 0x9a, 0x62, 0x5d, 0xb5, 0xf4, + 0x3a, 0x5b, 0xba, 0xe7, 0xe3, 0x2c, 0x98, 0xba, 0xf0, 0xc1, 0x14, 0x80, 0x0d, 0xb0, 0x3e, 0x9a, + 0x39, 0x98, 0x20, 0xbb, 0xbc, 0x4a, 0x57, 0xda, 0xf6, 0x5c, 0x69, 0x33, 0x80, 0x38, 0xf7, 0xd0, + 0x0b, 0xbe, 0x05, 0x56, 0x0d, 0x73, 0x8c, 0xca, 0x19, 0xea, 0x0d, 0x3d, 0x57, 0xda, 0xf0, 0xbf, + 0x39, 0x57, 0x6a, 0x87, 0x8f, 0x40, 0x6e, 0x86, 0x54, 0x8c, 0xc6, 0x43, 0x82, 0xcb, 0xeb, 0xfb, + 0xc2, 0x41, 0xbe, 0x59, 0xa9, 0xb3, 0x8c, 0xd5, 0xc3, 0x94, 0xd6, 0xfb, 0x61, 0x4a, 0x5b, 0x3b, + 0x9e, 0x2b, 0x41, 0x16, 0xd0, 0xc7, 0x1c, 0x59, 0x36, 0xc4, 0xa0, 0x02, 0x80, 0x85, 0x8c, 0xb1, + 0x6e, 0x4c, 0x7c, 0xc6, 0xec, 0x52, 0xc6, 0x5d, 0xcf, 0x95, 0xb6, 0x82, 0x88, 0x18, 0x65, 0x2e, + 0x02, 0x7d, 0x4e, 0x4c, 0x54, 0x9b, 0xb0, 0x5d, 0xe6, 0xae, 0xc7, 0x19, 0x44, 0xc4, 0x39, 0x23, + 0x10, 0x0e, 0x40, 0xfe, 0x89, 0x6e, 0xe8, 0xf8, 0x29, 0x23, 0x05, 0x4b, 0x49, 0xcb, 0x9e, 0x2b, + 0x95, 0xc2, 0x90, 0x18, 0x2b, 0x58, 0xa0, 0xb5, 0x1f, 0xd7, 0x00, 0x38, 0x31, 0x35, 0x4e, 0x4c, + 0x81, 0x40, 0x84, 0xa5, 0x02, 0x79, 0x1b, 0x64, 0x9e, 0x3b, 0xc8, 0x41, 0xbc, 0x96, 0x28, 0xc0, + 0xbb, 0x52, 0x00, 0xde, 0xa1, 0xb4, 0x18, 0x11, 0x2a, 0xa6, 0x5c, 0xab, 0xe4, 0xb9, 0x92, 0xc8, + 0x10, 0xce, 0x39, 0xf0, 0x81, 0xef, 0x81, 0x9c, 0xa1, 0xce, 0x11, 0xb6, 0xd4, 0x11, 0x0a, 0xe4, + 0x43, 0x33, 0x14, 0x81, 0x7c, 0x86, 0x22, 0x10, 0xde, 0x0b, 0x05, 0x9b, 0xa1, 0x82, 0x2d, 0x84, + 0x82, 0x5d, 0xae, 0xd6, 0xc7, 0xe0, 0x06, 0xeb, 0xd1, 0xa0, 0x62, 0x6b, 0x4b, 0x93, 0xbb, 0xe7, + 0xb9, 0xd2, 0x76, 0x14, 0x13, 0xcb, 0x6e, 0x9e, 0x83, 0x7d, 0xb9, 0x8e, 0x54, 0x63, 0x84, 0x66, + 0xff, 0x42, 0xae, 0x2c, 0x20, 0x2e, 0xd7, 0x10, 0x83, 0x1f, 0x80, 0x42, 0x40, 0x68, 0x23, 0x15, + 0x9b, 0x06, 0x55, 0x6c, 0xae, 0x55, 0xf1, 0x5c, 0x69, 0x87, 0x19, 0x14, 0x8a, 0x73, 0xc1, 0x37, + 0x78, 0x1c, 0x3e, 0x05, 0x70, 0xa6, 0x62, 0x32, 0x24, 0xb6, 0x6a, 0x60, 0xdd, 0x1f, 0x2d, 0xd7, + 0xd3, 0x68, 0xd5, 0x73, 0xa5, 0x8a, 0x1f, 0xd9, 0x8f, 0x02, 0x63, 0x5b, 0x14, 0x93, 0x36, 0x78, + 0x1f, 0x14, 0x66, 0x2a, 0x41, 0x98, 0x0c, 0x83, 0xf9, 0x04, 0xe8, 0x56, 0x69, 0xea, 0x98, 0x41, + 0x49, 0x4c, 0xa9, 0x3c, 0x07, 0xc3, 0x43, 0x90, 0xf5, 0xa5, 0x88, 0x2d, 0x34, 0x2a, 0xe7, 0xe9, + 0xf6, 0xb2, 0x61, 0x45, 0xd9, 0x34, 0x99, 0x9a, 0x5a, 0xcf, 0x42, 0x23, 0x7e, 0x9a, 0x04, 0x10, + 0x6c, 0xb3, 0x58, 0xdb, 0x31, 0x70, 0xf9, 0xc6, 0x7e, 0xfa, 0x20, 0xdf, 0x84, 0xdc, 0xf8, 0x0a, + 0xc4, 0x1e, 0xb1, 0x28, 0x8e, 0x81, 0x13, 0x2c, 0x3e, 0x54, 0xfb, 0x45, 0x00, 0x9b, 0x8b, 0xde, + 0x50, 0xd0, 0x73, 0x07, 0x61, 0x02, 0xef, 0x82, 0x75, 0xd6, 0x22, 0xb8, 0x2c, 0xec, 0xa7, 0x39, + 0x31, 0x77, 0xc6, 0x38, 0x21, 0xe6, 0xce, 0x18, 0xc3, 0x63, 0x50, 0x44, 0x5f, 0x5a, 0xaa, 0x31, + 0x1e, 0x46, 0xa7, 0xf1, 0xfb, 0x25, 0xdb, 0xba, 0xe9, 0xb9, 0xd2, 0x2e, 0x33, 0x9d, 0x5c, 0x38, + 0x49, 0x21, 0x66, 0x80, 0x1f, 0x82, 0x0d, 0x8e, 0xc4, 0x76, 0x0c, 0xda, 0x47, 0x59, 0x56, 0xf6, + 0xc8, 0x55, 0x71, 0x62, 0x65, 0xe7, 0xf1, 0xda, 0xdf, 0x02, 0x80, 0xfc, 0x59, 0xb0, 0x65, 0x1a, + 0x18, 0x41, 0x0d, 0xe4, 0x7d, 0xc6, 0x31, 0x83, 0xe9, 0x81, 0xf2, 0xcd, 0x5b, 0x61, 0xae, 0x12, + 0xde, 0x1c, 0x24, 0x1b, 0xc4, 0x3e, 0x63, 0x23, 0x66, 0x1a, 0x81, 0xfc, 0x88, 0x59, 0xa0, 0x95, + 0x17, 0xa0, 0x98, 0x08, 0x84, 0x6f, 0x80, 0xf4, 0x33, 0x74, 0x16, 0xcc, 0x98, 0x4d, 0xcf, 0x95, + 0x0a, 0xcf, 0xd0, 0x19, 0x17, 0xee, 0x5b, 0xe1, 0x21, 0xc8, 0xbc, 0x50, 0x67, 0xc1, 0x7c, 0xc9, + 0x37, 0x8b, 0x89, 0x5d, 0xb1, 0x8e, 0xa6, 0x1e, 0x7c, 0x47, 0x53, 0xe0, 0x30, 0x75, 0x4f, 0xa8, + 0x7d, 0x97, 0x02, 0xdb, 0xb1, 0x82, 0x47, 0xa7, 0xb6, 0x41, 0x31, 0xc8, 0x63, 0xe2, 0xe4, 0x77, + 0x2f, 0xaa, 0x84, 0x3f, 0xfc, 0x02, 0x65, 0xe7, 0xa7, 0x25, 0x9c, 0xf2, 0x38, 0x5f, 0xc2, 0x98, + 0xa1, 0xf2, 0x15, 0xcd, 0x7f, 0x82, 0xe1, 0x7a, 0x89, 0xb8, 0x1f, 0x4f, 0xc4, 0x65, 0x52, 0x5e, + 0x96, 0x0b, 0x19, 0x94, 0x12, 0xa7, 0x8a, 0xc4, 0xcc, 0x9a, 0x33, 0x26, 0x66, 0xfa, 0x58, 0x88, + 0x89, 0x99, 0x21, 0xb5, 0x23, 0x20, 0x06, 0x03, 0xd5, 0xf9, 0x8f, 0xfd, 0x50, 0xfb, 0x8b, 0x35, + 0x55, 0xc8, 0x11, 0x54, 0xe4, 0x0b, 0x00, 0x68, 0x7b, 0xf8, 0xe3, 0x38, 0x2c, 0xc6, 0x9b, 0xfc, + 0x00, 0x77, 0x62, 0x85, 0xa0, 0x23, 0x3d, 0x28, 0x02, 0xbd, 0x1a, 0xa6, 0x21, 0xc6, 0x5f, 0x0d, + 0x11, 0x58, 0xc1, 0x60, 0x23, 0x1e, 0x75, 0xbd, 0xc4, 0xdf, 0xe3, 0x13, 0x7f, 0xf9, 0x8d, 0x72, + 0x75, 0xce, 0x6f, 0x7f, 0x9b, 0x02, 0x79, 0xee, 0xbd, 0x04, 0xb7, 0xc1, 0xa6, 0x32, 0xe8, 0x0e, + 0x7b, 0xfd, 0xa3, 0xbe, 0x3c, 0x1c, 0x74, 0x3f, 0xee, 0x3e, 0xfa, 0xb4, 0x2b, 0xae, 0xc0, 0x12, + 0x10, 0x17, 0xf0, 0x43, 0xf9, 0xa8, 0x27, 0xb7, 0x45, 0x21, 0xee, 0x7c, 0x2a, 0x77, 0xdb, 0x9d, + 0xee, 0x03, 0x31, 0x15, 0x87, 0x95, 0x41, 0xb7, 0xeb, 0xc3, 0x69, 0xb8, 0x0b, 0xb6, 0x16, 0x70, + 0x6f, 0x70, 0x7c, 0x2c, 0xcb, 0x6d, 0xb9, 0x2d, 0xae, 0xc6, 0xc9, 0x3f, 0x3a, 0xea, 0x3c, 0x94, + 0xdb, 0x62, 0x26, 0xee, 0x7e, 0xaa, 0xc8, 0xf2, 0x27, 0xa7, 0x7d, 0xb9, 0x2d, 0xae, 0xc5, 0x0d, + 0xc7, 0x47, 0xdd, 0x63, 0xf9, 0xa1, 0x1f, 0xb1, 0x0e, 0x6f, 0x82, 0xdd, 0xc4, 0x26, 0x87, 0xf2, + 0xe3, 0xd3, 0x8e, 0x22, 0xb7, 0xc5, 0x2c, 0xfc, 0x3f, 0xd8, 0x53, 0x06, 0xdd, 0x5e, 0xcc, 0xaa, + 0xc8, 0xfd, 0x81, 0xd2, 0x95, 0xdb, 0x62, 0xae, 0xf9, 0x53, 0x0a, 0xac, 0x9e, 0x98, 0x1a, 0xf6, + 0xaf, 0xd9, 0x07, 0x88, 0x44, 0x05, 0x85, 0xdb, 0xc9, 0x02, 0x53, 0x41, 0x55, 0x76, 0x2e, 0xaf, + 0x7b, 0x6d, 0xef, 0x9b, 0xdf, 0xfe, 0xfc, 0x21, 0xb5, 0x55, 0xdb, 0x68, 0xbc, 0x78, 0xc7, 0x7f, + 0x9a, 0x37, 0x30, 0xb5, 0x1f, 0x0a, 0xb7, 0xe1, 0xe7, 0xa0, 0xc0, 0x98, 0xc3, 0x77, 0xcc, 0xce, + 0x85, 0x11, 0xc6, 0xb8, 0x77, 0xaf, 0x18, 0x6d, 0xb5, 0x0a, 0x25, 0x2f, 0xd5, 0x8a, 0x21, 0x79, + 0x30, 0x18, 0x7c, 0x76, 0x04, 0x44, 0xc6, 0xce, 0xbd, 0xba, 0xf7, 0x2e, 0x9b, 0x14, 0x6c, 0x8d, + 0xca, 0xd5, 0x43, 0x24, 0xbe, 0x8c, 0xed, 0x18, 0xdc, 0x32, 0xad, 0xce, 0xab, 0x3f, 0xaa, 0x2b, + 0x5f, 0x9f, 0x57, 0x85, 0x9f, 0xcf, 0xab, 0xc2, 0xcb, 0xf3, 0xaa, 0xf0, 0xfb, 0x79, 0x55, 0xf8, + 0xfe, 0x75, 0x75, 0xe5, 0xe5, 0xeb, 0xea, 0xca, 0xab, 0xd7, 0xd5, 0x95, 0xcf, 0x6e, 0x71, 0x7f, + 0x40, 0x54, 0x7b, 0xae, 0x8e, 0x55, 0xcb, 0x36, 0xa7, 0x68, 0x44, 0x82, 0xaf, 0x46, 0xf0, 0x8f, + 0x43, 0x5b, 0xa3, 0x17, 0xf8, 0xbb, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xff, 0x4a, 0xae, 0x2e, + 0xca, 0x0c, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -871,42 +868,50 @@ func (m *JobRunDetails) MarshalToSizedBuffer(dAtA []byte) (int, error) { var l int _ = l if m.FinishedTs != nil { - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.FinishedTs, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.FinishedTs):]) - if err1 != nil { - return 0, err1 + { + size, err := m.FinishedTs.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintJob(dAtA, i, uint64(size)) } - i -= n1 - i = encodeVarintJob(dAtA, i, uint64(n1)) i-- dAtA[i] = 0x52 } if m.StartedTs != nil { - n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.StartedTs, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.StartedTs):]) - if err2 != nil { - return 0, err2 + { + size, err := m.StartedTs.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintJob(dAtA, i, uint64(size)) } - i -= n2 - i = encodeVarintJob(dAtA, i, uint64(n2)) i-- dAtA[i] = 0x4a } if m.PendingTs != nil { - n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.PendingTs, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.PendingTs):]) - if err3 != nil { - return 0, err3 + { + size, err := m.PendingTs.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintJob(dAtA, i, uint64(size)) } - i -= n3 - i = encodeVarintJob(dAtA, i, uint64(n3)) i-- dAtA[i] = 0x42 } if m.LeasedTs != nil { - n4, err4 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LeasedTs, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LeasedTs):]) - if err4 != nil { - return 0, err4 + { + size, err := m.LeasedTs.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintJob(dAtA, i, uint64(size)) } - i -= n4 - i = encodeVarintJob(dAtA, i, uint64(n4)) i-- dAtA[i] = 0x3a } @@ -1000,12 +1005,14 @@ func (m *JobDetails) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x52 } if m.LastTransitionTs != nil { - n6, err6 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastTransitionTs, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastTransitionTs):]) - if err6 != nil { - return 0, err6 + { + size, err := m.LastTransitionTs.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintJob(dAtA, i, uint64(size)) } - i -= n6 - i = encodeVarintJob(dAtA, i, uint64(n6)) i-- dAtA[i] = 0x4a } @@ -1017,22 +1024,26 @@ func (m *JobDetails) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x42 } if m.CancelTs != nil { - n7, err7 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.CancelTs, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.CancelTs):]) - if err7 != nil { - return 0, err7 + { + size, err := m.CancelTs.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintJob(dAtA, i, uint64(size)) } - i -= n7 - i = encodeVarintJob(dAtA, i, uint64(n7)) i-- dAtA[i] = 0x3a } if m.SubmittedTs != nil { - n8, err8 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.SubmittedTs, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.SubmittedTs):]) - if err8 != nil { - return 0, err8 + { + size, err := m.SubmittedTs.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintJob(dAtA, i, uint64(size)) } - i -= n8 - i = encodeVarintJob(dAtA, i, uint64(n8)) i-- dAtA[i] = 0x32 } @@ -1363,19 +1374,19 @@ func (m *JobRunDetails) Size() (n int) { n += 1 + l + sovJob(uint64(l)) } if m.LeasedTs != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.LeasedTs) + l = m.LeasedTs.Size() n += 1 + l + sovJob(uint64(l)) } if m.PendingTs != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.PendingTs) + l = m.PendingTs.Size() n += 1 + l + sovJob(uint64(l)) } if m.StartedTs != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.StartedTs) + l = m.StartedTs.Size() n += 1 + l + sovJob(uint64(l)) } if m.FinishedTs != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.FinishedTs) + l = m.FinishedTs.Size() n += 1 + l + sovJob(uint64(l)) } return n @@ -1407,11 +1418,11 @@ func (m *JobDetails) Size() (n int) { n += 1 + sovJob(uint64(m.State)) } if m.SubmittedTs != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.SubmittedTs) + l = m.SubmittedTs.Size() n += 1 + l + sovJob(uint64(l)) } if m.CancelTs != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.CancelTs) + l = m.CancelTs.Size() n += 1 + l + sovJob(uint64(l)) } l = len(m.CancelReason) @@ -1419,7 +1430,7 @@ func (m *JobDetails) Size() (n int) { n += 1 + l + sovJob(uint64(l)) } if m.LastTransitionTs != nil { - l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastTransitionTs) + l = m.LastTransitionTs.Size() n += 1 + l + sovJob(uint64(l)) } l = len(m.LatestRunId) @@ -1907,9 +1918,9 @@ func (m *JobRunDetails) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.LeasedTs == nil { - m.LeasedTs = new(time.Time) + m.LeasedTs = &types.Timestamp{} } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.LeasedTs, dAtA[iNdEx:postIndex]); err != nil { + if err := m.LeasedTs.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1943,9 +1954,9 @@ func (m *JobRunDetails) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.PendingTs == nil { - m.PendingTs = new(time.Time) + m.PendingTs = &types.Timestamp{} } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.PendingTs, dAtA[iNdEx:postIndex]); err != nil { + if err := m.PendingTs.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1979,9 +1990,9 @@ func (m *JobRunDetails) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.StartedTs == nil { - m.StartedTs = new(time.Time) + m.StartedTs = &types.Timestamp{} } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.StartedTs, dAtA[iNdEx:postIndex]); err != nil { + if err := m.StartedTs.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2015,9 +2026,9 @@ func (m *JobRunDetails) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.FinishedTs == nil { - m.FinishedTs = new(time.Time) + m.FinishedTs = &types.Timestamp{} } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.FinishedTs, dAtA[iNdEx:postIndex]); err != nil { + if err := m.FinishedTs.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2248,9 +2259,9 @@ func (m *JobDetails) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.SubmittedTs == nil { - m.SubmittedTs = new(time.Time) + m.SubmittedTs = &types.Timestamp{} } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.SubmittedTs, dAtA[iNdEx:postIndex]); err != nil { + if err := m.SubmittedTs.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2284,9 +2295,9 @@ func (m *JobDetails) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.CancelTs == nil { - m.CancelTs = new(time.Time) + m.CancelTs = &types.Timestamp{} } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.CancelTs, dAtA[iNdEx:postIndex]); err != nil { + if err := m.CancelTs.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2352,9 +2363,9 @@ func (m *JobDetails) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.LastTransitionTs == nil { - m.LastTransitionTs = new(time.Time) + m.LastTransitionTs = &types.Timestamp{} } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.LastTransitionTs, dAtA[iNdEx:postIndex]); err != nil { + if err := m.LastTransitionTs.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/pkg/api/job.proto b/pkg/api/job.proto index f48247c6086..15ceafcf7bf 100644 --- a/pkg/api/job.proto +++ b/pkg/api/job.proto @@ -29,10 +29,10 @@ message JobRunDetails { JobRunState state = 3; string cluster = 4; string node = 5; - google.protobuf.Timestamp leased_ts = 7 [(gogoproto.stdtime) = true]; - google.protobuf.Timestamp pending_ts = 8 [(gogoproto.stdtime) = true]; - google.protobuf.Timestamp started_ts = 9 [(gogoproto.stdtime) = true]; - google.protobuf.Timestamp finished_ts = 10 [(gogoproto.stdtime) = true]; + google.protobuf.Timestamp leased_ts = 7; + google.protobuf.Timestamp pending_ts = 8; + google.protobuf.Timestamp started_ts = 9; + google.protobuf.Timestamp finished_ts = 10; } @@ -42,10 +42,10 @@ message JobDetails { string jobset = 3; string namespace = 4; JobState state = 5; - google.protobuf.Timestamp submitted_ts = 6 [(gogoproto.stdtime) = true]; - google.protobuf.Timestamp cancel_ts = 7 [(gogoproto.stdtime) = true]; + google.protobuf.Timestamp submitted_ts = 6; + google.protobuf.Timestamp cancel_ts = 7; string cancel_reason = 8; - google.protobuf.Timestamp last_transition_ts = 9 [(gogoproto.stdtime) = true]; + google.protobuf.Timestamp last_transition_ts = 9; string latest_run_id = 10; Job job_spec = 11; // Only filled in if expand_job_spec is true repeated JobRunDetails job_runs = 12; // Only filled in if expand_job_run is true; From 489a2834e30f15180f0eafb89a6e1eaab4187bc1 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Mon, 24 Jun 2024 07:50:10 +0100 Subject: [PATCH 03/27] initial timestamps Signed-off-by: Chris Martin --- internal/armadactl/watch.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/armadactl/watch.go b/internal/armadactl/watch.go index bf9a583a3ee..dccaf5e510d 100644 --- a/internal/armadactl/watch.go +++ b/internal/armadactl/watch.go @@ -6,9 +6,8 @@ import ( "reflect" "time" - protoutil "github.com/armadaproject/armada/internal/common/proto" - "github.com/armadaproject/armada/internal/common/armadacontext" + protoutil "github.com/armadaproject/armada/internal/common/proto" "github.com/armadaproject/armada/pkg/api" "github.com/armadaproject/armada/pkg/client" "github.com/armadaproject/armada/pkg/client/domain" From b6518ed9ff56cc687a7d5db3fa899407ff906a33 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Mon, 24 Jun 2024 08:18:05 +0100 Subject: [PATCH 04/27] tests Signed-off-by: Chris Martin --- internal/common/proto/protoutil_test.go | 46 +++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/internal/common/proto/protoutil_test.go b/internal/common/proto/protoutil_test.go index 3d717e9e001..e60c2cc8e70 100644 --- a/internal/common/proto/protoutil_test.go +++ b/internal/common/proto/protoutil_test.go @@ -1,7 +1,10 @@ package protoutil import ( + "fmt" + "github.com/gogo/protobuf/types" "testing" + "time" "github.com/gogo/protobuf/proto" "github.com/google/uuid" @@ -63,3 +66,46 @@ func TestMustMarshallAndCompress(t *testing.T) { bytes := MustMarshallAndCompress(msg, compressor) assert.Equal(t, compressedMsg, bytes) } + +func TestToTimestamp(t *testing.T) { + + var tests = map[string]struct { + ts *types.Timestamp + t time.Time + }{ + "unix epoch": { + ts: &types.Timestamp{Seconds: 0, Nanos: 0}, + t: utcDate(1970, 1, 1), + }, + "before unix epoch": { + ts: &types.Timestamp{Seconds: -281836800, Nanos: 0}, + t: utcDate(1961, 1, 26), + }, + "after unix epoch": { + ts: &types.Timestamp{Seconds: 1296000000, Nanos: 0}, + t: utcDate(2011, 1, 26), + }, + "after the epoch, in the middle of the day": { + ts: &types.Timestamp{Seconds: 1296012345, Nanos: 940483}, + t: time.Date(2011, 1, 26, 3, 25, 45, 940483, time.UTC), + }, + } + + for name, tc := range tests { + testName := fmt.Sprintf("ToTimestamp: %s", name) + t.Run(testName, func(t *testing.T) { + assert.Equal(t, tc.ts, ToTimestamp(tc.t)) + }) + } + + for name, tc := range tests { + testName := fmt.Sprintf("ToStdTime: %s", name) + t.Run(testName, func(t *testing.T) { + assert.Equal(t, tc.t, ToStdTime(tc.ts)) + }) + } +} + +func utcDate(year, month, day int) time.Time { + return time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.UTC) +} From 2e83e1be9bf6fa03594e55b98372993f64f8211f Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Mon, 24 Jun 2024 17:52:27 +0100 Subject: [PATCH 05/27] regen proto Signed-off-by: Chris Martin --- pkg/api/submit.pb.go | 415 ++++++++++++++++++++++--------------------- 1 file changed, 210 insertions(+), 205 deletions(-) diff --git a/pkg/api/submit.pb.go b/pkg/api/submit.pb.go index 83a137983f6..715474a80f8 100644 --- a/pkg/api/submit.pb.go +++ b/pkg/api/submit.pb.go @@ -12,12 +12,10 @@ import ( math_bits "math/bits" reflect "reflect" strings "strings" - time "time" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" types "github.com/gogo/protobuf/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" @@ -31,7 +29,6 @@ import ( var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -739,7 +736,7 @@ type Job struct { // This field is populated automatically at submission. // Submitting a job with this field already populated results in an error. SchedulingResourceRequirements v1.ResourceRequirements `protobuf:"bytes,21,opt,name=scheduling_resource_requirements,json=schedulingResourceRequirements,proto3" json:"schedulingResourceRequirements"` - Created time.Time `protobuf:"bytes,6,opt,name=created,proto3,stdtime" json:"created"` + Created *types.Timestamp `protobuf:"bytes,6,opt,name=created,proto3" json:"created,omitempty"` // Services can be provided either as Armada-specific config objects or as proper k8s objects. // These options are exclusive, i.e., if either ingress or services is provided, // then neither of k8s_ingress or k8s_service can be provided, and vice versa. @@ -893,11 +890,11 @@ func (m *Job) GetSchedulingResourceRequirements() v1.ResourceRequirements { return v1.ResourceRequirements{} } -func (m *Job) GetCreated() time.Time { +func (m *Job) GetCreated() *types.Timestamp { if m != nil { return m.Created } - return time.Time{} + return nil } func (m *Job) GetIngress() []*IngressConfig { @@ -2084,194 +2081,193 @@ func init() { func init() { proto.RegisterFile("pkg/api/submit.proto", fileDescriptor_e998bacb27df16c1) } var fileDescriptor_e998bacb27df16c1 = []byte{ - // 2981 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcb, 0x6f, 0x1b, 0xd7, - 0xd5, 0xe7, 0x88, 0x7a, 0xf1, 0x50, 0x0f, 0xea, 0xea, 0xe1, 0x11, 0xed, 0x88, 0xf2, 0x24, 0xf1, - 0x27, 0x0b, 0x09, 0x15, 0x2b, 0x5f, 0x50, 0xdb, 0x4d, 0xe1, 0x8a, 0x12, 0x6d, 0x4b, 0xb1, 0x65, - 0x85, 0xb2, 0x92, 0xa6, 0x28, 0xca, 0x0c, 0x39, 0x57, 0xd4, 0x48, 0xe4, 0x0c, 0x33, 0x33, 0x94, - 0xab, 0x16, 0x01, 0x8a, 0xa2, 0x68, 0x17, 0xdd, 0x04, 0xe8, 0xae, 0x05, 0x92, 0x45, 0x77, 0xe9, - 0xa2, 0x9b, 0xa2, 0xe8, 0x9f, 0x90, 0x65, 0x80, 0xa2, 0x40, 0xba, 0x61, 0x5a, 0xbb, 0x0f, 0x80, - 0xbb, 0xee, 0xbb, 0x28, 0xee, 0xb9, 0x77, 0x38, 0x77, 0xf8, 0x10, 0x45, 0xdb, 0x4a, 0x36, 0xdd, - 0xe9, 0xfe, 0xee, 0x79, 0xcf, 0xb9, 0xe7, 0x9e, 0x73, 0x29, 0x98, 0xa9, 0x1e, 0x95, 0x56, 0xf4, - 0xaa, 0xb9, 0xe2, 0xd6, 0x0a, 0x15, 0xd3, 0x4b, 0x57, 0x1d, 0xdb, 0xb3, 0x49, 0x54, 0xaf, 0x9a, - 0xc9, 0x8b, 0x25, 0xdb, 0x2e, 0x95, 0xe9, 0x0a, 0x42, 0x85, 0xda, 0xfe, 0x0a, 0xad, 0x54, 0xbd, - 0x13, 0x4e, 0x91, 0x4c, 0xb5, 0x6e, 0x7a, 0x66, 0x85, 0xba, 0x9e, 0x5e, 0xa9, 0x0a, 0x02, 0xed, - 0xe8, 0xba, 0x9b, 0x36, 0x6d, 0x94, 0x5d, 0xb4, 0x1d, 0xba, 0x72, 0x7c, 0x6d, 0xa5, 0x44, 0x2d, - 0xea, 0xe8, 0x1e, 0x35, 0x04, 0xcd, 0x92, 0x44, 0x63, 0x51, 0xef, 0x91, 0xed, 0x1c, 0x99, 0x56, - 0xa9, 0x13, 0xe5, 0x25, 0xa1, 0x8e, 0x51, 0xea, 0x96, 0x65, 0x7b, 0xba, 0x67, 0xda, 0x96, 0x2b, - 0x76, 0x5f, 0x2d, 0x99, 0xde, 0x41, 0xad, 0x90, 0x2e, 0xda, 0x95, 0x95, 0x92, 0x5d, 0xb2, 0x03, - 0xab, 0xd8, 0x0a, 0x17, 0xf8, 0x97, 0x20, 0x6f, 0xfa, 0x7c, 0x40, 0xf5, 0xb2, 0x77, 0xc0, 0x51, - 0xed, 0x93, 0x18, 0xcc, 0x6c, 0xd9, 0x85, 0x5d, 0x8c, 0x43, 0x8e, 0x7e, 0x50, 0xa3, 0xae, 0xb7, - 0xe9, 0xd1, 0x0a, 0x59, 0x85, 0xd1, 0xaa, 0x63, 0xda, 0x8e, 0xe9, 0x9d, 0xa8, 0xca, 0xa2, 0xb2, - 0xa4, 0x64, 0xe6, 0x1a, 0xf5, 0x14, 0xf1, 0xb1, 0x57, 0xec, 0x8a, 0xe9, 0x61, 0x68, 0x72, 0x4d, - 0x3a, 0xf2, 0x06, 0xc4, 0x2c, 0xbd, 0x42, 0xdd, 0xaa, 0x5e, 0xa4, 0x6a, 0x74, 0x51, 0x59, 0x8a, - 0x65, 0x2e, 0x34, 0xea, 0xa9, 0xe9, 0x26, 0x28, 0x71, 0x05, 0x94, 0xe4, 0x75, 0x88, 0x15, 0xcb, - 0x26, 0xb5, 0xbc, 0xbc, 0x69, 0xa8, 0xa3, 0xc8, 0x86, 0xba, 0x38, 0xb8, 0x69, 0xc8, 0xba, 0x7c, - 0x8c, 0xec, 0xc2, 0x70, 0x59, 0x2f, 0xd0, 0xb2, 0xab, 0x0e, 0x2e, 0x46, 0x97, 0xe2, 0xab, 0x2f, - 0xa7, 0xf5, 0xaa, 0x99, 0xee, 0xe4, 0x4a, 0xfa, 0x1e, 0xd2, 0x65, 0x2d, 0xcf, 0x39, 0xc9, 0xcc, - 0x34, 0xea, 0xa9, 0x04, 0x67, 0x94, 0xc4, 0x0a, 0x51, 0xa4, 0x04, 0x71, 0x29, 0xce, 0xea, 0x10, - 0x4a, 0x5e, 0xee, 0x2e, 0x79, 0x2d, 0x20, 0xe6, 0xe2, 0xe7, 0x1b, 0xf5, 0xd4, 0xac, 0x24, 0x42, - 0xd2, 0x21, 0x4b, 0x26, 0x3f, 0x57, 0x60, 0xc6, 0xa1, 0x1f, 0xd4, 0x4c, 0x87, 0x1a, 0x79, 0xcb, - 0x36, 0x68, 0x5e, 0x38, 0x33, 0x8c, 0x2a, 0xaf, 0x75, 0x57, 0x99, 0x13, 0x5c, 0xdb, 0xb6, 0x41, - 0x65, 0xc7, 0xb4, 0x46, 0x3d, 0x75, 0xc9, 0x69, 0xdb, 0x0c, 0x0c, 0x50, 0x95, 0x1c, 0x69, 0xdf, - 0x27, 0x0f, 0x60, 0xb4, 0x6a, 0x1b, 0x79, 0xb7, 0x4a, 0x8b, 0xea, 0xc0, 0xa2, 0xb2, 0x14, 0x5f, - 0xbd, 0x98, 0xe6, 0x09, 0x8a, 0x36, 0xb0, 0x24, 0x4e, 0x1f, 0x5f, 0x4b, 0xef, 0xd8, 0xc6, 0x6e, - 0x95, 0x16, 0xf1, 0x7b, 0x4e, 0x55, 0xf9, 0x22, 0x24, 0x7b, 0x44, 0x80, 0x64, 0x07, 0x62, 0xbe, - 0x40, 0x57, 0x1d, 0x41, 0x77, 0x4e, 0x95, 0xc8, 0xd3, 0x8a, 0x2f, 0xdc, 0x50, 0x5a, 0x09, 0x8c, - 0xac, 0xc3, 0x88, 0x69, 0x95, 0x1c, 0xea, 0xba, 0x6a, 0x0c, 0xe5, 0x11, 0x14, 0xb4, 0xc9, 0xb1, - 0x75, 0xdb, 0xda, 0x37, 0x4b, 0x99, 0x59, 0x66, 0x98, 0x20, 0x93, 0xa4, 0xf8, 0x9c, 0xe4, 0x36, - 0x8c, 0xba, 0xd4, 0x39, 0x36, 0x8b, 0xd4, 0x55, 0x41, 0x92, 0xb2, 0xcb, 0x41, 0x21, 0x05, 0x8d, - 0xf1, 0xe9, 0x64, 0x63, 0x7c, 0x8c, 0xe5, 0xb8, 0x5b, 0x3c, 0xa0, 0x46, 0xad, 0x4c, 0x1d, 0x35, - 0x1e, 0xe4, 0x78, 0x13, 0x94, 0x73, 0xbc, 0x09, 0x26, 0x75, 0x88, 0x4b, 0x5f, 0x8b, 0xbc, 0x08, - 0xd1, 0x23, 0xca, 0x0f, 0x56, 0x2c, 0x33, 0xd5, 0xa8, 0xa7, 0xc6, 0x8f, 0xa8, 0x7c, 0xa6, 0xd8, - 0x2e, 0xb9, 0x0a, 0x43, 0xc7, 0x7a, 0xb9, 0x46, 0xf1, 0xbb, 0xc4, 0x32, 0xd3, 0x8d, 0x7a, 0x6a, - 0x12, 0x01, 0x89, 0x90, 0x53, 0xdc, 0x1c, 0xb8, 0xae, 0x24, 0xf7, 0x21, 0xd1, 0x9a, 0x8f, 0xe7, - 0xa2, 0xa7, 0x02, 0x17, 0xba, 0x24, 0xe1, 0x79, 0xa8, 0xd3, 0xfe, 0x1d, 0x85, 0xf1, 0xd0, 0xa7, - 0x26, 0x37, 0x61, 0xd0, 0x3b, 0xa9, 0x52, 0x54, 0x33, 0xb1, 0x9a, 0x90, 0x93, 0xe1, 0xe1, 0x49, - 0x95, 0xe2, 0x19, 0x9f, 0x60, 0x14, 0xa1, 0x04, 0x45, 0x1e, 0xa6, 0xbc, 0x6a, 0x3b, 0x9e, 0xab, - 0x0e, 0x2c, 0x46, 0x97, 0xc6, 0xb9, 0x72, 0x04, 0x64, 0xe5, 0x08, 0x90, 0xf7, 0xc3, 0xc5, 0x20, - 0x8a, 0x49, 0xf3, 0x62, 0x7b, 0xea, 0x3d, 0x7d, 0x15, 0xb8, 0x01, 0x71, 0xaf, 0xec, 0xe6, 0xa9, - 0xa5, 0x17, 0xca, 0xd4, 0x50, 0x07, 0x17, 0x95, 0xa5, 0xd1, 0x8c, 0xda, 0xa8, 0xa7, 0x66, 0x3c, - 0x16, 0x51, 0x44, 0x25, 0x5e, 0x08, 0x50, 0xac, 0x99, 0xd4, 0xf1, 0xf2, 0xac, 0x8a, 0xaa, 0x43, - 0x52, 0xcd, 0xa4, 0x8e, 0xb7, 0xad, 0x57, 0x68, 0xa8, 0x66, 0x0a, 0x8c, 0xdc, 0x82, 0xf1, 0x9a, - 0x4b, 0xf3, 0xc5, 0x72, 0xcd, 0xf5, 0xa8, 0xb3, 0xb9, 0xa3, 0x0e, 0xa3, 0xc6, 0x64, 0xa3, 0x9e, - 0x9a, 0xab, 0xb9, 0x74, 0xdd, 0xc7, 0x25, 0xe6, 0x31, 0x19, 0xff, 0xaa, 0x52, 0x4c, 0xf3, 0x60, - 0x3c, 0x74, 0x2e, 0xc9, 0xf5, 0x0e, 0x9f, 0x5c, 0x50, 0xe0, 0x27, 0x27, 0xed, 0x9f, 0xbc, 0xef, - 0x0f, 0xae, 0xfd, 0x45, 0x81, 0x44, 0x6b, 0xcd, 0x65, 0xfc, 0x1f, 0xd4, 0x68, 0x8d, 0x0a, 0x07, - 0x91, 0x1f, 0x01, 0x99, 0x1f, 0x01, 0xf2, 0xff, 0x00, 0x87, 0x76, 0x21, 0xef, 0x52, 0xbc, 0xc8, - 0x06, 0x82, 0x8f, 0x72, 0x68, 0x17, 0x76, 0x69, 0xcb, 0x45, 0xe6, 0x63, 0xc4, 0x80, 0x29, 0xc6, - 0xe5, 0x70, 0x7d, 0x79, 0x46, 0xe0, 0x27, 0xdb, 0x7c, 0xd7, 0x6b, 0x20, 0xf3, 0x42, 0xa3, 0x9e, - 0x9a, 0x3f, 0xb4, 0x0b, 0x12, 0x26, 0x7b, 0x34, 0xd9, 0xb2, 0xa5, 0xfd, 0x46, 0x81, 0xa9, 0x2d, - 0xbb, 0xb0, 0xe3, 0x50, 0x46, 0xf0, 0x95, 0x39, 0xf7, 0x2a, 0x8c, 0x30, 0x2e, 0xd3, 0xe0, 0x2e, - 0xc5, 0xf8, 0xfd, 0x7b, 0x68, 0x17, 0x36, 0x8d, 0xd0, 0xfd, 0xcb, 0x11, 0xed, 0x3f, 0xfc, 0x0b, - 0xac, 0xeb, 0x56, 0x91, 0x96, 0x7d, 0x23, 0x97, 0x61, 0x98, 0xcb, 0x90, 0xad, 0x44, 0x06, 0xd9, - 0x4a, 0x04, 0x9e, 0xd2, 0xca, 0x66, 0x18, 0xa2, 0x3d, 0xc3, 0x20, 0x39, 0x34, 0xd8, 0xdb, 0x21, - 0xf2, 0x0a, 0x0c, 0x3b, 0x54, 0x77, 0x6d, 0x4b, 0x9c, 0x51, 0xa4, 0xe6, 0x88, 0x4c, 0xcd, 0x11, - 0xed, 0x1f, 0x0a, 0x4c, 0x6f, 0xa1, 0x51, 0xe1, 0x08, 0x84, 0xbd, 0x52, 0xfa, 0xf5, 0x6a, 0xa0, - 0xa7, 0x57, 0xb7, 0x60, 0x78, 0xdf, 0x2c, 0x7b, 0xd4, 0xc1, 0x08, 0xc4, 0x57, 0xa7, 0x9a, 0x89, - 0x47, 0xbd, 0xdb, 0xb8, 0xc1, 0x2d, 0xe7, 0x44, 0xb2, 0xe5, 0x1c, 0x91, 0xfc, 0x1c, 0x3c, 0x83, - 0x9f, 0x6f, 0xc1, 0x98, 0x2c, 0x9b, 0x7c, 0x13, 0x86, 0x5d, 0x4f, 0xf7, 0xa8, 0xab, 0x2a, 0x8b, - 0xd1, 0xa5, 0x89, 0xd5, 0xf1, 0xa6, 0x7a, 0x86, 0x72, 0x61, 0x9c, 0x40, 0x16, 0xc6, 0x11, 0xed, - 0xcb, 0x49, 0x88, 0x6e, 0xd9, 0x05, 0xb2, 0x08, 0x03, 0xcd, 0xe0, 0x24, 0x1a, 0xf5, 0xd4, 0x98, - 0x29, 0x87, 0x65, 0xc0, 0x34, 0xc2, 0x7d, 0xe6, 0xf8, 0x19, 0xfb, 0xcc, 0x73, 0xcf, 0xa8, 0x50, - 0xd3, 0x3c, 0x72, 0xe6, 0xa6, 0x39, 0xd3, 0xec, 0x7f, 0x79, 0x4f, 0x34, 0xe3, 0xc7, 0xac, 0x8f, - 0x76, 0xf7, 0x9d, 0xf0, 0x0d, 0x07, 0xe1, 0xa2, 0xf3, 0xf4, 0xf7, 0xda, 0x71, 0x97, 0xe6, 0x36, - 0x8e, 0x0a, 0x16, 0x9b, 0x0a, 0x9e, 0x77, 0x2f, 0x7b, 0x15, 0x86, 0xec, 0x47, 0x16, 0x75, 0xc4, - 0x10, 0x81, 0x51, 0x47, 0x40, 0x8e, 0x3a, 0x02, 0x84, 0xc2, 0x45, 0x0c, 0x7f, 0x1e, 0x97, 0xee, - 0x81, 0x59, 0xcd, 0xd7, 0x5c, 0xea, 0xe4, 0x4b, 0x8e, 0x5d, 0xab, 0xba, 0xea, 0x24, 0x9e, 0xed, - 0x2b, 0x8d, 0x7a, 0x4a, 0x43, 0xb2, 0x07, 0x3e, 0xd5, 0x9e, 0x4b, 0x9d, 0x3b, 0x48, 0x23, 0xc9, - 0x54, 0xbb, 0xd1, 0x90, 0x9f, 0x2a, 0x70, 0xa5, 0x68, 0x57, 0xaa, 0xac, 0x5b, 0xa0, 0x46, 0xfe, - 0x34, 0x95, 0xd3, 0x8b, 0xca, 0xd2, 0x58, 0xe6, 0xb5, 0x46, 0x3d, 0xf5, 0x4a, 0xc0, 0xf1, 0x76, - 0x6f, 0xe5, 0x5a, 0x6f, 0xea, 0xd0, 0x30, 0x37, 0x78, 0xc6, 0x61, 0x4e, 0x1e, 0x0c, 0x86, 0x9e, - 0xfb, 0x60, 0x30, 0xf6, 0x3c, 0x06, 0x83, 0x5f, 0x29, 0xb0, 0x28, 0x5a, 0x6c, 0xd3, 0x2a, 0xe5, - 0x1d, 0xea, 0xda, 0x35, 0xa7, 0x48, 0xf3, 0x22, 0x35, 0x2a, 0xd4, 0xf2, 0x5c, 0x75, 0x16, 0x6d, - 0x5f, 0xea, 0xa4, 0x29, 0x27, 0x18, 0x72, 0x12, 0x7d, 0xe6, 0xca, 0x67, 0xf5, 0x54, 0xa4, 0x51, - 0x4f, 0x2d, 0x04, 0x92, 0x3b, 0xd1, 0xe5, 0x7a, 0xec, 0x93, 0x4d, 0x18, 0x29, 0x3a, 0x94, 0x4d, - 0xf3, 0xd8, 0x66, 0xc5, 0x57, 0x93, 0x69, 0x3e, 0xce, 0xa7, 0xfd, 0x39, 0x3d, 0xfd, 0xd0, 0x7f, - 0x3d, 0xc8, 0x4c, 0x0b, 0xa5, 0x3e, 0xcb, 0x47, 0x5f, 0xa6, 0x94, 0x9c, 0xbf, 0x90, 0x07, 0xa0, - 0x89, 0xe7, 0x32, 0x00, 0x25, 0x9e, 0x61, 0x00, 0xfa, 0x1e, 0xc4, 0x8f, 0xae, 0xbb, 0x79, 0xdf, - 0xa0, 0x29, 0x14, 0x75, 0x59, 0x0e, 0x6f, 0xf0, 0xa8, 0xc1, 0x82, 0x2c, 0xac, 0xe4, 0x7d, 0xed, - 0xd1, 0x75, 0x77, 0xb3, 0xcd, 0x44, 0x08, 0x50, 0x56, 0x92, 0x98, 0x74, 0xa1, 0x4d, 0x25, 0xdd, - 0xd3, 0x44, 0xd8, 0xdd, 0x94, 0x2b, 0xd6, 0x2d, 0x72, 0x05, 0x1a, 0x1e, 0xdb, 0x66, 0xce, 0x3a, - 0xb6, 0x91, 0x4d, 0x98, 0xe2, 0x67, 0xd6, 0xf3, 0xca, 0x79, 0x97, 0x16, 0x6d, 0xcb, 0x70, 0xd5, - 0xb9, 0x45, 0x65, 0x29, 0xca, 0x3b, 0x30, 0xdc, 0x7c, 0xe8, 0x95, 0x77, 0xf9, 0x96, 0xdc, 0x81, - 0xb5, 0x6c, 0xfd, 0x6f, 0x02, 0x7c, 0xea, 0x69, 0xe0, 0x9f, 0x0a, 0xcc, 0x6d, 0xb1, 0x7e, 0x56, - 0xd4, 0x26, 0xf3, 0x87, 0xd4, 0xef, 0x8c, 0xa4, 0x76, 0x4c, 0x39, 0x43, 0x3b, 0x76, 0xee, 0x97, - 0xf9, 0x9b, 0x30, 0x66, 0xd1, 0x47, 0xf9, 0x96, 0x62, 0x8b, 0xf7, 0xa6, 0x45, 0x1f, 0xed, 0xb4, - 0xd7, 0xdb, 0xb8, 0x04, 0x6b, 0xbf, 0x1d, 0x80, 0x0b, 0x6d, 0x8e, 0xba, 0x55, 0xdb, 0x72, 0x29, - 0xf9, 0xb5, 0x02, 0xaa, 0x13, 0x6c, 0xe0, 0x27, 0x66, 0x15, 0xaf, 0x56, 0xf6, 0xb8, 0xef, 0xf1, - 0xd5, 0x1b, 0xfe, 0xc5, 0xda, 0x49, 0x40, 0x3a, 0xd7, 0xc2, 0x9c, 0xe3, 0xbc, 0xfc, 0xc6, 0x7d, - 0xb9, 0x51, 0x4f, 0x5d, 0x76, 0x3a, 0x53, 0x48, 0xd6, 0x5e, 0xe8, 0x42, 0x92, 0x74, 0xe0, 0xd2, - 0x69, 0xf2, 0xcf, 0x25, 0x2d, 0x2c, 0x98, 0x95, 0x46, 0x23, 0xee, 0x25, 0x3e, 0x5d, 0xf6, 0x33, - 0x30, 0x5c, 0x85, 0x21, 0xea, 0x38, 0xb6, 0x23, 0xeb, 0x44, 0x40, 0x26, 0x45, 0x40, 0xfb, 0x10, - 0x27, 0xa8, 0xb0, 0x3e, 0x72, 0x00, 0x84, 0x4f, 0x6f, 0x7c, 0x2d, 0xc6, 0x37, 0xfe, 0x3d, 0x92, - 0xad, 0xe3, 0x5b, 0x60, 0x63, 0x66, 0xa1, 0x51, 0x4f, 0x25, 0x71, 0x48, 0x0b, 0x40, 0x39, 0xd2, - 0x89, 0xd6, 0x3d, 0xed, 0xcf, 0xa3, 0x30, 0x84, 0x17, 0x3c, 0xb9, 0x02, 0x83, 0x38, 0xf6, 0x73, - 0xef, 0x70, 0xf4, 0xb5, 0xc2, 0x23, 0x3f, 0xee, 0x93, 0x2c, 0x4c, 0xfa, 0x89, 0x98, 0xdf, 0xd7, - 0x8b, 0x9e, 0xf0, 0x52, 0xc9, 0x5c, 0x6a, 0xd4, 0x53, 0xaa, 0xbf, 0x75, 0x1b, 0x77, 0x24, 0xe6, - 0x89, 0xf0, 0x0e, 0xb9, 0x01, 0x71, 0xec, 0x53, 0x78, 0xdb, 0x22, 0xe6, 0x38, 0xac, 0xba, 0x0c, - 0xe6, 0xed, 0x86, 0x5c, 0x75, 0x03, 0x94, 0x1d, 0x07, 0xec, 0x6e, 0x7c, 0x5e, 0x3e, 0x32, 0xe1, - 0x71, 0x40, 0xbc, 0x8d, 0x39, 0x2e, 0xc1, 0xa4, 0x04, 0x93, 0xcd, 0x2b, 0xbd, 0x6c, 0x56, 0x4c, - 0xcf, 0x7f, 0x91, 0x5d, 0xc0, 0xc0, 0x62, 0x30, 0x9a, 0x77, 0xf8, 0x3d, 0x24, 0xe0, 0xd9, 0xcc, - 0x82, 0xab, 0x3a, 0xa1, 0x8d, 0x50, 0x4b, 0x32, 0x11, 0xde, 0x23, 0xbf, 0x53, 0xe0, 0x4a, 0x8b, - 0xa6, 0x7c, 0xe1, 0xa4, 0x79, 0x8a, 0xf3, 0xc5, 0xb2, 0xee, 0xba, 0xfc, 0xa9, 0x65, 0x44, 0x7a, - 0x9f, 0xed, 0x64, 0x40, 0xe6, 0xc4, 0x3f, 0xcd, 0xeb, 0x8c, 0x69, 0x5b, 0xaf, 0x50, 0x6e, 0xd3, - 0x55, 0x71, 0xc3, 0x5f, 0x76, 0x7a, 0xd1, 0xe7, 0x7a, 0x93, 0x90, 0x5d, 0x88, 0x57, 0xa9, 0x53, - 0x31, 0x5d, 0x17, 0x3b, 0x77, 0xfe, 0x6a, 0x3c, 0x27, 0x59, 0xb5, 0x13, 0xec, 0xf2, 0x78, 0x4b, - 0xe4, 0x72, 0xbc, 0x25, 0x38, 0xf9, 0x2f, 0x05, 0xe2, 0x12, 0x1f, 0xc9, 0xc1, 0xa8, 0x5b, 0x2b, - 0x1c, 0xd2, 0x62, 0xb3, 0xc2, 0x2c, 0x74, 0xd6, 0x90, 0xde, 0xe5, 0x64, 0xa2, 0x7b, 0x10, 0x3c, - 0xa1, 0xee, 0x41, 0x60, 0x78, 0xc6, 0xa9, 0x53, 0xe0, 0xcf, 0x31, 0xfe, 0x19, 0x67, 0x40, 0xe8, - 0x8c, 0x33, 0x20, 0xf9, 0x1e, 0x8c, 0x08, 0xb9, 0x2c, 0xe3, 0x8f, 0x4c, 0xcb, 0x90, 0x33, 0x9e, - 0xad, 0xe5, 0x8c, 0x67, 0xeb, 0xe6, 0xc9, 0x18, 0x38, 0xfd, 0x64, 0x24, 0x4d, 0x98, 0xee, 0x90, - 0x37, 0x4f, 0x51, 0xa5, 0x94, 0x9e, 0x77, 0xe5, 0xc7, 0x0a, 0x5c, 0x39, 0x5b, 0x8a, 0x9c, 0x4d, - 0xfd, 0x5b, 0xb2, 0x7a, 0x7f, 0x98, 0x0a, 0x09, 0x6c, 0xd1, 0xd6, 0xab, 0x8c, 0xfe, 0x6c, 0x08, - 0x2e, 0x9e, 0xc2, 0xcf, 0x9a, 0xec, 0xf9, 0x8a, 0xfe, 0x03, 0xb3, 0x52, 0xab, 0x04, 0x1d, 0xf6, - 0xbe, 0xa3, 0x17, 0x59, 0x91, 0x17, 0x79, 0xf1, 0xad, 0x5e, 0x56, 0xa4, 0xef, 0x73, 0x09, 0x3e, - 0x7a, 0x5b, 0xf0, 0xf3, 0xb3, 0x91, 0x12, 0x67, 0xe3, 0x42, 0xa5, 0x33, 0x55, 0xae, 0xdb, 0x06, - 0xf9, 0xbd, 0x02, 0x97, 0xbb, 0x1a, 0x87, 0x67, 0xd8, 0xb6, 0xcb, 0x98, 0x6b, 0xf1, 0xd5, 0xf5, - 0xa7, 0x35, 0x32, 0x73, 0xb2, 0x63, 0xdb, 0x65, 0x71, 0x51, 0x0a, 0x53, 0x5f, 0xa8, 0x9c, 0x46, - 0x9b, 0x3b, 0x7d, 0x9b, 0x5d, 0x97, 0xa7, 0x05, 0xe4, 0xbc, 0x12, 0x51, 0xeb, 0xed, 0xe0, 0xd9, - 0x54, 0x3f, 0x08, 0x27, 0xe1, 0x4b, 0xed, 0x91, 0xc5, 0x28, 0xf4, 0x97, 0x88, 0x7f, 0x18, 0x80, - 0x54, 0x0f, 0x19, 0xe4, 0xe3, 0x33, 0x24, 0xe3, 0xda, 0x59, 0xac, 0x39, 0xa7, 0x84, 0xfc, 0x3a, - 0xbe, 0xac, 0x96, 0x85, 0x18, 0x96, 0xe4, 0x7b, 0xa6, 0xeb, 0x91, 0xeb, 0x30, 0x8c, 0xad, 0xa8, - 0x5f, 0xb2, 0x21, 0x28, 0xd9, 0xbc, 0x39, 0xe6, 0xbb, 0x72, 0x73, 0xcc, 0x11, 0x6d, 0x0f, 0x08, - 0x7f, 0x76, 0x2c, 0x4b, 0xfd, 0x1b, 0xb9, 0x05, 0xe3, 0x45, 0x8e, 0x52, 0x43, 0xea, 0xb3, 0xf1, - 0x37, 0x83, 0xe6, 0x46, 0xb8, 0xdb, 0x1e, 0x93, 0x71, 0xed, 0x06, 0x4c, 0xa2, 0xf6, 0x3b, 0xb4, - 0xf9, 0xec, 0x7c, 0xc6, 0x06, 0x46, 0xbb, 0x05, 0xea, 0xae, 0xe7, 0x50, 0xbd, 0x62, 0x5a, 0xa5, - 0x56, 0x19, 0x2f, 0x42, 0xd4, 0xaa, 0x55, 0x50, 0xc4, 0x38, 0x0f, 0xa4, 0x55, 0xab, 0xc8, 0x81, - 0xb4, 0x6a, 0x15, 0xed, 0x4d, 0x20, 0xc8, 0xb7, 0x41, 0xcb, 0xd4, 0xa3, 0xfd, 0xaa, 0xff, 0x54, - 0x01, 0xe0, 0xef, 0x94, 0x9b, 0xd6, 0xbe, 0x7d, 0xe6, 0xb6, 0xeb, 0x06, 0xc4, 0x31, 0xa2, 0x46, - 0xfe, 0xd0, 0xc6, 0x8b, 0x4e, 0x59, 0x1a, 0xe2, 0xfd, 0x12, 0x87, 0xb7, 0xec, 0xd0, 0x6d, 0x07, - 0x01, 0xca, 0x58, 0xcb, 0x54, 0x77, 0x7d, 0xd6, 0x68, 0xc0, 0xca, 0xe1, 0x56, 0xd6, 0x00, 0xd5, - 0x1e, 0xc1, 0x34, 0xba, 0xba, 0x57, 0x35, 0x74, 0x2f, 0x18, 0x1b, 0xde, 0x90, 0x5f, 0xf8, 0xc3, - 0xd9, 0x70, 0xda, 0x1c, 0xd3, 0x47, 0x5b, 0x5c, 0x03, 0x35, 0xa3, 0x7b, 0xc5, 0x83, 0x4e, 0xda, - 0xdf, 0x83, 0xf1, 0x7d, 0xdd, 0x2c, 0xfb, 0x2f, 0x5f, 0x7e, 0x4e, 0xaa, 0x81, 0x15, 0x61, 0x06, - 0x9e, 0x56, 0x9c, 0xe5, 0xed, 0xd6, 0x3c, 0x1d, 0x93, 0xf1, 0xa6, 0xbf, 0xeb, 0xf8, 0x46, 0xf2, - 0x75, 0xf9, 0xdb, 0xa2, 0xbd, 0xb7, 0xbf, 0x61, 0x86, 0x3e, 0xfc, 0x8d, 0x43, 0x2c, 0x6b, 0x19, - 0xf7, 0x75, 0xe7, 0x88, 0x3a, 0xda, 0x47, 0x0a, 0xcc, 0x86, 0x4f, 0xc6, 0x7d, 0xea, 0xba, 0x7a, - 0x89, 0x92, 0x6f, 0xf4, 0xe7, 0xff, 0xdd, 0x48, 0xf0, 0x0c, 0x1d, 0xa5, 0x96, 0x21, 0x0a, 0xfa, - 0x04, 0xb2, 0x35, 0xf5, 0xf1, 0xf3, 0x45, 0xe5, 0x86, 0xeb, 0x6e, 0x24, 0xc7, 0xe8, 0x33, 0x23, - 0x30, 0x44, 0x8f, 0xa9, 0xe5, 0x2d, 0x27, 0x21, 0x2e, 0xfd, 0x06, 0x4b, 0xe2, 0x30, 0x22, 0x96, - 0x89, 0xc8, 0xf2, 0x55, 0x88, 0x4b, 0x3f, 0xd6, 0x91, 0x31, 0x18, 0xdd, 0xb6, 0x0d, 0xba, 0x63, - 0x3b, 0x5e, 0x22, 0xc2, 0x56, 0x77, 0xa9, 0x6e, 0x94, 0x19, 0xa9, 0xb2, 0xfc, 0x89, 0x02, 0xa3, - 0xfe, 0xc3, 0x3f, 0x01, 0x18, 0x7e, 0x7b, 0x2f, 0xbb, 0x97, 0xdd, 0x48, 0x44, 0x98, 0xc0, 0x9d, - 0xec, 0xf6, 0xc6, 0xe6, 0xf6, 0x9d, 0x84, 0xc2, 0x16, 0xb9, 0xbd, 0xed, 0x6d, 0xb6, 0x18, 0x20, - 0xe3, 0x10, 0xdb, 0xdd, 0x5b, 0x5f, 0xcf, 0x66, 0x37, 0xb2, 0x1b, 0x89, 0x28, 0x63, 0xba, 0xbd, - 0xb6, 0x79, 0x2f, 0xbb, 0x91, 0x18, 0x64, 0x74, 0x7b, 0xdb, 0x6f, 0x6d, 0x3f, 0x78, 0x77, 0x3b, - 0x31, 0xc4, 0xe9, 0x32, 0xf7, 0x37, 0x1f, 0x3e, 0xcc, 0x6e, 0x24, 0x86, 0x19, 0xdd, 0xbd, 0xec, - 0xda, 0x6e, 0x76, 0x23, 0x31, 0xc2, 0xb6, 0x76, 0x72, 0xd9, 0xec, 0xfd, 0x1d, 0xb6, 0x35, 0xca, - 0x96, 0xeb, 0x6b, 0xdb, 0xeb, 0xd9, 0x7b, 0x4c, 0x4a, 0x8c, 0x59, 0x98, 0xcb, 0x6e, 0x65, 0xd7, - 0xd9, 0x26, 0xac, 0xfe, 0x31, 0x0a, 0x63, 0x18, 0x50, 0xff, 0x69, 0xe9, 0x75, 0x88, 0xf3, 0xaf, - 0xca, 0xa7, 0x33, 0x29, 0xe4, 0xc9, 0xb9, 0xb6, 0x27, 0xbf, 0x2c, 0x0b, 0x9e, 0x16, 0x21, 0xb7, - 0x60, 0x4c, 0x62, 0x72, 0xc9, 0x44, 0xc0, 0xc5, 0xca, 0x78, 0xf2, 0x05, 0x5c, 0x77, 0x4b, 0x34, - 0x2d, 0xc2, 0xb4, 0xf2, 0xb3, 0xd3, 0xa7, 0x56, 0x89, 0xa9, 0xb7, 0xd6, 0xf0, 0xe9, 0xd4, 0x22, - 0xe4, 0xdb, 0x10, 0xe7, 0xb5, 0x94, 0x6b, 0xbd, 0x10, 0xf0, 0x87, 0x4a, 0xec, 0x29, 0x26, 0xa4, - 0x61, 0xf4, 0x0e, 0xf5, 0x38, 0xfb, 0x4c, 0xc0, 0x1e, 0x54, 0xf6, 0xa4, 0xe4, 0x8a, 0x16, 0x21, - 0x5b, 0x10, 0xf3, 0xe9, 0x5d, 0xc2, 0xed, 0xeb, 0x76, 0x27, 0x24, 0x93, 0x1d, 0xb6, 0xc5, 0xc1, - 0xd0, 0x22, 0xaf, 0x29, 0xab, 0xbf, 0x88, 0xc1, 0x30, 0x9f, 0xc5, 0xc9, 0x3b, 0x00, 0xfc, 0x2f, - 0xac, 0xbb, 0xb3, 0x1d, 0x7f, 0x68, 0x4d, 0xce, 0x75, 0x1e, 0xe0, 0xb5, 0xf9, 0x9f, 0xfc, 0xe9, - 0xef, 0xbf, 0x1c, 0x98, 0xd6, 0x26, 0x56, 0x8e, 0xaf, 0xad, 0x1c, 0xda, 0x05, 0xf1, 0x6f, 0x64, - 0x37, 0x95, 0x65, 0xf2, 0x2e, 0x00, 0xbf, 0x44, 0xc3, 0x72, 0x43, 0xbf, 0xe7, 0x25, 0x79, 0xd8, - 0xda, 0x2f, 0xdb, 0x76, 0xc1, 0xfc, 0x26, 0x65, 0x82, 0xbf, 0x0f, 0x63, 0x4d, 0xc1, 0xbb, 0xd4, - 0x23, 0xaa, 0xf4, 0x13, 0x5d, 0x58, 0x7a, 0xb7, 0xd8, 0x5f, 0x42, 0xe1, 0x73, 0xda, 0x94, 0x10, - 0xee, 0x52, 0x4f, 0x92, 0x6f, 0x41, 0x42, 0x7e, 0x36, 0x42, 0xf3, 0x2f, 0x76, 0x7e, 0x50, 0xe2, - 0x6a, 0x2e, 0x9d, 0xf6, 0xda, 0xa4, 0xa5, 0x50, 0xd9, 0xbc, 0x36, 0xe3, 0x7b, 0x22, 0xbd, 0x1c, - 0x51, 0xa6, 0xef, 0x3d, 0x88, 0x8b, 0x1f, 0xa3, 0x51, 0x55, 0x33, 0xd4, 0xe1, 0x5f, 0xa8, 0xbb, - 0x3a, 0x93, 0x44, 0xf9, 0x33, 0xda, 0xa4, 0x2f, 0xbf, 0xca, 0xf9, 0x98, 0xe8, 0x3b, 0xfd, 0x1f, - 0xc8, 0x19, 0x14, 0x37, 0xa1, 0xc5, 0x98, 0x38, 0x2c, 0x88, 0x4c, 0x50, 0xf1, 0xd9, 0x0e, 0xe9, - 0x4b, 0x28, 0x74, 0x41, 0x9b, 0x67, 0x42, 0x0b, 0x8c, 0x8a, 0x1a, 0x2b, 0xfc, 0x4d, 0x5f, 0xdc, - 0x0f, 0x4c, 0xc9, 0x76, 0xff, 0x07, 0xf9, 0x22, 0x0a, 0x9e, 0x4d, 0x26, 0x9a, 0xd6, 0xae, 0xfc, - 0x88, 0xb5, 0x1e, 0x1f, 0x0a, 0xa3, 0x9f, 0xe5, 0x8c, 0x0b, 0xa3, 0x93, 0x21, 0xa3, 0x6b, 0x48, - 0x23, 0x19, 0xfd, 0x9d, 0x67, 0xac, 0x03, 0x2a, 0x6a, 0x21, 0xcb, 0x6d, 0x1e, 0x90, 0xdb, 0x7d, - 0xd5, 0x07, 0x21, 0x87, 0xb4, 0xcb, 0x31, 0x9e, 0x53, 0xdd, 0x10, 0x89, 0x46, 0x88, 0x1c, 0x0f, - 0x1e, 0x88, 0xd7, 0x14, 0x72, 0x13, 0x86, 0xef, 0xe2, 0xbf, 0x53, 0x92, 0x2e, 0x9e, 0x26, 0xf9, - 0x39, 0xe5, 0x44, 0xeb, 0x07, 0xb4, 0x78, 0xd4, 0xbc, 0xfb, 0xdf, 0xff, 0xe2, 0x6f, 0x0b, 0x91, - 0x1f, 0x3f, 0x5e, 0x50, 0x3e, 0x7b, 0xbc, 0xa0, 0x7c, 0xfe, 0x78, 0x41, 0xf9, 0xeb, 0xe3, 0x05, - 0xe5, 0xa3, 0x27, 0x0b, 0x91, 0xcf, 0x9f, 0x2c, 0x44, 0xbe, 0x78, 0xb2, 0x10, 0xf9, 0xee, 0xff, - 0x49, 0xff, 0xe1, 0xa9, 0x3b, 0x15, 0xdd, 0xd0, 0xab, 0x8e, 0x7d, 0x48, 0x8b, 0x9e, 0x58, 0xad, - 0x88, 0x7f, 0xe9, 0xfc, 0x74, 0x60, 0x66, 0x0d, 0x81, 0x1d, 0xbe, 0x9d, 0xde, 0xb4, 0xd3, 0x6b, - 0x55, 0xb3, 0x30, 0x8c, 0xb6, 0xbc, 0xfe, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4c, 0x6f, 0x9b, - 0x69, 0xef, 0x2a, 0x00, 0x00, + // 2975 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x6f, 0x1b, 0xc7, + 0x15, 0xe7, 0x8a, 0xfa, 0xe2, 0xa3, 0x3e, 0xa8, 0xd1, 0x87, 0x57, 0xb4, 0x23, 0xca, 0x9b, 0xc4, + 0x95, 0x85, 0x84, 0x8a, 0x95, 0x06, 0xb5, 0xdd, 0x14, 0xae, 0x28, 0xd1, 0xb6, 0x64, 0x5b, 0x56, + 0x28, 0x2b, 0x69, 0x8a, 0xa2, 0xcc, 0x92, 0x3b, 0xa2, 0x56, 0x22, 0x77, 0x99, 0xdd, 0xa5, 0x5c, + 0xb5, 0x08, 0x50, 0x14, 0x45, 0x7b, 0xe8, 0x25, 0x40, 0x6f, 0x2d, 0x90, 0x1c, 0x7a, 0x4b, 0x0f, + 0xbd, 0x14, 0x45, 0xff, 0x84, 0x1c, 0x03, 0x14, 0x05, 0xd2, 0x0b, 0xd1, 0x38, 0xfd, 0x00, 0x78, + 0xeb, 0xbd, 0x87, 0x62, 0xde, 0xcc, 0x72, 0x67, 0xf9, 0x21, 0x8a, 0xb6, 0x95, 0x5c, 0x7a, 0xd3, + 0xfc, 0xe6, 0x7d, 0xef, 0x9b, 0x37, 0xef, 0x0d, 0x05, 0x33, 0xd5, 0xa3, 0xd2, 0x8a, 0x5e, 0x35, + 0x57, 0xdc, 0x5a, 0xa1, 0x62, 0x7a, 0xe9, 0xaa, 0x63, 0x7b, 0x36, 0x89, 0xea, 0x55, 0x33, 0x79, + 0xb1, 0x64, 0xdb, 0xa5, 0x32, 0x5d, 0x41, 0xa8, 0x50, 0xdb, 0x5f, 0xa1, 0x95, 0xaa, 0x77, 0xc2, + 0x29, 0x92, 0xa9, 0xd6, 0x4d, 0xcf, 0xac, 0x50, 0xd7, 0xd3, 0x2b, 0x55, 0x41, 0xa0, 0x1d, 0x5d, + 0x77, 0xd3, 0xa6, 0x8d, 0xb2, 0x8b, 0xb6, 0x43, 0x57, 0x8e, 0xaf, 0xad, 0x94, 0xa8, 0x45, 0x1d, + 0xdd, 0xa3, 0x86, 0xa0, 0x59, 0x92, 0x68, 0x2c, 0xea, 0x3d, 0xb6, 0x9d, 0x23, 0xd3, 0x2a, 0x75, + 0xa2, 0xbc, 0x24, 0xd4, 0x31, 0x4a, 0xdd, 0xb2, 0x6c, 0x4f, 0xf7, 0x4c, 0xdb, 0x72, 0xc5, 0xee, + 0xab, 0x25, 0xd3, 0x3b, 0xa8, 0x15, 0xd2, 0x45, 0xbb, 0xb2, 0x52, 0xb2, 0x4b, 0x76, 0x60, 0x15, + 0x5b, 0xe1, 0x02, 0xff, 0x12, 0xe4, 0x4d, 0x9f, 0x0f, 0xa8, 0x5e, 0xf6, 0x0e, 0x38, 0xaa, 0x7d, + 0x1c, 0x83, 0x99, 0x2d, 0xbb, 0xb0, 0x8b, 0x71, 0xc8, 0xd1, 0xf7, 0x6b, 0xd4, 0xf5, 0x36, 0x3d, + 0x5a, 0x21, 0xab, 0x30, 0x5a, 0x75, 0x4c, 0xdb, 0x31, 0xbd, 0x13, 0x55, 0x59, 0x54, 0x96, 0x94, + 0xcc, 0x5c, 0xa3, 0x9e, 0x22, 0x3e, 0xf6, 0x8a, 0x5d, 0x31, 0x3d, 0x0c, 0x4d, 0xae, 0x49, 0x47, + 0xde, 0x80, 0x98, 0xa5, 0x57, 0xa8, 0x5b, 0xd5, 0x8b, 0x54, 0x8d, 0x2e, 0x2a, 0x4b, 0xb1, 0xcc, + 0x85, 0x46, 0x3d, 0x35, 0xdd, 0x04, 0x25, 0xae, 0x80, 0x92, 0xbc, 0x0e, 0xb1, 0x62, 0xd9, 0xa4, + 0x96, 0x97, 0x37, 0x0d, 0x75, 0x14, 0xd9, 0x50, 0x17, 0x07, 0x37, 0x0d, 0x59, 0x97, 0x8f, 0x91, + 0x5d, 0x18, 0x2e, 0xeb, 0x05, 0x5a, 0x76, 0xd5, 0xc1, 0xc5, 0xe8, 0x52, 0x7c, 0xf5, 0xe5, 0xb4, + 0x5e, 0x35, 0xd3, 0x9d, 0x5c, 0x49, 0xdf, 0x47, 0xba, 0xac, 0xe5, 0x39, 0x27, 0x99, 0x99, 0x46, + 0x3d, 0x95, 0xe0, 0x8c, 0x92, 0x58, 0x21, 0x8a, 0x94, 0x20, 0x2e, 0xc5, 0x59, 0x1d, 0x42, 0xc9, + 0xcb, 0xdd, 0x25, 0xaf, 0x05, 0xc4, 0x5c, 0xfc, 0x7c, 0xa3, 0x9e, 0x9a, 0x95, 0x44, 0x48, 0x3a, + 0x64, 0xc9, 0xe4, 0x97, 0x0a, 0xcc, 0x38, 0xf4, 0xfd, 0x9a, 0xe9, 0x50, 0x23, 0x6f, 0xd9, 0x06, + 0xcd, 0x0b, 0x67, 0x86, 0x51, 0xe5, 0xb5, 0xee, 0x2a, 0x73, 0x82, 0x6b, 0xdb, 0x36, 0xa8, 0xec, + 0x98, 0xd6, 0xa8, 0xa7, 0x2e, 0x39, 0x6d, 0x9b, 0x81, 0x01, 0xaa, 0x92, 0x23, 0xed, 0xfb, 0xe4, + 0x21, 0x8c, 0x56, 0x6d, 0x23, 0xef, 0x56, 0x69, 0x51, 0x1d, 0x58, 0x54, 0x96, 0xe2, 0xab, 0x17, + 0xd3, 0x3c, 0x41, 0xd1, 0x06, 0x96, 0xc4, 0xe9, 0xe3, 0x6b, 0xe9, 0x1d, 0xdb, 0xd8, 0xad, 0xd2, + 0x22, 0x7e, 0xcf, 0xa9, 0x2a, 0x5f, 0x84, 0x64, 0x8f, 0x08, 0x90, 0xec, 0x40, 0xcc, 0x17, 0xe8, + 0xaa, 0x23, 0xe8, 0xce, 0xa9, 0x12, 0x79, 0x5a, 0xf1, 0x85, 0x1b, 0x4a, 0x2b, 0x81, 0x91, 0x75, + 0x18, 0x31, 0xad, 0x92, 0x43, 0x5d, 0x57, 0x8d, 0xa1, 0x3c, 0x82, 0x82, 0x36, 0x39, 0xb6, 0x6e, + 0x5b, 0xfb, 0x66, 0x29, 0x33, 0xcb, 0x0c, 0x13, 0x64, 0x92, 0x14, 0x9f, 0x93, 0xdc, 0x86, 0x51, + 0x97, 0x3a, 0xc7, 0x66, 0x91, 0xba, 0x2a, 0x48, 0x52, 0x76, 0x39, 0x28, 0xa4, 0xa0, 0x31, 0x3e, + 0x9d, 0x6c, 0x8c, 0x8f, 0xb1, 0x1c, 0x77, 0x8b, 0x07, 0xd4, 0xa8, 0x95, 0xa9, 0xa3, 0xc6, 0x83, + 0x1c, 0x6f, 0x82, 0x72, 0x8e, 0x37, 0xc1, 0xa4, 0x0e, 0x71, 0xe9, 0x6b, 0x91, 0x17, 0x21, 0x7a, + 0x44, 0xf9, 0xc1, 0x8a, 0x65, 0xa6, 0x1a, 0xf5, 0xd4, 0xf8, 0x11, 0x95, 0xcf, 0x14, 0xdb, 0x25, + 0x57, 0x61, 0xe8, 0x58, 0x2f, 0xd7, 0x28, 0x7e, 0x97, 0x58, 0x66, 0xba, 0x51, 0x4f, 0x4d, 0x22, + 0x20, 0x11, 0x72, 0x8a, 0x9b, 0x03, 0xd7, 0x95, 0xe4, 0x3e, 0x24, 0x5a, 0xf3, 0xf1, 0x5c, 0xf4, + 0x54, 0xe0, 0x42, 0x97, 0x24, 0x3c, 0x0f, 0x75, 0xda, 0x7f, 0xa2, 0x30, 0x1e, 0xfa, 0xd4, 0xe4, + 0x26, 0x0c, 0x7a, 0x27, 0x55, 0x8a, 0x6a, 0x26, 0x56, 0x13, 0x72, 0x32, 0x3c, 0x3a, 0xa9, 0x52, + 0x3c, 0xe3, 0x13, 0x8c, 0x22, 0x94, 0xa0, 0xc8, 0xc3, 0x94, 0x57, 0x6d, 0xc7, 0x73, 0xd5, 0x81, + 0xc5, 0xe8, 0xd2, 0x38, 0x57, 0x8e, 0x80, 0xac, 0x1c, 0x01, 0xf2, 0x5e, 0xb8, 0x18, 0x44, 0x31, + 0x69, 0x5e, 0x6c, 0x4f, 0xbd, 0xa7, 0xaf, 0x02, 0x37, 0x20, 0xee, 0x95, 0xdd, 0x3c, 0xb5, 0xf4, + 0x42, 0x99, 0x1a, 0xea, 0xe0, 0xa2, 0xb2, 0x34, 0x9a, 0x51, 0x1b, 0xf5, 0xd4, 0x8c, 0xc7, 0x22, + 0x8a, 0xa8, 0xc4, 0x0b, 0x01, 0x8a, 0x35, 0x93, 0x3a, 0x5e, 0x9e, 0x55, 0x51, 0x75, 0x48, 0xaa, + 0x99, 0xd4, 0xf1, 0xb6, 0xf5, 0x0a, 0x0d, 0xd5, 0x4c, 0x81, 0x91, 0x5b, 0x30, 0x5e, 0x73, 0x69, + 0xbe, 0x58, 0xae, 0xb9, 0x1e, 0x75, 0x36, 0x77, 0xd4, 0x61, 0xd4, 0x98, 0x6c, 0xd4, 0x53, 0x73, + 0x35, 0x97, 0xae, 0xfb, 0xb8, 0xc4, 0x3c, 0x26, 0xe3, 0x5f, 0x55, 0x8a, 0x69, 0x1e, 0x8c, 0x87, + 0xce, 0x25, 0xb9, 0xde, 0xe1, 0x93, 0x0b, 0x0a, 0xfc, 0xe4, 0xa4, 0xfd, 0x93, 0xf7, 0xfd, 0xc1, + 0xb5, 0xbf, 0x29, 0x90, 0x68, 0xad, 0xb9, 0x8c, 0xff, 0xfd, 0x1a, 0xad, 0x51, 0xe1, 0x20, 0xf2, + 0x23, 0x20, 0xf3, 0x23, 0x40, 0xbe, 0x09, 0x70, 0x68, 0x17, 0xf2, 0x2e, 0xc5, 0x8b, 0x6c, 0x20, + 0xf8, 0x28, 0x87, 0x76, 0x61, 0x97, 0xb6, 0x5c, 0x64, 0x3e, 0x46, 0x0c, 0x98, 0x62, 0x5c, 0x0e, + 0xd7, 0x97, 0x67, 0x04, 0x7e, 0xb2, 0xcd, 0x77, 0xbd, 0x06, 0x32, 0x2f, 0x34, 0xea, 0xa9, 0xf9, + 0x43, 0xbb, 0x20, 0x61, 0xb2, 0x47, 0x93, 0x2d, 0x5b, 0xda, 0xef, 0x14, 0x98, 0xda, 0xb2, 0x0b, + 0x3b, 0x0e, 0x65, 0x04, 0x5f, 0x99, 0x73, 0xaf, 0xc2, 0x08, 0xe3, 0x32, 0x0d, 0xee, 0x52, 0x8c, + 0xdf, 0xbf, 0x87, 0x76, 0x61, 0xd3, 0x08, 0xdd, 0xbf, 0x1c, 0xd1, 0xfe, 0xcb, 0xbf, 0xc0, 0xba, + 0x6e, 0x15, 0x69, 0xd9, 0x37, 0x72, 0x19, 0x86, 0xb9, 0x0c, 0xd9, 0x4a, 0x64, 0x90, 0xad, 0x44, + 0xe0, 0x29, 0xad, 0x6c, 0x86, 0x21, 0xda, 0x33, 0x0c, 0x92, 0x43, 0x83, 0xbd, 0x1d, 0x22, 0xaf, + 0xc0, 0xb0, 0x43, 0x75, 0xd7, 0xb6, 0xc4, 0x19, 0x45, 0x6a, 0x8e, 0xc8, 0xd4, 0x1c, 0xd1, 0xfe, + 0xa9, 0xc0, 0xf4, 0x16, 0x1a, 0x15, 0x8e, 0x40, 0xd8, 0x2b, 0xa5, 0x5f, 0xaf, 0x06, 0x7a, 0x7a, + 0x75, 0x0b, 0x86, 0xf7, 0xcd, 0xb2, 0x47, 0x1d, 0x8c, 0x40, 0x7c, 0x75, 0xaa, 0x99, 0x78, 0xd4, + 0xbb, 0x8d, 0x1b, 0xdc, 0x72, 0x4e, 0x24, 0x5b, 0xce, 0x11, 0xc9, 0xcf, 0xc1, 0x33, 0xf8, 0x79, + 0x0f, 0xc6, 0x64, 0xd9, 0xe4, 0xdb, 0x30, 0xec, 0x7a, 0xba, 0x47, 0x5d, 0x55, 0x59, 0x8c, 0x2e, + 0x4d, 0xac, 0x8e, 0x37, 0xd5, 0x33, 0x94, 0x0b, 0xe3, 0x04, 0xb2, 0x30, 0x8e, 0x68, 0x5f, 0x4c, + 0x42, 0x74, 0xcb, 0x2e, 0x90, 0x45, 0x18, 0x68, 0x06, 0x27, 0xd1, 0xa8, 0xa7, 0xc6, 0x4c, 0x39, + 0x2c, 0x03, 0xa6, 0x11, 0xee, 0x33, 0xc7, 0xcf, 0xd8, 0x67, 0x9e, 0x7b, 0x46, 0x85, 0x9a, 0xe6, + 0x91, 0x33, 0x37, 0xcd, 0x99, 0x66, 0xff, 0xcb, 0x7b, 0xa2, 0x19, 0x3f, 0x66, 0x7d, 0xb4, 0xbb, + 0x6f, 0x87, 0x6f, 0x38, 0x08, 0x17, 0x9d, 0xa7, 0xbf, 0xd7, 0x8e, 0xbb, 0x34, 0xb7, 0x71, 0x54, + 0xb0, 0xd8, 0x54, 0xf0, 0xbc, 0x7b, 0xd9, 0xab, 0x30, 0x64, 0x3f, 0xb6, 0xa8, 0x23, 0x86, 0x08, + 0x8c, 0x3a, 0x02, 0x72, 0xd4, 0x11, 0x20, 0x14, 0x2e, 0x62, 0xf8, 0xf3, 0xb8, 0x74, 0x0f, 0xcc, + 0x6a, 0xbe, 0xe6, 0x52, 0x27, 0x5f, 0x72, 0xec, 0x5a, 0xd5, 0x55, 0x27, 0xf1, 0x6c, 0x5f, 0x69, + 0xd4, 0x53, 0x1a, 0x92, 0x3d, 0xf4, 0xa9, 0xf6, 0x5c, 0xea, 0xdc, 0x41, 0x1a, 0x49, 0xa6, 0xda, + 0x8d, 0x86, 0xfc, 0x5c, 0x81, 0x2b, 0x45, 0xbb, 0x52, 0x65, 0xdd, 0x02, 0x35, 0xf2, 0xa7, 0xa9, + 0x9c, 0x5e, 0x54, 0x96, 0xc6, 0x32, 0xaf, 0x35, 0xea, 0xa9, 0x57, 0x02, 0x8e, 0xb7, 0x7a, 0x2b, + 0xd7, 0x7a, 0x53, 0x87, 0x86, 0xb9, 0xc1, 0x33, 0x0e, 0x73, 0xf2, 0x60, 0x30, 0xf4, 0xdc, 0x07, + 0x83, 0xb1, 0xe7, 0x31, 0x18, 0xfc, 0x46, 0x81, 0x45, 0xd1, 0x62, 0x9b, 0x56, 0x29, 0xef, 0x50, + 0xd7, 0xae, 0x39, 0x45, 0x9a, 0x17, 0xa9, 0x51, 0xa1, 0x96, 0xe7, 0xaa, 0xb3, 0x68, 0xfb, 0x52, + 0x27, 0x4d, 0x39, 0xc1, 0x90, 0x93, 0xe8, 0x33, 0x57, 0x3e, 0xad, 0xa7, 0x22, 0x8d, 0x7a, 0x6a, + 0x21, 0x90, 0xdc, 0x89, 0x2e, 0xd7, 0x63, 0x9f, 0xdc, 0x83, 0x91, 0xa2, 0x43, 0xd9, 0x34, 0x8f, + 0x6d, 0x56, 0x7c, 0x35, 0x99, 0xe6, 0xe3, 0x7c, 0xda, 0x9f, 0xd3, 0xd3, 0x8f, 0xfc, 0xd7, 0x03, + 0x3e, 0xbd, 0x08, 0x72, 0x79, 0x7a, 0x11, 0x90, 0x3c, 0x02, 0x4d, 0x3c, 0x97, 0x11, 0x28, 0xf1, + 0x0c, 0x23, 0xd0, 0x0f, 0x20, 0x7e, 0x74, 0xdd, 0xcd, 0xfb, 0x06, 0x4d, 0xa1, 0xa8, 0xcb, 0x72, + 0x80, 0x83, 0x67, 0x0d, 0x16, 0x66, 0x61, 0x25, 0xef, 0x6c, 0x8f, 0xae, 0xbb, 0x9b, 0x6d, 0x26, + 0x42, 0x80, 0xb2, 0xa2, 0xc4, 0xa4, 0x0b, 0x6d, 0x2a, 0xe9, 0x9e, 0x28, 0xc2, 0xee, 0xa6, 0x5c, + 0xb1, 0x6e, 0x91, 0x2b, 0xd0, 0xf0, 0xe0, 0x36, 0x73, 0xd6, 0xc1, 0x8d, 0x6c, 0xc2, 0x14, 0x3f, + 0xb5, 0x9e, 0x57, 0xce, 0xbb, 0xb4, 0x68, 0x5b, 0x86, 0xab, 0xce, 0x2d, 0x2a, 0x4b, 0x51, 0xde, + 0x83, 0xe1, 0xe6, 0x23, 0xaf, 0xbc, 0xcb, 0xb7, 0xe4, 0x1e, 0xac, 0x65, 0xeb, 0xff, 0x33, 0xe0, + 0x53, 0xcf, 0x03, 0xff, 0x52, 0x60, 0x6e, 0x8b, 0x75, 0xb4, 0xa2, 0x3a, 0x99, 0x3f, 0xa6, 0x7e, + 0x6f, 0x24, 0x35, 0x64, 0xca, 0x19, 0x1a, 0xb2, 0x73, 0xbf, 0xce, 0xdf, 0x84, 0x31, 0x8b, 0x3e, + 0xce, 0xb7, 0x94, 0x5b, 0xbc, 0x39, 0x2d, 0xfa, 0x78, 0xa7, 0xbd, 0xe2, 0xc6, 0x25, 0x58, 0xfb, + 0xfd, 0x00, 0x5c, 0x68, 0x73, 0xd4, 0xad, 0xda, 0x96, 0x4b, 0xc9, 0x6f, 0x15, 0x50, 0x9d, 0x60, + 0x03, 0x3f, 0x31, 0xab, 0x79, 0xb5, 0xb2, 0xc7, 0x7d, 0x8f, 0xaf, 0xde, 0xf0, 0xaf, 0xd6, 0x4e, + 0x02, 0xd2, 0xb9, 0x16, 0xe6, 0x1c, 0xe7, 0xe5, 0x77, 0xee, 0xcb, 0x8d, 0x7a, 0xea, 0xb2, 0xd3, + 0x99, 0x42, 0xb2, 0xf6, 0x42, 0x17, 0x92, 0xa4, 0x03, 0x97, 0x4e, 0x93, 0x7f, 0x2e, 0x69, 0x61, + 0xc1, 0xac, 0x34, 0x1c, 0x71, 0x2f, 0xf1, 0xf1, 0xb2, 0x9f, 0x91, 0xe1, 0x2a, 0x0c, 0x51, 0xc7, + 0xb1, 0x1d, 0x59, 0x27, 0x02, 0x32, 0x29, 0x02, 0xda, 0x07, 0x38, 0x43, 0x85, 0xf5, 0x91, 0x03, + 0x20, 0x7c, 0x7e, 0xe3, 0x6b, 0x31, 0xc0, 0xf1, 0xef, 0x91, 0x6c, 0x1d, 0xe0, 0x02, 0x1b, 0x33, + 0x0b, 0x8d, 0x7a, 0x2a, 0x89, 0x63, 0x5a, 0x00, 0xca, 0x91, 0x4e, 0xb4, 0xee, 0x69, 0x7f, 0x1d, + 0x85, 0x21, 0xbc, 0xe2, 0xc9, 0x15, 0x18, 0xc4, 0xc1, 0x9f, 0x7b, 0x87, 0xc3, 0xaf, 0x15, 0x1e, + 0xfa, 0x71, 0x9f, 0x64, 0x61, 0xd2, 0x4f, 0xc4, 0xfc, 0xbe, 0x5e, 0xf4, 0x84, 0x97, 0x4a, 0xe6, + 0x52, 0xa3, 0x9e, 0x52, 0xfd, 0xad, 0xdb, 0xb8, 0x23, 0x31, 0x4f, 0x84, 0x77, 0xc8, 0x0d, 0x88, + 0x63, 0xa7, 0xc2, 0x1b, 0x17, 0x31, 0xc9, 0x61, 0xd5, 0x65, 0x30, 0x6f, 0x38, 0xe4, 0xaa, 0x1b, + 0xa0, 0xec, 0x38, 0x60, 0x7f, 0xe3, 0xf3, 0xf2, 0xa1, 0x09, 0x8f, 0x03, 0xe2, 0x6d, 0xcc, 0x71, + 0x09, 0x26, 0x25, 0x98, 0x6c, 0x5e, 0xea, 0x65, 0xb3, 0x62, 0x7a, 0xfe, 0x9b, 0xec, 0x02, 0x06, + 0x16, 0x83, 0xd1, 0xbc, 0xc5, 0xef, 0x23, 0x01, 0xcf, 0x66, 0x16, 0x5c, 0xd5, 0x09, 0x6d, 0x84, + 0x9a, 0x92, 0x89, 0xf0, 0x1e, 0xf9, 0x83, 0x02, 0x57, 0x5a, 0x34, 0xe5, 0x0b, 0x27, 0xcd, 0x53, + 0x9c, 0x2f, 0x96, 0x75, 0xd7, 0xe5, 0x8f, 0x2d, 0x23, 0xd2, 0x0b, 0x6d, 0x27, 0x03, 0x32, 0x27, + 0xfe, 0x69, 0x5e, 0x67, 0x4c, 0xdb, 0x7a, 0x85, 0x72, 0x9b, 0xae, 0x8a, 0xc6, 0xe2, 0xb2, 0xd3, + 0x8b, 0x3e, 0xd7, 0x9b, 0x84, 0xec, 0x42, 0xbc, 0x4a, 0x9d, 0x8a, 0xe9, 0xba, 0xd8, 0xbb, 0xf3, + 0x77, 0xe3, 0x39, 0xc9, 0xaa, 0x9d, 0x60, 0x97, 0xc7, 0x5b, 0x22, 0x97, 0xe3, 0x2d, 0xc1, 0xc9, + 0x7f, 0x2b, 0x10, 0x97, 0xf8, 0x48, 0x0e, 0x46, 0xdd, 0x5a, 0xe1, 0x90, 0x16, 0x9b, 0x15, 0x66, + 0xa1, 0xb3, 0x86, 0xf4, 0x2e, 0x27, 0x13, 0xdd, 0x83, 0xe0, 0x09, 0x75, 0x0f, 0x02, 0xc3, 0x33, + 0x4e, 0x9d, 0x02, 0x7f, 0x90, 0xf1, 0xcf, 0x38, 0x03, 0x42, 0x67, 0x9c, 0x01, 0xc9, 0x77, 0x61, + 0x44, 0xc8, 0x65, 0x19, 0x7f, 0x64, 0x5a, 0x86, 0x9c, 0xf1, 0x6c, 0x2d, 0x67, 0x3c, 0x5b, 0x37, + 0x4f, 0xc6, 0xc0, 0xe9, 0x27, 0x23, 0x69, 0xc2, 0x74, 0x87, 0xbc, 0x79, 0x8a, 0x2a, 0xa5, 0xf4, + 0xbc, 0x2b, 0x3f, 0x52, 0xe0, 0xca, 0xd9, 0x52, 0xe4, 0x6c, 0xea, 0xef, 0xc9, 0xea, 0xfd, 0x71, + 0x2a, 0x24, 0xb0, 0x45, 0x5b, 0xaf, 0x32, 0xfa, 0x8b, 0x21, 0xb8, 0x78, 0x0a, 0x3f, 0x6b, 0xb3, + 0xe7, 0x2b, 0xfa, 0x8f, 0xcc, 0x4a, 0xad, 0x12, 0xf4, 0xd8, 0xfb, 0x8e, 0x5e, 0x64, 0x45, 0x5e, + 0xe4, 0xc5, 0x77, 0x7a, 0x59, 0x91, 0x7e, 0xc0, 0x25, 0xf8, 0xe8, 0x6d, 0xc1, 0xcf, 0xcf, 0x46, + 0x4a, 0x9c, 0x8d, 0x0b, 0x95, 0xce, 0x54, 0xb9, 0x6e, 0x1b, 0xe4, 0x8f, 0x0a, 0x5c, 0xee, 0x6a, + 0x1c, 0x9e, 0x61, 0xdb, 0x2e, 0x63, 0xae, 0xc5, 0x57, 0xd7, 0x9f, 0xd6, 0xc8, 0xcc, 0xc9, 0x8e, + 0x6d, 0x97, 0xc5, 0x45, 0x29, 0x4c, 0x7d, 0xa1, 0x72, 0x1a, 0x6d, 0xee, 0xf4, 0x6d, 0x76, 0x5d, + 0x9e, 0x16, 0x90, 0xf3, 0x4a, 0x44, 0xad, 0xb7, 0x83, 0x67, 0x53, 0xfd, 0x30, 0x9c, 0x84, 0x2f, + 0xb5, 0x47, 0x16, 0xa3, 0xd0, 0x5f, 0x22, 0xfe, 0x69, 0x00, 0x52, 0x3d, 0x64, 0x90, 0x8f, 0xce, + 0x90, 0x8c, 0x6b, 0x67, 0xb1, 0xe6, 0x9c, 0x12, 0xf2, 0xeb, 0xf8, 0xb2, 0x5a, 0x16, 0x62, 0x58, + 0x92, 0xef, 0x9b, 0xae, 0x47, 0xae, 0xc3, 0x30, 0xb6, 0xa2, 0x7e, 0xc9, 0x86, 0xa0, 0x64, 0xf3, + 0xe6, 0x98, 0xef, 0xca, 0xcd, 0x31, 0x47, 0xb4, 0x3d, 0x20, 0xfc, 0xe1, 0xb1, 0x2c, 0xf5, 0x6f, + 0xe4, 0x16, 0x8c, 0x17, 0x39, 0x4a, 0x0d, 0xa9, 0xcf, 0xc6, 0x5f, 0x0d, 0x9a, 0x1b, 0xe1, 0x6e, + 0x7b, 0x4c, 0xc6, 0xb5, 0x1b, 0x30, 0x89, 0xda, 0xef, 0xd0, 0xe6, 0xc3, 0xf3, 0x19, 0x1b, 0x18, + 0xed, 0x16, 0xa8, 0xbb, 0x9e, 0x43, 0xf5, 0x8a, 0x69, 0x95, 0x5a, 0x65, 0xbc, 0x08, 0x51, 0xab, + 0x56, 0x41, 0x11, 0xe3, 0x3c, 0x90, 0x56, 0xad, 0x22, 0x07, 0xd2, 0xaa, 0x55, 0xb4, 0x37, 0x81, + 0x20, 0xdf, 0x06, 0x2d, 0x53, 0x8f, 0xf6, 0xab, 0xfe, 0x13, 0x05, 0x80, 0xbf, 0x54, 0x6e, 0x5a, + 0xfb, 0xf6, 0x99, 0xdb, 0xae, 0x1b, 0x10, 0xc7, 0x88, 0x1a, 0xf9, 0x43, 0x1b, 0x2f, 0x3a, 0x65, + 0x69, 0x88, 0xf7, 0x4b, 0x1c, 0xde, 0xb2, 0x43, 0xb7, 0x1d, 0x04, 0x28, 0x63, 0x2d, 0x53, 0xdd, + 0xf5, 0x59, 0xa3, 0x01, 0x2b, 0x87, 0x5b, 0x59, 0x03, 0x54, 0x7b, 0x0c, 0xd3, 0xe8, 0xea, 0x5e, + 0xd5, 0xd0, 0xbd, 0x60, 0x6c, 0x78, 0x43, 0x7e, 0xe3, 0x0f, 0x67, 0xc3, 0x69, 0x73, 0x4c, 0x1f, + 0x6d, 0x71, 0x0d, 0xd4, 0x8c, 0xee, 0x15, 0x0f, 0x3a, 0x69, 0x7f, 0x17, 0xc6, 0xf7, 0x75, 0xb3, + 0xec, 0xbf, 0x7d, 0xf9, 0x39, 0xa9, 0x06, 0x56, 0x84, 0x19, 0x78, 0x5a, 0x71, 0x96, 0xb7, 0x5a, + 0xf3, 0x74, 0x4c, 0xc6, 0x9b, 0xfe, 0xae, 0xe3, 0x1b, 0xc9, 0xd7, 0xe5, 0x6f, 0x8b, 0xf6, 0xde, + 0xfe, 0x86, 0x19, 0xfa, 0xf0, 0x37, 0x0e, 0xb1, 0xac, 0x65, 0x3c, 0xd0, 0x9d, 0x23, 0xea, 0x68, + 0x1f, 0x2a, 0x30, 0x1b, 0x3e, 0x19, 0x0f, 0xa8, 0xeb, 0xea, 0x25, 0x4a, 0xbe, 0xd5, 0x9f, 0xff, + 0x77, 0x23, 0xc1, 0x43, 0x74, 0x94, 0x5a, 0x86, 0x28, 0xe8, 0x13, 0xc8, 0xd6, 0xd4, 0xc7, 0xcf, + 0x17, 0x95, 0x1b, 0xae, 0xbb, 0x91, 0x1c, 0xa3, 0xcf, 0x8c, 0xc0, 0x10, 0x3d, 0xa6, 0x96, 0xb7, + 0x9c, 0x84, 0xb8, 0xf4, 0x2b, 0x2c, 0x89, 0xc3, 0x88, 0x58, 0x26, 0x22, 0xcb, 0x57, 0x21, 0x2e, + 0xfd, 0x5c, 0x47, 0xc6, 0x60, 0x74, 0xdb, 0x36, 0xe8, 0x8e, 0xed, 0x78, 0x89, 0x08, 0x5b, 0xdd, + 0xa5, 0xba, 0x51, 0x66, 0xa4, 0xca, 0xf2, 0xc7, 0x0a, 0x8c, 0xfa, 0x4f, 0xff, 0x04, 0x60, 0xf8, + 0xad, 0xbd, 0xec, 0x5e, 0x76, 0x23, 0x11, 0x61, 0x02, 0x77, 0xb2, 0xdb, 0x1b, 0x9b, 0xdb, 0x77, + 0x12, 0x0a, 0x5b, 0xe4, 0xf6, 0xb6, 0xb7, 0xd9, 0x62, 0x80, 0x8c, 0x43, 0x6c, 0x77, 0x6f, 0x7d, + 0x3d, 0x9b, 0xdd, 0xc8, 0x6e, 0x24, 0xa2, 0x8c, 0xe9, 0xf6, 0xda, 0xe6, 0xfd, 0xec, 0x46, 0x62, + 0x90, 0xd1, 0xed, 0x6d, 0xdf, 0xdb, 0x7e, 0xf8, 0xce, 0x76, 0x62, 0x88, 0xd3, 0x65, 0x1e, 0x6c, + 0x3e, 0x7a, 0x94, 0xdd, 0x48, 0x0c, 0x33, 0xba, 0xfb, 0xd9, 0xb5, 0xdd, 0xec, 0x46, 0x62, 0x84, + 0x6d, 0xed, 0xe4, 0xb2, 0xd9, 0x07, 0x3b, 0x6c, 0x6b, 0x94, 0x2d, 0xd7, 0xd7, 0xb6, 0xd7, 0xb3, + 0xf7, 0x99, 0x94, 0x18, 0xb3, 0x30, 0x97, 0xdd, 0xca, 0xae, 0xb3, 0x4d, 0x58, 0xfd, 0x73, 0x14, + 0xc6, 0x30, 0xa0, 0xfe, 0xd3, 0xd2, 0xeb, 0x10, 0xe7, 0x5f, 0x95, 0x4f, 0x67, 0x52, 0xc8, 0x93, + 0x73, 0x6d, 0x8f, 0x7e, 0x59, 0x16, 0x3c, 0x2d, 0x42, 0x6e, 0xc1, 0x98, 0xc4, 0xe4, 0x92, 0x89, + 0x80, 0x8b, 0x95, 0xf1, 0xe4, 0x0b, 0xb8, 0xee, 0x96, 0x68, 0x5a, 0x84, 0x69, 0xe5, 0x67, 0xa7, + 0x4f, 0xad, 0x12, 0x53, 0x6f, 0xad, 0xe1, 0xd3, 0xa9, 0x45, 0xc8, 0x77, 0x21, 0xce, 0x6b, 0x29, + 0xd7, 0x7a, 0x21, 0xe0, 0x0f, 0x95, 0xd8, 0x53, 0x4c, 0x48, 0xc3, 0xe8, 0x1d, 0xea, 0x71, 0xf6, + 0x99, 0x80, 0x3d, 0xa8, 0xec, 0x49, 0xc9, 0x15, 0x2d, 0x42, 0xb6, 0x20, 0xe6, 0xd3, 0xbb, 0x84, + 0xdb, 0xd7, 0xed, 0x4e, 0x48, 0x26, 0x3b, 0x6c, 0x8b, 0x83, 0xa1, 0x45, 0x5e, 0x53, 0x56, 0x7f, + 0x15, 0x83, 0x61, 0x3e, 0x8b, 0x93, 0xb7, 0x01, 0xf8, 0x5f, 0x58, 0x77, 0x67, 0x3b, 0xfe, 0xd4, + 0x9a, 0x9c, 0xeb, 0x3c, 0xc0, 0x6b, 0xf3, 0x3f, 0xfb, 0xcb, 0x3f, 0x7e, 0x3d, 0x30, 0xad, 0x4d, + 0xac, 0x1c, 0x5f, 0x5b, 0x39, 0xb4, 0x0b, 0xe2, 0x1f, 0xc9, 0x6e, 0x2a, 0xcb, 0xe4, 0x1d, 0x00, + 0x7e, 0x89, 0x86, 0xe5, 0x86, 0x7e, 0xd1, 0x4b, 0xf2, 0xb0, 0xb5, 0x5f, 0xb6, 0xed, 0x82, 0xf9, + 0x4d, 0xca, 0x04, 0xff, 0x10, 0xc6, 0x9a, 0x82, 0x77, 0xa9, 0x47, 0x54, 0xe9, 0x47, 0xba, 0xb0, + 0xf4, 0x6e, 0xb1, 0xbf, 0x84, 0xc2, 0xe7, 0xb4, 0x29, 0x21, 0xdc, 0xa5, 0x9e, 0x24, 0xdf, 0x82, + 0x84, 0xfc, 0x6c, 0x84, 0xe6, 0x5f, 0xec, 0xfc, 0xa0, 0xc4, 0xd5, 0x5c, 0x3a, 0xed, 0xb5, 0x49, + 0x4b, 0xa1, 0xb2, 0x79, 0x6d, 0xc6, 0xf7, 0x44, 0x7a, 0x39, 0xa2, 0x4c, 0xdf, 0xbb, 0x10, 0x17, + 0x3f, 0x47, 0xa3, 0xaa, 0x66, 0xa8, 0xc3, 0xbf, 0x51, 0x77, 0x75, 0x26, 0x89, 0xf2, 0x67, 0xb4, + 0x49, 0x5f, 0x7e, 0x95, 0xf3, 0x31, 0xd1, 0x77, 0xfa, 0x3f, 0x90, 0x33, 0x28, 0x6e, 0x42, 0x8b, + 0x31, 0x71, 0x58, 0x10, 0x99, 0xa0, 0xe2, 0xb3, 0x1d, 0xd2, 0x97, 0x50, 0xe8, 0x82, 0x36, 0xcf, + 0x84, 0x16, 0x18, 0x15, 0x35, 0x56, 0xf8, 0x9b, 0xbe, 0xb8, 0x1f, 0x98, 0x92, 0xed, 0xfe, 0x0f, + 0xf2, 0x45, 0x14, 0x3c, 0x9b, 0x4c, 0x34, 0xad, 0x5d, 0xf9, 0x09, 0x6b, 0x3d, 0x3e, 0x10, 0x46, + 0x3f, 0xcb, 0x19, 0x17, 0x46, 0x27, 0x43, 0x46, 0xd7, 0x90, 0x46, 0x32, 0xfa, 0x7b, 0xcf, 0x58, + 0x07, 0x54, 0xd4, 0x42, 0x96, 0xdb, 0x3c, 0x20, 0xb7, 0xfb, 0xaa, 0x0f, 0x42, 0x0e, 0x69, 0x97, + 0x63, 0x3c, 0xa7, 0xba, 0x21, 0x12, 0x8d, 0x10, 0x39, 0x1e, 0x3c, 0x10, 0xaf, 0x29, 0xe4, 0x26, + 0x0c, 0xdf, 0xc5, 0x7f, 0xa8, 0x24, 0x5d, 0x3c, 0x4d, 0xf2, 0x73, 0xca, 0x89, 0xd6, 0x0f, 0x68, + 0xf1, 0xa8, 0x79, 0xf7, 0xbf, 0xf7, 0xf9, 0x17, 0x0b, 0x91, 0x9f, 0x3e, 0x59, 0x50, 0x3e, 0x7d, + 0xb2, 0xa0, 0x7c, 0xf6, 0x64, 0x41, 0xf9, 0xfb, 0x93, 0x05, 0xe5, 0xc3, 0x2f, 0x17, 0x22, 0x9f, + 0x7d, 0xb9, 0x10, 0xf9, 0xfc, 0xcb, 0x85, 0xc8, 0xf7, 0xbf, 0x21, 0xfd, 0x8f, 0xa7, 0xee, 0x54, + 0x74, 0x43, 0xaf, 0x3a, 0xf6, 0x21, 0x2d, 0x7a, 0x62, 0xb5, 0x22, 0xfe, 0xa9, 0xf3, 0x93, 0x81, + 0x99, 0x35, 0x04, 0x76, 0xf8, 0x76, 0x7a, 0xd3, 0x4e, 0xaf, 0x55, 0xcd, 0xc2, 0x30, 0xda, 0xf2, + 0xfa, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x2e, 0x6d, 0xc0, 0x75, 0xf1, 0x2a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3903,14 +3899,18 @@ func (m *Job) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x3a } - n10, err10 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err10 != nil { - return 0, err10 + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintSubmit(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 } - i -= n10 - i = encodeVarintSubmit(dAtA, i, uint64(n10)) - i-- - dAtA[i] = 0x32 if m.PodSpec != nil { { size, err := m.PodSpec.MarshalToSizedBuffer(dAtA[:i]) @@ -5152,8 +5152,10 @@ func (m *Job) Size() (n int) { l = m.PodSpec.Size() n += 1 + l + sovSubmit(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) - n += 1 + l + sovSubmit(uint64(l)) + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovSubmit(uint64(l)) + } l = len(m.Namespace) if l > 0 { n += 1 + l + sovSubmit(uint64(l)) @@ -5884,7 +5886,7 @@ func (this *Job) String() string { `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, `Priority:` + fmt.Sprintf("%v", this.Priority) + `,`, `PodSpec:` + strings.Replace(fmt.Sprintf("%v", this.PodSpec), "PodSpec", "v1.PodSpec", 1) + `,`, - `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1), `&`, ``, 1) + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, `Owner:` + fmt.Sprintf("%v", this.Owner) + `,`, `Labels:` + mapStringForLabels + `,`, @@ -8420,7 +8422,10 @@ func (m *Job) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + if m.Created == nil { + m.Created = &types.Timestamp{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex From 13e626afa248cc27b7089fb01193aa40f376e19b Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Mon, 24 Jun 2024 17:59:30 +0100 Subject: [PATCH 06/27] fix diff Signed-off-by: Chris Martin --- pkg/api/api.swagger.go | 2 +- pkg/api/api.swagger.json | 4 ++-- pkg/api/binoculars/api.swagger.go | 2 +- pkg/api/binoculars/api.swagger.json | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/api/api.swagger.go b/pkg/api/api.swagger.go index abc6074e18c..b7db2275956 100644 --- a/pkg/api/api.swagger.go +++ b/pkg/api/api.swagger.go @@ -5478,7 +5478,7 @@ func SwaggerJsonTemplate() string { " \"x-go-package\": \"k8s.io/api/core/v1\"\n" + " },\n" + " \"v1Time\": {\n" + - " \"description\": \"Programs using times should typically store and pass them as values,\\nnot pointers. That is, time variables and struct fields should be of\\ntype time.Time, not *time.Time.\\n\\nA Time value can be used by multiple goroutines simultaneously except\\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\\nUnmarshalText are not concurrency-safe.\\n\\nTime instants can be compared using the Before, After, and Equal methods.\\nThe Sub method subtracts two instants, producing a Duration.\\nThe Add method adds a Time and a Duration, producing a Time.\\n\\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\\nAs this time is unlikely to come up in practice, the IsZero method gives\\na simple way of detecting a time that has not been initialized explicitly.\\n\\nEach time has an associated Location. The methods Local, UTC, and In return a\\nTime with a specific Location. Changing the Location of a Time value with\\nthese methods does not change the actual instant it represents, only the time\\nzone in which to interpret it.\\n\\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\\nthe location name. They therefore lose information about Daylight Saving Time.\\n\\nIn addition to the required “wall clock” reading, a Time may contain an optional\\nreading of the current process's monotonic clock, to provide additional precision\\nfor comparison or subtraction.\\nSee the “Monotonic Clocks” section in the package documentation for details.\\n\\nNote that the Go == operator compares not just the time instant but also the\\nLocation and the monotonic clock reading. Therefore, Time values should not\\nbe used as map or database keys without first guaranteeing that the\\nidentical Location has been set for all values, which can be achieved\\nthrough use of the UTC or Local method, and that the monotonic clock reading\\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\\nto t == u, since t.Equal uses the most accurate comparison available and\\ncorrectly handles the case when only one of its arguments has a monotonic\\nclock reading.\",\n" + + " \"description\": \"Programs using times should typically store and pass them as values,\\nnot pointers. That is, time variables and struct fields should be of\\ntype time.Time, not *time.Time.\\n\\nA Time value can be used by multiple goroutines simultaneously except\\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\\nUnmarshalText are not concurrency-safe.\\n\\nTime instants can be compared using the Before, After, and Equal methods.\\nThe Sub method subtracts two instants, producing a Duration.\\nThe Add method adds a Time and a Duration, producing a Time.\\n\\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\\nAs this time is unlikely to come up in practice, the IsZero method gives\\na simple way of detecting a time that has not been initialized explicitly.\\n\\nEach Time has associated with it a Location, consulted when computing the\\npresentation form of the time, such as in the Format, Hour, and Year methods.\\nThe methods Local, UTC, and In return a Time with a specific location.\\nChanging the location in this way changes only the presentation; it does not\\nchange the instant in time being denoted and therefore does not affect the\\ncomputations described in earlier paragraphs.\\n\\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\\nthe location name. They therefore lose information about Daylight Saving Time.\\n\\nIn addition to the required “wall clock” reading, a Time may contain an optional\\nreading of the current process's monotonic clock, to provide additional precision\\nfor comparison or subtraction.\\nSee the “Monotonic Clocks” section in the package documentation for details.\\n\\nNote that the Go == operator compares not just the time instant but also the\\nLocation and the monotonic clock reading. Therefore, Time values should not\\nbe used as map or database keys without first guaranteeing that the\\nidentical Location has been set for all values, which can be achieved\\nthrough use of the UTC or Local method, and that the monotonic clock reading\\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\\nto t == u, since t.Equal uses the most accurate comparison available and\\ncorrectly handles the case when only one of its arguments has a monotonic\\nclock reading.\",\n" + " \"type\": \"string\",\n" + " \"format\": \"date-time\",\n" + " \"title\": \"A Time represents an instant in time with nanosecond precision.\",\n" + diff --git a/pkg/api/api.swagger.json b/pkg/api/api.swagger.json index 5993fc4ce08..537603f1ed4 100644 --- a/pkg/api/api.swagger.json +++ b/pkg/api/api.swagger.json @@ -5467,7 +5467,7 @@ "x-go-package": "k8s.io/api/core/v1" }, "v1Time": { - "description": "Programs using times should typically store and pass them as values,\nnot pointers. That is, time variables and struct fields should be of\ntype time.Time, not *time.Time.\n\nA Time value can be used by multiple goroutines simultaneously except\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\nUnmarshalText are not concurrency-safe.\n\nTime instants can be compared using the Before, After, and Equal methods.\nThe Sub method subtracts two instants, producing a Duration.\nThe Add method adds a Time and a Duration, producing a Time.\n\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\nAs this time is unlikely to come up in practice, the IsZero method gives\na simple way of detecting a time that has not been initialized explicitly.\n\nEach time has an associated Location. The methods Local, UTC, and In return a\nTime with a specific Location. Changing the Location of a Time value with\nthese methods does not change the actual instant it represents, only the time\nzone in which to interpret it.\n\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\nthe location name. They therefore lose information about Daylight Saving Time.\n\nIn addition to the required “wall clock” reading, a Time may contain an optional\nreading of the current process's monotonic clock, to provide additional precision\nfor comparison or subtraction.\nSee the “Monotonic Clocks” section in the package documentation for details.\n\nNote that the Go == operator compares not just the time instant but also the\nLocation and the monotonic clock reading. Therefore, Time values should not\nbe used as map or database keys without first guaranteeing that the\nidentical Location has been set for all values, which can be achieved\nthrough use of the UTC or Local method, and that the monotonic clock reading\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\nto t == u, since t.Equal uses the most accurate comparison available and\ncorrectly handles the case when only one of its arguments has a monotonic\nclock reading.", + "description": "Programs using times should typically store and pass them as values,\nnot pointers. That is, time variables and struct fields should be of\ntype time.Time, not *time.Time.\n\nA Time value can be used by multiple goroutines simultaneously except\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\nUnmarshalText are not concurrency-safe.\n\nTime instants can be compared using the Before, After, and Equal methods.\nThe Sub method subtracts two instants, producing a Duration.\nThe Add method adds a Time and a Duration, producing a Time.\n\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\nAs this time is unlikely to come up in practice, the IsZero method gives\na simple way of detecting a time that has not been initialized explicitly.\n\nEach Time has associated with it a Location, consulted when computing the\npresentation form of the time, such as in the Format, Hour, and Year methods.\nThe methods Local, UTC, and In return a Time with a specific location.\nChanging the location in this way changes only the presentation; it does not\nchange the instant in time being denoted and therefore does not affect the\ncomputations described in earlier paragraphs.\n\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\nthe location name. They therefore lose information about Daylight Saving Time.\n\nIn addition to the required “wall clock” reading, a Time may contain an optional\nreading of the current process's monotonic clock, to provide additional precision\nfor comparison or subtraction.\nSee the “Monotonic Clocks” section in the package documentation for details.\n\nNote that the Go == operator compares not just the time instant but also the\nLocation and the monotonic clock reading. Therefore, Time values should not\nbe used as map or database keys without first guaranteeing that the\nidentical Location has been set for all values, which can be achieved\nthrough use of the UTC or Local method, and that the monotonic clock reading\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\nto t == u, since t.Equal uses the most accurate comparison available and\ncorrectly handles the case when only one of its arguments has a monotonic\nclock reading.", "type": "string", "format": "date-time", "title": "A Time represents an instant in time with nanosecond precision.", @@ -5851,4 +5851,4 @@ "x-go-package": "k8s.io/api/core/v1" } } -} \ No newline at end of file +} diff --git a/pkg/api/binoculars/api.swagger.go b/pkg/api/binoculars/api.swagger.go index 4a9905f6feb..206e611b3c9 100644 --- a/pkg/api/binoculars/api.swagger.go +++ b/pkg/api/binoculars/api.swagger.go @@ -238,7 +238,7 @@ func SwaggerJsonTemplate() string { " \"x-go-package\": \"k8s.io/api/core/v1\"\n" + " },\n" + " \"v1Time\": {\n" + - " \"description\": \"Programs using times should typically store and pass them as values,\\nnot pointers. That is, time variables and struct fields should be of\\ntype time.Time, not *time.Time.\\n\\nA Time value can be used by multiple goroutines simultaneously except\\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\\nUnmarshalText are not concurrency-safe.\\n\\nTime instants can be compared using the Before, After, and Equal methods.\\nThe Sub method subtracts two instants, producing a Duration.\\nThe Add method adds a Time and a Duration, producing a Time.\\n\\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\\nAs this time is unlikely to come up in practice, the IsZero method gives\\na simple way of detecting a time that has not been initialized explicitly.\\n\\nEach time has an associated Location. The methods Local, UTC, and In return a\\nTime with a specific Location. Changing the Location of a Time value with\\nthese methods does not change the actual instant it represents, only the time\\nzone in which to interpret it.\\n\\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\\nthe location name. They therefore lose information about Daylight Saving Time.\\n\\nIn addition to the required “wall clock” reading, a Time may contain an optional\\nreading of the current process's monotonic clock, to provide additional precision\\nfor comparison or subtraction.\\nSee the “Monotonic Clocks” section in the package documentation for details.\\n\\nNote that the Go == operator compares not just the time instant but also the\\nLocation and the monotonic clock reading. Therefore, Time values should not\\nbe used as map or database keys without first guaranteeing that the\\nidentical Location has been set for all values, which can be achieved\\nthrough use of the UTC or Local method, and that the monotonic clock reading\\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\\nto t == u, since t.Equal uses the most accurate comparison available and\\ncorrectly handles the case when only one of its arguments has a monotonic\\nclock reading.\",\n" + + " \"description\": \"Programs using times should typically store and pass them as values,\\nnot pointers. That is, time variables and struct fields should be of\\ntype time.Time, not *time.Time.\\n\\nA Time value can be used by multiple goroutines simultaneously except\\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\\nUnmarshalText are not concurrency-safe.\\n\\nTime instants can be compared using the Before, After, and Equal methods.\\nThe Sub method subtracts two instants, producing a Duration.\\nThe Add method adds a Time and a Duration, producing a Time.\\n\\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\\nAs this time is unlikely to come up in practice, the IsZero method gives\\na simple way of detecting a time that has not been initialized explicitly.\\n\\nEach Time has associated with it a Location, consulted when computing the\\npresentation form of the time, such as in the Format, Hour, and Year methods.\\nThe methods Local, UTC, and In return a Time with a specific location.\\nChanging the location in this way changes only the presentation; it does not\\nchange the instant in time being denoted and therefore does not affect the\\ncomputations described in earlier paragraphs.\\n\\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\\nthe location name. They therefore lose information about Daylight Saving Time.\\n\\nIn addition to the required “wall clock” reading, a Time may contain an optional\\nreading of the current process's monotonic clock, to provide additional precision\\nfor comparison or subtraction.\\nSee the “Monotonic Clocks” section in the package documentation for details.\\n\\nNote that the Go == operator compares not just the time instant but also the\\nLocation and the monotonic clock reading. Therefore, Time values should not\\nbe used as map or database keys without first guaranteeing that the\\nidentical Location has been set for all values, which can be achieved\\nthrough use of the UTC or Local method, and that the monotonic clock reading\\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\\nto t == u, since t.Equal uses the most accurate comparison available and\\ncorrectly handles the case when only one of its arguments has a monotonic\\nclock reading.\",\n" + " \"type\": \"string\",\n" + " \"format\": \"date-time\",\n" + " \"title\": \"A Time represents an instant in time with nanosecond precision.\",\n" + diff --git a/pkg/api/binoculars/api.swagger.json b/pkg/api/binoculars/api.swagger.json index adf9a3af046..c7f88b50176 100644 --- a/pkg/api/binoculars/api.swagger.json +++ b/pkg/api/binoculars/api.swagger.json @@ -227,11 +227,11 @@ "x-go-package": "k8s.io/api/core/v1" }, "v1Time": { - "description": "Programs using times should typically store and pass them as values,\nnot pointers. That is, time variables and struct fields should be of\ntype time.Time, not *time.Time.\n\nA Time value can be used by multiple goroutines simultaneously except\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\nUnmarshalText are not concurrency-safe.\n\nTime instants can be compared using the Before, After, and Equal methods.\nThe Sub method subtracts two instants, producing a Duration.\nThe Add method adds a Time and a Duration, producing a Time.\n\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\nAs this time is unlikely to come up in practice, the IsZero method gives\na simple way of detecting a time that has not been initialized explicitly.\n\nEach time has an associated Location. The methods Local, UTC, and In return a\nTime with a specific Location. Changing the Location of a Time value with\nthese methods does not change the actual instant it represents, only the time\nzone in which to interpret it.\n\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\nthe location name. They therefore lose information about Daylight Saving Time.\n\nIn addition to the required “wall clock” reading, a Time may contain an optional\nreading of the current process's monotonic clock, to provide additional precision\nfor comparison or subtraction.\nSee the “Monotonic Clocks” section in the package documentation for details.\n\nNote that the Go == operator compares not just the time instant but also the\nLocation and the monotonic clock reading. Therefore, Time values should not\nbe used as map or database keys without first guaranteeing that the\nidentical Location has been set for all values, which can be achieved\nthrough use of the UTC or Local method, and that the monotonic clock reading\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\nto t == u, since t.Equal uses the most accurate comparison available and\ncorrectly handles the case when only one of its arguments has a monotonic\nclock reading.", + "description": "Programs using times should typically store and pass them as values,\nnot pointers. That is, time variables and struct fields should be of\ntype time.Time, not *time.Time.\n\nA Time value can be used by multiple goroutines simultaneously except\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\nUnmarshalText are not concurrency-safe.\n\nTime instants can be compared using the Before, After, and Equal methods.\nThe Sub method subtracts two instants, producing a Duration.\nThe Add method adds a Time and a Duration, producing a Time.\n\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\nAs this time is unlikely to come up in practice, the IsZero method gives\na simple way of detecting a time that has not been initialized explicitly.\n\nEach Time has associated with it a Location, consulted when computing the\npresentation form of the time, such as in the Format, Hour, and Year methods.\nThe methods Local, UTC, and In return a Time with a specific location.\nChanging the location in this way changes only the presentation; it does not\nchange the instant in time being denoted and therefore does not affect the\ncomputations described in earlier paragraphs.\n\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\nthe location name. They therefore lose information about Daylight Saving Time.\n\nIn addition to the required “wall clock” reading, a Time may contain an optional\nreading of the current process's monotonic clock, to provide additional precision\nfor comparison or subtraction.\nSee the “Monotonic Clocks” section in the package documentation for details.\n\nNote that the Go == operator compares not just the time instant but also the\nLocation and the monotonic clock reading. Therefore, Time values should not\nbe used as map or database keys without first guaranteeing that the\nidentical Location has been set for all values, which can be achieved\nthrough use of the UTC or Local method, and that the monotonic clock reading\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\nto t == u, since t.Equal uses the most accurate comparison available and\ncorrectly handles the case when only one of its arguments has a monotonic\nclock reading.", "type": "string", "format": "date-time", "title": "A Time represents an instant in time with nanosecond precision.", "x-go-package": "k8s.io/apimachinery/pkg/apis/meta/v1" } } -} \ No newline at end of file +} From f29fd6c5c98e268ea9643ba09c66997840da15df Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Mon, 24 Jun 2024 18:24:09 +0100 Subject: [PATCH 07/27] submit.go Signed-off-by: Chris Martin --- .../event/conversion/conversions_test.go | 2 +- internal/common/eventutil/eventutil.go | 2 +- internal/common/proto/protoutil_test.go | 5 +- .../scheduler/constraints/constraints_test.go | 16 +- internal/scheduler/queue_scheduler_test.go | 4 +- pkg/api/submit.pb.go | 500 +++++++++--------- pkg/api/submit.proto | 10 +- pkg/client/queue/queue.go | 25 +- 8 files changed, 296 insertions(+), 268 deletions(-) diff --git a/internal/armada/event/conversion/conversions_test.go b/internal/armada/event/conversion/conversions_test.go index 5902260ac4d..6f367340364 100644 --- a/internal/armada/event/conversion/conversions_test.go +++ b/internal/armada/event/conversion/conversions_test.go @@ -99,7 +99,7 @@ func TestConvertSubmitted(t *testing.T) { }, }, }, - SchedulingResourceRequirements: v1.ResourceRequirements{ + SchedulingResourceRequirements: &v1.ResourceRequirements{ Requests: make(v1.ResourceList), Limits: make(v1.ResourceList), }, diff --git a/internal/common/eventutil/eventutil.go b/internal/common/eventutil/eventutil.go index 9a7a62bd496..9c808403a02 100644 --- a/internal/common/eventutil/eventutil.go +++ b/internal/common/eventutil/eventutil.go @@ -162,7 +162,7 @@ func ApiJobFromLogSubmitJob(ownerId string, groups []string, queueName string, j PodSpec: podSpec, PodSpecs: podSpecs, - SchedulingResourceRequirements: schedulingResourceRequirements, + SchedulingResourceRequirements: &schedulingResourceRequirements, Created: protoutil.ToTimestamp(time), Owner: ownerId, diff --git a/internal/common/proto/protoutil_test.go b/internal/common/proto/protoutil_test.go index e60c2cc8e70..cc6bca52841 100644 --- a/internal/common/proto/protoutil_test.go +++ b/internal/common/proto/protoutil_test.go @@ -2,11 +2,11 @@ package protoutil import ( "fmt" - "github.com/gogo/protobuf/types" "testing" "time" "github.com/gogo/protobuf/proto" + "github.com/gogo/protobuf/types" "github.com/google/uuid" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -68,8 +68,7 @@ func TestMustMarshallAndCompress(t *testing.T) { } func TestToTimestamp(t *testing.T) { - - var tests = map[string]struct { + tests := map[string]struct { ts *types.Timestamp t time.Time }{ diff --git a/internal/scheduler/constraints/constraints_test.go b/internal/scheduler/constraints/constraints_test.go index d31d7f860db..4a93ae12b59 100644 --- a/internal/scheduler/constraints/constraints_test.go +++ b/internal/scheduler/constraints/constraints_test.go @@ -40,7 +40,7 @@ func TestConstraints(t *testing.T) { makeResourceList("1000", "1000Gi"), makeResourceList("0", "0"), makeSchedulingConfig(), - []*api.Queue{{Name: "queue-1", ResourceLimitsByPriorityClassName: map[string]api.PriorityClassResourceLimits{}}}, + []*api.Queue{{Name: "queue-1", ResourceLimitsByPriorityClassName: map[string]*api.PriorityClassResourceLimits{}}}, )), "within-constraints": makeConstraintsTest(NewSchedulingConstraints( "pool-1", @@ -51,7 +51,7 @@ func TestConstraints(t *testing.T) { MaxQueueLookback: 1000, PriorityClasses: map[string]types.PriorityClass{"priority-class-1": {MaximumResourceFractionPerQueueByPool: map[string]map[string]float64{"pool-1": {"cpu": 0.9, "memory": 0.9}}}}, }, - []*api.Queue{{Name: "queue-1", ResourceLimitsByPriorityClassName: map[string]api.PriorityClassResourceLimits{"priority-class-1": {MaximumResourceFraction: map[string]float64{"cpu": 0.9, "memory": 0.9}}}}}, + []*api.Queue{{Name: "queue-1", ResourceLimitsByPriorityClassName: map[string]*api.PriorityClassResourceLimits{"priority-class-1": {MaximumResourceFraction: map[string]float64{"cpu": 0.9, "memory": 0.9}}}}}, )), "exceeds-queue-priority-class-constraint": func() *constraintTest { t := makeConstraintsTest(NewSchedulingConstraints( @@ -62,7 +62,7 @@ func TestConstraints(t *testing.T) { []*api.Queue{ { Name: "queue-1", - ResourceLimitsByPriorityClassName: map[string]api.PriorityClassResourceLimits{ + ResourceLimitsByPriorityClassName: map[string]*api.PriorityClassResourceLimits{ "priority-class-1": { MaximumResourceFraction: map[string]float64{"cpu": 0.000001, "memory": 0.9}, }, @@ -82,9 +82,9 @@ func TestConstraints(t *testing.T) { []*api.Queue{ { Name: "queue-1", - ResourceLimitsByPriorityClassName: map[string]api.PriorityClassResourceLimits{ + ResourceLimitsByPriorityClassName: map[string]*api.PriorityClassResourceLimits{ "priority-class-1": { - MaximumResourceFractionByPool: map[string]api.PriorityClassPoolResourceLimits{ + MaximumResourceFractionByPool: map[string]*api.PriorityClassPoolResourceLimits{ "pool-1": { MaximumResourceFraction: map[string]float64{"cpu": 0.000001, "memory": 0.9}, }, @@ -121,7 +121,7 @@ func TestConstraints(t *testing.T) { MaxQueueLookback: 1000, PriorityClasses: map[string]types.PriorityClass{"priority-class-1": {MaximumResourceFractionPerQueueByPool: map[string]map[string]float64{"pool-1": {"cpu": 0.00000001, "memory": 0.9}}}}, }, - []*api.Queue{{Name: "queue-1", ResourceLimitsByPriorityClassName: map[string]api.PriorityClassResourceLimits{"priority-class-1": {MaximumResourceFraction: map[string]float64{"cpu": 0.9, "memory": 0.9}}}}}, + []*api.Queue{{Name: "queue-1", ResourceLimitsByPriorityClassName: map[string]*api.PriorityClassResourceLimits{"priority-class-1": {MaximumResourceFraction: map[string]float64{"cpu": 0.9, "memory": 0.9}}}}}, )), "one-constraint-per-level-falls-back-as-expected--within-limits": makeMultiLevelConstraintsTest( map[string]resource.Quantity{"a": resource.MustParse("99"), "b": resource.MustParse("19"), "c": resource.MustParse("2.9"), "d": resource.MustParse("0.39")}, @@ -251,10 +251,10 @@ func makeMultiLevelConstraints() SchedulingConstraints { []*api.Queue{ { Name: "queue-1", - ResourceLimitsByPriorityClassName: map[string]api.PriorityClassResourceLimits{ + ResourceLimitsByPriorityClassName: map[string]*api.PriorityClassResourceLimits{ "priority-class-1": { MaximumResourceFraction: map[string]float64{"a": 0.01, "b": 0.02}, - MaximumResourceFractionByPool: map[string]api.PriorityClassPoolResourceLimits{ + MaximumResourceFractionByPool: map[string]*api.PriorityClassPoolResourceLimits{ "pool-1": { MaximumResourceFraction: map[string]float64{"a": 0.1}, }, diff --git a/internal/scheduler/queue_scheduler_test.go b/internal/scheduler/queue_scheduler_test.go index 510b586f5de..7ac1bb43b64 100644 --- a/internal/scheduler/queue_scheduler_test.go +++ b/internal/scheduler/queue_scheduler_test.go @@ -188,9 +188,9 @@ func TestQueueScheduler(t *testing.T) { { Name: "A", PriorityFactor: 1.0, - ResourceLimitsByPriorityClassName: map[string]api.PriorityClassResourceLimits{ + ResourceLimitsByPriorityClassName: map[string]*api.PriorityClassResourceLimits{ testfixtures.PriorityClass0: { - MaximumResourceFractionByPool: map[string]api.PriorityClassPoolResourceLimits{ + MaximumResourceFractionByPool: map[string]*api.PriorityClassPoolResourceLimits{ "pool": { MaximumResourceFraction: map[string]float64{"cpu": 0.5, "memory": 1.0}, }, diff --git a/pkg/api/submit.pb.go b/pkg/api/submit.pb.go index 715474a80f8..401a1ac757d 100644 --- a/pkg/api/submit.pb.go +++ b/pkg/api/submit.pb.go @@ -735,8 +735,8 @@ type Job struct { // This is because containers run in parallel, whereas initContainers run serially. // This field is populated automatically at submission. // Submitting a job with this field already populated results in an error. - SchedulingResourceRequirements v1.ResourceRequirements `protobuf:"bytes,21,opt,name=scheduling_resource_requirements,json=schedulingResourceRequirements,proto3" json:"schedulingResourceRequirements"` - Created *types.Timestamp `protobuf:"bytes,6,opt,name=created,proto3" json:"created,omitempty"` + SchedulingResourceRequirements *v1.ResourceRequirements `protobuf:"bytes,21,opt,name=scheduling_resource_requirements,json=schedulingResourceRequirements,proto3" json:"schedulingResourceRequirements,omitempty"` + Created *types.Timestamp `protobuf:"bytes,6,opt,name=created,proto3" json:"created,omitempty"` // Services can be provided either as Armada-specific config objects or as proper k8s objects. // These options are exclusive, i.e., if either ingress or services is provided, // then neither of k8s_ingress or k8s_service can be provided, and vice versa. @@ -883,11 +883,11 @@ func (m *Job) GetPodSpecs() []*v1.PodSpec { return nil } -func (m *Job) GetSchedulingResourceRequirements() v1.ResourceRequirements { +func (m *Job) GetSchedulingResourceRequirements() *v1.ResourceRequirements { if m != nil { return m.SchedulingResourceRequirements } - return v1.ResourceRequirements{} + return nil } func (m *Job) GetCreated() *types.Timestamp { @@ -1156,8 +1156,8 @@ type Queue struct { ResourceLimits map[string]float64 `protobuf:"bytes,5,rep,name=resource_limits,json=resourceLimits,proto3" json:"resourceLimits,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` // Deprecated: Do not use. // Map from priority class name to resource limit overrides for this queue and priority class. // If provided for a priority class, global limits for that priority class do not apply to this queue. - ResourceLimitsByPriorityClassName map[string]PriorityClassResourceLimits `protobuf:"bytes,7,rep,name=resource_limits_by_priority_class_name,json=resourceLimitsByPriorityClassName,proto3" json:"resourceLimitsByPriorityClassName" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Permissions []*Queue_Permissions `protobuf:"bytes,6,rep,name=permissions,proto3" json:"permissions,omitempty"` + ResourceLimitsByPriorityClassName map[string]*PriorityClassResourceLimits `protobuf:"bytes,7,rep,name=resource_limits_by_priority_class_name,json=resourceLimitsByPriorityClassName,proto3" json:"resourceLimitsByPriorityClassName,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Permissions []*Queue_Permissions `protobuf:"bytes,6,rep,name=permissions,proto3" json:"permissions,omitempty"` } func (m *Queue) Reset() { *m = Queue{} } @@ -1228,7 +1228,7 @@ func (m *Queue) GetResourceLimits() map[string]float64 { return nil } -func (m *Queue) GetResourceLimitsByPriorityClassName() map[string]PriorityClassResourceLimits { +func (m *Queue) GetResourceLimitsByPriorityClassName() map[string]*PriorityClassResourceLimits { if m != nil { return m.ResourceLimitsByPriorityClassName } @@ -1347,10 +1347,10 @@ func (m *Queue_Permissions_Subject) GetName() string { type PriorityClassResourceLimits struct { // Limits resources assigned to jobs of this priority class. // Specifically, jobs of this priority class are only scheduled if doing so does not exceed this limit. - MaximumResourceFraction map[string]float64 `protobuf:"bytes,1,rep,name=maximum_resource_fraction,json=maximumResourceFraction,proto3" json:"maximumResourceFraction" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` + MaximumResourceFraction map[string]float64 `protobuf:"bytes,1,rep,name=maximum_resource_fraction,json=maximumResourceFraction,proto3" json:"maximumResourceFraction,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` // Per-pool override of maximum_resource_fraction. // If missing for a particular pool, maximum_resource_fraction is used instead for that pool. - MaximumResourceFractionByPool map[string]PriorityClassPoolResourceLimits `protobuf:"bytes,2,rep,name=maximum_resource_fraction_by_pool,json=maximumResourceFractionByPool,proto3" json:"maximumResourceFractionByPool" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MaximumResourceFractionByPool map[string]*PriorityClassPoolResourceLimits `protobuf:"bytes,2,rep,name=maximum_resource_fraction_by_pool,json=maximumResourceFractionByPool,proto3" json:"maximumResourceFractionByPool,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (m *PriorityClassResourceLimits) Reset() { *m = PriorityClassResourceLimits{} } @@ -1392,7 +1392,7 @@ func (m *PriorityClassResourceLimits) GetMaximumResourceFraction() map[string]fl return nil } -func (m *PriorityClassResourceLimits) GetMaximumResourceFractionByPool() map[string]PriorityClassPoolResourceLimits { +func (m *PriorityClassResourceLimits) GetMaximumResourceFractionByPool() map[string]*PriorityClassPoolResourceLimits { if m != nil { return m.MaximumResourceFractionByPool } @@ -1400,7 +1400,7 @@ func (m *PriorityClassResourceLimits) GetMaximumResourceFractionByPool() map[str } type PriorityClassPoolResourceLimits struct { - MaximumResourceFraction map[string]float64 `protobuf:"bytes,1,rep,name=maximum_resource_fraction,json=maximumResourceFraction,proto3" json:"maximumResourceFraction" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` + MaximumResourceFraction map[string]float64 `protobuf:"bytes,1,rep,name=maximum_resource_fraction,json=maximumResourceFraction,proto3" json:"maximumResourceFraction,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` } func (m *PriorityClassPoolResourceLimits) Reset() { *m = PriorityClassPoolResourceLimits{} } @@ -2055,12 +2055,12 @@ func init() { proto.RegisterType((*JobSubmitResponseItem)(nil), "api.JobSubmitResponseItem") proto.RegisterType((*JobSubmitResponse)(nil), "api.JobSubmitResponse") proto.RegisterType((*Queue)(nil), "api.Queue") - proto.RegisterMapType((map[string]PriorityClassResourceLimits)(nil), "api.Queue.ResourceLimitsByPriorityClassNameEntry") + proto.RegisterMapType((map[string]*PriorityClassResourceLimits)(nil), "api.Queue.ResourceLimitsByPriorityClassNameEntry") proto.RegisterMapType((map[string]float64)(nil), "api.Queue.ResourceLimitsEntry") proto.RegisterType((*Queue_Permissions)(nil), "api.Queue.Permissions") proto.RegisterType((*Queue_Permissions_Subject)(nil), "api.Queue.Permissions.Subject") proto.RegisterType((*PriorityClassResourceLimits)(nil), "api.PriorityClassResourceLimits") - proto.RegisterMapType((map[string]PriorityClassPoolResourceLimits)(nil), "api.PriorityClassResourceLimits.MaximumResourceFractionByPoolEntry") + proto.RegisterMapType((map[string]*PriorityClassPoolResourceLimits)(nil), "api.PriorityClassResourceLimits.MaximumResourceFractionByPoolEntry") proto.RegisterMapType((map[string]float64)(nil), "api.PriorityClassResourceLimits.MaximumResourceFractionEntry") proto.RegisterType((*PriorityClassPoolResourceLimits)(nil), "api.PriorityClassPoolResourceLimits") proto.RegisterMapType((map[string]float64)(nil), "api.PriorityClassPoolResourceLimits.MaximumResourceFractionEntry") @@ -2081,193 +2081,194 @@ func init() { func init() { proto.RegisterFile("pkg/api/submit.proto", fileDescriptor_e998bacb27df16c1) } var fileDescriptor_e998bacb27df16c1 = []byte{ - // 2975 bytes of a gzipped FileDescriptorProto + // 2979 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x6f, 0x1b, 0xc7, - 0x15, 0xe7, 0x8a, 0xfa, 0xe2, 0xa3, 0x3e, 0xa8, 0xd1, 0x87, 0x57, 0xb4, 0x23, 0xca, 0x9b, 0xc4, - 0x95, 0x85, 0x84, 0x8a, 0x95, 0x06, 0xb5, 0xdd, 0x14, 0xae, 0x28, 0xd1, 0xb6, 0x64, 0x5b, 0x56, - 0x28, 0x2b, 0x69, 0x8a, 0xa2, 0xcc, 0x92, 0x3b, 0xa2, 0x56, 0x22, 0x77, 0x99, 0xdd, 0xa5, 0x5c, - 0xb5, 0x08, 0x50, 0x14, 0x45, 0x7b, 0xe8, 0x25, 0x40, 0x6f, 0x2d, 0x90, 0x1c, 0x7a, 0x4b, 0x0f, - 0xbd, 0x14, 0x45, 0xff, 0x84, 0x1c, 0x03, 0x14, 0x05, 0xd2, 0x0b, 0xd1, 0x38, 0xfd, 0x00, 0x78, - 0xeb, 0xbd, 0x87, 0x62, 0xde, 0xcc, 0x72, 0x67, 0xf9, 0x21, 0x8a, 0xb6, 0x95, 0x5c, 0x7a, 0xd3, - 0xfc, 0xe6, 0x7d, 0xef, 0x9b, 0x37, 0xef, 0x0d, 0x05, 0x33, 0xd5, 0xa3, 0xd2, 0x8a, 0x5e, 0x35, - 0x57, 0xdc, 0x5a, 0xa1, 0x62, 0x7a, 0xe9, 0xaa, 0x63, 0x7b, 0x36, 0x89, 0xea, 0x55, 0x33, 0x79, - 0xb1, 0x64, 0xdb, 0xa5, 0x32, 0x5d, 0x41, 0xa8, 0x50, 0xdb, 0x5f, 0xa1, 0x95, 0xaa, 0x77, 0xc2, - 0x29, 0x92, 0xa9, 0xd6, 0x4d, 0xcf, 0xac, 0x50, 0xd7, 0xd3, 0x2b, 0x55, 0x41, 0xa0, 0x1d, 0x5d, - 0x77, 0xd3, 0xa6, 0x8d, 0xb2, 0x8b, 0xb6, 0x43, 0x57, 0x8e, 0xaf, 0xad, 0x94, 0xa8, 0x45, 0x1d, - 0xdd, 0xa3, 0x86, 0xa0, 0x59, 0x92, 0x68, 0x2c, 0xea, 0x3d, 0xb6, 0x9d, 0x23, 0xd3, 0x2a, 0x75, - 0xa2, 0xbc, 0x24, 0xd4, 0x31, 0x4a, 0xdd, 0xb2, 0x6c, 0x4f, 0xf7, 0x4c, 0xdb, 0x72, 0xc5, 0xee, - 0xab, 0x25, 0xd3, 0x3b, 0xa8, 0x15, 0xd2, 0x45, 0xbb, 0xb2, 0x52, 0xb2, 0x4b, 0x76, 0x60, 0x15, - 0x5b, 0xe1, 0x02, 0xff, 0x12, 0xe4, 0x4d, 0x9f, 0x0f, 0xa8, 0x5e, 0xf6, 0x0e, 0x38, 0xaa, 0x7d, - 0x1c, 0x83, 0x99, 0x2d, 0xbb, 0xb0, 0x8b, 0x71, 0xc8, 0xd1, 0xf7, 0x6b, 0xd4, 0xf5, 0x36, 0x3d, - 0x5a, 0x21, 0xab, 0x30, 0x5a, 0x75, 0x4c, 0xdb, 0x31, 0xbd, 0x13, 0x55, 0x59, 0x54, 0x96, 0x94, - 0xcc, 0x5c, 0xa3, 0x9e, 0x22, 0x3e, 0xf6, 0x8a, 0x5d, 0x31, 0x3d, 0x0c, 0x4d, 0xae, 0x49, 0x47, - 0xde, 0x80, 0x98, 0xa5, 0x57, 0xa8, 0x5b, 0xd5, 0x8b, 0x54, 0x8d, 0x2e, 0x2a, 0x4b, 0xb1, 0xcc, - 0x85, 0x46, 0x3d, 0x35, 0xdd, 0x04, 0x25, 0xae, 0x80, 0x92, 0xbc, 0x0e, 0xb1, 0x62, 0xd9, 0xa4, - 0x96, 0x97, 0x37, 0x0d, 0x75, 0x14, 0xd9, 0x50, 0x17, 0x07, 0x37, 0x0d, 0x59, 0x97, 0x8f, 0x91, - 0x5d, 0x18, 0x2e, 0xeb, 0x05, 0x5a, 0x76, 0xd5, 0xc1, 0xc5, 0xe8, 0x52, 0x7c, 0xf5, 0xe5, 0xb4, - 0x5e, 0x35, 0xd3, 0x9d, 0x5c, 0x49, 0xdf, 0x47, 0xba, 0xac, 0xe5, 0x39, 0x27, 0x99, 0x99, 0x46, - 0x3d, 0x95, 0xe0, 0x8c, 0x92, 0x58, 0x21, 0x8a, 0x94, 0x20, 0x2e, 0xc5, 0x59, 0x1d, 0x42, 0xc9, - 0xcb, 0xdd, 0x25, 0xaf, 0x05, 0xc4, 0x5c, 0xfc, 0x7c, 0xa3, 0x9e, 0x9a, 0x95, 0x44, 0x48, 0x3a, - 0x64, 0xc9, 0xe4, 0x97, 0x0a, 0xcc, 0x38, 0xf4, 0xfd, 0x9a, 0xe9, 0x50, 0x23, 0x6f, 0xd9, 0x06, - 0xcd, 0x0b, 0x67, 0x86, 0x51, 0xe5, 0xb5, 0xee, 0x2a, 0x73, 0x82, 0x6b, 0xdb, 0x36, 0xa8, 0xec, - 0x98, 0xd6, 0xa8, 0xa7, 0x2e, 0x39, 0x6d, 0x9b, 0x81, 0x01, 0xaa, 0x92, 0x23, 0xed, 0xfb, 0xe4, - 0x21, 0x8c, 0x56, 0x6d, 0x23, 0xef, 0x56, 0x69, 0x51, 0x1d, 0x58, 0x54, 0x96, 0xe2, 0xab, 0x17, - 0xd3, 0x3c, 0x41, 0xd1, 0x06, 0x96, 0xc4, 0xe9, 0xe3, 0x6b, 0xe9, 0x1d, 0xdb, 0xd8, 0xad, 0xd2, - 0x22, 0x7e, 0xcf, 0xa9, 0x2a, 0x5f, 0x84, 0x64, 0x8f, 0x08, 0x90, 0xec, 0x40, 0xcc, 0x17, 0xe8, - 0xaa, 0x23, 0xe8, 0xce, 0xa9, 0x12, 0x79, 0x5a, 0xf1, 0x85, 0x1b, 0x4a, 0x2b, 0x81, 0x91, 0x75, - 0x18, 0x31, 0xad, 0x92, 0x43, 0x5d, 0x57, 0x8d, 0xa1, 0x3c, 0x82, 0x82, 0x36, 0x39, 0xb6, 0x6e, - 0x5b, 0xfb, 0x66, 0x29, 0x33, 0xcb, 0x0c, 0x13, 0x64, 0x92, 0x14, 0x9f, 0x93, 0xdc, 0x86, 0x51, - 0x97, 0x3a, 0xc7, 0x66, 0x91, 0xba, 0x2a, 0x48, 0x52, 0x76, 0x39, 0x28, 0xa4, 0xa0, 0x31, 0x3e, - 0x9d, 0x6c, 0x8c, 0x8f, 0xb1, 0x1c, 0x77, 0x8b, 0x07, 0xd4, 0xa8, 0x95, 0xa9, 0xa3, 0xc6, 0x83, - 0x1c, 0x6f, 0x82, 0x72, 0x8e, 0x37, 0xc1, 0xa4, 0x0e, 0x71, 0xe9, 0x6b, 0x91, 0x17, 0x21, 0x7a, - 0x44, 0xf9, 0xc1, 0x8a, 0x65, 0xa6, 0x1a, 0xf5, 0xd4, 0xf8, 0x11, 0x95, 0xcf, 0x14, 0xdb, 0x25, - 0x57, 0x61, 0xe8, 0x58, 0x2f, 0xd7, 0x28, 0x7e, 0x97, 0x58, 0x66, 0xba, 0x51, 0x4f, 0x4d, 0x22, - 0x20, 0x11, 0x72, 0x8a, 0x9b, 0x03, 0xd7, 0x95, 0xe4, 0x3e, 0x24, 0x5a, 0xf3, 0xf1, 0x5c, 0xf4, - 0x54, 0xe0, 0x42, 0x97, 0x24, 0x3c, 0x0f, 0x75, 0xda, 0x7f, 0xa2, 0x30, 0x1e, 0xfa, 0xd4, 0xe4, - 0x26, 0x0c, 0x7a, 0x27, 0x55, 0x8a, 0x6a, 0x26, 0x56, 0x13, 0x72, 0x32, 0x3c, 0x3a, 0xa9, 0x52, - 0x3c, 0xe3, 0x13, 0x8c, 0x22, 0x94, 0xa0, 0xc8, 0xc3, 0x94, 0x57, 0x6d, 0xc7, 0x73, 0xd5, 0x81, - 0xc5, 0xe8, 0xd2, 0x38, 0x57, 0x8e, 0x80, 0xac, 0x1c, 0x01, 0xf2, 0x5e, 0xb8, 0x18, 0x44, 0x31, - 0x69, 0x5e, 0x6c, 0x4f, 0xbd, 0xa7, 0xaf, 0x02, 0x37, 0x20, 0xee, 0x95, 0xdd, 0x3c, 0xb5, 0xf4, - 0x42, 0x99, 0x1a, 0xea, 0xe0, 0xa2, 0xb2, 0x34, 0x9a, 0x51, 0x1b, 0xf5, 0xd4, 0x8c, 0xc7, 0x22, - 0x8a, 0xa8, 0xc4, 0x0b, 0x01, 0x8a, 0x35, 0x93, 0x3a, 0x5e, 0x9e, 0x55, 0x51, 0x75, 0x48, 0xaa, - 0x99, 0xd4, 0xf1, 0xb6, 0xf5, 0x0a, 0x0d, 0xd5, 0x4c, 0x81, 0x91, 0x5b, 0x30, 0x5e, 0x73, 0x69, - 0xbe, 0x58, 0xae, 0xb9, 0x1e, 0x75, 0x36, 0x77, 0xd4, 0x61, 0xd4, 0x98, 0x6c, 0xd4, 0x53, 0x73, - 0x35, 0x97, 0xae, 0xfb, 0xb8, 0xc4, 0x3c, 0x26, 0xe3, 0x5f, 0x55, 0x8a, 0x69, 0x1e, 0x8c, 0x87, - 0xce, 0x25, 0xb9, 0xde, 0xe1, 0x93, 0x0b, 0x0a, 0xfc, 0xe4, 0xa4, 0xfd, 0x93, 0xf7, 0xfd, 0xc1, - 0xb5, 0xbf, 0x29, 0x90, 0x68, 0xad, 0xb9, 0x8c, 0xff, 0xfd, 0x1a, 0xad, 0x51, 0xe1, 0x20, 0xf2, - 0x23, 0x20, 0xf3, 0x23, 0x40, 0xbe, 0x09, 0x70, 0x68, 0x17, 0xf2, 0x2e, 0xc5, 0x8b, 0x6c, 0x20, - 0xf8, 0x28, 0x87, 0x76, 0x61, 0x97, 0xb6, 0x5c, 0x64, 0x3e, 0x46, 0x0c, 0x98, 0x62, 0x5c, 0x0e, - 0xd7, 0x97, 0x67, 0x04, 0x7e, 0xb2, 0xcd, 0x77, 0xbd, 0x06, 0x32, 0x2f, 0x34, 0xea, 0xa9, 0xf9, - 0x43, 0xbb, 0x20, 0x61, 0xb2, 0x47, 0x93, 0x2d, 0x5b, 0xda, 0xef, 0x14, 0x98, 0xda, 0xb2, 0x0b, - 0x3b, 0x0e, 0x65, 0x04, 0x5f, 0x99, 0x73, 0xaf, 0xc2, 0x08, 0xe3, 0x32, 0x0d, 0xee, 0x52, 0x8c, - 0xdf, 0xbf, 0x87, 0x76, 0x61, 0xd3, 0x08, 0xdd, 0xbf, 0x1c, 0xd1, 0xfe, 0xcb, 0xbf, 0xc0, 0xba, - 0x6e, 0x15, 0x69, 0xd9, 0x37, 0x72, 0x19, 0x86, 0xb9, 0x0c, 0xd9, 0x4a, 0x64, 0x90, 0xad, 0x44, - 0xe0, 0x29, 0xad, 0x6c, 0x86, 0x21, 0xda, 0x33, 0x0c, 0x92, 0x43, 0x83, 0xbd, 0x1d, 0x22, 0xaf, - 0xc0, 0xb0, 0x43, 0x75, 0xd7, 0xb6, 0xc4, 0x19, 0x45, 0x6a, 0x8e, 0xc8, 0xd4, 0x1c, 0xd1, 0xfe, - 0xa9, 0xc0, 0xf4, 0x16, 0x1a, 0x15, 0x8e, 0x40, 0xd8, 0x2b, 0xa5, 0x5f, 0xaf, 0x06, 0x7a, 0x7a, - 0x75, 0x0b, 0x86, 0xf7, 0xcd, 0xb2, 0x47, 0x1d, 0x8c, 0x40, 0x7c, 0x75, 0xaa, 0x99, 0x78, 0xd4, - 0xbb, 0x8d, 0x1b, 0xdc, 0x72, 0x4e, 0x24, 0x5b, 0xce, 0x11, 0xc9, 0xcf, 0xc1, 0x33, 0xf8, 0x79, - 0x0f, 0xc6, 0x64, 0xd9, 0xe4, 0xdb, 0x30, 0xec, 0x7a, 0xba, 0x47, 0x5d, 0x55, 0x59, 0x8c, 0x2e, - 0x4d, 0xac, 0x8e, 0x37, 0xd5, 0x33, 0x94, 0x0b, 0xe3, 0x04, 0xb2, 0x30, 0x8e, 0x68, 0x5f, 0x4c, - 0x42, 0x74, 0xcb, 0x2e, 0x90, 0x45, 0x18, 0x68, 0x06, 0x27, 0xd1, 0xa8, 0xa7, 0xc6, 0x4c, 0x39, - 0x2c, 0x03, 0xa6, 0x11, 0xee, 0x33, 0xc7, 0xcf, 0xd8, 0x67, 0x9e, 0x7b, 0x46, 0x85, 0x9a, 0xe6, - 0x91, 0x33, 0x37, 0xcd, 0x99, 0x66, 0xff, 0xcb, 0x7b, 0xa2, 0x19, 0x3f, 0x66, 0x7d, 0xb4, 0xbb, - 0x6f, 0x87, 0x6f, 0x38, 0x08, 0x17, 0x9d, 0xa7, 0xbf, 0xd7, 0x8e, 0xbb, 0x34, 0xb7, 0x71, 0x54, - 0xb0, 0xd8, 0x54, 0xf0, 0xbc, 0x7b, 0xd9, 0xab, 0x30, 0x64, 0x3f, 0xb6, 0xa8, 0x23, 0x86, 0x08, - 0x8c, 0x3a, 0x02, 0x72, 0xd4, 0x11, 0x20, 0x14, 0x2e, 0x62, 0xf8, 0xf3, 0xb8, 0x74, 0x0f, 0xcc, - 0x6a, 0xbe, 0xe6, 0x52, 0x27, 0x5f, 0x72, 0xec, 0x5a, 0xd5, 0x55, 0x27, 0xf1, 0x6c, 0x5f, 0x69, - 0xd4, 0x53, 0x1a, 0x92, 0x3d, 0xf4, 0xa9, 0xf6, 0x5c, 0xea, 0xdc, 0x41, 0x1a, 0x49, 0xa6, 0xda, - 0x8d, 0x86, 0xfc, 0x5c, 0x81, 0x2b, 0x45, 0xbb, 0x52, 0x65, 0xdd, 0x02, 0x35, 0xf2, 0xa7, 0xa9, - 0x9c, 0x5e, 0x54, 0x96, 0xc6, 0x32, 0xaf, 0x35, 0xea, 0xa9, 0x57, 0x02, 0x8e, 0xb7, 0x7a, 0x2b, - 0xd7, 0x7a, 0x53, 0x87, 0x86, 0xb9, 0xc1, 0x33, 0x0e, 0x73, 0xf2, 0x60, 0x30, 0xf4, 0xdc, 0x07, - 0x83, 0xb1, 0xe7, 0x31, 0x18, 0xfc, 0x46, 0x81, 0x45, 0xd1, 0x62, 0x9b, 0x56, 0x29, 0xef, 0x50, - 0xd7, 0xae, 0x39, 0x45, 0x9a, 0x17, 0xa9, 0x51, 0xa1, 0x96, 0xe7, 0xaa, 0xb3, 0x68, 0xfb, 0x52, - 0x27, 0x4d, 0x39, 0xc1, 0x90, 0x93, 0xe8, 0x33, 0x57, 0x3e, 0xad, 0xa7, 0x22, 0x8d, 0x7a, 0x6a, - 0x21, 0x90, 0xdc, 0x89, 0x2e, 0xd7, 0x63, 0x9f, 0xdc, 0x83, 0x91, 0xa2, 0x43, 0xd9, 0x34, 0x8f, - 0x6d, 0x56, 0x7c, 0x35, 0x99, 0xe6, 0xe3, 0x7c, 0xda, 0x9f, 0xd3, 0xd3, 0x8f, 0xfc, 0xd7, 0x03, - 0x3e, 0xbd, 0x08, 0x72, 0x79, 0x7a, 0x11, 0x90, 0x3c, 0x02, 0x4d, 0x3c, 0x97, 0x11, 0x28, 0xf1, - 0x0c, 0x23, 0xd0, 0x0f, 0x20, 0x7e, 0x74, 0xdd, 0xcd, 0xfb, 0x06, 0x4d, 0xa1, 0xa8, 0xcb, 0x72, - 0x80, 0x83, 0x67, 0x0d, 0x16, 0x66, 0x61, 0x25, 0xef, 0x6c, 0x8f, 0xae, 0xbb, 0x9b, 0x6d, 0x26, - 0x42, 0x80, 0xb2, 0xa2, 0xc4, 0xa4, 0x0b, 0x6d, 0x2a, 0xe9, 0x9e, 0x28, 0xc2, 0xee, 0xa6, 0x5c, - 0xb1, 0x6e, 0x91, 0x2b, 0xd0, 0xf0, 0xe0, 0x36, 0x73, 0xd6, 0xc1, 0x8d, 0x6c, 0xc2, 0x14, 0x3f, - 0xb5, 0x9e, 0x57, 0xce, 0xbb, 0xb4, 0x68, 0x5b, 0x86, 0xab, 0xce, 0x2d, 0x2a, 0x4b, 0x51, 0xde, - 0x83, 0xe1, 0xe6, 0x23, 0xaf, 0xbc, 0xcb, 0xb7, 0xe4, 0x1e, 0xac, 0x65, 0xeb, 0xff, 0x33, 0xe0, - 0x53, 0xcf, 0x03, 0xff, 0x52, 0x60, 0x6e, 0x8b, 0x75, 0xb4, 0xa2, 0x3a, 0x99, 0x3f, 0xa6, 0x7e, - 0x6f, 0x24, 0x35, 0x64, 0xca, 0x19, 0x1a, 0xb2, 0x73, 0xbf, 0xce, 0xdf, 0x84, 0x31, 0x8b, 0x3e, - 0xce, 0xb7, 0x94, 0x5b, 0xbc, 0x39, 0x2d, 0xfa, 0x78, 0xa7, 0xbd, 0xe2, 0xc6, 0x25, 0x58, 0xfb, - 0xfd, 0x00, 0x5c, 0x68, 0x73, 0xd4, 0xad, 0xda, 0x96, 0x4b, 0xc9, 0x6f, 0x15, 0x50, 0x9d, 0x60, - 0x03, 0x3f, 0x31, 0xab, 0x79, 0xb5, 0xb2, 0xc7, 0x7d, 0x8f, 0xaf, 0xde, 0xf0, 0xaf, 0xd6, 0x4e, - 0x02, 0xd2, 0xb9, 0x16, 0xe6, 0x1c, 0xe7, 0xe5, 0x77, 0xee, 0xcb, 0x8d, 0x7a, 0xea, 0xb2, 0xd3, - 0x99, 0x42, 0xb2, 0xf6, 0x42, 0x17, 0x92, 0xa4, 0x03, 0x97, 0x4e, 0x93, 0x7f, 0x2e, 0x69, 0x61, - 0xc1, 0xac, 0x34, 0x1c, 0x71, 0x2f, 0xf1, 0xf1, 0xb2, 0x9f, 0x91, 0xe1, 0x2a, 0x0c, 0x51, 0xc7, - 0xb1, 0x1d, 0x59, 0x27, 0x02, 0x32, 0x29, 0x02, 0xda, 0x07, 0x38, 0x43, 0x85, 0xf5, 0x91, 0x03, - 0x20, 0x7c, 0x7e, 0xe3, 0x6b, 0x31, 0xc0, 0xf1, 0xef, 0x91, 0x6c, 0x1d, 0xe0, 0x02, 0x1b, 0x33, - 0x0b, 0x8d, 0x7a, 0x2a, 0x89, 0x63, 0x5a, 0x00, 0xca, 0x91, 0x4e, 0xb4, 0xee, 0x69, 0x7f, 0x1d, - 0x85, 0x21, 0xbc, 0xe2, 0xc9, 0x15, 0x18, 0xc4, 0xc1, 0x9f, 0x7b, 0x87, 0xc3, 0xaf, 0x15, 0x1e, - 0xfa, 0x71, 0x9f, 0x64, 0x61, 0xd2, 0x4f, 0xc4, 0xfc, 0xbe, 0x5e, 0xf4, 0x84, 0x97, 0x4a, 0xe6, - 0x52, 0xa3, 0x9e, 0x52, 0xfd, 0xad, 0xdb, 0xb8, 0x23, 0x31, 0x4f, 0x84, 0x77, 0xc8, 0x0d, 0x88, - 0x63, 0xa7, 0xc2, 0x1b, 0x17, 0x31, 0xc9, 0x61, 0xd5, 0x65, 0x30, 0x6f, 0x38, 0xe4, 0xaa, 0x1b, - 0xa0, 0xec, 0x38, 0x60, 0x7f, 0xe3, 0xf3, 0xf2, 0xa1, 0x09, 0x8f, 0x03, 0xe2, 0x6d, 0xcc, 0x71, - 0x09, 0x26, 0x25, 0x98, 0x6c, 0x5e, 0xea, 0x65, 0xb3, 0x62, 0x7a, 0xfe, 0x9b, 0xec, 0x02, 0x06, - 0x16, 0x83, 0xd1, 0xbc, 0xc5, 0xef, 0x23, 0x01, 0xcf, 0x66, 0x16, 0x5c, 0xd5, 0x09, 0x6d, 0x84, - 0x9a, 0x92, 0x89, 0xf0, 0x1e, 0xf9, 0x83, 0x02, 0x57, 0x5a, 0x34, 0xe5, 0x0b, 0x27, 0xcd, 0x53, - 0x9c, 0x2f, 0x96, 0x75, 0xd7, 0xe5, 0x8f, 0x2d, 0x23, 0xd2, 0x0b, 0x6d, 0x27, 0x03, 0x32, 0x27, - 0xfe, 0x69, 0x5e, 0x67, 0x4c, 0xdb, 0x7a, 0x85, 0x72, 0x9b, 0xae, 0x8a, 0xc6, 0xe2, 0xb2, 0xd3, - 0x8b, 0x3e, 0xd7, 0x9b, 0x84, 0xec, 0x42, 0xbc, 0x4a, 0x9d, 0x8a, 0xe9, 0xba, 0xd8, 0xbb, 0xf3, - 0x77, 0xe3, 0x39, 0xc9, 0xaa, 0x9d, 0x60, 0x97, 0xc7, 0x5b, 0x22, 0x97, 0xe3, 0x2d, 0xc1, 0xc9, - 0x7f, 0x2b, 0x10, 0x97, 0xf8, 0x48, 0x0e, 0x46, 0xdd, 0x5a, 0xe1, 0x90, 0x16, 0x9b, 0x15, 0x66, - 0xa1, 0xb3, 0x86, 0xf4, 0x2e, 0x27, 0x13, 0xdd, 0x83, 0xe0, 0x09, 0x75, 0x0f, 0x02, 0xc3, 0x33, - 0x4e, 0x9d, 0x02, 0x7f, 0x90, 0xf1, 0xcf, 0x38, 0x03, 0x42, 0x67, 0x9c, 0x01, 0xc9, 0x77, 0x61, - 0x44, 0xc8, 0x65, 0x19, 0x7f, 0x64, 0x5a, 0x86, 0x9c, 0xf1, 0x6c, 0x2d, 0x67, 0x3c, 0x5b, 0x37, - 0x4f, 0xc6, 0xc0, 0xe9, 0x27, 0x23, 0x69, 0xc2, 0x74, 0x87, 0xbc, 0x79, 0x8a, 0x2a, 0xa5, 0xf4, - 0xbc, 0x2b, 0x3f, 0x52, 0xe0, 0xca, 0xd9, 0x52, 0xe4, 0x6c, 0xea, 0xef, 0xc9, 0xea, 0xfd, 0x71, - 0x2a, 0x24, 0xb0, 0x45, 0x5b, 0xaf, 0x32, 0xfa, 0x8b, 0x21, 0xb8, 0x78, 0x0a, 0x3f, 0x6b, 0xb3, - 0xe7, 0x2b, 0xfa, 0x8f, 0xcc, 0x4a, 0xad, 0x12, 0xf4, 0xd8, 0xfb, 0x8e, 0x5e, 0x64, 0x45, 0x5e, - 0xe4, 0xc5, 0x77, 0x7a, 0x59, 0x91, 0x7e, 0xc0, 0x25, 0xf8, 0xe8, 0x6d, 0xc1, 0xcf, 0xcf, 0x46, - 0x4a, 0x9c, 0x8d, 0x0b, 0x95, 0xce, 0x54, 0xb9, 0x6e, 0x1b, 0xe4, 0x8f, 0x0a, 0x5c, 0xee, 0x6a, - 0x1c, 0x9e, 0x61, 0xdb, 0x2e, 0x63, 0xae, 0xc5, 0x57, 0xd7, 0x9f, 0xd6, 0xc8, 0xcc, 0xc9, 0x8e, - 0x6d, 0x97, 0xc5, 0x45, 0x29, 0x4c, 0x7d, 0xa1, 0x72, 0x1a, 0x6d, 0xee, 0xf4, 0x6d, 0x76, 0x5d, - 0x9e, 0x16, 0x90, 0xf3, 0x4a, 0x44, 0xad, 0xb7, 0x83, 0x67, 0x53, 0xfd, 0x30, 0x9c, 0x84, 0x2f, - 0xb5, 0x47, 0x16, 0xa3, 0xd0, 0x5f, 0x22, 0xfe, 0x69, 0x00, 0x52, 0x3d, 0x64, 0x90, 0x8f, 0xce, - 0x90, 0x8c, 0x6b, 0x67, 0xb1, 0xe6, 0x9c, 0x12, 0xf2, 0xeb, 0xf8, 0xb2, 0x5a, 0x16, 0x62, 0x58, - 0x92, 0xef, 0x9b, 0xae, 0x47, 0xae, 0xc3, 0x30, 0xb6, 0xa2, 0x7e, 0xc9, 0x86, 0xa0, 0x64, 0xf3, - 0xe6, 0x98, 0xef, 0xca, 0xcd, 0x31, 0x47, 0xb4, 0x3d, 0x20, 0xfc, 0xe1, 0xb1, 0x2c, 0xf5, 0x6f, - 0xe4, 0x16, 0x8c, 0x17, 0x39, 0x4a, 0x0d, 0xa9, 0xcf, 0xc6, 0x5f, 0x0d, 0x9a, 0x1b, 0xe1, 0x6e, - 0x7b, 0x4c, 0xc6, 0xb5, 0x1b, 0x30, 0x89, 0xda, 0xef, 0xd0, 0xe6, 0xc3, 0xf3, 0x19, 0x1b, 0x18, - 0xed, 0x16, 0xa8, 0xbb, 0x9e, 0x43, 0xf5, 0x8a, 0x69, 0x95, 0x5a, 0x65, 0xbc, 0x08, 0x51, 0xab, - 0x56, 0x41, 0x11, 0xe3, 0x3c, 0x90, 0x56, 0xad, 0x22, 0x07, 0xd2, 0xaa, 0x55, 0xb4, 0x37, 0x81, - 0x20, 0xdf, 0x06, 0x2d, 0x53, 0x8f, 0xf6, 0xab, 0xfe, 0x13, 0x05, 0x80, 0xbf, 0x54, 0x6e, 0x5a, - 0xfb, 0xf6, 0x99, 0xdb, 0xae, 0x1b, 0x10, 0xc7, 0x88, 0x1a, 0xf9, 0x43, 0x1b, 0x2f, 0x3a, 0x65, - 0x69, 0x88, 0xf7, 0x4b, 0x1c, 0xde, 0xb2, 0x43, 0xb7, 0x1d, 0x04, 0x28, 0x63, 0x2d, 0x53, 0xdd, - 0xf5, 0x59, 0xa3, 0x01, 0x2b, 0x87, 0x5b, 0x59, 0x03, 0x54, 0x7b, 0x0c, 0xd3, 0xe8, 0xea, 0x5e, - 0xd5, 0xd0, 0xbd, 0x60, 0x6c, 0x78, 0x43, 0x7e, 0xe3, 0x0f, 0x67, 0xc3, 0x69, 0x73, 0x4c, 0x1f, - 0x6d, 0x71, 0x0d, 0xd4, 0x8c, 0xee, 0x15, 0x0f, 0x3a, 0x69, 0x7f, 0x17, 0xc6, 0xf7, 0x75, 0xb3, - 0xec, 0xbf, 0x7d, 0xf9, 0x39, 0xa9, 0x06, 0x56, 0x84, 0x19, 0x78, 0x5a, 0x71, 0x96, 0xb7, 0x5a, - 0xf3, 0x74, 0x4c, 0xc6, 0x9b, 0xfe, 0xae, 0xe3, 0x1b, 0xc9, 0xd7, 0xe5, 0x6f, 0x8b, 0xf6, 0xde, - 0xfe, 0x86, 0x19, 0xfa, 0xf0, 0x37, 0x0e, 0xb1, 0xac, 0x65, 0x3c, 0xd0, 0x9d, 0x23, 0xea, 0x68, - 0x1f, 0x2a, 0x30, 0x1b, 0x3e, 0x19, 0x0f, 0xa8, 0xeb, 0xea, 0x25, 0x4a, 0xbe, 0xd5, 0x9f, 0xff, - 0x77, 0x23, 0xc1, 0x43, 0x74, 0x94, 0x5a, 0x86, 0x28, 0xe8, 0x13, 0xc8, 0xd6, 0xd4, 0xc7, 0xcf, - 0x17, 0x95, 0x1b, 0xae, 0xbb, 0x91, 0x1c, 0xa3, 0xcf, 0x8c, 0xc0, 0x10, 0x3d, 0xa6, 0x96, 0xb7, - 0x9c, 0x84, 0xb8, 0xf4, 0x2b, 0x2c, 0x89, 0xc3, 0x88, 0x58, 0x26, 0x22, 0xcb, 0x57, 0x21, 0x2e, - 0xfd, 0x5c, 0x47, 0xc6, 0x60, 0x74, 0xdb, 0x36, 0xe8, 0x8e, 0xed, 0x78, 0x89, 0x08, 0x5b, 0xdd, - 0xa5, 0xba, 0x51, 0x66, 0xa4, 0xca, 0xf2, 0xc7, 0x0a, 0x8c, 0xfa, 0x4f, 0xff, 0x04, 0x60, 0xf8, - 0xad, 0xbd, 0xec, 0x5e, 0x76, 0x23, 0x11, 0x61, 0x02, 0x77, 0xb2, 0xdb, 0x1b, 0x9b, 0xdb, 0x77, - 0x12, 0x0a, 0x5b, 0xe4, 0xf6, 0xb6, 0xb7, 0xd9, 0x62, 0x80, 0x8c, 0x43, 0x6c, 0x77, 0x6f, 0x7d, - 0x3d, 0x9b, 0xdd, 0xc8, 0x6e, 0x24, 0xa2, 0x8c, 0xe9, 0xf6, 0xda, 0xe6, 0xfd, 0xec, 0x46, 0x62, - 0x90, 0xd1, 0xed, 0x6d, 0xdf, 0xdb, 0x7e, 0xf8, 0xce, 0x76, 0x62, 0x88, 0xd3, 0x65, 0x1e, 0x6c, - 0x3e, 0x7a, 0x94, 0xdd, 0x48, 0x0c, 0x33, 0xba, 0xfb, 0xd9, 0xb5, 0xdd, 0xec, 0x46, 0x62, 0x84, - 0x6d, 0xed, 0xe4, 0xb2, 0xd9, 0x07, 0x3b, 0x6c, 0x6b, 0x94, 0x2d, 0xd7, 0xd7, 0xb6, 0xd7, 0xb3, - 0xf7, 0x99, 0x94, 0x18, 0xb3, 0x30, 0x97, 0xdd, 0xca, 0xae, 0xb3, 0x4d, 0x58, 0xfd, 0x73, 0x14, - 0xc6, 0x30, 0xa0, 0xfe, 0xd3, 0xd2, 0xeb, 0x10, 0xe7, 0x5f, 0x95, 0x4f, 0x67, 0x52, 0xc8, 0x93, - 0x73, 0x6d, 0x8f, 0x7e, 0x59, 0x16, 0x3c, 0x2d, 0x42, 0x6e, 0xc1, 0x98, 0xc4, 0xe4, 0x92, 0x89, - 0x80, 0x8b, 0x95, 0xf1, 0xe4, 0x0b, 0xb8, 0xee, 0x96, 0x68, 0x5a, 0x84, 0x69, 0xe5, 0x67, 0xa7, - 0x4f, 0xad, 0x12, 0x53, 0x6f, 0xad, 0xe1, 0xd3, 0xa9, 0x45, 0xc8, 0x77, 0x21, 0xce, 0x6b, 0x29, - 0xd7, 0x7a, 0x21, 0xe0, 0x0f, 0x95, 0xd8, 0x53, 0x4c, 0x48, 0xc3, 0xe8, 0x1d, 0xea, 0x71, 0xf6, - 0x99, 0x80, 0x3d, 0xa8, 0xec, 0x49, 0xc9, 0x15, 0x2d, 0x42, 0xb6, 0x20, 0xe6, 0xd3, 0xbb, 0x84, - 0xdb, 0xd7, 0xed, 0x4e, 0x48, 0x26, 0x3b, 0x6c, 0x8b, 0x83, 0xa1, 0x45, 0x5e, 0x53, 0x56, 0x7f, - 0x15, 0x83, 0x61, 0x3e, 0x8b, 0x93, 0xb7, 0x01, 0xf8, 0x5f, 0x58, 0x77, 0x67, 0x3b, 0xfe, 0xd4, - 0x9a, 0x9c, 0xeb, 0x3c, 0xc0, 0x6b, 0xf3, 0x3f, 0xfb, 0xcb, 0x3f, 0x7e, 0x3d, 0x30, 0xad, 0x4d, - 0xac, 0x1c, 0x5f, 0x5b, 0x39, 0xb4, 0x0b, 0xe2, 0x1f, 0xc9, 0x6e, 0x2a, 0xcb, 0xe4, 0x1d, 0x00, - 0x7e, 0x89, 0x86, 0xe5, 0x86, 0x7e, 0xd1, 0x4b, 0xf2, 0xb0, 0xb5, 0x5f, 0xb6, 0xed, 0x82, 0xf9, - 0x4d, 0xca, 0x04, 0xff, 0x10, 0xc6, 0x9a, 0x82, 0x77, 0xa9, 0x47, 0x54, 0xe9, 0x47, 0xba, 0xb0, - 0xf4, 0x6e, 0xb1, 0xbf, 0x84, 0xc2, 0xe7, 0xb4, 0x29, 0x21, 0xdc, 0xa5, 0x9e, 0x24, 0xdf, 0x82, - 0x84, 0xfc, 0x6c, 0x84, 0xe6, 0x5f, 0xec, 0xfc, 0xa0, 0xc4, 0xd5, 0x5c, 0x3a, 0xed, 0xb5, 0x49, - 0x4b, 0xa1, 0xb2, 0x79, 0x6d, 0xc6, 0xf7, 0x44, 0x7a, 0x39, 0xa2, 0x4c, 0xdf, 0xbb, 0x10, 0x17, - 0x3f, 0x47, 0xa3, 0xaa, 0x66, 0xa8, 0xc3, 0xbf, 0x51, 0x77, 0x75, 0x26, 0x89, 0xf2, 0x67, 0xb4, - 0x49, 0x5f, 0x7e, 0x95, 0xf3, 0x31, 0xd1, 0x77, 0xfa, 0x3f, 0x90, 0x33, 0x28, 0x6e, 0x42, 0x8b, - 0x31, 0x71, 0x58, 0x10, 0x99, 0xa0, 0xe2, 0xb3, 0x1d, 0xd2, 0x97, 0x50, 0xe8, 0x82, 0x36, 0xcf, - 0x84, 0x16, 0x18, 0x15, 0x35, 0x56, 0xf8, 0x9b, 0xbe, 0xb8, 0x1f, 0x98, 0x92, 0xed, 0xfe, 0x0f, - 0xf2, 0x45, 0x14, 0x3c, 0x9b, 0x4c, 0x34, 0xad, 0x5d, 0xf9, 0x09, 0x6b, 0x3d, 0x3e, 0x10, 0x46, - 0x3f, 0xcb, 0x19, 0x17, 0x46, 0x27, 0x43, 0x46, 0xd7, 0x90, 0x46, 0x32, 0xfa, 0x7b, 0xcf, 0x58, - 0x07, 0x54, 0xd4, 0x42, 0x96, 0xdb, 0x3c, 0x20, 0xb7, 0xfb, 0xaa, 0x0f, 0x42, 0x0e, 0x69, 0x97, - 0x63, 0x3c, 0xa7, 0xba, 0x21, 0x12, 0x8d, 0x10, 0x39, 0x1e, 0x3c, 0x10, 0xaf, 0x29, 0xe4, 0x26, - 0x0c, 0xdf, 0xc5, 0x7f, 0xa8, 0x24, 0x5d, 0x3c, 0x4d, 0xf2, 0x73, 0xca, 0x89, 0xd6, 0x0f, 0x68, - 0xf1, 0xa8, 0x79, 0xf7, 0xbf, 0xf7, 0xf9, 0x17, 0x0b, 0x91, 0x9f, 0x3e, 0x59, 0x50, 0x3e, 0x7d, - 0xb2, 0xa0, 0x7c, 0xf6, 0x64, 0x41, 0xf9, 0xfb, 0x93, 0x05, 0xe5, 0xc3, 0x2f, 0x17, 0x22, 0x9f, - 0x7d, 0xb9, 0x10, 0xf9, 0xfc, 0xcb, 0x85, 0xc8, 0xf7, 0xbf, 0x21, 0xfd, 0x8f, 0xa7, 0xee, 0x54, - 0x74, 0x43, 0xaf, 0x3a, 0xf6, 0x21, 0x2d, 0x7a, 0x62, 0xb5, 0x22, 0xfe, 0xa9, 0xf3, 0x93, 0x81, - 0x99, 0x35, 0x04, 0x76, 0xf8, 0x76, 0x7a, 0xd3, 0x4e, 0xaf, 0x55, 0xcd, 0xc2, 0x30, 0xda, 0xf2, - 0xfa, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x2e, 0x6d, 0xc0, 0x75, 0xf1, 0x2a, 0x00, 0x00, + 0x15, 0xe7, 0x8a, 0xfa, 0xe2, 0xa3, 0x3e, 0xa8, 0xb1, 0x24, 0xaf, 0x68, 0x47, 0x94, 0x37, 0x89, + 0x23, 0x2b, 0x0e, 0x19, 0x2b, 0x0d, 0x6a, 0xbb, 0x29, 0x5c, 0x91, 0xa2, 0x6d, 0xc9, 0x36, 0xad, + 0x50, 0x56, 0xd2, 0x14, 0x45, 0x99, 0x25, 0x77, 0x44, 0xad, 0x44, 0xee, 0x32, 0xbb, 0x4b, 0xb9, + 0x6a, 0x11, 0xa0, 0x28, 0x0a, 0xf4, 0xd0, 0x4b, 0xd0, 0x1e, 0x0b, 0x34, 0x05, 0xda, 0x53, 0x7a, + 0x2e, 0x50, 0x14, 0xfd, 0x03, 0x7a, 0x0c, 0xd0, 0x4b, 0x8a, 0x02, 0x44, 0xeb, 0xb4, 0x0d, 0xc0, + 0x5b, 0xef, 0x3d, 0x14, 0xf3, 0x66, 0x97, 0x3b, 0xcb, 0x0f, 0x91, 0xb4, 0xad, 0xe4, 0xd2, 0x9b, + 0xe6, 0x37, 0xef, 0x7b, 0xdf, 0xbc, 0x79, 0x6f, 0x28, 0x98, 0xaf, 0x1d, 0x95, 0x53, 0x6a, 0x4d, + 0x4f, 0xd9, 0xf5, 0x62, 0x55, 0x77, 0x92, 0x35, 0xcb, 0x74, 0x4c, 0x12, 0x56, 0x6b, 0x7a, 0xfc, + 0x42, 0xd9, 0x34, 0xcb, 0x15, 0x9a, 0x42, 0xa8, 0x58, 0xdf, 0x4f, 0xd1, 0x6a, 0xcd, 0x39, 0xe1, + 0x14, 0xf1, 0x44, 0xfb, 0xa6, 0xa3, 0x57, 0xa9, 0xed, 0xa8, 0xd5, 0x9a, 0x4b, 0xa0, 0x1c, 0x5d, + 0xb7, 0x93, 0xba, 0x89, 0xb2, 0x4b, 0xa6, 0x45, 0x53, 0xc7, 0xd7, 0x52, 0x65, 0x6a, 0x50, 0x4b, + 0x75, 0xa8, 0xe6, 0xd2, 0xac, 0x0a, 0x34, 0x06, 0x75, 0x1e, 0x9b, 0xd6, 0x91, 0x6e, 0x94, 0xbb, + 0x51, 0x5e, 0x74, 0xd5, 0x31, 0x4a, 0xd5, 0x30, 0x4c, 0x47, 0x75, 0x74, 0xd3, 0xb0, 0xdd, 0xdd, + 0xd7, 0xca, 0xba, 0x73, 0x50, 0x2f, 0x26, 0x4b, 0x66, 0x35, 0x55, 0x36, 0xcb, 0xa6, 0x6f, 0x15, + 0x5b, 0xe1, 0x02, 0xff, 0x72, 0xc9, 0x5b, 0x3e, 0x1f, 0x50, 0xb5, 0xe2, 0x1c, 0x70, 0x54, 0xf9, + 0x38, 0x02, 0xf3, 0xdb, 0x66, 0x71, 0x17, 0xe3, 0x90, 0xa7, 0x1f, 0xd4, 0xa9, 0xed, 0x6c, 0x39, + 0xb4, 0x4a, 0xd6, 0x61, 0xb2, 0x66, 0xe9, 0xa6, 0xa5, 0x3b, 0x27, 0xb2, 0xb4, 0x22, 0xad, 0x4a, + 0xe9, 0xc5, 0x66, 0x23, 0x41, 0x3c, 0xec, 0xaa, 0x59, 0xd5, 0x1d, 0x0c, 0x4d, 0xbe, 0x45, 0x47, + 0xde, 0x84, 0x88, 0xa1, 0x56, 0xa9, 0x5d, 0x53, 0x4b, 0x54, 0x0e, 0xaf, 0x48, 0xab, 0x91, 0xf4, + 0xf9, 0x66, 0x23, 0x71, 0xae, 0x05, 0x0a, 0x5c, 0x3e, 0x25, 0x79, 0x03, 0x22, 0xa5, 0x8a, 0x4e, + 0x0d, 0xa7, 0xa0, 0x6b, 0xf2, 0x24, 0xb2, 0xa1, 0x2e, 0x0e, 0x6e, 0x69, 0xa2, 0x2e, 0x0f, 0x23, + 0xbb, 0x30, 0x5e, 0x51, 0x8b, 0xb4, 0x62, 0xcb, 0xa3, 0x2b, 0xe1, 0xd5, 0xe8, 0xfa, 0xcb, 0x49, + 0xb5, 0xa6, 0x27, 0xbb, 0xb9, 0x92, 0xbc, 0x8f, 0x74, 0x59, 0xc3, 0xb1, 0x4e, 0xd2, 0xf3, 0xcd, + 0x46, 0x22, 0xc6, 0x19, 0x05, 0xb1, 0xae, 0x28, 0x52, 0x86, 0xa8, 0x10, 0x67, 0x79, 0x0c, 0x25, + 0xaf, 0xf5, 0x96, 0xbc, 0xe1, 0x13, 0x73, 0xf1, 0x4b, 0xcd, 0x46, 0x62, 0x41, 0x10, 0x21, 0xe8, + 0x10, 0x25, 0x93, 0x9f, 0x4a, 0x30, 0x6f, 0xd1, 0x0f, 0xea, 0xba, 0x45, 0xb5, 0x82, 0x61, 0x6a, + 0xb4, 0xe0, 0x3a, 0x33, 0x8e, 0x2a, 0xaf, 0xf5, 0x56, 0x99, 0x77, 0xb9, 0x72, 0xa6, 0x46, 0x45, + 0xc7, 0x94, 0x66, 0x23, 0x71, 0xd1, 0xea, 0xd8, 0xf4, 0x0d, 0x90, 0xa5, 0x3c, 0xe9, 0xdc, 0x27, + 0x0f, 0x61, 0xb2, 0x66, 0x6a, 0x05, 0xbb, 0x46, 0x4b, 0xf2, 0xc8, 0x8a, 0xb4, 0x1a, 0x5d, 0xbf, + 0x90, 0xe4, 0x09, 0x8a, 0x36, 0xb0, 0x24, 0x4e, 0x1e, 0x5f, 0x4b, 0xee, 0x98, 0xda, 0x6e, 0x8d, + 0x96, 0xf0, 0x7b, 0xce, 0xd5, 0xf8, 0x22, 0x20, 0x7b, 0xc2, 0x05, 0xc9, 0x0e, 0x44, 0x3c, 0x81, + 0xb6, 0x3c, 0x81, 0xee, 0x9c, 0x2a, 0x91, 0xa7, 0x15, 0x5f, 0xd8, 0x81, 0xb4, 0x72, 0x31, 0x92, + 0x81, 0x09, 0xdd, 0x28, 0x5b, 0xd4, 0xb6, 0xe5, 0x08, 0xca, 0x23, 0x28, 0x68, 0x8b, 0x63, 0x19, + 0xd3, 0xd8, 0xd7, 0xcb, 0xe9, 0x05, 0x66, 0x98, 0x4b, 0x26, 0x48, 0xf1, 0x38, 0xc9, 0x6d, 0x98, + 0xb4, 0xa9, 0x75, 0xac, 0x97, 0xa8, 0x2d, 0x83, 0x20, 0x65, 0x97, 0x83, 0xae, 0x14, 0x34, 0xc6, + 0xa3, 0x13, 0x8d, 0xf1, 0x30, 0x96, 0xe3, 0x76, 0xe9, 0x80, 0x6a, 0xf5, 0x0a, 0xb5, 0xe4, 0xa8, + 0x9f, 0xe3, 0x2d, 0x50, 0xcc, 0xf1, 0x16, 0x18, 0x57, 0x21, 0x2a, 0x7c, 0x2d, 0xf2, 0x22, 0x84, + 0x8f, 0x28, 0x3f, 0x58, 0x91, 0xf4, 0x5c, 0xb3, 0x91, 0x98, 0x3e, 0xa2, 0xe2, 0x99, 0x62, 0xbb, + 0xe4, 0x0a, 0x8c, 0x1d, 0xab, 0x95, 0x3a, 0xc5, 0xef, 0x12, 0x49, 0x9f, 0x6b, 0x36, 0x12, 0xb3, + 0x08, 0x08, 0x84, 0x9c, 0xe2, 0xe6, 0xc8, 0x75, 0x29, 0xbe, 0x0f, 0xb1, 0xf6, 0x7c, 0x3c, 0x13, + 0x3d, 0x55, 0x38, 0xdf, 0x23, 0x09, 0xcf, 0x42, 0x9d, 0xf2, 0x9f, 0x30, 0x4c, 0x07, 0x3e, 0x35, + 0xb9, 0x09, 0xa3, 0xce, 0x49, 0x8d, 0xa2, 0x9a, 0x99, 0xf5, 0x98, 0x98, 0x0c, 0x8f, 0x4e, 0x6a, + 0x14, 0xcf, 0xf8, 0x0c, 0xa3, 0x08, 0x24, 0x28, 0xf2, 0x30, 0xe5, 0x35, 0xd3, 0x72, 0x6c, 0x79, + 0x64, 0x25, 0xbc, 0x3a, 0xcd, 0x95, 0x23, 0x20, 0x2a, 0x47, 0x80, 0xbc, 0x1f, 0x2c, 0x06, 0x61, + 0x4c, 0x9a, 0x17, 0x3b, 0x53, 0xef, 0xe9, 0xab, 0xc0, 0x0d, 0x88, 0x3a, 0x15, 0xbb, 0x40, 0x0d, + 0xb5, 0x58, 0xa1, 0x9a, 0x3c, 0xba, 0x22, 0xad, 0x4e, 0xa6, 0xe5, 0x66, 0x23, 0x31, 0xef, 0xb0, + 0x88, 0x22, 0x2a, 0xf0, 0x82, 0x8f, 0x62, 0xcd, 0xa4, 0x96, 0x53, 0x60, 0x55, 0x54, 0x1e, 0x13, + 0x6a, 0x26, 0xb5, 0x9c, 0x9c, 0x5a, 0xa5, 0x81, 0x9a, 0xe9, 0x62, 0xe4, 0x16, 0x4c, 0xd7, 0x6d, + 0x5a, 0x28, 0x55, 0xea, 0xb6, 0x43, 0xad, 0xad, 0x1d, 0x79, 0x1c, 0x35, 0xc6, 0x9b, 0x8d, 0xc4, + 0x62, 0xdd, 0xa6, 0x19, 0x0f, 0x17, 0x98, 0xa7, 0x44, 0xfc, 0xcb, 0x4a, 0x31, 0xc5, 0x81, 0xe9, + 0xc0, 0xb9, 0x24, 0xd7, 0xbb, 0x7c, 0x72, 0x97, 0x02, 0x3f, 0x39, 0xe9, 0xfc, 0xe4, 0x43, 0x7f, + 0x70, 0xe5, 0xaf, 0x12, 0xc4, 0xda, 0x6b, 0x2e, 0xe3, 0xff, 0xa0, 0x4e, 0xeb, 0xd4, 0x75, 0x10, + 0xf9, 0x11, 0x10, 0xf9, 0x11, 0x20, 0x5f, 0x03, 0x38, 0x34, 0x8b, 0x05, 0x9b, 0xe2, 0x45, 0x36, + 0xe2, 0x7f, 0x94, 0x43, 0xb3, 0xb8, 0x4b, 0xdb, 0x2e, 0x32, 0x0f, 0x23, 0x1a, 0xcc, 0x31, 0x2e, + 0x8b, 0xeb, 0x2b, 0x30, 0x02, 0x2f, 0xd9, 0x96, 0x7a, 0x5e, 0x03, 0xe9, 0x17, 0x9a, 0x8d, 0xc4, + 0xd2, 0xa1, 0x59, 0x14, 0x30, 0xd1, 0xa3, 0xd9, 0xb6, 0x2d, 0xe5, 0x37, 0x12, 0xcc, 0x6d, 0x9b, + 0xc5, 0x1d, 0x8b, 0x32, 0x82, 0x2f, 0xcd, 0xb9, 0xd7, 0x60, 0x82, 0x71, 0xe9, 0x1a, 0x77, 0x29, + 0xc2, 0xef, 0xdf, 0x43, 0xb3, 0xb8, 0xa5, 0x05, 0xee, 0x5f, 0x8e, 0x28, 0xff, 0xe5, 0x5f, 0x20, + 0xa3, 0x1a, 0x25, 0x5a, 0xf1, 0x8c, 0x5c, 0x83, 0x71, 0x2e, 0x43, 0xb4, 0x12, 0x19, 0x44, 0x2b, + 0x11, 0x78, 0x4a, 0x2b, 0x5b, 0x61, 0x08, 0xf7, 0x0d, 0x83, 0xe0, 0xd0, 0x68, 0x7f, 0x87, 0xc8, + 0x55, 0x18, 0xb7, 0xa8, 0x6a, 0x9b, 0x86, 0x7b, 0x46, 0x91, 0x9a, 0x23, 0x22, 0x35, 0x47, 0x94, + 0x7f, 0x49, 0x70, 0x6e, 0x1b, 0x8d, 0x0a, 0x46, 0x20, 0xe8, 0x95, 0x34, 0xac, 0x57, 0x23, 0x7d, + 0xbd, 0xba, 0x05, 0xe3, 0xfb, 0x7a, 0xc5, 0xa1, 0x16, 0x46, 0x20, 0xba, 0x3e, 0xd7, 0x4a, 0x3c, + 0xea, 0xdc, 0xc6, 0x0d, 0x6e, 0x39, 0x27, 0x12, 0x2d, 0xe7, 0x88, 0xe0, 0xe7, 0xe8, 0x00, 0x7e, + 0xde, 0x83, 0x29, 0x51, 0x36, 0xf9, 0x06, 0x8c, 0xdb, 0x8e, 0xea, 0x50, 0x5b, 0x96, 0x56, 0xc2, + 0xab, 0x33, 0xeb, 0xd3, 0x2d, 0xf5, 0x0c, 0xe5, 0xc2, 0x38, 0x81, 0x28, 0x8c, 0x23, 0xca, 0x17, + 0xb3, 0x10, 0xde, 0x36, 0x8b, 0x64, 0x05, 0x46, 0x5a, 0xc1, 0x89, 0x35, 0x1b, 0x89, 0x29, 0x5d, + 0x0c, 0xcb, 0x88, 0xae, 0x05, 0xfb, 0xcc, 0xe9, 0x01, 0xfb, 0xcc, 0x33, 0xcf, 0xa8, 0x40, 0xd3, + 0x3c, 0x31, 0x70, 0xd3, 0x9c, 0x6e, 0xf5, 0xbf, 0xbc, 0x27, 0x9a, 0xf7, 0x62, 0x36, 0x44, 0xbb, + 0xfb, 0x4e, 0xf0, 0x86, 0x83, 0x60, 0xd1, 0x79, 0xfa, 0x7b, 0xed, 0xb8, 0x47, 0x73, 0x1b, 0x45, + 0x05, 0x2b, 0x2d, 0x05, 0xcf, 0xbb, 0x97, 0xbd, 0x02, 0x63, 0xe6, 0x63, 0x83, 0x5a, 0xee, 0x10, + 0x81, 0x51, 0x47, 0x40, 0x8c, 0x3a, 0x02, 0x84, 0xc2, 0x05, 0x0c, 0x7f, 0x01, 0x97, 0xf6, 0x81, + 0x5e, 0x2b, 0xd4, 0x6d, 0x6a, 0x15, 0xca, 0x96, 0x59, 0xaf, 0xd9, 0xf2, 0x2c, 0x9e, 0xed, 0xcb, + 0xcd, 0x46, 0x42, 0x41, 0xb2, 0x87, 0x1e, 0xd5, 0x9e, 0x4d, 0xad, 0x3b, 0x48, 0x23, 0xc8, 0x94, + 0x7b, 0xd1, 0x90, 0x9f, 0x48, 0x70, 0xb9, 0x64, 0x56, 0x6b, 0xac, 0x5b, 0xa0, 0x5a, 0xe1, 0x34, + 0x95, 0xe7, 0x56, 0xa4, 0xd5, 0xa9, 0xf4, 0xeb, 0xcd, 0x46, 0xe2, 0xaa, 0xcf, 0xf1, 0x76, 0x7f, + 0xe5, 0x4a, 0x7f, 0xea, 0xc0, 0x30, 0x37, 0x3a, 0xe0, 0x30, 0x27, 0x0e, 0x06, 0x63, 0xcf, 0x7d, + 0x30, 0x98, 0x7a, 0x1e, 0x83, 0xc1, 0xaf, 0x25, 0x58, 0x71, 0x5b, 0x6c, 0xdd, 0x28, 0x17, 0x2c, + 0x6a, 0x9b, 0x75, 0xab, 0x44, 0x0b, 0x6e, 0x6a, 0x54, 0xa9, 0xe1, 0xd8, 0xf2, 0x02, 0xda, 0xbe, + 0xda, 0x4d, 0x53, 0xde, 0x65, 0xc8, 0x0b, 0xf4, 0xe9, 0xab, 0xcd, 0x46, 0x62, 0xd5, 0x97, 0xda, + 0x8d, 0x46, 0x30, 0x66, 0xf9, 0x74, 0x4a, 0x72, 0x0f, 0x26, 0x4a, 0x16, 0x65, 0x33, 0x3d, 0x36, + 0x5b, 0xd1, 0xf5, 0x78, 0x92, 0x0f, 0xf5, 0x49, 0x6f, 0x5a, 0x4f, 0x3e, 0xf2, 0xde, 0x10, 0xf8, + 0x0c, 0xe3, 0x92, 0x8b, 0x33, 0x8c, 0x0b, 0x89, 0x83, 0xd0, 0xcc, 0x73, 0x19, 0x84, 0x62, 0xcf, + 0x30, 0x08, 0x7d, 0x17, 0xa2, 0x47, 0xd7, 0xed, 0x82, 0x67, 0xd0, 0x1c, 0x8a, 0xba, 0x24, 0x86, + 0xd9, 0x7f, 0xdc, 0x60, 0xc1, 0x76, 0xad, 0xe4, 0xfd, 0xed, 0xd1, 0x75, 0x7b, 0xab, 0xc3, 0x44, + 0xf0, 0x51, 0x56, 0x9a, 0x98, 0x74, 0x57, 0x9b, 0x4c, 0x7a, 0xa7, 0x8b, 0x6b, 0x77, 0x4b, 0xae, + 0xbb, 0x6e, 0x93, 0xeb, 0xa2, 0xc1, 0xf1, 0x6d, 0x7e, 0xd0, 0xf1, 0x8d, 0x6c, 0xc1, 0x1c, 0x3f, + 0xbb, 0x8e, 0x53, 0x29, 0xd8, 0xb4, 0x64, 0x1a, 0x9a, 0x2d, 0x2f, 0xae, 0x48, 0xab, 0x61, 0xde, + 0x89, 0xe1, 0xe6, 0x23, 0xa7, 0xb2, 0xcb, 0xb7, 0xc4, 0x4e, 0xac, 0x6d, 0xeb, 0xff, 0x93, 0xe0, + 0x53, 0x4f, 0x05, 0xff, 0x96, 0x60, 0x71, 0x9b, 0xf5, 0xb5, 0x6e, 0x8d, 0xd2, 0x7f, 0x40, 0xbd, + 0x0e, 0x49, 0x68, 0xcb, 0xa4, 0x01, 0xda, 0xb2, 0x33, 0xbf, 0xd4, 0xdf, 0x82, 0x29, 0x83, 0x3e, + 0x2e, 0xb4, 0x15, 0x5d, 0xbc, 0x3f, 0x0d, 0xfa, 0x78, 0xa7, 0xb3, 0xee, 0x46, 0x05, 0x58, 0xf9, + 0xdd, 0x08, 0x9c, 0xef, 0x70, 0xd4, 0xae, 0x99, 0x86, 0x4d, 0xc9, 0x2f, 0x25, 0x90, 0x2d, 0x7f, + 0x03, 0x3f, 0x31, 0xab, 0x7c, 0xf5, 0x8a, 0xc3, 0x7d, 0x8f, 0xae, 0xdf, 0xf0, 0x2e, 0xd8, 0x6e, + 0x02, 0x92, 0xf9, 0x36, 0xe6, 0x3c, 0xe7, 0xe5, 0x37, 0xef, 0xcb, 0xcd, 0x46, 0xe2, 0x92, 0xd5, + 0x9d, 0x42, 0xb0, 0xf6, 0x7c, 0x0f, 0x92, 0xb8, 0x05, 0x17, 0x4f, 0x93, 0x7f, 0x26, 0x69, 0x61, + 0xc0, 0x82, 0x30, 0x22, 0x71, 0x2f, 0xf1, 0x09, 0x73, 0x98, 0xc1, 0xe1, 0x0a, 0x8c, 0x51, 0xcb, + 0x32, 0x2d, 0x51, 0x27, 0x02, 0x22, 0x29, 0x02, 0xca, 0x87, 0x38, 0x49, 0x05, 0xf5, 0x91, 0x03, + 0x20, 0x7c, 0x8a, 0xe3, 0x6b, 0x77, 0x8c, 0xe3, 0xdf, 0x23, 0xde, 0x3e, 0xc6, 0xf9, 0x36, 0xa6, + 0x97, 0x9b, 0x8d, 0x44, 0x1c, 0x87, 0x35, 0x1f, 0x14, 0x23, 0x1d, 0x6b, 0xdf, 0x53, 0xfe, 0x36, + 0x09, 0x63, 0x78, 0xd1, 0x93, 0xcb, 0x30, 0x8a, 0xe3, 0x3f, 0xf7, 0x0e, 0x47, 0x60, 0x23, 0x38, + 0xfa, 0xe3, 0x3e, 0xc9, 0xc2, 0xac, 0x97, 0x88, 0x85, 0x7d, 0xb5, 0xe4, 0xb8, 0x5e, 0x4a, 0xe9, + 0x8b, 0xcd, 0x46, 0x42, 0xf6, 0xb6, 0x6e, 0xe3, 0x8e, 0xc0, 0x3c, 0x13, 0xdc, 0x21, 0x37, 0x20, + 0x8a, 0xfd, 0x0a, 0x6f, 0x5f, 0xdc, 0x79, 0x0e, 0xab, 0x2e, 0x83, 0x79, 0xdb, 0x21, 0x56, 0x5d, + 0x1f, 0x65, 0xc7, 0x01, 0xbb, 0x1c, 0x8f, 0x97, 0x8f, 0x4e, 0x78, 0x1c, 0x10, 0xef, 0x60, 0x8e, + 0x0a, 0x30, 0x29, 0xc3, 0x6c, 0xeb, 0x6a, 0xaf, 0xe8, 0x55, 0xdd, 0xf1, 0x5e, 0x66, 0x97, 0x31, + 0xb0, 0x18, 0x8c, 0xd6, 0x5d, 0x7e, 0x1f, 0x09, 0x78, 0x36, 0xb3, 0xe0, 0xca, 0x56, 0x60, 0x23, + 0xd0, 0x9a, 0xcc, 0x04, 0xf7, 0xc8, 0xef, 0x25, 0xb8, 0xdc, 0xa6, 0xa9, 0x50, 0x3c, 0x69, 0x9d, + 0xe2, 0x42, 0xa9, 0xa2, 0xda, 0x36, 0x7f, 0x72, 0x99, 0x10, 0xde, 0x69, 0xbb, 0x19, 0x90, 0x3e, + 0xf1, 0x4e, 0x73, 0x86, 0x31, 0xe5, 0xd4, 0x2a, 0xe5, 0x36, 0xa5, 0x9a, 0x8d, 0xc4, 0xab, 0x56, + 0x3f, 0x5a, 0x21, 0x14, 0x97, 0xfa, 0x12, 0x93, 0x5d, 0x88, 0xd6, 0xa8, 0x55, 0xd5, 0x6d, 0x1b, + 0xfb, 0x78, 0xfe, 0x86, 0xbc, 0x28, 0xd8, 0xb6, 0xe3, 0xef, 0xf2, 0xa8, 0x0b, 0xe4, 0x62, 0xd4, + 0x05, 0x38, 0xfe, 0x85, 0x04, 0x51, 0x81, 0x8f, 0xe4, 0x61, 0xd2, 0xae, 0x17, 0x0f, 0x69, 0xa9, + 0x55, 0x67, 0x96, 0xbb, 0x6b, 0x48, 0xee, 0x72, 0x32, 0xb7, 0x87, 0x70, 0x79, 0x02, 0x3d, 0x84, + 0x8b, 0xe1, 0x49, 0xa7, 0x56, 0x91, 0x3f, 0xce, 0x78, 0x27, 0x9d, 0x01, 0x81, 0x93, 0xce, 0x80, + 0xf8, 0x7b, 0x30, 0xe1, 0xca, 0x65, 0x79, 0x7f, 0xa4, 0x1b, 0x9a, 0x98, 0xf7, 0x6c, 0x2d, 0xe6, + 0x3d, 0x5b, 0xb7, 0xce, 0xc7, 0xc8, 0xe9, 0xe7, 0x23, 0xae, 0xc3, 0xb9, 0x2e, 0xd9, 0xf3, 0x14, + 0xb5, 0x4a, 0xea, 0x7b, 0x63, 0xfe, 0x4a, 0x82, 0xcb, 0x83, 0x25, 0xca, 0x60, 0xea, 0xef, 0x89, + 0xea, 0xbd, 0xd1, 0x2a, 0x20, 0xb0, 0x4d, 0x5b, 0xbf, 0x62, 0xfa, 0xf3, 0x31, 0xb8, 0x70, 0x0a, + 0x3f, 0x6b, 0xb9, 0x97, 0xaa, 0xea, 0xf7, 0xf5, 0x6a, 0xbd, 0xea, 0xf7, 0xdb, 0xfb, 0x96, 0x5a, + 0x62, 0xa5, 0xde, 0xcd, 0x8b, 0x6f, 0xf6, 0xb3, 0x22, 0xf9, 0x80, 0x4b, 0xf0, 0xd0, 0xdb, 0x2e, + 0xbf, 0x70, 0x07, 0x55, 0xbb, 0x53, 0x88, 0x77, 0x50, 0x0f, 0x12, 0xf2, 0x47, 0x09, 0x2e, 0xf5, + 0x34, 0x11, 0xcf, 0xb3, 0x69, 0x56, 0x30, 0xe3, 0xa2, 0xeb, 0x99, 0xa7, 0x35, 0x35, 0x7d, 0xb2, + 0x63, 0x9a, 0x15, 0x6e, 0xf0, 0xab, 0xcd, 0x46, 0xe2, 0x95, 0xea, 0x69, 0x74, 0x82, 0xd9, 0x2f, + 0x9c, 0x4a, 0xc8, 0x2e, 0xd0, 0xd3, 0x82, 0x73, 0x56, 0x49, 0xa9, 0xf4, 0x77, 0x73, 0x30, 0xd5, + 0x0f, 0x83, 0x09, 0xf9, 0x52, 0x67, 0x7c, 0x99, 0xc0, 0x21, 0x93, 0xf2, 0x4f, 0x23, 0x90, 0xe8, + 0x23, 0x83, 0xfc, 0x76, 0x80, 0xc4, 0xdc, 0x18, 0xc4, 0x9a, 0x33, 0x4d, 0xce, 0xaf, 0xe2, 0xfb, + 0x2a, 0x59, 0x88, 0x60, 0x91, 0xbe, 0xaf, 0xdb, 0x0e, 0xb9, 0x0e, 0xe3, 0xd8, 0xa2, 0x7a, 0x45, + 0x1c, 0xfc, 0x22, 0xce, 0x9b, 0x66, 0xbe, 0x2b, 0x36, 0xcd, 0x1c, 0x51, 0xf6, 0x80, 0xf0, 0x67, + 0xc9, 0x8a, 0xd0, 0xd7, 0x91, 0x5b, 0x30, 0x5d, 0xe2, 0x28, 0xd5, 0x84, 0xfe, 0x1b, 0x7f, 0x53, + 0x68, 0x6d, 0x04, 0xbb, 0xf0, 0x29, 0x11, 0x57, 0x6e, 0xc0, 0x2c, 0x6a, 0xbf, 0x43, 0x5b, 0xcf, + 0xd2, 0x03, 0x36, 0x36, 0xca, 0x2d, 0x90, 0x77, 0x1d, 0x8b, 0xaa, 0x55, 0xdd, 0x28, 0xb7, 0xcb, + 0x78, 0x11, 0xc2, 0x46, 0xbd, 0x8a, 0x22, 0xa6, 0x79, 0x20, 0x8d, 0x7a, 0x55, 0x0c, 0xa4, 0x51, + 0xaf, 0x2a, 0x6f, 0x01, 0x41, 0xbe, 0x4d, 0x5a, 0xa1, 0x0e, 0x1d, 0x56, 0xfd, 0x27, 0x12, 0x00, + 0x7f, 0xc7, 0xdc, 0x32, 0xf6, 0xcd, 0x81, 0xdb, 0xb1, 0x1b, 0x10, 0xc5, 0x88, 0x6a, 0x85, 0x43, + 0x13, 0xaf, 0x3e, 0x69, 0x75, 0x8c, 0xf7, 0x51, 0x1c, 0xde, 0x36, 0x03, 0xf7, 0x1f, 0xf8, 0x28, + 0x63, 0xad, 0x50, 0xd5, 0xf6, 0x58, 0xc3, 0x3e, 0x2b, 0x87, 0xdb, 0x59, 0x7d, 0x54, 0x79, 0x0c, + 0xe7, 0xd0, 0xd5, 0xbd, 0x9a, 0xa6, 0x3a, 0xfe, 0x38, 0xf1, 0xa6, 0xf8, 0x0b, 0x40, 0x30, 0x1b, + 0x4e, 0x9b, 0x6f, 0x86, 0x68, 0x97, 0xeb, 0x20, 0xa7, 0x55, 0xa7, 0x74, 0xd0, 0x4d, 0xfb, 0x7b, + 0x30, 0xbd, 0xaf, 0xea, 0x15, 0xef, 0x65, 0xcc, 0xcb, 0x49, 0xd9, 0xb7, 0x22, 0xc8, 0xc0, 0xd3, + 0x8a, 0xb3, 0xbc, 0xdd, 0x9e, 0xa7, 0x53, 0x22, 0xde, 0xf2, 0x37, 0x83, 0x6f, 0x27, 0x5f, 0x95, + 0xbf, 0x6d, 0xda, 0xfb, 0xfb, 0x1b, 0x64, 0x18, 0xc2, 0xdf, 0x28, 0x44, 0xb2, 0x86, 0xf6, 0x40, + 0xb5, 0x8e, 0xa8, 0xa5, 0x7c, 0x24, 0xc1, 0x42, 0xf0, 0x64, 0x3c, 0xa0, 0xb6, 0xad, 0x96, 0x29, + 0xf9, 0xfa, 0x70, 0xfe, 0xdf, 0x0d, 0xf9, 0xcf, 0xd4, 0x61, 0x6a, 0x68, 0x6e, 0x59, 0x9f, 0x41, + 0xb6, 0x96, 0x3e, 0x7e, 0xbe, 0xa8, 0xd8, 0x82, 0xdd, 0x0d, 0xe5, 0x19, 0x7d, 0x7a, 0x02, 0xc6, + 0xe8, 0x31, 0x35, 0x9c, 0xb5, 0x38, 0x44, 0x85, 0xdf, 0x68, 0x49, 0x14, 0x26, 0xdc, 0x65, 0x2c, + 0xb4, 0x76, 0x05, 0xa2, 0xc2, 0x8f, 0x79, 0x64, 0x0a, 0x26, 0x73, 0xa6, 0x46, 0x77, 0x4c, 0xcb, + 0x89, 0x85, 0xd8, 0xea, 0x2e, 0x55, 0xb5, 0x0a, 0x23, 0x95, 0xd6, 0x3e, 0x96, 0x60, 0xd2, 0xfb, + 0x61, 0x80, 0x00, 0x8c, 0xbf, 0xbd, 0x97, 0xdd, 0xcb, 0x6e, 0xc6, 0x42, 0x4c, 0xe0, 0x4e, 0x36, + 0xb7, 0xb9, 0x95, 0xbb, 0x13, 0x93, 0xd8, 0x22, 0xbf, 0x97, 0xcb, 0xb1, 0xc5, 0x08, 0x99, 0x86, + 0xc8, 0xee, 0x5e, 0x26, 0x93, 0xcd, 0x6e, 0x66, 0x37, 0x63, 0x61, 0xc6, 0x74, 0x7b, 0x63, 0xeb, + 0x7e, 0x76, 0x33, 0x36, 0xca, 0xe8, 0xf6, 0x72, 0xf7, 0x72, 0x0f, 0xdf, 0xcd, 0xc5, 0xc6, 0x38, + 0x5d, 0xfa, 0xc1, 0xd6, 0xa3, 0x47, 0xd9, 0xcd, 0xd8, 0x38, 0xa3, 0xbb, 0x9f, 0xdd, 0xd8, 0xcd, + 0x6e, 0xc6, 0x26, 0xd8, 0xd6, 0x4e, 0x3e, 0x9b, 0x7d, 0xb0, 0xc3, 0xb6, 0x26, 0xd9, 0x32, 0xb3, + 0x91, 0xcb, 0x64, 0xef, 0x33, 0x29, 0x11, 0x66, 0x61, 0x3e, 0xbb, 0x9d, 0xcd, 0xb0, 0x4d, 0x58, + 0xff, 0x43, 0x18, 0xa6, 0x30, 0xa0, 0xde, 0x93, 0xd3, 0x1b, 0x10, 0xe5, 0x5f, 0x95, 0x4f, 0x6d, + 0x42, 0xc8, 0xe3, 0x8b, 0x1d, 0x8f, 0x81, 0x59, 0x16, 0x3c, 0x25, 0x44, 0x6e, 0xc1, 0x94, 0xc0, + 0x64, 0x93, 0x19, 0x9f, 0x8b, 0x95, 0xf1, 0xf8, 0x0b, 0xb8, 0xee, 0x95, 0x68, 0x4a, 0x88, 0x69, + 0xe5, 0x67, 0x67, 0x48, 0xad, 0x02, 0x53, 0x7f, 0xad, 0xc1, 0xd3, 0xa9, 0x84, 0xc8, 0xb7, 0x20, + 0xca, 0x6b, 0x29, 0xd7, 0x7a, 0xde, 0xe7, 0x0f, 0x94, 0xd8, 0x53, 0x4c, 0x48, 0xc2, 0xe4, 0x1d, + 0xea, 0x70, 0xf6, 0x79, 0x9f, 0xdd, 0xaf, 0xec, 0x71, 0xc1, 0x15, 0x25, 0x44, 0xb6, 0x21, 0xe2, + 0xd1, 0xdb, 0x84, 0xdb, 0xd7, 0xeb, 0x4e, 0x88, 0xc7, 0xbb, 0x6c, 0xbb, 0x07, 0x43, 0x09, 0xbd, + 0x2e, 0xad, 0xff, 0x2c, 0x02, 0xe3, 0x7c, 0x46, 0x27, 0xef, 0x00, 0xf0, 0xbf, 0xb0, 0xee, 0x2e, + 0x74, 0xfd, 0x21, 0x36, 0xbe, 0xd8, 0x7d, 0xb0, 0x57, 0x96, 0x7e, 0xfc, 0x97, 0x7f, 0xfe, 0x62, + 0xe4, 0x9c, 0x32, 0x93, 0x3a, 0xbe, 0x96, 0x3a, 0x34, 0x8b, 0xee, 0xbf, 0x99, 0xdd, 0x94, 0xd6, + 0xc8, 0xbb, 0x00, 0xfc, 0x12, 0x0d, 0xca, 0x0d, 0xfc, 0xde, 0x17, 0xe7, 0x61, 0xeb, 0xbc, 0x6c, + 0x3b, 0x05, 0xf3, 0x9b, 0x94, 0x09, 0xfe, 0x1e, 0x4c, 0xb5, 0x04, 0xef, 0x52, 0x87, 0xc8, 0xc2, + 0x4f, 0x78, 0x41, 0xe9, 0xbd, 0x62, 0x7f, 0x11, 0x85, 0x2f, 0x2a, 0x73, 0xae, 0x70, 0x9b, 0x3a, + 0x82, 0x7c, 0x03, 0x62, 0xe2, 0x73, 0x12, 0x9a, 0x7f, 0xa1, 0xfb, 0x43, 0x13, 0x57, 0x73, 0xf1, + 0xb4, 0x57, 0x28, 0x25, 0x81, 0xca, 0x96, 0x94, 0x79, 0xcf, 0x13, 0xe1, 0x45, 0x89, 0x32, 0x7d, + 0xef, 0x41, 0xd4, 0xfd, 0xb1, 0x1a, 0x55, 0xb5, 0x42, 0x1d, 0xfc, 0x05, 0xbb, 0xa7, 0x33, 0x71, + 0x94, 0x3f, 0xaf, 0xcc, 0x7a, 0xf2, 0x6b, 0x9c, 0x8f, 0x89, 0xbe, 0x33, 0xfc, 0x81, 0x9c, 0x47, + 0x71, 0x33, 0x4a, 0x84, 0x89, 0xc3, 0x82, 0xc8, 0x04, 0x95, 0x9e, 0xed, 0x90, 0xbe, 0x84, 0x42, + 0x97, 0x95, 0x25, 0x26, 0xb4, 0xc8, 0xa8, 0xa8, 0x96, 0xe2, 0x6f, 0xfd, 0xee, 0xfd, 0xc0, 0x94, + 0xe4, 0x86, 0x3f, 0xc8, 0x17, 0x50, 0xf0, 0x42, 0x3c, 0xd6, 0xb2, 0x36, 0xf5, 0x43, 0xd6, 0x7a, + 0x7c, 0xe8, 0x1a, 0xfd, 0x2c, 0x67, 0xdc, 0x35, 0x3a, 0x1e, 0x30, 0xba, 0x8e, 0x34, 0x82, 0xd1, + 0xdf, 0x7e, 0xc6, 0x3a, 0x20, 0xa3, 0x16, 0xb2, 0xd6, 0xe1, 0x01, 0xb9, 0x3d, 0x54, 0x7d, 0x70, + 0xe5, 0x90, 0x4e, 0x39, 0xda, 0x73, 0xaa, 0x1b, 0x6e, 0xa2, 0x11, 0x22, 0xc6, 0x83, 0x07, 0xe2, + 0x75, 0x89, 0xdc, 0x84, 0xf1, 0xbb, 0xf8, 0xef, 0x96, 0xa4, 0x87, 0xa7, 0x71, 0x7e, 0x4e, 0x39, + 0x51, 0xe6, 0x80, 0x96, 0x8e, 0x5a, 0x77, 0xff, 0xfb, 0x9f, 0xfd, 0x63, 0x39, 0xf4, 0xa3, 0x27, + 0xcb, 0xd2, 0x9f, 0x9f, 0x2c, 0x4b, 0x9f, 0x3e, 0x59, 0x96, 0xfe, 0xfe, 0x64, 0x59, 0xfa, 0xe8, + 0xf3, 0xe5, 0xd0, 0xa7, 0x9f, 0x2f, 0x87, 0x3e, 0xfb, 0x7c, 0x39, 0xf4, 0x9d, 0x57, 0x84, 0xff, + 0x00, 0x55, 0xad, 0xaa, 0xaa, 0xa9, 0x35, 0xcb, 0x3c, 0xa4, 0x25, 0xc7, 0x5d, 0xa5, 0xdc, 0x7f, + 0xf9, 0xfc, 0x64, 0x64, 0x7e, 0x03, 0x81, 0x1d, 0xbe, 0x9d, 0xdc, 0x32, 0x93, 0x1b, 0x35, 0xbd, + 0x38, 0x8e, 0xb6, 0xbc, 0xf1, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd4, 0xab, 0xa7, 0x17, 0x0f, + 0x2b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3706,18 +3707,20 @@ func (m *Job) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0xb0 } - { - size, err := m.SchedulingResourceRequirements.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if m.SchedulingResourceRequirements != nil { + { + size, err := m.SchedulingResourceRequirements.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintSubmit(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintSubmit(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xaa } - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0xaa if len(m.Scheduler) > 0 { i -= len(m.Scheduler) copy(dAtA[i:], m.Scheduler) @@ -4145,16 +4148,18 @@ func (m *Queue) MarshalToSizedBuffer(dAtA []byte) (int, error) { for k := range m.ResourceLimitsByPriorityClassName { v := m.ResourceLimitsByPriorityClassName[k] baseI := i - { - size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintSubmit(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintSubmit(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) i = encodeVarintSubmit(dAtA, i, uint64(len(k))) @@ -4338,16 +4343,18 @@ func (m *PriorityClassResourceLimits) MarshalToSizedBuffer(dAtA []byte) (int, er for k := range m.MaximumResourceFractionByPool { v := m.MaximumResourceFractionByPool[k] baseI := i - { - size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintSubmit(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintSubmit(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) i = encodeVarintSubmit(dAtA, i, uint64(len(k))) @@ -5236,8 +5243,10 @@ func (m *Job) Size() (n int) { if l > 0 { n += 2 + l + sovSubmit(uint64(l)) } - l = m.SchedulingResourceRequirements.Size() - n += 2 + l + sovSubmit(uint64(l)) + if m.SchedulingResourceRequirements != nil { + l = m.SchedulingResourceRequirements.Size() + n += 2 + l + sovSubmit(uint64(l)) + } if m.QueueTtlSeconds != 0 { n += 2 + sovSubmit(uint64(m.QueueTtlSeconds)) } @@ -5362,8 +5371,12 @@ func (m *Queue) Size() (n int) { for k, v := range m.ResourceLimitsByPriorityClassName { _ = k _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovSubmit(uint64(len(k))) + 1 + l + sovSubmit(uint64(l)) + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovSubmit(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovSubmit(uint64(len(k))) + l n += mapEntrySize + 1 + sovSubmit(uint64(mapEntrySize)) } } @@ -5426,8 +5439,12 @@ func (m *PriorityClassResourceLimits) Size() (n int) { for k, v := range m.MaximumResourceFractionByPool { _ = k _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovSubmit(uint64(len(k))) + 1 + l + sovSubmit(uint64(l)) + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovSubmit(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovSubmit(uint64(len(k))) + l n += mapEntrySize + 1 + sovSubmit(uint64(mapEntrySize)) } } @@ -5901,7 +5918,7 @@ func (this *Job) String() string { `K8SService:` + repeatedStringForK8SService + `,`, `CompressedQueueOwnershipUserGroups:` + fmt.Sprintf("%v", this.CompressedQueueOwnershipUserGroups) + `,`, `Scheduler:` + fmt.Sprintf("%v", this.Scheduler) + `,`, - `SchedulingResourceRequirements:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.SchedulingResourceRequirements), "ResourceRequirements", "v1.ResourceRequirements", 1), `&`, ``, 1) + `,`, + `SchedulingResourceRequirements:` + strings.Replace(fmt.Sprintf("%v", this.SchedulingResourceRequirements), "ResourceRequirements", "v1.ResourceRequirements", 1) + `,`, `QueueTtlSeconds:` + fmt.Sprintf("%v", this.QueueTtlSeconds) + `,`, `}`, }, "") @@ -5990,7 +6007,7 @@ func (this *Queue) String() string { keysForResourceLimitsByPriorityClassName = append(keysForResourceLimitsByPriorityClassName, k) } github_com_gogo_protobuf_sortkeys.Strings(keysForResourceLimitsByPriorityClassName) - mapStringForResourceLimitsByPriorityClassName := "map[string]PriorityClassResourceLimits{" + mapStringForResourceLimitsByPriorityClassName := "map[string]*PriorityClassResourceLimits{" for _, k := range keysForResourceLimitsByPriorityClassName { mapStringForResourceLimitsByPriorityClassName += fmt.Sprintf("%v: %v,", k, this.ResourceLimitsByPriorityClassName[k]) } @@ -6053,7 +6070,7 @@ func (this *PriorityClassResourceLimits) String() string { keysForMaximumResourceFractionByPool = append(keysForMaximumResourceFractionByPool, k) } github_com_gogo_protobuf_sortkeys.Strings(keysForMaximumResourceFractionByPool) - mapStringForMaximumResourceFractionByPool := "map[string]PriorityClassPoolResourceLimits{" + mapStringForMaximumResourceFractionByPool := "map[string]*PriorityClassPoolResourceLimits{" for _, k := range keysForMaximumResourceFractionByPool { mapStringForMaximumResourceFractionByPool += fmt.Sprintf("%v: %v,", k, this.MaximumResourceFractionByPool[k]) } @@ -9203,6 +9220,9 @@ func (m *Job) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } + if m.SchedulingResourceRequirements == nil { + m.SchedulingResourceRequirements = &v1.ResourceRequirements{} + } if err := m.SchedulingResourceRequirements.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -10085,10 +10105,10 @@ func (m *Queue) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.ResourceLimitsByPriorityClassName == nil { - m.ResourceLimitsByPriorityClassName = make(map[string]PriorityClassResourceLimits) + m.ResourceLimitsByPriorityClassName = make(map[string]*PriorityClassResourceLimits) } var mapkey string - mapvalue := &PriorityClassResourceLimits{} + var mapvalue *PriorityClassResourceLimits for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -10182,7 +10202,7 @@ func (m *Queue) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.ResourceLimitsByPriorityClassName[mapkey] = *mapvalue + m.ResourceLimitsByPriorityClassName[mapkey] = mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -10600,10 +10620,10 @@ func (m *PriorityClassResourceLimits) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.MaximumResourceFractionByPool == nil { - m.MaximumResourceFractionByPool = make(map[string]PriorityClassPoolResourceLimits) + m.MaximumResourceFractionByPool = make(map[string]*PriorityClassPoolResourceLimits) } var mapkey string - mapvalue := &PriorityClassPoolResourceLimits{} + var mapvalue *PriorityClassPoolResourceLimits for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -10697,7 +10717,7 @@ func (m *PriorityClassResourceLimits) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.MaximumResourceFractionByPool[mapkey] = *mapvalue + m.MaximumResourceFractionByPool[mapkey] = mapvalue iNdEx = postIndex default: iNdEx = preIndex diff --git a/pkg/api/submit.proto b/pkg/api/submit.proto index 5c9dbacbe27..fefc70db42a 100644 --- a/pkg/api/submit.proto +++ b/pkg/api/submit.proto @@ -135,7 +135,7 @@ message Job { // This is because containers run in parallel, whereas initContainers run serially. // This field is populated automatically at submission. // Submitting a job with this field already populated results in an error. - k8s.io.api.core.v1.ResourceRequirements scheduling_resource_requirements = 21 [(gogoproto.nullable) = false]; + k8s.io.api.core.v1.ResourceRequirements scheduling_resource_requirements = 21; google.protobuf.Timestamp created = 6; // Services can be provided either as Armada-specific config objects or as proper k8s objects. // These options are exclusive, i.e., if either ingress or services is provided, @@ -194,21 +194,21 @@ message Queue { map resource_limits = 5 [deprecated = true]; // Map from priority class name to resource limit overrides for this queue and priority class. // If provided for a priority class, global limits for that priority class do not apply to this queue. - map resource_limits_by_priority_class_name = 7 [(gogoproto.nullable) = false]; + map resource_limits_by_priority_class_name = 7; repeated Permissions permissions = 6; } message PriorityClassResourceLimits { // Limits resources assigned to jobs of this priority class. // Specifically, jobs of this priority class are only scheduled if doing so does not exceed this limit. - map maximum_resource_fraction = 1 [(gogoproto.nullable) = false]; + map maximum_resource_fraction = 1; // Per-pool override of maximum_resource_fraction. // If missing for a particular pool, maximum_resource_fraction is used instead for that pool. - map maximum_resource_fraction_by_pool = 2 [(gogoproto.nullable) = false]; + map maximum_resource_fraction_by_pool = 2; } message PriorityClassPoolResourceLimits { - map maximum_resource_fraction = 1 [(gogoproto.nullable) = false]; + map maximum_resource_fraction = 1; } // swagger:model diff --git a/pkg/client/queue/queue.go b/pkg/client/queue/queue.go index 4e3689029a1..4f2debc3470 100644 --- a/pkg/client/queue/queue.go +++ b/pkg/client/queue/queue.go @@ -3,6 +3,7 @@ package queue import ( "fmt" + armadamaps "github.com/armadaproject/armada/internal/common/maps" "github.com/armadaproject/armada/pkg/api" ) @@ -14,7 +15,7 @@ type Queue struct { } // NewQueue returns new Queue using the in parameter. Error is returned if -// any of the queue fields has corresponding value in in that is invalid. +// any of the queue fields has corresponding value that is invalid. func NewQueue(in *api.Queue) (Queue, error) { if in == nil { return Queue{}, fmt.Errorf("queue is nil") @@ -39,19 +40,27 @@ func NewQueue(in *api.Queue) (Queue, error) { } return Queue{ - Name: in.Name, - PriorityFactor: priorityFactor, - Permissions: permissions, - ResourceLimitsByPriorityClassName: in.ResourceLimitsByPriorityClassName, + Name: in.Name, + PriorityFactor: priorityFactor, + Permissions: permissions, + ResourceLimitsByPriorityClassName: armadamaps.MapValues( + in.ResourceLimitsByPriorityClassName, + func(p *api.PriorityClassResourceLimits) api.PriorityClassResourceLimits { + return *p + }), }, nil } // ToAPI transforms Queue to *api.Queue structure func (q Queue) ToAPI() *api.Queue { rv := &api.Queue{ - Name: q.Name, - PriorityFactor: float64(q.PriorityFactor), - ResourceLimitsByPriorityClassName: q.ResourceLimitsByPriorityClassName, + Name: q.Name, + PriorityFactor: float64(q.PriorityFactor), + ResourceLimitsByPriorityClassName: armadamaps.MapValues( + q.ResourceLimitsByPriorityClassName, + func(p api.PriorityClassResourceLimits) *api.PriorityClassResourceLimits { + return &p + }), } for _, permission := range q.Permissions { rv.Permissions = append(rv.Permissions, permission.ToAPI()) From 8d49690cdd4d27f6a1c1eaa6f3fb839bf91899f8 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Mon, 24 Jun 2024 18:35:38 +0100 Subject: [PATCH 08/27] submit.go Signed-off-by: Chris Martin --- pkg/api/api.swagger.go | 2 +- pkg/api/api.swagger.json | 4 +- pkg/api/binoculars/api.swagger.go | 2 +- pkg/api/binoculars/api.swagger.json | 4 +- pkg/api/event.pb.go | 428 +++++++++++++++------------- pkg/api/event.proto | 6 +- pkg/client/domain/watch.go | 9 +- 7 files changed, 239 insertions(+), 216 deletions(-) diff --git a/pkg/api/api.swagger.go b/pkg/api/api.swagger.go index b7db2275956..abc6074e18c 100644 --- a/pkg/api/api.swagger.go +++ b/pkg/api/api.swagger.go @@ -5478,7 +5478,7 @@ func SwaggerJsonTemplate() string { " \"x-go-package\": \"k8s.io/api/core/v1\"\n" + " },\n" + " \"v1Time\": {\n" + - " \"description\": \"Programs using times should typically store and pass them as values,\\nnot pointers. That is, time variables and struct fields should be of\\ntype time.Time, not *time.Time.\\n\\nA Time value can be used by multiple goroutines simultaneously except\\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\\nUnmarshalText are not concurrency-safe.\\n\\nTime instants can be compared using the Before, After, and Equal methods.\\nThe Sub method subtracts two instants, producing a Duration.\\nThe Add method adds a Time and a Duration, producing a Time.\\n\\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\\nAs this time is unlikely to come up in practice, the IsZero method gives\\na simple way of detecting a time that has not been initialized explicitly.\\n\\nEach Time has associated with it a Location, consulted when computing the\\npresentation form of the time, such as in the Format, Hour, and Year methods.\\nThe methods Local, UTC, and In return a Time with a specific location.\\nChanging the location in this way changes only the presentation; it does not\\nchange the instant in time being denoted and therefore does not affect the\\ncomputations described in earlier paragraphs.\\n\\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\\nthe location name. They therefore lose information about Daylight Saving Time.\\n\\nIn addition to the required “wall clock” reading, a Time may contain an optional\\nreading of the current process's monotonic clock, to provide additional precision\\nfor comparison or subtraction.\\nSee the “Monotonic Clocks” section in the package documentation for details.\\n\\nNote that the Go == operator compares not just the time instant but also the\\nLocation and the monotonic clock reading. Therefore, Time values should not\\nbe used as map or database keys without first guaranteeing that the\\nidentical Location has been set for all values, which can be achieved\\nthrough use of the UTC or Local method, and that the monotonic clock reading\\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\\nto t == u, since t.Equal uses the most accurate comparison available and\\ncorrectly handles the case when only one of its arguments has a monotonic\\nclock reading.\",\n" + + " \"description\": \"Programs using times should typically store and pass them as values,\\nnot pointers. That is, time variables and struct fields should be of\\ntype time.Time, not *time.Time.\\n\\nA Time value can be used by multiple goroutines simultaneously except\\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\\nUnmarshalText are not concurrency-safe.\\n\\nTime instants can be compared using the Before, After, and Equal methods.\\nThe Sub method subtracts two instants, producing a Duration.\\nThe Add method adds a Time and a Duration, producing a Time.\\n\\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\\nAs this time is unlikely to come up in practice, the IsZero method gives\\na simple way of detecting a time that has not been initialized explicitly.\\n\\nEach time has an associated Location. The methods Local, UTC, and In return a\\nTime with a specific Location. Changing the Location of a Time value with\\nthese methods does not change the actual instant it represents, only the time\\nzone in which to interpret it.\\n\\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\\nthe location name. They therefore lose information about Daylight Saving Time.\\n\\nIn addition to the required “wall clock” reading, a Time may contain an optional\\nreading of the current process's monotonic clock, to provide additional precision\\nfor comparison or subtraction.\\nSee the “Monotonic Clocks” section in the package documentation for details.\\n\\nNote that the Go == operator compares not just the time instant but also the\\nLocation and the monotonic clock reading. Therefore, Time values should not\\nbe used as map or database keys without first guaranteeing that the\\nidentical Location has been set for all values, which can be achieved\\nthrough use of the UTC or Local method, and that the monotonic clock reading\\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\\nto t == u, since t.Equal uses the most accurate comparison available and\\ncorrectly handles the case when only one of its arguments has a monotonic\\nclock reading.\",\n" + " \"type\": \"string\",\n" + " \"format\": \"date-time\",\n" + " \"title\": \"A Time represents an instant in time with nanosecond precision.\",\n" + diff --git a/pkg/api/api.swagger.json b/pkg/api/api.swagger.json index 537603f1ed4..5993fc4ce08 100644 --- a/pkg/api/api.swagger.json +++ b/pkg/api/api.swagger.json @@ -5467,7 +5467,7 @@ "x-go-package": "k8s.io/api/core/v1" }, "v1Time": { - "description": "Programs using times should typically store and pass them as values,\nnot pointers. That is, time variables and struct fields should be of\ntype time.Time, not *time.Time.\n\nA Time value can be used by multiple goroutines simultaneously except\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\nUnmarshalText are not concurrency-safe.\n\nTime instants can be compared using the Before, After, and Equal methods.\nThe Sub method subtracts two instants, producing a Duration.\nThe Add method adds a Time and a Duration, producing a Time.\n\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\nAs this time is unlikely to come up in practice, the IsZero method gives\na simple way of detecting a time that has not been initialized explicitly.\n\nEach Time has associated with it a Location, consulted when computing the\npresentation form of the time, such as in the Format, Hour, and Year methods.\nThe methods Local, UTC, and In return a Time with a specific location.\nChanging the location in this way changes only the presentation; it does not\nchange the instant in time being denoted and therefore does not affect the\ncomputations described in earlier paragraphs.\n\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\nthe location name. They therefore lose information about Daylight Saving Time.\n\nIn addition to the required “wall clock” reading, a Time may contain an optional\nreading of the current process's monotonic clock, to provide additional precision\nfor comparison or subtraction.\nSee the “Monotonic Clocks” section in the package documentation for details.\n\nNote that the Go == operator compares not just the time instant but also the\nLocation and the monotonic clock reading. Therefore, Time values should not\nbe used as map or database keys without first guaranteeing that the\nidentical Location has been set for all values, which can be achieved\nthrough use of the UTC or Local method, and that the monotonic clock reading\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\nto t == u, since t.Equal uses the most accurate comparison available and\ncorrectly handles the case when only one of its arguments has a monotonic\nclock reading.", + "description": "Programs using times should typically store and pass them as values,\nnot pointers. That is, time variables and struct fields should be of\ntype time.Time, not *time.Time.\n\nA Time value can be used by multiple goroutines simultaneously except\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\nUnmarshalText are not concurrency-safe.\n\nTime instants can be compared using the Before, After, and Equal methods.\nThe Sub method subtracts two instants, producing a Duration.\nThe Add method adds a Time and a Duration, producing a Time.\n\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\nAs this time is unlikely to come up in practice, the IsZero method gives\na simple way of detecting a time that has not been initialized explicitly.\n\nEach time has an associated Location. The methods Local, UTC, and In return a\nTime with a specific Location. Changing the Location of a Time value with\nthese methods does not change the actual instant it represents, only the time\nzone in which to interpret it.\n\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\nthe location name. They therefore lose information about Daylight Saving Time.\n\nIn addition to the required “wall clock” reading, a Time may contain an optional\nreading of the current process's monotonic clock, to provide additional precision\nfor comparison or subtraction.\nSee the “Monotonic Clocks” section in the package documentation for details.\n\nNote that the Go == operator compares not just the time instant but also the\nLocation and the monotonic clock reading. Therefore, Time values should not\nbe used as map or database keys without first guaranteeing that the\nidentical Location has been set for all values, which can be achieved\nthrough use of the UTC or Local method, and that the monotonic clock reading\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\nto t == u, since t.Equal uses the most accurate comparison available and\ncorrectly handles the case when only one of its arguments has a monotonic\nclock reading.", "type": "string", "format": "date-time", "title": "A Time represents an instant in time with nanosecond precision.", @@ -5851,4 +5851,4 @@ "x-go-package": "k8s.io/api/core/v1" } } -} +} \ No newline at end of file diff --git a/pkg/api/binoculars/api.swagger.go b/pkg/api/binoculars/api.swagger.go index 206e611b3c9..4a9905f6feb 100644 --- a/pkg/api/binoculars/api.swagger.go +++ b/pkg/api/binoculars/api.swagger.go @@ -238,7 +238,7 @@ func SwaggerJsonTemplate() string { " \"x-go-package\": \"k8s.io/api/core/v1\"\n" + " },\n" + " \"v1Time\": {\n" + - " \"description\": \"Programs using times should typically store and pass them as values,\\nnot pointers. That is, time variables and struct fields should be of\\ntype time.Time, not *time.Time.\\n\\nA Time value can be used by multiple goroutines simultaneously except\\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\\nUnmarshalText are not concurrency-safe.\\n\\nTime instants can be compared using the Before, After, and Equal methods.\\nThe Sub method subtracts two instants, producing a Duration.\\nThe Add method adds a Time and a Duration, producing a Time.\\n\\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\\nAs this time is unlikely to come up in practice, the IsZero method gives\\na simple way of detecting a time that has not been initialized explicitly.\\n\\nEach Time has associated with it a Location, consulted when computing the\\npresentation form of the time, such as in the Format, Hour, and Year methods.\\nThe methods Local, UTC, and In return a Time with a specific location.\\nChanging the location in this way changes only the presentation; it does not\\nchange the instant in time being denoted and therefore does not affect the\\ncomputations described in earlier paragraphs.\\n\\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\\nthe location name. They therefore lose information about Daylight Saving Time.\\n\\nIn addition to the required “wall clock” reading, a Time may contain an optional\\nreading of the current process's monotonic clock, to provide additional precision\\nfor comparison or subtraction.\\nSee the “Monotonic Clocks” section in the package documentation for details.\\n\\nNote that the Go == operator compares not just the time instant but also the\\nLocation and the monotonic clock reading. Therefore, Time values should not\\nbe used as map or database keys without first guaranteeing that the\\nidentical Location has been set for all values, which can be achieved\\nthrough use of the UTC or Local method, and that the monotonic clock reading\\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\\nto t == u, since t.Equal uses the most accurate comparison available and\\ncorrectly handles the case when only one of its arguments has a monotonic\\nclock reading.\",\n" + + " \"description\": \"Programs using times should typically store and pass them as values,\\nnot pointers. That is, time variables and struct fields should be of\\ntype time.Time, not *time.Time.\\n\\nA Time value can be used by multiple goroutines simultaneously except\\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\\nUnmarshalText are not concurrency-safe.\\n\\nTime instants can be compared using the Before, After, and Equal methods.\\nThe Sub method subtracts two instants, producing a Duration.\\nThe Add method adds a Time and a Duration, producing a Time.\\n\\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\\nAs this time is unlikely to come up in practice, the IsZero method gives\\na simple way of detecting a time that has not been initialized explicitly.\\n\\nEach time has an associated Location. The methods Local, UTC, and In return a\\nTime with a specific Location. Changing the Location of a Time value with\\nthese methods does not change the actual instant it represents, only the time\\nzone in which to interpret it.\\n\\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\\nthe location name. They therefore lose information about Daylight Saving Time.\\n\\nIn addition to the required “wall clock” reading, a Time may contain an optional\\nreading of the current process's monotonic clock, to provide additional precision\\nfor comparison or subtraction.\\nSee the “Monotonic Clocks” section in the package documentation for details.\\n\\nNote that the Go == operator compares not just the time instant but also the\\nLocation and the monotonic clock reading. Therefore, Time values should not\\nbe used as map or database keys without first guaranteeing that the\\nidentical Location has been set for all values, which can be achieved\\nthrough use of the UTC or Local method, and that the monotonic clock reading\\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\\nto t == u, since t.Equal uses the most accurate comparison available and\\ncorrectly handles the case when only one of its arguments has a monotonic\\nclock reading.\",\n" + " \"type\": \"string\",\n" + " \"format\": \"date-time\",\n" + " \"title\": \"A Time represents an instant in time with nanosecond precision.\",\n" + diff --git a/pkg/api/binoculars/api.swagger.json b/pkg/api/binoculars/api.swagger.json index c7f88b50176..adf9a3af046 100644 --- a/pkg/api/binoculars/api.swagger.json +++ b/pkg/api/binoculars/api.swagger.json @@ -227,11 +227,11 @@ "x-go-package": "k8s.io/api/core/v1" }, "v1Time": { - "description": "Programs using times should typically store and pass them as values,\nnot pointers. That is, time variables and struct fields should be of\ntype time.Time, not *time.Time.\n\nA Time value can be used by multiple goroutines simultaneously except\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\nUnmarshalText are not concurrency-safe.\n\nTime instants can be compared using the Before, After, and Equal methods.\nThe Sub method subtracts two instants, producing a Duration.\nThe Add method adds a Time and a Duration, producing a Time.\n\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\nAs this time is unlikely to come up in practice, the IsZero method gives\na simple way of detecting a time that has not been initialized explicitly.\n\nEach Time has associated with it a Location, consulted when computing the\npresentation form of the time, such as in the Format, Hour, and Year methods.\nThe methods Local, UTC, and In return a Time with a specific location.\nChanging the location in this way changes only the presentation; it does not\nchange the instant in time being denoted and therefore does not affect the\ncomputations described in earlier paragraphs.\n\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\nthe location name. They therefore lose information about Daylight Saving Time.\n\nIn addition to the required “wall clock” reading, a Time may contain an optional\nreading of the current process's monotonic clock, to provide additional precision\nfor comparison or subtraction.\nSee the “Monotonic Clocks” section in the package documentation for details.\n\nNote that the Go == operator compares not just the time instant but also the\nLocation and the monotonic clock reading. Therefore, Time values should not\nbe used as map or database keys without first guaranteeing that the\nidentical Location has been set for all values, which can be achieved\nthrough use of the UTC or Local method, and that the monotonic clock reading\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\nto t == u, since t.Equal uses the most accurate comparison available and\ncorrectly handles the case when only one of its arguments has a monotonic\nclock reading.", + "description": "Programs using times should typically store and pass them as values,\nnot pointers. That is, time variables and struct fields should be of\ntype time.Time, not *time.Time.\n\nA Time value can be used by multiple goroutines simultaneously except\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\nUnmarshalText are not concurrency-safe.\n\nTime instants can be compared using the Before, After, and Equal methods.\nThe Sub method subtracts two instants, producing a Duration.\nThe Add method adds a Time and a Duration, producing a Time.\n\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\nAs this time is unlikely to come up in practice, the IsZero method gives\na simple way of detecting a time that has not been initialized explicitly.\n\nEach time has an associated Location. The methods Local, UTC, and In return a\nTime with a specific Location. Changing the Location of a Time value with\nthese methods does not change the actual instant it represents, only the time\nzone in which to interpret it.\n\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\nthe location name. They therefore lose information about Daylight Saving Time.\n\nIn addition to the required “wall clock” reading, a Time may contain an optional\nreading of the current process's monotonic clock, to provide additional precision\nfor comparison or subtraction.\nSee the “Monotonic Clocks” section in the package documentation for details.\n\nNote that the Go == operator compares not just the time instant but also the\nLocation and the monotonic clock reading. Therefore, Time values should not\nbe used as map or database keys without first guaranteeing that the\nidentical Location has been set for all values, which can be achieved\nthrough use of the UTC or Local method, and that the monotonic clock reading\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\nto t == u, since t.Equal uses the most accurate comparison available and\ncorrectly handles the case when only one of its arguments has a monotonic\nclock reading.", "type": "string", "format": "date-time", "title": "A Time represents an instant in time with nanosecond precision.", "x-go-package": "k8s.io/apimachinery/pkg/apis/meta/v1" } } -} +} \ No newline at end of file diff --git a/pkg/api/event.pb.go b/pkg/api/event.pb.go index 40318daf484..5453e4de256 100644 --- a/pkg/api/event.pb.go +++ b/pkg/api/event.pb.go @@ -74,7 +74,7 @@ type JobSubmittedEvent struct { JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` - Job Job `protobuf:"bytes,5,opt,name=job,proto3" json:"job"` + Job *Job `protobuf:"bytes,5,opt,name=job,proto3" json:"job,omitempty"` } func (m *JobSubmittedEvent) Reset() { *m = JobSubmittedEvent{} } @@ -137,11 +137,11 @@ func (m *JobSubmittedEvent) GetCreated() *types.Timestamp { return nil } -func (m *JobSubmittedEvent) GetJob() Job { +func (m *JobSubmittedEvent) GetJob() *Job { if m != nil { return m.Job } - return Job{} + return nil } type JobQueuedEvent struct { @@ -1366,18 +1366,18 @@ func (m *JobSucceededEvent) GetPodNamespace() string { } type JobUtilisationEvent struct { - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` - Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` - Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` - ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` - KubernetesId string `protobuf:"bytes,6,opt,name=kubernetes_id,json=kubernetesId,proto3" json:"kubernetesId,omitempty"` - MaxResourcesForPeriod map[string]resource.Quantity `protobuf:"bytes,7,rep,name=MaxResourcesForPeriod,proto3" json:"MaxResourcesForPeriod" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - NodeName string `protobuf:"bytes,8,opt,name=node_name,json=nodeName,proto3" json:"nodeName,omitempty"` - PodNumber int32 `protobuf:"varint,9,opt,name=pod_number,json=podNumber,proto3" json:"podNumber,omitempty"` - PodName string `protobuf:"bytes,10,opt,name=pod_name,json=podName,proto3" json:"podName,omitempty"` - PodNamespace string `protobuf:"bytes,11,opt,name=pod_namespace,json=podNamespace,proto3" json:"podNamespace,omitempty"` - TotalCumulativeUsage map[string]resource.Quantity `protobuf:"bytes,12,rep,name=total_cumulative_usage,json=totalCumulativeUsage,proto3" json:"totalCumulativeUsage" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + JobSetId string `protobuf:"bytes,2,opt,name=job_set_id,json=jobSetId,proto3" json:"jobSetId,omitempty"` + Queue string `protobuf:"bytes,3,opt,name=queue,proto3" json:"queue,omitempty"` + Created *types.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` + ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"clusterId,omitempty"` + KubernetesId string `protobuf:"bytes,6,opt,name=kubernetes_id,json=kubernetesId,proto3" json:"kubernetesId,omitempty"` + MaxResourcesForPeriod map[string]*resource.Quantity `protobuf:"bytes,7,rep,name=MaxResourcesForPeriod,proto3" json:"MaxResourcesForPeriod,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + NodeName string `protobuf:"bytes,8,opt,name=node_name,json=nodeName,proto3" json:"nodeName,omitempty"` + PodNumber int32 `protobuf:"varint,9,opt,name=pod_number,json=podNumber,proto3" json:"podNumber,omitempty"` + PodName string `protobuf:"bytes,10,opt,name=pod_name,json=podName,proto3" json:"podName,omitempty"` + PodNamespace string `protobuf:"bytes,11,opt,name=pod_namespace,json=podNamespace,proto3" json:"podNamespace,omitempty"` + TotalCumulativeUsage map[string]*resource.Quantity `protobuf:"bytes,12,rep,name=total_cumulative_usage,json=totalCumulativeUsage,proto3" json:"totalCumulativeUsage,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (m *JobUtilisationEvent) Reset() { *m = JobUtilisationEvent{} } @@ -1454,7 +1454,7 @@ func (m *JobUtilisationEvent) GetKubernetesId() string { return "" } -func (m *JobUtilisationEvent) GetMaxResourcesForPeriod() map[string]resource.Quantity { +func (m *JobUtilisationEvent) GetMaxResourcesForPeriod() map[string]*resource.Quantity { if m != nil { return m.MaxResourcesForPeriod } @@ -1489,7 +1489,7 @@ func (m *JobUtilisationEvent) GetPodNamespace() string { return "" } -func (m *JobUtilisationEvent) GetTotalCumulativeUsage() map[string]resource.Quantity { +func (m *JobUtilisationEvent) GetTotalCumulativeUsage() map[string]*resource.Quantity { if m != nil { return m.TotalCumulativeUsage } @@ -2528,8 +2528,8 @@ func init() { proto.RegisterType((*JobPreemptedEvent)(nil), "api.JobPreemptedEvent") proto.RegisterType((*JobSucceededEvent)(nil), "api.JobSucceededEvent") proto.RegisterType((*JobUtilisationEvent)(nil), "api.JobUtilisationEvent") - proto.RegisterMapType((map[string]resource.Quantity)(nil), "api.JobUtilisationEvent.MaxResourcesForPeriodEntry") - proto.RegisterMapType((map[string]resource.Quantity)(nil), "api.JobUtilisationEvent.TotalCumulativeUsageEntry") + proto.RegisterMapType((map[string]*resource.Quantity)(nil), "api.JobUtilisationEvent.MaxResourcesForPeriodEntry") + proto.RegisterMapType((map[string]*resource.Quantity)(nil), "api.JobUtilisationEvent.TotalCumulativeUsageEntry") proto.RegisterType((*JobReprioritizingEvent)(nil), "api.JobReprioritizingEvent") proto.RegisterType((*JobReprioritizedEvent)(nil), "api.JobReprioritizedEvent") proto.RegisterType((*JobCancellingEvent)(nil), "api.JobCancellingEvent") @@ -2545,153 +2545,154 @@ func init() { func init() { proto.RegisterFile("pkg/api/event.proto", fileDescriptor_7758595c3bb8cf56) } var fileDescriptor_7758595c3bb8cf56 = []byte{ - // 2333 bytes of a gzipped FileDescriptorProto + // 2337 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcd, 0x6f, 0x1b, 0xc7, - 0x15, 0xd7, 0x52, 0xe2, 0xd7, 0x50, 0x9f, 0x63, 0x49, 0x5e, 0xd3, 0xb6, 0x28, 0x30, 0x40, 0xa3, - 0x18, 0x31, 0x99, 0xca, 0x49, 0x11, 0x18, 0x05, 0x0a, 0x53, 0x51, 0x12, 0xa9, 0x71, 0xed, 0x50, - 0x36, 0xd2, 0x16, 0x01, 0x98, 0xe5, 0xee, 0x88, 0x5a, 0x89, 0xdc, 0xd9, 0xec, 0xce, 0xda, 0x56, - 0x8c, 0x00, 0x45, 0x0b, 0x14, 0xb9, 0xf5, 0x0b, 0xe8, 0xb1, 0x5f, 0x40, 0x2f, 0x3d, 0xf6, 0x2f, - 0xe8, 0xa1, 0x28, 0x72, 0x0c, 0x92, 0x4b, 0x4e, 0x44, 0x6b, 0x07, 0x09, 0xc0, 0x53, 0xef, 0xbd, - 0x14, 0xf3, 0x66, 0x76, 0x39, 0xb3, 0xa6, 0x60, 0x59, 0x69, 0x52, 0x43, 0xe1, 0xc5, 0x96, 0x7e, - 0x6f, 0xde, 0x9b, 0xb7, 0x6f, 0x7e, 0x33, 0xef, 0xcd, 0x87, 0xd0, 0x19, 0xff, 0xa0, 0x53, 0xb7, - 0x7c, 0xb7, 0x4e, 0xee, 0x10, 0x8f, 0xd5, 0xfc, 0x80, 0x32, 0x8a, 0x27, 0x2d, 0xdf, 0x2d, 0x57, - 0x3a, 0x94, 0x76, 0xba, 0xa4, 0x0e, 0x50, 0x3b, 0xda, 0xad, 0x33, 0xb7, 0x47, 0x42, 0x66, 0xf5, - 0x7c, 0xd1, 0xaa, 0xbc, 0x18, 0xab, 0x86, 0x51, 0xbb, 0xe7, 0xb2, 0x34, 0xba, 0x47, 0xac, 0x2e, - 0xdb, 0x93, 0xe8, 0xf9, 0xb4, 0x31, 0xd2, 0xf3, 0xd9, 0xa1, 0x14, 0x5e, 0xee, 0xb8, 0x6c, 0x2f, - 0x6a, 0xd7, 0x6c, 0xda, 0xab, 0x77, 0x68, 0x87, 0x0e, 0x5b, 0xf1, 0xdf, 0xe0, 0x17, 0xf8, 0x49, - 0x36, 0xbf, 0x20, 0x6d, 0xf1, 0x4e, 0x2c, 0xcf, 0xa3, 0xcc, 0x62, 0x2e, 0xf5, 0x42, 0x29, 0x7d, - 0xf1, 0xe0, 0xe5, 0xb0, 0xe6, 0x52, 0x2e, 0xed, 0x59, 0xf6, 0x9e, 0xeb, 0x91, 0xe0, 0xb0, 0x1e, - 0xfb, 0x14, 0x90, 0x90, 0x46, 0x81, 0x4d, 0xea, 0x1d, 0xe2, 0x91, 0xc0, 0x62, 0xc4, 0x11, 0x5a, - 0xd5, 0xdf, 0x66, 0xd0, 0xc2, 0x36, 0x6d, 0xef, 0xc0, 0x97, 0x30, 0xe2, 0x6c, 0xf2, 0x68, 0xe0, - 0x4b, 0x28, 0xb7, 0x4f, 0xdb, 0x2d, 0xd7, 0x31, 0x8d, 0x55, 0x63, 0xad, 0xd8, 0x38, 0x33, 0xe8, - 0x57, 0xe6, 0xf6, 0x69, 0x7b, 0xcb, 0x79, 0x9e, 0xf6, 0x5c, 0x06, 0xdf, 0xd0, 0xcc, 0x02, 0x80, - 0x5f, 0x44, 0x88, 0xb7, 0x0d, 0x09, 0xe3, 0xed, 0x33, 0xd0, 0x7e, 0x79, 0xd0, 0xaf, 0xe0, 0x7d, - 0xda, 0xde, 0x21, 0x4c, 0x53, 0x29, 0xc4, 0x18, 0x7e, 0x0e, 0x65, 0xdf, 0x8d, 0x48, 0x44, 0xcc, - 0xc9, 0x61, 0x07, 0x00, 0xa8, 0x1d, 0x00, 0x80, 0xbf, 0x8f, 0xf2, 0x76, 0x40, 0xb8, 0xcf, 0xe6, - 0xd4, 0xaa, 0xb1, 0x56, 0x5a, 0x2f, 0xd7, 0x44, 0x20, 0x6a, 0x71, 0xb8, 0x6a, 0xb7, 0xe2, 0x11, - 0x6a, 0x2c, 0x0d, 0xfa, 0x95, 0x05, 0xd9, 0x5c, 0x31, 0x15, 0x5b, 0xc0, 0xcf, 0xa2, 0xc9, 0x7d, - 0xda, 0x36, 0xb3, 0x60, 0xa8, 0x50, 0xb3, 0x7c, 0xb7, 0xb6, 0x4d, 0xdb, 0x8d, 0xd2, 0x87, 0xfd, - 0xca, 0xc4, 0xa0, 0x5f, 0xe1, 0xc2, 0x26, 0xff, 0xa7, 0x3a, 0x30, 0xd0, 0xec, 0x36, 0x6d, 0xbf, - 0xc9, 0x5d, 0x38, 0xed, 0x51, 0xa9, 0xfe, 0x29, 0x03, 0x1f, 0xfb, 0x06, 0xb1, 0xc2, 0xd3, 0x4f, - 0x81, 0xef, 0x20, 0x64, 0x77, 0xa3, 0x90, 0x91, 0x80, 0x7b, 0x9b, 0x85, 0xce, 0xcf, 0x0e, 0xfa, - 0x95, 0x33, 0x12, 0xd5, 0xdc, 0x2d, 0x26, 0x60, 0xf5, 0x57, 0x53, 0x68, 0x29, 0x0e, 0x52, 0x93, - 0xb0, 0x28, 0xf0, 0xc6, 0xb1, 0x3a, 0x22, 0x56, 0xf8, 0x79, 0x94, 0x0b, 0x88, 0x15, 0x52, 0xcf, - 0xcc, 0x81, 0xce, 0xe2, 0xa0, 0x5f, 0x99, 0x17, 0x88, 0xa2, 0x20, 0xdb, 0xe0, 0xef, 0xa1, 0x99, - 0x83, 0xa8, 0x4d, 0x02, 0x8f, 0x30, 0x12, 0xf2, 0x8e, 0xf2, 0xa0, 0x54, 0x1e, 0xf4, 0x2b, 0xcb, - 0x43, 0x81, 0xd6, 0xd7, 0xb4, 0x8a, 0x73, 0x37, 0x7d, 0xea, 0xb4, 0xbc, 0xa8, 0xd7, 0x26, 0x81, - 0x59, 0x58, 0x35, 0xd6, 0xb2, 0xc2, 0x4d, 0x9f, 0x3a, 0x3f, 0x00, 0x50, 0x75, 0x33, 0x01, 0x79, - 0xc7, 0x41, 0xe4, 0xb5, 0x2c, 0x06, 0x22, 0xe2, 0x98, 0xc5, 0x55, 0x63, 0xad, 0x20, 0x3a, 0x0e, - 0x22, 0xef, 0x5a, 0x8c, 0xab, 0x1d, 0xab, 0x78, 0xf5, 0xdf, 0x06, 0x5a, 0x8c, 0x39, 0xb1, 0x79, - 0xcf, 0x77, 0x83, 0xd3, 0xbf, 0x56, 0xfc, 0x62, 0x0a, 0xcd, 0x6d, 0xd3, 0xf6, 0x4d, 0xe2, 0x39, - 0xae, 0xd7, 0x19, 0x4f, 0x80, 0xd1, 0x13, 0xe0, 0x11, 0x4a, 0xe7, 0xbe, 0x14, 0xa5, 0xf3, 0xc7, - 0xa6, 0xf4, 0x0b, 0xa8, 0x00, 0x7a, 0x56, 0x8f, 0xc0, 0x44, 0x28, 0x8a, 0x4f, 0xe4, 0x0d, 0xac, - 0x9e, 0x1a, 0xad, 0xbc, 0x84, 0xb8, 0xab, 0xb1, 0x46, 0xe8, 0x5b, 0x36, 0x81, 0x49, 0x20, 0x5d, - 0x95, 0x6d, 0x00, 0x57, 0x5d, 0x55, 0xf1, 0xea, 0xdf, 0x05, 0x23, 0x9a, 0x91, 0xe7, 0x8d, 0x19, - 0xf1, 0xd5, 0x31, 0xe2, 0x0a, 0x2a, 0x7a, 0xd4, 0x21, 0x62, 0x68, 0xf3, 0xc3, 0x28, 0x71, 0x30, - 0x35, 0xb6, 0x85, 0x18, 0x3b, 0xf1, 0xca, 0xa8, 0xd2, 0xa8, 0x78, 0x32, 0x1a, 0xa1, 0x27, 0xa4, - 0xd1, 0x5f, 0x73, 0xe8, 0xcc, 0x36, 0x6d, 0x6f, 0x79, 0x9d, 0x80, 0x84, 0xe1, 0x96, 0xb7, 0x4b, - 0xc7, 0x54, 0x3a, 0x6d, 0x54, 0x42, 0x27, 0xa3, 0x52, 0xe9, 0xc9, 0xa8, 0x84, 0xef, 0xa3, 0x05, - 0x57, 0xd0, 0xa8, 0x65, 0x39, 0x0e, 0xff, 0x9f, 0x84, 0x66, 0x71, 0x75, 0x72, 0xad, 0xb4, 0x5e, - 0x8b, 0x6b, 0xfe, 0x34, 0xcf, 0x6a, 0x12, 0xb8, 0x16, 0x2b, 0x6c, 0x7a, 0x2c, 0x38, 0x6c, 0xac, - 0x0c, 0xfa, 0x95, 0xb2, 0x9b, 0x12, 0x29, 0x1d, 0xcf, 0xa7, 0x65, 0xe5, 0x03, 0xb4, 0x34, 0xd2, - 0x14, 0x7e, 0x06, 0x4d, 0x1e, 0x90, 0x43, 0x60, 0x71, 0xb6, 0xb1, 0x30, 0xe8, 0x57, 0x66, 0x0e, - 0xc8, 0xa1, 0x62, 0x8a, 0x4b, 0x39, 0x17, 0xef, 0x58, 0xdd, 0x88, 0x48, 0xf2, 0x02, 0x17, 0x01, - 0x50, 0xb9, 0x08, 0xc0, 0xd5, 0xcc, 0xcb, 0x46, 0xf5, 0x3f, 0x53, 0xc8, 0xdc, 0xa6, 0xed, 0xdb, - 0x9e, 0xd5, 0xee, 0x92, 0x5b, 0x74, 0xc7, 0xde, 0x23, 0x4e, 0xd4, 0x25, 0xe3, 0x99, 0xf3, 0x54, - 0xd4, 0xa5, 0xda, 0x3c, 0x2b, 0x9c, 0x68, 0x9e, 0x15, 0x9f, 0xe2, 0x79, 0x56, 0xfd, 0x38, 0x0f, - 0xfb, 0xc6, 0x57, 0x2d, 0xb7, 0x3b, 0xde, 0x0b, 0xfd, 0x6f, 0x38, 0xf7, 0x36, 0x42, 0xe4, 0x9e, - 0xcb, 0x5a, 0x36, 0x75, 0x48, 0x68, 0xe6, 0x61, 0xcd, 0xaa, 0xc6, 0x6b, 0x96, 0x12, 0xe8, 0xda, - 0xe6, 0x3d, 0x97, 0x6d, 0xf0, 0x46, 0x62, 0x9d, 0x3a, 0xc7, 0x3d, 0x21, 0x31, 0x36, 0x34, 0x6c, - 0x1a, 0xcd, 0x62, 0x02, 0x3f, 0xca, 0xe8, 0xc2, 0x97, 0x61, 0x74, 0xf1, 0x44, 0x8c, 0x46, 0x27, - 0x62, 0xf4, 0xcc, 0xc9, 0x18, 0x3d, 0xfb, 0x84, 0x99, 0xc3, 0x41, 0xd8, 0xa6, 0x1e, 0xb3, 0x5c, - 0x8f, 0x04, 0xad, 0x90, 0x59, 0x2c, 0xe2, 0xa9, 0xa3, 0x04, 0xc3, 0xb0, 0x08, 0xc3, 0xb0, 0x11, - 0x8b, 0x77, 0x40, 0xda, 0xa8, 0x0c, 0xfa, 0x95, 0xf3, 0xb6, 0x0e, 0x6a, 0x19, 0x62, 0xe1, 0x11, - 0x21, 0x7e, 0x09, 0x65, 0x6d, 0x2b, 0x0a, 0x89, 0x39, 0xbd, 0x6a, 0xac, 0xcd, 0xae, 0x23, 0x61, - 0x98, 0x23, 0x82, 0xce, 0x20, 0x54, 0xe9, 0x0c, 0x40, 0xd9, 0x41, 0xb3, 0xfa, 0xa8, 0xab, 0x29, - 0xa5, 0x78, 0xbc, 0x94, 0x92, 0x7d, 0x6c, 0x4a, 0xf9, 0x73, 0x06, 0x61, 0xbe, 0xc1, 0x0b, 0x08, - 0x17, 0x7d, 0x03, 0x2a, 0xfa, 0x97, 0x50, 0x31, 0x20, 0xef, 0x46, 0x24, 0x64, 0x34, 0x50, 0xe7, - 0x75, 0x02, 0xaa, 0xec, 0x4c, 0xc0, 0xea, 0x17, 0x93, 0x70, 0x74, 0x2a, 0xe3, 0x34, 0x5e, 0xff, - 0x8e, 0x5a, 0xff, 0x2e, 0xa1, 0x5c, 0x10, 0x79, 0xc3, 0x32, 0x15, 0x1c, 0x0e, 0x22, 0x4f, 0x8f, - 0x08, 0x00, 0x78, 0x0b, 0x2d, 0xf8, 0x92, 0x77, 0x77, 0x48, 0x4b, 0x06, 0x52, 0x64, 0xdd, 0x8b, - 0x83, 0x7e, 0xe5, 0xdc, 0x50, 0xb8, 0x9d, 0x0a, 0xe9, 0x5c, 0x4a, 0x94, 0x32, 0x25, 0x3d, 0x28, - 0x8c, 0x32, 0xd5, 0x4c, 0xf9, 0x32, 0x97, 0x12, 0x55, 0xff, 0x31, 0x25, 0x0f, 0xc9, 0x6d, 0x9b, - 0x10, 0x67, 0x3c, 0xd2, 0xe3, 0x2d, 0xee, 0x09, 0xb7, 0xb8, 0x7f, 0x2c, 0xc2, 0x16, 0xf7, 0x36, - 0x73, 0xbb, 0x6e, 0x08, 0xb7, 0x37, 0x63, 0x2a, 0x7d, 0x45, 0x54, 0xfa, 0xc0, 0x40, 0x4b, 0xd7, - 0xad, 0x7b, 0x4d, 0x79, 0xf1, 0x15, 0xbe, 0x4a, 0x83, 0x9b, 0x24, 0x70, 0xa9, 0x23, 0x6b, 0xaa, - 0x2b, 0x71, 0x4d, 0x95, 0x1e, 0x8c, 0xda, 0x48, 0x2d, 0x51, 0x64, 0x5d, 0x94, 0xd7, 0x44, 0xa3, - 0x2d, 0x37, 0x47, 0xc3, 0xa7, 0x7d, 0x17, 0x80, 0x7f, 0x6e, 0xa0, 0x65, 0x46, 0x99, 0xd5, 0x6d, - 0xd9, 0x51, 0x2f, 0xea, 0x5a, 0xb0, 0xe0, 0x46, 0xa1, 0xd5, 0xe1, 0xf5, 0x0d, 0x8f, 0xf5, 0xfa, - 0x91, 0xb1, 0xbe, 0xc5, 0xd5, 0x36, 0x12, 0xad, 0xdb, 0x5c, 0x49, 0x84, 0xfa, 0x82, 0x0c, 0xf5, - 0x22, 0x1b, 0xd1, 0xa4, 0x39, 0x12, 0x2d, 0xff, 0xc1, 0x40, 0xe5, 0xa3, 0x47, 0xef, 0x78, 0xc5, - 0xd2, 0x8f, 0xd4, 0x62, 0xa9, 0xb4, 0x5e, 0xab, 0x89, 0x6b, 0xd5, 0x9a, 0x7a, 0xad, 0x5a, 0xf3, - 0x0f, 0x3a, 0xf0, 0x49, 0xf1, 0xb5, 0x6a, 0xed, 0xcd, 0xc8, 0xf2, 0x98, 0xcb, 0x0e, 0x1f, 0x57, - 0x5c, 0x95, 0x7f, 0x6f, 0xa0, 0x73, 0x47, 0x7e, 0xf4, 0xd3, 0xe0, 0x61, 0xf5, 0x8b, 0x0c, 0x5a, - 0xde, 0xa6, 0xed, 0x26, 0xf1, 0x03, 0x97, 0x06, 0x2e, 0x73, 0xdf, 0xfb, 0x06, 0x94, 0x80, 0xdf, - 0x45, 0xd3, 0x1e, 0xb9, 0xdb, 0x92, 0x9f, 0x7c, 0x08, 0x0b, 0x95, 0x01, 0x7b, 0xaa, 0x25, 0x8f, - 0xdc, 0xbd, 0x29, 0x61, 0x45, 0xb3, 0xa4, 0xc0, 0x7a, 0x01, 0x99, 0x3b, 0x76, 0x01, 0xf9, 0x79, - 0x06, 0x2e, 0x14, 0x95, 0x48, 0x9f, 0xfe, 0xd2, 0xe2, 0xff, 0x12, 0xe8, 0x4f, 0xc4, 0x8e, 0x66, - 0xc3, 0xf2, 0x6c, 0xd2, 0xed, 0x8e, 0x77, 0x34, 0x47, 0xc4, 0xe9, 0xc9, 0x4e, 0x2a, 0xaa, 0x1f, - 0x8b, 0xa7, 0x23, 0x32, 0xaa, 0xa7, 0x9f, 0xba, 0x5f, 0x4b, 0x50, 0xff, 0x36, 0x05, 0x54, 0xbd, - 0x45, 0x82, 0x9e, 0xeb, 0x59, 0xe3, 0x5d, 0xe5, 0xd3, 0x7d, 0xc1, 0xfa, 0xf5, 0x6c, 0x1b, 0x14, - 0x0a, 0x15, 0x8e, 0x41, 0xa1, 0xcf, 0xa6, 0xd1, 0x34, 0xb0, 0xe6, 0x3a, 0x09, 0x79, 0x69, 0x81, - 0x6f, 0xa0, 0x62, 0x18, 0xbf, 0xef, 0x02, 0xfe, 0x94, 0xd6, 0x97, 0xe3, 0x8a, 0x4c, 0x7f, 0xf8, - 0x25, 0x02, 0x90, 0x34, 0x1e, 0x1a, 0x7f, 0x7d, 0xa2, 0x39, 0xb4, 0x81, 0x37, 0x50, 0x0e, 0x98, - 0xe0, 0xc8, 0x12, 0xe4, 0x4c, 0x6c, 0x4d, 0x79, 0x2d, 0x25, 0x9c, 0x14, 0xcd, 0x34, 0x3b, 0x52, - 0x95, 0x1b, 0xe9, 0xc2, 0x7b, 0x23, 0x60, 0x9c, 0x62, 0x44, 0x79, 0x85, 0x24, 0x8c, 0x88, 0x66, - 0xba, 0x11, 0x81, 0xe1, 0x77, 0xd0, 0x2c, 0xfc, 0xd4, 0x0a, 0xe4, 0x83, 0x9c, 0x84, 0x91, 0xaa, - 0x31, 0xed, 0xb5, 0x4e, 0xe3, 0xfc, 0xa0, 0x5f, 0x39, 0xdb, 0x55, 0x71, 0xcd, 0xf4, 0x8c, 0x26, - 0xc2, 0x6f, 0x23, 0x01, 0xb4, 0x88, 0x78, 0xde, 0x21, 0x9f, 0x8e, 0x9d, 0xd3, 0x3a, 0x50, 0x9f, - 0x7e, 0x88, 0x71, 0xed, 0x2a, 0xb0, 0x66, 0x7e, 0x5a, 0x95, 0xe0, 0xd7, 0x50, 0xde, 0x17, 0x0f, - 0x29, 0x80, 0xbf, 0xf1, 0x19, 0x63, 0xea, 0x7d, 0x85, 0x64, 0x98, 0x40, 0x34, 0x6b, 0xb1, 0x36, - 0x37, 0x14, 0x88, 0xfb, 0x77, 0xa0, 0xb2, 0x62, 0x48, 0xbd, 0x96, 0x17, 0x86, 0x64, 0x43, 0xdd, - 0x90, 0x04, 0x71, 0x0f, 0xe1, 0x08, 0x2e, 0x93, 0x5a, 0x8c, 0xb6, 0x42, 0x79, 0x9d, 0x04, 0xbc, - 0x2b, 0xad, 0x5f, 0x4c, 0xea, 0xf8, 0x51, 0xd7, 0x4d, 0xe2, 0xaa, 0x2c, 0x4a, 0x89, 0xb4, 0x5e, - 0xe6, 0xd3, 0x52, 0xce, 0x82, 0x5d, 0x38, 0xd4, 0x86, 0xb9, 0xa4, 0xb0, 0x40, 0x39, 0xea, 0x16, - 0x2c, 0x10, 0xcd, 0x74, 0x16, 0x08, 0x4c, 0x10, 0x5c, 0x9e, 0xcd, 0xc0, 0xe4, 0xd2, 0x08, 0xae, - 0x1e, 0xda, 0xc4, 0x04, 0x97, 0x58, 0x9a, 0xe0, 0x12, 0xc6, 0x2d, 0x34, 0x13, 0xa8, 0x55, 0x19, - 0x6c, 0x89, 0x14, 0x56, 0x3d, 0x5a, 0xb2, 0x09, 0x56, 0x69, 0x4a, 0x3a, 0xab, 0x34, 0x11, 0xde, - 0x41, 0xc8, 0x4e, 0xaa, 0x11, 0x38, 0x05, 0x2e, 0xad, 0x9f, 0x8d, 0xad, 0xa7, 0xea, 0x94, 0x86, - 0xc9, 0xb7, 0x41, 0xc3, 0xe6, 0x9a, 0x5d, 0xc5, 0x0c, 0x0f, 0x83, 0x1d, 0x27, 0x63, 0x38, 0x2f, - 0x57, 0xc2, 0xa0, 0x67, 0x69, 0xb9, 0xc2, 0xc6, 0x98, 0x1e, 0x86, 0x04, 0xe6, 0x5e, 0xb2, 0x24, - 0x11, 0xc1, 0x51, 0xba, 0xe2, 0x65, 0x2a, 0x45, 0x09, 0x2f, 0x87, 0xcd, 0x75, 0x2f, 0x87, 0x38, - 0x7e, 0x0b, 0x95, 0xa2, 0xe1, 0x36, 0xd0, 0x9c, 0x03, 0xab, 0xe6, 0x51, 0x3b, 0x44, 0x51, 0x1a, - 0x2a, 0x0a, 0x9a, 0x5d, 0xd5, 0x12, 0xfe, 0x21, 0x9a, 0x8e, 0x2f, 0x7d, 0x5d, 0x6f, 0x97, 0x9a, - 0x0b, 0xba, 0xe5, 0xf4, 0x7d, 0xaf, 0xb0, 0xec, 0x0e, 0x51, 0xdd, 0xb2, 0x22, 0xc0, 0x36, 0x9a, - 0x0d, 0xb4, 0xed, 0x90, 0x89, 0xc1, 0xf6, 0xf9, 0x11, 0x7c, 0x48, 0x46, 0xed, 0xc2, 0xa0, 0x5f, - 0x31, 0x75, 0x35, 0xad, 0x87, 0x94, 0x49, 0x3e, 0x7a, 0x7e, 0x7c, 0x94, 0x6c, 0x2e, 0xe9, 0xa3, - 0xa7, 0x9f, 0x31, 0xcb, 0x34, 0x15, 0x63, 0xfa, 0xe8, 0x25, 0x30, 0x1f, 0x3d, 0x3f, 0x39, 0xc3, - 0x37, 0x97, 0xf5, 0xd1, 0x4b, 0x9d, 0xee, 0x8b, 0xd1, 0x1b, 0x36, 0xd7, 0x47, 0x6f, 0x88, 0x37, - 0x0a, 0x28, 0x07, 0x0f, 0xa6, 0xc3, 0xea, 0xcf, 0x32, 0x68, 0x2e, 0x75, 0x17, 0x82, 0xbf, 0x85, - 0xa6, 0x20, 0x2f, 0x8a, 0x22, 0x05, 0x0f, 0xfa, 0x95, 0x59, 0x4f, 0x4f, 0x8a, 0x20, 0xc7, 0xeb, - 0xa8, 0x10, 0xdf, 0x49, 0xc9, 0x4b, 0x09, 0x28, 0x50, 0x62, 0x4c, 0x2d, 0x50, 0x62, 0x0c, 0xd7, - 0x51, 0xbe, 0x27, 0x12, 0x9a, 0x2c, 0x51, 0x60, 0x2d, 0x93, 0x90, 0x9a, 0x76, 0x25, 0xa4, 0x64, - 0xcd, 0xa9, 0x63, 0xdc, 0xbb, 0x25, 0x57, 0x32, 0xd9, 0x27, 0xb9, 0x92, 0xa9, 0xbe, 0x87, 0x30, - 0x04, 0x70, 0x87, 0x05, 0xc4, 0xea, 0xc5, 0x19, 0x77, 0x15, 0x65, 0x92, 0x52, 0x6d, 0x7e, 0xd0, - 0xaf, 0x4c, 0xbb, 0x6a, 0x1d, 0x92, 0x71, 0x1d, 0xdc, 0x18, 0x7e, 0x8d, 0xc8, 0xa1, 0x0b, 0xd0, - 0xa1, 0x9a, 0xb7, 0x1f, 0xf7, 0x81, 0xd5, 0x5f, 0x67, 0xd0, 0xcc, 0x36, 0xd4, 0x6f, 0x4d, 0x51, - 0x6d, 0x1e, 0xa3, 0xdf, 0xe7, 0x50, 0xf6, 0xae, 0xc5, 0xec, 0x3d, 0xe8, 0xb5, 0x20, 0x3e, 0x0d, - 0x00, 0xf5, 0xd3, 0x00, 0xc0, 0x1b, 0x68, 0x6e, 0x37, 0xa0, 0xbd, 0x96, 0xec, 0x8e, 0xd7, 0x58, - 0x22, 0xf0, 0xb0, 0xd4, 0x71, 0x91, 0x74, 0x54, 0x2b, 0xb2, 0x66, 0x34, 0xc1, 0xb0, 0xac, 0x9c, - 0x7a, 0x6c, 0x59, 0xf9, 0x0a, 0x9a, 0x25, 0x41, 0x40, 0x83, 0xad, 0xdd, 0xeb, 0x6e, 0x18, 0x72, - 0xce, 0x66, 0xc1, 0x47, 0x98, 0x48, 0xba, 0x44, 0x51, 0x4e, 0xe9, 0x54, 0x7f, 0x67, 0xa0, 0xe9, - 0xb7, 0xb8, 0xff, 0x71, 0x4c, 0x12, 0x0f, 0x8c, 0xc7, 0x7a, 0x70, 0xb2, 0xca, 0xf9, 0x32, 0xca, - 0x43, 0x9c, 0x92, 0xf8, 0x88, 0x74, 0x15, 0xd0, 0x9e, 0xa6, 0x90, 0x13, 0xc8, 0xa5, 0x37, 0x50, - 0x16, 0x68, 0x85, 0x8b, 0x28, 0xbb, 0xc9, 0x7d, 0x9f, 0x9f, 0xc0, 0x25, 0x94, 0xdf, 0xbc, 0xe3, - 0xda, 0x8c, 0x38, 0xf3, 0x06, 0xce, 0xa3, 0xc9, 0x1b, 0x37, 0xae, 0xcf, 0x67, 0xf0, 0x22, 0x9a, - 0x7f, 0x85, 0x58, 0x4e, 0xd7, 0xf5, 0xc8, 0xe6, 0x3d, 0x91, 0x99, 0xe6, 0x27, 0xf1, 0x34, 0x2a, - 0x34, 0xc9, 0x3e, 0x81, 0xc6, 0x53, 0xeb, 0x9f, 0x1b, 0x28, 0x2b, 0xb6, 0x08, 0x04, 0xcd, 0xbd, - 0x46, 0x98, 0xe0, 0x03, 0x20, 0x21, 0xc6, 0x49, 0x12, 0x4c, 0x28, 0x52, 0x3e, 0x3b, 0xe4, 0x99, - 0xc6, 0xd9, 0xea, 0x33, 0x3f, 0xfd, 0xe4, 0xb3, 0xdf, 0x64, 0x2e, 0x56, 0xcd, 0xfa, 0x9d, 0x6f, - 0xd7, 0xf7, 0x69, 0xfb, 0x72, 0x48, 0x58, 0xfd, 0x3e, 0x04, 0xe6, 0xfd, 0xfa, 0x7d, 0xd7, 0x79, - 0xff, 0xaa, 0x71, 0xe9, 0x05, 0x03, 0x5f, 0x45, 0x59, 0x08, 0x2f, 0x16, 0x84, 0x55, 0x43, 0x7d, - 0xb4, 0xed, 0xc9, 0x0f, 0x32, 0x06, 0xe8, 0xe6, 0x5e, 0x87, 0x3f, 0x8e, 0xc0, 0xcb, 0x8f, 0xec, - 0x18, 0x36, 0x79, 0x90, 0xca, 0x62, 0xb5, 0x16, 0x8d, 0x36, 0xf6, 0x88, 0x7d, 0xd0, 0x24, 0xa1, - 0x4f, 0xbd, 0x90, 0x34, 0xde, 0xf9, 0xf4, 0x5f, 0x2b, 0x13, 0x3f, 0x79, 0xb0, 0x62, 0x7c, 0xf8, - 0x60, 0xc5, 0xf8, 0xe8, 0xc1, 0x8a, 0xf1, 0xcf, 0x07, 0x2b, 0xc6, 0x2f, 0x1f, 0xae, 0x4c, 0x7c, - 0xf4, 0x70, 0x65, 0xe2, 0xd3, 0x87, 0x2b, 0x13, 0x3f, 0x7e, 0x56, 0xf9, 0x6b, 0x0a, 0x2b, 0xe8, - 0x59, 0x8e, 0xe5, 0x07, 0x94, 0x07, 0x4a, 0xfe, 0x16, 0xff, 0x31, 0xc4, 0x5f, 0x32, 0x8b, 0xd7, - 0x00, 0xb8, 0x29, 0xc4, 0xb5, 0x2d, 0x5a, 0xbb, 0xe6, 0xbb, 0xed, 0x1c, 0xf8, 0x72, 0xe5, 0xbf, - 0x01, 0x00, 0x00, 0xff, 0xff, 0x0c, 0x6e, 0x85, 0x25, 0x1a, 0x32, 0x00, 0x00, + 0x15, 0xd7, 0x52, 0xe2, 0xd7, 0x50, 0x9f, 0x63, 0x49, 0x5e, 0xd3, 0x89, 0x28, 0xd0, 0x40, 0xab, + 0x18, 0x31, 0x99, 0xca, 0x49, 0x11, 0x18, 0x05, 0x0a, 0x4b, 0x51, 0x12, 0xa9, 0x71, 0xed, 0x50, + 0x36, 0xd2, 0x16, 0x01, 0x98, 0xfd, 0x18, 0x51, 0x2b, 0x91, 0x3b, 0x9b, 0xdd, 0x59, 0xdb, 0x8a, + 0x11, 0xa0, 0x68, 0x2f, 0x3d, 0x14, 0xfd, 0xbc, 0x16, 0x6d, 0x51, 0xa0, 0x97, 0x02, 0xbd, 0xf4, + 0x2f, 0xe8, 0xa1, 0x28, 0x7a, 0x0c, 0x92, 0x4b, 0x4e, 0x44, 0x6b, 0x07, 0x09, 0xc0, 0x53, 0xef, + 0xbd, 0x14, 0xf3, 0x66, 0x76, 0x39, 0xb3, 0x96, 0x60, 0x49, 0x69, 0x52, 0x43, 0xe1, 0xc9, 0xd6, + 0xef, 0xcd, 0x7b, 0xf3, 0xf6, 0xcd, 0x6f, 0xe6, 0xbd, 0xf9, 0x20, 0x3a, 0x17, 0xec, 0x77, 0x9a, + 0x56, 0xe0, 0x35, 0xc9, 0x5d, 0xe2, 0xb3, 0x46, 0x10, 0x52, 0x46, 0xf1, 0xb8, 0x15, 0x78, 0xd5, + 0x5a, 0x87, 0xd2, 0x4e, 0x97, 0x34, 0x01, 0xb2, 0xe3, 0x9d, 0x26, 0xf3, 0x7a, 0x24, 0x62, 0x56, + 0x2f, 0x10, 0xad, 0xaa, 0xf3, 0x89, 0x6a, 0x14, 0xdb, 0x3d, 0x8f, 0x65, 0xd1, 0x5d, 0x62, 0x75, + 0xd9, 0xae, 0x44, 0x2f, 0x66, 0x8d, 0x91, 0x5e, 0xc0, 0x0e, 0xa4, 0xf0, 0x4a, 0xc7, 0x63, 0xbb, + 0xb1, 0xdd, 0x70, 0x68, 0xaf, 0xd9, 0xa1, 0x1d, 0x3a, 0x6c, 0xc5, 0xff, 0x82, 0x3f, 0xe0, 0x7f, + 0xb2, 0xf9, 0x33, 0xd2, 0x16, 0xef, 0xc4, 0xf2, 0x7d, 0xca, 0x2c, 0xe6, 0x51, 0x3f, 0x92, 0xd2, + 0x17, 0xf7, 0x5f, 0x8e, 0x1a, 0x1e, 0xe5, 0xd2, 0x9e, 0xe5, 0xec, 0x7a, 0x3e, 0x09, 0x0f, 0x9a, + 0x89, 0x4f, 0x21, 0x89, 0x68, 0x1c, 0x3a, 0xa4, 0xd9, 0x21, 0x3e, 0x09, 0x2d, 0x46, 0x5c, 0xa1, + 0x55, 0xff, 0x4d, 0x0e, 0xcd, 0x6d, 0x51, 0x7b, 0x1b, 0xbe, 0x84, 0x11, 0x77, 0x83, 0x47, 0x03, + 0x5f, 0x46, 0x85, 0x3d, 0x6a, 0xb7, 0x3d, 0xd7, 0x34, 0x96, 0x8d, 0x95, 0xf2, 0xda, 0xb9, 0x41, + 0xbf, 0x36, 0xb3, 0x47, 0xed, 0x4d, 0xf7, 0x79, 0xda, 0xf3, 0x18, 0x7c, 0x43, 0x2b, 0x0f, 0x00, + 0x7e, 0x11, 0x21, 0xde, 0x36, 0x22, 0x8c, 0xb7, 0xcf, 0x41, 0xfb, 0xc5, 0x41, 0xbf, 0x86, 0xf7, + 0xa8, 0xbd, 0x4d, 0x98, 0xa6, 0x52, 0x4a, 0x30, 0xfc, 0x1c, 0xca, 0xbf, 0x1b, 0x93, 0x98, 0x98, + 0xe3, 0xc3, 0x0e, 0x00, 0x50, 0x3b, 0x00, 0x00, 0x7f, 0x07, 0x15, 0x9d, 0x90, 0x70, 0x9f, 0xcd, + 0x89, 0x65, 0x63, 0xa5, 0xb2, 0x5a, 0x6d, 0x88, 0x40, 0x34, 0x92, 0x70, 0x35, 0x6e, 0x27, 0x23, + 0xb4, 0xb6, 0x30, 0xe8, 0xd7, 0xe6, 0x64, 0x73, 0xc5, 0x54, 0x62, 0x01, 0x5f, 0x41, 0xe3, 0x7b, + 0xd4, 0x36, 0xf3, 0x60, 0xa8, 0xd4, 0xb0, 0x02, 0xaf, 0xb1, 0x45, 0xed, 0xb5, 0xb9, 0x41, 0xbf, + 0x36, 0xb5, 0x47, 0x6d, 0x45, 0x85, 0xb7, 0xab, 0x0f, 0x0c, 0x34, 0xbd, 0x45, 0xed, 0x37, 0xb9, + 0x23, 0x67, 0x3d, 0x36, 0xf5, 0x3f, 0xe4, 0xe0, 0x63, 0xdf, 0x20, 0x56, 0x74, 0xf6, 0x89, 0xf0, + 0x4d, 0x84, 0x9c, 0x6e, 0x1c, 0x31, 0x12, 0x72, 0x6f, 0xf3, 0xd0, 0xf9, 0xf9, 0x41, 0xbf, 0x76, + 0x4e, 0xa2, 0x9a, 0xbb, 0xe5, 0x14, 0xac, 0xff, 0x72, 0x02, 0x2d, 0x24, 0x41, 0x6a, 0x11, 0x16, + 0x87, 0xfe, 0x28, 0x56, 0x47, 0xc4, 0x0a, 0x3f, 0x8f, 0x0a, 0x21, 0xb1, 0x22, 0xea, 0x9b, 0x05, + 0xd0, 0x99, 0x1f, 0xf4, 0x6b, 0xb3, 0x02, 0x51, 0x14, 0x64, 0x1b, 0xfc, 0x6d, 0x34, 0xb5, 0x1f, + 0xdb, 0x24, 0xf4, 0x09, 0x23, 0x11, 0xef, 0xa8, 0x08, 0x4a, 0xd5, 0x41, 0xbf, 0xb6, 0x38, 0x14, + 0x68, 0x7d, 0x4d, 0xaa, 0x38, 0x77, 0x33, 0xa0, 0x6e, 0xdb, 0x8f, 0x7b, 0x36, 0x09, 0xcd, 0xd2, + 0xb2, 0xb1, 0x92, 0x17, 0x6e, 0x06, 0xd4, 0xfd, 0x2e, 0x80, 0xaa, 0x9b, 0x29, 0xc8, 0x3b, 0x0e, + 0x63, 0xbf, 0x6d, 0x31, 0x10, 0x11, 0xd7, 0x2c, 0x2f, 0x1b, 0x2b, 0x25, 0xd1, 0x71, 0x18, 0xfb, + 0xd7, 0x13, 0x5c, 0xed, 0x58, 0xc5, 0xeb, 0xff, 0x36, 0xd0, 0x7c, 0xc2, 0x89, 0x8d, 0xfb, 0x81, + 0x17, 0x9e, 0xfd, 0xb5, 0xe2, 0xe7, 0x13, 0x68, 0x66, 0x8b, 0xda, 0xb7, 0x88, 0xef, 0x7a, 0x7e, + 0x67, 0x34, 0x01, 0x0e, 0x9f, 0x00, 0x8f, 0x51, 0xba, 0xf0, 0xb9, 0x28, 0x5d, 0x3c, 0x36, 0xa5, + 0x5f, 0x40, 0x25, 0xd0, 0xb3, 0x7a, 0x04, 0x26, 0x42, 0x59, 0x7c, 0x22, 0x6f, 0x60, 0xf5, 0xd4, + 0x68, 0x15, 0x25, 0xc4, 0x5d, 0x4d, 0x34, 0xa2, 0xc0, 0x72, 0x08, 0x4c, 0x02, 0xe9, 0xaa, 0x6c, + 0x03, 0xb8, 0xea, 0xaa, 0x8a, 0xd7, 0xff, 0x26, 0x18, 0xd1, 0x8a, 0x7d, 0x7f, 0xc4, 0x88, 0x2f, + 0x8e, 0x11, 0x57, 0x51, 0xd9, 0xa7, 0x2e, 0x11, 0x43, 0x5b, 0x1c, 0x46, 0x89, 0x83, 0x99, 0xb1, + 0x2d, 0x25, 0xd8, 0xa9, 0x57, 0x46, 0x95, 0x46, 0xe5, 0xd3, 0xd1, 0x08, 0x9d, 0x90, 0x46, 0x7f, + 0x29, 0xa0, 0x73, 0x5b, 0xd4, 0xde, 0xf4, 0x3b, 0x21, 0x89, 0xa2, 0x4d, 0x7f, 0x87, 0x8e, 0xa8, + 0x74, 0xd6, 0xa8, 0x84, 0x4e, 0x47, 0xa5, 0xca, 0xc9, 0xa8, 0x84, 0x1f, 0xa0, 0x39, 0x4f, 0xd0, + 0xa8, 0x6d, 0xb9, 0x2e, 0xff, 0x97, 0x44, 0x66, 0x79, 0x79, 0x7c, 0xa5, 0xb2, 0xda, 0x48, 0x2a, + 0xff, 0x2c, 0xcf, 0x1a, 0x12, 0xb8, 0x9e, 0x28, 0x6c, 0xf8, 0x2c, 0x3c, 0x58, 0x5b, 0x1a, 0xf4, + 0x6b, 0x55, 0x2f, 0x23, 0x52, 0x3a, 0x9e, 0xcd, 0xca, 0xaa, 0xfb, 0x68, 0xe1, 0x50, 0x53, 0xf8, + 0x12, 0x1a, 0xdf, 0x27, 0x07, 0xc0, 0xe2, 0xbc, 0xd8, 0x77, 0xec, 0x93, 0x03, 0x75, 0xdf, 0xb1, + 0x4f, 0x0e, 0x38, 0x17, 0xef, 0x5a, 0xdd, 0x98, 0x48, 0xf2, 0x02, 0x17, 0x01, 0x50, 0xb9, 0x08, + 0xc0, 0xb5, 0xdc, 0xcb, 0x46, 0xfd, 0x3f, 0x13, 0xc8, 0xdc, 0xa2, 0xf6, 0x1d, 0xdf, 0xb2, 0xbb, + 0xe4, 0x36, 0xdd, 0x76, 0x76, 0x89, 0x1b, 0x77, 0xc9, 0x68, 0xe6, 0x3c, 0x15, 0x75, 0xa9, 0x36, + 0xcf, 0x4a, 0xa7, 0x9a, 0x67, 0xe5, 0xa7, 0x78, 0x9e, 0xd5, 0x3f, 0x2c, 0xc2, 0xbe, 0xf1, 0x55, + 0xcb, 0xeb, 0x8e, 0xf6, 0x42, 0xff, 0x1b, 0xce, 0xbd, 0x8d, 0x10, 0xb9, 0xef, 0xb1, 0xb6, 0x43, + 0x5d, 0x12, 0x99, 0x45, 0x58, 0xb3, 0xea, 0xc9, 0x9a, 0xa5, 0x04, 0xba, 0xb1, 0x71, 0xdf, 0x63, + 0xeb, 0xbc, 0x91, 0x58, 0xa7, 0x2e, 0x70, 0x4f, 0x48, 0x82, 0x0d, 0x0d, 0x9b, 0x46, 0xab, 0x9c, + 0xc2, 0x8f, 0x33, 0xba, 0xf4, 0x79, 0x18, 0x5d, 0x3e, 0x15, 0xa3, 0xd1, 0xa9, 0x18, 0x3d, 0x75, + 0x3a, 0x46, 0x4f, 0x9f, 0x30, 0x73, 0xb8, 0x08, 0x3b, 0xd4, 0x67, 0x96, 0xe7, 0x93, 0xb0, 0x1d, + 0x31, 0x8b, 0xc5, 0x3c, 0x75, 0x54, 0x60, 0x18, 0xe6, 0x61, 0x18, 0xd6, 0x13, 0xf1, 0x36, 0x48, + 0xd7, 0x6a, 0x83, 0x7e, 0xed, 0xa2, 0xa3, 0x83, 0x5a, 0x86, 0x98, 0x7b, 0x4c, 0x88, 0x5f, 0x42, + 0x79, 0xc7, 0x8a, 0x23, 0x62, 0x4e, 0x2e, 0x1b, 0x2b, 0xd3, 0xab, 0x48, 0x18, 0xe6, 0x88, 0xa0, + 0x33, 0x08, 0x55, 0x3a, 0x03, 0x50, 0x75, 0xd1, 0xb4, 0x3e, 0xea, 0x6a, 0x4a, 0x29, 0x1f, 0x2f, + 0xa5, 0xe4, 0x9f, 0x98, 0x52, 0xfe, 0x98, 0x43, 0x98, 0x6f, 0xf0, 0x42, 0xc2, 0x45, 0x5f, 0x81, + 0x8a, 0xfe, 0x25, 0x54, 0x0e, 0xc9, 0xbb, 0x31, 0x89, 0x18, 0x0d, 0xd5, 0x79, 0x9d, 0x82, 0x2a, + 0x3b, 0x53, 0xb0, 0xfe, 0xd9, 0x38, 0x1c, 0xa0, 0xca, 0x38, 0x8d, 0xd6, 0xbf, 0xa3, 0xd6, 0xbf, + 0xcb, 0xa8, 0x10, 0xc6, 0xfe, 0xb0, 0x4c, 0x05, 0x87, 0xc3, 0xd8, 0xd7, 0x23, 0x02, 0x00, 0xde, + 0x44, 0x73, 0x81, 0xe4, 0xdd, 0x5d, 0xd2, 0x96, 0x81, 0x14, 0x59, 0xf7, 0xd9, 0x41, 0xbf, 0x76, + 0x61, 0x28, 0xdc, 0xca, 0x84, 0x74, 0x26, 0x23, 0xca, 0x98, 0x92, 0x1e, 0x94, 0x0e, 0x33, 0xd5, + 0xca, 0xf8, 0x32, 0x93, 0x11, 0xd5, 0xff, 0x3e, 0x21, 0x8f, 0xca, 0x1d, 0x87, 0x10, 0x77, 0x34, + 0xd2, 0xa3, 0x2d, 0xee, 0x29, 0xb7, 0xb8, 0x7f, 0x2e, 0xc3, 0x16, 0xf7, 0x0e, 0xf3, 0xba, 0x5e, + 0x04, 0x77, 0x38, 0x23, 0x2a, 0x7d, 0x41, 0x54, 0xfa, 0x99, 0x81, 0x16, 0x6e, 0x58, 0xf7, 0x5b, + 0xf2, 0xfa, 0x2b, 0x7a, 0x95, 0x86, 0xb7, 0x48, 0xe8, 0x51, 0x57, 0xd6, 0x54, 0x57, 0x93, 0x9a, + 0x2a, 0x3b, 0x18, 0x8d, 0x43, 0xb5, 0x44, 0x91, 0x75, 0x69, 0xd0, 0xaf, 0xd5, 0x0e, 0x95, 0x2b, + 0x7e, 0x1c, 0xde, 0xed, 0x59, 0xdf, 0x0b, 0xe0, 0x9f, 0x1a, 0x68, 0x91, 0x51, 0x66, 0x75, 0xdb, + 0x4e, 0xdc, 0x8b, 0xbb, 0x16, 0x2c, 0xbb, 0x71, 0x64, 0x75, 0x78, 0x95, 0xc3, 0x23, 0xbe, 0x7a, + 0x64, 0xc4, 0x6f, 0x73, 0xb5, 0xf5, 0x54, 0xeb, 0x0e, 0x57, 0x12, 0x01, 0xaf, 0x0f, 0xfa, 0xb5, + 0x25, 0x76, 0x88, 0x58, 0x71, 0x63, 0xfe, 0x30, 0x79, 0xf5, 0xf7, 0x06, 0xaa, 0x1e, 0x3d, 0x92, + 0xc7, 0x2b, 0x9c, 0xbe, 0xaf, 0x16, 0x4e, 0x95, 0xd5, 0x46, 0x43, 0x5c, 0xb4, 0x36, 0xd4, 0x8b, + 0xd6, 0x46, 0xb0, 0xdf, 0x81, 0x0f, 0x4b, 0x2e, 0x5a, 0x1b, 0x6f, 0xc6, 0x96, 0xcf, 0x3c, 0x76, + 0xf0, 0xa4, 0x42, 0xab, 0xfa, 0x3b, 0x03, 0x5d, 0x38, 0xf2, 0xd3, 0x9f, 0x06, 0x0f, 0xeb, 0x9f, + 0xe5, 0xd0, 0xe2, 0x16, 0xb5, 0x5b, 0x24, 0x08, 0x3d, 0x1a, 0x7a, 0xcc, 0x7b, 0xef, 0x2b, 0x50, + 0x0e, 0x7e, 0x0b, 0x4d, 0xfa, 0xe4, 0x5e, 0x5b, 0x7e, 0xf2, 0x01, 0x2c, 0x5a, 0x06, 0xec, 0xaf, + 0x16, 0x7c, 0x72, 0xef, 0x96, 0x84, 0x15, 0xcd, 0x8a, 0x02, 0xeb, 0xc5, 0x64, 0xe1, 0xd8, 0xc5, + 0xe4, 0xa7, 0x39, 0xb8, 0x5c, 0x54, 0x22, 0x7d, 0xf6, 0xcb, 0x8c, 0xff, 0x4b, 0xa0, 0x3f, 0x12, + 0xbb, 0x9b, 0x75, 0xcb, 0x77, 0x48, 0xb7, 0x3b, 0xda, 0xdd, 0x1c, 0x11, 0xa7, 0x93, 0x9d, 0x5a, + 0xd4, 0x3f, 0x14, 0x8f, 0x49, 0x64, 0x54, 0xcf, 0x3e, 0x75, 0xbf, 0x94, 0xa0, 0xfe, 0x75, 0x02, + 0xa8, 0x7a, 0x9b, 0x84, 0x3d, 0xcf, 0xb7, 0x46, 0x3b, 0xcc, 0xa7, 0xfb, 0xb2, 0xf5, 0xcb, 0xd9, + 0x42, 0x28, 0x14, 0x2a, 0x1d, 0x83, 0x42, 0x9f, 0x4c, 0xa2, 0x49, 0x60, 0xcd, 0x0d, 0x12, 0xf1, + 0xd2, 0x02, 0xdf, 0x44, 0xe5, 0x28, 0x79, 0xf1, 0x05, 0xfc, 0xa9, 0xac, 0x2e, 0x26, 0x75, 0x99, + 0xfe, 0x14, 0x4c, 0x04, 0x20, 0x6d, 0x3c, 0x34, 0xfe, 0xfa, 0x58, 0x6b, 0x68, 0x03, 0xaf, 0xa3, + 0x02, 0x30, 0xc1, 0x95, 0x25, 0xc8, 0xb9, 0xc4, 0x9a, 0xf2, 0x72, 0x4a, 0x38, 0x29, 0x9a, 0x69, + 0x76, 0xa4, 0x2a, 0x37, 0xd2, 0x85, 0xb7, 0x47, 0xc0, 0x38, 0xc5, 0x88, 0xf2, 0x22, 0x49, 0x18, + 0x11, 0xcd, 0x74, 0x23, 0x02, 0xc3, 0xef, 0xa0, 0x69, 0xf8, 0x5f, 0x3b, 0x94, 0x8f, 0x73, 0x52, + 0x46, 0xaa, 0xc6, 0xb4, 0x97, 0x3b, 0x6b, 0x17, 0x07, 0xfd, 0xda, 0xf9, 0xae, 0x8a, 0x6b, 0xa6, + 0xa7, 0x34, 0x11, 0x7e, 0x1b, 0x09, 0xa0, 0x4d, 0xc4, 0x53, 0x0f, 0xf9, 0x98, 0xec, 0x82, 0xd6, + 0x81, 0xfa, 0x0c, 0x44, 0x8c, 0x6b, 0x57, 0x81, 0x35, 0xf3, 0x93, 0xaa, 0x04, 0xbf, 0x86, 0x8a, + 0x81, 0x78, 0x54, 0x01, 0xfc, 0x4d, 0xce, 0x1b, 0x33, 0x6f, 0x2d, 0x24, 0xc3, 0x04, 0xa2, 0x59, + 0x4b, 0xb4, 0xb9, 0xa1, 0x50, 0xdc, 0xc5, 0x03, 0x95, 0x15, 0x43, 0xea, 0x15, 0xbd, 0x30, 0x24, + 0x1b, 0xea, 0x86, 0x24, 0x88, 0x7b, 0x08, 0xc7, 0x70, 0xb1, 0xd4, 0x66, 0xb4, 0x1d, 0xc9, 0xab, + 0x25, 0xe0, 0x5d, 0x65, 0xf5, 0xd9, 0xb4, 0x9a, 0x3f, 0xec, 0xea, 0x49, 0x5c, 0x9b, 0xc5, 0x19, + 0x91, 0xd6, 0xcb, 0x6c, 0x56, 0xca, 0x59, 0xb0, 0x03, 0x07, 0xdc, 0x30, 0x97, 0x14, 0x16, 0x28, + 0xc7, 0xde, 0x82, 0x05, 0xa2, 0x99, 0xce, 0x02, 0x81, 0x09, 0x82, 0xcb, 0x73, 0x1a, 0x98, 0x5c, + 0x1a, 0xc1, 0xd5, 0x03, 0x9c, 0x84, 0xe0, 0x12, 0xcb, 0x12, 0x5c, 0xc2, 0xb8, 0x8d, 0xa6, 0x42, + 0xb5, 0x2a, 0x83, 0x8d, 0x91, 0xc2, 0xaa, 0xc7, 0x4b, 0x36, 0xc1, 0x2a, 0x4d, 0x49, 0x67, 0x95, + 0x26, 0xc2, 0xdb, 0x08, 0x39, 0x69, 0x35, 0x02, 0x27, 0xc2, 0x95, 0xd5, 0xf3, 0x89, 0xf5, 0x4c, + 0x9d, 0xb2, 0x66, 0x0e, 0xfa, 0xb5, 0xf9, 0x61, 0x73, 0xcd, 0xae, 0x62, 0x86, 0x87, 0xc1, 0x49, + 0x92, 0x31, 0x9c, 0x9d, 0x2b, 0x61, 0xd0, 0xb3, 0xb4, 0x5c, 0x61, 0x13, 0x4c, 0x0f, 0x43, 0x0a, + 0x73, 0x2f, 0x59, 0x9a, 0x88, 0xe0, 0x58, 0x5d, 0xf1, 0x32, 0x93, 0xa2, 0x84, 0x97, 0xc3, 0xe6, + 0xba, 0x97, 0x43, 0x1c, 0xbf, 0x85, 0x2a, 0xf1, 0x70, 0x33, 0x68, 0xce, 0x80, 0x55, 0xf3, 0xa8, + 0x7d, 0xa2, 0x28, 0x0d, 0x15, 0x05, 0xcd, 0xae, 0x6a, 0x09, 0x7f, 0x0f, 0x4d, 0x26, 0x17, 0xc0, + 0x9e, 0xbf, 0x43, 0xcd, 0x39, 0xdd, 0x72, 0xf6, 0xee, 0x57, 0x58, 0xf6, 0x86, 0xa8, 0x6e, 0x59, + 0x11, 0x60, 0x07, 0x4d, 0x87, 0xda, 0x76, 0xc8, 0xc4, 0x60, 0xfb, 0xe2, 0x21, 0x7c, 0x48, 0x47, + 0xed, 0x99, 0x41, 0xbf, 0x66, 0xea, 0x6a, 0x5a, 0x0f, 0x19, 0x93, 0x7c, 0xf4, 0x82, 0xe4, 0x58, + 0xd9, 0x5c, 0xd0, 0x47, 0x4f, 0x3f, 0x6f, 0x96, 0x69, 0x2a, 0xc1, 0xf4, 0xd1, 0x4b, 0x61, 0x3e, + 0x7a, 0x41, 0x7a, 0x9e, 0x6f, 0x2e, 0xea, 0xa3, 0x97, 0x39, 0xe9, 0x17, 0xa3, 0x37, 0x6c, 0xae, + 0x8f, 0xde, 0x10, 0x5f, 0x2b, 0xa1, 0x02, 0x3c, 0xa1, 0x8e, 0xea, 0x3f, 0xce, 0xa1, 0x99, 0xcc, + 0xbd, 0x08, 0xfe, 0x1a, 0x9a, 0x80, 0xbc, 0x28, 0x8a, 0x14, 0x3c, 0xe8, 0xd7, 0xa6, 0x7d, 0x3d, + 0x29, 0x82, 0x1c, 0xaf, 0xa2, 0x52, 0x72, 0x3f, 0x25, 0x2f, 0x28, 0xa0, 0x40, 0x49, 0x30, 0xb5, + 0x40, 0x49, 0x30, 0xdc, 0x44, 0xc5, 0x9e, 0x48, 0x68, 0xb2, 0x44, 0x81, 0xb5, 0x4c, 0x42, 0x6a, + 0xda, 0x95, 0x90, 0x92, 0x35, 0x27, 0x8e, 0x71, 0x07, 0x97, 0x5e, 0xcf, 0xe4, 0x4f, 0x72, 0x3d, + 0x53, 0x7f, 0x0f, 0x61, 0x08, 0xe0, 0x36, 0x0b, 0x89, 0xd5, 0x4b, 0x32, 0xee, 0x32, 0xca, 0xa5, + 0xa5, 0xda, 0xec, 0xa0, 0x5f, 0x9b, 0xf4, 0xd4, 0x3a, 0x24, 0xe7, 0xb9, 0x78, 0x6d, 0xf8, 0x35, + 0x22, 0x87, 0xce, 0x41, 0x87, 0x6a, 0xde, 0x7e, 0xd2, 0x07, 0xd6, 0x7f, 0x95, 0x43, 0x53, 0x5b, + 0x50, 0xbf, 0xb5, 0x44, 0xb5, 0x79, 0x8c, 0x7e, 0x9f, 0x43, 0xf9, 0x7b, 0x16, 0x73, 0x76, 0xa1, + 0xd7, 0x92, 0xf8, 0x34, 0x00, 0xd4, 0x4f, 0x03, 0x00, 0xaf, 0xa3, 0x99, 0x9d, 0x90, 0xf6, 0xda, + 0xb2, 0x3b, 0x5e, 0x63, 0x89, 0xc0, 0xc3, 0x52, 0xc7, 0x45, 0xd2, 0x51, 0xad, 0xc8, 0x9a, 0xd2, + 0x04, 0xc3, 0xb2, 0x72, 0xe2, 0x89, 0x65, 0xe5, 0x2b, 0x68, 0x9a, 0x84, 0x21, 0x0d, 0x37, 0x77, + 0x6e, 0x78, 0x51, 0xc4, 0x39, 0x9b, 0x07, 0x1f, 0x61, 0x22, 0xe9, 0x12, 0x45, 0x39, 0xa3, 0x53, + 0xff, 0xad, 0x81, 0x26, 0xdf, 0xe2, 0xfe, 0x27, 0x31, 0x49, 0x3d, 0x30, 0x9e, 0xe8, 0xc1, 0xe9, + 0x2a, 0xe7, 0x2b, 0xa8, 0x08, 0x71, 0x4a, 0xe3, 0x23, 0xd2, 0x55, 0x48, 0x7b, 0x9a, 0x42, 0x41, + 0x20, 0x97, 0xdf, 0x40, 0x79, 0xa0, 0x15, 0x2e, 0xa3, 0xfc, 0x06, 0xf7, 0x7d, 0x76, 0x0c, 0x57, + 0x50, 0x71, 0xe3, 0xae, 0xe7, 0x30, 0xe2, 0xce, 0x1a, 0xb8, 0x88, 0xc6, 0x6f, 0xde, 0xbc, 0x31, + 0x9b, 0xc3, 0xf3, 0x68, 0xf6, 0x15, 0x62, 0xb9, 0x5d, 0xcf, 0x27, 0x1b, 0xf7, 0x45, 0x66, 0x9a, + 0x1d, 0xc7, 0x93, 0xa8, 0xd4, 0x22, 0x7b, 0x04, 0x1a, 0x4f, 0xac, 0x7e, 0x6a, 0xa0, 0xbc, 0xd8, + 0x22, 0x10, 0x34, 0xf3, 0x1a, 0x61, 0x82, 0x0f, 0x80, 0x44, 0x18, 0xa7, 0x49, 0x30, 0xa5, 0x48, + 0xf5, 0xfc, 0x90, 0x67, 0x1a, 0x67, 0xeb, 0x97, 0x7e, 0xf4, 0xd1, 0x27, 0xbf, 0xce, 0x3d, 0x5b, + 0x37, 0x9b, 0x77, 0xbf, 0xd1, 0xdc, 0xa3, 0xf6, 0x95, 0x88, 0xb0, 0xe6, 0x03, 0x08, 0xcc, 0xfb, + 0xcd, 0x07, 0x9e, 0xfb, 0xfe, 0x35, 0xe3, 0xf2, 0x0b, 0x06, 0xbe, 0x86, 0xf2, 0x10, 0x5e, 0x2c, + 0x08, 0xab, 0x86, 0xfa, 0x68, 0xdb, 0xe3, 0x3f, 0xc9, 0x19, 0xa0, 0x5b, 0x78, 0x1d, 0x7e, 0x2e, + 0x81, 0x17, 0x1f, 0xdb, 0x31, 0x6c, 0xf0, 0x20, 0x55, 0xc5, 0x6a, 0x2d, 0x1a, 0xad, 0xef, 0x12, + 0x67, 0xbf, 0x45, 0xa2, 0x80, 0xfa, 0x11, 0x59, 0x7b, 0xe7, 0xe3, 0x7f, 0x2d, 0x8d, 0xfd, 0xf0, + 0xe1, 0x92, 0xf1, 0x8f, 0x87, 0x4b, 0xc6, 0x07, 0x0f, 0x97, 0x8c, 0x7f, 0x3e, 0x5c, 0x32, 0x7e, + 0xf1, 0x68, 0x69, 0xec, 0x83, 0x47, 0x4b, 0x63, 0x1f, 0x3f, 0x5a, 0x1a, 0xfb, 0xc1, 0xd7, 0x95, + 0xdf, 0x57, 0x58, 0x61, 0xcf, 0x72, 0xad, 0x20, 0xa4, 0x3c, 0x50, 0xf2, 0xaf, 0xe4, 0xe7, 0x11, + 0x7f, 0xca, 0xcd, 0x5f, 0x07, 0xe0, 0x96, 0x10, 0x37, 0x36, 0x69, 0xe3, 0x7a, 0xe0, 0xd9, 0x05, + 0xf0, 0xe5, 0xea, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x54, 0xd6, 0x74, 0x94, 0x2c, 0x32, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2922,16 +2923,18 @@ func (m *JobSubmittedEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - { - size, err := m.Job.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if m.Job != nil { + { + size, err := m.Job.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintEvent(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x2a } - i-- - dAtA[i] = 0x2a if m.Created != nil { { size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) @@ -4042,16 +4045,18 @@ func (m *JobUtilisationEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { for k := range m.TotalCumulativeUsage { v := m.TotalCumulativeUsage[k] baseI := i - { - size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintEvent(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) i = encodeVarintEvent(dAtA, i, uint64(len(k))) @@ -4092,16 +4097,18 @@ func (m *JobUtilisationEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { for k := range m.MaxResourcesForPeriod { v := m.MaxResourcesForPeriod[k] baseI := i - { - size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvent(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintEvent(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) i = encodeVarintEvent(dAtA, i, uint64(len(k))) @@ -5212,8 +5219,10 @@ func (m *JobSubmittedEvent) Size() (n int) { l = m.Created.Size() n += 1 + l + sovEvent(uint64(l)) } - l = m.Job.Size() - n += 1 + l + sovEvent(uint64(l)) + if m.Job != nil { + l = m.Job.Size() + n += 1 + l + sovEvent(uint64(l)) + } return n } @@ -5760,8 +5769,12 @@ func (m *JobUtilisationEvent) Size() (n int) { for k, v := range m.MaxResourcesForPeriod { _ = k _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovEvent(uint64(len(k))) + 1 + l + sovEvent(uint64(l)) + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovEvent(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovEvent(uint64(len(k))) + l n += mapEntrySize + 1 + sovEvent(uint64(mapEntrySize)) } } @@ -5784,8 +5797,12 @@ func (m *JobUtilisationEvent) Size() (n int) { for k, v := range m.TotalCumulativeUsage { _ = k _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovEvent(uint64(len(k))) + 1 + l + sovEvent(uint64(l)) + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovEvent(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovEvent(uint64(len(k))) + l n += mapEntrySize + 1 + sovEvent(uint64(mapEntrySize)) } } @@ -6317,7 +6334,7 @@ func (this *JobSubmittedEvent) String() string { `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Timestamp", "types.Timestamp", 1) + `,`, - `Job:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Job), "Job", "Job", 1), `&`, ``, 1) + `,`, + `Job:` + strings.Replace(fmt.Sprintf("%v", this.Job), "Job", "Job", 1) + `,`, `}`, }, "") return s @@ -6564,7 +6581,7 @@ func (this *JobUtilisationEvent) String() string { keysForMaxResourcesForPeriod = append(keysForMaxResourcesForPeriod, k) } github_com_gogo_protobuf_sortkeys.Strings(keysForMaxResourcesForPeriod) - mapStringForMaxResourcesForPeriod := "map[string]resource.Quantity{" + mapStringForMaxResourcesForPeriod := "map[string]*resource.Quantity{" for _, k := range keysForMaxResourcesForPeriod { mapStringForMaxResourcesForPeriod += fmt.Sprintf("%v: %v,", k, this.MaxResourcesForPeriod[k]) } @@ -6574,7 +6591,7 @@ func (this *JobUtilisationEvent) String() string { keysForTotalCumulativeUsage = append(keysForTotalCumulativeUsage, k) } github_com_gogo_protobuf_sortkeys.Strings(keysForTotalCumulativeUsage) - mapStringForTotalCumulativeUsage := "map[string]resource.Quantity{" + mapStringForTotalCumulativeUsage := "map[string]*resource.Quantity{" for _, k := range keysForTotalCumulativeUsage { mapStringForTotalCumulativeUsage += fmt.Sprintf("%v: %v,", k, this.TotalCumulativeUsage[k]) } @@ -7124,6 +7141,9 @@ func (m *JobSubmittedEvent) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } + if m.Job == nil { + m.Job = &Job{} + } if err := m.Job.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -11300,10 +11320,10 @@ func (m *JobUtilisationEvent) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.MaxResourcesForPeriod == nil { - m.MaxResourcesForPeriod = make(map[string]resource.Quantity) + m.MaxResourcesForPeriod = make(map[string]*resource.Quantity) } var mapkey string - mapvalue := &resource.Quantity{} + var mapvalue *resource.Quantity for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -11397,7 +11417,7 @@ func (m *JobUtilisationEvent) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.MaxResourcesForPeriod[mapkey] = *mapvalue + m.MaxResourcesForPeriod[mapkey] = mapvalue iNdEx = postIndex case 8: if wireType != 2 { @@ -11544,10 +11564,10 @@ func (m *JobUtilisationEvent) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.TotalCumulativeUsage == nil { - m.TotalCumulativeUsage = make(map[string]resource.Quantity) + m.TotalCumulativeUsage = make(map[string]*resource.Quantity) } var mapkey string - mapvalue := &resource.Quantity{} + var mapvalue *resource.Quantity for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -11641,7 +11661,7 @@ func (m *JobUtilisationEvent) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.TotalCumulativeUsage[mapkey] = *mapvalue + m.TotalCumulativeUsage[mapkey] = mapvalue iNdEx = postIndex default: iNdEx = preIndex diff --git a/pkg/api/event.proto b/pkg/api/event.proto index 4637285c4f9..2ee4c17afb6 100644 --- a/pkg/api/event.proto +++ b/pkg/api/event.proto @@ -20,7 +20,7 @@ message JobSubmittedEvent { string job_set_id = 2; string queue = 3; google.protobuf.Timestamp created = 4; - Job job = 5 [(gogoproto.nullable) = false]; + Job job = 5; } message JobQueuedEvent { @@ -166,12 +166,12 @@ message JobUtilisationEvent { google.protobuf.Timestamp created = 4; string cluster_id = 5; string kubernetes_id = 6; - map MaxResourcesForPeriod = 7 [(gogoproto.nullable) = false]; + map MaxResourcesForPeriod = 7; string node_name = 8; int32 pod_number = 9; string pod_name = 10; string pod_namespace = 11; - map total_cumulative_usage = 12 [(gogoproto.nullable) = false]; + map total_cumulative_usage = 12; } message JobReprioritizingEvent { diff --git a/pkg/client/domain/watch.go b/pkg/client/domain/watch.go index 610c06db0ac..73bef11a1b4 100644 --- a/pkg/client/domain/watch.go +++ b/pkg/client/domain/watch.go @@ -171,7 +171,7 @@ func updateJobInfo(info *JobInfo, event api.Event) { if isLifeCycleEvent(event) && !isPodEvent(event) { if info.LastUpdate.After(eventTs) { if submitEvent, ok := event.(*api.JobSubmittedEvent); ok { - info.Job = &submitEvent.Job + info.Job = submitEvent.Job } // skipping event as it is out of time order return @@ -182,7 +182,7 @@ func updateJobInfo(info *JobInfo, event api.Event) { switch typed := event.(type) { case *api.JobSubmittedEvent: info.Status = Submitted - info.Job = &typed.Job + info.Job = typed.Job for len(info.PodStatus) < len(typed.Job.PodSpecs) { info.PodStatus = append(info.PodStatus, Submitted) info.PodLastUpdated = append(info.PodLastUpdated, time.Time{}) @@ -222,7 +222,10 @@ func updateJobInfo(info *JobInfo, event api.Event) { case *api.JobIngressInfoEvent: // NOOP case *api.JobUtilisationEvent: - info.MaxUsedResources.Max(typed.MaxResourcesForPeriod) + r := typed.MaxResourcesForPeriod + if r != nil { + info.MaxUsedResources.Max(*r) + } } } From eeadaa75b354e0b13bdf867640633f9258584f42 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Mon, 24 Jun 2024 19:09:45 +0100 Subject: [PATCH 09/27] more fixes Signed-off-by: Chris Martin --- .../armada/event/conversion/conversions.go | 2 +- .../event/conversion/conversions_test.go | 31 +- internal/common/resource/resource.go | 18 + internal/executor/reporter/event.go | 4 +- .../job_utilisation_reporter_test.go | 4 +- pkg/armadaevents/events.pb.go | 564 +++++++++--------- pkg/armadaevents/events.proto | 4 +- pkg/client/domain/watch.go | 5 +- pkg/client/domain/watch_test.go | 9 +- .../jobservice/fakearmada/event_server.go | 2 +- 10 files changed, 338 insertions(+), 305 deletions(-) diff --git a/internal/armada/event/conversion/conversions.go b/internal/armada/event/conversion/conversions.go index ecb8a749dfd..74691b298f5 100644 --- a/internal/armada/event/conversion/conversions.go +++ b/internal/armada/event/conversion/conversions.go @@ -89,7 +89,7 @@ func FromInternalSubmit(owner string, groups []string, queue string, jobSet stri JobSetId: jobSet, Queue: queue, Created: protoutil.ToTimestamp(time), - Job: *job, + Job: job, } queuedEvent := &api.JobQueuedEvent{ diff --git a/internal/armada/event/conversion/conversions_test.go b/internal/armada/event/conversion/conversions_test.go index 6f367340364..d08bcebc190 100644 --- a/internal/armada/event/conversion/conversions_test.go +++ b/internal/armada/event/conversion/conversions_test.go @@ -82,7 +82,7 @@ func TestConvertSubmitted(t *testing.T) { JobSetId: jobSetName, Queue: queue, Created: protoutil.ToTimestamp(baseTime), - Job: api.Job{ + Job: &api.Job{ Id: jobIdString, JobSetId: jobSetName, Queue: queue, @@ -795,13 +795,13 @@ func TestConvertResourceUtilisation(t *testing.T) { }, }, }, - MaxResourcesForPeriod: map[string]resource.Quantity{ - "cpu": resource.MustParse("2.0"), - "mem": resource.MustParse("100Gi"), + MaxResourcesForPeriod: map[string]*resource.Quantity{ + "cpu": resourcePointer("2.0"), + "mem": resourcePointer("100Gi"), }, - TotalCumulativeUsage: map[string]resource.Quantity{ - "cpu": resource.MustParse("3.0"), - "mem": resource.MustParse("200Gi"), + TotalCumulativeUsage: map[string]*resource.Quantity{ + "cpu": resourcePointer("3.0"), + "mem": resourcePointer("200Gi"), }, }, }, @@ -817,17 +817,17 @@ func TestConvertResourceUtilisation(t *testing.T) { Created: protoutil.ToTimestamp(baseTime), ClusterId: executorId, KubernetesId: runIdString, - MaxResourcesForPeriod: map[string]resource.Quantity{ - "cpu": resource.MustParse("2.0"), - "mem": resource.MustParse("100Gi"), + MaxResourcesForPeriod: map[string]*resource.Quantity{ + "cpu": resourcePointer("2.0"), + "mem": resourcePointer("100Gi"), }, NodeName: nodeName, PodNumber: podNumber, PodName: podName, PodNamespace: namespace, - TotalCumulativeUsage: map[string]resource.Quantity{ - "cpu": resource.MustParse("3.0"), - "mem": resource.MustParse("200Gi"), + TotalCumulativeUsage: map[string]*resource.Quantity{ + "cpu": resourcePointer("3.0"), + "mem": resourcePointer("200Gi"), }, }, }, @@ -982,3 +982,8 @@ func toEventSeq(event ...*armadaevents.EventSequence_Event) *armadaevents.EventS UserId: userId, } } + +func resourcePointer(s string) *resource.Quantity { + r := resource.MustParse(s) + return &r +} diff --git a/internal/common/resource/resource.go b/internal/common/resource/resource.go index 64760b59f1f..71fed6941c8 100644 --- a/internal/common/resource/resource.go +++ b/internal/common/resource/resource.go @@ -22,6 +22,24 @@ func FromResourceList(list v1.ResourceList) ComputeResources { return resources } +func FromProtoMap(m map[string]*resource.Quantity) ComputeResources { + resources := make(ComputeResources, len(m)) + for k, v := range m { + if v != nil { + resources[k] = *v + } + } + return resources +} + +func (a ComputeResources) ToProtoMap() map[string]*resource.Quantity { + resources := make(map[string]*resource.Quantity, len(a)) + for k, v := range a { + resources[k] = &v + } + return resources +} + // QuantityAsFloat64 returns a float64 representation of a quantity. // We need our own function because q.AsApproximateFloat64 sometimes returns surprising results. // For example, resource.MustParse("5188205838208Ki").AsApproximateFloat64() returns 0.004291583283300088, diff --git a/internal/executor/reporter/event.go b/internal/executor/reporter/event.go index f60c3450166..75c61dfad9e 100644 --- a/internal/executor/reporter/event.go +++ b/internal/executor/reporter/event.go @@ -420,8 +420,8 @@ func CreateJobUtilisationEvent(pod *v1.Pod, utilisationData *domain.UtilisationD }, }, }, - MaxResourcesForPeriod: utilisationData.CurrentUsage, - TotalCumulativeUsage: utilisationData.CumulativeUsage, + MaxResourcesForPeriod: utilisationData.CurrentUsage.ToProtoMap(), + TotalCumulativeUsage: utilisationData.CumulativeUsage.ToProtoMap(), }, }, }) diff --git a/internal/executor/utilisation/job_utilisation_reporter_test.go b/internal/executor/utilisation/job_utilisation_reporter_test.go index d41d4b31789..1fc9e2df304 100644 --- a/internal/executor/utilisation/job_utilisation_reporter_test.go +++ b/internal/executor/utilisation/job_utilisation_reporter_test.go @@ -60,8 +60,8 @@ func TestUtilisationEventReporter_ReportUtilisationEvents(t *testing.T) { _, ok = fakeEventReporter.ReceivedEvents[1].Event.Events[0].Event.(*armadaevents.EventSequence_Event_ResourceUtilisation) assert.True(t, ok) - assert.Equal(t, testPodResources.CurrentUsage, armadaresource.ComputeResources(event1.ResourceUtilisation.MaxResourcesForPeriod)) - assert.Equal(t, testPodResources.CumulativeUsage, armadaresource.ComputeResources(event1.ResourceUtilisation.TotalCumulativeUsage)) + assert.Equal(t, testPodResources.CurrentUsage, armadaresource.FromProtoMap(event1.ResourceUtilisation.MaxResourcesForPeriod)) + assert.Equal(t, testPodResources.CumulativeUsage, armadaresource.FromProtoMap(event1.ResourceUtilisation.TotalCumulativeUsage)) event1CreatedTime := fakeEventReporter.ReceivedEvents[0].Event.Events[0].Created event2CreatedTime := fakeEventReporter.ReceivedEvents[1].Event.Events[0].Created diff --git a/pkg/armadaevents/events.pb.go b/pkg/armadaevents/events.pb.go index 6c8b802d274..2a316ff91a2 100644 --- a/pkg/armadaevents/events.pb.go +++ b/pkg/armadaevents/events.pb.go @@ -548,11 +548,11 @@ func (*EventSequence_Event) XXX_OneofWrappers() []interface{} { // Resource usage of a particular k8s object created as part of a job. type ResourceUtilisation struct { - RunId *Uuid `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"runId,omitempty"` - JobId *Uuid `protobuf:"bytes,2,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - ResourceInfo *KubernetesResourceInfo `protobuf:"bytes,3,opt,name=resource_info,json=resourceInfo,proto3" json:"resourceInfo,omitempty"` - MaxResourcesForPeriod map[string]resource.Quantity `protobuf:"bytes,4,rep,name=max_resources_for_period,json=maxResourcesForPeriod,proto3" json:"maxResourcesForPeriod" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - TotalCumulativeUsage map[string]resource.Quantity `protobuf:"bytes,5,rep,name=total_cumulative_usage,json=totalCumulativeUsage,proto3" json:"totalCumulativeUsage" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + RunId *Uuid `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"runId,omitempty"` + JobId *Uuid `protobuf:"bytes,2,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + ResourceInfo *KubernetesResourceInfo `protobuf:"bytes,3,opt,name=resource_info,json=resourceInfo,proto3" json:"resourceInfo,omitempty"` + MaxResourcesForPeriod map[string]*resource.Quantity `protobuf:"bytes,4,rep,name=max_resources_for_period,json=maxResourcesForPeriod,proto3" json:"maxResourcesForPeriod,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + TotalCumulativeUsage map[string]*resource.Quantity `protobuf:"bytes,5,rep,name=total_cumulative_usage,json=totalCumulativeUsage,proto3" json:"totalCumulativeUsage,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // This is a string representation of the job_id. Eventually we will retire the job_id field and just use strings JobIdStr string `protobuf:"bytes,6,opt,name=job_id_str,json=jobIdStr,proto3" json:"jobIdStr,omitempty"` RunIdStr string `protobuf:"bytes,7,opt,name=run_id_str,json=runIdStr,proto3" json:"runIdStr,omitempty"` @@ -612,14 +612,14 @@ func (m *ResourceUtilisation) GetResourceInfo() *KubernetesResourceInfo { return nil } -func (m *ResourceUtilisation) GetMaxResourcesForPeriod() map[string]resource.Quantity { +func (m *ResourceUtilisation) GetMaxResourcesForPeriod() map[string]*resource.Quantity { if m != nil { return m.MaxResourcesForPeriod } return nil } -func (m *ResourceUtilisation) GetTotalCumulativeUsage() map[string]resource.Quantity { +func (m *ResourceUtilisation) GetTotalCumulativeUsage() map[string]*resource.Quantity { if m != nil { return m.TotalCumulativeUsage } @@ -3905,8 +3905,8 @@ func init() { proto.RegisterType((*EventSequence)(nil), "armadaevents.EventSequence") proto.RegisterType((*EventSequence_Event)(nil), "armadaevents.EventSequence.Event") proto.RegisterType((*ResourceUtilisation)(nil), "armadaevents.ResourceUtilisation") - proto.RegisterMapType((map[string]resource.Quantity)(nil), "armadaevents.ResourceUtilisation.MaxResourcesForPeriodEntry") - proto.RegisterMapType((map[string]resource.Quantity)(nil), "armadaevents.ResourceUtilisation.TotalCumulativeUsageEntry") + proto.RegisterMapType((map[string]*resource.Quantity)(nil), "armadaevents.ResourceUtilisation.MaxResourcesForPeriodEntry") + proto.RegisterMapType((map[string]*resource.Quantity)(nil), "armadaevents.ResourceUtilisation.TotalCumulativeUsageEntry") proto.RegisterType((*Uuid)(nil), "armadaevents.Uuid") proto.RegisterType((*SubmitJob)(nil), "armadaevents.SubmitJob") proto.RegisterType((*KubernetesMainObject)(nil), "armadaevents.KubernetesMainObject") @@ -3960,247 +3960,247 @@ func init() { func init() { proto.RegisterFile("pkg/armadaevents/events.proto", fileDescriptor_6aab92ca59e015f8) } var fileDescriptor_6aab92ca59e015f8 = []byte{ - // 3831 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3c, 0x4b, 0x6f, 0x1b, 0x47, - 0x9a, 0x6e, 0x92, 0xe2, 0xe3, 0xa3, 0x1e, 0x74, 0xe9, 0x61, 0x5a, 0xb6, 0x45, 0x99, 0xce, 0x6e, - 0xec, 0x20, 0xa1, 0x12, 0xc5, 0x09, 0xf2, 0x58, 0x24, 0x10, 0x6d, 0xc5, 0xb6, 0x62, 0xd9, 0x0a, - 0x65, 0x65, 0xbd, 0x41, 0x16, 0x4c, 0x93, 0x5d, 0xa2, 0xda, 0x22, 0xbb, 0x99, 0x7e, 0x28, 0x12, - 0x90, 0x43, 0xb2, 0x08, 0x76, 0x6f, 0x59, 0x1f, 0xf6, 0xb0, 0xb7, 0xec, 0x1e, 0x77, 0x17, 0xc1, - 0x02, 0x7b, 0xdc, 0xc7, 0x6d, 0x0f, 0x59, 0x60, 0x31, 0xc8, 0x69, 0x30, 0x27, 0xce, 0x4c, 0x32, - 0x33, 0x07, 0x02, 0x33, 0xff, 0x60, 0x80, 0x41, 0xbd, 0xba, 0xab, 0x9a, 0x4d, 0x9b, 0x96, 0xac, - 0x38, 0x41, 0x72, 0xb2, 0xfb, 0x7b, 0x56, 0xd5, 0xf7, 0xd5, 0x57, 0xdf, 0xf7, 0x55, 0x51, 0x70, - 0xae, 0xbb, 0xdb, 0x5a, 0xd2, 0x9d, 0x8e, 0x6e, 0xe8, 0x78, 0x0f, 0x5b, 0x9e, 0xbb, 0xc4, 0xfe, - 0xa9, 0x74, 0x1d, 0xdb, 0xb3, 0xd1, 0xb8, 0x8c, 0x9a, 0x2f, 0xef, 0xbe, 0xe2, 0x56, 0x4c, 0x7b, - 0x49, 0xef, 0x9a, 0x4b, 0x4d, 0xdb, 0xc1, 0x4b, 0x7b, 0x2f, 0x2c, 0xb5, 0xb0, 0x85, 0x1d, 0xdd, - 0xc3, 0x06, 0xe3, 0x98, 0xbf, 0x28, 0xd1, 0x58, 0xd8, 0xfb, 0xc8, 0x76, 0x76, 0x4d, 0xab, 0x15, - 0x47, 0x59, 0x6a, 0xd9, 0x76, 0xab, 0x8d, 0x97, 0xe8, 0x57, 0xc3, 0xdf, 0x5e, 0xf2, 0xcc, 0x0e, - 0x76, 0x3d, 0xbd, 0xd3, 0xe5, 0x04, 0x97, 0x43, 0x51, 0x1d, 0xbd, 0xb9, 0x63, 0x5a, 0xd8, 0x39, - 0x58, 0xa2, 0xe3, 0xed, 0x9a, 0x4b, 0x0e, 0x76, 0x6d, 0xdf, 0x69, 0xe2, 0x01, 0xb1, 0xcf, 0xb5, - 0x4c, 0x6f, 0xc7, 0x6f, 0x54, 0x9a, 0x76, 0x67, 0xa9, 0x65, 0xb7, 0xec, 0x50, 0x3e, 0xf9, 0xa2, - 0x1f, 0xf4, 0x7f, 0x9c, 0xfc, 0x35, 0xd3, 0xf2, 0xb0, 0x63, 0xe9, 0xed, 0x25, 0xb7, 0xb9, 0x83, - 0x0d, 0xbf, 0x8d, 0x9d, 0xf0, 0x7f, 0x76, 0xe3, 0x1e, 0x6e, 0x7a, 0xee, 0x00, 0x80, 0xf1, 0x96, - 0x7f, 0x3d, 0x0b, 0x13, 0xab, 0x64, 0x69, 0x36, 0xf1, 0x87, 0x3e, 0xb6, 0x9a, 0x18, 0x5d, 0x82, - 0xb1, 0x0f, 0x7d, 0xec, 0xe3, 0xa2, 0xb6, 0xa8, 0x5d, 0xcc, 0x55, 0xa7, 0xfb, 0xbd, 0xd2, 0x14, - 0x05, 0x3c, 0x6b, 0x77, 0x4c, 0x0f, 0x77, 0xba, 0xde, 0x41, 0x8d, 0x51, 0xa0, 0xd7, 0x60, 0xfc, - 0x9e, 0xdd, 0xa8, 0xbb, 0xd8, 0xab, 0x5b, 0x7a, 0x07, 0x17, 0x13, 0x94, 0xa3, 0xd8, 0xef, 0x95, - 0x66, 0xee, 0xd9, 0x8d, 0x4d, 0xec, 0xdd, 0xd2, 0x3b, 0x32, 0x1b, 0x84, 0x50, 0xf4, 0x1c, 0x64, - 0x7c, 0x17, 0x3b, 0x75, 0xd3, 0x28, 0x26, 0x29, 0xdb, 0x4c, 0xbf, 0x57, 0x2a, 0x10, 0xd0, 0x0d, - 0x43, 0x62, 0x49, 0x33, 0x08, 0x7a, 0x16, 0xd2, 0x2d, 0xc7, 0xf6, 0xbb, 0x6e, 0x31, 0xb5, 0x98, - 0x14, 0xd4, 0x0c, 0x22, 0x53, 0x33, 0x08, 0xba, 0x0d, 0x69, 0x66, 0xef, 0xe2, 0xd8, 0x62, 0xf2, - 0x62, 0x7e, 0xf9, 0x7c, 0x45, 0x76, 0x82, 0x8a, 0x32, 0x61, 0xf6, 0xc5, 0x04, 0x32, 0xbc, 0x2c, - 0x90, 0xbb, 0xcd, 0x7f, 0x4e, 0xc3, 0x18, 0xa5, 0x43, 0xb7, 0x21, 0xd3, 0x74, 0x30, 0x31, 0x56, - 0x11, 0x2d, 0x6a, 0x17, 0xf3, 0xcb, 0xf3, 0x15, 0xe6, 0x04, 0x15, 0x61, 0xa4, 0xca, 0x1d, 0xe1, - 0x04, 0xd5, 0xd3, 0xfd, 0x5e, 0xe9, 0x24, 0x27, 0x0f, 0xa5, 0xde, 0xff, 0x65, 0x49, 0xab, 0x09, - 0x29, 0x68, 0x03, 0x72, 0xae, 0xdf, 0xe8, 0x98, 0xde, 0x9a, 0xdd, 0xa0, 0x6b, 0x9e, 0x5f, 0x3e, - 0xa5, 0x0e, 0x77, 0x53, 0xa0, 0xab, 0xa7, 0xfa, 0xbd, 0xd2, 0x74, 0x40, 0x1d, 0x4a, 0xbc, 0x7e, - 0xa2, 0x16, 0x0a, 0x41, 0x3b, 0x30, 0xe5, 0xe0, 0xae, 0x63, 0xda, 0x8e, 0xe9, 0x99, 0x2e, 0x26, - 0x72, 0x13, 0x54, 0xee, 0x39, 0x55, 0x6e, 0x4d, 0x25, 0xaa, 0x9e, 0xeb, 0xf7, 0x4a, 0xa7, 0x23, - 0x9c, 0x8a, 0x8e, 0xa8, 0x58, 0xe4, 0x01, 0x8a, 0x80, 0x36, 0xb1, 0x47, 0xed, 0x99, 0x5f, 0x5e, - 0x7c, 0xa0, 0xb2, 0x4d, 0xec, 0x55, 0x17, 0xfb, 0xbd, 0xd2, 0xd9, 0x41, 0x7e, 0x45, 0x65, 0x8c, - 0x7c, 0xd4, 0x86, 0x82, 0x0c, 0x35, 0xc8, 0x04, 0x53, 0x54, 0xe7, 0xc2, 0x70, 0x9d, 0x84, 0xaa, - 0xba, 0xd0, 0xef, 0x95, 0xe6, 0xa3, 0xbc, 0x8a, 0xbe, 0x01, 0xc9, 0xc4, 0x3e, 0x4d, 0xdd, 0x6a, - 0xe2, 0x36, 0x51, 0x33, 0x16, 0x67, 0x9f, 0x2b, 0x02, 0xcd, 0xec, 0x13, 0x50, 0xab, 0xf6, 0x09, - 0xc0, 0xe8, 0x7d, 0x18, 0x0f, 0x3e, 0xc8, 0x7a, 0xa5, 0xb9, 0x1f, 0xc5, 0x0b, 0x25, 0x2b, 0x35, - 0xdf, 0xef, 0x95, 0xe6, 0x64, 0x1e, 0x45, 0xb4, 0x22, 0x2d, 0x94, 0xde, 0x66, 0x2b, 0x93, 0x19, - 0x2e, 0x9d, 0x51, 0xc8, 0xd2, 0xdb, 0x83, 0x2b, 0xa2, 0x48, 0x23, 0xd2, 0xc9, 0x26, 0xf6, 0x9b, - 0x4d, 0x8c, 0x0d, 0x6c, 0x14, 0xb3, 0x71, 0xd2, 0xd7, 0x24, 0x0a, 0x26, 0x5d, 0xe6, 0x51, 0xa5, - 0xcb, 0x18, 0xb2, 0xd6, 0xf7, 0xec, 0xc6, 0xaa, 0xe3, 0xd8, 0x8e, 0x5b, 0xcc, 0xc5, 0xad, 0xf5, - 0x9a, 0x40, 0xb3, 0xb5, 0x0e, 0xa8, 0xd5, 0xb5, 0x0e, 0xc0, 0x7c, 0xbc, 0x35, 0xdf, 0xba, 0x89, - 0x75, 0x17, 0x1b, 0x45, 0x18, 0x32, 0xde, 0x80, 0x22, 0x18, 0x6f, 0x00, 0x19, 0x18, 0x6f, 0x80, - 0x41, 0x06, 0x4c, 0xb2, 0xef, 0x15, 0xd7, 0x35, 0x5b, 0x16, 0x36, 0x8a, 0x79, 0x2a, 0xff, 0x6c, - 0x9c, 0x7c, 0x41, 0x53, 0x3d, 0xdb, 0xef, 0x95, 0x8a, 0x2a, 0x9f, 0xa2, 0x23, 0x22, 0x13, 0x7d, - 0x00, 0x13, 0x0c, 0x52, 0xf3, 0x2d, 0xcb, 0xb4, 0x5a, 0xc5, 0x71, 0xaa, 0xe4, 0x4c, 0x9c, 0x12, - 0x4e, 0x52, 0x3d, 0xd3, 0xef, 0x95, 0x4e, 0x29, 0x5c, 0x8a, 0x0a, 0x55, 0x20, 0x89, 0x18, 0x0c, - 0x10, 0x1a, 0x76, 0x22, 0x2e, 0x62, 0xac, 0xa9, 0x44, 0x2c, 0x62, 0x44, 0x38, 0xd5, 0x88, 0x11, - 0x41, 0x86, 0xf6, 0xe0, 0x46, 0x9e, 0x1c, 0x6e, 0x0f, 0x6e, 0x67, 0xc9, 0x1e, 0x31, 0xa6, 0x56, - 0xa4, 0xa1, 0x4f, 0x34, 0x98, 0x75, 0x3d, 0xdd, 0x32, 0xf4, 0xb6, 0x6d, 0xe1, 0x1b, 0x56, 0xcb, - 0xc1, 0xae, 0x7b, 0xc3, 0xda, 0xb6, 0x8b, 0x05, 0xaa, 0xe7, 0x42, 0x24, 0xb0, 0xc6, 0x91, 0x56, - 0x2f, 0xf4, 0x7b, 0xa5, 0x52, 0xac, 0x14, 0x45, 0x73, 0xbc, 0x22, 0xb4, 0x0f, 0xd3, 0xe2, 0x5c, - 0xdf, 0xf2, 0xcc, 0xb6, 0xe9, 0xea, 0x9e, 0x69, 0x5b, 0xc5, 0x93, 0x54, 0xff, 0xf9, 0x68, 0x7c, - 0x1a, 0x20, 0xac, 0x9e, 0xef, 0xf7, 0x4a, 0xe7, 0x62, 0x24, 0x28, 0xba, 0xe3, 0x54, 0x84, 0x46, - 0xdc, 0x70, 0x30, 0x21, 0xc4, 0x46, 0x71, 0x7a, 0xb8, 0x11, 0x03, 0x22, 0xd9, 0x88, 0x01, 0x30, - 0xce, 0x88, 0x01, 0x92, 0x68, 0xea, 0xea, 0x8e, 0x67, 0x12, 0xb5, 0xeb, 0xba, 0xb3, 0x8b, 0x9d, - 0xe2, 0x4c, 0x9c, 0xa6, 0x0d, 0x95, 0x88, 0x69, 0x8a, 0x70, 0xaa, 0x9a, 0x22, 0x48, 0x74, 0x5f, - 0x03, 0x75, 0x68, 0xa6, 0x6d, 0xd5, 0xc8, 0xc1, 0xed, 0x92, 0xe9, 0xcd, 0x52, 0xa5, 0x4f, 0x3f, - 0x60, 0x7a, 0x32, 0x79, 0xf5, 0xe9, 0x7e, 0xaf, 0x74, 0x61, 0xa8, 0x34, 0x65, 0x20, 0xc3, 0x95, - 0xa2, 0xbb, 0x90, 0x27, 0x48, 0x4c, 0x53, 0x20, 0xa3, 0x38, 0x47, 0xc7, 0x70, 0x7a, 0x70, 0x0c, - 0x9c, 0x80, 0xe6, 0x00, 0xb3, 0x12, 0x87, 0xa2, 0x47, 0x16, 0x85, 0x3e, 0xd3, 0x80, 0x38, 0x7a, - 0xdc, 0x4c, 0x4f, 0x51, 0x2d, 0x4f, 0x0d, 0x68, 0x89, 0x9b, 0xe6, 0x53, 0xfd, 0x5e, 0x69, 0x31, - 0x5e, 0x8e, 0xa2, 0x7b, 0x88, 0xae, 0xd0, 0x8f, 0x82, 0x43, 0xa2, 0x58, 0x1c, 0xee, 0x47, 0x01, - 0x91, 0xec, 0x47, 0x01, 0x30, 0xce, 0x8f, 0x02, 0x24, 0x0f, 0x06, 0xef, 0xea, 0x6d, 0xd3, 0xa0, - 0x09, 0xd5, 0xe9, 0x21, 0xc1, 0x20, 0xa0, 0x08, 0x82, 0x41, 0x00, 0x19, 0x08, 0x06, 0x21, 0x6d, - 0x06, 0xc6, 0xa8, 0x88, 0xf2, 0xcf, 0x33, 0x30, 0x1d, 0xb3, 0xd5, 0xd0, 0x1b, 0x90, 0x76, 0x7c, - 0x8b, 0x64, 0xa0, 0x2c, 0xed, 0x42, 0xaa, 0xe2, 0x2d, 0xdf, 0x34, 0x58, 0xfa, 0xeb, 0xf8, 0x96, - 0x92, 0x94, 0x8e, 0x51, 0x00, 0xe1, 0x27, 0xe9, 0xaf, 0x69, 0xf0, 0xf4, 0x6a, 0x28, 0xff, 0x3d, - 0xbb, 0xa1, 0xf2, 0x53, 0x00, 0xc2, 0x30, 0x21, 0xf6, 0x71, 0xdd, 0x24, 0x41, 0x2a, 0x19, 0x67, - 0xe5, 0xb7, 0xfd, 0x06, 0x76, 0x2c, 0xec, 0x61, 0x57, 0xcc, 0x81, 0x46, 0x29, 0xba, 0x12, 0x8e, - 0x04, 0x91, 0xe4, 0x8f, 0xcb, 0x70, 0xf4, 0x0f, 0x1a, 0x14, 0x3b, 0xfa, 0x7e, 0x5d, 0x00, 0xdd, - 0xfa, 0xb6, 0xed, 0xd4, 0xbb, 0xd8, 0x31, 0x6d, 0x83, 0x66, 0xd3, 0xf9, 0xe5, 0xbf, 0x78, 0x68, - 0x5c, 0xaa, 0xac, 0xeb, 0xfb, 0x02, 0xec, 0xbe, 0x65, 0x3b, 0x1b, 0x94, 0x7d, 0xd5, 0xf2, 0x9c, - 0x83, 0xea, 0xb9, 0xaf, 0x7a, 0xa5, 0x13, 0xc4, 0xcb, 0x3b, 0x71, 0x34, 0xb5, 0x78, 0x30, 0xfa, - 0x7b, 0x0d, 0xe6, 0x3c, 0xdb, 0xd3, 0xdb, 0xf5, 0xa6, 0xdf, 0xf1, 0xdb, 0xba, 0x67, 0xee, 0xe1, - 0xba, 0xef, 0xea, 0x2d, 0xcc, 0x93, 0xf6, 0xd7, 0x1f, 0x3e, 0xa8, 0x3b, 0x84, 0xff, 0x4a, 0xc0, - 0xbe, 0x45, 0xb8, 0xd9, 0x98, 0xce, 0xf2, 0x31, 0xcd, 0x78, 0x31, 0x24, 0xb5, 0x58, 0x28, 0xba, - 0x0c, 0xc0, 0xec, 0x59, 0x77, 0x3d, 0x87, 0x66, 0x65, 0xb9, 0xea, 0x5c, 0xbf, 0x57, 0x42, 0xd4, - 0x5c, 0x9b, 0x9e, 0x14, 0xab, 0x6a, 0x59, 0x01, 0x23, 0x5c, 0xcc, 0x8b, 0x28, 0x57, 0x26, 0xe4, - 0xa2, 0x4e, 0x12, 0xe1, 0x12, 0xb0, 0xf9, 0x7f, 0xd2, 0x60, 0x7e, 0xf8, 0x92, 0xa2, 0x0b, 0x90, - 0xdc, 0xc5, 0x07, 0xbc, 0x04, 0x3b, 0xd9, 0xef, 0x95, 0x26, 0x76, 0xf1, 0x81, 0x24, 0x88, 0x60, - 0xd1, 0x5f, 0xc1, 0xd8, 0x9e, 0xde, 0xf6, 0x31, 0x77, 0xbf, 0x4a, 0x85, 0x15, 0x9b, 0x15, 0xb9, - 0xd8, 0xac, 0x74, 0x77, 0x5b, 0x04, 0x50, 0x11, 0xd6, 0xaf, 0xbc, 0xe3, 0xeb, 0x96, 0x67, 0x7a, - 0x07, 0xcc, 0x35, 0xa9, 0x00, 0xd9, 0x35, 0x29, 0xe0, 0xb5, 0xc4, 0x2b, 0xda, 0xfc, 0x17, 0x1a, - 0x9c, 0x1e, 0xba, 0xc0, 0xdf, 0x87, 0x11, 0x96, 0xeb, 0x90, 0x22, 0x9b, 0x8c, 0x14, 0x87, 0x3b, - 0x66, 0x6b, 0xe7, 0xe5, 0xcb, 0x74, 0x38, 0x69, 0x56, 0xcb, 0x31, 0x88, 0x5c, 0xcb, 0x31, 0x08, - 0x29, 0x70, 0xdb, 0xf6, 0x47, 0x2f, 0x5f, 0xa6, 0x83, 0x4a, 0x33, 0x25, 0x14, 0x20, 0x2b, 0xa1, - 0x80, 0x72, 0x3f, 0x0d, 0xb9, 0xa0, 0xfa, 0x92, 0xf6, 0xbb, 0x76, 0xa8, 0xfd, 0x7e, 0x1d, 0x0a, - 0x06, 0x36, 0xfc, 0x6e, 0xdb, 0x6c, 0x52, 0xf7, 0x15, 0x91, 0x23, 0xc7, 0x42, 0xa7, 0x82, 0x53, - 0xf8, 0xa7, 0x22, 0x28, 0xb4, 0x0c, 0x59, 0x5e, 0xa5, 0x1c, 0xd0, 0xa0, 0x31, 0xc1, 0x3c, 0x4e, - 0xc0, 0x64, 0x8f, 0x13, 0x30, 0x54, 0x03, 0x60, 0xa5, 0xff, 0x3a, 0xf6, 0x74, 0x5e, 0x2f, 0x15, - 0xd5, 0x19, 0xdc, 0x0e, 0xf0, 0xac, 0x88, 0x0f, 0xe9, 0xe5, 0x22, 0x3e, 0x84, 0xa2, 0xf7, 0x01, - 0x3a, 0xba, 0x69, 0x31, 0x3e, 0x5e, 0x1c, 0x95, 0x87, 0x85, 0xaf, 0xf5, 0x80, 0x92, 0x49, 0x0f, - 0x39, 0x65, 0xe9, 0x21, 0x94, 0x94, 0xda, 0xbc, 0x59, 0x51, 0x4c, 0xd3, 0x88, 0xb0, 0x30, 0x4c, - 0x34, 0x17, 0x3b, 0x4b, 0xca, 0x6d, 0xce, 0x22, 0xc9, 0x14, 0x52, 0xc8, 0xb2, 0xb5, 0xcd, 0x6d, - 0xec, 0x99, 0x1d, 0x4c, 0x37, 0x2a, 0x5f, 0x36, 0x01, 0x93, 0x97, 0x4d, 0xc0, 0xd0, 0x2b, 0x00, - 0xba, 0xb7, 0x6e, 0xbb, 0xde, 0x6d, 0xab, 0x89, 0x69, 0xb9, 0x93, 0x65, 0xc3, 0x0f, 0xa1, 0xf2, - 0xf0, 0x43, 0x28, 0x7a, 0x1d, 0xf2, 0x5d, 0x7e, 0xbc, 0x36, 0xda, 0x98, 0x96, 0x33, 0x59, 0x96, - 0x0d, 0x48, 0x60, 0x89, 0x57, 0xa6, 0x46, 0xd7, 0x60, 0xaa, 0x69, 0x5b, 0x4d, 0xdf, 0x71, 0xb0, - 0xd5, 0x3c, 0xd8, 0xd4, 0xb7, 0x31, 0x2d, 0x5d, 0xb2, 0xcc, 0x55, 0x22, 0x28, 0xd9, 0x55, 0x22, - 0x28, 0xf4, 0x12, 0xe4, 0x82, 0xd6, 0x0f, 0xad, 0x4e, 0x72, 0xbc, 0x8b, 0x20, 0x80, 0x12, 0x73, - 0x48, 0x49, 0x06, 0x6f, 0xba, 0x57, 0xb9, 0xd3, 0x61, 0x5a, 0x71, 0xf0, 0xc1, 0x4b, 0x60, 0x79, - 0xf0, 0x12, 0x38, 0x12, 0x48, 0x27, 0x47, 0x0b, 0xa4, 0xe5, 0xff, 0xd7, 0x60, 0x26, 0xce, 0x5b, - 0x22, 0x9e, 0xab, 0x3d, 0x16, 0xcf, 0x7d, 0x17, 0xb2, 0x5d, 0xdb, 0xa8, 0xbb, 0x5d, 0xdc, 0xe4, - 0xc1, 0x29, 0xe2, 0xb7, 0x1b, 0xb6, 0xb1, 0xd9, 0xc5, 0xcd, 0xbf, 0x34, 0xbd, 0x9d, 0x95, 0x3d, - 0xdb, 0x34, 0x6e, 0x9a, 0x2e, 0x77, 0xb0, 0x2e, 0xc3, 0x28, 0x99, 0x47, 0x86, 0x03, 0xab, 0x59, - 0x48, 0x33, 0x2d, 0xe5, 0x9f, 0x25, 0xa1, 0x10, 0xf5, 0xd0, 0x1f, 0xd2, 0x54, 0xd0, 0x5d, 0xc8, - 0x98, 0xac, 0xb0, 0xe1, 0x89, 0xc9, 0x9f, 0x49, 0xe1, 0xbb, 0x12, 0x36, 0x46, 0x2b, 0x7b, 0x2f, - 0x54, 0x78, 0x05, 0x44, 0x97, 0x80, 0x4a, 0xe6, 0x9c, 0xaa, 0x64, 0x0e, 0x44, 0x35, 0xc8, 0xb8, - 0xd8, 0xd9, 0x33, 0x9b, 0x98, 0xc7, 0xa1, 0x92, 0x2c, 0xb9, 0x69, 0x3b, 0x98, 0xc8, 0xdc, 0x64, - 0x24, 0xa1, 0x4c, 0xce, 0xa3, 0xca, 0xe4, 0x40, 0xf4, 0x2e, 0xe4, 0x9a, 0xb6, 0xb5, 0x6d, 0xb6, - 0xd6, 0xf5, 0x2e, 0x8f, 0x44, 0xe7, 0xe2, 0xa4, 0x5e, 0x11, 0x44, 0xbc, 0x59, 0x23, 0x3e, 0x23, - 0xcd, 0x9a, 0x80, 0x2a, 0x34, 0xe8, 0x1f, 0x52, 0x00, 0xa1, 0x71, 0xd0, 0xab, 0x90, 0xc7, 0xfb, - 0xb8, 0xe9, 0x7b, 0xb6, 0x23, 0x8e, 0x04, 0xde, 0xfb, 0x14, 0x60, 0x25, 0x86, 0x43, 0x08, 0x25, - 0x7b, 0xd2, 0xd2, 0x3b, 0xd8, 0xed, 0xea, 0x4d, 0xd1, 0x34, 0xa5, 0x83, 0x09, 0x80, 0xf2, 0x9e, - 0x0c, 0x80, 0xe8, 0xcf, 0x21, 0x45, 0xdb, 0xac, 0xac, 0x5f, 0x8a, 0xfa, 0xbd, 0xd2, 0xa4, 0xa5, - 0x36, 0x58, 0x29, 0x1e, 0xbd, 0x09, 0x13, 0xbb, 0x81, 0xe3, 0x91, 0xb1, 0xa5, 0x28, 0x03, 0xcd, - 0x18, 0x43, 0x84, 0x32, 0xba, 0x71, 0x19, 0x8e, 0xb6, 0x21, 0xaf, 0x5b, 0x96, 0xed, 0xd1, 0xe3, - 0x46, 0xf4, 0x50, 0x2f, 0x0d, 0x73, 0xd3, 0xca, 0x4a, 0x48, 0xcb, 0x92, 0x2f, 0x1a, 0x27, 0x24, - 0x09, 0x72, 0x9c, 0x90, 0xc0, 0xa8, 0x06, 0xe9, 0xb6, 0xde, 0xc0, 0x6d, 0x11, 0xdf, 0x9f, 0x1a, - 0xaa, 0xe2, 0x26, 0x25, 0x63, 0xd2, 0xe9, 0xe9, 0xce, 0xf8, 0xe4, 0xd3, 0x9d, 0x41, 0xe6, 0xb7, - 0xa1, 0x10, 0x1d, 0xcf, 0x68, 0xb9, 0xca, 0x25, 0x39, 0x57, 0xc9, 0x3d, 0x34, 0x3b, 0xd2, 0x21, - 0x2f, 0x0d, 0xea, 0x38, 0x54, 0x94, 0xff, 0x45, 0x83, 0x99, 0xb8, 0xbd, 0x8b, 0xd6, 0xa5, 0x1d, - 0xaf, 0xf1, 0x5e, 0x50, 0x8c, 0xab, 0x73, 0xde, 0x21, 0x5b, 0x3d, 0xdc, 0xe8, 0x55, 0x98, 0xb4, - 0x6c, 0x03, 0xd7, 0x75, 0xa2, 0xa0, 0x6d, 0xba, 0x5e, 0x31, 0x41, 0x7b, 0xec, 0xb4, 0x87, 0x44, - 0x30, 0x2b, 0x02, 0x21, 0x71, 0x4f, 0x28, 0x88, 0xf2, 0x7f, 0x69, 0x30, 0x15, 0x69, 0xf1, 0x1e, - 0x39, 0x5f, 0x92, 0xb3, 0x9c, 0xc4, 0x88, 0x59, 0x8e, 0x7a, 0xf4, 0x24, 0x47, 0x3c, 0x7a, 0xfe, - 0x2f, 0x01, 0x79, 0xa9, 0x66, 0x3f, 0xf2, 0xc8, 0xef, 0xc1, 0x14, 0x3f, 0x4a, 0x4d, 0xab, 0xc5, - 0x6a, 0xbb, 0x04, 0x6f, 0x40, 0x0d, 0xdc, 0xc3, 0xac, 0xd9, 0x8d, 0xcd, 0x80, 0x96, 0x96, 0x76, - 0xb4, 0x3f, 0xe8, 0x2a, 0x30, 0x49, 0xc5, 0xa4, 0x8a, 0x41, 0x77, 0x61, 0xce, 0xef, 0x92, 0x8a, - 0xb7, 0xee, 0xf2, 0x1b, 0x8d, 0xba, 0xe5, 0x77, 0x1a, 0x98, 0xcd, 0x7e, 0xac, 0x5a, 0xee, 0xf7, - 0x4a, 0x0b, 0x8c, 0x42, 0x5c, 0x79, 0xdc, 0xa2, 0x78, 0x49, 0xe6, 0x4c, 0x1c, 0x3e, 0xb2, 0x96, - 0xa9, 0x11, 0xd7, 0xf2, 0x3a, 0xa0, 0xc1, 0x5e, 0xbf, 0x62, 0x4b, 0x6d, 0x34, 0x5b, 0x96, 0xff, - 0x5b, 0x83, 0x42, 0xb4, 0x85, 0xff, 0x03, 0x72, 0xaa, 0x7f, 0xd7, 0x20, 0x17, 0x74, 0xf1, 0x8f, - 0x3c, 0xee, 0x67, 0x21, 0xed, 0x60, 0xdd, 0xb5, 0x2d, 0x1e, 0x3c, 0x68, 0x14, 0x64, 0x10, 0x39, - 0x0a, 0x32, 0xc8, 0x21, 0x47, 0x7c, 0x07, 0xc6, 0x99, 0xb9, 0xde, 0x32, 0xdb, 0x1e, 0x76, 0xd0, - 0x55, 0x48, 0xbb, 0x9e, 0xee, 0x61, 0xb7, 0xa8, 0x2d, 0x26, 0x2f, 0x4e, 0x2e, 0xcf, 0x0d, 0xb6, - 0xf9, 0x09, 0x9a, 0x8d, 0x85, 0x51, 0xca, 0x63, 0x61, 0x90, 0xf2, 0xdf, 0x68, 0x30, 0x2e, 0xdf, - 0x66, 0x3c, 0x1e, 0xb1, 0x8f, 0xb6, 0x20, 0xe5, 0xff, 0x08, 0x06, 0xd1, 0x7e, 0x3c, 0x7e, 0xf4, - 0x5d, 0xd8, 0xe3, 0xf7, 0x1a, 0x33, 0x48, 0xd0, 0x3d, 0x3f, 0xea, 0xa0, 0x5b, 0x61, 0xc7, 0x89, - 0xc4, 0x0e, 0x97, 0x06, 0xfa, 0x51, 0x3b, 0x4e, 0xf4, 0x38, 0x50, 0xd8, 0xe5, 0xe3, 0x40, 0x41, - 0x1c, 0x72, 0xbe, 0x9f, 0xa4, 0xe9, 0x7c, 0xc3, 0xfb, 0x95, 0x27, 0xdd, 0xa1, 0x8b, 0xe4, 0x78, - 0xc9, 0x47, 0xc8, 0xf1, 0x9e, 0x83, 0x0c, 0x3d, 0x54, 0x83, 0xf4, 0x8b, 0x3a, 0x08, 0x01, 0xa9, - 0xf7, 0xdb, 0x0c, 0xf2, 0x80, 0x28, 0x3e, 0x76, 0xc4, 0x28, 0x5e, 0x87, 0xd3, 0x3b, 0xba, 0x5b, - 0x17, 0xe7, 0x8e, 0x51, 0xd7, 0xbd, 0x7a, 0x10, 0x01, 0xd3, 0xb4, 0xae, 0xa3, 0x1d, 0xe3, 0x1d, - 0xdd, 0xdd, 0x14, 0x34, 0x2b, 0xde, 0xc6, 0x60, 0x3c, 0x9c, 0x8b, 0xa7, 0x40, 0x5b, 0x30, 0x1b, - 0x2f, 0x3c, 0x43, 0x47, 0x4e, 0x2f, 0x34, 0xdc, 0x07, 0x4a, 0x9e, 0x8e, 0x41, 0xa3, 0x4f, 0x35, - 0x28, 0x92, 0x2c, 0xc7, 0xc1, 0x1f, 0xfa, 0xa6, 0x83, 0x3b, 0xc4, 0x62, 0x75, 0x7b, 0x0f, 0x3b, - 0x6d, 0xfd, 0x80, 0xdf, 0x0d, 0x9e, 0x1f, 0x3c, 0x4d, 0x37, 0x6c, 0xa3, 0x26, 0x31, 0xb0, 0xa9, - 0x75, 0x55, 0xe0, 0x6d, 0x26, 0x44, 0x9e, 0x5a, 0x3c, 0x45, 0xc4, 0x8d, 0xe1, 0x50, 0x1d, 0xc1, - 0xfc, 0x68, 0x1d, 0xc1, 0xb5, 0x54, 0x36, 0x5b, 0xc8, 0x95, 0x7f, 0x9b, 0x80, 0x49, 0xf5, 0xba, - 0xf0, 0x89, 0x6f, 0x82, 0x81, 0xa0, 0x91, 0xfc, 0x4e, 0x82, 0x46, 0xea, 0x50, 0xab, 0x3d, 0x36, - 0xda, 0x6a, 0x97, 0x7f, 0x93, 0x80, 0x09, 0xe5, 0xc6, 0xf4, 0xa7, 0x65, 0x3e, 0x8e, 0x65, 0xfe, - 0xc7, 0x04, 0xcc, 0xc5, 0x0f, 0xf9, 0x58, 0x5a, 0x21, 0xd7, 0x81, 0x14, 0x35, 0x37, 0xc2, 0x7c, - 0x7b, 0x76, 0xa0, 0x13, 0x42, 0x97, 0x4b, 0x54, 0x44, 0x03, 0x97, 0xba, 0x82, 0x1d, 0xdd, 0x85, - 0xbc, 0x29, 0x5d, 0x1f, 0x27, 0xe3, 0x6e, 0xf9, 0xe4, 0x4b, 0x63, 0xd6, 0x1a, 0x1b, 0x72, 0x55, - 0x2c, 0x8b, 0xaa, 0xa6, 0x21, 0x45, 0x0a, 0x82, 0xf2, 0x1e, 0x64, 0xf8, 0x70, 0xd0, 0x8b, 0x90, - 0xa3, 0x67, 0x05, 0xad, 0xee, 0xb5, 0x70, 0x69, 0x09, 0x30, 0xf2, 0x84, 0x2a, 0x2b, 0x60, 0xe8, - 0x65, 0x00, 0x12, 0x1e, 0xf9, 0x29, 0x91, 0xa0, 0xb1, 0x96, 0x76, 0x11, 0xba, 0xb6, 0x31, 0x70, - 0x34, 0xe4, 0x02, 0x60, 0xf9, 0xcb, 0x04, 0xe4, 0xe5, 0x0b, 0xeb, 0x43, 0x29, 0xff, 0x18, 0x44, - 0x87, 0xa7, 0xae, 0x1b, 0x06, 0xf9, 0x17, 0x8b, 0x64, 0x62, 0x69, 0xe8, 0x22, 0x89, 0xff, 0xaf, - 0x08, 0x0e, 0x56, 0xcf, 0xd3, 0x47, 0x39, 0x66, 0x04, 0x25, 0x69, 0x2d, 0x44, 0x71, 0xf3, 0xbb, - 0x30, 0x1b, 0x2b, 0x4a, 0xae, 0xc2, 0xc7, 0x1e, 0x57, 0x15, 0xfe, 0x65, 0x1a, 0x66, 0x63, 0x1f, - 0x0a, 0x3c, 0xf1, 0x88, 0xa1, 0xee, 0xa0, 0xe4, 0x63, 0xd9, 0x41, 0x7f, 0xab, 0xc5, 0x59, 0x96, - 0xdd, 0x12, 0xbe, 0x3a, 0xc2, 0xeb, 0x89, 0xc7, 0x65, 0x63, 0xd5, 0x2d, 0xc7, 0x0e, 0xb5, 0x27, - 0xd2, 0xa3, 0xee, 0x09, 0xf4, 0x3c, 0x6b, 0xa8, 0x50, 0x5d, 0xec, 0x06, 0x4f, 0x44, 0x88, 0x88, - 0xaa, 0x0c, 0x07, 0xa1, 0x37, 0x61, 0x42, 0x70, 0xb0, 0x36, 0x5e, 0x36, 0xec, 0xb1, 0x71, 0x9a, - 0x68, 0x27, 0x6f, 0x5c, 0x86, 0x47, 0xa2, 0x70, 0xee, 0x50, 0x51, 0x18, 0x46, 0xbc, 0x6c, 0xfc, - 0x4e, 0xf7, 0xcb, 0xef, 0x12, 0x30, 0x15, 0x79, 0x27, 0xf4, 0xd3, 0xd9, 0x7a, 0x1c, 0x67, 0xeb, - 0xff, 0x6a, 0x90, 0x0b, 0x9e, 0xc3, 0x1d, 0xb9, 0x34, 0x5c, 0x81, 0x34, 0x66, 0x4f, 0xb2, 0x58, - 0x18, 0x9f, 0x8e, 0x3c, 0x99, 0x25, 0x38, 0xfe, 0x48, 0x36, 0xf2, 0x0a, 0xab, 0xc6, 0x19, 0x0f, - 0x59, 0xf4, 0xfd, 0x4f, 0x42, 0x14, 0x7d, 0xe1, 0x4c, 0x9e, 0xa8, 0xb3, 0x84, 0x2b, 0x91, 0x7c, - 0x3c, 0x2b, 0x71, 0xbc, 0x6e, 0xf0, 0xcf, 0x00, 0x63, 0x74, 0x4c, 0x68, 0x19, 0xb2, 0x1e, 0x76, - 0x3a, 0xa6, 0xa5, 0xb7, 0xe9, 0xd2, 0x65, 0x19, 0xb7, 0x80, 0xc9, 0xdc, 0x02, 0x86, 0x76, 0x60, - 0x2a, 0x6c, 0xfd, 0x53, 0x31, 0xf1, 0x6f, 0x85, 0xdf, 0x56, 0x89, 0xd8, 0x35, 0x64, 0x84, 0x53, - 0x7d, 0xec, 0x13, 0x41, 0x22, 0x03, 0x26, 0x9b, 0xb6, 0xe5, 0xe9, 0xa6, 0x85, 0x1d, 0xa6, 0x28, - 0x19, 0xf7, 0x56, 0xf2, 0x8a, 0x42, 0xc3, 0x7a, 0xa1, 0x2a, 0x9f, 0xfa, 0x56, 0x52, 0xc5, 0xa1, - 0x0f, 0x60, 0x42, 0x14, 0xe1, 0x4c, 0x49, 0x2a, 0xee, 0xad, 0xe4, 0xaa, 0x4c, 0xc2, 0x36, 0xb8, - 0xc2, 0xa5, 0xbe, 0x95, 0x54, 0x50, 0xa8, 0x0d, 0x85, 0xae, 0x6d, 0x6c, 0x59, 0xbc, 0xf4, 0xd4, - 0x1b, 0x6d, 0xcc, 0xef, 0x9b, 0x16, 0x06, 0x92, 0x4d, 0x85, 0x8a, 0x1d, 0x82, 0x51, 0x5e, 0xf5, - 0xf5, 0x71, 0x14, 0x8b, 0xde, 0x87, 0xf1, 0x36, 0xd6, 0x5d, 0xbc, 0xba, 0xdf, 0x35, 0x1d, 0x6c, - 0xc4, 0xbf, 0x15, 0xbe, 0x29, 0x51, 0xb0, 0x23, 0x48, 0xe6, 0x51, 0x9f, 0x48, 0xc9, 0x18, 0x62, - 0xfd, 0x8e, 0xbe, 0x5f, 0xf3, 0x2d, 0x77, 0x75, 0x9f, 0xbf, 0xfb, 0xcc, 0xc4, 0x59, 0x7f, 0x5d, - 0x25, 0x62, 0xd6, 0x8f, 0x70, 0xaa, 0xd6, 0x8f, 0x20, 0xd1, 0x4d, 0x7a, 0xc2, 0x32, 0x93, 0xb0, - 0x37, 0xc3, 0x73, 0x03, 0xab, 0xc5, 0xac, 0xc1, 0xda, 0xb1, 0xfc, 0x4b, 0x11, 0x1a, 0x48, 0xe0, - 0x36, 0xa0, 0xd3, 0xae, 0x61, 0xcf, 0x77, 0x2c, 0x6c, 0xf0, 0x96, 0xc0, 0xa0, 0x0d, 0x14, 0xaa, - 0xc0, 0x06, 0x0a, 0x74, 0xc0, 0x06, 0x0a, 0x96, 0xf8, 0x54, 0xd7, 0x36, 0xee, 0xb0, 0x2d, 0xe3, - 0x05, 0x8f, 0x88, 0xcf, 0x0c, 0xa8, 0x0a, 0x49, 0x98, 0x4f, 0x29, 0x5c, 0xaa, 0x4f, 0x29, 0x28, - 0xf4, 0x31, 0xcc, 0x44, 0xde, 0x58, 0xb2, 0x95, 0xca, 0xc7, 0x5d, 0xe7, 0xae, 0xc5, 0x50, 0xb2, - 0xfe, 0x50, 0x9c, 0x0c, 0x45, 0x6d, 0xac, 0x16, 0xa2, 0xbd, 0xa5, 0x5b, 0xad, 0x35, 0xbb, 0xa1, - 0x7a, 0xf5, 0x78, 0x9c, 0xf6, 0x6b, 0x31, 0x94, 0x4c, 0x7b, 0x9c, 0x0c, 0x55, 0x7b, 0x1c, 0x45, - 0xf0, 0x9e, 0x92, 0xa4, 0xa0, 0xc1, 0xbb, 0xe3, 0xb8, 0xf7, 0x94, 0x8c, 0x40, 0x7a, 0x4f, 0xc9, - 0x00, 0x31, 0xef, 0x29, 0x39, 0x65, 0x56, 0xb4, 0x68, 0xcb, 0x5f, 0x68, 0x30, 0x15, 0x89, 0x60, - 0xe8, 0x0d, 0x08, 0x9e, 0xc9, 0xdd, 0x39, 0xe8, 0x8a, 0xd2, 0x47, 0x79, 0x56, 0x47, 0xe0, 0x71, - 0xcf, 0xea, 0x08, 0x1c, 0xdd, 0x04, 0x08, 0xce, 0xfe, 0x07, 0x1d, 0x35, 0x34, 0xef, 0x0e, 0x29, - 0xe5, 0xbc, 0x3b, 0x84, 0x96, 0xef, 0xa7, 0x20, 0x2b, 0xb6, 0xc0, 0xb1, 0x94, 0xc6, 0x4b, 0x90, - 0xe9, 0x60, 0x97, 0x3e, 0xaf, 0x4b, 0x84, 0x19, 0x2e, 0x07, 0xc9, 0x19, 0x2e, 0x07, 0xa9, 0x09, - 0x78, 0xf2, 0x50, 0x09, 0x78, 0x6a, 0xe4, 0x04, 0x1c, 0xd3, 0xe7, 0x2e, 0x52, 0x20, 0x17, 0xb7, - 0xce, 0x0f, 0x3e, 0x1d, 0xc4, 0x63, 0x18, 0x99, 0x31, 0xf2, 0x18, 0x46, 0x46, 0xa1, 0x5d, 0x38, - 0x29, 0xdd, 0x8c, 0xf3, 0xfe, 0x3d, 0x09, 0xa9, 0x93, 0xc3, 0xdf, 0x16, 0xd5, 0x28, 0x15, 0x0b, - 0x1c, 0xbb, 0x11, 0xa8, 0x5c, 0xc1, 0x44, 0x71, 0xc4, 0xc1, 0x0c, 0xdc, 0xf0, 0x5b, 0xeb, 0x7c, - 0xd9, 0x33, 0xa1, 0x83, 0xc9, 0x70, 0xd9, 0xc1, 0x64, 0x38, 0x6d, 0x05, 0xaa, 0xf3, 0x3d, 0x16, - 0xc7, 0x78, 0x11, 0x72, 0x78, 0xdf, 0xf4, 0xea, 0x4d, 0xdb, 0xc0, 0xbc, 0x8d, 0x40, 0xed, 0x4c, - 0x80, 0x57, 0x6c, 0x43, 0xb1, 0xb3, 0x80, 0xc9, 0xde, 0x94, 0x1c, 0xc9, 0x9b, 0xc2, 0xeb, 0x92, - 0xd4, 0x08, 0xd7, 0x25, 0xb1, 0x76, 0xca, 0x1d, 0x8f, 0x9d, 0xca, 0x5f, 0x27, 0xa0, 0x10, 0x3d, - 0x27, 0xbe, 0x1f, 0x5b, 0x50, 0xdd, 0x4d, 0xc9, 0x91, 0x77, 0xd3, 0x9b, 0x30, 0x41, 0x12, 0x49, - 0xdd, 0xf3, 0xf8, 0xef, 0x00, 0x52, 0x34, 0x1b, 0x64, 0xb1, 0xcd, 0xb7, 0x56, 0x04, 0x5c, 0x89, - 0x6d, 0x12, 0x7c, 0xc0, 0x75, 0xc7, 0x1e, 0xd1, 0x75, 0x3f, 0x4d, 0xc0, 0x84, 0x72, 0x1e, 0xfe, - 0xf8, 0x42, 0x5a, 0x79, 0x0a, 0x26, 0x94, 0x34, 0xb3, 0xfc, 0x19, 0xf3, 0x33, 0xf5, 0xf4, 0xfb, - 0xf1, 0xad, 0xcb, 0x24, 0x8c, 0xcb, 0xf9, 0x6a, 0xb9, 0x0a, 0x53, 0x91, 0xf4, 0x52, 0x9e, 0x80, - 0x36, 0xca, 0x04, 0xca, 0x73, 0x30, 0x13, 0x97, 0x15, 0x95, 0xaf, 0xc1, 0x4c, 0x5c, 0xbe, 0xf2, - 0xe8, 0x0a, 0xde, 0xe0, 0xef, 0x43, 0x58, 0x66, 0xf1, 0xe8, 0xfc, 0xff, 0x96, 0x12, 0x4d, 0x91, - 0xf0, 0x57, 0x34, 0xef, 0x41, 0xa1, 0x2b, 0x3e, 0xea, 0x0f, 0xad, 0xdd, 0x69, 0x21, 0x14, 0xd0, - 0xaf, 0x45, 0x4a, 0xd7, 0x49, 0x15, 0xa3, 0xca, 0xe6, 0xd5, 0x74, 0x62, 0x44, 0xd9, 0xb5, 0x48, - 0x59, 0x3d, 0xa9, 0x62, 0xd0, 0x5f, 0xc3, 0x49, 0xf1, 0x52, 0x75, 0x0f, 0x8b, 0x81, 0x27, 0x87, - 0x0a, 0x67, 0x3f, 0xfa, 0x09, 0x18, 0xa2, 0x23, 0x9f, 0x8a, 0xa0, 0x22, 0xe2, 0xf9, 0xd8, 0x53, - 0xa3, 0x8a, 0x8f, 0x0e, 0x7e, 0x2a, 0x82, 0x42, 0x1b, 0x30, 0x13, 0x5d, 0x75, 0xa9, 0xdc, 0x2e, - 0xf5, 0x7b, 0xa5, 0x33, 0xea, 0x5a, 0xaa, 0x75, 0xf7, 0xc9, 0x01, 0xa4, 0x2a, 0x51, 0x2a, 0xe0, - 0xd3, 0x31, 0x12, 0x6b, 0x83, 0x95, 0xfc, 0xc9, 0x01, 0x64, 0xf9, 0x73, 0x0d, 0xa6, 0x22, 0xbf, - 0x9d, 0x42, 0x57, 0x21, 0x4b, 0x7f, 0xdc, 0xfc, 0x60, 0x2f, 0xa1, 0x7e, 0x48, 0xe9, 0x94, 0x55, - 0xc8, 0x70, 0x10, 0x7a, 0x09, 0x72, 0xc1, 0x4f, 0xac, 0xf8, 0xf3, 0x17, 0xb6, 0x67, 0x05, 0x50, - 0xd9, 0xb3, 0x02, 0x58, 0xfe, 0xbb, 0x04, 0x9c, 0x1e, 0xfa, 0xbb, 0xaa, 0x27, 0xde, 0xb0, 0x39, - 0x54, 0xdf, 0x29, 0xd2, 0x6d, 0x49, 0x8d, 0xd8, 0x6d, 0xf9, 0x5c, 0x83, 0xb9, 0xf8, 0xdf, 0x5d, - 0x1d, 0xb9, 0x03, 0xa7, 0x4e, 0x23, 0x31, 0xfa, 0x2b, 0xa3, 0x71, 0xf9, 0x27, 0x52, 0x47, 0x1e, - 0xc6, 0x25, 0x18, 0xeb, 0xda, 0x76, 0xdb, 0xe5, 0x8f, 0x00, 0x29, 0x29, 0x05, 0xc8, 0xa4, 0x14, - 0x70, 0xc8, 0x86, 0xdf, 0x1f, 0x35, 0x11, 0x0b, 0xc3, 0x5f, 0x82, 0xfd, 0x88, 0x5c, 0xe8, 0x99, - 0xe7, 0x21, 0x2b, 0x9e, 0x38, 0x21, 0x80, 0xf4, 0x3b, 0x5b, 0xab, 0x5b, 0xab, 0x57, 0x0b, 0x27, - 0x50, 0x1e, 0x32, 0x1b, 0xab, 0xb7, 0xae, 0xde, 0xb8, 0x75, 0xad, 0xa0, 0x91, 0x8f, 0xda, 0xd6, - 0xad, 0x5b, 0xe4, 0x23, 0xf1, 0xcc, 0x4d, 0xf9, 0x25, 0x39, 0xaf, 0x2e, 0xc6, 0x21, 0xbb, 0xd2, - 0xed, 0xd2, 0x63, 0x8e, 0xf1, 0xae, 0xee, 0x99, 0xe4, 0x6c, 0x2a, 0x68, 0x28, 0x03, 0xc9, 0xdb, - 0xb7, 0xd7, 0x0b, 0x09, 0x34, 0x03, 0x85, 0xab, 0x58, 0x37, 0xda, 0xa6, 0x85, 0xc5, 0xd9, 0x5a, - 0x48, 0x56, 0xef, 0x7d, 0xf5, 0xcd, 0x82, 0xf6, 0xf5, 0x37, 0x0b, 0xda, 0xaf, 0xbe, 0x59, 0xd0, - 0xee, 0x7f, 0xbb, 0x70, 0xe2, 0xeb, 0x6f, 0x17, 0x4e, 0xfc, 0xe2, 0xdb, 0x85, 0x13, 0xef, 0x3d, - 0x2f, 0xfd, 0xdd, 0x09, 0xb6, 0x7e, 0x5d, 0xc7, 0x26, 0x47, 0x1e, 0xff, 0x5a, 0x8a, 0xfe, 0xa5, - 0x8d, 0x7f, 0x4d, 0x9c, 0x5b, 0xa1, 0x9f, 0x1b, 0x8c, 0xae, 0x72, 0xc3, 0xae, 0x30, 0x00, 0xfd, - 0x63, 0x09, 0x6e, 0x23, 0x4d, 0xff, 0x28, 0xc2, 0x8b, 0x7f, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x9f, - 0x35, 0xa0, 0x61, 0xa4, 0x43, 0x00, 0x00, + // 3827 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3c, 0x4d, 0x6f, 0x1b, 0x47, + 0x96, 0x6e, 0x92, 0xe2, 0xc7, 0xa3, 0x3e, 0xe8, 0xd2, 0x87, 0x69, 0x39, 0x16, 0x65, 0x3a, 0xbb, + 0xb1, 0x83, 0x84, 0x4a, 0x14, 0x27, 0xc8, 0xc7, 0x22, 0x81, 0x68, 0x2b, 0xb6, 0x15, 0xcb, 0x56, + 0x28, 0x2b, 0xeb, 0x0d, 0xb2, 0x60, 0x9a, 0xec, 0x12, 0xd5, 0x16, 0xd9, 0xcd, 0xf4, 0x87, 0x22, + 0x01, 0x39, 0x24, 0x8b, 0x60, 0xf7, 0x16, 0xf8, 0xb2, 0xc0, 0x62, 0x2f, 0xd9, 0x3d, 0xee, 0x2e, + 0x82, 0x05, 0xf6, 0xb8, 0xbb, 0x73, 0x9b, 0xc3, 0x0c, 0x30, 0x18, 0xe4, 0x38, 0x27, 0xce, 0x8c, + 0x33, 0x33, 0x07, 0x02, 0x33, 0xff, 0x60, 0x80, 0x41, 0x7d, 0x75, 0x57, 0x35, 0x9b, 0x36, 0x2d, + 0x59, 0x71, 0x82, 0xe4, 0x64, 0xf7, 0xfb, 0xac, 0xaa, 0xf7, 0xea, 0xd5, 0x7b, 0xaf, 0x8a, 0x82, + 0xb3, 0xdd, 0xdd, 0xd6, 0x92, 0xee, 0x74, 0x74, 0x43, 0xc7, 0x7b, 0xd8, 0xf2, 0xdc, 0x25, 0xf6, + 0x4f, 0xa5, 0xeb, 0xd8, 0x9e, 0x8d, 0xc6, 0x65, 0xd4, 0x7c, 0x79, 0xf7, 0x55, 0xb7, 0x62, 0xda, + 0x4b, 0x7a, 0xd7, 0x5c, 0x6a, 0xda, 0x0e, 0x5e, 0xda, 0x7b, 0x71, 0xa9, 0x85, 0x2d, 0xec, 0xe8, + 0x1e, 0x36, 0x18, 0xc7, 0xfc, 0x05, 0x89, 0xc6, 0xc2, 0xde, 0xc7, 0xb6, 0xb3, 0x6b, 0x5a, 0xad, + 0x38, 0xca, 0x52, 0xcb, 0xb6, 0x5b, 0x6d, 0xbc, 0x44, 0xbf, 0x1a, 0xfe, 0xf6, 0x92, 0x67, 0x76, + 0xb0, 0xeb, 0xe9, 0x9d, 0x2e, 0x27, 0xb8, 0x14, 0x8a, 0xea, 0xe8, 0xcd, 0x1d, 0xd3, 0xc2, 0xce, + 0xc1, 0x12, 0x1d, 0x6f, 0xd7, 0x5c, 0x72, 0xb0, 0x6b, 0xfb, 0x4e, 0x13, 0x0f, 0x88, 0x7d, 0xbe, + 0x65, 0x7a, 0x3b, 0x7e, 0xa3, 0xd2, 0xb4, 0x3b, 0x4b, 0x2d, 0xbb, 0x65, 0x87, 0xf2, 0xc9, 0x17, + 0xfd, 0xa0, 0xff, 0xe3, 0xe4, 0xaf, 0x9b, 0x96, 0x87, 0x1d, 0x4b, 0x6f, 0x2f, 0xb9, 0xcd, 0x1d, + 0x6c, 0xf8, 0x6d, 0xec, 0x84, 0xff, 0xb3, 0x1b, 0x77, 0x71, 0xd3, 0x73, 0x07, 0x00, 0x8c, 0xb7, + 0xfc, 0xdb, 0x59, 0x98, 0x58, 0x25, 0x4b, 0xb3, 0x89, 0x3f, 0xf2, 0xb1, 0xd5, 0xc4, 0xe8, 0x22, + 0x8c, 0x7d, 0xe4, 0x63, 0x1f, 0x17, 0xb5, 0x45, 0xed, 0x42, 0xae, 0x3a, 0xdd, 0xef, 0x95, 0xa6, + 0x28, 0xe0, 0x39, 0xbb, 0x63, 0x7a, 0xb8, 0xd3, 0xf5, 0x0e, 0x6a, 0x8c, 0x02, 0xbd, 0x0e, 0xe3, + 0x77, 0xed, 0x46, 0xdd, 0xc5, 0x5e, 0xdd, 0xd2, 0x3b, 0xb8, 0x98, 0xa0, 0x1c, 0xc5, 0x7e, 0xaf, + 0x34, 0x73, 0xd7, 0x6e, 0x6c, 0x62, 0xef, 0xa6, 0xde, 0x91, 0xd9, 0x20, 0x84, 0xa2, 0xe7, 0x21, + 0xe3, 0xbb, 0xd8, 0xa9, 0x9b, 0x46, 0x31, 0x49, 0xd9, 0x66, 0xfa, 0xbd, 0x52, 0x81, 0x80, 0xae, + 0x1b, 0x12, 0x4b, 0x9a, 0x41, 0xd0, 0x73, 0x90, 0x6e, 0x39, 0xb6, 0xdf, 0x75, 0x8b, 0xa9, 0xc5, + 0xa4, 0xa0, 0x66, 0x10, 0x99, 0x9a, 0x41, 0xd0, 0x2d, 0x48, 0x33, 0x7b, 0x17, 0xc7, 0x16, 0x93, + 0x17, 0xf2, 0xcb, 0xe7, 0x2a, 0xb2, 0x13, 0x54, 0x94, 0x09, 0xb3, 0x2f, 0x26, 0x90, 0xe1, 0x65, + 0x81, 0xdc, 0x6d, 0xfe, 0x77, 0x1a, 0xc6, 0x28, 0x1d, 0xba, 0x05, 0x99, 0xa6, 0x83, 0x89, 0xb1, + 0x8a, 0x68, 0x51, 0xbb, 0x90, 0x5f, 0x9e, 0xaf, 0x30, 0x27, 0xa8, 0x08, 0x23, 0x55, 0x6e, 0x0b, + 0x27, 0xa8, 0x9e, 0xee, 0xf7, 0x4a, 0x27, 0x39, 0x79, 0x28, 0xf5, 0xde, 0xaf, 0x4b, 0x5a, 0x4d, + 0x48, 0x41, 0x1b, 0x90, 0x73, 0xfd, 0x46, 0xc7, 0xf4, 0xd6, 0xec, 0x06, 0x5d, 0xf3, 0xfc, 0xf2, + 0x29, 0x75, 0xb8, 0x9b, 0x02, 0x5d, 0x3d, 0xd5, 0xef, 0x95, 0xa6, 0x03, 0xea, 0x50, 0xe2, 0xb5, + 0x13, 0xb5, 0x50, 0x08, 0xda, 0x81, 0x29, 0x07, 0x77, 0x1d, 0xd3, 0x76, 0x4c, 0xcf, 0x74, 0x31, + 0x91, 0x9b, 0xa0, 0x72, 0xcf, 0xaa, 0x72, 0x6b, 0x2a, 0x51, 0xf5, 0x6c, 0xbf, 0x57, 0x3a, 0x1d, + 0xe1, 0x54, 0x74, 0x44, 0xc5, 0x22, 0x0f, 0x50, 0x04, 0xb4, 0x89, 0x3d, 0x6a, 0xcf, 0xfc, 0xf2, + 0xe2, 0x03, 0x95, 0x6d, 0x62, 0xaf, 0xba, 0xd8, 0xef, 0x95, 0x9e, 0x1a, 0xe4, 0x57, 0x54, 0xc6, + 0xc8, 0x47, 0x6d, 0x28, 0xc8, 0x50, 0x83, 0x4c, 0x30, 0x45, 0x75, 0x2e, 0x0c, 0xd7, 0x49, 0xa8, + 0xaa, 0x0b, 0xfd, 0x5e, 0x69, 0x3e, 0xca, 0xab, 0xe8, 0x1b, 0x90, 0x4c, 0xec, 0xd3, 0xd4, 0xad, + 0x26, 0x6e, 0x13, 0x35, 0x63, 0x71, 0xf6, 0xb9, 0x2c, 0xd0, 0xcc, 0x3e, 0x01, 0xb5, 0x6a, 0x9f, + 0x00, 0x8c, 0x3e, 0x80, 0xf1, 0xe0, 0x83, 0xac, 0x57, 0x9a, 0xfb, 0x51, 0xbc, 0x50, 0xb2, 0x52, + 0xf3, 0xfd, 0x5e, 0x69, 0x4e, 0xe6, 0x51, 0x44, 0x2b, 0xd2, 0x42, 0xe9, 0x6d, 0xb6, 0x32, 0x99, + 0xe1, 0xd2, 0x19, 0x85, 0x2c, 0xbd, 0x3d, 0xb8, 0x22, 0x8a, 0x34, 0x22, 0x9d, 0x6c, 0x62, 0xbf, + 0xd9, 0xc4, 0xd8, 0xc0, 0x46, 0x31, 0x1b, 0x27, 0x7d, 0x4d, 0xa2, 0x60, 0xd2, 0x65, 0x1e, 0x55, + 0xba, 0x8c, 0x21, 0x6b, 0x7d, 0xd7, 0x6e, 0xac, 0x3a, 0x8e, 0xed, 0xb8, 0xc5, 0x5c, 0xdc, 0x5a, + 0xaf, 0x09, 0x34, 0x5b, 0xeb, 0x80, 0x5a, 0x5d, 0xeb, 0x00, 0xcc, 0xc7, 0x5b, 0xf3, 0xad, 0x1b, + 0x58, 0x77, 0xb1, 0x51, 0x84, 0x21, 0xe3, 0x0d, 0x28, 0x82, 0xf1, 0x06, 0x90, 0x81, 0xf1, 0x06, + 0x18, 0x64, 0xc0, 0x24, 0xfb, 0x5e, 0x71, 0x5d, 0xb3, 0x65, 0x61, 0xa3, 0x98, 0xa7, 0xf2, 0x9f, + 0x8a, 0x93, 0x2f, 0x68, 0xaa, 0x4f, 0xf5, 0x7b, 0xa5, 0xa2, 0xca, 0xa7, 0xe8, 0x88, 0xc8, 0x44, + 0x1f, 0xc2, 0x04, 0x83, 0xd4, 0x7c, 0xcb, 0x32, 0xad, 0x56, 0x71, 0x9c, 0x2a, 0x39, 0x13, 0xa7, + 0x84, 0x93, 0x54, 0xcf, 0xf4, 0x7b, 0xa5, 0x53, 0x0a, 0x97, 0xa2, 0x42, 0x15, 0x48, 0x22, 0x06, + 0x03, 0x84, 0x86, 0x9d, 0x88, 0x8b, 0x18, 0x6b, 0x2a, 0x11, 0x8b, 0x18, 0x11, 0x4e, 0x35, 0x62, + 0x44, 0x90, 0xa1, 0x3d, 0xb8, 0x91, 0x27, 0x87, 0xdb, 0x83, 0xdb, 0x59, 0xb2, 0x47, 0x8c, 0xa9, + 0x15, 0x69, 0xe8, 0x53, 0x0d, 0x66, 0x5d, 0x4f, 0xb7, 0x0c, 0xbd, 0x6d, 0x5b, 0xf8, 0xba, 0xd5, + 0x72, 0xb0, 0xeb, 0x5e, 0xb7, 0xb6, 0xed, 0x62, 0x81, 0xea, 0x39, 0x1f, 0x09, 0xac, 0x71, 0xa4, + 0xd5, 0xf3, 0xfd, 0x5e, 0xa9, 0x14, 0x2b, 0x45, 0xd1, 0x1c, 0xaf, 0x08, 0xed, 0xc3, 0xb4, 0x38, + 0xd7, 0xb7, 0x3c, 0xb3, 0x6d, 0xba, 0xba, 0x67, 0xda, 0x56, 0xf1, 0x24, 0xd5, 0x7f, 0x2e, 0x1a, + 0x9f, 0x06, 0x08, 0xab, 0xe7, 0xfa, 0xbd, 0xd2, 0xd9, 0x18, 0x09, 0x8a, 0xee, 0x38, 0x15, 0xa1, + 0x11, 0x37, 0x1c, 0x4c, 0x08, 0xb1, 0x51, 0x9c, 0x1e, 0x6e, 0xc4, 0x80, 0x48, 0x36, 0x62, 0x00, + 0x8c, 0x33, 0x62, 0x80, 0x24, 0x9a, 0xba, 0xba, 0xe3, 0x99, 0x44, 0xed, 0xba, 0xee, 0xec, 0x62, + 0xa7, 0x38, 0x13, 0xa7, 0x69, 0x43, 0x25, 0x62, 0x9a, 0x22, 0x9c, 0xaa, 0xa6, 0x08, 0x12, 0xdd, + 0xd3, 0x40, 0x1d, 0x9a, 0x69, 0x5b, 0x35, 0x72, 0x70, 0xbb, 0x64, 0x7a, 0xb3, 0x54, 0xe9, 0x33, + 0x0f, 0x98, 0x9e, 0x4c, 0x5e, 0x7d, 0xa6, 0xdf, 0x2b, 0x9d, 0x1f, 0x2a, 0x4d, 0x19, 0xc8, 0x70, + 0xa5, 0xe8, 0x0e, 0xe4, 0x09, 0x12, 0xd3, 0x14, 0xc8, 0x28, 0xce, 0xd1, 0x31, 0x9c, 0x1e, 0x1c, + 0x03, 0x27, 0xa0, 0x39, 0xc0, 0xac, 0xc4, 0xa1, 0xe8, 0x91, 0x45, 0xa1, 0xcf, 0x35, 0x20, 0x8e, + 0x1e, 0x37, 0xd3, 0x53, 0x54, 0xcb, 0xd3, 0x03, 0x5a, 0xe2, 0xa6, 0xf9, 0x74, 0xbf, 0x57, 0x5a, + 0x8c, 0x97, 0xa3, 0xe8, 0x1e, 0xa2, 0x2b, 0xf4, 0xa3, 0xe0, 0x90, 0x28, 0x16, 0x87, 0xfb, 0x51, + 0x40, 0x24, 0xfb, 0x51, 0x00, 0x8c, 0xf3, 0xa3, 0x00, 0xc9, 0x83, 0xc1, 0x7b, 0x7a, 0xdb, 0x34, + 0x68, 0x42, 0x75, 0x7a, 0x48, 0x30, 0x08, 0x28, 0x82, 0x60, 0x10, 0x40, 0x06, 0x82, 0x41, 0x48, + 0x9b, 0x81, 0x31, 0x2a, 0xa2, 0x7c, 0x3f, 0x03, 0xd3, 0x31, 0x5b, 0x0d, 0xbd, 0x09, 0x69, 0xc7, + 0xb7, 0x48, 0x06, 0xca, 0xd2, 0x2e, 0xa4, 0x2a, 0xde, 0xf2, 0x4d, 0x83, 0xa5, 0xbf, 0x8e, 0x6f, + 0x29, 0x49, 0xe9, 0x18, 0x05, 0x10, 0x7e, 0x92, 0xfe, 0x9a, 0x06, 0x4f, 0xaf, 0x86, 0xf2, 0xdf, + 0xb5, 0x1b, 0x2a, 0x3f, 0x05, 0x20, 0x0c, 0x13, 0x62, 0x1f, 0xd7, 0x4d, 0x12, 0xa4, 0x92, 0x71, + 0x56, 0x7e, 0xc7, 0x6f, 0x60, 0xc7, 0xc2, 0x1e, 0x76, 0xc5, 0x1c, 0x68, 0x94, 0xa2, 0x2b, 0xe1, + 0x48, 0x10, 0x49, 0xfe, 0xb8, 0x0c, 0x47, 0xff, 0xaa, 0x41, 0xb1, 0xa3, 0xef, 0xd7, 0x05, 0xd0, + 0xad, 0x6f, 0xdb, 0x4e, 0xbd, 0x8b, 0x1d, 0xd3, 0x36, 0x68, 0x36, 0x9d, 0x5f, 0xfe, 0x9b, 0x87, + 0xc6, 0xa5, 0xca, 0xba, 0xbe, 0x2f, 0xc0, 0xee, 0xdb, 0xb6, 0xb3, 0x41, 0xd9, 0x57, 0x2d, 0xcf, + 0x39, 0x60, 0x01, 0xb3, 0x13, 0x87, 0x97, 0xc6, 0x34, 0x1b, 0x4b, 0x80, 0xfe, 0x59, 0x83, 0x39, + 0xcf, 0xf6, 0xf4, 0x76, 0xbd, 0xe9, 0x77, 0xfc, 0xb6, 0xee, 0x99, 0x7b, 0xb8, 0xee, 0xbb, 0x7a, + 0x0b, 0xf3, 0xd4, 0xfd, 0x8d, 0x87, 0x0f, 0xed, 0x36, 0xe1, 0xbf, 0x1c, 0xb0, 0x6f, 0x11, 0x6e, + 0x36, 0xb2, 0x72, 0xbf, 0x57, 0x5a, 0xf0, 0x62, 0xd0, 0xd2, 0xc0, 0x66, 0xe2, 0xf0, 0xe8, 0x12, + 0x00, 0xb3, 0x6d, 0xdd, 0xf5, 0x1c, 0x9a, 0xa1, 0xe5, 0xaa, 0x73, 0xfd, 0x5e, 0x09, 0x51, 0xd3, + 0x6d, 0x7a, 0x52, 0xdc, 0xaa, 0x65, 0x05, 0x8c, 0x70, 0x31, 0x8f, 0xa2, 0x5c, 0x99, 0x90, 0x8b, + 0x3a, 0x4c, 0x84, 0x4b, 0xc0, 0xe6, 0xff, 0x4d, 0x83, 0xf9, 0xe1, 0xcb, 0x8b, 0xce, 0x43, 0x72, + 0x17, 0x1f, 0xf0, 0x72, 0xec, 0x64, 0xbf, 0x57, 0x9a, 0xd8, 0xc5, 0x07, 0x92, 0x20, 0x82, 0x45, + 0x7f, 0x07, 0x63, 0x7b, 0x7a, 0xdb, 0xc7, 0xdc, 0x15, 0x2b, 0x15, 0x56, 0x78, 0x56, 0xe4, 0xc2, + 0xb3, 0xd2, 0xdd, 0x6d, 0x11, 0x40, 0x45, 0x78, 0x42, 0xe5, 0x5d, 0x5f, 0xb7, 0x3c, 0xd3, 0x3b, + 0x60, 0x6e, 0x4a, 0x05, 0xc8, 0x6e, 0x4a, 0x01, 0xaf, 0x27, 0x5e, 0xd5, 0xe6, 0xbf, 0xd4, 0xe0, + 0xf4, 0xd0, 0x65, 0xfe, 0x2e, 0x8c, 0xb0, 0x5c, 0x87, 0x14, 0xd9, 0x70, 0xa4, 0x50, 0xdc, 0x31, + 0x5b, 0x3b, 0xaf, 0x5c, 0xa2, 0xc3, 0x49, 0xb3, 0xba, 0x8e, 0x41, 0xe4, 0xba, 0x8e, 0x41, 0x48, + 0xb1, 0xdb, 0xb6, 0x3f, 0x7e, 0xe5, 0x12, 0x1d, 0x54, 0x9a, 0x29, 0xa1, 0x00, 0x59, 0x09, 0x05, + 0x94, 0xfb, 0x69, 0xc8, 0x05, 0x95, 0x98, 0xb4, 0xf7, 0xb5, 0x43, 0xed, 0xfd, 0x6b, 0x50, 0x30, + 0xb0, 0xe1, 0x77, 0xdb, 0x66, 0x93, 0x3a, 0xb1, 0x88, 0x22, 0x39, 0x16, 0x46, 0x15, 0x9c, 0xc2, + 0x3f, 0x15, 0x41, 0xa1, 0x65, 0xc8, 0xf2, 0x8a, 0xe5, 0x80, 0x06, 0x90, 0x09, 0xe6, 0x71, 0x02, + 0x26, 0x7b, 0x9c, 0x80, 0xa1, 0x1a, 0x00, 0x6b, 0x03, 0xac, 0x63, 0x4f, 0xe7, 0xb5, 0x53, 0x51, + 0x9d, 0xc1, 0xad, 0x00, 0xcf, 0x0a, 0xfa, 0x90, 0x5e, 0x2e, 0xe8, 0x43, 0x28, 0xfa, 0x00, 0xa0, + 0xa3, 0x9b, 0x16, 0xe3, 0xe3, 0x85, 0x52, 0x79, 0x58, 0x28, 0x5b, 0x0f, 0x28, 0x99, 0xf4, 0x90, + 0x53, 0x96, 0x1e, 0x42, 0x49, 0xd9, 0xcd, 0x1b, 0x17, 0xc5, 0x34, 0x8d, 0x0b, 0x0b, 0xc3, 0x44, + 0x73, 0xb1, 0xb3, 0xa4, 0xf4, 0xe6, 0x2c, 0x92, 0x4c, 0x21, 0x85, 0x2c, 0x5b, 0xdb, 0xdc, 0xc6, + 0x9e, 0xd9, 0xc1, 0x74, 0xa3, 0xf2, 0x65, 0x13, 0x30, 0x79, 0xd9, 0x04, 0x0c, 0xbd, 0x0a, 0xa0, + 0x7b, 0xeb, 0xb6, 0xeb, 0xdd, 0xb2, 0x9a, 0x98, 0x96, 0x3e, 0x59, 0x36, 0xfc, 0x10, 0x2a, 0x0f, + 0x3f, 0x84, 0xa2, 0x37, 0x20, 0xdf, 0xe5, 0x47, 0x6d, 0xa3, 0x8d, 0x69, 0x69, 0x93, 0x65, 0x99, + 0x81, 0x04, 0x96, 0x78, 0x65, 0x6a, 0x74, 0x15, 0xa6, 0x9a, 0xb6, 0xd5, 0xf4, 0x1d, 0x07, 0x5b, + 0xcd, 0x83, 0x4d, 0x7d, 0x1b, 0xd3, 0x32, 0x26, 0xcb, 0x5c, 0x25, 0x82, 0x92, 0x5d, 0x25, 0x82, + 0x42, 0x2f, 0x43, 0x2e, 0x68, 0x03, 0xd1, 0x4a, 0x25, 0xc7, 0x3b, 0x0a, 0x02, 0x28, 0x31, 0x87, + 0x94, 0x64, 0xf0, 0xa6, 0x7b, 0x85, 0x3b, 0x1d, 0xa6, 0xd5, 0x07, 0x1f, 0xbc, 0x04, 0x96, 0x07, + 0x2f, 0x81, 0x23, 0x81, 0x74, 0x72, 0xb4, 0x40, 0x5a, 0xfe, 0x85, 0x06, 0x33, 0x71, 0xde, 0x12, + 0xf1, 0x5c, 0xed, 0xb1, 0x78, 0xee, 0x7b, 0x90, 0xed, 0xda, 0x46, 0xdd, 0xed, 0xe2, 0x26, 0x0f, + 0x4e, 0x11, 0xbf, 0xdd, 0xb0, 0x8d, 0xcd, 0x2e, 0x6e, 0xfe, 0xad, 0xe9, 0xed, 0xac, 0xec, 0xd9, + 0xa6, 0x71, 0xc3, 0x74, 0xb9, 0x83, 0x75, 0x19, 0x46, 0xc9, 0x42, 0x32, 0x1c, 0x58, 0xcd, 0x42, + 0x9a, 0x69, 0x29, 0xff, 0x32, 0x09, 0x85, 0xa8, 0x87, 0x7e, 0x9f, 0xa6, 0x82, 0xee, 0x40, 0xc6, + 0x64, 0x45, 0x0e, 0x4f, 0x52, 0xfe, 0x4a, 0x0a, 0xdf, 0x95, 0xb0, 0x49, 0x5a, 0xd9, 0x7b, 0xb1, + 0xc2, 0xab, 0x21, 0xba, 0x04, 0x54, 0x32, 0xe7, 0x54, 0x25, 0x73, 0x20, 0xaa, 0x41, 0xc6, 0xc5, + 0xce, 0x9e, 0xd9, 0xc4, 0x3c, 0x0e, 0x95, 0x64, 0xc9, 0x4d, 0xdb, 0xc1, 0x44, 0xe6, 0x26, 0x23, + 0x09, 0x65, 0x72, 0x1e, 0x55, 0x26, 0x07, 0xa2, 0xf7, 0x20, 0xd7, 0xb4, 0xad, 0x6d, 0xb3, 0xb5, + 0xae, 0x77, 0x79, 0x24, 0x3a, 0x1b, 0x27, 0xf5, 0xb2, 0x20, 0xe2, 0x8d, 0x1b, 0xf1, 0x19, 0x69, + 0xdc, 0x04, 0x54, 0xa1, 0x41, 0xff, 0x94, 0x02, 0x08, 0x8d, 0x83, 0x5e, 0x83, 0x3c, 0xde, 0xc7, + 0x4d, 0xdf, 0xb3, 0x1d, 0x71, 0x24, 0xf0, 0x3e, 0xa8, 0x00, 0x2b, 0x31, 0x1c, 0x42, 0x28, 0xd9, + 0x93, 0x96, 0xde, 0xc1, 0x6e, 0x57, 0x6f, 0x8a, 0x06, 0x2a, 0x1d, 0x4c, 0x00, 0x94, 0xf7, 0x64, + 0x00, 0x44, 0x7f, 0x0d, 0x29, 0xda, 0x72, 0x65, 0xbd, 0x53, 0xd4, 0xef, 0x95, 0x26, 0x2d, 0xb5, + 0xd9, 0x4a, 0xf1, 0xe8, 0x2d, 0x98, 0xd8, 0x0d, 0x1c, 0x8f, 0x8c, 0x2d, 0x45, 0x19, 0x68, 0xf6, + 0x18, 0x22, 0x94, 0xd1, 0x8d, 0xcb, 0x70, 0xb4, 0x0d, 0x79, 0xdd, 0xb2, 0x6c, 0x8f, 0x1e, 0x37, + 0xa2, 0x9f, 0x7a, 0x71, 0x98, 0x9b, 0x56, 0x56, 0x42, 0x5a, 0x96, 0x82, 0xd1, 0x38, 0x21, 0x49, + 0x90, 0xe3, 0x84, 0x04, 0x46, 0x35, 0x48, 0xb7, 0xf5, 0x06, 0x6e, 0x8b, 0xf8, 0xfe, 0xf4, 0x50, + 0x15, 0x37, 0x28, 0x19, 0x93, 0x4e, 0x4f, 0x77, 0xc6, 0x27, 0x9f, 0xee, 0x0c, 0x32, 0xbf, 0x0d, + 0x85, 0xe8, 0x78, 0x46, 0xcb, 0x55, 0x2e, 0xca, 0xb9, 0x4a, 0xee, 0xa1, 0xd9, 0x91, 0x0e, 0x79, + 0x69, 0x50, 0xc7, 0xa1, 0xa2, 0xfc, 0x1f, 0x1a, 0xcc, 0xc4, 0xed, 0x5d, 0xb4, 0x2e, 0xed, 0x78, + 0x8d, 0xf7, 0x85, 0x62, 0x5c, 0x9d, 0xf3, 0x0e, 0xd9, 0xea, 0xe1, 0x46, 0xaf, 0xc2, 0xa4, 0x65, + 0x1b, 0xb8, 0xae, 0x13, 0x05, 0x6d, 0xd3, 0xf5, 0x8a, 0x09, 0xda, 0x6f, 0xa7, 0xfd, 0x24, 0x82, + 0x59, 0x11, 0x08, 0x89, 0x7b, 0x42, 0x41, 0x94, 0xff, 0x4f, 0x83, 0xa9, 0x48, 0xbb, 0xf7, 0xc8, + 0xf9, 0x92, 0x9c, 0xe5, 0x24, 0x46, 0xcc, 0x72, 0xd4, 0xa3, 0x27, 0x39, 0xe2, 0xd1, 0xf3, 0xf3, + 0x04, 0xe4, 0xa5, 0xfa, 0xfd, 0xc8, 0x23, 0xbf, 0x0b, 0x53, 0xfc, 0x28, 0x35, 0xad, 0x16, 0xab, + 0xf3, 0x12, 0xbc, 0x19, 0x35, 0x70, 0x27, 0xb3, 0x66, 0x37, 0x36, 0x03, 0x5a, 0x5a, 0xe6, 0xd1, + 0x5e, 0xa1, 0xab, 0xc0, 0x24, 0x15, 0x93, 0x2a, 0x06, 0xdd, 0x81, 0x39, 0xbf, 0x4b, 0xaa, 0xdf, + 0xba, 0xcb, 0x6f, 0x37, 0xea, 0x96, 0xdf, 0x69, 0x60, 0x36, 0xfb, 0x31, 0x56, 0x0f, 0x31, 0x0a, + 0x71, 0xfd, 0x71, 0x93, 0xe2, 0xe5, 0x7a, 0x28, 0x0e, 0x1f, 0x59, 0xcb, 0xd4, 0x88, 0x6b, 0x79, + 0x0d, 0xd0, 0x60, 0xdf, 0x5f, 0xb1, 0xa5, 0x36, 0x9a, 0x2d, 0xcb, 0xff, 0xaf, 0x41, 0x21, 0xda, + 0xce, 0xff, 0x1e, 0x39, 0xd5, 0x7f, 0x6b, 0x90, 0x0b, 0x3a, 0xfa, 0x47, 0x1e, 0xf7, 0x73, 0x90, + 0x76, 0xb0, 0xee, 0xda, 0x16, 0x0f, 0x1e, 0x34, 0x0a, 0x32, 0x88, 0x1c, 0x05, 0x19, 0xe4, 0x90, + 0x23, 0xbe, 0x0d, 0xe3, 0xcc, 0x5c, 0x6f, 0x9b, 0x6d, 0x0f, 0x3b, 0xe8, 0x0a, 0xa4, 0x5d, 0x4f, + 0xf7, 0xb0, 0x5b, 0xd4, 0x16, 0x93, 0x17, 0x26, 0x97, 0xe7, 0x06, 0x5b, 0xfe, 0x04, 0xcd, 0xc6, + 0xc2, 0x28, 0xe5, 0xb1, 0x30, 0x48, 0xf9, 0x1f, 0x34, 0x18, 0x97, 0x6f, 0x36, 0x1e, 0x8f, 0xd8, + 0x47, 0x5b, 0x90, 0xf2, 0xff, 0x04, 0x83, 0x68, 0x3f, 0x1e, 0x3f, 0xfa, 0x36, 0xec, 0xf1, 0x47, + 0x8d, 0x19, 0x24, 0xe8, 0xa4, 0x1f, 0x75, 0xd0, 0xad, 0xb0, 0xfb, 0x44, 0x62, 0x87, 0x4b, 0x03, + 0xfd, 0xa8, 0xdd, 0x27, 0x7a, 0x1c, 0x28, 0xec, 0xf2, 0x71, 0xa0, 0x20, 0x0e, 0x39, 0xdf, 0x4f, + 0xd3, 0x74, 0xbe, 0xe1, 0x5d, 0xcb, 0x93, 0xee, 0xd6, 0x45, 0x72, 0xbc, 0xe4, 0x23, 0xe4, 0x78, + 0xcf, 0x43, 0x86, 0x1e, 0xaa, 0x41, 0xfa, 0x45, 0x1d, 0x84, 0x80, 0xd4, 0xbb, 0x6e, 0x06, 0x79, + 0x40, 0x14, 0x1f, 0x3b, 0x62, 0x14, 0xaf, 0xc3, 0xe9, 0x1d, 0xdd, 0xad, 0x8b, 0x73, 0xc7, 0xa8, + 0xeb, 0x5e, 0x3d, 0x88, 0x80, 0x69, 0x5a, 0xd7, 0xd1, 0xee, 0xf1, 0x8e, 0xee, 0x6e, 0x0a, 0x9a, + 0x15, 0x6f, 0x63, 0x30, 0x1e, 0xce, 0xc5, 0x53, 0xa0, 0x2d, 0x98, 0x8d, 0x17, 0x9e, 0xa1, 0x23, + 0xa7, 0x97, 0x1b, 0xee, 0x03, 0x25, 0x4f, 0xc7, 0xa0, 0xd1, 0x67, 0x1a, 0x14, 0x49, 0x96, 0xe3, + 0xe0, 0x8f, 0x7c, 0xd3, 0xc1, 0x1d, 0x62, 0xb1, 0xba, 0xbd, 0x87, 0x9d, 0xb6, 0x7e, 0xc0, 0xef, + 0x09, 0xcf, 0x0d, 0x9e, 0xa6, 0x1b, 0xb6, 0x51, 0x93, 0x18, 0xd8, 0xd4, 0xba, 0x2a, 0xf0, 0x16, + 0x13, 0x22, 0x4f, 0x2d, 0x9e, 0x22, 0xe2, 0xc6, 0x70, 0xa8, 0x8e, 0x60, 0x7e, 0xb4, 0x8e, 0xe0, + 0x5a, 0x2a, 0x9b, 0x2d, 0xe4, 0xca, 0xbf, 0x4f, 0xc0, 0xa4, 0x7a, 0x75, 0xf8, 0xc4, 0x37, 0xc1, + 0x40, 0xd0, 0x48, 0x7e, 0x2b, 0x41, 0x23, 0x75, 0xa8, 0xd5, 0x1e, 0x1b, 0x6d, 0xb5, 0xcb, 0xbf, + 0x4b, 0xc0, 0x84, 0x72, 0x7b, 0xfa, 0xe3, 0x32, 0x1f, 0xc7, 0x32, 0xff, 0x4b, 0x02, 0xe6, 0xe2, + 0x87, 0x7c, 0x2c, 0xad, 0x90, 0x6b, 0x40, 0x8a, 0x9a, 0xeb, 0x61, 0xbe, 0x3d, 0x3b, 0xd0, 0x09, + 0xa1, 0xcb, 0x25, 0x2a, 0xa2, 0x81, 0x0b, 0x5e, 0xc1, 0x8e, 0xee, 0x40, 0xde, 0x94, 0xae, 0x92, + 0x93, 0x71, 0x37, 0x7e, 0xf2, 0x05, 0x32, 0x6b, 0x8d, 0x0d, 0xb9, 0x36, 0x96, 0x45, 0x55, 0xd3, + 0x90, 0x22, 0x05, 0x41, 0x79, 0x0f, 0x32, 0x7c, 0x38, 0xe8, 0x25, 0xc8, 0xd1, 0xb3, 0x82, 0x56, + 0xf7, 0x5a, 0xb8, 0xb4, 0x04, 0x18, 0x79, 0x4e, 0x95, 0x15, 0x30, 0xf4, 0x0a, 0x00, 0x09, 0x8f, + 0xfc, 0x94, 0x48, 0xd0, 0x58, 0x4b, 0xbb, 0x08, 0x5d, 0xdb, 0x18, 0x38, 0x1a, 0x72, 0x01, 0xb0, + 0xfc, 0x55, 0x02, 0xf2, 0xf2, 0xe5, 0xf5, 0xa1, 0x94, 0x7f, 0x02, 0xa2, 0xc3, 0x53, 0xd7, 0x0d, + 0x83, 0xfc, 0x8b, 0x45, 0x32, 0xb1, 0x34, 0x74, 0x91, 0xc4, 0xff, 0x57, 0x04, 0x07, 0xab, 0xe7, + 0xe9, 0x03, 0x1d, 0x33, 0x82, 0x92, 0xb4, 0x16, 0xa2, 0xb8, 0xf9, 0x5d, 0x98, 0x8d, 0x15, 0x25, + 0x57, 0xe1, 0x63, 0x8f, 0xab, 0x0a, 0xff, 0x2a, 0x0d, 0xb3, 0xb1, 0x8f, 0x06, 0x9e, 0x78, 0xc4, + 0x50, 0x77, 0x50, 0xf2, 0xb1, 0xec, 0xa0, 0x7f, 0xd4, 0xe2, 0x2c, 0xcb, 0x6e, 0x0c, 0x5f, 0x1b, + 0xe1, 0x25, 0xc5, 0xe3, 0xb2, 0xb1, 0xea, 0x96, 0x63, 0x87, 0xda, 0x13, 0xe9, 0x51, 0xf7, 0x04, + 0x7a, 0x81, 0x35, 0x54, 0xa8, 0x2e, 0x76, 0x83, 0x27, 0x22, 0x44, 0x44, 0x55, 0x86, 0x83, 0xd0, + 0x5b, 0x30, 0x21, 0x38, 0x58, 0x1b, 0x2f, 0x1b, 0xf6, 0xd8, 0x38, 0x4d, 0xb4, 0x93, 0x37, 0x2e, + 0xc3, 0x23, 0x51, 0x38, 0x77, 0xa8, 0x28, 0x0c, 0x23, 0x5e, 0x36, 0x7e, 0xab, 0xfb, 0xe5, 0x0f, + 0x09, 0x98, 0x8a, 0xbc, 0x19, 0xfa, 0xf1, 0x6c, 0x3d, 0x8e, 0xb3, 0xf5, 0xa7, 0x1a, 0xe4, 0x82, + 0xa7, 0x71, 0x47, 0x2e, 0x0d, 0x57, 0x20, 0x8d, 0xd9, 0xf3, 0x2c, 0x16, 0xc6, 0xa7, 0x23, 0xcf, + 0x67, 0x09, 0x8e, 0x3f, 0x98, 0x8d, 0xbc, 0xc8, 0xaa, 0x71, 0xc6, 0x43, 0x16, 0x7d, 0x3f, 0x49, + 0x88, 0xa2, 0x2f, 0x9c, 0xc9, 0x13, 0x75, 0x96, 0x70, 0x25, 0x92, 0x8f, 0x67, 0x25, 0x8e, 0xd7, + 0x0d, 0xfe, 0x1d, 0x60, 0x8c, 0x8e, 0x09, 0x2d, 0x43, 0xd6, 0xc3, 0x4e, 0xc7, 0xb4, 0xf4, 0x36, + 0x5d, 0xba, 0x2c, 0xe3, 0x16, 0x30, 0x99, 0x5b, 0xc0, 0xd0, 0x0e, 0x4c, 0x85, 0xad, 0x7f, 0x2a, + 0x26, 0xfe, 0xdd, 0xf0, 0x3b, 0x2a, 0x11, 0xbb, 0x86, 0x8c, 0x70, 0xaa, 0x0f, 0x7f, 0x22, 0x48, + 0x64, 0xc0, 0x64, 0xd3, 0xb6, 0x3c, 0xdd, 0xb4, 0xb0, 0xc3, 0x14, 0x25, 0xe3, 0xde, 0x4d, 0x5e, + 0x56, 0x68, 0x58, 0x2f, 0x54, 0xe5, 0x53, 0xdf, 0x4d, 0xaa, 0x38, 0xf4, 0x21, 0x4c, 0x88, 0x22, + 0x9c, 0x29, 0x49, 0xc5, 0xbd, 0x9b, 0x5c, 0x95, 0x49, 0xd8, 0x06, 0x57, 0xb8, 0xd4, 0x77, 0x93, + 0x0a, 0x0a, 0xb5, 0xa1, 0xd0, 0xb5, 0x8d, 0x2d, 0x8b, 0x97, 0x9e, 0x7a, 0xa3, 0x8d, 0xf9, 0x7d, + 0xd3, 0xc2, 0x40, 0xb2, 0xa9, 0x50, 0xb1, 0x43, 0x30, 0xca, 0xab, 0xbe, 0x44, 0x8e, 0x62, 0xd1, + 0x07, 0x30, 0xde, 0xc6, 0xba, 0x8b, 0x57, 0xf7, 0xbb, 0xa6, 0x83, 0x8d, 0xf8, 0x77, 0xc3, 0x37, + 0x24, 0x0a, 0x76, 0x04, 0xc9, 0x3c, 0xea, 0x73, 0x29, 0x19, 0x43, 0xac, 0xdf, 0xd1, 0xf7, 0x6b, + 0xbe, 0xe5, 0xae, 0xee, 0xf3, 0x37, 0xa0, 0x99, 0x38, 0xeb, 0xaf, 0xab, 0x44, 0xcc, 0xfa, 0x11, + 0x4e, 0xd5, 0xfa, 0x11, 0x24, 0xba, 0x41, 0x4f, 0x58, 0x66, 0x12, 0xf6, 0x7e, 0x78, 0x6e, 0x60, + 0xb5, 0x98, 0x35, 0x58, 0x3b, 0x96, 0x7f, 0x29, 0x42, 0x03, 0x09, 0xdc, 0x06, 0x74, 0xda, 0x35, + 0xec, 0xf9, 0x8e, 0x85, 0x0d, 0xde, 0x12, 0x18, 0xb4, 0x81, 0x42, 0x15, 0xd8, 0x40, 0x81, 0x0e, + 0xd8, 0x40, 0xc1, 0x12, 0x9f, 0xea, 0xda, 0xc6, 0x6d, 0xb6, 0x65, 0xbc, 0xe0, 0x41, 0xf1, 0x99, + 0x01, 0x55, 0x21, 0x09, 0xf3, 0x29, 0x85, 0x4b, 0xf5, 0x29, 0x05, 0x85, 0x3e, 0x81, 0x99, 0xc8, + 0x7b, 0x4b, 0xb6, 0x52, 0xf9, 0xb8, 0xeb, 0xdc, 0xb5, 0x18, 0x4a, 0xd6, 0x1f, 0x8a, 0x93, 0xa1, + 0xa8, 0x8d, 0xd5, 0x42, 0xb4, 0xb7, 0x74, 0xab, 0xb5, 0x66, 0x37, 0x54, 0xaf, 0x1e, 0x8f, 0xd3, + 0x7e, 0x35, 0x86, 0x92, 0x69, 0x8f, 0x93, 0xa1, 0x6a, 0x8f, 0xa3, 0x08, 0xde, 0x56, 0x92, 0x14, + 0x34, 0x78, 0x83, 0x1c, 0xf7, 0xb6, 0x92, 0x11, 0x48, 0x6f, 0x2b, 0x19, 0x20, 0xe6, 0x6d, 0x25, + 0xa7, 0xcc, 0x8a, 0x16, 0x6d, 0xf9, 0x4b, 0x0d, 0xa6, 0x22, 0x11, 0x0c, 0xbd, 0x09, 0xc1, 0x93, + 0xb9, 0xdb, 0x07, 0x5d, 0x51, 0xfa, 0x28, 0x4f, 0xec, 0x08, 0x3c, 0xee, 0x89, 0x1d, 0x81, 0xa3, + 0x1b, 0x00, 0xc1, 0xd9, 0xff, 0xa0, 0xa3, 0x86, 0xe6, 0xdd, 0x21, 0xa5, 0x9c, 0x77, 0x87, 0xd0, + 0xf2, 0xbd, 0x14, 0x64, 0xc5, 0x16, 0x38, 0x96, 0xd2, 0x78, 0x09, 0x32, 0x1d, 0xec, 0xd2, 0x47, + 0x76, 0x89, 0x30, 0xc3, 0xe5, 0x20, 0x39, 0xc3, 0xe5, 0x20, 0x35, 0x01, 0x4f, 0x1e, 0x2a, 0x01, + 0x4f, 0x8d, 0x9c, 0x80, 0x63, 0xfa, 0xdc, 0x45, 0x0a, 0xe4, 0xe2, 0xd6, 0xf9, 0xc1, 0xa7, 0x83, + 0x78, 0x0c, 0x23, 0x33, 0x46, 0x1e, 0xc3, 0xc8, 0x28, 0xb4, 0x0b, 0x27, 0xa5, 0x9b, 0x71, 0xde, + 0xbf, 0x27, 0x21, 0x75, 0x72, 0xf8, 0xdb, 0xa2, 0x1a, 0xa5, 0x62, 0x81, 0x63, 0x37, 0x02, 0x95, + 0x2b, 0x98, 0x28, 0x8e, 0x38, 0x98, 0x81, 0x1b, 0x7e, 0x6b, 0x9d, 0x2f, 0x7b, 0x26, 0x74, 0x30, + 0x19, 0x2e, 0x3b, 0x98, 0x0c, 0xa7, 0xad, 0x40, 0x75, 0xbe, 0xc7, 0xe2, 0x18, 0x2f, 0x41, 0x0e, + 0xef, 0x9b, 0x5e, 0xbd, 0x69, 0x1b, 0x98, 0xb7, 0x11, 0xa8, 0x9d, 0x09, 0xf0, 0xb2, 0x6d, 0x28, + 0x76, 0x16, 0x30, 0xd9, 0x9b, 0x92, 0x23, 0x79, 0x53, 0x78, 0x5d, 0x92, 0x1a, 0xe1, 0xba, 0x24, + 0xd6, 0x4e, 0xb9, 0xe3, 0xb1, 0x53, 0xf9, 0xeb, 0x04, 0x14, 0xa2, 0xe7, 0xc4, 0x77, 0x63, 0x0b, + 0xaa, 0xbb, 0x29, 0x39, 0xf2, 0x6e, 0x7a, 0x0b, 0x26, 0x48, 0x22, 0xa9, 0x7b, 0x1e, 0xff, 0x4d, + 0x40, 0x8a, 0x66, 0x83, 0x2c, 0xb6, 0xf9, 0xd6, 0x8a, 0x80, 0x2b, 0xb1, 0x4d, 0x82, 0x0f, 0xb8, + 0xee, 0xd8, 0x23, 0xba, 0xee, 0x67, 0x09, 0x98, 0x50, 0xce, 0xc3, 0x1f, 0x5e, 0x48, 0x2b, 0x4f, + 0xc1, 0x84, 0x92, 0x66, 0x96, 0x3f, 0x67, 0x7e, 0xa6, 0x9e, 0x7e, 0x3f, 0xbc, 0x75, 0x99, 0x84, + 0x71, 0x39, 0x5f, 0x2d, 0x57, 0x61, 0x2a, 0x92, 0x5e, 0xca, 0x13, 0xd0, 0x46, 0x99, 0x40, 0x79, + 0x0e, 0x66, 0xe2, 0xb2, 0xa2, 0xf2, 0x55, 0x98, 0x89, 0xcb, 0x57, 0x1e, 0x5d, 0xc1, 0x9b, 0xfc, + 0x7d, 0x08, 0xcb, 0x2c, 0x1e, 0x9d, 0xff, 0xbf, 0x52, 0xa2, 0x29, 0x12, 0xfe, 0xa2, 0xe6, 0x7d, + 0x28, 0x74, 0xc5, 0x47, 0xfd, 0xa1, 0xb5, 0x3b, 0x2d, 0x84, 0x02, 0xfa, 0xb5, 0x48, 0xe9, 0x3a, + 0xa9, 0x62, 0x54, 0xd9, 0xbc, 0x9a, 0x4e, 0x8c, 0x28, 0xbb, 0x16, 0x29, 0xab, 0x27, 0x55, 0x0c, + 0xfa, 0x7b, 0x38, 0x29, 0x5e, 0xaa, 0xee, 0x61, 0x31, 0xf0, 0xe4, 0x50, 0xe1, 0xec, 0x07, 0x40, + 0x01, 0x43, 0x74, 0xe4, 0x53, 0x11, 0x54, 0x44, 0x3c, 0x1f, 0x7b, 0x6a, 0x54, 0xf1, 0xd1, 0xc1, + 0x4f, 0x45, 0x50, 0x68, 0x03, 0x66, 0xa2, 0xab, 0x2e, 0x95, 0xdb, 0xa5, 0x7e, 0xaf, 0x74, 0x46, + 0x5d, 0x4b, 0xb5, 0xee, 0x3e, 0x39, 0x80, 0x54, 0x25, 0x4a, 0x05, 0x7c, 0x3a, 0x46, 0x62, 0x6d, + 0xb0, 0x92, 0x3f, 0x39, 0x80, 0x2c, 0x7f, 0xa1, 0xc1, 0x54, 0xe4, 0x77, 0x54, 0xe8, 0x0a, 0x64, + 0xe9, 0x0f, 0x9d, 0x1f, 0xec, 0x25, 0xd4, 0x0f, 0x29, 0x9d, 0xb2, 0x0a, 0x19, 0x0e, 0x42, 0x2f, + 0x43, 0x2e, 0xf8, 0xb9, 0x15, 0x7f, 0xfe, 0xc2, 0xf6, 0xac, 0x00, 0x2a, 0x7b, 0x56, 0x00, 0xcb, + 0xff, 0x94, 0x80, 0xd3, 0x43, 0x7f, 0x63, 0xf5, 0xc4, 0x1b, 0x36, 0x87, 0xea, 0x3b, 0x45, 0xba, + 0x2d, 0xa9, 0x11, 0xbb, 0x2d, 0x5f, 0x68, 0x30, 0x17, 0xff, 0x1b, 0xac, 0x23, 0x77, 0xe0, 0xd4, + 0x69, 0x24, 0x46, 0x7f, 0x65, 0x34, 0x2e, 0xff, 0x5c, 0xea, 0xc8, 0xc3, 0xb8, 0x08, 0x63, 0x5d, + 0xdb, 0x6e, 0xbb, 0xfc, 0x11, 0x20, 0x25, 0xa5, 0x00, 0x99, 0x94, 0x02, 0x0e, 0xd9, 0xf0, 0xfb, + 0xb3, 0x26, 0x62, 0x61, 0xf8, 0xab, 0xb0, 0x1f, 0x90, 0x0b, 0x3d, 0xfb, 0x02, 0x64, 0xc5, 0x13, + 0x27, 0x04, 0x90, 0x7e, 0x77, 0x6b, 0x75, 0x6b, 0xf5, 0x4a, 0xe1, 0x04, 0xca, 0x43, 0x66, 0x63, + 0xf5, 0xe6, 0x95, 0xeb, 0x37, 0xaf, 0x16, 0x34, 0xf2, 0x51, 0xdb, 0xba, 0x79, 0x93, 0x7c, 0x24, + 0x9e, 0xbd, 0x21, 0xbf, 0x24, 0xe7, 0xd5, 0xc5, 0x38, 0x64, 0x57, 0xba, 0x5d, 0x7a, 0xcc, 0x31, + 0xde, 0xd5, 0x3d, 0x93, 0x9c, 0x4d, 0x05, 0x0d, 0x65, 0x20, 0x79, 0xeb, 0xd6, 0x7a, 0x21, 0x81, + 0x66, 0xa0, 0x70, 0x05, 0xeb, 0x46, 0xdb, 0xb4, 0xb0, 0x38, 0x5b, 0x0b, 0xc9, 0xea, 0xdd, 0x9f, + 0xdd, 0x5f, 0xd0, 0xbe, 0xbe, 0xbf, 0xa0, 0xfd, 0xe6, 0xfe, 0x82, 0x76, 0xef, 0x9b, 0x85, 0x13, + 0x5f, 0x7f, 0xb3, 0x70, 0xe2, 0x57, 0xdf, 0x2c, 0x9c, 0x78, 0xff, 0x05, 0xe9, 0x6f, 0x50, 0xb0, + 0xf5, 0xeb, 0x3a, 0x36, 0x39, 0xf2, 0xf8, 0xd7, 0x52, 0xf4, 0xaf, 0x6e, 0xfc, 0x67, 0xe2, 0xec, + 0x0a, 0xfd, 0xdc, 0x60, 0x74, 0x95, 0xeb, 0x76, 0x85, 0x01, 0xe8, 0x1f, 0x4e, 0x70, 0x1b, 0x69, + 0xfa, 0x07, 0x12, 0x5e, 0xfa, 0x4b, 0x00, 0x00, 0x00, 0xff, 0xff, 0x32, 0xfd, 0xd0, 0x85, 0xb0, + 0x43, 0x00, 0x00, } func (m *EventSequence) Marshal() (dAtA []byte, err error) { @@ -4853,16 +4853,18 @@ func (m *ResourceUtilisation) MarshalToSizedBuffer(dAtA []byte) (int, error) { for k := range m.TotalCumulativeUsage { v := m.TotalCumulativeUsage[k] baseI := i - { - size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintEvents(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) i = encodeVarintEvents(dAtA, i, uint64(len(k))) @@ -4877,16 +4879,18 @@ func (m *ResourceUtilisation) MarshalToSizedBuffer(dAtA []byte) (int, error) { for k := range m.MaxResourcesForPeriod { v := m.MaxResourcesForPeriod[k] baseI := i - { - size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintEvents(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) i = encodeVarintEvents(dAtA, i, uint64(len(k))) @@ -8116,8 +8120,12 @@ func (m *ResourceUtilisation) Size() (n int) { for k, v := range m.MaxResourcesForPeriod { _ = k _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovEvents(uint64(len(k))) + 1 + l + sovEvents(uint64(l)) + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovEvents(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovEvents(uint64(len(k))) + l n += mapEntrySize + 1 + sovEvents(uint64(mapEntrySize)) } } @@ -8125,8 +8133,12 @@ func (m *ResourceUtilisation) Size() (n int) { for k, v := range m.TotalCumulativeUsage { _ = k _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovEvents(uint64(len(k))) + 1 + l + sovEvents(uint64(l)) + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovEvents(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovEvents(uint64(len(k))) + l n += mapEntrySize + 1 + sovEvents(uint64(mapEntrySize)) } } @@ -10660,10 +10672,10 @@ func (m *ResourceUtilisation) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.MaxResourcesForPeriod == nil { - m.MaxResourcesForPeriod = make(map[string]resource.Quantity) + m.MaxResourcesForPeriod = make(map[string]*resource.Quantity) } var mapkey string - mapvalue := &resource.Quantity{} + var mapvalue *resource.Quantity for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -10757,7 +10769,7 @@ func (m *ResourceUtilisation) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.MaxResourcesForPeriod[mapkey] = *mapvalue + m.MaxResourcesForPeriod[mapkey] = mapvalue iNdEx = postIndex case 5: if wireType != 2 { @@ -10789,10 +10801,10 @@ func (m *ResourceUtilisation) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.TotalCumulativeUsage == nil { - m.TotalCumulativeUsage = make(map[string]resource.Quantity) + m.TotalCumulativeUsage = make(map[string]*resource.Quantity) } var mapkey string - mapvalue := &resource.Quantity{} + var mapvalue *resource.Quantity for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -10886,7 +10898,7 @@ func (m *ResourceUtilisation) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.TotalCumulativeUsage[mapkey] = *mapvalue + m.TotalCumulativeUsage[mapkey] = mapvalue iNdEx = postIndex case 6: if wireType != 2 { diff --git a/pkg/armadaevents/events.proto b/pkg/armadaevents/events.proto index a3741729757..be48b2b9e49 100644 --- a/pkg/armadaevents/events.proto +++ b/pkg/armadaevents/events.proto @@ -113,8 +113,8 @@ message ResourceUtilisation { Uuid run_id = 1; Uuid job_id = 2; KubernetesResourceInfo resource_info = 3; - map max_resources_for_period = 4 [(gogoproto.nullable) = false]; - map total_cumulative_usage = 5 [(gogoproto.nullable) = false]; + map max_resources_for_period = 4; + map total_cumulative_usage = 5; // This is a string representation of the job_id. Eventually we will retire the job_id field and just use strings string job_id_str = 6; string run_id_str = 7; diff --git a/pkg/client/domain/watch.go b/pkg/client/domain/watch.go index 73bef11a1b4..221a2b4f8b4 100644 --- a/pkg/client/domain/watch.go +++ b/pkg/client/domain/watch.go @@ -222,10 +222,7 @@ func updateJobInfo(info *JobInfo, event api.Event) { case *api.JobIngressInfoEvent: // NOOP case *api.JobUtilisationEvent: - r := typed.MaxResourcesForPeriod - if r != nil { - info.MaxUsedResources.Max(*r) - } + info.MaxUsedResources.Max(armadaresource.FromProtoMap(typed.MaxResourcesForPeriod)) } } diff --git a/pkg/client/domain/watch_test.go b/pkg/client/domain/watch_test.go index 83b2c3397f4..9ea380e6a12 100644 --- a/pkg/client/domain/watch_test.go +++ b/pkg/client/domain/watch_test.go @@ -59,7 +59,7 @@ func TestWatchContext_ProcessEvent_SubmittedEventAddsJobToJobInfo(t *testing.T) MaxUsedResources: armadaresource.ComputeResources{}, } - watchContext.ProcessEvent(&api.JobSubmittedEvent{JobId: "1", Job: job}) + watchContext.ProcessEvent(&api.JobSubmittedEvent{JobId: "1", Job: &job}) result := watchContext.GetJobInfo("1") assert.Equal(t, expected, result) @@ -216,7 +216,7 @@ func TestWatchContext_EventsOutOfOrder(t *testing.T) { ) assert.Equal(t, map[JobStatus]int{Succeeded: 1}, watchContext.stateSummary) - watchContext.ProcessEvent(&api.JobSubmittedEvent{JobId: "1", Job: job, Created: protoutil.ToTimestamp(now.Add(-2 * time.Second))}) + watchContext.ProcessEvent(&api.JobSubmittedEvent{JobId: "1", Job: &job, Created: protoutil.ToTimestamp(now.Add(-2 * time.Second))}) assert.Equal( t, &JobInfo{ @@ -234,6 +234,7 @@ func TestWatchContext_EventsOutOfOrder(t *testing.T) { func TestWatchContext_UtilisationEvent(t *testing.T) { watchContext := NewWatchContext() + oneCpu := resource.MustParse("1") watchContext.ProcessEvent(&api.JobUtilisationEvent{ JobId: "job1", JobSetId: "", @@ -241,8 +242,8 @@ func TestWatchContext_UtilisationEvent(t *testing.T) { Created: types.TimestampNow(), ClusterId: "", KubernetesId: "", - MaxResourcesForPeriod: armadaresource.ComputeResources{ - "cpu": resource.MustParse("1"), + MaxResourcesForPeriod: map[string]*resource.Quantity{ + "cpu": &oneCpu, }, }) assert.Equal(t, resource.MustParse("1"), watchContext.GetJobInfo("job1").MaxUsedResources["cpu"]) diff --git a/testsuite/performance/jobservice/fakearmada/event_server.go b/testsuite/performance/jobservice/fakearmada/event_server.go index a74585eaeee..f2f5676291c 100644 --- a/testsuite/performance/jobservice/fakearmada/event_server.go +++ b/testsuite/performance/jobservice/fakearmada/event_server.go @@ -53,7 +53,7 @@ var messageScript = []*scriptedMessage{ JobSetId: request.Id, Queue: request.Queue, Created: types.TimestampNow(), - Job: api.Job{ + Job: &api.Job{ Id: "fake_job_id", ClientId: "", Queue: request.Queue, From b6dbb80503c882783e03439cdb7f4c37c557db3c Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Tue, 25 Jun 2024 14:46:14 +0100 Subject: [PATCH 10/27] more fixes Signed-off-by: Chris Martin --- internal/common/proto/protoutil_test.go | 1 - pkg/api/api.swagger.json | 2 +- pkg/api/binoculars/api.swagger.json | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/internal/common/proto/protoutil_test.go b/internal/common/proto/protoutil_test.go index e60c2cc8e70..a60505ec583 100644 --- a/internal/common/proto/protoutil_test.go +++ b/internal/common/proto/protoutil_test.go @@ -68,7 +68,6 @@ func TestMustMarshallAndCompress(t *testing.T) { } func TestToTimestamp(t *testing.T) { - var tests = map[string]struct { ts *types.Timestamp t time.Time diff --git a/pkg/api/api.swagger.json b/pkg/api/api.swagger.json index 537603f1ed4..f5091b05734 100644 --- a/pkg/api/api.swagger.json +++ b/pkg/api/api.swagger.json @@ -5851,4 +5851,4 @@ "x-go-package": "k8s.io/api/core/v1" } } -} +} \ No newline at end of file diff --git a/pkg/api/binoculars/api.swagger.json b/pkg/api/binoculars/api.swagger.json index c7f88b50176..e1ee15d781b 100644 --- a/pkg/api/binoculars/api.swagger.json +++ b/pkg/api/binoculars/api.swagger.json @@ -234,4 +234,4 @@ "x-go-package": "k8s.io/apimachinery/pkg/apis/meta/v1" } } -} +} \ No newline at end of file From c35061ba47b15b15ef98ea89e5fee25d740f11c4 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Tue, 25 Jun 2024 14:52:22 +0100 Subject: [PATCH 11/27] lint Signed-off-by: Chris Martin --- internal/common/proto/protoutil_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/common/proto/protoutil_test.go b/internal/common/proto/protoutil_test.go index a60505ec583..cc6bca52841 100644 --- a/internal/common/proto/protoutil_test.go +++ b/internal/common/proto/protoutil_test.go @@ -2,11 +2,11 @@ package protoutil import ( "fmt" - "github.com/gogo/protobuf/types" "testing" "time" "github.com/gogo/protobuf/proto" + "github.com/gogo/protobuf/types" "github.com/google/uuid" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -68,7 +68,7 @@ func TestMustMarshallAndCompress(t *testing.T) { } func TestToTimestamp(t *testing.T) { - var tests = map[string]struct { + tests := map[string]struct { ts *types.Timestamp t time.Time }{ From b0d2ae50275e235395ad9a96555d55698c7e1b35 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Tue, 25 Jun 2024 15:06:20 +0100 Subject: [PATCH 12/27] fix tests Signed-off-by: Chris Martin --- internal/common/proto/protoutil.go | 2 +- pkg/client/domain/watch_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/common/proto/protoutil.go b/internal/common/proto/protoutil.go index f937e08709b..e5cbba39e47 100644 --- a/internal/common/proto/protoutil.go +++ b/internal/common/proto/protoutil.go @@ -78,7 +78,7 @@ func MustMarshallAndCompress(msg proto.Message, compressor compress.Compressor) func ToStdTime(ts *types.Timestamp) time.Time { if ts == nil { - return time.Unix(0, 0).UTC() + return time.Time{}.UTC() } return time.Unix(ts.Seconds, int64(ts.Nanos)).UTC() diff --git a/pkg/client/domain/watch_test.go b/pkg/client/domain/watch_test.go index 83b2c3397f4..346f5732d82 100644 --- a/pkg/client/domain/watch_test.go +++ b/pkg/client/domain/watch_test.go @@ -170,7 +170,7 @@ func TestWatchContext_GetNumberOfJobsInStates_IsCorrectlyUpdatedOnUpdateToExisti func TestWatchContext_EventsOutOfOrder(t *testing.T) { watchContext := NewWatchContext() - now := time.Now() + now := time.Now().UTC() job := api.Job{ Id: "1", JobSetId: "job-set-1", From 8222e55d55dbfa3eb88f1dd3c179ad4d663cb0b7 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Wed, 26 Jun 2024 08:03:08 +0100 Subject: [PATCH 13/27] fix proto gen Signed-off-by: Chris Martin --- pkg/api/api.swagger.go | 2 +- pkg/api/api.swagger.json | 2 +- pkg/api/binoculars/api.swagger.go | 2 +- pkg/api/binoculars/api.swagger.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/api/api.swagger.go b/pkg/api/api.swagger.go index abc6074e18c..b7db2275956 100644 --- a/pkg/api/api.swagger.go +++ b/pkg/api/api.swagger.go @@ -5478,7 +5478,7 @@ func SwaggerJsonTemplate() string { " \"x-go-package\": \"k8s.io/api/core/v1\"\n" + " },\n" + " \"v1Time\": {\n" + - " \"description\": \"Programs using times should typically store and pass them as values,\\nnot pointers. That is, time variables and struct fields should be of\\ntype time.Time, not *time.Time.\\n\\nA Time value can be used by multiple goroutines simultaneously except\\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\\nUnmarshalText are not concurrency-safe.\\n\\nTime instants can be compared using the Before, After, and Equal methods.\\nThe Sub method subtracts two instants, producing a Duration.\\nThe Add method adds a Time and a Duration, producing a Time.\\n\\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\\nAs this time is unlikely to come up in practice, the IsZero method gives\\na simple way of detecting a time that has not been initialized explicitly.\\n\\nEach time has an associated Location. The methods Local, UTC, and In return a\\nTime with a specific Location. Changing the Location of a Time value with\\nthese methods does not change the actual instant it represents, only the time\\nzone in which to interpret it.\\n\\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\\nthe location name. They therefore lose information about Daylight Saving Time.\\n\\nIn addition to the required “wall clock” reading, a Time may contain an optional\\nreading of the current process's monotonic clock, to provide additional precision\\nfor comparison or subtraction.\\nSee the “Monotonic Clocks” section in the package documentation for details.\\n\\nNote that the Go == operator compares not just the time instant but also the\\nLocation and the monotonic clock reading. Therefore, Time values should not\\nbe used as map or database keys without first guaranteeing that the\\nidentical Location has been set for all values, which can be achieved\\nthrough use of the UTC or Local method, and that the monotonic clock reading\\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\\nto t == u, since t.Equal uses the most accurate comparison available and\\ncorrectly handles the case when only one of its arguments has a monotonic\\nclock reading.\",\n" + + " \"description\": \"Programs using times should typically store and pass them as values,\\nnot pointers. That is, time variables and struct fields should be of\\ntype time.Time, not *time.Time.\\n\\nA Time value can be used by multiple goroutines simultaneously except\\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\\nUnmarshalText are not concurrency-safe.\\n\\nTime instants can be compared using the Before, After, and Equal methods.\\nThe Sub method subtracts two instants, producing a Duration.\\nThe Add method adds a Time and a Duration, producing a Time.\\n\\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\\nAs this time is unlikely to come up in practice, the IsZero method gives\\na simple way of detecting a time that has not been initialized explicitly.\\n\\nEach Time has associated with it a Location, consulted when computing the\\npresentation form of the time, such as in the Format, Hour, and Year methods.\\nThe methods Local, UTC, and In return a Time with a specific location.\\nChanging the location in this way changes only the presentation; it does not\\nchange the instant in time being denoted and therefore does not affect the\\ncomputations described in earlier paragraphs.\\n\\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\\nthe location name. They therefore lose information about Daylight Saving Time.\\n\\nIn addition to the required “wall clock” reading, a Time may contain an optional\\nreading of the current process's monotonic clock, to provide additional precision\\nfor comparison or subtraction.\\nSee the “Monotonic Clocks” section in the package documentation for details.\\n\\nNote that the Go == operator compares not just the time instant but also the\\nLocation and the monotonic clock reading. Therefore, Time values should not\\nbe used as map or database keys without first guaranteeing that the\\nidentical Location has been set for all values, which can be achieved\\nthrough use of the UTC or Local method, and that the monotonic clock reading\\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\\nto t == u, since t.Equal uses the most accurate comparison available and\\ncorrectly handles the case when only one of its arguments has a monotonic\\nclock reading.\",\n" + " \"type\": \"string\",\n" + " \"format\": \"date-time\",\n" + " \"title\": \"A Time represents an instant in time with nanosecond precision.\",\n" + diff --git a/pkg/api/api.swagger.json b/pkg/api/api.swagger.json index 5993fc4ce08..f5091b05734 100644 --- a/pkg/api/api.swagger.json +++ b/pkg/api/api.swagger.json @@ -5467,7 +5467,7 @@ "x-go-package": "k8s.io/api/core/v1" }, "v1Time": { - "description": "Programs using times should typically store and pass them as values,\nnot pointers. That is, time variables and struct fields should be of\ntype time.Time, not *time.Time.\n\nA Time value can be used by multiple goroutines simultaneously except\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\nUnmarshalText are not concurrency-safe.\n\nTime instants can be compared using the Before, After, and Equal methods.\nThe Sub method subtracts two instants, producing a Duration.\nThe Add method adds a Time and a Duration, producing a Time.\n\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\nAs this time is unlikely to come up in practice, the IsZero method gives\na simple way of detecting a time that has not been initialized explicitly.\n\nEach time has an associated Location. The methods Local, UTC, and In return a\nTime with a specific Location. Changing the Location of a Time value with\nthese methods does not change the actual instant it represents, only the time\nzone in which to interpret it.\n\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\nthe location name. They therefore lose information about Daylight Saving Time.\n\nIn addition to the required “wall clock” reading, a Time may contain an optional\nreading of the current process's monotonic clock, to provide additional precision\nfor comparison or subtraction.\nSee the “Monotonic Clocks” section in the package documentation for details.\n\nNote that the Go == operator compares not just the time instant but also the\nLocation and the monotonic clock reading. Therefore, Time values should not\nbe used as map or database keys without first guaranteeing that the\nidentical Location has been set for all values, which can be achieved\nthrough use of the UTC or Local method, and that the monotonic clock reading\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\nto t == u, since t.Equal uses the most accurate comparison available and\ncorrectly handles the case when only one of its arguments has a monotonic\nclock reading.", + "description": "Programs using times should typically store and pass them as values,\nnot pointers. That is, time variables and struct fields should be of\ntype time.Time, not *time.Time.\n\nA Time value can be used by multiple goroutines simultaneously except\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\nUnmarshalText are not concurrency-safe.\n\nTime instants can be compared using the Before, After, and Equal methods.\nThe Sub method subtracts two instants, producing a Duration.\nThe Add method adds a Time and a Duration, producing a Time.\n\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\nAs this time is unlikely to come up in practice, the IsZero method gives\na simple way of detecting a time that has not been initialized explicitly.\n\nEach Time has associated with it a Location, consulted when computing the\npresentation form of the time, such as in the Format, Hour, and Year methods.\nThe methods Local, UTC, and In return a Time with a specific location.\nChanging the location in this way changes only the presentation; it does not\nchange the instant in time being denoted and therefore does not affect the\ncomputations described in earlier paragraphs.\n\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\nthe location name. They therefore lose information about Daylight Saving Time.\n\nIn addition to the required “wall clock” reading, a Time may contain an optional\nreading of the current process's monotonic clock, to provide additional precision\nfor comparison or subtraction.\nSee the “Monotonic Clocks” section in the package documentation for details.\n\nNote that the Go == operator compares not just the time instant but also the\nLocation and the monotonic clock reading. Therefore, Time values should not\nbe used as map or database keys without first guaranteeing that the\nidentical Location has been set for all values, which can be achieved\nthrough use of the UTC or Local method, and that the monotonic clock reading\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\nto t == u, since t.Equal uses the most accurate comparison available and\ncorrectly handles the case when only one of its arguments has a monotonic\nclock reading.", "type": "string", "format": "date-time", "title": "A Time represents an instant in time with nanosecond precision.", diff --git a/pkg/api/binoculars/api.swagger.go b/pkg/api/binoculars/api.swagger.go index 4a9905f6feb..206e611b3c9 100644 --- a/pkg/api/binoculars/api.swagger.go +++ b/pkg/api/binoculars/api.swagger.go @@ -238,7 +238,7 @@ func SwaggerJsonTemplate() string { " \"x-go-package\": \"k8s.io/api/core/v1\"\n" + " },\n" + " \"v1Time\": {\n" + - " \"description\": \"Programs using times should typically store and pass them as values,\\nnot pointers. That is, time variables and struct fields should be of\\ntype time.Time, not *time.Time.\\n\\nA Time value can be used by multiple goroutines simultaneously except\\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\\nUnmarshalText are not concurrency-safe.\\n\\nTime instants can be compared using the Before, After, and Equal methods.\\nThe Sub method subtracts two instants, producing a Duration.\\nThe Add method adds a Time and a Duration, producing a Time.\\n\\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\\nAs this time is unlikely to come up in practice, the IsZero method gives\\na simple way of detecting a time that has not been initialized explicitly.\\n\\nEach time has an associated Location. The methods Local, UTC, and In return a\\nTime with a specific Location. Changing the Location of a Time value with\\nthese methods does not change the actual instant it represents, only the time\\nzone in which to interpret it.\\n\\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\\nthe location name. They therefore lose information about Daylight Saving Time.\\n\\nIn addition to the required “wall clock” reading, a Time may contain an optional\\nreading of the current process's monotonic clock, to provide additional precision\\nfor comparison or subtraction.\\nSee the “Monotonic Clocks” section in the package documentation for details.\\n\\nNote that the Go == operator compares not just the time instant but also the\\nLocation and the monotonic clock reading. Therefore, Time values should not\\nbe used as map or database keys without first guaranteeing that the\\nidentical Location has been set for all values, which can be achieved\\nthrough use of the UTC or Local method, and that the monotonic clock reading\\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\\nto t == u, since t.Equal uses the most accurate comparison available and\\ncorrectly handles the case when only one of its arguments has a monotonic\\nclock reading.\",\n" + + " \"description\": \"Programs using times should typically store and pass them as values,\\nnot pointers. That is, time variables and struct fields should be of\\ntype time.Time, not *time.Time.\\n\\nA Time value can be used by multiple goroutines simultaneously except\\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\\nUnmarshalText are not concurrency-safe.\\n\\nTime instants can be compared using the Before, After, and Equal methods.\\nThe Sub method subtracts two instants, producing a Duration.\\nThe Add method adds a Time and a Duration, producing a Time.\\n\\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\\nAs this time is unlikely to come up in practice, the IsZero method gives\\na simple way of detecting a time that has not been initialized explicitly.\\n\\nEach Time has associated with it a Location, consulted when computing the\\npresentation form of the time, such as in the Format, Hour, and Year methods.\\nThe methods Local, UTC, and In return a Time with a specific location.\\nChanging the location in this way changes only the presentation; it does not\\nchange the instant in time being denoted and therefore does not affect the\\ncomputations described in earlier paragraphs.\\n\\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\\nthe location name. They therefore lose information about Daylight Saving Time.\\n\\nIn addition to the required “wall clock” reading, a Time may contain an optional\\nreading of the current process's monotonic clock, to provide additional precision\\nfor comparison or subtraction.\\nSee the “Monotonic Clocks” section in the package documentation for details.\\n\\nNote that the Go == operator compares not just the time instant but also the\\nLocation and the monotonic clock reading. Therefore, Time values should not\\nbe used as map or database keys without first guaranteeing that the\\nidentical Location has been set for all values, which can be achieved\\nthrough use of the UTC or Local method, and that the monotonic clock reading\\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\\nto t == u, since t.Equal uses the most accurate comparison available and\\ncorrectly handles the case when only one of its arguments has a monotonic\\nclock reading.\",\n" + " \"type\": \"string\",\n" + " \"format\": \"date-time\",\n" + " \"title\": \"A Time represents an instant in time with nanosecond precision.\",\n" + diff --git a/pkg/api/binoculars/api.swagger.json b/pkg/api/binoculars/api.swagger.json index adf9a3af046..e1ee15d781b 100644 --- a/pkg/api/binoculars/api.swagger.json +++ b/pkg/api/binoculars/api.swagger.json @@ -227,7 +227,7 @@ "x-go-package": "k8s.io/api/core/v1" }, "v1Time": { - "description": "Programs using times should typically store and pass them as values,\nnot pointers. That is, time variables and struct fields should be of\ntype time.Time, not *time.Time.\n\nA Time value can be used by multiple goroutines simultaneously except\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\nUnmarshalText are not concurrency-safe.\n\nTime instants can be compared using the Before, After, and Equal methods.\nThe Sub method subtracts two instants, producing a Duration.\nThe Add method adds a Time and a Duration, producing a Time.\n\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\nAs this time is unlikely to come up in practice, the IsZero method gives\na simple way of detecting a time that has not been initialized explicitly.\n\nEach time has an associated Location. The methods Local, UTC, and In return a\nTime with a specific Location. Changing the Location of a Time value with\nthese methods does not change the actual instant it represents, only the time\nzone in which to interpret it.\n\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\nthe location name. They therefore lose information about Daylight Saving Time.\n\nIn addition to the required “wall clock” reading, a Time may contain an optional\nreading of the current process's monotonic clock, to provide additional precision\nfor comparison or subtraction.\nSee the “Monotonic Clocks” section in the package documentation for details.\n\nNote that the Go == operator compares not just the time instant but also the\nLocation and the monotonic clock reading. Therefore, Time values should not\nbe used as map or database keys without first guaranteeing that the\nidentical Location has been set for all values, which can be achieved\nthrough use of the UTC or Local method, and that the monotonic clock reading\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\nto t == u, since t.Equal uses the most accurate comparison available and\ncorrectly handles the case when only one of its arguments has a monotonic\nclock reading.", + "description": "Programs using times should typically store and pass them as values,\nnot pointers. That is, time variables and struct fields should be of\ntype time.Time, not *time.Time.\n\nA Time value can be used by multiple goroutines simultaneously except\nthat the methods GobDecode, UnmarshalBinary, UnmarshalJSON and\nUnmarshalText are not concurrency-safe.\n\nTime instants can be compared using the Before, After, and Equal methods.\nThe Sub method subtracts two instants, producing a Duration.\nThe Add method adds a Time and a Duration, producing a Time.\n\nThe zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC.\nAs this time is unlikely to come up in practice, the IsZero method gives\na simple way of detecting a time that has not been initialized explicitly.\n\nEach Time has associated with it a Location, consulted when computing the\npresentation form of the time, such as in the Format, Hour, and Year methods.\nThe methods Local, UTC, and In return a Time with a specific location.\nChanging the location in this way changes only the presentation; it does not\nchange the instant in time being denoted and therefore does not affect the\ncomputations described in earlier paragraphs.\n\nRepresentations of a Time value saved by the GobEncode, MarshalBinary,\nMarshalJSON, and MarshalText methods store the Time.Location's offset, but not\nthe location name. They therefore lose information about Daylight Saving Time.\n\nIn addition to the required “wall clock” reading, a Time may contain an optional\nreading of the current process's monotonic clock, to provide additional precision\nfor comparison or subtraction.\nSee the “Monotonic Clocks” section in the package documentation for details.\n\nNote that the Go == operator compares not just the time instant but also the\nLocation and the monotonic clock reading. Therefore, Time values should not\nbe used as map or database keys without first guaranteeing that the\nidentical Location has been set for all values, which can be achieved\nthrough use of the UTC or Local method, and that the monotonic clock reading\nhas been stripped by setting t = t.Round(0). In general, prefer t.Equal(u)\nto t == u, since t.Equal uses the most accurate comparison available and\ncorrectly handles the case when only one of its arguments has a monotonic\nclock reading.", "type": "string", "format": "date-time", "title": "A Time represents an instant in time with nanosecond precision.", From b92f6d4dcc7650dbe2fd2498b1220f83fc9b933a Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Wed, 26 Jun 2024 08:16:13 +0100 Subject: [PATCH 14/27] fix test Signed-off-by: Chris Martin --- .../armada/queue/queue_repository_test.go | 15 +++++++++------ pkg/client/queue/queue.go | 19 +++++++++++-------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/internal/armada/queue/queue_repository_test.go b/internal/armada/queue/queue_repository_test.go index 0ab964a2abe..e968c057832 100644 --- a/internal/armada/queue/queue_repository_test.go +++ b/internal/armada/queue/queue_repository_test.go @@ -1,6 +1,7 @@ package queue import ( + "github.com/armadaproject/armada/pkg/api" "testing" "time" @@ -15,14 +16,16 @@ import ( var ( queueA = queue.Queue{ - Name: "queueA", - PriorityFactor: 1000, - Permissions: []queue.Permissions{}, + Name: "queueA", + PriorityFactor: 1000, + Permissions: []queue.Permissions{}, + ResourceLimitsByPriorityClassName: map[string]api.PriorityClassResourceLimits{}, } queueB = queue.Queue{ - Name: "queueB", - PriorityFactor: 2000, - Permissions: []queue.Permissions{}, + Name: "queueB", + PriorityFactor: 2000, + Permissions: []queue.Permissions{}, + ResourceLimitsByPriorityClassName: map[string]api.PriorityClassResourceLimits{}, } twoQueues = []queue.Queue{queueA, queueB} ) diff --git a/pkg/client/queue/queue.go b/pkg/client/queue/queue.go index 4f2debc3470..e7bace8740c 100644 --- a/pkg/client/queue/queue.go +++ b/pkg/client/queue/queue.go @@ -39,15 +39,18 @@ func NewQueue(in *api.Queue) (Queue, error) { permissions = append(permissions, perm) } + resourceLimitsByPriorityClassName := make(map[string]api.PriorityClassResourceLimits, len(in.ResourceLimitsByPriorityClassName)) + for k, v := range in.ResourceLimitsByPriorityClassName { + if v != nil { + resourceLimitsByPriorityClassName[k] = *v + } + } + return Queue{ - Name: in.Name, - PriorityFactor: priorityFactor, - Permissions: permissions, - ResourceLimitsByPriorityClassName: armadamaps.MapValues( - in.ResourceLimitsByPriorityClassName, - func(p *api.PriorityClassResourceLimits) api.PriorityClassResourceLimits { - return *p - }), + Name: in.Name, + PriorityFactor: priorityFactor, + Permissions: permissions, + ResourceLimitsByPriorityClassName: resourceLimitsByPriorityClassName, }, nil } From 5e0b61ccf453a6a19028d1ab16e4ba67edaea8da Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Sat, 29 Jun 2024 22:58:43 +0100 Subject: [PATCH 15/27] comment out test Signed-off-by: Chris Martin --- pkg/client/queue/queue_test.go | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/pkg/client/queue/queue_test.go b/pkg/client/queue/queue_test.go index 9808ad45887..4cca8dd04d6 100644 --- a/pkg/client/queue/queue_test.go +++ b/pkg/client/queue/queue_test.go @@ -1,7 +1,6 @@ package queue import ( - "encoding/json" "reflect" "testing" "testing/quick" @@ -24,25 +23,26 @@ func TestQueue(t *testing.T) { } func TestQueueMarshalUnmarshal(t *testing.T) { - testCase := func(queue1 Queue) bool { - var queue2 Queue - data, err := json.Marshal(queue1) - if err != nil { - t.Error(err) - return false - } + /* + testCase := func(queue1 Queue) bool { + var queue2 Queue + data, err := json.Marshal(queue1) + if err != nil { + t.Error(err) + return false + } - if err := json.Unmarshal(data, &queue2); err != nil { - t.Error(err) - return false - } + if err := json.Unmarshal(data, &queue2); err != nil { + t.Error(err) + return false + } - return reflect.DeepEqual(queue1, queue2) - } + return reflect.DeepEqual(queue1, queue2) + } - if err := quick.Check(testCase, nil); err != nil { - t.Fatal(err) - } + if err := quick.Check(testCase, nil); err != nil { + t.Fatal(err) + }*/ } func TestQueueHasPermissionTrue(t *testing.T) { From d8448bb6aeed6a71b9d7b02ebc4898c4e65c7cf8 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Sun, 30 Jun 2024 09:40:52 +0100 Subject: [PATCH 16/27] fix Signed-off-by: Chris Martin --- internal/armada/queue/queue_repository_test.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/internal/armada/queue/queue_repository_test.go b/internal/armada/queue/queue_repository_test.go index e968c057832..abf7415c00b 100644 --- a/internal/armada/queue/queue_repository_test.go +++ b/internal/armada/queue/queue_repository_test.go @@ -1,7 +1,6 @@ package queue import ( - "github.com/armadaproject/armada/pkg/api" "testing" "time" @@ -11,6 +10,7 @@ import ( "github.com/armadaproject/armada/internal/common/armadacontext" "github.com/armadaproject/armada/internal/common/database/lookout" + "github.com/armadaproject/armada/pkg/api" "github.com/armadaproject/armada/pkg/client/queue" ) @@ -114,17 +114,19 @@ func TestGetAndUpdateQueue(t *testing.T) { "Queue Doesn't Exist": { intialQueues: twoQueues, queueToUpdate: queue.Queue{ - Name: "queueC", - PriorityFactor: 1, - Permissions: []queue.Permissions{}, + Name: "queueC", + Permissions: []queue.Permissions{}, + PriorityFactor: 1, + ResourceLimitsByPriorityClassName: map[string]api.PriorityClassResourceLimits{}, }, }, "Queue Does Exist": { intialQueues: twoQueues, queueToUpdate: queue.Queue{ - Name: "queueA", - PriorityFactor: queueA.PriorityFactor + 100, - Permissions: []queue.Permissions{}, + Name: "queueA", + PriorityFactor: queueA.PriorityFactor + 100, + Permissions: []queue.Permissions{}, + ResourceLimitsByPriorityClassName: map[string]api.PriorityClassResourceLimits{}, }, }, } From 65773c5cf6bf12fd8b8c2840eff1eda85ad587e5 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Sun, 30 Jun 2024 10:19:22 +0100 Subject: [PATCH 17/27] fix Signed-off-by: Chris Martin --- internal/common/resource/resource.go | 3 ++- internal/common/resource/resource_test.go | 16 ++++++++++++++++ internal/executor/domain/resources.go | 5 ----- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/internal/common/resource/resource.go b/internal/common/resource/resource.go index 71fed6941c8..00265f544eb 100644 --- a/internal/common/resource/resource.go +++ b/internal/common/resource/resource.go @@ -35,7 +35,8 @@ func FromProtoMap(m map[string]*resource.Quantity) ComputeResources { func (a ComputeResources) ToProtoMap() map[string]*resource.Quantity { resources := make(map[string]*resource.Quantity, len(a)) for k, v := range a { - resources[k] = &v + r := v.DeepCopy() + resources[k] = &r } return resources } diff --git a/internal/common/resource/resource_test.go b/internal/common/resource/resource_test.go index f010d47fcc8..7f6bbe05455 100644 --- a/internal/common/resource/resource_test.go +++ b/internal/common/resource/resource_test.go @@ -165,6 +165,22 @@ func TestTotalResourceRequest_ShouldCombineMaxInitContainerResourcesWithSummedCo assert.Equal(t, result, FromResourceList(expectedResult)) } +func TestToProtoMap(t *testing.T) { + oneCpu := resource.MustParse("1") + oneGi := resource.MustParse("1Gi") + + input := ComputeResources{ + "cpu": resource.MustParse("1"), + "memory": resource.MustParse("1Gi"), + } + expected := map[string]*resource.Quantity{ + "cpu": &oneCpu, + "memory": &oneGi, + } + actual := input.ToProtoMap() + assert.Equal(t, actual, expected) +} + func makeDefaultNodeResource() v1.ResourceList { cpuResource := resource.NewQuantity(100, resource.DecimalSI) memoryResource := resource.NewQuantity(50*1024*1024*1024, resource.DecimalSI) diff --git a/internal/executor/domain/resources.go b/internal/executor/domain/resources.go index 149ab9394f2..4d00d3cd366 100644 --- a/internal/executor/domain/resources.go +++ b/internal/executor/domain/resources.go @@ -2,11 +2,6 @@ package domain import armadaresource "github.com/armadaproject/armada/internal/common/resource" -const ( - AcceleratorDutyCycle = "armadaproject.io/accelerator-duty-cycle" - AcceleratorMemory = "armadaproject.io/accelerator-memory" -) - type UtilisationData struct { CurrentUsage armadaresource.ComputeResources CumulativeUsage armadaresource.ComputeResources From 63f96386159622296716e56db729949f3787f72a Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Mon, 1 Jul 2024 08:25:55 +0100 Subject: [PATCH 18/27] fix Signed-off-by: Chris Martin --- pkg/client/queue/queue_test.go | 58 ++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 16 deletions(-) diff --git a/pkg/client/queue/queue_test.go b/pkg/client/queue/queue_test.go index 4cca8dd04d6..b73bde76fa9 100644 --- a/pkg/client/queue/queue_test.go +++ b/pkg/client/queue/queue_test.go @@ -1,6 +1,8 @@ package queue import ( + "encoding/json" + "github.com/armadaproject/armada/pkg/api" "reflect" "testing" "testing/quick" @@ -23,26 +25,50 @@ func TestQueue(t *testing.T) { } func TestQueueMarshalUnmarshal(t *testing.T) { - /* - testCase := func(queue1 Queue) bool { - var queue2 Queue - data, err := json.Marshal(queue1) - if err != nil { - t.Error(err) - return false - } - if err := json.Unmarshal(data, &queue2); err != nil { - t.Error(err) - return false - } + testCase := func(queue1 Queue) bool { + var queue2 Queue + data, err := json.Marshal(queue1) + if err != nil { + t.Error(err) + return false + } - return reflect.DeepEqual(queue1, queue2) + if err := json.Unmarshal(data, &queue2); err != nil { + t.Error(err) + return false } - if err := quick.Check(testCase, nil); err != nil { - t.Fatal(err) - }*/ + // json.Unmarshal will unmarshall empty maps to nil + // TODO: refactor these tests/code so this nonsense is not necessary + newResourceLimits := make(map[string]api.PriorityClassResourceLimits, len(queue2.ResourceLimitsByPriorityClassName)) + for k1, v := range queue2.ResourceLimitsByPriorityClassName { + if v.MaximumResourceFractionByPool == nil { + v.MaximumResourceFractionByPool = map[string]*api.PriorityClassPoolResourceLimits{} + } + for k, v2 := range v.MaximumResourceFractionByPool { + if v2 != nil && v2.MaximumResourceFraction == nil { + v.MaximumResourceFractionByPool[k] = &api.PriorityClassPoolResourceLimits{ + MaximumResourceFraction: map[string]float64{}, + } + } + if v2 != nil && v2.MaximumResourceFraction == nil { + v2.MaximumResourceFraction = map[string]float64{} + } + } + if v.MaximumResourceFraction == nil { + v.MaximumResourceFraction = map[string]float64{} + } + newResourceLimits[k1] = v + } + queue2.ResourceLimitsByPriorityClassName = newResourceLimits + + return reflect.DeepEqual(queue1, queue2) + } + + if err := quick.Check(testCase, nil); err != nil { + t.Fatal(err) + } } func TestQueueHasPermissionTrue(t *testing.T) { From 0962c1c267bf5ad468fc182ba75ef9d96ca5654b Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Mon, 1 Jul 2024 08:28:57 +0100 Subject: [PATCH 19/27] another test Signed-off-by: Chris Martin --- internal/common/resource/resource_test.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/internal/common/resource/resource_test.go b/internal/common/resource/resource_test.go index 7f6bbe05455..80752ca18aa 100644 --- a/internal/common/resource/resource_test.go +++ b/internal/common/resource/resource_test.go @@ -181,6 +181,23 @@ func TestToProtoMap(t *testing.T) { assert.Equal(t, actual, expected) } +func TestFromProtoMap(t *testing.T) { + oneCpu := resource.MustParse("1") + oneGi := resource.MustParse("1Gi") + + input := map[string]*resource.Quantity{ + "cpu": &oneCpu, + "memory": &oneGi, + } + expected := ComputeResources{ + "cpu": resource.MustParse("1"), + "memory": resource.MustParse("1Gi"), + } + + actual := FromProtoMap(input) + assert.Equal(t, actual, expected) +} + func makeDefaultNodeResource() v1.ResourceList { cpuResource := resource.NewQuantity(100, resource.DecimalSI) memoryResource := resource.NewQuantity(50*1024*1024*1024, resource.DecimalSI) From 06880c83f8c35eca90e92c04c0f8fa060894bae4 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Mon, 1 Jul 2024 08:30:11 +0100 Subject: [PATCH 20/27] another test Signed-off-by: Chris Martin --- pkg/client/queue/queue_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/client/queue/queue_test.go b/pkg/client/queue/queue_test.go index b73bde76fa9..bcad7b610fa 100644 --- a/pkg/client/queue/queue_test.go +++ b/pkg/client/queue/queue_test.go @@ -2,10 +2,11 @@ package queue import ( "encoding/json" - "github.com/armadaproject/armada/pkg/api" "reflect" "testing" "testing/quick" + + "github.com/armadaproject/armada/pkg/api" ) func TestQueue(t *testing.T) { @@ -25,7 +26,6 @@ func TestQueue(t *testing.T) { } func TestQueueMarshalUnmarshal(t *testing.T) { - testCase := func(queue1 Queue) bool { var queue2 Queue data, err := json.Marshal(queue1) From ec8cbfbc0c61e62d1096305464b559c863f54407 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Mon, 1 Jul 2024 18:02:00 +0100 Subject: [PATCH 21/27] initial commit Signed-off-by: Chris Martin --- internal/executor/service/job_requester.go | 2 +- .../executor/service/job_requester_test.go | 4 +- internal/executor/service/lease_requester.go | 6 +- .../executor/service/lease_requester_test.go | 6 +- internal/executor/util/uuid.go | 6 +- internal/executor/util/uuid_test.go | 8 +- .../utilisation/cluster_utilisation.go | 26 +- internal/scheduler/api.go | 8 +- internal/scheduler/api_test.go | 2 +- pkg/executorapi/executorapi.pb.go | 861 +++++++----------- pkg/executorapi/executorapi.proto | 26 +- pkg/executorapi/util.go | 54 +- 12 files changed, 396 insertions(+), 613 deletions(-) diff --git a/internal/executor/service/job_requester.go b/internal/executor/service/job_requester.go index 0e5a09be52b..7eb2167f978 100644 --- a/internal/executor/service/job_requester.go +++ b/internal/executor/service/job_requester.go @@ -103,7 +103,7 @@ func (r *JobRequester) createLeaseRequest() (*LeaseRequest, error) { } // Returns the RunIds of all managed pods that haven't been assigned to a node -func (r *JobRequester) getUnassignedRunIds(capacityReport *utilisation.ClusterAvailableCapacityReport) ([]armadaevents.Uuid, error) { +func (r *JobRequester) getUnassignedRunIds(capacityReport *utilisation.ClusterAvailableCapacityReport) ([]*armadaevents.Uuid, error) { allAssignedRunIds := []string{} allJobRunIds := []string{} diff --git a/internal/executor/service/job_requester_test.go b/internal/executor/service/job_requester_test.go index bcc2316f0d0..027598a365b 100644 --- a/internal/executor/service/job_requester_test.go +++ b/internal/executor/service/job_requester_test.go @@ -76,7 +76,7 @@ func TestRequestJobsRuns_ConstructsCorrectLeaseRequest(t *testing.T) { AvailableResource: *capacityReport.AvailableCapacity, Nodes: []*executorapi.NodeInfo{&capacityReport.Nodes[0]}, // Should add any ids in the state but not in the capacity report into unassigned job run ids - UnassignedJobRunIds: []armadaevents.Uuid{}, + UnassignedJobRunIds: []*armadaevents.Uuid{}, MaxJobsToLease: uint32(defaultMaxLeasedJobs), }, }, @@ -86,7 +86,7 @@ func TestRequestJobsRuns_ConstructsCorrectLeaseRequest(t *testing.T) { AvailableResource: *capacityReport.AvailableCapacity, Nodes: []*executorapi.NodeInfo{&capacityReport.Nodes[0]}, // Should add any ids in the state but not in the capacity report into unassigned job run ids - UnassignedJobRunIds: []armadaevents.Uuid{*armadaevents.ProtoUuidFromUuid(leasedRunId)}, + UnassignedJobRunIds: []*armadaevents.Uuid{armadaevents.ProtoUuidFromUuid(leasedRunId)}, MaxJobsToLease: 0, }, }, diff --git a/internal/executor/service/lease_requester.go b/internal/executor/service/lease_requester.go index a5dd67dffce..14ef77b1c45 100644 --- a/internal/executor/service/lease_requester.go +++ b/internal/executor/service/lease_requester.go @@ -20,7 +20,7 @@ import ( type LeaseRequest struct { AvailableResource armadaresource.ComputeResources Nodes []*executorapi.NodeInfo - UnassignedJobRunIds []armadaevents.Uuid + UnassignedJobRunIds []*armadaevents.Uuid MaxJobsToLease uint32 } @@ -60,8 +60,8 @@ func (requester *JobLeaseRequester) LeaseJobRuns(ctx *armadacontext.Context, req leaseRequest := &executorapi.LeaseRequest{ ExecutorId: requester.clusterIdentity.GetClusterId(), Pool: requester.clusterIdentity.GetClusterPool(), - MinimumJobSize: requester.minimumJobSize, - Resources: request.AvailableResource, + MinimumJobSize: requester.minimumJobSize.ToProtoMap(), + Resources: request.AvailableResource.ToProtoMap(), Nodes: request.Nodes, UnassignedJobRunIds: request.UnassignedJobRunIds, MaxJobsToLease: request.MaxJobsToLease, diff --git a/internal/executor/service/lease_requester_test.go b/internal/executor/service/lease_requester_test.go index fd625124e7b..d596e8bbc03 100644 --- a/internal/executor/service/lease_requester_test.go +++ b/internal/executor/service/lease_requester_test.go @@ -101,15 +101,15 @@ func TestLeaseJobRuns_Send(t *testing.T) { RunIdsByState: map[string]api.JobState{"id1": api.JobState_RUNNING}, }, }, - UnassignedJobRunIds: []armadaevents.Uuid{*id1}, + UnassignedJobRunIds: []*armadaevents.Uuid{id1}, MaxJobsToLease: uint32(5), } expectedRequest := &executorapi.LeaseRequest{ ExecutorId: defaultClusterIdentity.GetClusterId(), Pool: defaultClusterIdentity.GetClusterPool(), - Resources: leaseRequest.AvailableResource, - MinimumJobSize: defaultMinimumJobSize, + Resources: leaseRequest.AvailableResource.ToProtoMap(), + MinimumJobSize: defaultMinimumJobSize.ToProtoMap(), Nodes: leaseRequest.Nodes, UnassignedJobRunIds: leaseRequest.UnassignedJobRunIds, MaxJobsToLease: leaseRequest.MaxJobsToLease, diff --git a/internal/executor/util/uuid.go b/internal/executor/util/uuid.go index ac3eb48c16f..e2dd377588f 100644 --- a/internal/executor/util/uuid.go +++ b/internal/executor/util/uuid.go @@ -6,14 +6,14 @@ import ( "github.com/armadaproject/armada/pkg/armadaevents" ) -func StringUuidsToUuids(uuidStrings []string) ([]armadaevents.Uuid, error) { - result := make([]armadaevents.Uuid, 0, len(uuidStrings)) +func StringUuidsToUuids(uuidStrings []string) ([]*armadaevents.Uuid, error) { + result := make([]*armadaevents.Uuid, 0, len(uuidStrings)) for _, uuidString := range uuidStrings { uuid, err := armadaevents.ProtoUuidFromUuidString(uuidString) if err != nil { return nil, fmt.Errorf("failed to convert uuid string %s to uuid because %s", uuidString, err) } - result = append(result, *uuid) + result = append(result, uuid) } return result, nil } diff --git a/internal/executor/util/uuid_test.go b/internal/executor/util/uuid_test.go index bfb822b36f0..72f263c5efb 100644 --- a/internal/executor/util/uuid_test.go +++ b/internal/executor/util/uuid_test.go @@ -10,15 +10,15 @@ func TestStringUuidsToUuids(t *testing.T) { tests := []struct { name string uuidStrings []string - want []armadaevents.Uuid + want []*armadaevents.Uuid wantErr bool }{ - {"invalid uuid", []string{"1", "2", "3"}, []armadaevents.Uuid{}, true}, - {"valid uuid", []string{"52a3cfa6-8ce1-42b1-97cf-74f1b63f21b9"}, []armadaevents.Uuid{{5954831446549021361, 10939090601399755193}}, false}, + {"invalid uuid", []string{"1", "2", "3"}, []*armadaevents.Uuid{}, true}, + {"valid uuid", []string{"52a3cfa6-8ce1-42b1-97cf-74f1b63f21b9"}, []*armadaevents.Uuid{{5954831446549021361, 10939090601399755193}}, false}, { "valid uuid2", []string{"52a3cfa6-8ce1-42b1-97cf-74f1b63f21b9", "59567531-2a42-4b5b-9aba-b3d400c35b4c"}, - []armadaevents.Uuid{ + []*armadaevents.Uuid{ {5954831446549021361, 10939090601399755193}, {6437461571395537755, 11149421550636325708}, }, diff --git a/internal/executor/utilisation/cluster_utilisation.go b/internal/executor/utilisation/cluster_utilisation.go index ca2b57ea666..0f2866003b2 100644 --- a/internal/executor/utilisation/cluster_utilisation.go +++ b/internal/executor/utilisation/cluster_utilisation.go @@ -3,6 +3,8 @@ package utilisation import ( "fmt" + armadaslices "github.com/armadaproject/armada/internal/common/slices" + "github.com/armadaproject/armada/pkg/executorapi" "github.com/pkg/errors" @@ -112,24 +114,26 @@ func (cls *ClusterUtilisationService) GetAvailableClusterCapacity() (*ClusterAva usageByQueue := cls.getPodUtilisationByQueue(runningNodePodsArmada) resourceUsageByQueue := make(map[string]*executorapi.ComputeResource) for queueName, resourceUsage := range usageByQueue { - resourceUsageByQueue[queueName] = &executorapi.ComputeResource{Resources: resourceUsage} + resourceUsageByQueue[queueName] = executorapi.ComputeResourceFromProtoResources(resourceUsage) } - nodeAllocatedResources := make(map[int32]executorapi.ComputeResource) + nodeAllocatedResources := make(map[int32]*executorapi.ComputeResource) for p, rl := range allocatedByPriority { - nodeAllocatedResources[p] = executorapi.ComputeResource{Resources: rl.Resources} + nodeAllocatedResources[p] = executorapi.ComputeResourceFromProtoResources(rl.Resources) } - nodeNonArmadaAllocatedResources := make(map[int32]executorapi.ComputeResource) + nodeNonArmadaAllocatedResources := make(map[int32]*executorapi.ComputeResource) for p, rl := range allocatedByPriorityNonArmada { - nodeNonArmadaAllocatedResources[p] = executorapi.ComputeResource{Resources: rl.Resources} + nodeNonArmadaAllocatedResources[p] = executorapi.ComputeResourceFromProtoResources(rl.Resources) } nodes = append(nodes, executorapi.NodeInfo{ - Name: node.Name, - Labels: cls.filterTrackedLabels(node.Labels), - Taints: node.Spec.Taints, - AllocatableResources: allocatable, - AvailableResources: available, - TotalResources: allocatable, + Name: node.Name, + Labels: cls.filterTrackedLabels(node.Labels), + Taints: armadaslices.Map(node.Spec.Taints, func(t v1.Taint) *v1.Taint { + return &t + }), + AllocatableResources: allocatable.ToProtoMap(), + AvailableResources: available.ToProtoMap(), + TotalResources: allocatable.ToProtoMap(), AllocatedResources: nodeAllocatedResources, RunIdsByState: runIdsByNode[node.Name], NonArmadaAllocatedResources: nodeNonArmadaAllocatedResources, diff --git a/internal/scheduler/api.go b/internal/scheduler/api.go index f455150d274..b493873908b 100644 --- a/internal/scheduler/api.go +++ b/internal/scheduler/api.go @@ -335,10 +335,10 @@ func (srv *ExecutorApi) executorFromLeaseRequest(ctx *armadacontext.Context, req Id: req.ExecutorId, Pool: req.Pool, Nodes: nodes, - MinimumJobSize: schedulerobjects.ResourceList{Resources: req.MinimumJobSize}, + MinimumJobSize: executorapi.ResourceListFromProtoResources(req.MinimumJobSize), LastUpdateTime: now, - UnassignedJobRuns: slices.Map(req.UnassignedJobRunIds, func(jobId armadaevents.Uuid) string { - return strings.ToLower(armadaevents.UuidFromProtoUuid(&jobId).String()) + UnassignedJobRuns: slices.Map(req.UnassignedJobRunIds, func(jobId *armadaevents.Uuid) string { + return strings.ToLower(armadaevents.UuidFromProtoUuid(jobId).String()) }), } } @@ -356,7 +356,7 @@ func runIdsFromLeaseRequest(req *executorapi.LeaseRequest) ([]uuid.UUID, error) } } for _, runId := range req.UnassignedJobRunIds { - runIds = append(runIds, armadaevents.UuidFromProtoUuid(&runId)) + runIds = append(runIds, armadaevents.UuidFromProtoUuid(runId)) } return runIds, nil } diff --git a/internal/scheduler/api_test.go b/internal/scheduler/api_test.go index 022aae6a2c4..b4c8f4c6362 100644 --- a/internal/scheduler/api_test.go +++ b/internal/scheduler/api_test.go @@ -60,7 +60,7 @@ func TestExecutorApi_LeaseJobRuns(t *testing.T) { NodeType: "node-type-1", }, }, - UnassignedJobRunIds: []armadaevents.Uuid{*armadaevents.ProtoUuidFromUuid(runId3)}, + UnassignedJobRunIds: []*armadaevents.Uuid{armadaevents.ProtoUuidFromUuid(runId3)}, MaxJobsToLease: uint32(maxJobsPerCall), } defaultExpectedExecutor := &schedulerobjects.Executor{ diff --git a/pkg/executorapi/executorapi.pb.go b/pkg/executorapi/executorapi.pb.go index 1f2e18e36a2..9470141afb2 100644 --- a/pkg/executorapi/executorapi.pb.go +++ b/pkg/executorapi/executorapi.pb.go @@ -9,12 +9,8 @@ import ( io "io" math "math" math_bits "math/bits" - reflect "reflect" - strings "strings" - _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" types "github.com/gogo/protobuf/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" @@ -40,28 +36,28 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // Used by the scheduler when allocating jobs to executors. type NodeInfo struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Taints []v1.Taint `protobuf:"bytes,2,rep,name=taints,proto3" json:"taints"` + Taints []*v1.Taint `protobuf:"bytes,2,rep,name=taints,proto3" json:"taints,omitempty"` Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // To be deprecated in favour of total_resources + allocated_resources. - AllocatableResources map[string]resource.Quantity `protobuf:"bytes,4,rep,name=allocatable_resources,json=allocatableResources,proto3" json:"allocatableResources" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + AllocatableResources map[string]*resource.Quantity `protobuf:"bytes,4,rep,name=allocatable_resources,json=allocatableResources,proto3" json:"allocatableResources,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // To be deprecated in favour of total_resources + allocated_resources. - AvailableResources map[string]resource.Quantity `protobuf:"bytes,5,rep,name=available_resources,json=availableResources,proto3" json:"availableResources" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + AvailableResources map[string]*resource.Quantity `protobuf:"bytes,5,rep,name=available_resources,json=availableResources,proto3" json:"availableResources,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Total node resources. // Resources available for allocation is given by the difference between this and allocated_resources. - TotalResources map[string]resource.Quantity `protobuf:"bytes,6,rep,name=total_resources,json=totalResources,proto3" json:"totalResources" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + TotalResources map[string]*resource.Quantity `protobuf:"bytes,6,rep,name=total_resources,json=totalResources,proto3" json:"totalResources,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Each pod is created with a priority class. Each priority class has an integer priority associated with it. // This is a map from priority to the total amount of resources allocated to pods with that priority. // It is used by the scheduler to decide whether more jobs should be sent to an executor. // In particular, jobs may be sent to an executor even if all resources are allocated // if the sent jobs are of higher priority. - AllocatedResources map[int32]ComputeResource `protobuf:"bytes,7,rep,name=allocated_resources,json=allocatedResources,proto3" json:"allocatedResources" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + AllocatedResources map[int32]*ComputeResource `protobuf:"bytes,7,rep,name=allocated_resources,json=allocatedResources,proto3" json:"allocatedResources,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // All run ids of jobs on the node, mapped to their current state // this should be of type armadaevents.uuid, but this creates a circular loop // once the old scheduler has gone, we can correct this - RunIdsByState map[string]api.JobState `protobuf:"bytes,8,rep,name=run_ids_by_state,json=runIdsByState,proto3" json:"runIdsByState" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=api.JobState"` + RunIdsByState map[string]api.JobState `protobuf:"bytes,8,rep,name=run_ids_by_state,json=runIdsByState,proto3" json:"runIdsByState,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=api.JobState"` // The amount of resource allocated to non-armada pods by priority - NonArmadaAllocatedResources map[int32]ComputeResource `protobuf:"bytes,9,rep,name=non_armada_allocated_resources,json=nonArmadaAllocatedResources,proto3" json:"nonArmadaAllocatedResources" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Unschedulable bool `protobuf:"varint,10,opt,name=unschedulable,proto3" json:"unschedulable,omitempty"` + NonArmadaAllocatedResources map[int32]*ComputeResource `protobuf:"bytes,9,rep,name=non_armada_allocated_resources,json=nonArmadaAllocatedResources,proto3" json:"nonArmadaAllocatedResources,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Unschedulable bool `protobuf:"varint,10,opt,name=unschedulable,proto3" json:"unschedulable,omitempty"` // This should only be used for metrics // An aggregated real usage of jobs by queue ResourceUsageByQueue map[string]*ComputeResource `protobuf:"bytes,11,rep,name=resource_usage_by_queue,json=resourceUsageByQueue,proto3" json:"resourceUsageByQueue,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` @@ -70,8 +66,9 @@ type NodeInfo struct { NodeType string `protobuf:"bytes,12,opt,name=node_type,json=nodeType,proto3" json:"nodeType,omitempty"` } -func (m *NodeInfo) Reset() { *m = NodeInfo{} } -func (*NodeInfo) ProtoMessage() {} +func (m *NodeInfo) Reset() { *m = NodeInfo{} } +func (m *NodeInfo) String() string { return proto.CompactTextString(m) } +func (*NodeInfo) ProtoMessage() {} func (*NodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor_57e0d9d0e484e459, []int{0} } @@ -109,7 +106,7 @@ func (m *NodeInfo) GetName() string { return "" } -func (m *NodeInfo) GetTaints() []v1.Taint { +func (m *NodeInfo) GetTaints() []*v1.Taint { if m != nil { return m.Taints } @@ -123,28 +120,28 @@ func (m *NodeInfo) GetLabels() map[string]string { return nil } -func (m *NodeInfo) GetAllocatableResources() map[string]resource.Quantity { +func (m *NodeInfo) GetAllocatableResources() map[string]*resource.Quantity { if m != nil { return m.AllocatableResources } return nil } -func (m *NodeInfo) GetAvailableResources() map[string]resource.Quantity { +func (m *NodeInfo) GetAvailableResources() map[string]*resource.Quantity { if m != nil { return m.AvailableResources } return nil } -func (m *NodeInfo) GetTotalResources() map[string]resource.Quantity { +func (m *NodeInfo) GetTotalResources() map[string]*resource.Quantity { if m != nil { return m.TotalResources } return nil } -func (m *NodeInfo) GetAllocatedResources() map[int32]ComputeResource { +func (m *NodeInfo) GetAllocatedResources() map[int32]*ComputeResource { if m != nil { return m.AllocatedResources } @@ -158,7 +155,7 @@ func (m *NodeInfo) GetRunIdsByState() map[string]api.JobState { return nil } -func (m *NodeInfo) GetNonArmadaAllocatedResources() map[int32]ComputeResource { +func (m *NodeInfo) GetNonArmadaAllocatedResources() map[int32]*ComputeResource { if m != nil { return m.NonArmadaAllocatedResources } @@ -187,11 +184,12 @@ func (m *NodeInfo) GetNodeType() string { } type ComputeResource struct { - Resources map[string]resource.Quantity `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Resources map[string]*resource.Quantity `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (m *ComputeResource) Reset() { *m = ComputeResource{} } -func (*ComputeResource) ProtoMessage() {} +func (m *ComputeResource) Reset() { *m = ComputeResource{} } +func (m *ComputeResource) String() string { return proto.CompactTextString(m) } +func (*ComputeResource) ProtoMessage() {} func (*ComputeResource) Descriptor() ([]byte, []int) { return fileDescriptor_57e0d9d0e484e459, []int{1} } @@ -222,7 +220,7 @@ func (m *ComputeResource) XXX_DiscardUnknown() { var xxx_messageInfo_ComputeResource proto.InternalMessageInfo -func (m *ComputeResource) GetResources() map[string]resource.Quantity { +func (m *ComputeResource) GetResources() map[string]*resource.Quantity { if m != nil { return m.Resources } @@ -233,8 +231,9 @@ type EventList struct { Events []*armadaevents.EventSequence `protobuf:"bytes,1,rep,name=events,proto3" json:"events,omitempty"` } -func (m *EventList) Reset() { *m = EventList{} } -func (*EventList) ProtoMessage() {} +func (m *EventList) Reset() { *m = EventList{} } +func (m *EventList) String() string { return proto.CompactTextString(m) } +func (*EventList) ProtoMessage() {} func (*EventList) Descriptor() ([]byte, []int) { return fileDescriptor_57e0d9d0e484e459, []int{2} } @@ -278,22 +277,23 @@ type LeaseRequest struct { // Nodes are split into pools. This field indicates for which pool jobs are leased. Pool string `protobuf:"bytes,2,opt,name=pool,proto3" json:"pool,omitempty"` // Total resources available for scheduling across all nodes. - Resources map[string]resource.Quantity `protobuf:"bytes,3,rep,name=resources,proto3" json:"resources" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Resources map[string]*resource.Quantity `protobuf:"bytes,3,rep,name=resources,proto3" json:"resources,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Jobs submitted to this executor must require at least this amount of resources. - MinimumJobSize map[string]resource.Quantity `protobuf:"bytes,4,rep,name=minimum_job_size,json=minimumJobSize,proto3" json:"minimumJobSize" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MinimumJobSize map[string]*resource.Quantity `protobuf:"bytes,4,rep,name=minimum_job_size,json=minimumJobSize,proto3" json:"minimumJobSize,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // For each node in the cluster: // - The total allocatable resources on that node. // - The job runs running on those nodes, // - Any taints and labels on the node. Nodes []*NodeInfo `protobuf:"bytes,5,rep,name=nodes,proto3" json:"nodes,omitempty"` // Run Ids of jobs owned by the executor but not currently assigned to a node. - UnassignedJobRunIds []armadaevents.Uuid `protobuf:"bytes,6,rep,name=unassigned_job_run_ids,json=unassignedJobRunIds,proto3" json:"unassignedJobRunIds"` + UnassignedJobRunIds []*armadaevents.Uuid `protobuf:"bytes,6,rep,name=unassigned_job_run_ids,json=unassignedJobRunIds,proto3" json:"unassignedJobRunIds,omitempty"` // Max number of jobs this request should return MaxJobsToLease uint32 `protobuf:"varint,7,opt,name=max_jobs_to_lease,json=maxJobsToLease,proto3" json:"maxJobsToLease,omitempty"` } -func (m *LeaseRequest) Reset() { *m = LeaseRequest{} } -func (*LeaseRequest) ProtoMessage() {} +func (m *LeaseRequest) Reset() { *m = LeaseRequest{} } +func (m *LeaseRequest) String() string { return proto.CompactTextString(m) } +func (*LeaseRequest) ProtoMessage() {} func (*LeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptor_57e0d9d0e484e459, []int{3} } @@ -338,14 +338,14 @@ func (m *LeaseRequest) GetPool() string { return "" } -func (m *LeaseRequest) GetResources() map[string]resource.Quantity { +func (m *LeaseRequest) GetResources() map[string]*resource.Quantity { if m != nil { return m.Resources } return nil } -func (m *LeaseRequest) GetMinimumJobSize() map[string]resource.Quantity { +func (m *LeaseRequest) GetMinimumJobSize() map[string]*resource.Quantity { if m != nil { return m.MinimumJobSize } @@ -359,7 +359,7 @@ func (m *LeaseRequest) GetNodes() []*NodeInfo { return nil } -func (m *LeaseRequest) GetUnassignedJobRunIds() []armadaevents.Uuid { +func (m *LeaseRequest) GetUnassignedJobRunIds() []*armadaevents.Uuid { if m != nil { return m.UnassignedJobRunIds } @@ -383,8 +383,9 @@ type JobRunLease struct { Job *armadaevents.SubmitJob `protobuf:"bytes,6,opt,name=job,proto3" json:"job,omitempty"` } -func (m *JobRunLease) Reset() { *m = JobRunLease{} } -func (*JobRunLease) ProtoMessage() {} +func (m *JobRunLease) Reset() { *m = JobRunLease{} } +func (m *JobRunLease) String() string { return proto.CompactTextString(m) } +func (*JobRunLease) ProtoMessage() {} func (*JobRunLease) Descriptor() ([]byte, []int) { return fileDescriptor_57e0d9d0e484e459, []int{4} } @@ -462,8 +463,9 @@ type CancelRuns struct { JobRunIdsToCancel []*armadaevents.Uuid `protobuf:"bytes,1,rep,name=job_run_ids_to_cancel,json=jobRunIdsToCancel,proto3" json:"jobRunIdsToCancel,omitempty"` } -func (m *CancelRuns) Reset() { *m = CancelRuns{} } -func (*CancelRuns) ProtoMessage() {} +func (m *CancelRuns) Reset() { *m = CancelRuns{} } +func (m *CancelRuns) String() string { return proto.CompactTextString(m) } +func (*CancelRuns) ProtoMessage() {} func (*CancelRuns) Descriptor() ([]byte, []int) { return fileDescriptor_57e0d9d0e484e459, []int{5} } @@ -506,8 +508,9 @@ type PreemptRuns struct { JobRunIdsToPreempt []*armadaevents.Uuid `protobuf:"bytes,1,rep,name=job_run_ids_to_preempt,json=jobRunIdsToPreempt,proto3" json:"jobRunIdsToPreempt,omitempty"` } -func (m *PreemptRuns) Reset() { *m = PreemptRuns{} } -func (*PreemptRuns) ProtoMessage() {} +func (m *PreemptRuns) Reset() { *m = PreemptRuns{} } +func (m *PreemptRuns) String() string { return proto.CompactTextString(m) } +func (*PreemptRuns) ProtoMessage() {} func (*PreemptRuns) Descriptor() ([]byte, []int) { return fileDescriptor_57e0d9d0e484e459, []int{6} } @@ -549,8 +552,9 @@ func (m *PreemptRuns) GetJobRunIdsToPreempt() []*armadaevents.Uuid { type EndMarker struct { } -func (m *EndMarker) Reset() { *m = EndMarker{} } -func (*EndMarker) ProtoMessage() {} +func (m *EndMarker) Reset() { *m = EndMarker{} } +func (m *EndMarker) String() string { return proto.CompactTextString(m) } +func (*EndMarker) ProtoMessage() {} func (*EndMarker) Descriptor() ([]byte, []int) { return fileDescriptor_57e0d9d0e484e459, []int{7} } @@ -590,8 +594,9 @@ type LeaseStreamMessage struct { Event isLeaseStreamMessage_Event `protobuf_oneof:"event"` } -func (m *LeaseStreamMessage) Reset() { *m = LeaseStreamMessage{} } -func (*LeaseStreamMessage) ProtoMessage() {} +func (m *LeaseStreamMessage) Reset() { *m = LeaseStreamMessage{} } +func (m *LeaseStreamMessage) String() string { return proto.CompactTextString(m) } +func (*LeaseStreamMessage) ProtoMessage() {} func (*LeaseStreamMessage) Descriptor() ([]byte, []int) { return fileDescriptor_57e0d9d0e484e459, []int{8} } @@ -693,20 +698,20 @@ func (*LeaseStreamMessage) XXX_OneofWrappers() []interface{} { func init() { proto.RegisterType((*NodeInfo)(nil), "executorapi.NodeInfo") - proto.RegisterMapType((map[string]resource.Quantity)(nil), "executorapi.NodeInfo.AllocatableResourcesEntry") - proto.RegisterMapType((map[int32]ComputeResource)(nil), "executorapi.NodeInfo.AllocatedResourcesEntry") - proto.RegisterMapType((map[string]resource.Quantity)(nil), "executorapi.NodeInfo.AvailableResourcesEntry") + proto.RegisterMapType((map[string]*resource.Quantity)(nil), "executorapi.NodeInfo.AllocatableResourcesEntry") + proto.RegisterMapType((map[int32]*ComputeResource)(nil), "executorapi.NodeInfo.AllocatedResourcesEntry") + proto.RegisterMapType((map[string]*resource.Quantity)(nil), "executorapi.NodeInfo.AvailableResourcesEntry") proto.RegisterMapType((map[string]string)(nil), "executorapi.NodeInfo.LabelsEntry") - proto.RegisterMapType((map[int32]ComputeResource)(nil), "executorapi.NodeInfo.NonArmadaAllocatedResourcesEntry") + proto.RegisterMapType((map[int32]*ComputeResource)(nil), "executorapi.NodeInfo.NonArmadaAllocatedResourcesEntry") proto.RegisterMapType((map[string]*ComputeResource)(nil), "executorapi.NodeInfo.ResourceUsageByQueueEntry") proto.RegisterMapType((map[string]api.JobState)(nil), "executorapi.NodeInfo.RunIdsByStateEntry") - proto.RegisterMapType((map[string]resource.Quantity)(nil), "executorapi.NodeInfo.TotalResourcesEntry") + proto.RegisterMapType((map[string]*resource.Quantity)(nil), "executorapi.NodeInfo.TotalResourcesEntry") proto.RegisterType((*ComputeResource)(nil), "executorapi.ComputeResource") - proto.RegisterMapType((map[string]resource.Quantity)(nil), "executorapi.ComputeResource.ResourcesEntry") + proto.RegisterMapType((map[string]*resource.Quantity)(nil), "executorapi.ComputeResource.ResourcesEntry") proto.RegisterType((*EventList)(nil), "executorapi.EventList") proto.RegisterType((*LeaseRequest)(nil), "executorapi.LeaseRequest") - proto.RegisterMapType((map[string]resource.Quantity)(nil), "executorapi.LeaseRequest.MinimumJobSizeEntry") - proto.RegisterMapType((map[string]resource.Quantity)(nil), "executorapi.LeaseRequest.ResourcesEntry") + proto.RegisterMapType((map[string]*resource.Quantity)(nil), "executorapi.LeaseRequest.MinimumJobSizeEntry") + proto.RegisterMapType((map[string]*resource.Quantity)(nil), "executorapi.LeaseRequest.ResourcesEntry") proto.RegisterType((*JobRunLease)(nil), "executorapi.JobRunLease") proto.RegisterType((*CancelRuns)(nil), "executorapi.CancelRuns") proto.RegisterType((*PreemptRuns)(nil), "executorapi.PreemptRuns") @@ -717,103 +722,102 @@ func init() { func init() { proto.RegisterFile("pkg/executorapi/executorapi.proto", fileDescriptor_57e0d9d0e484e459) } var fileDescriptor_57e0d9d0e484e459 = []byte{ - // 1533 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x4d, 0x6f, 0x1b, 0xc5, - 0x1b, 0xcf, 0xe6, 0xc5, 0x4d, 0xc6, 0x49, 0xda, 0x4c, 0xde, 0x36, 0x4e, 0xfe, 0x76, 0xea, 0x4a, - 0x7f, 0xa5, 0xa2, 0x5d, 0xd3, 0x14, 0xa1, 0x82, 0x00, 0x11, 0x57, 0x51, 0x9b, 0xa8, 0x2d, 0x74, - 0x93, 0x22, 0x8a, 0x90, 0xac, 0x59, 0xef, 0xd4, 0x59, 0xc7, 0xbb, 0xb3, 0xdd, 0x99, 0x4d, 0xeb, - 0x9e, 0x10, 0x07, 0x0e, 0x20, 0x24, 0x0e, 0x5c, 0x38, 0x54, 0xf0, 0x11, 0xf8, 0x10, 0x1c, 0x7a, - 0xac, 0xc4, 0xa5, 0x27, 0x8b, 0xa6, 0x37, 0x7f, 0x0a, 0x34, 0x2f, 0x1b, 0xcf, 0x3a, 0xeb, 0xa4, - 0x48, 0x48, 0xe4, 0x14, 0xcf, 0xf3, 0xf6, 0x7b, 0x5e, 0xe6, 0x79, 0xe6, 0xc9, 0x82, 0x8b, 0xe1, - 0x7e, 0xa3, 0x82, 0x9f, 0xe2, 0x7a, 0xcc, 0x48, 0x84, 0x42, 0x4f, 0xff, 0x6d, 0x85, 0x11, 0x61, - 0x04, 0xe6, 0x35, 0x52, 0xe1, 0x7f, 0x5c, 0x1e, 0x45, 0x3e, 0x72, 0x11, 0x3e, 0xc0, 0x01, 0xa3, - 0x15, 0xf9, 0x47, 0xca, 0x16, 0xe6, 0x04, 0x3b, 0xf4, 0x2a, 0x34, 0x76, 0x7c, 0x8f, 0x29, 0xea, - 0x72, 0x83, 0x90, 0x46, 0x0b, 0x57, 0xc4, 0xc9, 0x89, 0x1f, 0x55, 0xb0, 0x1f, 0xb2, 0xb6, 0x62, - 0x5e, 0x6d, 0x78, 0x6c, 0x2f, 0x76, 0xac, 0x3a, 0xf1, 0x2b, 0x0d, 0xd2, 0x20, 0x3d, 0x29, 0x7e, - 0x12, 0x07, 0xf1, 0x4b, 0x89, 0x97, 0xf7, 0x6f, 0x50, 0xcb, 0x23, 0x02, 0xa4, 0x4e, 0x22, 0x5c, - 0x39, 0xb8, 0x56, 0x69, 0xe0, 0x00, 0x47, 0x88, 0x61, 0x57, 0xc9, 0xbc, 0xd7, 0x93, 0xf1, 0x51, - 0x7d, 0xcf, 0x0b, 0x70, 0xd4, 0xae, 0x24, 0x9e, 0x45, 0x98, 0x92, 0x38, 0xaa, 0xe3, 0x7e, 0xad, - 0xf2, 0xef, 0x10, 0x8c, 0xdf, 0x23, 0x2e, 0xde, 0x0a, 0x1e, 0x11, 0xf8, 0x7f, 0x30, 0x1a, 0x20, - 0x1f, 0x9b, 0xc6, 0xaa, 0xb1, 0x36, 0x51, 0x85, 0xdd, 0x4e, 0x69, 0x9a, 0x9f, 0xaf, 0x10, 0xdf, - 0x63, 0xc2, 0x7b, 0x5b, 0xf0, 0xe1, 0x06, 0xc8, 0x31, 0xe4, 0x05, 0x8c, 0x9a, 0xc3, 0xab, 0x23, - 0x6b, 0xf9, 0xf5, 0x25, 0x4b, 0x62, 0x5b, 0x3c, 0x7f, 0xdc, 0x3f, 0xeb, 0xe0, 0x9a, 0xb5, 0xcb, - 0x25, 0xaa, 0xd3, 0x2f, 0x3a, 0xa5, 0xa1, 0x6e, 0xa7, 0xa4, 0x14, 0x6c, 0xf5, 0x17, 0x7e, 0x06, - 0x72, 0x2d, 0xe4, 0xe0, 0x16, 0x35, 0x47, 0x84, 0x89, 0x8b, 0x96, 0x5e, 0x83, 0xc4, 0x23, 0xeb, - 0x8e, 0x90, 0xd9, 0x0c, 0x58, 0xd4, 0xae, 0xce, 0x75, 0x3b, 0xa5, 0x0b, 0x52, 0x49, 0xf3, 0x48, - 0x99, 0x81, 0xdf, 0x1a, 0x60, 0x1e, 0xb5, 0x5a, 0xa4, 0x8e, 0x18, 0x72, 0x5a, 0xb8, 0x96, 0x44, - 0x4c, 0xcd, 0x51, 0x01, 0x50, 0xc9, 0x06, 0xd8, 0xe8, 0xa9, 0xd8, 0x89, 0x86, 0x84, 0x5b, 0x51, - 0x9e, 0xcf, 0xa1, 0x0c, 0x11, 0x3b, 0x93, 0x0a, 0x9f, 0x81, 0x59, 0x74, 0x80, 0xbc, 0x56, 0x9f, - 0x07, 0x63, 0xc2, 0x83, 0xab, 0x03, 0x3c, 0x48, 0x14, 0xfa, 0xf0, 0x0b, 0x0a, 0x1f, 0xa2, 0x63, - 0x02, 0x76, 0x06, 0x0d, 0x36, 0xc1, 0x79, 0x46, 0x18, 0x6a, 0x69, 0xb8, 0x39, 0x81, 0x7b, 0x39, - 0x1b, 0x77, 0x97, 0x0b, 0xf7, 0x61, 0x2e, 0x28, 0xcc, 0x69, 0x96, 0x62, 0xda, 0x7d, 0x67, 0x11, - 0xa7, 0x8c, 0x1f, 0xbb, 0x1a, 0xde, 0xb9, 0x13, 0xe3, 0x4c, 0x14, 0x06, 0xc6, 0x79, 0x4c, 0xc0, - 0xce, 0xa0, 0xc1, 0x3d, 0x70, 0x21, 0x8a, 0x83, 0x9a, 0xe7, 0xd2, 0x9a, 0xd3, 0xae, 0x51, 0x86, - 0x18, 0x36, 0xc7, 0x05, 0xf0, 0x5a, 0x36, 0xb0, 0x1d, 0x07, 0x5b, 0x2e, 0xad, 0xb6, 0x77, 0xb8, - 0xa8, 0xc4, 0x9c, 0x57, 0x98, 0x53, 0x91, 0xce, 0xb3, 0xd3, 0x47, 0xf8, 0x9b, 0x01, 0x8a, 0x01, - 0x09, 0x6a, 0xb2, 0xf3, 0x6b, 0x59, 0x11, 0x4f, 0x08, 0xe0, 0xf7, 0xb3, 0x81, 0xef, 0x91, 0x60, - 0x43, 0xa8, 0x0e, 0x0a, 0xfd, 0x92, 0x72, 0x63, 0x39, 0x18, 0x2c, 0x69, 0x9f, 0xc4, 0x84, 0x1b, - 0x60, 0x2a, 0x0e, 0x68, 0x7d, 0x0f, 0xbb, 0xb1, 0xb8, 0x0e, 0x26, 0x58, 0x35, 0xd6, 0xc6, 0xab, - 0xcb, 0xdd, 0x4e, 0x69, 0x31, 0xc5, 0xd0, 0x3a, 0x26, 0xad, 0x01, 0xbf, 0x37, 0xc0, 0x62, 0x12, - 0x50, 0x2d, 0xa6, 0xa8, 0x81, 0x79, 0x5e, 0x1f, 0xc7, 0x38, 0xc6, 0x66, 0xfe, 0xa4, 0xd6, 0x49, - 0xbc, 0x78, 0xc0, 0x75, 0xaa, 0xed, 0xfb, 0x5c, 0x43, 0xc6, 0x55, 0xee, 0x76, 0x4a, 0xc5, 0x28, - 0x83, 0xad, 0x79, 0x31, 0x97, 0xc5, 0x87, 0xd7, 0xc1, 0x44, 0x40, 0x5c, 0x5c, 0x63, 0xed, 0x10, - 0x9b, 0x93, 0x62, 0x0c, 0x2d, 0xf0, 0xbb, 0xc1, 0x89, 0xbb, 0xed, 0x50, 0x37, 0x30, 0x9e, 0xd0, - 0x0a, 0x08, 0xe4, 0xb5, 0x39, 0x01, 0x2f, 0x81, 0x91, 0x7d, 0xdc, 0x56, 0x43, 0x6c, 0x86, 0x57, - 0x79, 0x1f, 0xb7, 0x35, 0x45, 0xce, 0x85, 0x97, 0xc1, 0xd8, 0x01, 0x6a, 0xc5, 0xd8, 0x1c, 0x16, - 0x62, 0xb3, 0xdd, 0x4e, 0xe9, 0xbc, 0x20, 0x68, 0x82, 0x52, 0xe2, 0xc3, 0xe1, 0x1b, 0x46, 0xe1, - 0x57, 0x03, 0x2c, 0x0d, 0x1c, 0x15, 0x6f, 0x87, 0xf8, 0x50, 0x47, 0xcc, 0xaf, 0x5b, 0xda, 0xcc, - 0x3c, 0x9a, 0xd7, 0x56, 0xb8, 0xdf, 0x10, 0x43, 0x34, 0x49, 0x8e, 0x75, 0x3f, 0x46, 0x01, 0xf3, - 0x58, 0xfb, 0x54, 0x0f, 0x9f, 0x1b, 0x60, 0x71, 0xc0, 0x28, 0x39, 0x13, 0xfe, 0xfd, 0x62, 0x80, - 0xd9, 0x8c, 0x91, 0x73, 0x26, 0x7c, 0xfb, 0x81, 0xe7, 0x2e, 0xbb, 0x47, 0x75, 0xff, 0xc6, 0x06, - 0xfa, 0x77, 0x2b, 0xed, 0xdf, 0x4a, 0xaa, 0x61, 0x6e, 0x12, 0x3f, 0x8c, 0xd9, 0x51, 0x4d, 0x4e, - 0xf5, 0xe6, 0x09, 0x80, 0xc7, 0x47, 0xd6, 0xdb, 0xe5, 0xe9, 0x86, 0xee, 0xc7, 0xf4, 0xfa, 0x94, - 0xc8, 0xc7, 0x36, 0x71, 0x84, 0x9d, 0x53, 0x81, 0x7f, 0x36, 0xc0, 0xea, 0x69, 0x33, 0xeb, 0x3f, - 0xc8, 0xc7, 0x8f, 0x06, 0x58, 0x1a, 0x38, 0x6b, 0xde, 0x2e, 0x2f, 0xff, 0xa6, 0x3f, 0xe5, 0xef, - 0x86, 0xc1, 0xf9, 0x3e, 0x1d, 0xf8, 0x35, 0x98, 0xe8, 0x3d, 0x0a, 0x86, 0x98, 0x9a, 0xef, 0x9c, - 0x04, 0x62, 0xf5, 0xbd, 0x04, 0x33, 0xea, 0x25, 0xe8, 0x59, 0xb1, 0x7b, 0x3f, 0x79, 0x61, 0xa6, - 0xcf, 0x5e, 0xdb, 0x94, 0xbf, 0x00, 0x13, 0x9b, 0x7c, 0x0f, 0xbe, 0xe3, 0x51, 0x06, 0xb7, 0x40, - 0x4e, 0x2e, 0xc5, 0x2a, 0xfc, 0x65, 0x4b, 0x5f, 0x98, 0x2d, 0x21, 0xb8, 0x83, 0x1f, 0xc7, 0x38, - 0xa8, 0x63, 0xb9, 0xca, 0x49, 0x8e, 0xbe, 0xca, 0x49, 0x4a, 0xf9, 0x75, 0x0e, 0x4c, 0xde, 0xc1, - 0x88, 0x62, 0x9b, 0xcb, 0x53, 0x06, 0x3f, 0x00, 0x47, 0xeb, 0x78, 0xcd, 0x73, 0x55, 0xd0, 0x26, - 0xdf, 0xcd, 0x12, 0xf2, 0x96, 0xab, 0xd9, 0x01, 0x3d, 0x2a, 0x5f, 0x69, 0x43, 0x42, 0x5a, 0x6a, - 0xcc, 0x8b, 0x95, 0x96, 0x9f, 0xf5, 0x95, 0x96, 0x9f, 0xe1, 0x43, 0xbd, 0x80, 0x23, 0x19, 0xeb, - 0x84, 0xee, 0xd0, 0x3f, 0xaa, 0x1e, 0x24, 0xe0, 0x82, 0xef, 0x05, 0x9e, 0x1f, 0xfb, 0xb5, 0x26, - 0x71, 0x6a, 0xd4, 0x7b, 0x86, 0xd5, 0x4e, 0x7a, 0x75, 0x30, 0xc2, 0x5d, 0xa9, 0xc1, 0x7b, 0xd7, - 0x7b, 0x86, 0xfb, 0xb6, 0x33, 0x3f, 0xc5, 0xb4, 0xfb, 0xce, 0xf0, 0x53, 0x30, 0xc6, 0xdf, 0xc6, - 0x64, 0xef, 0x9c, 0xcf, 0x7c, 0xbe, 0x65, 0x75, 0x85, 0x9c, 0x5e, 0x5d, 0x41, 0x80, 0x2e, 0x58, - 0x88, 0x03, 0x44, 0xa9, 0xd7, 0x08, 0xb0, 0x2b, 0xbc, 0x56, 0x2b, 0x97, 0x5a, 0x29, 0x61, 0xba, - 0xb8, 0x0f, 0x62, 0xcf, 0xad, 0x2e, 0x2b, 0xef, 0x66, 0x7b, 0x9a, 0xdb, 0xc4, 0x91, 0x93, 0xcc, - 0xce, 0x22, 0xc2, 0x5b, 0x60, 0xc6, 0x47, 0x4f, 0xb9, 0x79, 0x5a, 0x63, 0xa4, 0xd6, 0xe2, 0xf1, - 0x9b, 0xe7, 0x56, 0x8d, 0xb5, 0xa9, 0xea, 0x4a, 0xb7, 0x53, 0x32, 0x7d, 0xf4, 0x74, 0x9b, 0x38, - 0x74, 0x97, 0x88, 0xcc, 0x68, 0x5e, 0x4e, 0xa7, 0x39, 0x67, 0xb4, 0x3f, 0xc4, 0x93, 0x97, 0x51, - 0xc7, 0x33, 0xd1, 0xbb, 0x7f, 0x0c, 0x83, 0xbc, 0xac, 0x84, 0x48, 0x21, 0xbc, 0x0d, 0x40, 0xaf, - 0xcc, 0xc2, 0xb5, 0xec, 0x2a, 0x8b, 0x6d, 0xac, 0xa9, 0x4a, 0xa8, 0x6f, 0x63, 0x09, 0x8d, 0x6f, - 0x56, 0x72, 0x79, 0xd4, 0x36, 0xab, 0xc7, 0x7d, 0xcb, 0x9f, 0x94, 0x80, 0x57, 0x40, 0x8e, 0x17, - 0x1f, 0x33, 0x73, 0x44, 0xc8, 0x8a, 0xb1, 0x20, 0x29, 0xfa, 0x58, 0x90, 0x14, 0xde, 0xca, 0x31, - 0xc5, 0x91, 0x39, 0xda, 0x6b, 0x65, 0x7e, 0xd6, 0x5b, 0x99, 0x9f, 0xb9, 0xd5, 0x46, 0x44, 0xe2, - 0x50, 0xde, 0x7f, 0x65, 0x55, 0x52, 0x74, 0xab, 0x92, 0x02, 0x3f, 0x02, 0x23, 0x4d, 0xe2, 0x98, - 0x39, 0x11, 0xf1, 0x62, 0x3a, 0xe2, 0x1d, 0xf1, 0xff, 0xfc, 0x36, 0x71, 0x64, 0x95, 0x9a, 0xc4, - 0xd1, 0xab, 0xd4, 0x24, 0x4e, 0x99, 0x02, 0x70, 0x13, 0x05, 0x75, 0xdc, 0xb2, 0xe3, 0x80, 0x42, - 0x0c, 0xe6, 0xb5, 0x5e, 0xe1, 0x77, 0xba, 0x2e, 0x98, 0x6a, 0x24, 0x66, 0xe5, 0xb3, 0xc4, 0xd7, - 0xff, 0x24, 0x77, 0x74, 0x97, 0x48, 0x6b, 0x1a, 0xcc, 0xcc, 0x31, 0x66, 0xf9, 0x09, 0xc8, 0x7f, - 0x1e, 0x61, 0xce, 0x16, 0xa8, 0x7b, 0x60, 0xa1, 0x0f, 0x35, 0x94, 0xdc, 0x13, 0x60, 0x57, 0xbb, - 0x9d, 0xd2, 0x8a, 0x66, 0x59, 0xd9, 0xd3, 0x70, 0xe1, 0x71, 0x6e, 0x39, 0x0f, 0x26, 0x36, 0x03, - 0xf7, 0x2e, 0x8a, 0xf6, 0x71, 0x54, 0xfe, 0x73, 0x18, 0x40, 0x71, 0x77, 0x76, 0x58, 0x84, 0x91, - 0x7f, 0x17, 0x53, 0xfe, 0x36, 0xc3, 0x4d, 0x30, 0x26, 0x1b, 0x59, 0xde, 0x21, 0x33, 0x35, 0x7c, - 0xb4, 0x1b, 0x27, 0x2f, 0x46, 0x2b, 0xdd, 0xd9, 0xb7, 0x87, 0x6c, 0xa9, 0x0d, 0x77, 0x41, 0x5e, - 0xe6, 0x8e, 0xc7, 0x45, 0x55, 0x13, 0x2c, 0xa6, 0x9f, 0xd4, 0xa3, 0xc4, 0xcb, 0xb7, 0xa0, 0x7e, - 0x74, 0x4e, 0x19, 0x04, 0x3d, 0x3a, 0xfc, 0x18, 0x8c, 0xe0, 0xc0, 0x15, 0xb7, 0x2d, 0xbf, 0xbe, - 0x90, 0xb2, 0x76, 0x14, 0x98, 0xac, 0x35, 0x0e, 0xdc, 0x94, 0x15, 0xae, 0x07, 0xbf, 0x04, 0x93, - 0x2a, 0xb5, 0xd2, 0xab, 0xd1, 0x8c, 0x10, 0xb5, 0xca, 0x54, 0x97, 0xba, 0x9d, 0xd2, 0x7c, 0xd8, - 0x23, 0xa4, 0x2c, 0xe6, 0x35, 0x46, 0xf5, 0x1c, 0x18, 0x13, 0xe5, 0x59, 0x7f, 0x6e, 0x80, 0xfc, - 0xa6, 0x32, 0xb7, 0x11, 0x7a, 0xf0, 0x9e, 0x7a, 0x0a, 0x65, 0xe6, 0x28, 0x5c, 0x1a, 0xf8, 0x64, - 0x14, 0x4a, 0xc7, 0x59, 0xa9, 0xd2, 0xac, 0x19, 0xef, 0x1a, 0xf0, 0x13, 0x30, 0x69, 0xe3, 0x90, - 0x44, 0x4c, 0x3c, 0xc8, 0x14, 0xf6, 0x25, 0x21, 0x79, 0xce, 0x0b, 0x0b, 0x96, 0xfc, 0x7c, 0x65, - 0x25, 0x1f, 0xa6, 0xac, 0x4d, 0xee, 0x77, 0xf5, 0xfe, 0xab, 0xd7, 0xc5, 0xa1, 0x6f, 0x0e, 0x8b, - 0xc6, 0x8b, 0xc3, 0xa2, 0xf1, 0xf2, 0xb0, 0x68, 0xfc, 0x75, 0x58, 0x34, 0x7e, 0x7a, 0x53, 0x1c, - 0x7a, 0xf9, 0xa6, 0x38, 0xf4, 0xea, 0x4d, 0x71, 0xe8, 0xab, 0x8a, 0xf6, 0x69, 0x4b, 0x5e, 0xbc, - 0x30, 0x22, 0x4d, 0x5c, 0x67, 0xea, 0x54, 0xe9, 0xfb, 0xf8, 0xe6, 0xe4, 0x04, 0xc4, 0xf5, 0xbf, - 0x03, 0x00, 0x00, 0xff, 0xff, 0x5e, 0x37, 0xd8, 0xe3, 0x96, 0x13, 0x00, 0x00, + // 1514 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcd, 0x6f, 0xdb, 0x46, + 0x16, 0x37, 0x2d, 0x5b, 0xb1, 0x47, 0xb6, 0x93, 0x8c, 0xbf, 0x68, 0x3b, 0x11, 0x1d, 0x2d, 0x76, + 0xe1, 0x60, 0x13, 0x6a, 0xe3, 0x2c, 0x8a, 0xb4, 0x68, 0x8b, 0x5a, 0x81, 0x91, 0xd8, 0x48, 0xd2, + 0x46, 0x76, 0x8a, 0xb6, 0x17, 0x62, 0x28, 0x4e, 0x64, 0xca, 0x22, 0x87, 0xe1, 0x0c, 0x9d, 0x28, + 0xa7, 0x1e, 0x8b, 0x7e, 0x00, 0x3d, 0xf4, 0xd2, 0x43, 0xd0, 0x5b, 0xff, 0x92, 0x1e, 0x7a, 0x0c, + 0xd0, 0x4b, 0x0f, 0x05, 0x51, 0x24, 0x37, 0x5e, 0xfb, 0x0f, 0x14, 0x33, 0x43, 0x5a, 0x43, 0x89, + 0xb2, 0x83, 0xa2, 0x40, 0x7d, 0xb2, 0xe7, 0xfd, 0xde, 0xf7, 0x9b, 0xf7, 0xe6, 0x89, 0xe0, 0x4a, + 0x70, 0xd8, 0xae, 0xe3, 0x67, 0xb8, 0x15, 0x31, 0x12, 0xa2, 0xc0, 0x55, 0xff, 0x37, 0x83, 0x90, + 0x30, 0x02, 0x2b, 0x0a, 0x69, 0xf5, 0x32, 0xe7, 0x47, 0xa1, 0x87, 0x1c, 0x84, 0x8f, 0xb0, 0xcf, + 0x68, 0x5d, 0xfe, 0x91, 0xbc, 0xab, 0x0b, 0x02, 0x0e, 0xdc, 0x3a, 0x8d, 0x6c, 0xcf, 0x65, 0x29, + 0x75, 0xad, 0x4d, 0x48, 0xbb, 0x8b, 0xeb, 0xe2, 0x64, 0x47, 0x8f, 0xeb, 0xd8, 0x0b, 0x58, 0x2f, + 0x05, 0x6b, 0x87, 0xb7, 0xa8, 0xe9, 0x12, 0x21, 0xd5, 0x22, 0x21, 0xae, 0x1f, 0xdd, 0xa8, 0xb7, + 0xb1, 0x8f, 0x43, 0xc4, 0xb0, 0x93, 0xf2, 0xfc, 0xbf, 0xcf, 0xe3, 0xa1, 0xd6, 0x81, 0xeb, 0xe3, + 0xb0, 0x57, 0xcf, 0x4c, 0x85, 0x98, 0x92, 0x28, 0x6c, 0xe1, 0x41, 0xa9, 0xda, 0x6f, 0x10, 0x4c, + 0x3d, 0x20, 0x0e, 0xde, 0xf1, 0x1f, 0x13, 0xf8, 0x1f, 0x30, 0xe1, 0x23, 0x0f, 0xeb, 0xda, 0xba, + 0xb6, 0x31, 0xdd, 0x80, 0x49, 0x6c, 0xcc, 0xf1, 0xf3, 0x35, 0xe2, 0xb9, 0x4c, 0xb8, 0xd3, 0x14, + 0x38, 0xbc, 0x03, 0xca, 0x0c, 0xb9, 0x3e, 0xa3, 0xfa, 0xf8, 0x7a, 0x69, 0xa3, 0xb2, 0xb9, 0x62, + 0x4a, 0xdb, 0x26, 0x4f, 0x08, 0xf7, 0xcf, 0x3c, 0xba, 0x61, 0xee, 0x73, 0x8e, 0xc6, 0x42, 0x12, + 0x1b, 0x17, 0x24, 0xb3, 0xa2, 0x26, 0x15, 0x87, 0x1f, 0x82, 0x72, 0x17, 0xd9, 0xb8, 0x4b, 0xf5, + 0x92, 0x50, 0x74, 0xc5, 0x54, 0x53, 0x9b, 0xf9, 0x65, 0xde, 0x13, 0x3c, 0xdb, 0x3e, 0x0b, 0x7b, + 0x52, 0xa1, 0x14, 0x52, 0x15, 0x4a, 0x0a, 0xfc, 0x42, 0x03, 0x8b, 0xa8, 0xdb, 0x25, 0x2d, 0xc4, + 0x90, 0xdd, 0xc5, 0x56, 0x16, 0x37, 0xd5, 0x27, 0x84, 0x81, 0x7a, 0xb1, 0x81, 0xad, 0xbe, 0x48, + 0x33, 0x93, 0x90, 0xe6, 0x6a, 0x49, 0x6c, 0x54, 0x51, 0x01, 0xac, 0x18, 0x5f, 0x28, 0xc2, 0xe1, + 0xe7, 0x1a, 0x98, 0x47, 0x47, 0xc8, 0xed, 0x0e, 0x38, 0x32, 0x29, 0x1c, 0xb9, 0x3e, 0xc2, 0x91, + 0x4c, 0x60, 0xc0, 0x8d, 0xf5, 0x24, 0x36, 0x2e, 0xa1, 0x21, 0x50, 0x71, 0x02, 0x0e, 0xa3, 0x30, + 0x00, 0xe7, 0x19, 0x61, 0xa8, 0xab, 0x58, 0x2f, 0x0b, 0xeb, 0x57, 0x8b, 0xad, 0xef, 0x73, 0xe6, + 0x01, 0xcb, 0x97, 0x92, 0xd8, 0xd0, 0x59, 0x0e, 0x50, 0xac, 0xce, 0xe5, 0x11, 0x19, 0xb4, 0xcc, + 0x06, 0x76, 0x14, 0xb3, 0xe7, 0x4e, 0x0c, 0x3a, 0x13, 0x28, 0x0c, 0x7a, 0x08, 0xcc, 0x05, 0x3d, + 0x84, 0x42, 0x1f, 0x5c, 0x08, 0x23, 0xdf, 0x72, 0x1d, 0x6a, 0xd9, 0x3d, 0x8b, 0x32, 0xc4, 0xb0, + 0x3e, 0x25, 0xcc, 0x6f, 0x14, 0x9b, 0x6f, 0x46, 0xfe, 0x8e, 0x43, 0x1b, 0xbd, 0x3d, 0xce, 0x2a, + 0x2d, 0xaf, 0x25, 0xb1, 0xb1, 0x1c, 0xaa, 0x74, 0xc5, 0xe8, 0x6c, 0x0e, 0x80, 0x3f, 0x6a, 0xa0, + 0xea, 0x13, 0xdf, 0x92, 0x0d, 0x6f, 0x15, 0x45, 0x3f, 0x2d, 0xcc, 0xbf, 0x55, 0x6c, 0xfe, 0x01, + 0xf1, 0xb7, 0x84, 0xe8, 0xa8, 0x34, 0x5c, 0x4d, 0x62, 0xe3, 0xdf, 0xfe, 0x68, 0x2e, 0xc5, 0xb5, + 0xb5, 0x13, 0xd8, 0xe0, 0x16, 0x98, 0x8d, 0x7c, 0xda, 0x3a, 0xc0, 0x4e, 0x24, 0xee, 0x89, 0x0e, + 0xd6, 0xb5, 0x8d, 0x29, 0x19, 0x6b, 0x0e, 0x50, 0x63, 0xcd, 0x01, 0xf0, 0x4b, 0x0d, 0x2c, 0x67, + 0x61, 0x59, 0x11, 0x45, 0x6d, 0xcc, 0x73, 0xfc, 0x24, 0xc2, 0x11, 0xd6, 0x2b, 0x27, 0x35, 0x58, + 0xe6, 0xc5, 0x23, 0x2e, 0xd3, 0xe8, 0x3d, 0xe4, 0x12, 0x4a, 0x83, 0x85, 0x05, 0xb0, 0xda, 0x60, + 0x45, 0x38, 0xbc, 0x09, 0xa6, 0x7d, 0xe2, 0x60, 0x8b, 0xf5, 0x02, 0xac, 0xcf, 0x88, 0x91, 0xb5, + 0x94, 0xc4, 0x06, 0xe4, 0xc4, 0xfd, 0x5e, 0xa0, 0x2a, 0x98, 0xca, 0x68, 0xab, 0x08, 0x54, 0x94, + 0x69, 0x02, 0xff, 0x05, 0x4a, 0x87, 0xb8, 0x97, 0x0e, 0xbc, 0x8b, 0x49, 0x6c, 0xcc, 0x1e, 0xe2, + 0x9e, 0x22, 0xc8, 0x51, 0x78, 0x15, 0x4c, 0x1e, 0xa1, 0x6e, 0x84, 0xf5, 0x71, 0xc1, 0x36, 0x9f, + 0xc4, 0xc6, 0x79, 0x41, 0x50, 0x18, 0x25, 0xc7, 0x3b, 0xe3, 0xb7, 0xb4, 0xd5, 0x1f, 0x34, 0xb0, + 0x32, 0x72, 0xa0, 0xbc, 0x99, 0xc5, 0x4f, 0x55, 0x8b, 0x95, 0x4d, 0x53, 0x99, 0xaf, 0xc7, 0xb3, + 0xdd, 0x0c, 0x0e, 0xdb, 0x62, 0xe0, 0x66, 0xc9, 0x31, 0x1f, 0x46, 0xc8, 0x67, 0x2e, 0xeb, 0x9d, + 0xea, 0xe1, 0x0b, 0x0d, 0x2c, 0x8f, 0x98, 0x34, 0x67, 0xc2, 0xbf, 0xef, 0x35, 0x30, 0x5f, 0x30, + 0x8b, 0xce, 0x84, 0x6f, 0x5f, 0xf1, 0xdc, 0x15, 0x77, 0xaa, 0xea, 0xdf, 0xe4, 0x48, 0xff, 0xee, + 0xe4, 0xfd, 0xbb, 0x94, 0x6b, 0x98, 0xdb, 0xc4, 0x0b, 0x22, 0x76, 0x5c, 0x93, 0x53, 0xbd, 0x79, + 0x0a, 0xe0, 0xf0, 0xf8, 0x7a, 0xb3, 0x3c, 0xdd, 0x52, 0xfd, 0x98, 0xdb, 0x9c, 0x15, 0xf9, 0xd8, + 0x25, 0xb6, 0xd0, 0x73, 0xaa, 0xe1, 0xef, 0x34, 0xb0, 0x7e, 0xda, 0xe4, 0xfa, 0x07, 0xf2, 0xf1, + 0x8d, 0x06, 0x56, 0x46, 0xce, 0x9a, 0x37, 0xcb, 0xcb, 0xdf, 0xe9, 0x4f, 0xed, 0xeb, 0x71, 0x70, + 0x7e, 0x40, 0x06, 0xda, 0x60, 0xba, 0xff, 0x34, 0x68, 0x62, 0x6a, 0xfe, 0xf7, 0x24, 0x23, 0xe6, + 0xc0, 0x7b, 0xb0, 0x9c, 0xc4, 0xc6, 0x7c, 0x58, 0x30, 0xfd, 0xfb, 0x6a, 0x79, 0x79, 0xe6, 0xce, + 0x5e, 0xf3, 0xd4, 0x3e, 0x06, 0xd3, 0xdb, 0x7c, 0x15, 0xbe, 0xe7, 0x52, 0x06, 0x77, 0x40, 0x59, + 0xee, 0xc5, 0x69, 0x12, 0xd6, 0x4c, 0x75, 0x67, 0x36, 0x05, 0xe3, 0x1e, 0x7e, 0x12, 0x61, 0xbf, + 0x85, 0xe5, 0xda, 0x27, 0x11, 0x75, 0xed, 0x93, 0x94, 0xda, 0x1f, 0x65, 0x30, 0x73, 0x0f, 0x23, + 0x8a, 0x9b, 0x9c, 0x9f, 0x32, 0xf8, 0x36, 0x38, 0xde, 0xc8, 0x2d, 0xd7, 0x49, 0x83, 0xd6, 0x93, + 0xd8, 0x58, 0xc8, 0xc8, 0x3b, 0x8e, 0xa2, 0x07, 0xf4, 0xa9, 0x7c, 0x09, 0x0e, 0x08, 0xe9, 0xa6, + 0xc3, 0x5e, 0x2c, 0xc1, 0xfc, 0xac, 0x2e, 0xc1, 0xfc, 0x0c, 0x2d, 0xb5, 0x8c, 0xa5, 0x82, 0x05, + 0x43, 0x75, 0xe8, 0x2f, 0xd4, 0x10, 0x46, 0xe0, 0x82, 0xe7, 0xfa, 0xae, 0x17, 0x79, 0x56, 0x87, + 0xd8, 0x16, 0x75, 0x9f, 0xe3, 0x74, 0x8b, 0xbd, 0x3e, 0xda, 0xce, 0x7d, 0x29, 0xc1, 0xfb, 0xd8, + 0x7d, 0x8e, 0x95, 0x15, 0xce, 0xcb, 0x01, 0xea, 0x0a, 0x97, 0x47, 0xe0, 0x07, 0x60, 0x92, 0xbf, + 0x96, 0xd9, 0xa2, 0xba, 0x58, 0xf8, 0xa0, 0xcb, 0x4a, 0x0b, 0x3e, 0xb5, 0xd2, 0x82, 0x00, 0x3b, + 0x60, 0x29, 0xf2, 0x11, 0xa5, 0x6e, 0xdb, 0xc7, 0x8e, 0xf0, 0x3d, 0x5d, 0xc8, 0xd2, 0xed, 0x13, + 0xe6, 0x0b, 0xfd, 0x28, 0x72, 0x9d, 0xc6, 0x95, 0x24, 0x36, 0x2e, 0xf7, 0xa5, 0x76, 0x89, 0x2d, + 0xe7, 0x9a, 0xa2, 0x7d, 0xbe, 0x00, 0x86, 0x77, 0xc0, 0x45, 0x0f, 0x3d, 0xe3, 0x46, 0xa8, 0xc5, + 0x88, 0xd5, 0xe5, 0xb9, 0xd0, 0xcf, 0xad, 0x6b, 0x1b, 0xb3, 0x69, 0xd8, 0xe8, 0xd9, 0x2e, 0xb1, + 0xe9, 0x3e, 0x11, 0x59, 0xca, 0x85, 0x9d, 0x43, 0xce, 0x68, 0xc7, 0x88, 0xa7, 0xb0, 0xa0, 0xa6, + 0x67, 0xa2, 0x9b, 0x7f, 0x1a, 0x07, 0x15, 0x59, 0x09, 0x91, 0x42, 0x78, 0x17, 0x80, 0x7e, 0xb1, + 0x85, 0x6b, 0xc5, 0xb5, 0x16, 0x5b, 0x5a, 0x27, 0x2d, 0xa1, 0xba, 0xa5, 0x65, 0x34, 0xbe, 0x71, + 0xc9, 0xa5, 0x52, 0xd9, 0xb8, 0x9e, 0x0c, 0x2c, 0x85, 0x92, 0x03, 0x5e, 0x03, 0x65, 0x5e, 0x7c, + 0xcc, 0xf4, 0x92, 0xe0, 0x15, 0x83, 0x42, 0x52, 0xd4, 0x41, 0x21, 0x29, 0xbc, 0xb9, 0x23, 0x8a, + 0x43, 0x7d, 0xa2, 0xdf, 0xdc, 0xfc, 0xac, 0x36, 0x37, 0x3f, 0x73, 0xad, 0xed, 0x90, 0x44, 0x81, + 0xec, 0x82, 0x54, 0xab, 0xa4, 0xa8, 0x5a, 0x25, 0x05, 0xbe, 0x0b, 0x4a, 0x1d, 0x62, 0xeb, 0x65, + 0x11, 0xf1, 0x72, 0x3e, 0xe2, 0x3d, 0xf1, 0x23, 0x7f, 0x97, 0xd8, 0xb2, 0x4a, 0x1d, 0x62, 0xab, + 0x55, 0xea, 0x10, 0xbb, 0x46, 0x01, 0xb8, 0x8d, 0xfc, 0x16, 0xee, 0x36, 0x23, 0x9f, 0x42, 0x0c, + 0x16, 0x95, 0x8e, 0xe1, 0x77, 0xba, 0x25, 0xc0, 0x74, 0x48, 0x16, 0xe5, 0xd3, 0x48, 0x62, 0x63, + 0x2d, 0xcb, 0x1d, 0xdd, 0x27, 0x52, 0x9b, 0x62, 0xe6, 0xe2, 0x10, 0x58, 0x7b, 0x0a, 0x2a, 0x1f, + 0x85, 0x98, 0xc3, 0xc2, 0xea, 0x01, 0x58, 0x1a, 0xb0, 0x1a, 0x48, 0xf4, 0x04, 0xb3, 0xe2, 0xe7, + 0x99, 0xa2, 0x39, 0xd5, 0xa7, 0xfe, 0x3c, 0x1b, 0x46, 0x6b, 0x15, 0x30, 0xbd, 0xed, 0x3b, 0xf7, + 0x51, 0x78, 0x88, 0xc3, 0xda, 0x2f, 0xe3, 0x00, 0x8a, 0xbb, 0xb3, 0xc7, 0x42, 0x8c, 0xbc, 0xfb, + 0x98, 0xf2, 0x37, 0x1b, 0x6e, 0x83, 0x49, 0xd9, 0xc8, 0xf2, 0x0e, 0xe9, 0xb9, 0x11, 0xa4, 0xdc, + 0x38, 0x79, 0x31, 0xba, 0xf9, 0xce, 0xbe, 0x3b, 0xd6, 0x94, 0xd2, 0x70, 0x1f, 0x54, 0x64, 0xee, + 0x78, 0x5c, 0x34, 0x6d, 0x82, 0xe5, 0xfc, 0x53, 0x7b, 0x9c, 0x78, 0xf9, 0x3a, 0xb4, 0x8e, 0xcf, + 0x39, 0x85, 0xa0, 0x4f, 0x87, 0xef, 0x81, 0x12, 0xf6, 0x1d, 0x71, 0xdb, 0x2a, 0x9b, 0x4b, 0x39, + 0x6d, 0xc7, 0x81, 0xc9, 0x5a, 0x63, 0xdf, 0xc9, 0x69, 0xe1, 0x72, 0xf0, 0x13, 0x30, 0x93, 0xa6, + 0x56, 0x7a, 0x35, 0x51, 0x10, 0xa2, 0x52, 0x99, 0xc6, 0x4a, 0x12, 0x1b, 0x8b, 0x41, 0x9f, 0x90, + 0xd3, 0x58, 0x51, 0x80, 0xc6, 0x39, 0x30, 0x29, 0xca, 0xb3, 0xf9, 0x42, 0x03, 0x95, 0xed, 0x54, + 0xdd, 0x56, 0xe0, 0xc2, 0x07, 0xe9, 0xe3, 0x28, 0x33, 0x47, 0xe1, 0xca, 0xc8, 0xe7, 0x63, 0xd5, + 0x18, 0x86, 0x72, 0xa5, 0xd9, 0xd0, 0xfe, 0xa7, 0xc1, 0xf7, 0xc1, 0x4c, 0x13, 0x07, 0x24, 0x64, + 0xe2, 0x89, 0xa6, 0x70, 0x20, 0x09, 0xd9, 0x03, 0xbf, 0xba, 0x64, 0xca, 0x6f, 0x5a, 0x66, 0xf6, + 0x4d, 0xcb, 0xdc, 0xe6, 0x7e, 0x37, 0x76, 0x7e, 0x7e, 0x55, 0xd5, 0x5e, 0xbe, 0xaa, 0x6a, 0xbf, + 0xbf, 0xaa, 0x6a, 0xdf, 0xbe, 0xae, 0x8e, 0xbd, 0x7c, 0x5d, 0x1d, 0xfb, 0xf5, 0x75, 0x75, 0xec, + 0xb3, 0x7a, 0xdb, 0x65, 0x07, 0x91, 0x6d, 0xb6, 0x88, 0x97, 0x7e, 0x40, 0x0b, 0x42, 0xd2, 0xc1, + 0x2d, 0x96, 0x9e, 0xea, 0x03, 0x5f, 0xe2, 0xec, 0xb2, 0x50, 0x7d, 0xf3, 0xcf, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x3e, 0x88, 0x10, 0xeb, 0xa3, 0x13, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1046,16 +1050,18 @@ func (m *NodeInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { for k := range m.NonArmadaAllocatedResources { v := m.NonArmadaAllocatedResources[k] baseI := i - { - size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintExecutorapi(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintExecutorapi(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x12 i = encodeVarintExecutorapi(dAtA, i, uint64(k)) i-- dAtA[i] = 0x8 @@ -1085,16 +1091,18 @@ func (m *NodeInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { for k := range m.AllocatedResources { v := m.AllocatedResources[k] baseI := i - { - size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintExecutorapi(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintExecutorapi(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x12 i = encodeVarintExecutorapi(dAtA, i, uint64(k)) i-- dAtA[i] = 0x8 @@ -1107,16 +1115,18 @@ func (m *NodeInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { for k := range m.TotalResources { v := m.TotalResources[k] baseI := i - { - size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintExecutorapi(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintExecutorapi(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) i = encodeVarintExecutorapi(dAtA, i, uint64(len(k))) @@ -1131,16 +1141,18 @@ func (m *NodeInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { for k := range m.AvailableResources { v := m.AvailableResources[k] baseI := i - { - size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintExecutorapi(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintExecutorapi(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) i = encodeVarintExecutorapi(dAtA, i, uint64(len(k))) @@ -1155,16 +1167,18 @@ func (m *NodeInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { for k := range m.AllocatableResources { v := m.AllocatableResources[k] baseI := i - { - size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintExecutorapi(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintExecutorapi(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) i = encodeVarintExecutorapi(dAtA, i, uint64(len(k))) @@ -1242,16 +1256,18 @@ func (m *ComputeResource) MarshalToSizedBuffer(dAtA []byte) (int, error) { for k := range m.Resources { v := m.Resources[k] baseI := i - { - size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintExecutorapi(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintExecutorapi(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) i = encodeVarintExecutorapi(dAtA, i, uint64(len(k))) @@ -1359,16 +1375,18 @@ func (m *LeaseRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { for k := range m.MinimumJobSize { v := m.MinimumJobSize[k] baseI := i - { - size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintExecutorapi(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintExecutorapi(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) i = encodeVarintExecutorapi(dAtA, i, uint64(len(k))) @@ -1383,16 +1401,18 @@ func (m *LeaseRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { for k := range m.Resources { v := m.Resources[k] baseI := i - { - size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintExecutorapi(dAtA, i, uint64(size)) } - i -= size - i = encodeVarintExecutorapi(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) i = encodeVarintExecutorapi(dAtA, i, uint64(len(k))) @@ -1749,8 +1769,12 @@ func (m *NodeInfo) Size() (n int) { for k, v := range m.AllocatableResources { _ = k _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovExecutorapi(uint64(len(k))) + 1 + l + sovExecutorapi(uint64(l)) + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovExecutorapi(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovExecutorapi(uint64(len(k))) + l n += mapEntrySize + 1 + sovExecutorapi(uint64(mapEntrySize)) } } @@ -1758,8 +1782,12 @@ func (m *NodeInfo) Size() (n int) { for k, v := range m.AvailableResources { _ = k _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovExecutorapi(uint64(len(k))) + 1 + l + sovExecutorapi(uint64(l)) + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovExecutorapi(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovExecutorapi(uint64(len(k))) + l n += mapEntrySize + 1 + sovExecutorapi(uint64(mapEntrySize)) } } @@ -1767,8 +1795,12 @@ func (m *NodeInfo) Size() (n int) { for k, v := range m.TotalResources { _ = k _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovExecutorapi(uint64(len(k))) + 1 + l + sovExecutorapi(uint64(l)) + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovExecutorapi(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovExecutorapi(uint64(len(k))) + l n += mapEntrySize + 1 + sovExecutorapi(uint64(mapEntrySize)) } } @@ -1776,8 +1808,12 @@ func (m *NodeInfo) Size() (n int) { for k, v := range m.AllocatedResources { _ = k _ = v - l = v.Size() - mapEntrySize := 1 + sovExecutorapi(uint64(k)) + 1 + l + sovExecutorapi(uint64(l)) + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovExecutorapi(uint64(l)) + } + mapEntrySize := 1 + sovExecutorapi(uint64(k)) + l n += mapEntrySize + 1 + sovExecutorapi(uint64(mapEntrySize)) } } @@ -1793,8 +1829,12 @@ func (m *NodeInfo) Size() (n int) { for k, v := range m.NonArmadaAllocatedResources { _ = k _ = v - l = v.Size() - mapEntrySize := 1 + sovExecutorapi(uint64(k)) + 1 + l + sovExecutorapi(uint64(l)) + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovExecutorapi(uint64(l)) + } + mapEntrySize := 1 + sovExecutorapi(uint64(k)) + l n += mapEntrySize + 1 + sovExecutorapi(uint64(mapEntrySize)) } } @@ -1831,8 +1871,12 @@ func (m *ComputeResource) Size() (n int) { for k, v := range m.Resources { _ = k _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovExecutorapi(uint64(len(k))) + 1 + l + sovExecutorapi(uint64(l)) + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovExecutorapi(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovExecutorapi(uint64(len(k))) + l n += mapEntrySize + 1 + sovExecutorapi(uint64(mapEntrySize)) } } @@ -1872,8 +1916,12 @@ func (m *LeaseRequest) Size() (n int) { for k, v := range m.Resources { _ = k _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovExecutorapi(uint64(len(k))) + 1 + l + sovExecutorapi(uint64(l)) + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovExecutorapi(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovExecutorapi(uint64(len(k))) + l n += mapEntrySize + 1 + sovExecutorapi(uint64(mapEntrySize)) } } @@ -1881,8 +1929,12 @@ func (m *LeaseRequest) Size() (n int) { for k, v := range m.MinimumJobSize { _ = k _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovExecutorapi(uint64(len(k))) + 1 + l + sovExecutorapi(uint64(l)) + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovExecutorapi(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovExecutorapi(uint64(len(k))) + l n += mapEntrySize + 1 + sovExecutorapi(uint64(mapEntrySize)) } } @@ -2045,305 +2097,6 @@ func sovExecutorapi(x uint64) (n int) { func sozExecutorapi(x uint64) (n int) { return sovExecutorapi(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (this *NodeInfo) String() string { - if this == nil { - return "nil" - } - repeatedStringForTaints := "[]Taint{" - for _, f := range this.Taints { - repeatedStringForTaints += fmt.Sprintf("%v", f) + "," - } - repeatedStringForTaints += "}" - keysForLabels := make([]string, 0, len(this.Labels)) - for k, _ := range this.Labels { - keysForLabels = append(keysForLabels, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) - mapStringForLabels := "map[string]string{" - for _, k := range keysForLabels { - mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) - } - mapStringForLabels += "}" - keysForAllocatableResources := make([]string, 0, len(this.AllocatableResources)) - for k, _ := range this.AllocatableResources { - keysForAllocatableResources = append(keysForAllocatableResources, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForAllocatableResources) - mapStringForAllocatableResources := "map[string]resource.Quantity{" - for _, k := range keysForAllocatableResources { - mapStringForAllocatableResources += fmt.Sprintf("%v: %v,", k, this.AllocatableResources[k]) - } - mapStringForAllocatableResources += "}" - keysForAvailableResources := make([]string, 0, len(this.AvailableResources)) - for k, _ := range this.AvailableResources { - keysForAvailableResources = append(keysForAvailableResources, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForAvailableResources) - mapStringForAvailableResources := "map[string]resource.Quantity{" - for _, k := range keysForAvailableResources { - mapStringForAvailableResources += fmt.Sprintf("%v: %v,", k, this.AvailableResources[k]) - } - mapStringForAvailableResources += "}" - keysForTotalResources := make([]string, 0, len(this.TotalResources)) - for k, _ := range this.TotalResources { - keysForTotalResources = append(keysForTotalResources, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForTotalResources) - mapStringForTotalResources := "map[string]resource.Quantity{" - for _, k := range keysForTotalResources { - mapStringForTotalResources += fmt.Sprintf("%v: %v,", k, this.TotalResources[k]) - } - mapStringForTotalResources += "}" - keysForAllocatedResources := make([]int32, 0, len(this.AllocatedResources)) - for k, _ := range this.AllocatedResources { - keysForAllocatedResources = append(keysForAllocatedResources, k) - } - github_com_gogo_protobuf_sortkeys.Int32s(keysForAllocatedResources) - mapStringForAllocatedResources := "map[int32]ComputeResource{" - for _, k := range keysForAllocatedResources { - mapStringForAllocatedResources += fmt.Sprintf("%v: %v,", k, this.AllocatedResources[k]) - } - mapStringForAllocatedResources += "}" - keysForRunIdsByState := make([]string, 0, len(this.RunIdsByState)) - for k, _ := range this.RunIdsByState { - keysForRunIdsByState = append(keysForRunIdsByState, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForRunIdsByState) - mapStringForRunIdsByState := "map[string]api.JobState{" - for _, k := range keysForRunIdsByState { - mapStringForRunIdsByState += fmt.Sprintf("%v: %v,", k, this.RunIdsByState[k]) - } - mapStringForRunIdsByState += "}" - keysForNonArmadaAllocatedResources := make([]int32, 0, len(this.NonArmadaAllocatedResources)) - for k, _ := range this.NonArmadaAllocatedResources { - keysForNonArmadaAllocatedResources = append(keysForNonArmadaAllocatedResources, k) - } - github_com_gogo_protobuf_sortkeys.Int32s(keysForNonArmadaAllocatedResources) - mapStringForNonArmadaAllocatedResources := "map[int32]ComputeResource{" - for _, k := range keysForNonArmadaAllocatedResources { - mapStringForNonArmadaAllocatedResources += fmt.Sprintf("%v: %v,", k, this.NonArmadaAllocatedResources[k]) - } - mapStringForNonArmadaAllocatedResources += "}" - keysForResourceUsageByQueue := make([]string, 0, len(this.ResourceUsageByQueue)) - for k, _ := range this.ResourceUsageByQueue { - keysForResourceUsageByQueue = append(keysForResourceUsageByQueue, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForResourceUsageByQueue) - mapStringForResourceUsageByQueue := "map[string]*ComputeResource{" - for _, k := range keysForResourceUsageByQueue { - mapStringForResourceUsageByQueue += fmt.Sprintf("%v: %v,", k, this.ResourceUsageByQueue[k]) - } - mapStringForResourceUsageByQueue += "}" - s := strings.Join([]string{`&NodeInfo{`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Taints:` + repeatedStringForTaints + `,`, - `Labels:` + mapStringForLabels + `,`, - `AllocatableResources:` + mapStringForAllocatableResources + `,`, - `AvailableResources:` + mapStringForAvailableResources + `,`, - `TotalResources:` + mapStringForTotalResources + `,`, - `AllocatedResources:` + mapStringForAllocatedResources + `,`, - `RunIdsByState:` + mapStringForRunIdsByState + `,`, - `NonArmadaAllocatedResources:` + mapStringForNonArmadaAllocatedResources + `,`, - `Unschedulable:` + fmt.Sprintf("%v", this.Unschedulable) + `,`, - `ResourceUsageByQueue:` + mapStringForResourceUsageByQueue + `,`, - `NodeType:` + fmt.Sprintf("%v", this.NodeType) + `,`, - `}`, - }, "") - return s -} -func (this *ComputeResource) String() string { - if this == nil { - return "nil" - } - keysForResources := make([]string, 0, len(this.Resources)) - for k, _ := range this.Resources { - keysForResources = append(keysForResources, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForResources) - mapStringForResources := "map[string]resource.Quantity{" - for _, k := range keysForResources { - mapStringForResources += fmt.Sprintf("%v: %v,", k, this.Resources[k]) - } - mapStringForResources += "}" - s := strings.Join([]string{`&ComputeResource{`, - `Resources:` + mapStringForResources + `,`, - `}`, - }, "") - return s -} -func (this *EventList) String() string { - if this == nil { - return "nil" - } - repeatedStringForEvents := "[]*EventSequence{" - for _, f := range this.Events { - repeatedStringForEvents += strings.Replace(fmt.Sprintf("%v", f), "EventSequence", "armadaevents.EventSequence", 1) + "," - } - repeatedStringForEvents += "}" - s := strings.Join([]string{`&EventList{`, - `Events:` + repeatedStringForEvents + `,`, - `}`, - }, "") - return s -} -func (this *LeaseRequest) String() string { - if this == nil { - return "nil" - } - repeatedStringForNodes := "[]*NodeInfo{" - for _, f := range this.Nodes { - repeatedStringForNodes += strings.Replace(f.String(), "NodeInfo", "NodeInfo", 1) + "," - } - repeatedStringForNodes += "}" - repeatedStringForUnassignedJobRunIds := "[]Uuid{" - for _, f := range this.UnassignedJobRunIds { - repeatedStringForUnassignedJobRunIds += fmt.Sprintf("%v", f) + "," - } - repeatedStringForUnassignedJobRunIds += "}" - keysForResources := make([]string, 0, len(this.Resources)) - for k, _ := range this.Resources { - keysForResources = append(keysForResources, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForResources) - mapStringForResources := "map[string]resource.Quantity{" - for _, k := range keysForResources { - mapStringForResources += fmt.Sprintf("%v: %v,", k, this.Resources[k]) - } - mapStringForResources += "}" - keysForMinimumJobSize := make([]string, 0, len(this.MinimumJobSize)) - for k, _ := range this.MinimumJobSize { - keysForMinimumJobSize = append(keysForMinimumJobSize, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForMinimumJobSize) - mapStringForMinimumJobSize := "map[string]resource.Quantity{" - for _, k := range keysForMinimumJobSize { - mapStringForMinimumJobSize += fmt.Sprintf("%v: %v,", k, this.MinimumJobSize[k]) - } - mapStringForMinimumJobSize += "}" - s := strings.Join([]string{`&LeaseRequest{`, - `ExecutorId:` + fmt.Sprintf("%v", this.ExecutorId) + `,`, - `Pool:` + fmt.Sprintf("%v", this.Pool) + `,`, - `Resources:` + mapStringForResources + `,`, - `MinimumJobSize:` + mapStringForMinimumJobSize + `,`, - `Nodes:` + repeatedStringForNodes + `,`, - `UnassignedJobRunIds:` + repeatedStringForUnassignedJobRunIds + `,`, - `MaxJobsToLease:` + fmt.Sprintf("%v", this.MaxJobsToLease) + `,`, - `}`, - }, "") - return s -} -func (this *JobRunLease) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&JobRunLease{`, - `JobRunId:` + strings.Replace(fmt.Sprintf("%v", this.JobRunId), "Uuid", "armadaevents.Uuid", 1) + `,`, - `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `Jobset:` + fmt.Sprintf("%v", this.Jobset) + `,`, - `User:` + fmt.Sprintf("%v", this.User) + `,`, - `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, - `Job:` + strings.Replace(fmt.Sprintf("%v", this.Job), "SubmitJob", "armadaevents.SubmitJob", 1) + `,`, - `}`, - }, "") - return s -} -func (this *CancelRuns) String() string { - if this == nil { - return "nil" - } - repeatedStringForJobRunIdsToCancel := "[]*Uuid{" - for _, f := range this.JobRunIdsToCancel { - repeatedStringForJobRunIdsToCancel += strings.Replace(fmt.Sprintf("%v", f), "Uuid", "armadaevents.Uuid", 1) + "," - } - repeatedStringForJobRunIdsToCancel += "}" - s := strings.Join([]string{`&CancelRuns{`, - `JobRunIdsToCancel:` + repeatedStringForJobRunIdsToCancel + `,`, - `}`, - }, "") - return s -} -func (this *PreemptRuns) String() string { - if this == nil { - return "nil" - } - repeatedStringForJobRunIdsToPreempt := "[]*Uuid{" - for _, f := range this.JobRunIdsToPreempt { - repeatedStringForJobRunIdsToPreempt += strings.Replace(fmt.Sprintf("%v", f), "Uuid", "armadaevents.Uuid", 1) + "," - } - repeatedStringForJobRunIdsToPreempt += "}" - s := strings.Join([]string{`&PreemptRuns{`, - `JobRunIdsToPreempt:` + repeatedStringForJobRunIdsToPreempt + `,`, - `}`, - }, "") - return s -} -func (this *EndMarker) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&EndMarker{`, - `}`, - }, "") - return s -} -func (this *LeaseStreamMessage) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&LeaseStreamMessage{`, - `Event:` + fmt.Sprintf("%v", this.Event) + `,`, - `}`, - }, "") - return s -} -func (this *LeaseStreamMessage_Lease) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&LeaseStreamMessage_Lease{`, - `Lease:` + strings.Replace(fmt.Sprintf("%v", this.Lease), "JobRunLease", "JobRunLease", 1) + `,`, - `}`, - }, "") - return s -} -func (this *LeaseStreamMessage_CancelRuns) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&LeaseStreamMessage_CancelRuns{`, - `CancelRuns:` + strings.Replace(fmt.Sprintf("%v", this.CancelRuns), "CancelRuns", "CancelRuns", 1) + `,`, - `}`, - }, "") - return s -} -func (this *LeaseStreamMessage_End) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&LeaseStreamMessage_End{`, - `End:` + strings.Replace(fmt.Sprintf("%v", this.End), "EndMarker", "EndMarker", 1) + `,`, - `}`, - }, "") - return s -} -func (this *LeaseStreamMessage_PreemptRuns) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&LeaseStreamMessage_PreemptRuns{`, - `PreemptRuns:` + strings.Replace(fmt.Sprintf("%v", this.PreemptRuns), "PreemptRuns", "PreemptRuns", 1) + `,`, - `}`, - }, "") - return s -} -func valueToStringExecutorapi(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} func (m *NodeInfo) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -2434,7 +2187,7 @@ func (m *NodeInfo) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Taints = append(m.Taints, v1.Taint{}) + m.Taints = append(m.Taints, &v1.Taint{}) if err := m.Taints[len(m.Taints)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -2596,10 +2349,10 @@ func (m *NodeInfo) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.AllocatableResources == nil { - m.AllocatableResources = make(map[string]resource.Quantity) + m.AllocatableResources = make(map[string]*resource.Quantity) } var mapkey string - mapvalue := &resource.Quantity{} + var mapvalue *resource.Quantity for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -2693,7 +2446,7 @@ func (m *NodeInfo) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.AllocatableResources[mapkey] = *mapvalue + m.AllocatableResources[mapkey] = mapvalue iNdEx = postIndex case 5: if wireType != 2 { @@ -2725,10 +2478,10 @@ func (m *NodeInfo) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.AvailableResources == nil { - m.AvailableResources = make(map[string]resource.Quantity) + m.AvailableResources = make(map[string]*resource.Quantity) } var mapkey string - mapvalue := &resource.Quantity{} + var mapvalue *resource.Quantity for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -2822,7 +2575,7 @@ func (m *NodeInfo) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.AvailableResources[mapkey] = *mapvalue + m.AvailableResources[mapkey] = mapvalue iNdEx = postIndex case 6: if wireType != 2 { @@ -2854,10 +2607,10 @@ func (m *NodeInfo) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.TotalResources == nil { - m.TotalResources = make(map[string]resource.Quantity) + m.TotalResources = make(map[string]*resource.Quantity) } var mapkey string - mapvalue := &resource.Quantity{} + var mapvalue *resource.Quantity for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -2951,7 +2704,7 @@ func (m *NodeInfo) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.TotalResources[mapkey] = *mapvalue + m.TotalResources[mapkey] = mapvalue iNdEx = postIndex case 7: if wireType != 2 { @@ -2983,10 +2736,10 @@ func (m *NodeInfo) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.AllocatedResources == nil { - m.AllocatedResources = make(map[int32]ComputeResource) + m.AllocatedResources = make(map[int32]*ComputeResource) } var mapkey int32 - mapvalue := &ComputeResource{} + var mapvalue *ComputeResource for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -3066,7 +2819,7 @@ func (m *NodeInfo) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.AllocatedResources[mapkey] = *mapvalue + m.AllocatedResources[mapkey] = mapvalue iNdEx = postIndex case 8: if wireType != 2 { @@ -3211,10 +2964,10 @@ func (m *NodeInfo) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.NonArmadaAllocatedResources == nil { - m.NonArmadaAllocatedResources = make(map[int32]ComputeResource) + m.NonArmadaAllocatedResources = make(map[int32]*ComputeResource) } var mapkey int32 - mapvalue := &ComputeResource{} + var mapvalue *ComputeResource for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -3294,7 +3047,7 @@ func (m *NodeInfo) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.NonArmadaAllocatedResources[mapkey] = *mapvalue + m.NonArmadaAllocatedResources[mapkey] = mapvalue iNdEx = postIndex case 10: if wireType != 0 { @@ -3557,10 +3310,10 @@ func (m *ComputeResource) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Resources == nil { - m.Resources = make(map[string]resource.Quantity) + m.Resources = make(map[string]*resource.Quantity) } var mapkey string - mapvalue := &resource.Quantity{} + var mapvalue *resource.Quantity for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -3654,7 +3407,7 @@ func (m *ComputeResource) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.Resources[mapkey] = *mapvalue + m.Resources[mapkey] = mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -3884,10 +3637,10 @@ func (m *LeaseRequest) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Resources == nil { - m.Resources = make(map[string]resource.Quantity) + m.Resources = make(map[string]*resource.Quantity) } var mapkey string - mapvalue := &resource.Quantity{} + var mapvalue *resource.Quantity for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -3981,7 +3734,7 @@ func (m *LeaseRequest) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.Resources[mapkey] = *mapvalue + m.Resources[mapkey] = mapvalue iNdEx = postIndex case 4: if wireType != 2 { @@ -4013,10 +3766,10 @@ func (m *LeaseRequest) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.MinimumJobSize == nil { - m.MinimumJobSize = make(map[string]resource.Quantity) + m.MinimumJobSize = make(map[string]*resource.Quantity) } var mapkey string - mapvalue := &resource.Quantity{} + var mapvalue *resource.Quantity for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -4110,7 +3863,7 @@ func (m *LeaseRequest) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.MinimumJobSize[mapkey] = *mapvalue + m.MinimumJobSize[mapkey] = mapvalue iNdEx = postIndex case 5: if wireType != 2 { @@ -4175,7 +3928,7 @@ func (m *LeaseRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.UnassignedJobRunIds = append(m.UnassignedJobRunIds, armadaevents.Uuid{}) + m.UnassignedJobRunIds = append(m.UnassignedJobRunIds, &armadaevents.Uuid{}) if err := m.UnassignedJobRunIds[len(m.UnassignedJobRunIds)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } diff --git a/pkg/executorapi/executorapi.proto b/pkg/executorapi/executorapi.proto index f86d815a6c7..21d8d98c138 100644 --- a/pkg/executorapi/executorapi.proto +++ b/pkg/executorapi/executorapi.proto @@ -6,38 +6,34 @@ option go_package = "github.com/armadaproject/armada/pkg/executorapi"; import "pkg/armadaevents/events.proto"; import "pkg/api/submit.proto"; import "google/protobuf/empty.proto"; -import "github.com/gogo/protobuf/gogoproto/gogo.proto"; import "k8s.io/api/core/v1/generated.proto"; import "k8s.io/apimachinery/pkg/api/resource/generated.proto"; -option (gogoproto.goproto_stringer_all) = false; -option (gogoproto.stringer_all) = true; - // Used by the scheduler when allocating jobs to executors. message NodeInfo { string name = 1; - repeated k8s.io.api.core.v1.Taint taints = 2 [(gogoproto.nullable) = false]; + repeated k8s.io.api.core.v1.Taint taints = 2; map labels = 3; // To be deprecated in favour of total_resources + allocated_resources. - map allocatable_resources = 4 [(gogoproto.nullable) = false]; + map allocatable_resources = 4; // To be deprecated in favour of total_resources + allocated_resources. - map available_resources = 5 [(gogoproto.nullable) = false]; + map available_resources = 5; // Total node resources. // Resources available for allocation is given by the difference between this and allocated_resources. - map total_resources = 6 [(gogoproto.nullable) = false]; + map total_resources = 6; // Each pod is created with a priority class. Each priority class has an integer priority associated with it. // This is a map from priority to the total amount of resources allocated to pods with that priority. // It is used by the scheduler to decide whether more jobs should be sent to an executor. // In particular, jobs may be sent to an executor even if all resources are allocated // if the sent jobs are of higher priority. - map allocated_resources = 7 [(gogoproto.nullable) = false]; + map allocated_resources = 7; // All run ids of jobs on the node, mapped to their current state // this should be of type armadaevents.uuid, but this creates a circular loop // once the old scheduler has gone, we can correct this - map run_ids_by_state = 8 [(gogoproto.nullable) = false]; + map run_ids_by_state = 8; // The amount of resource allocated to non-armada pods by priority - map non_armada_allocated_resources = 9 [(gogoproto.nullable) = false]; + map non_armada_allocated_resources = 9; bool unschedulable = 10; // This should only be used for metrics // An aggregated real usage of jobs by queue @@ -48,7 +44,7 @@ message NodeInfo { } message ComputeResource { - map resources = 1 [(gogoproto.nullable) = false]; + map resources = 1; } message EventList { @@ -61,16 +57,16 @@ message LeaseRequest{ // Nodes are split into pools. This field indicates for which pool jobs are leased. string pool = 2; // Total resources available for scheduling across all nodes. - map resources = 3 [(gogoproto.nullable) = false]; + map resources = 3; // Jobs submitted to this executor must require at least this amount of resources. - map minimum_job_size = 4 [(gogoproto.nullable) = false]; + map minimum_job_size = 4; // For each node in the cluster: // - The total allocatable resources on that node. // - The job runs running on those nodes, // - Any taints and labels on the node. repeated NodeInfo nodes = 5; // Run Ids of jobs owned by the executor but not currently assigned to a node. - repeated armadaevents.Uuid unassigned_job_run_ids = 6 [(gogoproto.nullable) = false]; + repeated armadaevents.Uuid unassigned_job_run_ids = 6; // Max number of jobs this request should return uint32 max_jobs_to_lease = 7; } diff --git a/pkg/executorapi/util.go b/pkg/executorapi/util.go index 9158088dbf1..751ec123932 100644 --- a/pkg/executorapi/util.go +++ b/pkg/executorapi/util.go @@ -3,6 +3,12 @@ package executorapi import ( "time" + v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + + armadamaps "github.com/armadaproject/armada/internal/common/maps" + armadaslices "github.com/armadaproject/armada/internal/common/slices" + "github.com/pkg/errors" "github.com/armadaproject/armada/internal/common/armadaerrors" @@ -28,20 +34,19 @@ func NewNodeFromNodeInfo(nodeInfo *NodeInfo, executor string, allowedPriorities allocatableByPriorityAndResource := schedulerobjects.NewAllocatableByPriorityAndResourceType( allowedPriorities, - schedulerobjects.ResourceList{ - Resources: nodeInfo.TotalResources, - }, + ResourceListFromProtoResources(nodeInfo.TotalResources), ) for p, rl := range nodeInfo.NonArmadaAllocatedResources { - allocatableByPriorityAndResource.MarkAllocated(p, schedulerobjects.ResourceList{Resources: rl.Resources}) + allocatableByPriorityAndResource.MarkAllocated(p, ResourceListFromProtoResources(rl.Resources)) } nonArmadaAllocatedResources := make(map[int32]schedulerobjects.ResourceList) for p, rl := range nodeInfo.NonArmadaAllocatedResources { - nonArmadaAllocatedResources[p] = schedulerobjects.ResourceList{Resources: rl.Resources} + nonArmadaAllocatedResources[p] = ResourceListFromProtoResources(rl.Resources) } resourceUsageByQueue := make(map[string]*schedulerobjects.ResourceList) for queueName, resourceUsage := range nodeInfo.ResourceUsageByQueue { - resourceUsageByQueue[queueName] = &schedulerobjects.ResourceList{Resources: resourceUsage.Resources} + rl := ResourceListFromProtoResources(resourceUsage.Resources) + resourceUsageByQueue[queueName] = &rl } jobRunsByState := make(map[string]schedulerobjects.JobRunState) @@ -49,13 +54,18 @@ func NewNodeFromNodeInfo(nodeInfo *NodeInfo, executor string, allowedPriorities jobRunsByState[jobId] = api.JobRunStateFromApiJobState(state) } return &schedulerobjects.Node{ - Id: api.NodeIdFromExecutorAndNodeName(executor, nodeInfo.Name), - Name: nodeInfo.Name, - Executor: executor, - LastSeen: lastSeen, - Taints: nodeInfo.GetTaints(), + Id: api.NodeIdFromExecutorAndNodeName(executor, nodeInfo.Name), + Name: nodeInfo.Name, + Executor: executor, + LastSeen: lastSeen, + Taints: armadaslices.Map(nodeInfo.GetTaints(), func(v *v1.Taint) v1.Taint { + if v != nil { + return *v + } + return v1.Taint{} + }), Labels: nodeInfo.GetLabels(), - TotalResources: schedulerobjects.ResourceList{Resources: nodeInfo.TotalResources}, + TotalResources: ResourceListFromProtoResources(nodeInfo.TotalResources), AllocatableByPriorityAndResource: allocatableByPriorityAndResource, NonArmadaAllocatedResources: nonArmadaAllocatedResources, StateByJobRunId: jobRunsByState, @@ -64,3 +74,23 @@ func NewNodeFromNodeInfo(nodeInfo *NodeInfo, executor string, allowedPriorities ReportingNodeType: nodeInfo.NodeType, }, nil } + +func ResourceListFromProtoResources(r map[string]*resource.Quantity) schedulerobjects.ResourceList { + return schedulerobjects.ResourceList{ + Resources: armadamaps.MapValues(r, func(v *resource.Quantity) resource.Quantity { + if v != nil { + return *v + } + return resource.Quantity{} + }), + } +} + +func ComputeResourceFromProtoResources(r map[string]resource.Quantity) *ComputeResource { + resources := make(map[string]*resource.Quantity, len(r)) + for k, v := range r { + r := v.DeepCopy() + resources[k] = &r + } + return &ComputeResource{Resources: resources} +} From 0e4200490cdb94246f0fafeee9370804ff6572e0 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Tue, 2 Jul 2024 18:31:43 +0100 Subject: [PATCH 22/27] remove gogo from testsuite Signed-off-by: Chris Martin --- internal/common/proto/protoutil.go | 18 ++ internal/testsuite/submitter/submitter.go | 3 +- internal/testsuite/testrunner.go | 6 +- pkg/api/testspec.pb.go | 210 ++++++++++------------ pkg/api/testspec.proto | 10 +- 5 files changed, 117 insertions(+), 130 deletions(-) diff --git a/internal/common/proto/protoutil.go b/internal/common/proto/protoutil.go index e5cbba39e47..a5c3f7bdf1a 100644 --- a/internal/common/proto/protoutil.go +++ b/internal/common/proto/protoutil.go @@ -85,8 +85,26 @@ func ToStdTime(ts *types.Timestamp) time.Time { } func ToTimestamp(t time.Time) *types.Timestamp { + types.TimestampNow() return &types.Timestamp{ Seconds: t.Unix(), Nanos: int32(t.Nanosecond()), } } + +func ToStdDuration(pd *types.Duration) time.Duration { + if pd == nil { + return 0 + } + return time.Duration(pd.Seconds)*time.Second + time.Duration(pd.Nanos)*time.Nanosecond +} + +func ToDuration(d time.Duration) *types.Duration { + nanos := d.Nanoseconds() + secs := nanos / 1e9 + nanos -= secs * 1e9 + return &types.Duration{ + Seconds: secs, + Nanos: int32(nanos), + } +} diff --git a/internal/testsuite/submitter/submitter.go b/internal/testsuite/submitter/submitter.go index 3160efc23b2..f7b0cc21587 100644 --- a/internal/testsuite/submitter/submitter.go +++ b/internal/testsuite/submitter/submitter.go @@ -10,6 +10,7 @@ import ( "github.com/pkg/errors" "github.com/armadaproject/armada/internal/common/armadaerrors" + protoutil "github.com/armadaproject/armada/internal/common/proto" "github.com/armadaproject/armada/pkg/api" "github.com/armadaproject/armada/pkg/client" ) @@ -46,7 +47,7 @@ func NewSubmitterFromTestSpec(conn *client.ApiConnectionDetails, testSpec *api.T JobSetName: testSpec.JobSetId, NumBatches: testSpec.NumBatches, BatchSize: testSpec.BatchSize, - Interval: testSpec.Interval, + Interval: protoutil.ToStdDuration(testSpec.Interval), RandomClientId: testSpec.RandomClientId, out: out, } diff --git a/internal/testsuite/testrunner.go b/internal/testsuite/testrunner.go index 92e37ea5668..7f8062248ec 100644 --- a/internal/testsuite/testrunner.go +++ b/internal/testsuite/testrunner.go @@ -12,6 +12,7 @@ import ( "golang.org/x/exp/maps" "golang.org/x/sync/errgroup" + protoutil "github.com/armadaproject/armada/internal/common/proto" "github.com/armadaproject/armada/internal/testsuite/eventbenchmark" "github.com/armadaproject/armada/internal/testsuite/eventlogger" "github.com/armadaproject/armada/internal/testsuite/eventsplitter" @@ -67,8 +68,9 @@ func (srv *TestRunner) Run(ctx context.Context) (err error) { // Optional timeout var cancel context.CancelFunc - if srv.testSpec.Timeout != 0 { - ctx, cancel = context.WithTimeout(ctx, srv.testSpec.Timeout) + timeout := protoutil.ToStdDuration(srv.testSpec.Timeout) + if timeout != 0 { + ctx, cancel = context.WithTimeout(ctx, timeout) } else { ctx, cancel = context.WithCancel(ctx) } diff --git a/pkg/api/testspec.pb.go b/pkg/api/testspec.pb.go index ab9307f5034..289ec2f8389 100644 --- a/pkg/api/testspec.pb.go +++ b/pkg/api/testspec.pb.go @@ -8,21 +8,15 @@ import ( io "io" math "math" math_bits "math/bits" - reflect "reflect" - strings "strings" - time "time" - _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" - _ "github.com/gogo/protobuf/types" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + types "github.com/gogo/protobuf/types" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -83,9 +77,9 @@ type TestSpec struct { BatchSize uint32 `protobuf:"varint,6,opt,name=batch_size,json=batchSize,proto3" json:"batchSize,omitempty"` // Time between batches. // If 0, jobs are submitted as quickly as possible. - Interval time.Duration `protobuf:"bytes,7,opt,name=interval,proto3,stdduration" json:"interval"` + Interval *types.Duration `protobuf:"bytes,7,opt,name=interval,proto3" json:"interval,omitempty"` // Number of seconds to wait for jobs to finish. - Timeout time.Duration `protobuf:"bytes,8,opt,name=timeout,proto3,stdduration" json:"timeout"` + Timeout *types.Duration `protobuf:"bytes,8,opt,name=timeout,proto3" json:"timeout,omitempty"` Cancel TestSpec_Cancel `protobuf:"varint,9,opt,name=cancel,proto3,enum=api.TestSpec_Cancel" json:"cancel,omitempty"` // Test name. Defaults to the filename if not provided. Name string `protobuf:"bytes,10,opt,name=name,proto3" json:"name,omitempty"` @@ -99,8 +93,9 @@ type TestSpec struct { Target string `protobuf:"bytes,14,opt,name=target,proto3" json:"target,omitempty"` } -func (m *TestSpec) Reset() { *m = TestSpec{} } -func (*TestSpec) ProtoMessage() {} +func (m *TestSpec) Reset() { *m = TestSpec{} } +func (m *TestSpec) String() string { return proto.CompactTextString(m) } +func (*TestSpec) ProtoMessage() {} func (*TestSpec) Descriptor() ([]byte, []int) { return fileDescriptor_38d601305b414287, []int{0} } @@ -173,18 +168,18 @@ func (m *TestSpec) GetBatchSize() uint32 { return 0 } -func (m *TestSpec) GetInterval() time.Duration { +func (m *TestSpec) GetInterval() *types.Duration { if m != nil { return m.Interval } - return 0 + return nil } -func (m *TestSpec) GetTimeout() time.Duration { +func (m *TestSpec) GetTimeout() *types.Duration { if m != nil { return m.Timeout } - return 0 + return nil } func (m *TestSpec) GetCancel() TestSpec_Cancel { @@ -237,50 +232,48 @@ func init() { func init() { proto.RegisterFile("pkg/api/testspec.proto", fileDescriptor_38d601305b414287) } var fileDescriptor_38d601305b414287 = []byte{ - // 683 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x94, 0xcf, 0x4e, 0xdb, 0x40, - 0x10, 0xc6, 0xe3, 0x04, 0x9c, 0x64, 0x53, 0x42, 0xd8, 0x04, 0xba, 0xa0, 0xca, 0x8e, 0x38, 0xb4, - 0xa9, 0x44, 0x9d, 0x0a, 0xaa, 0x4a, 0x55, 0x4f, 0x18, 0xa8, 0x9a, 0xfe, 0x17, 0xe1, 0x50, 0x7a, - 0x71, 0x6d, 0x67, 0x6a, 0x36, 0x8d, 0xbd, 0xc6, 0x5e, 0xa3, 0x96, 0x53, 0x1f, 0xa1, 0x47, 0x9e, - 0xa1, 0x4f, 0xc2, 0x91, 0x23, 0x27, 0xb7, 0x0d, 0x37, 0x3f, 0x45, 0x95, 0xb5, 0x0d, 0xe6, 0xd4, - 0xdb, 0xce, 0x6f, 0xbe, 0x6f, 0x76, 0x33, 0x33, 0x31, 0x5a, 0xf1, 0xbf, 0x3a, 0x7d, 0xd3, 0xa7, - 0x7d, 0x0e, 0x21, 0x0f, 0x7d, 0xb0, 0x35, 0x3f, 0x60, 0x9c, 0xe1, 0x8a, 0xe9, 0xd3, 0x35, 0xc5, - 0x61, 0xcc, 0x99, 0x40, 0x5f, 0x20, 0x2b, 0xfa, 0xd2, 0x1f, 0x45, 0x81, 0xc9, 0x29, 0xf3, 0x52, - 0xd1, 0xda, 0x23, 0x87, 0xf2, 0xa3, 0xc8, 0xd2, 0x6c, 0xe6, 0xf6, 0x1d, 0xe6, 0xb0, 0x1b, 0xe1, - 0x2c, 0x12, 0x81, 0x38, 0x65, 0xf2, 0x4e, 0x7e, 0x57, 0x18, 0x59, 0x2e, 0xe5, 0x19, 0x6d, 0xe7, - 0x14, 0x4e, 0xc0, 0xcb, 0xe0, 0xfa, 0x59, 0x15, 0xd5, 0x0e, 0x20, 0xe4, 0x43, 0x1f, 0x6c, 0xbc, - 0x8d, 0xe6, 0xc6, 0xcc, 0x0a, 0x89, 0xd4, 0xad, 0xf4, 0x1a, 0x9b, 0xab, 0x9a, 0xe9, 0x53, 0xed, - 0x15, 0xb3, 0x86, 0xa2, 0xca, 0x3e, 0x1c, 0x47, 0x10, 0xf2, 0x01, 0x07, 0x57, 0xc7, 0x49, 0xac, - 0x36, 0x67, 0xd2, 0x0d, 0xe6, 0x52, 0x0e, 0xae, 0xcf, 0xbf, 0xef, 0x0b, 0x2b, 0xfe, 0x88, 0x16, - 0xe1, 0x9b, 0x0f, 0x36, 0x87, 0x91, 0x21, 0xee, 0x09, 0x49, 0x59, 0x54, 0x5b, 0x12, 0xd5, 0xf6, - 0x66, 0xe8, 0x2d, 0x84, 0xa1, 0xe9, 0x80, 0x7e, 0x2f, 0x89, 0x55, 0x92, 0xab, 0x45, 0xa6, 0x58, - 0xaf, 0x79, 0x3b, 0x83, 0x1f, 0xa2, 0xf9, 0xe3, 0x08, 0x22, 0x20, 0x95, 0xae, 0xd4, 0xab, 0xeb, - 0xed, 0x24, 0x56, 0x17, 0x05, 0x28, 0x78, 0x52, 0x05, 0x7e, 0x82, 0xd0, 0x98, 0x59, 0x46, 0x08, - 0xdc, 0xa0, 0x23, 0x32, 0x27, 0xf4, 0x2b, 0x49, 0xac, 0xe2, 0x31, 0xb3, 0x86, 0xc0, 0x07, 0xa3, - 0x82, 0xa5, 0x96, 0x33, 0xfc, 0x0c, 0x35, 0xbc, 0xc8, 0x35, 0x2c, 0x93, 0xdb, 0x47, 0x10, 0x92, - 0xf9, 0xae, 0xd4, 0x5b, 0xd0, 0x49, 0x12, 0xab, 0x1d, 0x2f, 0x72, 0xf5, 0x94, 0x16, 0x8c, 0xe8, - 0x86, 0xe2, 0xa7, 0x08, 0x09, 0x9b, 0x11, 0xd2, 0x53, 0x20, 0xb2, 0x70, 0xde, 0x4d, 0x62, 0xb5, - 0x2d, 0xe8, 0x90, 0x9e, 0x16, 0x1f, 0x59, 0xbf, 0x86, 0xf8, 0x35, 0xaa, 0x51, 0x8f, 0x43, 0x70, - 0x62, 0x4e, 0x48, 0xb5, 0x2b, 0x89, 0xa6, 0xa7, 0xab, 0xa0, 0xe5, 0x13, 0xd6, 0x76, 0xb3, 0x55, - 0xd0, 0x3b, 0xe7, 0xb1, 0x5a, 0x4a, 0x62, 0xf5, 0xda, 0x72, 0xf6, 0x5b, 0x95, 0xf6, 0xaf, 0x23, - 0xfc, 0x12, 0x55, 0x39, 0x75, 0x81, 0x45, 0x9c, 0xd4, 0xfe, 0x57, 0xab, 0x9d, 0xd5, 0xca, 0x1d, - 0xa2, 0x54, 0x1e, 0x60, 0x1d, 0xc9, 0xb6, 0xe9, 0xd9, 0x30, 0x21, 0xf5, 0xae, 0xd4, 0x6b, 0x6e, - 0x76, 0xc4, 0xec, 0xf2, 0x35, 0xd1, 0x76, 0x44, 0x4e, 0xef, 0x24, 0xb1, 0xda, 0x4a, 0x75, 0x85, - 0x5f, 0x97, 0x39, 0xf1, 0x7d, 0x34, 0xe7, 0x99, 0x2e, 0x10, 0x24, 0xba, 0x2f, 0x16, 0x66, 0x16, - 0x17, 0x17, 0x66, 0x16, 0xe3, 0x17, 0xa8, 0x15, 0x98, 0xde, 0x88, 0xb9, 0x86, 0x3d, 0xa1, 0xe0, - 0x89, 0x89, 0x35, 0xba, 0x52, 0xaf, 0x96, 0xae, 0x47, 0x9a, 0xdb, 0x11, 0xa9, 0x5b, 0x73, 0x6b, - 0xde, 0xce, 0xe0, 0xc7, 0xa8, 0xe6, 0x00, 0x37, 0x26, 0xcc, 0x09, 0xc9, 0x1d, 0xe1, 0x5f, 0x4e, - 0x62, 0x75, 0xc9, 0x01, 0xfe, 0x86, 0x39, 0xc5, 0xb9, 0x55, 0x33, 0x84, 0x9f, 0xa3, 0x06, 0x78, - 0x27, 0x34, 0x60, 0x9e, 0x0b, 0x1e, 0x27, 0x0b, 0xe2, 0xa1, 0xab, 0x49, 0xac, 0x2e, 0x17, 0x70, - 0xc1, 0x58, 0x54, 0xe3, 0x0d, 0x24, 0x73, 0x33, 0x70, 0x80, 0x93, 0xa6, 0xf0, 0x89, 0x66, 0xa4, - 0xa4, 0xd8, 0x8c, 0x94, 0xac, 0x6f, 0x21, 0x39, 0x6d, 0x1a, 0x96, 0x51, 0xf9, 0xdd, 0xfb, 0x56, - 0x09, 0xd7, 0xd1, 0xbc, 0x7e, 0x68, 0x0c, 0x76, 0x5b, 0x12, 0x46, 0x48, 0xd6, 0x0f, 0x8d, 0xe1, - 0xde, 0x41, 0xab, 0x9c, 0x9d, 0x07, 0xbb, 0xc3, 0x56, 0x45, 0xff, 0x7c, 0xf9, 0x57, 0x29, 0xfd, - 0x98, 0x2a, 0xd2, 0xf9, 0x54, 0x91, 0x2e, 0xa6, 0x8a, 0xf4, 0x67, 0xaa, 0x48, 0x3f, 0xaf, 0x94, - 0xd2, 0xc5, 0x95, 0x52, 0xba, 0xbc, 0x52, 0x4a, 0x9f, 0x1e, 0x14, 0x3e, 0x0b, 0x66, 0xe0, 0x9a, - 0x23, 0xd3, 0x0f, 0xd8, 0x18, 0x6c, 0x9e, 0x45, 0xfd, 0xec, 0x1f, 0xff, 0xab, 0xdc, 0xd9, 0x16, - 0xe0, 0x43, 0x9a, 0xd6, 0x06, 0x4c, 0xdb, 0xf6, 0xa9, 0x25, 0x8b, 0xc5, 0xd8, 0xfa, 0x17, 0x00, - 0x00, 0xff, 0xff, 0x6e, 0x14, 0xc2, 0x91, 0x9c, 0x04, 0x00, 0x00, + // 652 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0xc1, 0x4e, 0xdb, 0x4a, + 0x14, 0x86, 0xe3, 0x04, 0x9c, 0x64, 0x72, 0x09, 0x61, 0x08, 0xdc, 0x01, 0x5d, 0xd9, 0x11, 0x8b, + 0x7b, 0x73, 0x25, 0xe4, 0x54, 0x50, 0x55, 0xaa, 0xba, 0xc2, 0x40, 0xa5, 0xa0, 0xd2, 0x56, 0x84, + 0x05, 0x74, 0x63, 0x8d, 0x9d, 0x53, 0x33, 0x69, 0xec, 0x31, 0xf6, 0x18, 0xb5, 0x3c, 0x45, 0x1f, + 0xa0, 0x4f, 0xd0, 0x27, 0xe9, 0x92, 0x65, 0x57, 0x56, 0x05, 0x3b, 0x3f, 0x45, 0x95, 0xb1, 0xdd, + 0x0e, 0xab, 0xee, 0x32, 0xdf, 0xf9, 0xff, 0x93, 0x99, 0xf3, 0x1f, 0xa3, 0xcd, 0xe8, 0x83, 0x3f, + 0xa2, 0x11, 0x1b, 0x09, 0x48, 0x44, 0x12, 0x81, 0x67, 0x45, 0x31, 0x17, 0x1c, 0x37, 0x68, 0xc4, + 0xb6, 0x0d, 0x9f, 0x73, 0x7f, 0x0e, 0x23, 0x89, 0xdc, 0xf4, 0xfd, 0x68, 0x9a, 0xc6, 0x54, 0x30, + 0x1e, 0x16, 0xa2, 0xed, 0x7e, 0x65, 0x4e, 0x52, 0x37, 0x60, 0xa2, 0xa4, 0xeb, 0x15, 0x85, 0x1b, + 0x08, 0x4b, 0xb8, 0xf3, 0xa5, 0x89, 0x5a, 0xe7, 0x90, 0x88, 0x49, 0x04, 0x1e, 0x3e, 0x40, 0x4b, + 0x33, 0xee, 0x26, 0x44, 0x1b, 0x34, 0x86, 0x9d, 0xbd, 0x2d, 0x8b, 0x46, 0xcc, 0x3a, 0xe1, 0xee, + 0x44, 0x76, 0x39, 0x83, 0xeb, 0x14, 0x12, 0x31, 0x16, 0x10, 0xd8, 0x38, 0xcf, 0xcc, 0xee, 0x42, + 0xba, 0xcb, 0x03, 0x26, 0x20, 0x88, 0xc4, 0xa7, 0x33, 0x69, 0xc5, 0x17, 0x68, 0x15, 0x3e, 0x46, + 0xe0, 0x09, 0x98, 0x3a, 0xf2, 0x7f, 0x12, 0x52, 0x97, 0xdd, 0xd6, 0x64, 0xb7, 0xe3, 0x05, 0x3a, + 0x85, 0x24, 0xa1, 0x3e, 0xd8, 0xff, 0xe4, 0x99, 0x49, 0x2a, 0xb5, 0xac, 0xa8, 0xfd, 0xba, 0x8f, + 0x2b, 0xf8, 0x7f, 0xb4, 0x7c, 0x9d, 0x42, 0x0a, 0xa4, 0x31, 0xd0, 0x86, 0x6d, 0x7b, 0x3d, 0xcf, + 0xcc, 0x55, 0x09, 0x14, 0x4f, 0xa1, 0xc0, 0x4f, 0x11, 0x9a, 0x71, 0xd7, 0x49, 0x40, 0x38, 0x6c, + 0x4a, 0x96, 0xa4, 0x7e, 0x33, 0xcf, 0x4c, 0x3c, 0xe3, 0xee, 0x04, 0xc4, 0x78, 0xaa, 0x58, 0x5a, + 0x15, 0xc3, 0xcf, 0x51, 0x27, 0x4c, 0x03, 0xc7, 0xa5, 0xc2, 0xbb, 0x82, 0x84, 0x2c, 0x0f, 0xb4, + 0xe1, 0x8a, 0x4d, 0xf2, 0xcc, 0xec, 0x87, 0x69, 0x60, 0x17, 0x54, 0x31, 0xa2, 0xdf, 0x14, 0x3f, + 0x43, 0x48, 0xda, 0x9c, 0x84, 0xdd, 0x02, 0xd1, 0xa5, 0xf3, 0xef, 0x3c, 0x33, 0xd7, 0x25, 0x9d, + 0xb0, 0x5b, 0xf5, 0x92, 0xed, 0x5f, 0x10, 0x9f, 0xa2, 0x16, 0x0b, 0x05, 0xc4, 0x37, 0x74, 0x4e, + 0x9a, 0x03, 0x4d, 0x0e, 0xbd, 0xc8, 0xd6, 0xaa, 0xb2, 0xb5, 0x8e, 0xca, 0x6c, 0x8b, 0x17, 0x54, + 0x72, 0xf5, 0x05, 0x15, 0xc3, 0x27, 0xa8, 0x29, 0x58, 0x00, 0x3c, 0x15, 0xa4, 0xf5, 0xa7, 0x6e, + 0x1b, 0x79, 0x66, 0xae, 0x95, 0x6a, 0xa5, 0x59, 0xd5, 0x00, 0xdb, 0x48, 0xf7, 0x68, 0xe8, 0xc1, + 0x9c, 0xb4, 0x07, 0xda, 0xb0, 0xbb, 0xd7, 0x97, 0xf9, 0x55, 0xab, 0x62, 0x1d, 0xca, 0x9a, 0xdd, + 0xcf, 0x33, 0xb3, 0x57, 0xe8, 0x94, 0x26, 0xa5, 0x13, 0xff, 0x8b, 0x96, 0x42, 0x1a, 0x00, 0x41, + 0x32, 0x01, 0xb9, 0x34, 0x8b, 0xb3, 0xba, 0x34, 0x8b, 0x33, 0x7e, 0x89, 0x7a, 0x31, 0x0d, 0xa7, + 0x3c, 0x70, 0xbc, 0x39, 0x83, 0x50, 0xa6, 0xd6, 0x19, 0x68, 0xc3, 0x56, 0xb1, 0x22, 0x45, 0xed, + 0x50, 0x96, 0x1e, 0x65, 0xd7, 0x7d, 0x5c, 0xc1, 0x4f, 0x50, 0xcb, 0x07, 0xe1, 0xcc, 0xb9, 0x9f, + 0x90, 0xbf, 0xa4, 0x5f, 0xbe, 0xd2, 0x07, 0xf1, 0x8a, 0xfb, 0x6a, 0x76, 0xcd, 0x12, 0xe1, 0x17, + 0xa8, 0x03, 0xe1, 0x0d, 0x8b, 0x79, 0x18, 0x40, 0x28, 0xc8, 0x8a, 0xbc, 0xe8, 0x56, 0x9e, 0x99, + 0x1b, 0x0a, 0x56, 0x8c, 0xaa, 0x1a, 0xef, 0x22, 0x5d, 0xd0, 0xd8, 0x07, 0x41, 0xba, 0xd2, 0x27, + 0x87, 0x51, 0x10, 0x75, 0x18, 0x05, 0xd9, 0xd9, 0x47, 0x7a, 0x31, 0x34, 0xac, 0xa3, 0xfa, 0xeb, + 0x37, 0xbd, 0x1a, 0x6e, 0xa3, 0x65, 0xfb, 0xd2, 0x19, 0x1f, 0xf5, 0x34, 0x8c, 0x90, 0x6e, 0x5f, + 0x3a, 0x93, 0xe3, 0xf3, 0x5e, 0xbd, 0xfc, 0x3d, 0x3e, 0x9a, 0xf4, 0x1a, 0xf6, 0xc5, 0xb7, 0x7b, + 0x43, 0xbb, 0xbb, 0x37, 0xb4, 0x1f, 0xf7, 0x86, 0xf6, 0xf9, 0xc1, 0xa8, 0xdd, 0x3d, 0x18, 0xb5, + 0xef, 0x0f, 0x46, 0xed, 0xdd, 0x7f, 0x3e, 0x13, 0x57, 0xa9, 0x6b, 0x79, 0x3c, 0x18, 0xd1, 0x38, + 0xa0, 0x53, 0x1a, 0xc5, 0x7c, 0x06, 0x9e, 0x28, 0x4f, 0xa3, 0xf2, 0x6b, 0xff, 0x5a, 0xef, 0x1f, + 0x48, 0xf0, 0xb6, 0x28, 0x5b, 0x63, 0x6e, 0x1d, 0x44, 0xcc, 0xd5, 0xe5, 0x4a, 0xec, 0xff, 0x0c, + 0x00, 0x00, 0xff, 0xff, 0xa5, 0x42, 0x8d, 0x1f, 0x69, 0x04, 0x00, 0x00, } func (m *TestSpec) Marshal() (dAtA []byte, err error) { @@ -349,22 +342,30 @@ func (m *TestSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x48 } - n1, err1 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.Timeout, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.Timeout):]) - if err1 != nil { - return 0, err1 + if m.Timeout != nil { + { + size, err := m.Timeout.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTestspec(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 } - i -= n1 - i = encodeVarintTestspec(dAtA, i, uint64(n1)) - i-- - dAtA[i] = 0x42 - n2, err2 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.Interval, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.Interval):]) - if err2 != nil { - return 0, err2 + if m.Interval != nil { + { + size, err := m.Interval.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTestspec(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a } - i -= n2 - i = encodeVarintTestspec(dAtA, i, uint64(n2)) - i-- - dAtA[i] = 0x3a if m.BatchSize != 0 { i = encodeVarintTestspec(dAtA, i, uint64(m.BatchSize)) i-- @@ -463,10 +464,14 @@ func (m *TestSpec) Size() (n int) { if m.BatchSize != 0 { n += 1 + sovTestspec(uint64(m.BatchSize)) } - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.Interval) - n += 1 + l + sovTestspec(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.Timeout) - n += 1 + l + sovTestspec(uint64(l)) + if m.Interval != nil { + l = m.Interval.Size() + n += 1 + l + sovTestspec(uint64(l)) + } + if m.Timeout != nil { + l = m.Timeout.Size() + n += 1 + l + sovTestspec(uint64(l)) + } if m.Cancel != 0 { n += 1 + sovTestspec(uint64(m.Cancel)) } @@ -497,47 +502,6 @@ func sovTestspec(x uint64) (n int) { func sozTestspec(x uint64) (n int) { return sovTestspec(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (this *TestSpec) String() string { - if this == nil { - return "nil" - } - repeatedStringForJobs := "[]*JobSubmitRequestItem{" - for _, f := range this.Jobs { - repeatedStringForJobs += strings.Replace(fmt.Sprintf("%v", f), "JobSubmitRequestItem", "JobSubmitRequestItem", 1) + "," - } - repeatedStringForJobs += "}" - repeatedStringForExpectedEvents := "[]*EventMessage{" - for _, f := range this.ExpectedEvents { - repeatedStringForExpectedEvents += strings.Replace(fmt.Sprintf("%v", f), "EventMessage", "EventMessage", 1) + "," - } - repeatedStringForExpectedEvents += "}" - s := strings.Join([]string{`&TestSpec{`, - `Jobs:` + repeatedStringForJobs + `,`, - `ExpectedEvents:` + repeatedStringForExpectedEvents + `,`, - `Queue:` + fmt.Sprintf("%v", this.Queue) + `,`, - `JobSetId:` + fmt.Sprintf("%v", this.JobSetId) + `,`, - `NumBatches:` + fmt.Sprintf("%v", this.NumBatches) + `,`, - `BatchSize:` + fmt.Sprintf("%v", this.BatchSize) + `,`, - `Interval:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Interval), "Duration", "types.Duration", 1), `&`, ``, 1) + `,`, - `Timeout:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Timeout), "Duration", "types.Duration", 1), `&`, ``, 1) + `,`, - `Cancel:` + fmt.Sprintf("%v", this.Cancel) + `,`, - `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `RandomClientId:` + fmt.Sprintf("%v", this.RandomClientId) + `,`, - `GetLogs:` + fmt.Sprintf("%v", this.GetLogs) + `,`, - `Environment:` + fmt.Sprintf("%v", this.Environment) + `,`, - `Target:` + fmt.Sprintf("%v", this.Target) + `,`, - `}`, - }, "") - return s -} -func valueToStringTestspec(v interface{}) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("*%v", pv) -} func (m *TestSpec) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -766,7 +730,10 @@ func (m *TestSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.Interval, dAtA[iNdEx:postIndex]); err != nil { + if m.Interval == nil { + m.Interval = &types.Duration{} + } + if err := m.Interval.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -799,7 +766,10 @@ func (m *TestSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.Timeout, dAtA[iNdEx:postIndex]); err != nil { + if m.Timeout == nil { + m.Timeout = &types.Duration{} + } + if err := m.Timeout.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/pkg/api/testspec.proto b/pkg/api/testspec.proto index 64e8ff5264b..afa616bdd7c 100644 --- a/pkg/api/testspec.proto +++ b/pkg/api/testspec.proto @@ -5,13 +5,9 @@ option go_package = "github.com/armadaproject/armada/pkg/api"; option csharp_namespace = "ArmadaProject.Io.Api"; import "google/protobuf/duration.proto"; -import "github.com/gogo/protobuf/gogoproto/gogo.proto"; import "pkg/api/submit.proto"; import "pkg/api/event.proto"; -option (gogoproto.goproto_stringer_all) = false; -option (gogoproto.stringer_all) = true; - // Defines a test case for the Armada test suite. // Defined as a proto message to enable unmarshalling oneof fields. message TestSpec { @@ -33,9 +29,9 @@ message TestSpec { uint32 batch_size = 6; // Time between batches. // If 0, jobs are submitted as quickly as possible. - google.protobuf.Duration interval = 7 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.Duration interval = 7; // Number of seconds to wait for jobs to finish. - google.protobuf.Duration timeout = 8 [(gogoproto.stdduration) = true, (gogoproto.nullable) = false]; + google.protobuf.Duration timeout = 8; // If the jobs in this spec. should be cancelled. enum Cancel { NO = 0; // Do not cancel jobs. @@ -54,4 +50,4 @@ message TestSpec { string environment = 13; // Value of the target label set on exported Prometheus metrics. string target = 14; -} \ No newline at end of file +} From 9b0b3b29695a166522f82d096c969980e6510206 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Tue, 2 Jul 2024 18:51:51 +0100 Subject: [PATCH 23/27] executor Signed-off-by: Chris Martin --- internal/executor/util/uuid_test.go | 14 +++++++------- internal/scheduler/api_test.go | 4 ++-- pkg/executorapi/util.go | 15 +++++++-------- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/internal/executor/util/uuid_test.go b/internal/executor/util/uuid_test.go index 72f263c5efb..20c94cd397a 100644 --- a/internal/executor/util/uuid_test.go +++ b/internal/executor/util/uuid_test.go @@ -1,6 +1,8 @@ package util import ( + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "testing" "github.com/armadaproject/armada/pkg/armadaevents" @@ -29,15 +31,13 @@ func TestStringUuidsToUuids(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := StringUuidsToUuids(tt.uuidStrings) - if (err != nil) != tt.wantErr { - t.Errorf("StringUuidsToUuids() error = %v, wantErr %v", err, tt.wantErr) - return + if tt.wantErr { + require.Error(t, err) + } else { + require.NoError(t, err) } - for i, v := range got { - if v != tt.want[i] { - t.Errorf("StringUuidsToUuids() = %v, want %v", v, tt.want[i]) - } + assert.Equal(t, tt.want[i], v) } }) } diff --git a/internal/scheduler/api_test.go b/internal/scheduler/api_test.go index b4c8f4c6362..4b080235a52 100644 --- a/internal/scheduler/api_test.go +++ b/internal/scheduler/api_test.go @@ -71,7 +71,7 @@ func TestExecutorApi_LeaseJobRuns(t *testing.T) { Id: "test-executor-test-node", Name: "test-node", Executor: "test-executor", - TotalResources: schedulerobjects.ResourceList{}, + TotalResources: schedulerobjects.NewResourceList(0), StateByJobRunId: map[string]schedulerobjects.JobRunState{runId1.String(): schedulerobjects.JobRunState_RUNNING, runId2.String(): schedulerobjects.JobRunState_RUNNING}, NonArmadaAllocatedResources: map[int32]schedulerobjects.ResourceList{}, AllocatableByPriorityAndResource: map[int32]schedulerobjects.ResourceList{ @@ -87,7 +87,7 @@ func TestExecutorApi_LeaseJobRuns(t *testing.T) { ReportingNodeType: "node-type-1", }, }, - MinimumJobSize: schedulerobjects.ResourceList{}, + MinimumJobSize: schedulerobjects.NewResourceList(0), LastUpdateTime: testClock.Now().UTC(), UnassignedJobRuns: []string{runId3.String()}, } diff --git a/pkg/executorapi/util.go b/pkg/executorapi/util.go index 751ec123932..c7751511a7b 100644 --- a/pkg/executorapi/util.go +++ b/pkg/executorapi/util.go @@ -6,7 +6,6 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" - armadamaps "github.com/armadaproject/armada/internal/common/maps" armadaslices "github.com/armadaproject/armada/internal/common/slices" "github.com/pkg/errors" @@ -76,14 +75,14 @@ func NewNodeFromNodeInfo(nodeInfo *NodeInfo, executor string, allowedPriorities } func ResourceListFromProtoResources(r map[string]*resource.Quantity) schedulerobjects.ResourceList { - return schedulerobjects.ResourceList{ - Resources: armadamaps.MapValues(r, func(v *resource.Quantity) resource.Quantity { - if v != nil { - return *v - } - return resource.Quantity{} - }), + resources := make(map[string]resource.Quantity, len(r)) + for k, v := range r { + if v != nil { + r := v.DeepCopy() + resources[k] = r + } } + return schedulerobjects.ResourceList{Resources: resources} } func ComputeResourceFromProtoResources(r map[string]resource.Quantity) *ComputeResource { From 167825bbd223e9932d8273696ae10029aa474dc6 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Tue, 2 Jul 2024 18:52:29 +0100 Subject: [PATCH 24/27] lint Signed-off-by: Chris Martin --- internal/executor/util/uuid_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/executor/util/uuid_test.go b/internal/executor/util/uuid_test.go index 20c94cd397a..6b61154d03f 100644 --- a/internal/executor/util/uuid_test.go +++ b/internal/executor/util/uuid_test.go @@ -1,9 +1,10 @@ package util import ( + "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "testing" "github.com/armadaproject/armada/pkg/armadaevents" ) From b4b28c3ee388269c02084d6c023bcc263616dd13 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Thu, 4 Jul 2024 11:47:22 +0100 Subject: [PATCH 25/27] unit test Signed-off-by: Chris Martin --- internal/common/proto/protoutil.go | 11 -------- internal/common/proto/protoutil_test.go | 35 +++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/internal/common/proto/protoutil.go b/internal/common/proto/protoutil.go index a5c3f7bdf1a..2caaa235f01 100644 --- a/internal/common/proto/protoutil.go +++ b/internal/common/proto/protoutil.go @@ -85,7 +85,6 @@ func ToStdTime(ts *types.Timestamp) time.Time { } func ToTimestamp(t time.Time) *types.Timestamp { - types.TimestampNow() return &types.Timestamp{ Seconds: t.Unix(), Nanos: int32(t.Nanosecond()), @@ -98,13 +97,3 @@ func ToStdDuration(pd *types.Duration) time.Duration { } return time.Duration(pd.Seconds)*time.Second + time.Duration(pd.Nanos)*time.Nanosecond } - -func ToDuration(d time.Duration) *types.Duration { - nanos := d.Nanoseconds() - secs := nanos / 1e9 - nanos -= secs * 1e9 - return &types.Duration{ - Seconds: secs, - Nanos: int32(nanos), - } -} diff --git a/internal/common/proto/protoutil_test.go b/internal/common/proto/protoutil_test.go index cc6bca52841..46cd1d98241 100644 --- a/internal/common/proto/protoutil_test.go +++ b/internal/common/proto/protoutil_test.go @@ -105,6 +105,41 @@ func TestToTimestamp(t *testing.T) { } } +func TestToDuration(t *testing.T) { + tests := map[string]struct { + protoDuration *types.Duration + stdDuration time.Duration + }{ + "empty": { + protoDuration: &types.Duration{Seconds: 0, Nanos: 0}, + stdDuration: 0 * time.Second, + }, + "seconds": { + protoDuration: &types.Duration{Seconds: 100, Nanos: 0}, + stdDuration: 100 * time.Second, + }, + "seconds and nanos": { + protoDuration: &types.Duration{Seconds: 100, Nanos: 1000}, + stdDuration: 100*time.Second + 1000*time.Nanosecond, + }, + "negative": { + protoDuration: &types.Duration{Seconds: -100, Nanos: -1000}, + stdDuration: -100*time.Second - 1000*time.Nanosecond, + }, + "nil": { + protoDuration: nil, + stdDuration: 0 * time.Second, + }, + } + types.TimestampNow() + for name, tc := range tests { + t.Run(name, func(t *testing.T) { + assert.Equal(t, tc.stdDuration, ToStdDuration(tc.protoDuration)) + }) + } + +} + func utcDate(year, month, day int) time.Time { return time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.UTC) } From a86eb0dd72469decd5c98ad1a3cdb53fd060df89 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Thu, 4 Jul 2024 11:56:12 +0100 Subject: [PATCH 26/27] added test Signed-off-by: Chris Martin --- pkg/executorapi/util_test.go | 48 ++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 pkg/executorapi/util_test.go diff --git a/pkg/executorapi/util_test.go b/pkg/executorapi/util_test.go new file mode 100644 index 00000000000..aea8181cbe5 --- /dev/null +++ b/pkg/executorapi/util_test.go @@ -0,0 +1,48 @@ +package executorapi + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "k8s.io/apimachinery/pkg/api/resource" + + "github.com/armadaproject/armada/internal/scheduler/schedulerobjects" +) + +func TestComputeResourceFromProtoResources(t *testing.T) { + oneCpu := resource.MustParse("1") + oneGi := resource.MustParse("1Gi") + + input := map[string]resource.Quantity{ + "cpu": resource.MustParse("1"), + "memory": resource.MustParse("1Gi"), + } + + expected := &ComputeResource{ + Resources: map[string]*resource.Quantity{ + "cpu": &oneCpu, + "memory": &oneGi, + }, + } + actual := ComputeResourceFromProtoResources(input) + assert.Equal(t, actual, expected) +} + +func TestResourceListFromProtoResources(t *testing.T) { + oneCpu := resource.MustParse("1") + oneGi := resource.MustParse("1Gi") + + input := map[string]*resource.Quantity{ + "cpu": &oneCpu, + "memory": &oneGi, + } + expected := schedulerobjects.ResourceList{ + Resources: map[string]resource.Quantity{ + "cpu": resource.MustParse("1"), + "memory": resource.MustParse("1Gi"), + }, + } + + actual := ResourceListFromProtoResources(input) + assert.Equal(t, actual, expected) +} From 3ccf658ec251010a5a1f8df13745e5807c46fe48 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Thu, 4 Jul 2024 11:59:10 +0100 Subject: [PATCH 27/27] lint Signed-off-by: Chris Martin --- internal/common/proto/protoutil_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/common/proto/protoutil_test.go b/internal/common/proto/protoutil_test.go index 46cd1d98241..6d384f32cb7 100644 --- a/internal/common/proto/protoutil_test.go +++ b/internal/common/proto/protoutil_test.go @@ -137,7 +137,6 @@ func TestToDuration(t *testing.T) { assert.Equal(t, tc.stdDuration, ToStdDuration(tc.protoDuration)) }) } - } func utcDate(year, month, day int) time.Time {