diff --git a/go.mod b/go.mod index c0d82c3fbf..2be8dd878f 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/go-logr/zapr v0.4.0 github.com/google/go-cmp v0.5.2 github.com/kevinburke/go-bindata v3.11.0+incompatible - github.com/openshift/api v0.0.0-20210405165116-47be53705a13 + github.com/openshift/api v0.0.0-20210415190711-38058be7d6ef github.com/openshift/build-machinery-go v0.0.0-20210409131504-b1828cc0cdad github.com/openshift/library-go v0.0.0-20210331235027-66936e2fcc52 github.com/pkg/errors v0.9.1 diff --git a/go.sum b/go.sum index f1c6acfbb1..aef18440b9 100644 --- a/go.sum +++ b/go.sum @@ -481,8 +481,8 @@ github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQ github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/openshift/api v0.0.0-20210331162552-3e31249e6a55/go.mod h1:dZ4kytOo3svxJHNYd0J55hwe/6IQG5gAUHUE0F3Jkio= github.com/openshift/api v0.0.0-20210331193751-3acddb19d360/go.mod h1:dZ4kytOo3svxJHNYd0J55hwe/6IQG5gAUHUE0F3Jkio= -github.com/openshift/api v0.0.0-20210405165116-47be53705a13 h1:/om0/+5m4SY41YngmEjV53cqeamZ2BE5Qfz7QCXA8BQ= -github.com/openshift/api v0.0.0-20210405165116-47be53705a13/go.mod h1:dZ4kytOo3svxJHNYd0J55hwe/6IQG5gAUHUE0F3Jkio= +github.com/openshift/api v0.0.0-20210415190711-38058be7d6ef h1:fRI8eMn+jg3SwrA3tnrKqbYS1EVESlehVzghhQ2Oyl4= +github.com/openshift/api v0.0.0-20210415190711-38058be7d6ef/go.mod h1:dZ4kytOo3svxJHNYd0J55hwe/6IQG5gAUHUE0F3Jkio= github.com/openshift/build-machinery-go v0.0.0-20210209125900-0da259a2c359/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE= github.com/openshift/build-machinery-go v0.0.0-20210409131504-b1828cc0cdad h1:3sJkKZdEapxFstGRRycvL1VPJ1gT5/fpfV//KejKmzQ= github.com/openshift/build-machinery-go v0.0.0-20210409131504-b1828cc0cdad/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE= diff --git a/pkg/operator/controller/ingress/load_balancer_service.go b/pkg/operator/controller/ingress/load_balancer_service.go index 0caf8f8424..b19667e6e7 100644 --- a/pkg/operator/controller/ingress/load_balancer_service.go +++ b/pkg/operator/controller/ingress/load_balancer_service.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "strconv" + "strings" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" @@ -25,6 +26,13 @@ import ( ) const ( + // awsLBAdditionalResourceTags is a comma separated list of + // Key=Value pairs that are additionally recorded on + // load balancer resources and security groups. + // + // https://kubernetes.io/docs/concepts/services-networking/service/#aws-load-balancer-additional-resource-tags + awsLBAdditionalResourceTags = "service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags" + // awsLBProxyProtocolAnnotation is used to enable the PROXY protocol on any // AWS load balancer services created. // @@ -261,6 +269,19 @@ func desiredLoadBalancerService(ci *operatorv1.IngressController, deploymentRef } else { service.Annotations[awsLBHealthCheckIntervalAnnotation] = awsLBHealthCheckIntervalDefault } + + if platform.AWS != nil && len(platform.AWS.ResourceTags) > 0 { + var additionalTags []string + for _, userTag := range platform.AWS.ResourceTags { + if len(userTag.Key) > 0 { + additionalTags = append(additionalTags, userTag.Key+"="+userTag.Value) + } + } + if len(additionalTags) > 0 { + service.Annotations[awsLBAdditionalResourceTags] = strings.Join(additionalTags, ",") + } + } + // Set the load balancer for AWS to be as aggressive as Azure (2 fail @ 5s interval, 2 healthy) service.Annotations[awsLBHealthCheckTimeoutAnnotation] = awsLBHealthCheckTimeoutDefault service.Annotations[awsLBHealthCheckUnhealthyThresholdAnnotation] = awsLBHealthCheckUnhealthyThresholdDefault diff --git a/pkg/operator/controller/ingress/load_balancer_service_test.go b/pkg/operator/controller/ingress/load_balancer_service_test.go index 1284632251..4c371fad9b 100644 --- a/pkg/operator/controller/ingress/load_balancer_service_test.go +++ b/pkg/operator/controller/ingress/load_balancer_service_test.go @@ -2,9 +2,10 @@ package ingress import ( "fmt" - corev1 "k8s.io/api/core/v1" "testing" + corev1 "k8s.io/api/core/v1" + configv1 "github.com/openshift/api/config/v1" operatorv1 "github.com/openshift/api/operator/v1" @@ -14,12 +15,14 @@ import ( func TestDesiredLoadBalancerService(t *testing.T) { testCases := []struct { - description string - platform configv1.PlatformType - strategyType operatorv1.EndpointPublishingStrategyType - lbStrategy operatorv1.LoadBalancerStrategy - proxyNeeded bool - expect bool + description string + platform configv1.PlatformType + strategyType operatorv1.EndpointPublishingStrategyType + lbStrategy operatorv1.LoadBalancerStrategy + proxyNeeded bool + expect bool + platformStatus configv1.PlatformStatus + expectedResourceTags string }{ { description: "external classic load balancer with scope for aws platform", @@ -31,6 +34,30 @@ func TestDesiredLoadBalancerService(t *testing.T) { proxyNeeded: true, expect: true, }, + { + description: "external classic load balancer with scope for aws platform and custom user tags", + platform: configv1.AWSPlatformType, + strategyType: operatorv1.LoadBalancerServiceStrategyType, + lbStrategy: operatorv1.LoadBalancerStrategy{ + Scope: operatorv1.ExternalLoadBalancer, + }, + proxyNeeded: true, + expect: true, + platformStatus: configv1.PlatformStatus{ + AWS: &configv1.AWSPlatformStatus{ + ResourceTags: []configv1.AWSResourceTag{{ + Key: "classic-load-balancer-key-with-value", + Value: "100", + }, { + Key: "classic-load-balancer-key-with-empty-value", + Value: "", + }, { + Value: "classic-load-balancer-value-without-key", + }}, + }, + }, + expectedResourceTags: "classic-load-balancer-key-with-value=100,classic-load-balancer-key-with-empty-value=", + }, { description: "external classic load balancer without scope for aws platform", platform: configv1.AWSPlatformType, @@ -86,6 +113,37 @@ func TestDesiredLoadBalancerService(t *testing.T) { proxyNeeded: false, expect: true, }, + { + description: "external network load balancer with scope for aws platform and custom user tags", + platform: configv1.AWSPlatformType, + strategyType: operatorv1.LoadBalancerServiceStrategyType, + lbStrategy: operatorv1.LoadBalancerStrategy{ + Scope: operatorv1.ExternalLoadBalancer, + ProviderParameters: &operatorv1.ProviderLoadBalancerParameters{ + Type: operatorv1.AWSLoadBalancerProvider, + AWS: &operatorv1.AWSLoadBalancerParameters{ + Type: operatorv1.AWSNetworkLoadBalancer, + }, + }, + }, + proxyNeeded: false, + expect: true, + + platformStatus: configv1.PlatformStatus{ + AWS: &configv1.AWSPlatformStatus{ + ResourceTags: []configv1.AWSResourceTag{{ + Key: "network-load-balancer-key-with-value", + Value: "200", + }, { + Key: "network-load-balancer-key-with-empty-value", + Value: "", + }, { + Value: "network-load-balancer-value-without-key", + }}, + }, + }, + expectedResourceTags: "network-load-balancer-key-with-value=200,network-load-balancer-key-with-empty-value=", + }, { description: "nodePort service for aws platform", platform: configv1.AWSPlatformType, @@ -219,11 +277,10 @@ func TestDesiredLoadBalancerService(t *testing.T) { } infraConfig := &configv1.Infrastructure{ Status: configv1.InfrastructureStatus{ - PlatformStatus: &configv1.PlatformStatus{ - Type: tc.platform, - }, + PlatformStatus: &tc.platformStatus, }, } + infraConfig.Status.PlatformStatus.Type = tc.platform proxyNeeded, err := IsProxyProtocolNeeded(ic, infraConfig.Status.PlatformStatus) switch { @@ -265,6 +322,15 @@ func TestDesiredLoadBalancerService(t *testing.T) { classicLB := tc.lbStrategy.ProviderParameters == nil || tc.lbStrategy.ProviderParameters.AWS.Type == operatorv1.AWSClassicLoadBalancer switch { case classicLB: + if len(tc.expectedResourceTags) > 0 { + if err := checkServiceHasAnnotation(svc, awsLBAdditionalResourceTags, true, tc.expectedResourceTags); err != nil { + t.Errorf("annotation check for test %q failed: %v, unexpected value", tc.description, err) + } + } else { + if err := checkServiceHasAnnotation(svc, awsLBAdditionalResourceTags, false, ""); err == nil { + t.Errorf("annotation check for test %q failed; unexpected annotation %s", tc.description, awsLBAdditionalResourceTags) + } + } if err := checkServiceHasAnnotation(svc, awsLBHealthCheckIntervalAnnotation, true, awsLBHealthCheckIntervalDefault); err != nil { t.Errorf("annotation check for test %q failed: %v", tc.description, err) } @@ -272,6 +338,15 @@ func TestDesiredLoadBalancerService(t *testing.T) { t.Errorf("annotation check for test %q failed: %v", tc.description, err) } case tc.lbStrategy.ProviderParameters.AWS.Type == operatorv1.AWSNetworkLoadBalancer: + if len(tc.expectedResourceTags) > 0 { + if err := checkServiceHasAnnotation(svc, awsLBAdditionalResourceTags, true, tc.expectedResourceTags); err != nil { + t.Errorf("annotation check for test %q failed: %v, unexpected value", tc.description, err) + } + } else { + if err := checkServiceHasAnnotation(svc, awsLBAdditionalResourceTags, false, ""); err == nil { + t.Errorf("annotation check for test %q failed; unexpected annotation %s", tc.description, awsLBAdditionalResourceTags) + } + } if err := checkServiceHasAnnotation(svc, awsLBHealthCheckIntervalAnnotation, true, awsLBHealthCheckIntervalNLB); err != nil { t.Errorf("annotation check for test %q failed: %v", tc.description, err) } diff --git a/vendor/github.com/openshift/api/Makefile b/vendor/github.com/openshift/api/Makefile index df3697c8d7..8a25ed492e 100644 --- a/vendor/github.com/openshift/api/Makefile +++ b/vendor/github.com/openshift/api/Makefile @@ -20,6 +20,7 @@ CONTROLLER_GEN_VERSION :=v0.2.5 # $3 - manifests # $4 - output $(call add-crd-gen,authorization,./authorization/v1,./authorization/v1,./authorization/v1) +$(call add-crd-gen,apiserver,./apiserver/v1,./apiserver/v1,./apiserver/v1) $(call add-crd-gen,config,./config/v1,./config/v1,./config/v1) $(call add-crd-gen,helm,./helm/v1beta1,./helm/v1beta1,./helm/v1beta1) $(call add-crd-gen,console,./console/v1,./console/v1,./console/v1) @@ -32,6 +33,7 @@ $(call add-crd-gen,quota,./quota/v1,./quota/v1,./quota/v1) $(call add-crd-gen,samples,./samples/v1,./samples/v1,./samples/v1) $(call add-crd-gen,security,./security/v1,./security/v1,./security/v1) $(call add-crd-gen,securityinternal,./securityinternal/v1,./securityinternal/v1,./securityinternal/v1) +$(call add-crd-gen,cloudnetwork,./cloudnetwork/v1,./cloudnetwork/v1,./cloudnetwork/v1) $(call add-crd-gen,network,./network/v1,./network/v1,./network/v1) $(call add-crd-gen,networkoperator,./networkoperator/v1,./networkoperator/v1,./networkoperator/v1) $(call add-crd-gen,operatorcontrolplane,./operatorcontrolplane/v1alpha1,./operatorcontrolplane/v1alpha1,./operatorcontrolplane/v1alpha1) @@ -45,6 +47,7 @@ verify-scripts: bash -x hack/verify-swagger-docs.sh hack/verify-crds.sh bash -x hack/verify-types.sh + hack/verify-crds-version-upgrade.sh .PHONY: verify-scripts verify: verify-scripts verify-codegen-crds diff --git a/vendor/github.com/openshift/api/apiserver/install.go b/vendor/github.com/openshift/api/apiserver/install.go new file mode 100644 index 0000000000..c0cf2ac29c --- /dev/null +++ b/vendor/github.com/openshift/api/apiserver/install.go @@ -0,0 +1,22 @@ +package apiserver + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + + v1 "github.com/openshift/api/apiserver/v1" +) + +var ( + schemeBuilder = runtime.NewSchemeBuilder(v1.Install) + // Install is a function which adds every version of this group to a scheme + Install = schemeBuilder.AddToScheme +) + +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: "apiserver.openshift.io", Resource: resource} +} + +func Kind(kind string) schema.GroupKind { + return schema.GroupKind{Group: "apiserver.openshift.io", Kind: kind} +} diff --git a/vendor/github.com/openshift/api/apiserver/v1/apiserver.openshift.io_deprecatedapirequests.yaml b/vendor/github.com/openshift/api/apiserver/v1/apiserver.openshift.io_deprecatedapirequests.yaml new file mode 100644 index 0000000000..89beaaa9d5 --- /dev/null +++ b/vendor/github.com/openshift/api/apiserver/v1/apiserver.openshift.io_deprecatedapirequests.yaml @@ -0,0 +1,247 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + name: deprecatedapirequests.apiserver.openshift.io +spec: + group: apiserver.openshift.io + names: + kind: DeprecatedAPIRequest + listKind: DeprecatedAPIRequestList + plural: deprecatedapirequests + singular: deprecatedapirequest + scope: Cluster + versions: + - name: v1 + schema: + openAPIV3Schema: + description: DeprecatedAPIRequest tracts requests made to a deprecated API. + The instance name should be of the form `resource.version.group`, matching + the deprecated resource. + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec defines the characteristics of the resource. + type: object + properties: + removedRelease: + description: removedRelease is when the API will be removed. + type: string + maxLength: 64 + minLength: 3 + pattern: ^[0-9][0-9]*\.[0-9][0-9]*$ + status: + description: status contains the observed state of the resource. + type: object + properties: + conditions: + description: conditions contains details of the current status of + this API Resource. + type: array + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + type FooStatus struct{ // Represents the observations of a + foo's current state. // Known .status.conditions.type are: + \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type + \ // +patchStrategy=merge // +listType=map // +listMapKey=type + \ Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` + \n // other fields }" + type: object + required: + - lastTransitionTime + - message + - reason + - status + - type + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + type: string + format: date-time + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + type: string + maxLength: 32768 + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + type: integer + format: int64 + minimum: 0 + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers + of specific condition types may define expected values and + meanings for this field, and whether the values are considered + a guaranteed API. The value should be a CamelCase string. + This field may not be empty. + type: string + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + status: + description: status of the condition, one of True, False, Unknown. + type: string + enum: + - "True" + - "False" + - Unknown + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + type: string + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + requestsLast24h: + description: requestsLast24h contains request history for the last + 24 hours, indexed by the hour, so 12:00AM-12:59 is in index 0, 6am-6:59am + is index 6, etc. The index of the current hour is updated live and + then duplicated into the requestsLastHour field. + type: array + items: + description: RequestLog logs request for various nodes. + type: object + properties: + nodes: + description: nodes contains logs of requests per node. + type: array + items: + description: NodeRequestLog contains logs of requests to a + certain node. + type: object + properties: + lastUpdate: + description: lastUpdate should *always* being within the + hour this is for. This is a time indicating the last + moment the server is recording for, not the actual update + time. + type: string + format: date-time + nodeName: + description: nodeName where the request are being handled. + type: string + users: + description: users contains request details by top 10 + users. Note that because in the case of an apiserver + restart the list of top 10 users is determined on a + best-effort basis, the list might be imprecise. + type: array + items: + description: RequestUser contains logs of a user's requests. + type: object + properties: + count: + description: count of requests. + type: integer + requests: + description: requests details by verb. + type: array + items: + description: RequestCount counts requests by API + request verb. + type: object + properties: + count: + description: count of requests for verb. + type: integer + verb: + description: verb of API request (get, list, + create, etc...) + type: string + username: + description: userName that made the request. + type: string + requestsLastHour: + description: requestsLastHour contains request history for the current + hour. This is porcelain to make the API easier to read by humans + seeing if they addressed a problem. This field is reset on the hour. + type: object + properties: + nodes: + description: nodes contains logs of requests per node. + type: array + items: + description: NodeRequestLog contains logs of requests to a certain + node. + type: object + properties: + lastUpdate: + description: lastUpdate should *always* being within the + hour this is for. This is a time indicating the last + moment the server is recording for, not the actual update + time. + type: string + format: date-time + nodeName: + description: nodeName where the request are being handled. + type: string + users: + description: users contains request details by top 10 users. + Note that because in the case of an apiserver restart + the list of top 10 users is determined on a best-effort + basis, the list might be imprecise. + type: array + items: + description: RequestUser contains logs of a user's requests. + type: object + properties: + count: + description: count of requests. + type: integer + requests: + description: requests details by verb. + type: array + items: + description: RequestCount counts requests by API + request verb. + type: object + properties: + count: + description: count of requests for verb. + type: integer + verb: + description: verb of API request (get, list, + create, etc...) + type: string + username: + description: userName that made the request. + type: string + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/vendor/github.com/openshift/api/apiserver/v1/doc.go b/vendor/github.com/openshift/api/apiserver/v1/doc.go new file mode 100644 index 0000000000..cc6a8aa617 --- /dev/null +++ b/vendor/github.com/openshift/api/apiserver/v1/doc.go @@ -0,0 +1,8 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +kubebuilder:validation:Optional +// +groupName=apiserver.openshift.io +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/apiserver/v1/register.go b/vendor/github.com/openshift/api/apiserver/v1/register.go new file mode 100644 index 0000000000..82d3584c41 --- /dev/null +++ b/vendor/github.com/openshift/api/apiserver/v1/register.go @@ -0,0 +1,38 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "apiserver.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &DeprecatedAPIRequest{}, + &DeprecatedAPIRequestList{}, + ) + metav1.AddToGroupVersion(scheme, GroupVersion) + return nil +} diff --git a/vendor/github.com/openshift/api/apiserver/v1/types_deprecatedapirequest.go b/vendor/github.com/openshift/api/apiserver/v1/types_deprecatedapirequest.go new file mode 100644 index 0000000000..9caf3f6ab4 --- /dev/null +++ b/vendor/github.com/openshift/api/apiserver/v1/types_deprecatedapirequest.go @@ -0,0 +1,114 @@ +// Package v1 is an api version in the apiserver.openshift.io group +package v1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope="Cluster" +// +kubebuilder:subresource:status +// +genclient:nonNamespaced + +// DeprecatedAPIRequest tracts requests made to a deprecated API. The instance name should +// be of the form `resource.version.group`, matching the deprecated resource. +type DeprecatedAPIRequest struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // spec defines the characteristics of the resource. + // +kubebuilder:validation:Required + // +required + Spec DeprecatedAPIRequestSpec `json:"spec"` + + // status contains the observed state of the resource. + Status DeprecatedAPIRequestStatus `json:"status,omitempty"` +} + +type DeprecatedAPIRequestSpec struct { + // removedRelease is when the API will be removed. + // +kubebuilder:validation:Pattern=^[0-9][0-9]*\.[0-9][0-9]*$ + // +kubebuilder:validation:MinLength=3 + // +kubebuilder:validation:MaxLength=64 + // +required + RemovedRelease string `json:"removedRelease"` +} + +// +k8s:deepcopy-gen=true +type DeprecatedAPIRequestStatus struct { + + // conditions contains details of the current status of this API Resource. + // +patchMergeKey=type + // +patchStrategy=merge + Conditions []metav1.Condition `json:"conditions"` + + // requestsLastHour contains request history for the current hour. This is porcelain to make the API + // easier to read by humans seeing if they addressed a problem. This field is reset on the hour. + RequestsLastHour RequestLog `json:"requestsLastHour"` + + // requestsLast24h contains request history for the last 24 hours, indexed by the hour, so + // 12:00AM-12:59 is in index 0, 6am-6:59am is index 6, etc. The index of the current hour + // is updated live and then duplicated into the requestsLastHour field. + RequestsLast24h []RequestLog `json:"requestsLast24h"` +} + +// RequestLog logs request for various nodes. +type RequestLog struct { + + // nodes contains logs of requests per node. + Nodes []NodeRequestLog `json:"nodes"` +} + +// NodeRequestLog contains logs of requests to a certain node. +type NodeRequestLog struct { + + // nodeName where the request are being handled. + NodeName string `json:"nodeName"` + + // lastUpdate should *always* being within the hour this is for. This is a time indicating + // the last moment the server is recording for, not the actual update time. + LastUpdate metav1.Time `json:"lastUpdate"` + + // users contains request details by top 10 users. Note that because in the case of an apiserver + // restart the list of top 10 users is determined on a best-effort basis, the list might be imprecise. + Users []RequestUser `json:"users"` +} + +type DeprecatedAPIRequestConditionType string + +const ( + // UsedInPastDay condition indicates a request has been made against the deprecated api in the last 24h. + UsedInPastDay DeprecatedAPIRequestConditionType = "UsedInPastDay" +) + +// RequestUser contains logs of a user's requests. +type RequestUser struct { + + // userName that made the request. + UserName string `json:"username"` + + // count of requests. + Count int `json:"count"` + + // requests details by verb. + Requests []RequestCount `json:"requests"` +} + +// RequestCount counts requests by API request verb. +type RequestCount struct { + + // verb of API request (get, list, create, etc...) + Verb string `json:"verb"` + + // count of requests for verb. + Count int `json:"count"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// DeprecatedAPIRequestList is a list of DeprecatedAPIRequest resources. +type DeprecatedAPIRequestList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []DeprecatedAPIRequest `json:"items"` +} diff --git a/vendor/github.com/openshift/api/apiserver/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/apiserver/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000..3fb611c1bb --- /dev/null +++ b/vendor/github.com/openshift/api/apiserver/v1/zz_generated.deepcopy.go @@ -0,0 +1,202 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeprecatedAPIRequest) DeepCopyInto(out *DeprecatedAPIRequest) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeprecatedAPIRequest. +func (in *DeprecatedAPIRequest) DeepCopy() *DeprecatedAPIRequest { + if in == nil { + return nil + } + out := new(DeprecatedAPIRequest) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DeprecatedAPIRequest) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeprecatedAPIRequestList) DeepCopyInto(out *DeprecatedAPIRequestList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DeprecatedAPIRequest, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeprecatedAPIRequestList. +func (in *DeprecatedAPIRequestList) DeepCopy() *DeprecatedAPIRequestList { + if in == nil { + return nil + } + out := new(DeprecatedAPIRequestList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DeprecatedAPIRequestList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeprecatedAPIRequestSpec) DeepCopyInto(out *DeprecatedAPIRequestSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeprecatedAPIRequestSpec. +func (in *DeprecatedAPIRequestSpec) DeepCopy() *DeprecatedAPIRequestSpec { + if in == nil { + return nil + } + out := new(DeprecatedAPIRequestSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeprecatedAPIRequestStatus) DeepCopyInto(out *DeprecatedAPIRequestStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]metav1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + in.RequestsLastHour.DeepCopyInto(&out.RequestsLastHour) + if in.RequestsLast24h != nil { + in, out := &in.RequestsLast24h, &out.RequestsLast24h + *out = make([]RequestLog, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeprecatedAPIRequestStatus. +func (in *DeprecatedAPIRequestStatus) DeepCopy() *DeprecatedAPIRequestStatus { + if in == nil { + return nil + } + out := new(DeprecatedAPIRequestStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodeRequestLog) DeepCopyInto(out *NodeRequestLog) { + *out = *in + in.LastUpdate.DeepCopyInto(&out.LastUpdate) + if in.Users != nil { + in, out := &in.Users, &out.Users + *out = make([]RequestUser, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeRequestLog. +func (in *NodeRequestLog) DeepCopy() *NodeRequestLog { + if in == nil { + return nil + } + out := new(NodeRequestLog) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RequestCount) DeepCopyInto(out *RequestCount) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RequestCount. +func (in *RequestCount) DeepCopy() *RequestCount { + if in == nil { + return nil + } + out := new(RequestCount) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RequestLog) DeepCopyInto(out *RequestLog) { + *out = *in + if in.Nodes != nil { + in, out := &in.Nodes, &out.Nodes + *out = make([]NodeRequestLog, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RequestLog. +func (in *RequestLog) DeepCopy() *RequestLog { + if in == nil { + return nil + } + out := new(RequestLog) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RequestUser) DeepCopyInto(out *RequestUser) { + *out = *in + if in.Requests != nil { + in, out := &in.Requests, &out.Requests + *out = make([]RequestCount, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RequestUser. +func (in *RequestUser) DeepCopy() *RequestUser { + if in == nil { + return nil + } + out := new(RequestUser) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/apiserver/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/apiserver/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000..66f3dc582a --- /dev/null +++ b/vendor/github.com/openshift/api/apiserver/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,91 @@ +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_DeprecatedAPIRequest = map[string]string{ + "": "DeprecatedAPIRequest tracts requests made to a deprecated API. The instance name should be of the form `resource.version.group`, matching the deprecated resource.", + "spec": "spec defines the characteristics of the resource.", + "status": "status contains the observed state of the resource.", +} + +func (DeprecatedAPIRequest) SwaggerDoc() map[string]string { + return map_DeprecatedAPIRequest +} + +var map_DeprecatedAPIRequestList = map[string]string{ + "": "DeprecatedAPIRequestList is a list of DeprecatedAPIRequest resources.", +} + +func (DeprecatedAPIRequestList) SwaggerDoc() map[string]string { + return map_DeprecatedAPIRequestList +} + +var map_DeprecatedAPIRequestSpec = map[string]string{ + "removedRelease": "removedRelease is when the API will be removed.", +} + +func (DeprecatedAPIRequestSpec) SwaggerDoc() map[string]string { + return map_DeprecatedAPIRequestSpec +} + +var map_DeprecatedAPIRequestStatus = map[string]string{ + "conditions": "conditions contains details of the current status of this API Resource.", + "requestsLastHour": "requestsLastHour contains request history for the current hour. This is porcelain to make the API easier to read by humans seeing if they addressed a problem. This field is reset on the hour.", + "requestsLast24h": "requestsLast24h contains request history for the last 24 hours, indexed by the hour, so 12:00AM-12:59 is in index 0, 6am-6:59am is index 6, etc. The index of the current hour is updated live and then duplicated into the requestsLastHour field.", +} + +func (DeprecatedAPIRequestStatus) SwaggerDoc() map[string]string { + return map_DeprecatedAPIRequestStatus +} + +var map_NodeRequestLog = map[string]string{ + "": "NodeRequestLog contains logs of requests to a certain node.", + "nodeName": "nodeName where the request are being handled.", + "lastUpdate": "lastUpdate should *always* being within the hour this is for. This is a time indicating the last moment the server is recording for, not the actual update time.", + "users": "users contains request details by top 10 users. Note that because in the case of an apiserver restart the list of top 10 users is determined on a best-effort basis, the list might be imprecise.", +} + +func (NodeRequestLog) SwaggerDoc() map[string]string { + return map_NodeRequestLog +} + +var map_RequestCount = map[string]string{ + "": "RequestCount counts requests by API request verb.", + "verb": "verb of API request (get, list, create, etc...)", + "count": "count of requests for verb.", +} + +func (RequestCount) SwaggerDoc() map[string]string { + return map_RequestCount +} + +var map_RequestLog = map[string]string{ + "": "RequestLog logs request for various nodes.", + "nodes": "nodes contains logs of requests per node.", +} + +func (RequestLog) SwaggerDoc() map[string]string { + return map_RequestLog +} + +var map_RequestUser = map[string]string{ + "": "RequestUser contains logs of a user's requests.", + "username": "userName that made the request.", + "count": "count of requests.", + "requests": "requests details by verb.", +} + +func (RequestUser) SwaggerDoc() map[string]string { + return map_RequestUser +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/api/build/v1/generated.pb.go b/vendor/github.com/openshift/api/build/v1/generated.pb.go index 561e1c6430..54ddd2c22a 100644 --- a/vendor/github.com/openshift/api/build/v1/generated.pb.go +++ b/vendor/github.com/openshift/api/build/v1/generated.pb.go @@ -1237,10 +1237,38 @@ func (m *ImageSourcePath) XXX_DiscardUnknown() { var xxx_messageInfo_ImageSourcePath proto.InternalMessageInfo +func (m *ImageStreamTagReference) Reset() { *m = ImageStreamTagReference{} } +func (*ImageStreamTagReference) ProtoMessage() {} +func (*ImageStreamTagReference) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{43} +} +func (m *ImageStreamTagReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageStreamTagReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageStreamTagReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageStreamTagReference.Merge(m, src) +} +func (m *ImageStreamTagReference) XXX_Size() int { + return m.Size() +} +func (m *ImageStreamTagReference) XXX_DiscardUnknown() { + xxx_messageInfo_ImageStreamTagReference.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageStreamTagReference proto.InternalMessageInfo + func (m *JenkinsPipelineBuildStrategy) Reset() { *m = JenkinsPipelineBuildStrategy{} } func (*JenkinsPipelineBuildStrategy) ProtoMessage() {} func (*JenkinsPipelineBuildStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_2ba579f6f004cb75, []int{43} + return fileDescriptor_2ba579f6f004cb75, []int{44} } func (m *JenkinsPipelineBuildStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1268,7 +1296,7 @@ var xxx_messageInfo_JenkinsPipelineBuildStrategy proto.InternalMessageInfo func (m *OptionalNodeSelector) Reset() { *m = OptionalNodeSelector{} } func (*OptionalNodeSelector) ProtoMessage() {} func (*OptionalNodeSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_2ba579f6f004cb75, []int{44} + return fileDescriptor_2ba579f6f004cb75, []int{45} } func (m *OptionalNodeSelector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1296,7 +1324,7 @@ var xxx_messageInfo_OptionalNodeSelector proto.InternalMessageInfo func (m *ProxyConfig) Reset() { *m = ProxyConfig{} } func (*ProxyConfig) ProtoMessage() {} func (*ProxyConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_2ba579f6f004cb75, []int{45} + return fileDescriptor_2ba579f6f004cb75, []int{46} } func (m *ProxyConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1324,7 +1352,7 @@ var xxx_messageInfo_ProxyConfig proto.InternalMessageInfo func (m *SecretBuildSource) Reset() { *m = SecretBuildSource{} } func (*SecretBuildSource) ProtoMessage() {} func (*SecretBuildSource) Descriptor() ([]byte, []int) { - return fileDescriptor_2ba579f6f004cb75, []int{46} + return fileDescriptor_2ba579f6f004cb75, []int{47} } func (m *SecretBuildSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1352,7 +1380,7 @@ var xxx_messageInfo_SecretBuildSource proto.InternalMessageInfo func (m *SecretLocalReference) Reset() { *m = SecretLocalReference{} } func (*SecretLocalReference) ProtoMessage() {} func (*SecretLocalReference) Descriptor() ([]byte, []int) { - return fileDescriptor_2ba579f6f004cb75, []int{47} + return fileDescriptor_2ba579f6f004cb75, []int{48} } func (m *SecretLocalReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1380,7 +1408,7 @@ var xxx_messageInfo_SecretLocalReference proto.InternalMessageInfo func (m *SecretSpec) Reset() { *m = SecretSpec{} } func (*SecretSpec) ProtoMessage() {} func (*SecretSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_2ba579f6f004cb75, []int{48} + return fileDescriptor_2ba579f6f004cb75, []int{49} } func (m *SecretSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1408,7 +1436,7 @@ var xxx_messageInfo_SecretSpec proto.InternalMessageInfo func (m *SourceBuildStrategy) Reset() { *m = SourceBuildStrategy{} } func (*SourceBuildStrategy) ProtoMessage() {} func (*SourceBuildStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_2ba579f6f004cb75, []int{49} + return fileDescriptor_2ba579f6f004cb75, []int{50} } func (m *SourceBuildStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1436,7 +1464,7 @@ var xxx_messageInfo_SourceBuildStrategy proto.InternalMessageInfo func (m *SourceControlUser) Reset() { *m = SourceControlUser{} } func (*SourceControlUser) ProtoMessage() {} func (*SourceControlUser) Descriptor() ([]byte, []int) { - return fileDescriptor_2ba579f6f004cb75, []int{50} + return fileDescriptor_2ba579f6f004cb75, []int{51} } func (m *SourceControlUser) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1464,7 +1492,7 @@ var xxx_messageInfo_SourceControlUser proto.InternalMessageInfo func (m *SourceRevision) Reset() { *m = SourceRevision{} } func (*SourceRevision) ProtoMessage() {} func (*SourceRevision) Descriptor() ([]byte, []int) { - return fileDescriptor_2ba579f6f004cb75, []int{51} + return fileDescriptor_2ba579f6f004cb75, []int{52} } func (m *SourceRevision) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1492,7 +1520,7 @@ var xxx_messageInfo_SourceRevision proto.InternalMessageInfo func (m *SourceStrategyOptions) Reset() { *m = SourceStrategyOptions{} } func (*SourceStrategyOptions) ProtoMessage() {} func (*SourceStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_2ba579f6f004cb75, []int{52} + return fileDescriptor_2ba579f6f004cb75, []int{53} } func (m *SourceStrategyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1520,7 +1548,7 @@ var xxx_messageInfo_SourceStrategyOptions proto.InternalMessageInfo func (m *StageInfo) Reset() { *m = StageInfo{} } func (*StageInfo) ProtoMessage() {} func (*StageInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_2ba579f6f004cb75, []int{53} + return fileDescriptor_2ba579f6f004cb75, []int{54} } func (m *StageInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1548,7 +1576,7 @@ var xxx_messageInfo_StageInfo proto.InternalMessageInfo func (m *StepInfo) Reset() { *m = StepInfo{} } func (*StepInfo) ProtoMessage() {} func (*StepInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_2ba579f6f004cb75, []int{54} + return fileDescriptor_2ba579f6f004cb75, []int{55} } func (m *StepInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1576,7 +1604,7 @@ var xxx_messageInfo_StepInfo proto.InternalMessageInfo func (m *WebHookTrigger) Reset() { *m = WebHookTrigger{} } func (*WebHookTrigger) ProtoMessage() {} func (*WebHookTrigger) Descriptor() ([]byte, []int) { - return fileDescriptor_2ba579f6f004cb75, []int{55} + return fileDescriptor_2ba579f6f004cb75, []int{56} } func (m *WebHookTrigger) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1645,6 +1673,7 @@ func init() { proto.RegisterType((*ImageLabel)(nil), "github.com.openshift.api.build.v1.ImageLabel") proto.RegisterType((*ImageSource)(nil), "github.com.openshift.api.build.v1.ImageSource") proto.RegisterType((*ImageSourcePath)(nil), "github.com.openshift.api.build.v1.ImageSourcePath") + proto.RegisterType((*ImageStreamTagReference)(nil), "github.com.openshift.api.build.v1.ImageStreamTagReference") proto.RegisterType((*JenkinsPipelineBuildStrategy)(nil), "github.com.openshift.api.build.v1.JenkinsPipelineBuildStrategy") proto.RegisterType((*OptionalNodeSelector)(nil), "github.com.openshift.api.build.v1.OptionalNodeSelector") proto.RegisterMapType((map[string]string)(nil), "github.com.openshift.api.build.v1.OptionalNodeSelector.ItemsEntry") @@ -1666,268 +1695,271 @@ func init() { } var fileDescriptor_2ba579f6f004cb75 = []byte{ - // 4171 bytes of a gzipped FileDescriptorProto + // 4210 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5b, 0x4d, 0x6c, 0x1c, 0x47, 0x76, 0x56, 0xcf, 0x0f, 0x39, 0xf3, 0x86, 0xe2, 0x4f, 0x51, 0xb2, 0x46, 0x5a, 0x2d, 0x47, 0x6e, 0xc7, 0x86, 0x1c, 0xdb, 0xc3, 0xa5, 0x56, 0x52, 0xb4, 0x36, 0xb2, 0x01, 0x87, 0xa4, 0x64, 0x6a, 0x47, 0x12, 0x51, 0x43, 0xcb, 0xce, 0x5a, 0xd8, 0xa4, 0xd9, 0x53, 0x33, 0x6c, 0x73, 0xa6, 0x7b, 0xdc, 0xd5, 0x43, 0x9b, 0x0b, 0x04, 0x30, 0x02, 0x2c, 0x92, 0xf5, 0x5e, 0xb2, 0x97, 0x45, 0x92, - 0x4b, 0x12, 0x04, 0x39, 0xe5, 0x94, 0x43, 0x80, 0x05, 0xf6, 0x12, 0x20, 0x8b, 0xc0, 0x87, 0x04, - 0xd8, 0x20, 0x01, 0x62, 0x20, 0x8b, 0x41, 0xcc, 0x1c, 0x72, 0x0b, 0x90, 0xab, 0x0e, 0x41, 0x50, - 0x3f, 0xdd, 0x5d, 0xd5, 0xd3, 0x43, 0xf5, 0x50, 0x5a, 0x65, 0x9d, 0xdc, 0x38, 0xef, 0xe7, 0x7b, - 0xd5, 0x55, 0xaf, 0x5e, 0xbd, 0xf7, 0xaa, 0x08, 0x6b, 0x5d, 0x27, 0xd8, 0x1f, 0xee, 0xd5, 0x6d, - 0xaf, 0xbf, 0xea, 0x0d, 0x88, 0x4b, 0xf7, 0x9d, 0x4e, 0xb0, 0x6a, 0x0d, 0x9c, 0xd5, 0xbd, 0xa1, - 0xd3, 0x6b, 0xaf, 0x1e, 0xae, 0xad, 0x76, 0x89, 0x4b, 0x7c, 0x2b, 0x20, 0xed, 0xfa, 0xc0, 0xf7, - 0x02, 0x0f, 0xbd, 0x18, 0xab, 0xd4, 0x23, 0x95, 0xba, 0x35, 0x70, 0xea, 0x5c, 0xa5, 0x7e, 0xb8, - 0x76, 0xe9, 0x0d, 0x05, 0xb5, 0xeb, 0x75, 0xbd, 0x55, 0xae, 0xb9, 0x37, 0xec, 0xf0, 0x5f, 0xfc, - 0x07, 0xff, 0x4b, 0x20, 0x5e, 0x32, 0x0f, 0x6e, 0xd1, 0xba, 0xe3, 0x71, 0xb3, 0xb6, 0xe7, 0x93, - 0x14, 0xab, 0x97, 0xae, 0xc7, 0x32, 0x7d, 0xcb, 0xde, 0x77, 0x5c, 0xe2, 0x1f, 0xad, 0x0e, 0x0e, - 0xba, 0x8c, 0x40, 0x57, 0xfb, 0x24, 0xb0, 0xd2, 0xb4, 0x6e, 0x4e, 0xd2, 0xf2, 0x87, 0x6e, 0xe0, - 0xf4, 0xc9, 0x2a, 0xb5, 0xf7, 0x49, 0xdf, 0x4a, 0xea, 0x99, 0x7f, 0x53, 0x80, 0x8b, 0x0d, 0xc7, - 0xb5, 0xfc, 0xa3, 0x06, 0xfb, 0x26, 0x4c, 0x3e, 0x1c, 0x12, 0x1a, 0x3c, 0x18, 0x04, 0x8e, 0xe7, - 0x52, 0xf4, 0xdb, 0x50, 0x62, 0x06, 0xdb, 0x56, 0x60, 0x55, 0x8d, 0x2b, 0xc6, 0xd5, 0xca, 0xb5, - 0xaf, 0xd5, 0x85, 0xa1, 0xba, 0x6a, 0xa8, 0x3e, 0x38, 0xe8, 0x32, 0x02, 0xad, 0x33, 0xe9, 0xfa, + 0x4b, 0x12, 0x04, 0x39, 0xe5, 0x94, 0x43, 0x80, 0x0d, 0xf6, 0x12, 0x20, 0x7b, 0xf0, 0x21, 0x01, + 0x36, 0x48, 0x80, 0x18, 0xc8, 0x62, 0x10, 0x33, 0x87, 0xdc, 0x02, 0xe4, 0xaa, 0x43, 0x10, 0xd4, + 0x4f, 0x77, 0x57, 0xf5, 0xf4, 0x50, 0x3d, 0x94, 0xac, 0x6c, 0xb2, 0xb7, 0xe9, 0x7a, 0xef, 0x7d, + 0xaf, 0x7e, 0x5e, 0xbd, 0x7a, 0xef, 0x55, 0x0d, 0xac, 0x75, 0x9d, 0x60, 0x7f, 0xb8, 0x57, 0xb7, + 0xbd, 0xfe, 0xaa, 0x37, 0x20, 0x2e, 0xdd, 0x77, 0x3a, 0xc1, 0xaa, 0x35, 0x70, 0x56, 0xf7, 0x86, + 0x4e, 0xaf, 0xbd, 0x7a, 0xb8, 0xb6, 0xda, 0x25, 0x2e, 0xf1, 0xad, 0x80, 0xb4, 0xeb, 0x03, 0xdf, + 0x0b, 0x3c, 0xf4, 0x62, 0x2c, 0x52, 0x8f, 0x44, 0xea, 0xd6, 0xc0, 0xa9, 0x73, 0x91, 0xfa, 0xe1, + 0xda, 0xa5, 0x37, 0x14, 0xd4, 0xae, 0xd7, 0xf5, 0x56, 0xb9, 0xe4, 0xde, 0xb0, 0xc3, 0xbf, 0xf8, + 0x07, 0xff, 0x25, 0x10, 0x2f, 0x99, 0x07, 0xb7, 0x68, 0xdd, 0xf1, 0xb8, 0x5a, 0xdb, 0xf3, 0x49, + 0x8a, 0xd6, 0x4b, 0xd7, 0x63, 0x9e, 0xbe, 0x65, 0xef, 0x3b, 0x2e, 0xf1, 0x8f, 0x56, 0x07, 0x07, + 0x5d, 0xd6, 0x40, 0x57, 0xfb, 0x24, 0xb0, 0xd2, 0xa4, 0x6e, 0x4e, 0x92, 0xf2, 0x87, 0x6e, 0xe0, + 0xf4, 0xc9, 0x2a, 0xb5, 0xf7, 0x49, 0xdf, 0x4a, 0xca, 0x99, 0x7f, 0x5b, 0x80, 0x8b, 0x0d, 0xc7, + 0xb5, 0xfc, 0xa3, 0x06, 0x1b, 0x13, 0x26, 0x1f, 0x0e, 0x09, 0x0d, 0x1e, 0x0c, 0x02, 0xc7, 0x73, + 0x29, 0xfa, 0x6d, 0x28, 0x31, 0x85, 0x6d, 0x2b, 0xb0, 0xaa, 0xc6, 0x15, 0xe3, 0x6a, 0xe5, 0xda, + 0xd7, 0xea, 0x42, 0x51, 0x5d, 0x55, 0x54, 0x1f, 0x1c, 0x74, 0x59, 0x03, 0xad, 0x33, 0xee, 0xfa, 0xe1, 0x5a, 0xfd, 0xc1, 0xde, 0x07, 0xc4, 0x0e, 0xee, 0x91, 0xc0, 0x6a, 0xa0, 0xcf, 0x46, 0xb5, - 0x33, 0xc7, 0xa3, 0x1a, 0xc4, 0x34, 0x1c, 0xa1, 0xa2, 0x57, 0x60, 0xc6, 0xa2, 0xb7, 0x9d, 0x1e, - 0xa9, 0xe6, 0xae, 0x18, 0x57, 0xcb, 0x8d, 0x79, 0x29, 0x3d, 0xb3, 0xce, 0xa9, 0x58, 0x72, 0xd1, - 0x4d, 0x98, 0xf7, 0xc9, 0xa1, 0x43, 0x1d, 0xcf, 0xdd, 0xf0, 0xfa, 0x7d, 0x27, 0xa8, 0xe6, 0x75, - 0x79, 0x41, 0xc5, 0x09, 0x29, 0xf4, 0x0d, 0x58, 0x08, 0x29, 0xf7, 0x08, 0xa5, 0x56, 0x97, 0x54, - 0x0b, 0x5c, 0x71, 0x41, 0x2a, 0xce, 0x4a, 0x32, 0x4e, 0xca, 0xa1, 0x06, 0xa0, 0x90, 0xb4, 0x3e, - 0x0c, 0xf6, 0x3d, 0xff, 0xbe, 0xd5, 0x27, 0xd5, 0x22, 0xd7, 0x8e, 0x3e, 0x2a, 0xe6, 0xe0, 0x14, - 0x69, 0xb4, 0x05, 0xcb, 0x3a, 0x75, 0xab, 0x6f, 0x39, 0xbd, 0xea, 0x0c, 0x07, 0x59, 0x96, 0x20, - 0x15, 0x85, 0x85, 0xd3, 0xe4, 0xd1, 0xb7, 0xe0, 0xbc, 0xfe, 0x5d, 0x01, 0x11, 0xa3, 0x99, 0xe5, - 0x40, 0xe7, 0x25, 0xd0, 0x59, 0x8d, 0x89, 0xd3, 0x75, 0xd0, 0x7d, 0x78, 0x61, 0x8c, 0x21, 0x86, - 0x55, 0xe2, 0x68, 0x2f, 0x48, 0xb4, 0x79, 0x9d, 0x8b, 0x27, 0x68, 0x99, 0x6f, 0xc1, 0x92, 0xe2, - 0x41, 0x2d, 0x6f, 0xe8, 0xdb, 0x44, 0x59, 0x57, 0xe3, 0xa4, 0x75, 0x35, 0x3f, 0x35, 0xe0, 0x7c, - 0xc3, 0x09, 0xf6, 0x86, 0xf6, 0x01, 0x09, 0xde, 0x25, 0x7b, 0x6f, 0x7b, 0xde, 0xc1, 0x86, 0x35, - 0xa4, 0x04, 0x7d, 0x08, 0x60, 0x7b, 0xfd, 0xbe, 0xe7, 0xb6, 0x06, 0xc4, 0x96, 0xde, 0x77, 0xa3, - 0xfe, 0xc4, 0x2d, 0x59, 0xdf, 0xe0, 0x4a, 0x2a, 0x54, 0xe3, 0x92, 0x34, 0x8e, 0xc6, 0x79, 0x58, - 0x31, 0x62, 0xfe, 0x30, 0x07, 0x45, 0xfe, 0x11, 0xcf, 0xc1, 0xf1, 0xef, 0x43, 0x81, 0xb2, 0x0f, - 0xcb, 0x71, 0xf4, 0xd7, 0x33, 0x7c, 0x98, 0x98, 0xde, 0x01, 0xb1, 0x1b, 0x73, 0x12, 0xb9, 0xc0, - 0x7e, 0x61, 0x8e, 0x83, 0x1e, 0xc2, 0x0c, 0x0d, 0xac, 0x60, 0x48, 0xf9, 0xc6, 0xa8, 0x5c, 0xab, - 0x67, 0x46, 0xe4, 0x5a, 0xf1, 0x02, 0x89, 0xdf, 0x58, 0xa2, 0x99, 0xff, 0x90, 0x87, 0x79, 0x2e, - 0xb7, 0xe1, 0xb9, 0x6d, 0x87, 0x85, 0x05, 0x74, 0x13, 0x0a, 0xc1, 0xd1, 0x20, 0x5c, 0x59, 0x33, - 0x1c, 0xcc, 0xee, 0xd1, 0x80, 0x3c, 0x1e, 0xd5, 0x90, 0x2e, 0xcd, 0xa8, 0x98, 0xcb, 0xa3, 0x66, - 0x34, 0x44, 0xb1, 0xd7, 0xaf, 0xeb, 0x26, 0x1f, 0x8f, 0x6a, 0x29, 0xf1, 0xb1, 0x1e, 0x21, 0xe9, - 0x03, 0x43, 0x1f, 0xc0, 0x7c, 0xcf, 0xa2, 0xc1, 0x3b, 0x83, 0xb6, 0x15, 0x90, 0x5d, 0xa7, 0x4f, - 0xf8, 0xae, 0xaa, 0x5c, 0xfb, 0xd5, 0x6c, 0x0b, 0xc5, 0x34, 0x62, 0x57, 0x6f, 0x6a, 0x48, 0x38, - 0x81, 0x8c, 0x0e, 0x01, 0x31, 0xca, 0xae, 0x6f, 0xb9, 0x54, 0x7c, 0x15, 0xb3, 0x97, 0x9f, 0xda, - 0x5e, 0xe4, 0x88, 0xcd, 0x31, 0x34, 0x9c, 0x62, 0x81, 0xed, 0x22, 0x9f, 0x58, 0xd4, 0x73, 0x65, - 0xd0, 0x8a, 0x16, 0x09, 0x73, 0x2a, 0x96, 0x5c, 0xf4, 0x2a, 0xcc, 0xf6, 0x65, 0x74, 0x2b, 0xa6, - 0x47, 0xb7, 0x90, 0x6f, 0xfe, 0x79, 0x0e, 0x2a, 0xe1, 0x0a, 0x75, 0x9c, 0xee, 0x73, 0xf0, 0xf4, - 0x5d, 0xcd, 0xd3, 0xaf, 0x65, 0xf5, 0x4b, 0x31, 0xbe, 0x89, 0xfe, 0xfe, 0x28, 0xe1, 0xef, 0xd7, - 0xa7, 0xc4, 0x3d, 0xd9, 0xeb, 0x7f, 0x6a, 0xc0, 0x82, 0x22, 0xdd, 0x74, 0x68, 0x80, 0x1e, 0x8d, - 0xcd, 0x54, 0x3d, 0xdb, 0x4c, 0x31, 0x6d, 0x3e, 0x4f, 0x8b, 0xd2, 0x5a, 0x29, 0xa4, 0x28, 0xb3, - 0xd4, 0x82, 0xa2, 0x13, 0x90, 0x3e, 0xdb, 0x1b, 0xf9, 0x69, 0xb6, 0xaf, 0x18, 0x60, 0xe3, 0xac, - 0x84, 0x2e, 0x6e, 0x33, 0x10, 0x2c, 0xb0, 0xcc, 0x9f, 0xe7, 0xb5, 0xcf, 0x60, 0xd3, 0x87, 0x6c, - 0x28, 0x05, 0xbe, 0xd3, 0xed, 0x12, 0x9f, 0x56, 0x0d, 0x6e, 0xeb, 0x46, 0x56, 0x5b, 0xbb, 0x42, - 0x6f, 0xc7, 0xeb, 0x39, 0xf6, 0x51, 0xfc, 0x35, 0x92, 0x4c, 0x71, 0x04, 0x8c, 0xd6, 0xa1, 0xec, - 0x0f, 0x5d, 0x21, 0x28, 0x77, 0xfb, 0x4b, 0x52, 0xbc, 0x8c, 0x43, 0xc6, 0xe3, 0x51, 0x4d, 0x84, - 0x96, 0x88, 0x82, 0x63, 0x2d, 0x64, 0x69, 0xf1, 0x5f, 0x2c, 0xf2, 0x1b, 0x99, 0xe3, 0x3f, 0xf7, - 0x9b, 0xc8, 0x2f, 0x63, 0x9a, 0x1a, 0xef, 0x51, 0x1b, 0x2e, 0xd3, 0xa1, 0x6d, 0x13, 0x4a, 0x3b, - 0xc3, 0x1e, 0x1f, 0x09, 0x7d, 0xdb, 0xa1, 0x81, 0xe7, 0x1f, 0x35, 0x1d, 0x96, 0x62, 0xb0, 0x4d, - 0x57, 0x6c, 0x5c, 0x39, 0x1e, 0xd5, 0x2e, 0xb7, 0x4e, 0x90, 0xc3, 0x27, 0xa2, 0xa0, 0xf7, 0xa0, - 0xda, 0xb1, 0x9c, 0x1e, 0x69, 0xa7, 0x58, 0x28, 0x72, 0x0b, 0x97, 0x8f, 0x47, 0xb5, 0xea, 0xed, - 0x09, 0x32, 0x78, 0xa2, 0xb6, 0xf9, 0x2f, 0x06, 0x2c, 0x8d, 0xf9, 0x34, 0xba, 0x01, 0x15, 0x16, - 0x4a, 0x1e, 0x12, 0x9f, 0x1d, 0xd6, 0xdc, 0x55, 0xf3, 0x71, 0xae, 0xd1, 0x8c, 0x59, 0x58, 0x95, - 0x43, 0x9f, 0x1a, 0xb0, 0xec, 0xf4, 0xad, 0x2e, 0xd9, 0xd8, 0xb7, 0xdc, 0x2e, 0x09, 0x17, 0x55, - 0xfa, 0xe3, 0x5b, 0x19, 0x66, 0x7e, 0x7b, 0x4c, 0x5b, 0xee, 0xb2, 0xaf, 0x48, 0xe3, 0xcb, 0xe3, - 0x12, 0x14, 0xa7, 0x19, 0x35, 0x7f, 0x6c, 0x40, 0x99, 0x7f, 0xd9, 0x73, 0xd8, 0x79, 0xf7, 0xf4, - 0x9d, 0x77, 0x35, 0xeb, 0x6e, 0x98, 0xb0, 0xe7, 0x00, 0x4a, 0x62, 0xe4, 0x5e, 0xd7, 0xfc, 0xaf, - 0x82, 0xdc, 0x7f, 0x4d, 0xaf, 0x1b, 0xe6, 0xd4, 0xab, 0x50, 0xb6, 0x3d, 0x37, 0xb0, 0xd8, 0x90, - 0xe5, 0x11, 0xba, 0x14, 0x6e, 0x8d, 0x8d, 0x90, 0x81, 0x63, 0x19, 0x76, 0x08, 0x74, 0xbc, 0x5e, - 0xcf, 0xfb, 0x88, 0x6f, 0xa4, 0x52, 0x1c, 0xb3, 0x6e, 0x73, 0x2a, 0x96, 0x5c, 0xf4, 0x3a, 0x94, - 0x06, 0x2c, 0x45, 0xf3, 0x64, 0x4c, 0x2c, 0xc5, 0x5f, 0xbd, 0x23, 0xe9, 0x38, 0x92, 0x40, 0xd7, - 0x61, 0x8e, 0x3a, 0xae, 0x4d, 0x5a, 0xc4, 0xf6, 0xdc, 0x36, 0xe5, 0xbe, 0x9e, 0x6f, 0x2c, 0x1e, - 0x8f, 0x6a, 0x73, 0x2d, 0x85, 0x8e, 0x35, 0x29, 0xf4, 0x2e, 0x94, 0xf9, 0x6f, 0x7e, 0xfe, 0x15, - 0xa7, 0x3e, 0xff, 0xce, 0xb2, 0x8f, 0x6c, 0x85, 0x00, 0x38, 0xc6, 0x42, 0xd7, 0x00, 0x58, 0x99, - 0x42, 0x03, 0xab, 0x3f, 0xa0, 0xfc, 0x24, 0x2f, 0xc5, 0xdb, 0x77, 0x37, 0xe2, 0x60, 0x45, 0x0a, - 0xbd, 0x06, 0xe5, 0xc0, 0x72, 0x7a, 0x4d, 0xc7, 0x25, 0x94, 0x67, 0xc2, 0x79, 0x61, 0x60, 0x37, - 0x24, 0xe2, 0x98, 0x8f, 0xea, 0x00, 0x3d, 0xb6, 0x69, 0x1a, 0x47, 0x01, 0xa1, 0x3c, 0xd3, 0xcd, - 0x37, 0xe6, 0x19, 0x78, 0x33, 0xa2, 0x62, 0x45, 0x82, 0xcd, 0xba, 0xeb, 0x7d, 0x64, 0x39, 0x41, - 0xb5, 0xac, 0xcf, 0xfa, 0x7d, 0xef, 0x5d, 0xcb, 0x09, 0xb0, 0xe4, 0xa2, 0x97, 0x61, 0xf6, 0x50, - 0xee, 0x34, 0xe0, 0xa0, 0x15, 0x76, 0xec, 0x86, 0x3b, 0x2c, 0xe4, 0xa1, 0x7d, 0xb8, 0xec, 0xb8, - 0x94, 0xd8, 0x43, 0x9f, 0xb4, 0x0e, 0x9c, 0xc1, 0x6e, 0xb3, 0xf5, 0x90, 0xf8, 0x4e, 0xe7, 0xa8, - 0x61, 0xd9, 0x07, 0xc4, 0x6d, 0x57, 0x2b, 0xdc, 0xc8, 0xaf, 0x48, 0x23, 0x97, 0xb7, 0x4f, 0x90, - 0xc5, 0x27, 0x22, 0x99, 0x9f, 0x86, 0x07, 0xfc, 0x83, 0x61, 0x30, 0x18, 0x06, 0xe8, 0x2d, 0xc8, - 0x05, 0x9e, 0xdc, 0x36, 0x2f, 0x29, 0x6b, 0x55, 0x67, 0x09, 0x56, 0x7c, 0x90, 0x63, 0xd2, 0x21, - 0x3e, 0x71, 0x6d, 0xd2, 0x98, 0x39, 0x1e, 0xd5, 0x72, 0xbb, 0x1e, 0xce, 0x05, 0x1e, 0x7a, 0x0f, - 0x60, 0x30, 0xa4, 0xfb, 0x2d, 0x62, 0xfb, 0x24, 0x90, 0x27, 0xf8, 0xd5, 0x34, 0x90, 0xa6, 0x67, - 0x5b, 0xbd, 0x24, 0x12, 0x9f, 0xdf, 0x9d, 0x48, 0x1f, 0x2b, 0x58, 0xa8, 0x0d, 0x15, 0xbe, 0xf1, - 0x9b, 0xd6, 0x1e, 0xe9, 0x31, 0x87, 0xcd, 0x67, 0x8c, 0xef, 0xdb, 0x91, 0x56, 0x1c, 0xd4, 0x62, - 0x1a, 0xc5, 0x2a, 0xac, 0xf9, 0xbb, 0x06, 0x2c, 0xf3, 0xc9, 0xd8, 0xf1, 0x68, 0x20, 0xea, 0x16, - 0x1e, 0xf9, 0x5f, 0x86, 0x59, 0x76, 0x0e, 0x58, 0x6e, 0x9b, 0x9f, 0x81, 0x65, 0xb1, 0x6a, 0x1b, - 0x82, 0x84, 0x43, 0x1e, 0xba, 0x0c, 0x05, 0xcb, 0xef, 0x8a, 0xc8, 0x50, 0x6e, 0x94, 0x58, 0x0a, - 0xb2, 0xee, 0x77, 0x29, 0xe6, 0x54, 0xe6, 0x22, 0xd4, 0xf6, 0x9d, 0xc1, 0x58, 0x2d, 0xda, 0xe2, - 0x54, 0x2c, 0xb9, 0xe6, 0x4f, 0x67, 0x61, 0x4e, 0xad, 0xae, 0x9f, 0x43, 0xce, 0xf5, 0x3e, 0x94, - 0xc2, 0x6a, 0x4d, 0xae, 0xda, 0x5a, 0x86, 0xa9, 0x15, 0xb5, 0x1b, 0x96, 0x8a, 0x8d, 0x39, 0x16, - 0x3a, 0xc2, 0x5f, 0x38, 0x02, 0x44, 0x04, 0x16, 0xe5, 0x41, 0x4f, 0xda, 0x8d, 0x23, 0x3e, 0xf7, - 0xf2, 0x7c, 0xce, 0xe4, 0x5f, 0xe7, 0x8e, 0x47, 0xb5, 0xc5, 0xdd, 0x04, 0x00, 0x1e, 0x83, 0x44, - 0xeb, 0x50, 0xe8, 0xf8, 0x5e, 0x9f, 0x47, 0xa6, 0x8c, 0xd0, 0x7c, 0x85, 0x6e, 0xfb, 0x5e, 0x1f, - 0x73, 0x55, 0xf4, 0x1e, 0xcc, 0xec, 0xf1, 0xd2, 0x54, 0xc6, 0xaa, 0x4c, 0x49, 0x62, 0xb2, 0x96, - 0x6d, 0x00, 0x5b, 0x53, 0x41, 0xc6, 0x12, 0x0f, 0xad, 0xe9, 0x87, 0xec, 0x0c, 0xdf, 0xfa, 0x0b, - 0x27, 0x1e, 0xb0, 0xdf, 0x80, 0x3c, 0x71, 0x0f, 0xab, 0xb3, 0xdc, 0xd3, 0x2f, 0xa5, 0x7d, 0xce, - 0x96, 0x7b, 0xf8, 0xd0, 0xf2, 0x1b, 0x15, 0xb9, 0xb4, 0xf9, 0x2d, 0xf7, 0x10, 0x33, 0x1d, 0x74, - 0x00, 0x15, 0x65, 0x7a, 0xaa, 0x25, 0x0e, 0x71, 0x7d, 0xca, 0xb4, 0x4d, 0xd4, 0xc2, 0xd1, 0x9e, - 0x51, 0x56, 0x00, 0xab, 0xe8, 0xe8, 0xfb, 0x06, 0x9c, 0x6f, 0x7b, 0xf6, 0x01, 0x3b, 0xbe, 0x7d, - 0x2b, 0x20, 0xdd, 0x23, 0x79, 0x74, 0xf1, 0x48, 0x58, 0xb9, 0x76, 0x2b, 0x83, 0xdd, 0xcd, 0x34, - 0xfd, 0xc6, 0xc5, 0xe3, 0x51, 0xed, 0x7c, 0x2a, 0x0b, 0xa7, 0x5b, 0xe4, 0x63, 0xa1, 0x7c, 0x15, - 0x92, 0x63, 0x81, 0xcc, 0x63, 0x69, 0xa5, 0xe9, 0x8b, 0xb1, 0xa4, 0xb2, 0x70, 0xba, 0x45, 0xf3, - 0x9f, 0x8b, 0x32, 0xb0, 0xca, 0x16, 0xc7, 0xd7, 0xb5, 0x32, 0xb8, 0x96, 0x28, 0x83, 0x17, 0x14, - 0x51, 0xa5, 0x06, 0x8e, 0x3d, 0x32, 0xf7, 0x8c, 0x3d, 0xb2, 0x0e, 0x20, 0xe6, 0xb0, 0xe3, 0xf4, - 0x48, 0x18, 0x91, 0x58, 0x80, 0xd8, 0x8c, 0xa8, 0x58, 0x91, 0x40, 0x4d, 0xc8, 0x77, 0x65, 0x8e, - 0x9b, 0x2d, 0x3a, 0xdc, 0x71, 0x02, 0x75, 0x0c, 0xb3, 0xcc, 0x43, 0xef, 0x38, 0x01, 0x66, 0x30, - 0xe8, 0x21, 0xcc, 0xf0, 0xb8, 0x4b, 0xab, 0xc5, 0xcc, 0xf5, 0x0b, 0xdf, 0xe6, 0x12, 0x2d, 0x8a, - 0x9d, 0x9c, 0x48, 0xb1, 0x44, 0x63, 0x79, 0x01, 0xcb, 0x84, 0xc8, 0xc7, 0xc1, 0xa6, 0xe3, 0xcb, - 0xbe, 0x99, 0x92, 0xd6, 0x87, 0x1c, 0xac, 0x48, 0xa1, 0xef, 0xc0, 0x9c, 0x5c, 0x41, 0x71, 0x6c, - 0xcd, 0x4e, 0x79, 0x6c, 0x89, 0x24, 0x48, 0x41, 0xc0, 0x1a, 0x1e, 0xfa, 0x2d, 0x98, 0xa5, 0xfc, - 0x2f, 0x3a, 0xc5, 0x4e, 0x14, 0xba, 0xea, 0x04, 0x46, 0x35, 0xba, 0x60, 0x51, 0x1c, 0xa2, 0xa2, - 0x03, 0xfe, 0xd1, 0x1d, 0xa7, 0x7b, 0xcf, 0x1a, 0xb0, 0x5d, 0xc7, 0x6c, 0xfc, 0x5a, 0xa6, 0xd2, - 0x47, 0x2a, 0xa9, 0x66, 0xd4, 0xd9, 0x92, 0x90, 0x58, 0x81, 0x37, 0xff, 0x35, 0x4c, 0xb5, 0xf9, - 0xc1, 0x68, 0xa5, 0x74, 0xdd, 0x9e, 0x71, 0xd5, 0x95, 0x08, 0x66, 0xb9, 0x5f, 0x64, 0x30, 0x33, - 0xff, 0x73, 0x36, 0xdc, 0xb4, 0xa2, 0x38, 0x5a, 0x83, 0xe2, 0x60, 0xdf, 0xa2, 0xe1, 0xae, 0x0d, - 0x2b, 0x93, 0xe2, 0x0e, 0x23, 0x3e, 0x1e, 0xd5, 0x40, 0x64, 0x0b, 0xec, 0x17, 0x16, 0x92, 0x3c, - 0x61, 0xb7, 0x5c, 0x9b, 0xf4, 0x7a, 0xa4, 0x2d, 0x53, 0xf0, 0x38, 0x61, 0x0f, 0x19, 0x38, 0x96, - 0x41, 0x37, 0xa3, 0xae, 0x8d, 0xd8, 0x85, 0x2b, 0x7a, 0xd7, 0xe6, 0x31, 0xf3, 0x2e, 0xd1, 0x6e, - 0x98, 0xd8, 0xc5, 0x29, 0x9c, 0xdc, 0xc5, 0x41, 0x1d, 0x98, 0xa7, 0x81, 0xe5, 0x07, 0x51, 0x66, - 0x7c, 0x8a, 0x64, 0x1c, 0x1d, 0x8f, 0x6a, 0xf3, 0x2d, 0x0d, 0x05, 0x27, 0x50, 0xd1, 0x10, 0x96, - 0x6d, 0xaf, 0x3f, 0xe8, 0x91, 0xb0, 0x25, 0x25, 0x8c, 0x4d, 0xdf, 0x69, 0xbb, 0xc0, 0xca, 0xbf, - 0x8d, 0x71, 0x28, 0x9c, 0x86, 0x8f, 0x7e, 0x1d, 0x4a, 0xed, 0xa1, 0x6f, 0x31, 0xa2, 0x4c, 0xec, - 0x5f, 0x0c, 0x4b, 0x99, 0x4d, 0x49, 0x7f, 0x3c, 0xaa, 0x9d, 0x65, 0xb5, 0x40, 0x3d, 0x24, 0xe0, - 0x48, 0x05, 0xed, 0xc1, 0x25, 0x8f, 0x27, 0xbf, 0x22, 0xf4, 0x89, 0x04, 0x23, 0xdc, 0xde, 0xb2, - 0xcb, 0x1d, 0xb6, 0x2d, 0x2f, 0x3d, 0x98, 0x28, 0x89, 0x4f, 0x40, 0x41, 0x77, 0x60, 0x46, 0x6c, - 0x22, 0x79, 0x2a, 0x66, 0xca, 0x4f, 0x40, 0xdc, 0x54, 0x30, 0x35, 0x2c, 0xd5, 0xd1, 0x23, 0x98, - 0x11, 0x66, 0xe4, 0x91, 0x76, 0x7d, 0xba, 0xc6, 0xad, 0x18, 0x7e, 0x1c, 0x3f, 0xc5, 0x6f, 0x2c, - 0x31, 0xd1, 0x2e, 0x6f, 0x93, 0xb1, 0xb8, 0x5c, 0xe1, 0xfb, 0x2c, 0x4b, 0xa3, 0xb9, 0xc5, 0x14, - 0xb6, 0xdd, 0x8e, 0xa7, 0xb5, 0xc7, 0x78, 0x54, 0x16, 0x58, 0x2c, 0x2a, 0xf7, 0xbc, 0x6e, 0xcb, - 0x75, 0x06, 0x03, 0x12, 0x54, 0xe7, 0xf4, 0xa8, 0xdc, 0x8c, 0x38, 0x58, 0x91, 0x42, 0x84, 0x07, - 0x35, 0xd1, 0xca, 0xa5, 0xd5, 0xb3, 0x7c, 0x34, 0x6b, 0x53, 0x74, 0xb9, 0x84, 0xa6, 0x16, 0xce, - 0x24, 0x18, 0x56, 0x80, 0x4d, 0x5b, 0xb6, 0x44, 0xd4, 0xd9, 0x41, 0xf7, 0x95, 0x1a, 0xe8, 0xe6, - 0x69, 0xe6, 0x77, 0xd7, 0x53, 0xcb, 0x22, 0xb3, 0x29, 0xab, 0x0a, 0x5d, 0x04, 0xdd, 0x90, 0x35, - 0xcd, 0xa6, 0xd3, 0x25, 0x34, 0x90, 0x21, 0x46, 0x2f, 0x52, 0x04, 0x0b, 0xab, 0x72, 0xe6, 0x4f, - 0x0a, 0x70, 0x56, 0xc2, 0x89, 0x8c, 0x03, 0xdd, 0xd0, 0x52, 0x8b, 0x17, 0x13, 0xa9, 0xc5, 0x92, - 0x26, 0xac, 0x24, 0x17, 0x3e, 0xcc, 0xeb, 0x69, 0x94, 0x4c, 0x32, 0x6e, 0x66, 0xce, 0xd8, 0x34, - 0x64, 0x11, 0x21, 0xf4, 0x7c, 0x0d, 0x27, 0x2c, 0x30, 0x9b, 0x7a, 0xba, 0x24, 0x4b, 0x81, 0x9b, - 0x99, 0x33, 0xb3, 0x14, 0x9b, 0x7a, 0x5e, 0x86, 0x13, 0x16, 0x98, 0x4d, 0x7b, 0x48, 0x03, 0xaf, - 0x1f, 0xd9, 0x2c, 0x64, 0xb6, 0xb9, 0xc1, 0x15, 0x53, 0x6c, 0x6e, 0x68, 0x88, 0x38, 0x61, 0x01, - 0xfd, 0xc8, 0x80, 0x0b, 0x1f, 0x10, 0xf7, 0xc0, 0x71, 0xe9, 0x8e, 0x33, 0x20, 0x3d, 0xc7, 0x8d, - 0xbf, 0x58, 0xc4, 0xde, 0xdf, 0xc8, 0x60, 0xfd, 0xae, 0x8e, 0xa0, 0x0f, 0xe3, 0x2b, 0xc7, 0xa3, - 0xda, 0x85, 0xbb, 0xe9, 0x36, 0xf0, 0x24, 0xe3, 0xe6, 0xf7, 0x8a, 0xd2, 0xe3, 0xd5, 0x93, 0x51, - 0x3d, 0x4b, 0x8c, 0x27, 0x9c, 0x25, 0x3e, 0xcc, 0xf3, 0x5b, 0x61, 0xc7, 0x96, 0x17, 0x63, 0x53, - 0x78, 0xcd, 0x1d, 0x4d, 0x51, 0x1c, 0xca, 0x7c, 0x36, 0x75, 0x06, 0x4e, 0x58, 0x40, 0x2e, 0x9c, - 0x15, 0xe0, 0xa1, 0xc9, 0x7c, 0xe6, 0xfb, 0xbd, 0x3b, 0x4e, 0xf0, 0x76, 0xa4, 0x27, 0x2c, 0x2e, - 0x1d, 0x8f, 0x6a, 0x67, 0x35, 0x3a, 0xd6, 0xe1, 0xd1, 0x10, 0x16, 0x95, 0x36, 0x23, 0x9f, 0x2e, - 0xe9, 0x33, 0x5f, 0x9f, 0xae, 0xb1, 0x29, 0x0c, 0xf2, 0x12, 0x76, 0x3b, 0x01, 0x88, 0xc7, 0x4c, - 0xc8, 0xcf, 0xec, 0x59, 0xd1, 0x67, 0x16, 0xa7, 0xf9, 0xcc, 0xa6, 0x95, 0xfe, 0x99, 0x31, 0x1d, - 0xeb, 0xf0, 0xe8, 0xbb, 0xb0, 0xb8, 0x97, 0xb8, 0x4c, 0x95, 0x67, 0xf5, 0xad, 0x4c, 0x75, 0x46, - 0xca, 0x3d, 0xac, 0xf8, 0xd6, 0x24, 0x0b, 0x8f, 0xd9, 0x31, 0x7f, 0x5c, 0x00, 0x34, 0x7e, 0x4b, - 0x80, 0xae, 0x6b, 0xa1, 0xec, 0x4a, 0x22, 0x94, 0x2d, 0xaa, 0x1a, 0x4a, 0x24, 0x7b, 0x04, 0x33, - 0x62, 0xbc, 0x53, 0x74, 0x2f, 0xe4, 0x40, 0x24, 0x58, 0x9a, 0x53, 0x48, 0x4c, 0x96, 0xc0, 0x4b, - 0x7f, 0x94, 0x7e, 0x77, 0x0a, 0xf8, 0x34, 0x2f, 0x0f, 0x51, 0xd1, 0xbe, 0x3c, 0x08, 0x84, 0x2f, - 0x48, 0x4f, 0xbb, 0x71, 0xaa, 0x16, 0xba, 0x68, 0x2a, 0x28, 0x74, 0xac, 0x42, 0xcb, 0x89, 0xea, - 0x59, 0x7b, 0xd2, 0xb5, 0x9e, 0x62, 0xa2, 0x14, 0xb7, 0x92, 0x98, 0x88, 0x40, 0x39, 0x5a, 0x67, - 0xe9, 0x48, 0xa7, 0x30, 0x90, 0xee, 0x41, 0x31, 0xb2, 0xf9, 0xfb, 0xb3, 0xa0, 0x14, 0x0b, 0xe8, - 0x9b, 0x30, 0x4f, 0x89, 0x7f, 0xe8, 0xd8, 0x64, 0xdd, 0xb6, 0xbd, 0xa1, 0x1b, 0x9e, 0xa4, 0xd1, - 0x6d, 0x6d, 0x4b, 0xe3, 0xe2, 0x84, 0x34, 0xbf, 0x0a, 0xe7, 0x07, 0x86, 0x74, 0x9e, 0xec, 0x57, - 0xe1, 0x89, 0x5a, 0x54, 0xf6, 0xc3, 0x24, 0x9a, 0xd6, 0x54, 0xcb, 0x3f, 0xeb, 0xa6, 0xda, 0x77, - 0xa0, 0x44, 0xf5, 0xd3, 0xec, 0x6b, 0xd9, 0x13, 0x15, 0x79, 0x80, 0x44, 0xfd, 0xfe, 0xe8, 0xd4, - 0x88, 0x30, 0xd9, 0xa4, 0xc8, 0x34, 0xb3, 0x38, 0xdd, 0xa4, 0x3c, 0x21, 0xc1, 0xfc, 0x4d, 0x28, - 0xfb, 0x44, 0x4c, 0x10, 0x95, 0x2e, 0x92, 0x5a, 0x69, 0x63, 0x29, 0x84, 0xc9, 0x87, 0x43, 0xc7, - 0x27, 0x7d, 0xe2, 0x06, 0x34, 0xae, 0xa3, 0x42, 0x2e, 0xc5, 0x31, 0x1a, 0xfa, 0x00, 0x60, 0x10, - 0xb5, 0x6d, 0x65, 0x15, 0x9f, 0x39, 0x7b, 0xd3, 0x1b, 0xbe, 0x71, 0xda, 0x18, 0xd3, 0xb1, 0x82, - 0x8e, 0xde, 0x87, 0x8b, 0x71, 0x21, 0xb2, 0x49, 0xac, 0x36, 0x3f, 0x63, 0xe5, 0xdd, 0x88, 0xb8, - 0x2d, 0xf8, 0xea, 0xf1, 0xa8, 0x76, 0x71, 0x63, 0x92, 0x10, 0x9e, 0xac, 0x8f, 0xfa, 0x30, 0xe7, - 0x7a, 0x6d, 0xd2, 0x22, 0x3d, 0x62, 0x07, 0x9e, 0x2f, 0x2b, 0x86, 0x2c, 0x15, 0xbd, 0xe8, 0x3d, - 0x59, 0xbd, 0xfb, 0x8a, 0xba, 0xe8, 0x4f, 0xa8, 0x14, 0xac, 0xc1, 0xa3, 0x37, 0x61, 0xbe, 0xcf, - 0x36, 0xc2, 0xae, 0x3f, 0xa4, 0x01, 0x69, 0x6f, 0xac, 0xf3, 0xca, 0xa2, 0x24, 0x42, 0xd6, 0x3d, - 0x8d, 0x83, 0x13, 0x92, 0xe6, 0x1f, 0x19, 0x90, 0xf2, 0x4a, 0x46, 0x73, 0x7d, 0xe3, 0x59, 0xbb, - 0xfe, 0x2b, 0x30, 0x43, 0xe3, 0x0b, 0x06, 0xb5, 0x8f, 0x2e, 0xba, 0x2f, 0x92, 0x6b, 0xfe, 0x95, - 0x01, 0xe7, 0xd2, 0x5a, 0x1c, 0xcc, 0x07, 0xa3, 0x86, 0x86, 0x1c, 0x5e, 0xf6, 0x6e, 0x8f, 0x7a, - 0xf9, 0x26, 0x20, 0x70, 0x8c, 0xc6, 0x62, 0x51, 0x9b, 0xd0, 0xc0, 0x71, 0x79, 0x65, 0xb9, 0xe9, - 0xf8, 0x72, 0x8c, 0x51, 0x2c, 0xda, 0xd4, 0xb8, 0x38, 0x21, 0x6d, 0xfe, 0xa0, 0x00, 0xcb, 0x29, - 0x29, 0x27, 0xda, 0x92, 0xcd, 0xed, 0x29, 0xee, 0x65, 0xa2, 0x57, 0x10, 0x5a, 0x83, 0x1b, 0x06, - 0xc3, 0x5e, 0xef, 0xe9, 0xee, 0x67, 0x42, 0x7d, 0xac, 0x60, 0x85, 0xdd, 0xea, 0xfc, 0x29, 0xba, - 0xd5, 0x77, 0x01, 0x91, 0x8f, 0x07, 0x1e, 0x25, 0xb2, 0x74, 0xf0, 0xf8, 0xf1, 0x51, 0xe0, 0x3e, - 0x18, 0xbd, 0x80, 0xd9, 0x1a, 0x93, 0xc0, 0x29, 0x5a, 0x68, 0x15, 0xca, 0x1d, 0xcf, 0xb7, 0x09, - 0x1b, 0x25, 0x8f, 0x5c, 0x4a, 0xf3, 0xe5, 0x76, 0xc8, 0xc0, 0xb1, 0x0c, 0x7a, 0x2f, 0x6e, 0xce, - 0xcd, 0x64, 0xbe, 0x53, 0x12, 0xdf, 0xcc, 0x03, 0xc5, 0xe4, 0xae, 0xdc, 0x3a, 0x2c, 0x70, 0x85, - 0xf5, 0x9d, 0xed, 0xb0, 0xed, 0x2f, 0x9e, 0xdf, 0x5d, 0x90, 0x2a, 0xa2, 0xe5, 0x1b, 0xb3, 0x71, - 0x52, 0xde, 0xfc, 0xac, 0x00, 0xcb, 0x29, 0x85, 0x56, 0x74, 0xd5, 0x61, 0x3c, 0xcd, 0x55, 0xc7, - 0x2f, 0xca, 0x13, 0x5e, 0x85, 0x59, 0xd7, 0xdb, 0xb0, 0xec, 0x7d, 0x22, 0xaf, 0x95, 0xa3, 0x29, - 0xba, 0x2f, 0xc8, 0x38, 0xe4, 0x87, 0x4e, 0x53, 0x38, 0x85, 0xd3, 0x4c, 0xbd, 0xd0, 0xdf, 0x0c, - 0x8b, 0xdd, 0x8e, 0xd3, 0x23, 0x3b, 0x56, 0xb0, 0x2f, 0xbb, 0xc3, 0xf1, 0xce, 0xd4, 0xb8, 0x38, - 0x21, 0x8d, 0xbe, 0x05, 0x65, 0xb1, 0x3c, 0x7e, 0x97, 0x66, 0xb8, 0x94, 0x89, 0x06, 0xd3, 0x08, - 0x95, 0x70, 0xac, 0x8f, 0x06, 0x70, 0x81, 0x67, 0x65, 0x2c, 0x5e, 0xf7, 0x9d, 0xef, 0xf2, 0xed, - 0x2f, 0x5f, 0xbf, 0x88, 0x76, 0xd3, 0x4d, 0x56, 0xdb, 0x6d, 0xa7, 0x8b, 0x3c, 0x9e, 0xcc, 0xc2, - 0x93, 0x60, 0xcd, 0x1f, 0x18, 0x90, 0x7e, 0x95, 0xa2, 0x7f, 0x98, 0xf1, 0x94, 0x1f, 0xf6, 0x72, - 0xbc, 0xf8, 0xa2, 0xf5, 0x59, 0x49, 0x5b, 0x78, 0xf3, 0x8f, 0x0d, 0x58, 0x4e, 0xa9, 0x05, 0x7f, - 0x39, 0xce, 0x8d, 0xcf, 0x73, 0xc9, 0xc1, 0x6d, 0x1d, 0x12, 0x37, 0x38, 0xdd, 0x05, 0xce, 0x96, - 0xb8, 0x36, 0xc9, 0xc9, 0x0e, 0x68, 0xa6, 0x42, 0x8e, 0xf7, 0xd2, 0xf4, 0xfb, 0x92, 0xa7, 0x08, - 0xaf, 0x93, 0xef, 0xe7, 0x0a, 0xcf, 0xfb, 0x7e, 0xce, 0xfc, 0x6b, 0x03, 0xe6, 0xf5, 0x7b, 0x21, - 0xf4, 0x55, 0xc8, 0x0f, 0x7d, 0x47, 0x4e, 0x6a, 0x34, 0xfa, 0x77, 0xf0, 0x36, 0x66, 0x74, 0xc6, - 0xf6, 0x49, 0x47, 0xae, 0x58, 0xc4, 0xc6, 0xa4, 0x83, 0x19, 0x1d, 0x11, 0xa8, 0x0c, 0x7c, 0xef, - 0xe3, 0x23, 0x71, 0x18, 0x4f, 0xf1, 0x96, 0x75, 0x27, 0xd6, 0x8a, 0x5b, 0x6e, 0x0a, 0x11, 0xab, - 0xb8, 0x3c, 0xcd, 0x19, 0x6f, 0x24, 0xfc, 0x72, 0xb8, 0xeb, 0xdf, 0xe7, 0x60, 0x56, 0x3a, 0x0d, - 0xfa, 0x10, 0xe6, 0xbb, 0xda, 0xf4, 0x4e, 0x31, 0xac, 0xc4, 0x7d, 0x5d, 0x14, 0x17, 0x75, 0x3a, - 0x4e, 0x18, 0x40, 0xbf, 0x03, 0x4b, 0x5d, 0x27, 0xd0, 0xbf, 0x69, 0x8a, 0xcb, 0xca, 0x3b, 0x49, - 0xdd, 0xc6, 0x45, 0x69, 0x78, 0x69, 0x8c, 0x85, 0xc7, 0x2d, 0xa1, 0x07, 0x50, 0xf0, 0x49, 0x67, - 0x9a, 0x07, 0x21, 0x6c, 0x4f, 0x91, 0x0e, 0xdf, 0x63, 0x51, 0x8a, 0x84, 0x49, 0x87, 0x62, 0x0e, - 0x64, 0xfe, 0x9e, 0x58, 0xea, 0x44, 0x33, 0xe5, 0x7f, 0xe3, 0x79, 0xf9, 0x7f, 0x1b, 0x00, 0xf1, - 0x60, 0xff, 0xff, 0xad, 0xad, 0xf9, 0x97, 0x39, 0x18, 0x17, 0x64, 0xfb, 0xc2, 0x16, 0x25, 0x9e, - 0x91, 0xfa, 0x2f, 0x1d, 0x92, 0x8b, 0x1e, 0xc1, 0x8c, 0xc5, 0xff, 0x27, 0x62, 0x8a, 0x11, 0x0b, - 0x53, 0x1b, 0x9e, 0x1b, 0xf8, 0x5e, 0xef, 0x1d, 0x4a, 0x7c, 0xe5, 0x1f, 0x11, 0x38, 0x16, 0x96, - 0x98, 0x88, 0xb0, 0x1a, 0x42, 0xfe, 0x5f, 0xc3, 0x14, 0x4f, 0x8a, 0xc7, 0x0d, 0x28, 0xf5, 0x84, - 0x84, 0xc3, 0x31, 0xf2, 0x14, 0x77, 0x7c, 0xe6, 0xf7, 0x0d, 0x58, 0x4c, 0x76, 0x1e, 0x99, 0x3e, - 0xcf, 0x08, 0xb6, 0x37, 0x93, 0x7d, 0xdd, 0x6d, 0x41, 0xc6, 0x21, 0x1f, 0xdd, 0x85, 0x59, 0x96, - 0x19, 0x62, 0x19, 0x6d, 0x33, 0xe6, 0x95, 0xfc, 0x7c, 0xbf, 0x2d, 0xf4, 0x70, 0x08, 0x60, 0xfe, - 0xa3, 0x01, 0x68, 0xbc, 0x37, 0x85, 0x76, 0xe0, 0x9c, 0x78, 0xb5, 0x2e, 0x2f, 0x5c, 0xb7, 0xb5, - 0xa1, 0x5d, 0x96, 0x43, 0x3b, 0xd7, 0x4c, 0x91, 0xc1, 0xa9, 0x9a, 0x51, 0x26, 0x9c, 0x3b, 0x7d, - 0x26, 0xfc, 0x0a, 0xcc, 0x0c, 0xd8, 0x5c, 0xb5, 0x65, 0xba, 0x1a, 0xad, 0xf8, 0x0e, 0xa7, 0x62, - 0xc9, 0x35, 0xff, 0x2e, 0x07, 0xd5, 0x49, 0x4f, 0x56, 0xbf, 0xd4, 0x5f, 0x86, 0xfa, 0xb0, 0xa0, - 0x0c, 0x81, 0xbf, 0xd5, 0x2c, 0x4c, 0x7f, 0x63, 0x1b, 0x56, 0x35, 0x4d, 0x1d, 0x0a, 0x27, 0xb1, - 0xcd, 0x16, 0x40, 0xfc, 0x00, 0x0f, 0x5d, 0x81, 0x82, 0x6b, 0xf5, 0xc3, 0xac, 0x2a, 0x8a, 0xc8, - 0xfc, 0x3f, 0x92, 0x38, 0x07, 0xbd, 0x04, 0xc5, 0x43, 0xab, 0x37, 0x0c, 0xff, 0xe5, 0x2b, 0x7a, - 0x46, 0xfb, 0x90, 0x11, 0xb1, 0xe0, 0x99, 0x7f, 0x92, 0x83, 0x8a, 0xf2, 0x40, 0xe4, 0x59, 0x15, - 0xcc, 0x2f, 0x40, 0xce, 0xa2, 0xbc, 0x40, 0x29, 0x8b, 0x1b, 0xbd, 0x75, 0x8a, 0x73, 0x16, 0x45, - 0xef, 0x42, 0x71, 0x60, 0x05, 0xfb, 0xe1, 0x23, 0xe0, 0x6b, 0xd3, 0x3d, 0x5f, 0x61, 0x05, 0x45, - 0xfc, 0x1d, 0xec, 0x17, 0xc5, 0x02, 0x2f, 0x51, 0x97, 0xe5, 0x9f, 0x5d, 0x5d, 0x66, 0x7e, 0xcf, - 0x80, 0x85, 0xc4, 0x18, 0xd0, 0x35, 0x00, 0x1a, 0xfd, 0x92, 0x4b, 0x10, 0xb5, 0xbe, 0x62, 0x39, - 0xac, 0x48, 0x3d, 0x75, 0x8b, 0xe3, 0x9f, 0x0c, 0xb8, 0x7c, 0xd2, 0xbd, 0x16, 0x2b, 0x9c, 0xe5, - 0xe5, 0x55, 0x54, 0xaa, 0x19, 0x7a, 0xe1, 0x7c, 0x57, 0x67, 0xe3, 0xa4, 0x3c, 0xba, 0x01, 0x15, - 0x85, 0x24, 0x07, 0x18, 0xa5, 0x79, 0x8a, 0x3a, 0x56, 0xe5, 0x9e, 0x22, 0xcb, 0x36, 0xff, 0xd6, - 0x80, 0x73, 0x69, 0xdd, 0x37, 0xd4, 0x0d, 0x9f, 0x8b, 0x8b, 0xd2, 0xaa, 0x71, 0xca, 0x2e, 0x5e, - 0x9d, 0x3f, 0x1a, 0xdf, 0x72, 0x03, 0xff, 0x28, 0xfd, 0x21, 0xf9, 0xa5, 0x5b, 0x00, 0xb1, 0x0c, - 0x5a, 0x84, 0xfc, 0x01, 0x39, 0x12, 0x13, 0x87, 0xd9, 0x9f, 0xe8, 0x9c, 0xb6, 0x8d, 0xe4, 0xbe, - 0x79, 0x33, 0x77, 0xcb, 0x78, 0xb3, 0xf4, 0x87, 0x7f, 0x5a, 0x3b, 0xf3, 0xc9, 0xcf, 0xaf, 0x9c, - 0x31, 0x7f, 0x68, 0x80, 0x9a, 0x04, 0xa3, 0xd7, 0xa0, 0xbc, 0x1f, 0x04, 0x03, 0x4e, 0x92, 0xaf, - 0x53, 0xf8, 0x93, 0xe9, 0xb7, 0x77, 0x77, 0x77, 0x38, 0x11, 0xc7, 0x7c, 0x54, 0x07, 0x60, 0x3f, - 0xa8, 0x90, 0x2e, 0xc4, 0x2f, 0xca, 0x98, 0x74, 0x4b, 0x88, 0x2b, 0x12, 0xa2, 0x56, 0x14, 0xc2, - 0xe2, 0xbf, 0x90, 0x64, 0xad, 0x28, 0x24, 0x43, 0x9e, 0xf9, 0x17, 0x06, 0x2c, 0x8d, 0xbd, 0x86, - 0x42, 0x3b, 0x51, 0x76, 0x3c, 0x6d, 0x03, 0x6f, 0x42, 0x1e, 0xfd, 0xd4, 0x7e, 0x7d, 0x0b, 0xce, - 0x09, 0x44, 0x6e, 0x35, 0x7e, 0xf9, 0xf1, 0xc4, 0x00, 0x67, 0xfe, 0x99, 0x01, 0x10, 0xb7, 0x94, - 0xd0, 0x1e, 0xcc, 0x89, 0x21, 0x69, 0x69, 0x5e, 0xf6, 0x0f, 0x3c, 0x27, 0x4d, 0xcc, 0xb5, 0x14, - 0x14, 0xac, 0x61, 0xa2, 0x55, 0x28, 0xf3, 0x4e, 0x2e, 0xdf, 0x5d, 0x39, 0xfd, 0xbf, 0x0a, 0xee, - 0x85, 0x0c, 0x1c, 0xcb, 0x98, 0x9f, 0xe4, 0x61, 0x39, 0xe5, 0xfe, 0xfd, 0xff, 0x74, 0x63, 0xf2, - 0x55, 0x98, 0x15, 0x4f, 0xb2, 0x69, 0x32, 0xf9, 0x12, 0x2f, 0xb6, 0x29, 0x0e, 0xf9, 0x68, 0x0d, - 0x2a, 0x8e, 0x6b, 0x8b, 0x7b, 0x0a, 0x2b, 0x6c, 0x48, 0x89, 0xab, 0xb8, 0x98, 0x8c, 0x55, 0x19, - 0xbd, 0x83, 0x35, 0xf3, 0xe4, 0x0e, 0x96, 0xf9, 0x6d, 0x58, 0x1a, 0x4b, 0x1f, 0xb3, 0x1d, 0x9f, - 0x84, 0xff, 0xbb, 0x6e, 0xe2, 0xf8, 0x14, 0xff, 0xa5, 0x2b, 0x78, 0xe6, 0x8f, 0x0c, 0x98, 0x4f, - 0xe4, 0xd9, 0xa7, 0x6a, 0x77, 0x3c, 0x50, 0xdb, 0x1d, 0xa7, 0xab, 0x11, 0xb4, 0xc6, 0x87, 0x79, - 0x17, 0xd2, 0x5f, 0xdd, 0x26, 0x67, 0xdc, 0x78, 0xf2, 0x8c, 0x9b, 0x3f, 0xc9, 0x41, 0x39, 0x7a, - 0xac, 0x84, 0xde, 0xd0, 0x66, 0xee, 0xa2, 0x3a, 0x73, 0x8f, 0x47, 0x35, 0x21, 0xa8, 0x4c, 0xe3, - 0xfb, 0x50, 0x8e, 0x1e, 0xbb, 0x45, 0xed, 0x9c, 0xec, 0xe9, 0x51, 0xb4, 0xb4, 0xd1, 0x0b, 0x3a, - 0x1c, 0xe3, 0xb1, 0xf4, 0x31, 0x7c, 0x8d, 0x76, 0xcf, 0xe9, 0xf5, 0x1c, 0x2a, 0x6f, 0x92, 0xf2, - 0xfc, 0x26, 0x29, 0x4a, 0x1f, 0x37, 0x53, 0x64, 0x70, 0xaa, 0x26, 0xda, 0x81, 0x22, 0x0d, 0xc8, - 0x80, 0xca, 0xe6, 0xea, 0x6b, 0x99, 0xde, 0x71, 0x91, 0x01, 0x2f, 0x8b, 0x23, 0x17, 0x61, 0x14, - 0x8a, 0x05, 0x90, 0xf9, 0x1f, 0x06, 0x94, 0x42, 0x11, 0xf4, 0xba, 0x36, 0x79, 0xd5, 0xc4, 0xe4, - 0x71, 0xb9, 0x2f, 0xed, 0xdc, 0x99, 0x23, 0x03, 0xe6, 0xf5, 0x3b, 0x69, 0xa5, 0x19, 0x63, 0x9c, - 0xd4, 0x8c, 0x41, 0xaf, 0x43, 0xc9, 0xea, 0xf5, 0xbc, 0x8f, 0xb6, 0xdc, 0x43, 0xd9, 0x00, 0x8d, - 0x2e, 0x59, 0xd7, 0x25, 0x1d, 0x47, 0x12, 0xe8, 0x10, 0x16, 0x84, 0x5e, 0xfc, 0xda, 0x30, 0x9f, - 0xf9, 0xae, 0x2f, 0xed, 0xb0, 0x69, 0x2c, 0xb3, 0xf4, 0xa8, 0xa5, 0x63, 0xe2, 0xa4, 0x91, 0xc6, - 0xd5, 0xcf, 0xbe, 0x58, 0x39, 0xf3, 0xb3, 0x2f, 0x56, 0xce, 0x7c, 0xfe, 0xc5, 0xca, 0x99, 0x4f, - 0x8e, 0x57, 0x8c, 0xcf, 0x8e, 0x57, 0x8c, 0x9f, 0x1d, 0xaf, 0x18, 0x9f, 0x1f, 0xaf, 0x18, 0xff, - 0x76, 0xbc, 0x62, 0xfc, 0xc1, 0xbf, 0xaf, 0x9c, 0xf9, 0x76, 0xee, 0x70, 0xed, 0x7f, 0x02, 0x00, - 0x00, 0xff, 0xff, 0x69, 0xe1, 0x46, 0xe4, 0x07, 0x43, 0x00, 0x00, + 0x33, 0xc7, 0xa3, 0x1a, 0xc4, 0x6d, 0x38, 0x42, 0x45, 0xaf, 0xc0, 0x8c, 0x45, 0x6f, 0x3b, 0x3d, + 0x52, 0xcd, 0x5d, 0x31, 0xae, 0x96, 0x1b, 0xf3, 0x92, 0x7b, 0x66, 0x9d, 0xb7, 0x62, 0x49, 0x45, + 0x37, 0x61, 0xde, 0x27, 0x87, 0x0e, 0x75, 0x3c, 0x77, 0xc3, 0xeb, 0xf7, 0x9d, 0xa0, 0x9a, 0xd7, + 0xf9, 0x45, 0x2b, 0x4e, 0x70, 0xa1, 0x6f, 0xc0, 0x42, 0xd8, 0x72, 0x8f, 0x50, 0x6a, 0x75, 0x49, + 0xb5, 0xc0, 0x05, 0x17, 0xa4, 0xe0, 0xac, 0x6c, 0xc6, 0x49, 0x3e, 0xd4, 0x00, 0x14, 0x36, 0xad, + 0x0f, 0x83, 0x7d, 0xcf, 0xbf, 0x6f, 0xf5, 0x49, 0xb5, 0xc8, 0xa5, 0xa3, 0x41, 0xc5, 0x14, 0x9c, + 0xc2, 0x8d, 0xb6, 0x60, 0x59, 0x6f, 0xdd, 0xea, 0x5b, 0x4e, 0xaf, 0x3a, 0xc3, 0x41, 0x96, 0x25, + 0x48, 0x45, 0x21, 0xe1, 0x34, 0x7e, 0xf4, 0x2d, 0x38, 0xaf, 0x8f, 0x2b, 0x20, 0xa2, 0x37, 0xb3, + 0x1c, 0xe8, 0xbc, 0x04, 0x3a, 0xab, 0x11, 0x71, 0xba, 0x0c, 0xba, 0x0f, 0x2f, 0x8c, 0x11, 0x44, + 0xb7, 0x4a, 0x1c, 0xed, 0x05, 0x89, 0x36, 0xaf, 0x53, 0xf1, 0x04, 0x29, 0xf3, 0x2d, 0x58, 0x52, + 0x2c, 0xa8, 0xe5, 0x0d, 0x7d, 0x9b, 0x28, 0xeb, 0x6a, 0x9c, 0xb4, 0xae, 0xe6, 0xa7, 0x06, 0x9c, + 0x6f, 0x38, 0xc1, 0xde, 0xd0, 0x3e, 0x20, 0xc1, 0xbb, 0x64, 0xef, 0x6d, 0xcf, 0x3b, 0xd8, 0xb0, + 0x86, 0x94, 0xa0, 0x0f, 0x01, 0x6c, 0xaf, 0xdf, 0xf7, 0xdc, 0xd6, 0x80, 0xd8, 0xd2, 0xfa, 0x6e, + 0xd4, 0x9f, 0xb8, 0x25, 0xeb, 0x1b, 0x5c, 0x48, 0x85, 0x6a, 0x5c, 0x92, 0xca, 0xd1, 0x38, 0x0d, + 0x2b, 0x4a, 0xcc, 0x1f, 0xe6, 0xa0, 0xc8, 0x07, 0xf1, 0x1c, 0x0c, 0xff, 0x3e, 0x14, 0x28, 0x1b, + 0x58, 0x8e, 0xa3, 0xbf, 0x9e, 0x61, 0x60, 0x62, 0x7a, 0x07, 0xc4, 0x6e, 0xcc, 0x49, 0xe4, 0x02, + 0xfb, 0xc2, 0x1c, 0x07, 0x3d, 0x84, 0x19, 0x1a, 0x58, 0xc1, 0x90, 0xf2, 0x8d, 0x51, 0xb9, 0x56, + 0xcf, 0x8c, 0xc8, 0xa5, 0xe2, 0x05, 0x12, 0xdf, 0x58, 0xa2, 0x99, 0xff, 0x90, 0x87, 0x79, 0xce, + 0xb7, 0xe1, 0xb9, 0x6d, 0x87, 0xb9, 0x05, 0x74, 0x13, 0x0a, 0xc1, 0xd1, 0x20, 0x5c, 0x59, 0x33, + 0xec, 0xcc, 0xee, 0xd1, 0x80, 0x3c, 0x1e, 0xd5, 0x90, 0xce, 0xcd, 0x5a, 0x31, 0xe7, 0x47, 0xcd, + 0xa8, 0x8b, 0x62, 0xaf, 0x5f, 0xd7, 0x55, 0x3e, 0x1e, 0xd5, 0x52, 0xfc, 0x63, 0x3d, 0x42, 0xd2, + 0x3b, 0x86, 0x3e, 0x80, 0xf9, 0x9e, 0x45, 0x83, 0x77, 0x06, 0x6d, 0x2b, 0x20, 0xbb, 0x4e, 0x9f, + 0xf0, 0x5d, 0x55, 0xb9, 0xf6, 0xab, 0xd9, 0x16, 0x8a, 0x49, 0xc4, 0xa6, 0xde, 0xd4, 0x90, 0x70, + 0x02, 0x19, 0x1d, 0x02, 0x62, 0x2d, 0xbb, 0xbe, 0xe5, 0x52, 0x31, 0x2a, 0xa6, 0x2f, 0x3f, 0xb5, + 0xbe, 0xc8, 0x10, 0x9b, 0x63, 0x68, 0x38, 0x45, 0x03, 0xdb, 0x45, 0x3e, 0xb1, 0xa8, 0xe7, 0x4a, + 0xa7, 0x15, 0x2d, 0x12, 0xe6, 0xad, 0x58, 0x52, 0xd1, 0xab, 0x30, 0xdb, 0x97, 0xde, 0xad, 0x98, + 0xee, 0xdd, 0x42, 0xba, 0xf9, 0xe7, 0x39, 0xa8, 0x84, 0x2b, 0xd4, 0x71, 0xba, 0xcf, 0xc1, 0xd2, + 0x77, 0x35, 0x4b, 0xbf, 0x96, 0xd5, 0x2e, 0x45, 0xff, 0x26, 0xda, 0xfb, 0xa3, 0x84, 0xbd, 0x5f, + 0x9f, 0x12, 0xf7, 0x64, 0xab, 0xff, 0xa9, 0x01, 0x0b, 0x0a, 0x77, 0xd3, 0xa1, 0x01, 0x7a, 0x34, + 0x36, 0x53, 0xf5, 0x6c, 0x33, 0xc5, 0xa4, 0xf9, 0x3c, 0x2d, 0x4a, 0x6d, 0xa5, 0xb0, 0x45, 0x99, + 0xa5, 0x16, 0x14, 0x9d, 0x80, 0xf4, 0xd9, 0xde, 0xc8, 0x4f, 0xb3, 0x7d, 0x45, 0x07, 0x1b, 0x67, + 0x25, 0x74, 0x71, 0x9b, 0x81, 0x60, 0x81, 0x65, 0xfe, 0x3c, 0xaf, 0x0d, 0x83, 0x4d, 0x1f, 0xb2, + 0xa1, 0x14, 0xf8, 0x4e, 0xb7, 0x4b, 0x7c, 0x5a, 0x35, 0xb8, 0xae, 0x1b, 0x59, 0x75, 0xed, 0x0a, + 0xb9, 0x1d, 0xaf, 0xe7, 0xd8, 0x47, 0xf1, 0x68, 0x64, 0x33, 0xc5, 0x11, 0x30, 0x5a, 0x87, 0xb2, + 0x3f, 0x74, 0x05, 0xa3, 0xdc, 0xed, 0x2f, 0x49, 0xf6, 0x32, 0x0e, 0x09, 0x8f, 0x47, 0x35, 0xe1, + 0x5a, 0xa2, 0x16, 0x1c, 0x4b, 0x21, 0x4b, 0xf3, 0xff, 0x62, 0x91, 0xdf, 0xc8, 0xec, 0xff, 0xb9, + 0xdd, 0x44, 0x76, 0x19, 0xb7, 0xa9, 0xfe, 0x1e, 0xb5, 0xe1, 0x32, 0x1d, 0xda, 0x36, 0xa1, 0xb4, + 0x33, 0xec, 0xf1, 0x9e, 0xd0, 0xb7, 0x1d, 0x1a, 0x78, 0xfe, 0x51, 0xd3, 0x61, 0x21, 0x06, 0xdb, + 0x74, 0xc5, 0xc6, 0x95, 0xe3, 0x51, 0xed, 0x72, 0xeb, 0x04, 0x3e, 0x7c, 0x22, 0x0a, 0x7a, 0x0f, + 0xaa, 0x1d, 0xcb, 0xe9, 0x91, 0x76, 0x8a, 0x86, 0x22, 0xd7, 0x70, 0xf9, 0x78, 0x54, 0xab, 0xde, + 0x9e, 0xc0, 0x83, 0x27, 0x4a, 0x9b, 0xff, 0x62, 0xc0, 0xd2, 0x98, 0x4d, 0xa3, 0x1b, 0x50, 0x61, + 0xae, 0xe4, 0x21, 0xf1, 0xd9, 0x61, 0xcd, 0x4d, 0x35, 0x1f, 0xc7, 0x1a, 0xcd, 0x98, 0x84, 0x55, + 0x3e, 0xf4, 0xa9, 0x01, 0xcb, 0x4e, 0xdf, 0xea, 0x92, 0x8d, 0x7d, 0xcb, 0xed, 0x92, 0x70, 0x51, + 0xa5, 0x3d, 0xbe, 0x95, 0x61, 0xe6, 0xb7, 0xc7, 0xa4, 0xe5, 0x2e, 0xfb, 0x8a, 0x54, 0xbe, 0x3c, + 0xce, 0x41, 0x71, 0x9a, 0x52, 0xf3, 0xc7, 0x06, 0x94, 0xf9, 0xc8, 0x9e, 0xc3, 0xce, 0xbb, 0xa7, + 0xef, 0xbc, 0xab, 0x59, 0x77, 0xc3, 0x84, 0x3d, 0x07, 0x50, 0x12, 0x3d, 0xf7, 0xba, 0xe6, 0x7f, + 0x15, 0xe4, 0xfe, 0x6b, 0x7a, 0xdd, 0x30, 0xa6, 0x5e, 0x85, 0xb2, 0xed, 0xb9, 0x81, 0xc5, 0xba, + 0x2c, 0x8f, 0xd0, 0xa5, 0x70, 0x6b, 0x6c, 0x84, 0x04, 0x1c, 0xf3, 0xb0, 0x43, 0xa0, 0xe3, 0xf5, + 0x7a, 0xde, 0x47, 0x7c, 0x23, 0x95, 0x62, 0x9f, 0x75, 0x9b, 0xb7, 0x62, 0x49, 0x45, 0xaf, 0x43, + 0x69, 0xc0, 0x42, 0x34, 0x4f, 0xfa, 0xc4, 0x52, 0x3c, 0xea, 0x1d, 0xd9, 0x8e, 0x23, 0x0e, 0x74, + 0x1d, 0xe6, 0xa8, 0xe3, 0xda, 0xa4, 0x45, 0x6c, 0xcf, 0x6d, 0x53, 0x6e, 0xeb, 0xf9, 0xc6, 0xe2, + 0xf1, 0xa8, 0x36, 0xd7, 0x52, 0xda, 0xb1, 0xc6, 0x85, 0xde, 0x85, 0x32, 0xff, 0xe6, 0xe7, 0x5f, + 0x71, 0xea, 0xf3, 0xef, 0x2c, 0x1b, 0x64, 0x2b, 0x04, 0xc0, 0x31, 0x16, 0xba, 0x06, 0xc0, 0xd2, + 0x14, 0x1a, 0x58, 0xfd, 0x01, 0xe5, 0x27, 0x79, 0x29, 0xde, 0xbe, 0xbb, 0x11, 0x05, 0x2b, 0x5c, + 0xe8, 0x35, 0x28, 0x07, 0x96, 0xd3, 0x6b, 0x3a, 0x2e, 0xa1, 0x3c, 0x12, 0xce, 0x0b, 0x05, 0xbb, + 0x61, 0x23, 0x8e, 0xe9, 0xa8, 0x0e, 0xd0, 0x63, 0x9b, 0xa6, 0x71, 0x14, 0x10, 0xca, 0x23, 0xdd, + 0x7c, 0x63, 0x9e, 0x81, 0x37, 0xa3, 0x56, 0xac, 0x70, 0xb0, 0x59, 0x77, 0xbd, 0x8f, 0x2c, 0x27, + 0xa8, 0x96, 0xf5, 0x59, 0xbf, 0xef, 0xbd, 0x6b, 0x39, 0x01, 0x96, 0x54, 0xf4, 0x32, 0xcc, 0x1e, + 0xca, 0x9d, 0x06, 0x1c, 0xb4, 0xc2, 0x8e, 0xdd, 0x70, 0x87, 0x85, 0x34, 0xb4, 0x0f, 0x97, 0x1d, + 0x97, 0x12, 0x7b, 0xe8, 0x93, 0xd6, 0x81, 0x33, 0xd8, 0x6d, 0xb6, 0x1e, 0x12, 0xdf, 0xe9, 0x1c, + 0x35, 0x2c, 0xfb, 0x80, 0xb8, 0xed, 0x6a, 0x85, 0x2b, 0xf9, 0x15, 0xa9, 0xe4, 0xf2, 0xf6, 0x09, + 0xbc, 0xf8, 0x44, 0x24, 0xf3, 0xd3, 0xf0, 0x80, 0x7f, 0x30, 0x0c, 0x06, 0xc3, 0x00, 0xbd, 0x05, + 0xb9, 0xc0, 0x93, 0xdb, 0xe6, 0x25, 0x65, 0xad, 0xea, 0x2c, 0xc0, 0x8a, 0x0f, 0x72, 0x4c, 0x3a, + 0xc4, 0x27, 0xae, 0x4d, 0x1a, 0x33, 0xc7, 0xa3, 0x5a, 0x6e, 0xd7, 0xc3, 0xb9, 0xc0, 0x43, 0xef, + 0x01, 0x0c, 0x86, 0x74, 0xbf, 0x45, 0x6c, 0x9f, 0x04, 0xf2, 0x04, 0xbf, 0x9a, 0x06, 0xd2, 0xf4, + 0x6c, 0xab, 0x97, 0x44, 0xe2, 0xf3, 0xbb, 0x13, 0xc9, 0x63, 0x05, 0x0b, 0xb5, 0xa1, 0xc2, 0x37, + 0x7e, 0xd3, 0xda, 0x23, 0x3d, 0x66, 0xb0, 0xf9, 0x8c, 0xfe, 0x7d, 0x3b, 0x92, 0x8a, 0x9d, 0x5a, + 0xdc, 0x46, 0xb1, 0x0a, 0x6b, 0xfe, 0xae, 0x01, 0xcb, 0x7c, 0x32, 0x76, 0x3c, 0x1a, 0x88, 0xbc, + 0x85, 0x7b, 0xfe, 0x97, 0x61, 0x96, 0x9d, 0x03, 0x96, 0xdb, 0xe6, 0x67, 0x60, 0x59, 0xac, 0xda, + 0x86, 0x68, 0xc2, 0x21, 0x0d, 0x5d, 0x86, 0x82, 0xe5, 0x77, 0x85, 0x67, 0x28, 0x37, 0x4a, 0x2c, + 0x04, 0x59, 0xf7, 0xbb, 0x14, 0xf3, 0x56, 0x66, 0x22, 0xd4, 0xf6, 0x9d, 0xc1, 0x58, 0x2e, 0xda, + 0xe2, 0xad, 0x58, 0x52, 0xcd, 0x9f, 0xce, 0xc2, 0x9c, 0x9a, 0x5d, 0x3f, 0x87, 0x98, 0xeb, 0x7d, + 0x28, 0x85, 0xd9, 0x9a, 0x5c, 0xb5, 0xb5, 0x0c, 0x53, 0x2b, 0x72, 0x37, 0x2c, 0x05, 0x1b, 0x73, + 0xcc, 0x75, 0x84, 0x5f, 0x38, 0x02, 0x44, 0x04, 0x16, 0xe5, 0x41, 0x4f, 0xda, 0x8d, 0x23, 0x3e, + 0xf7, 0xf2, 0x7c, 0xce, 0x64, 0x5f, 0xe7, 0x8e, 0x47, 0xb5, 0xc5, 0xdd, 0x04, 0x00, 0x1e, 0x83, + 0x44, 0xeb, 0x50, 0xe8, 0xf8, 0x5e, 0x9f, 0x7b, 0xa6, 0x8c, 0xd0, 0x7c, 0x85, 0x6e, 0xfb, 0x5e, + 0x1f, 0x73, 0x51, 0xf4, 0x1e, 0xcc, 0xec, 0xf1, 0xd4, 0x54, 0xfa, 0xaa, 0x4c, 0x41, 0x62, 0x32, + 0x97, 0x6d, 0x00, 0x5b, 0x53, 0xd1, 0x8c, 0x25, 0x1e, 0x5a, 0xd3, 0x0f, 0xd9, 0x19, 0xbe, 0xf5, + 0x17, 0x4e, 0x3c, 0x60, 0xbf, 0x01, 0x79, 0xe2, 0x1e, 0x56, 0x67, 0xb9, 0xa5, 0x5f, 0x4a, 0x1b, + 0xce, 0x96, 0x7b, 0xf8, 0xd0, 0xf2, 0x1b, 0x15, 0xb9, 0xb4, 0xf9, 0x2d, 0xf7, 0x10, 0x33, 0x19, + 0x74, 0x00, 0x15, 0x65, 0x7a, 0xaa, 0x25, 0x0e, 0x71, 0x7d, 0xca, 0xb0, 0x4d, 0xe4, 0xc2, 0xd1, + 0x9e, 0x51, 0x56, 0x00, 0xab, 0xe8, 0xe8, 0xfb, 0x06, 0x9c, 0x6f, 0x7b, 0xf6, 0x01, 0x3b, 0xbe, + 0x7d, 0x2b, 0x20, 0xdd, 0x23, 0x79, 0x74, 0x71, 0x4f, 0x58, 0xb9, 0x76, 0x2b, 0x83, 0xde, 0xcd, + 0x34, 0xf9, 0xc6, 0xc5, 0xe3, 0x51, 0xed, 0x7c, 0x2a, 0x09, 0xa7, 0x6b, 0xe4, 0x7d, 0xa1, 0x7c, + 0x15, 0x92, 0x7d, 0x81, 0xcc, 0x7d, 0x69, 0xa5, 0xc9, 0x8b, 0xbe, 0xa4, 0x92, 0x70, 0xba, 0x46, + 0xf3, 0x9f, 0x8b, 0xd2, 0xb1, 0xca, 0x12, 0xc7, 0xd7, 0xb5, 0x34, 0xb8, 0x96, 0x48, 0x83, 0x17, + 0x14, 0x56, 0x25, 0x07, 0x8e, 0x2d, 0x32, 0xf7, 0x8c, 0x2d, 0xb2, 0x0e, 0x20, 0xe6, 0xb0, 0xe3, + 0xf4, 0x48, 0xe8, 0x91, 0x98, 0x83, 0xd8, 0x8c, 0x5a, 0xb1, 0xc2, 0x81, 0x9a, 0x90, 0xef, 0xca, + 0x18, 0x37, 0x9b, 0x77, 0xb8, 0xe3, 0x04, 0x6a, 0x1f, 0x66, 0x99, 0x85, 0xde, 0x71, 0x02, 0xcc, + 0x60, 0xd0, 0x43, 0x98, 0xe1, 0x7e, 0x97, 0x56, 0x8b, 0x99, 0xf3, 0x17, 0xbe, 0xcd, 0x25, 0x5a, + 0xe4, 0x3b, 0x79, 0x23, 0xc5, 0x12, 0x8d, 0xc5, 0x05, 0x2c, 0x12, 0x22, 0x1f, 0x07, 0x9b, 0x8e, + 0x2f, 0xeb, 0x66, 0x4a, 0x58, 0x1f, 0x52, 0xb0, 0xc2, 0x85, 0xbe, 0x03, 0x73, 0x72, 0x05, 0xc5, + 0xb1, 0x35, 0x3b, 0xe5, 0xb1, 0x25, 0x82, 0x20, 0x05, 0x01, 0x6b, 0x78, 0xe8, 0xb7, 0x60, 0x96, + 0xf2, 0x5f, 0x74, 0x8a, 0x9d, 0x28, 0x64, 0xd5, 0x09, 0x8c, 0x72, 0x74, 0x41, 0xa2, 0x38, 0x44, + 0x45, 0x07, 0x7c, 0xd0, 0x1d, 0xa7, 0x7b, 0xcf, 0x1a, 0xb0, 0x5d, 0xc7, 0x74, 0xfc, 0x5a, 0xa6, + 0xd4, 0x47, 0x0a, 0xa9, 0x6a, 0xd4, 0xd9, 0x92, 0x90, 0x58, 0x81, 0x37, 0xff, 0x35, 0x0c, 0xb5, + 0xf9, 0xc1, 0x68, 0xa5, 0x54, 0xdd, 0x9e, 0x71, 0xd6, 0x95, 0x70, 0x66, 0xb9, 0x2f, 0xd3, 0x99, + 0x99, 0xff, 0x39, 0x1b, 0x6e, 0x5a, 0x91, 0x1c, 0xad, 0x41, 0x71, 0xb0, 0x6f, 0xd1, 0x70, 0xd7, + 0x86, 0x99, 0x49, 0x71, 0x87, 0x35, 0x3e, 0x1e, 0xd5, 0x40, 0x44, 0x0b, 0xec, 0x0b, 0x0b, 0x4e, + 0x1e, 0xb0, 0x5b, 0xae, 0x4d, 0x7a, 0x3d, 0xd2, 0x96, 0x21, 0x78, 0x1c, 0xb0, 0x87, 0x04, 0x1c, + 0xf3, 0xa0, 0x9b, 0x51, 0xd5, 0x46, 0xec, 0xc2, 0x15, 0xbd, 0x6a, 0xf3, 0x98, 0x59, 0x97, 0x28, + 0x37, 0x4c, 0xac, 0xe2, 0x14, 0x4e, 0xae, 0xe2, 0xa0, 0x0e, 0xcc, 0xd3, 0xc0, 0xf2, 0x83, 0x28, + 0x32, 0x3e, 0x45, 0x30, 0x8e, 0x8e, 0x47, 0xb5, 0xf9, 0x96, 0x86, 0x82, 0x13, 0xa8, 0x68, 0x08, + 0xcb, 0xb6, 0xd7, 0x1f, 0xf4, 0x48, 0x58, 0x92, 0x12, 0xca, 0xa6, 0xaf, 0xb4, 0x5d, 0x60, 0xe9, + 0xdf, 0xc6, 0x38, 0x14, 0x4e, 0xc3, 0x47, 0xbf, 0x0e, 0xa5, 0xf6, 0xd0, 0xb7, 0x58, 0xa3, 0x0c, + 0xec, 0x5f, 0x0c, 0x53, 0x99, 0x4d, 0xd9, 0xfe, 0x78, 0x54, 0x3b, 0xcb, 0x72, 0x81, 0x7a, 0xd8, + 0x80, 0x23, 0x11, 0xb4, 0x07, 0x97, 0x3c, 0x1e, 0xfc, 0x0a, 0xd7, 0x27, 0x02, 0x8c, 0x70, 0x7b, + 0xcb, 0x2a, 0x77, 0x58, 0xb6, 0xbc, 0xf4, 0x60, 0x22, 0x27, 0x3e, 0x01, 0x05, 0xdd, 0x81, 0x19, + 0xb1, 0x89, 0xe4, 0xa9, 0x98, 0x29, 0x3e, 0x01, 0x71, 0x53, 0xc1, 0xc4, 0xb0, 0x14, 0x47, 0x8f, + 0x60, 0x46, 0xa8, 0x91, 0x47, 0xda, 0xf5, 0xe9, 0x0a, 0xb7, 0xa2, 0xfb, 0xb1, 0xff, 0x14, 0xdf, + 0x58, 0x62, 0xa2, 0x5d, 0x5e, 0x26, 0x63, 0x7e, 0xb9, 0xc2, 0xf7, 0x59, 0x96, 0x42, 0x73, 0x8b, + 0x09, 0x6c, 0xbb, 0x1d, 0x4f, 0x2b, 0x8f, 0x71, 0xaf, 0x2c, 0xb0, 0x98, 0x57, 0xee, 0x79, 0xdd, + 0x96, 0xeb, 0x0c, 0x06, 0x24, 0xa8, 0xce, 0xe9, 0x5e, 0xb9, 0x19, 0x51, 0xb0, 0xc2, 0x85, 0x08, + 0x77, 0x6a, 0xa2, 0x94, 0x4b, 0xab, 0x67, 0x79, 0x6f, 0xd6, 0xa6, 0xa8, 0x72, 0x09, 0x49, 0xcd, + 0x9d, 0x49, 0x30, 0xac, 0x00, 0x9b, 0xb6, 0x2c, 0x89, 0xa8, 0xb3, 0x83, 0xee, 0x2b, 0x39, 0xd0, + 0xcd, 0xd3, 0xcc, 0xef, 0xae, 0xa7, 0xa6, 0x45, 0x66, 0x53, 0x66, 0x15, 0x3a, 0x0b, 0xba, 0x21, + 0x73, 0x9a, 0x4d, 0xa7, 0x4b, 0x68, 0x20, 0x5d, 0x8c, 0x9e, 0xa4, 0x08, 0x12, 0x56, 0xf9, 0xcc, + 0x9f, 0x14, 0xe0, 0xac, 0x84, 0x13, 0x11, 0x07, 0xba, 0xa1, 0x85, 0x16, 0x2f, 0x26, 0x42, 0x8b, + 0x25, 0x8d, 0x59, 0x09, 0x2e, 0x7c, 0x98, 0xd7, 0xc3, 0x28, 0x19, 0x64, 0xdc, 0xcc, 0x1c, 0xb1, + 0x69, 0xc8, 0xc2, 0x43, 0xe8, 0xf1, 0x1a, 0x4e, 0x68, 0x60, 0x3a, 0xf5, 0x70, 0x49, 0xa6, 0x02, + 0x37, 0x33, 0x47, 0x66, 0x29, 0x3a, 0xf5, 0xb8, 0x0c, 0x27, 0x34, 0x30, 0x9d, 0xf6, 0x90, 0x06, + 0x5e, 0x3f, 0xd2, 0x59, 0xc8, 0xac, 0x73, 0x83, 0x0b, 0xa6, 0xe8, 0xdc, 0xd0, 0x10, 0x71, 0x42, + 0x03, 0xfa, 0x91, 0x01, 0x17, 0x3e, 0x20, 0xee, 0x81, 0xe3, 0xd2, 0x1d, 0x67, 0x40, 0x7a, 0x8e, + 0x1b, 0x8f, 0x58, 0xf8, 0xde, 0xdf, 0xc8, 0xa0, 0xfd, 0xae, 0x8e, 0xa0, 0x77, 0xe3, 0x2b, 0xc7, + 0xa3, 0xda, 0x85, 0xbb, 0xe9, 0x3a, 0xf0, 0x24, 0xe5, 0xe6, 0xf7, 0x8a, 0xd2, 0xe2, 0xd5, 0x93, + 0x51, 0x3d, 0x4b, 0x8c, 0x27, 0x9c, 0x25, 0x3e, 0xcc, 0xf3, 0x5b, 0x61, 0xc7, 0x96, 0x17, 0x63, + 0x53, 0x58, 0xcd, 0x1d, 0x4d, 0x50, 0x1c, 0xca, 0x7c, 0x36, 0x75, 0x02, 0x4e, 0x68, 0x40, 0x2e, + 0x9c, 0x15, 0xe0, 0xa1, 0xca, 0x7c, 0xe6, 0xfb, 0xbd, 0x3b, 0x4e, 0xf0, 0x76, 0x24, 0x27, 0x34, + 0x2e, 0x1d, 0x8f, 0x6a, 0x67, 0xb5, 0x76, 0xac, 0xc3, 0xa3, 0x21, 0x2c, 0x2a, 0x65, 0x46, 0x3e, + 0x5d, 0xd2, 0x66, 0xbe, 0x3e, 0x5d, 0x61, 0x53, 0x28, 0xe4, 0x29, 0xec, 0x76, 0x02, 0x10, 0x8f, + 0xa9, 0x90, 0xc3, 0xec, 0x59, 0xd1, 0x30, 0x8b, 0xd3, 0x0c, 0xb3, 0x69, 0xa5, 0x0f, 0x33, 0x6e, + 0xc7, 0x3a, 0x3c, 0xfa, 0x2e, 0x2c, 0xee, 0x25, 0x2e, 0x53, 0xe5, 0x59, 0x7d, 0x2b, 0x53, 0x9e, + 0x91, 0x72, 0x0f, 0x2b, 0xc6, 0x9a, 0x24, 0xe1, 0x31, 0x3d, 0xe6, 0x8f, 0x0b, 0x80, 0xc6, 0x6f, + 0x09, 0xd0, 0x75, 0xcd, 0x95, 0x5d, 0x49, 0xb8, 0xb2, 0x45, 0x55, 0x42, 0xf1, 0x64, 0x8f, 0x60, + 0x46, 0xf4, 0x77, 0x8a, 0xea, 0x85, 0xec, 0x88, 0x04, 0x4b, 0x33, 0x0a, 0x89, 0xc9, 0x02, 0x78, + 0x69, 0x8f, 0xd2, 0xee, 0x4e, 0x01, 0x9f, 0x66, 0xe5, 0x21, 0x2a, 0xda, 0x97, 0x07, 0x81, 0xb0, + 0x05, 0x69, 0x69, 0x37, 0x4e, 0x55, 0x42, 0x17, 0x45, 0x05, 0xa5, 0x1d, 0xab, 0xd0, 0x72, 0xa2, + 0x7a, 0xd6, 0x9e, 0x34, 0xad, 0xa7, 0x98, 0x28, 0xc5, 0xac, 0x24, 0x26, 0x22, 0x50, 0x8e, 0xd6, + 0x59, 0x1a, 0xd2, 0x29, 0x14, 0xa4, 0x5b, 0x50, 0x8c, 0x6c, 0xfe, 0xfe, 0x2c, 0x28, 0xc9, 0x02, + 0xfa, 0x26, 0xcc, 0x53, 0xe2, 0x1f, 0x3a, 0x36, 0x59, 0xb7, 0x6d, 0x6f, 0xe8, 0x86, 0x27, 0x69, + 0x74, 0x5b, 0xdb, 0xd2, 0xa8, 0x38, 0xc1, 0xcd, 0xaf, 0xc2, 0xf9, 0x81, 0x21, 0x8d, 0x27, 0xfb, + 0x55, 0x78, 0x22, 0x17, 0x95, 0xf5, 0x30, 0x89, 0xa6, 0x15, 0xd5, 0xf2, 0xcf, 0xba, 0xa8, 0xf6, + 0x1d, 0x28, 0x51, 0xfd, 0x34, 0xfb, 0x5a, 0xf6, 0x40, 0x45, 0x1e, 0x20, 0x51, 0xbd, 0x3f, 0x3a, + 0x35, 0x22, 0x4c, 0x36, 0x29, 0x32, 0xcc, 0x2c, 0x4e, 0x37, 0x29, 0x4f, 0x08, 0x30, 0x7f, 0x13, + 0xca, 0x3e, 0x11, 0x13, 0x44, 0xa5, 0x89, 0xa4, 0x66, 0xda, 0x58, 0x32, 0x61, 0xf2, 0xe1, 0xd0, + 0xf1, 0x49, 0x9f, 0xb8, 0x01, 0x8d, 0xf3, 0xa8, 0x90, 0x4a, 0x71, 0x8c, 0x86, 0x3e, 0x00, 0x18, + 0x44, 0x65, 0x5b, 0x99, 0xc5, 0x67, 0x8e, 0xde, 0xf4, 0x82, 0x6f, 0x1c, 0x36, 0xc6, 0xed, 0x58, + 0x41, 0x47, 0xef, 0xc3, 0xc5, 0x38, 0x11, 0xd9, 0x24, 0x56, 0x9b, 0x9f, 0xb1, 0xf2, 0x6e, 0x44, + 0xdc, 0x16, 0x7c, 0xf5, 0x78, 0x54, 0xbb, 0xb8, 0x31, 0x89, 0x09, 0x4f, 0x96, 0x47, 0x7d, 0x98, + 0x73, 0xbd, 0x36, 0x69, 0x91, 0x1e, 0xb1, 0x03, 0xcf, 0x97, 0x19, 0x43, 0x96, 0x8c, 0x5e, 0xd4, + 0x9e, 0xac, 0xde, 0x7d, 0x45, 0x5c, 0xd4, 0x27, 0xd4, 0x16, 0xac, 0xc1, 0xa3, 0x37, 0x61, 0xbe, + 0xcf, 0x36, 0xc2, 0xae, 0x3f, 0xa4, 0x01, 0x69, 0x6f, 0xac, 0xf3, 0xcc, 0xa2, 0x24, 0x5c, 0xd6, + 0x3d, 0x8d, 0x82, 0x13, 0x9c, 0xe6, 0x1f, 0x19, 0x90, 0xf2, 0x4a, 0x46, 0x33, 0x7d, 0xe3, 0x59, + 0x9b, 0xfe, 0x2b, 0x30, 0x43, 0xe3, 0x0b, 0x06, 0xb5, 0x8e, 0x2e, 0xaa, 0x2f, 0x92, 0x6a, 0xfe, + 0x95, 0x01, 0xe7, 0xd2, 0x4a, 0x1c, 0xcc, 0x06, 0xa3, 0x82, 0x86, 0xec, 0x5e, 0xf6, 0x6a, 0x8f, + 0x7a, 0xf9, 0x26, 0x20, 0x70, 0x8c, 0xc6, 0x7c, 0x51, 0x9b, 0xd0, 0xc0, 0x71, 0x79, 0x66, 0xb9, + 0xe9, 0xf8, 0xb2, 0x8f, 0x91, 0x2f, 0xda, 0xd4, 0xa8, 0x38, 0xc1, 0x6d, 0xfe, 0xa0, 0x00, 0xcb, + 0x29, 0x21, 0x27, 0xda, 0x92, 0xc5, 0xed, 0x29, 0xee, 0x65, 0xa2, 0x57, 0x10, 0x5a, 0x81, 0x1b, + 0x06, 0xc3, 0x5e, 0xef, 0xe9, 0xee, 0x67, 0x42, 0x79, 0xac, 0x60, 0x85, 0xd5, 0xea, 0xfc, 0x29, + 0xaa, 0xd5, 0x77, 0x01, 0x91, 0x8f, 0x07, 0x1e, 0x25, 0x32, 0x75, 0xf0, 0xf8, 0xf1, 0x51, 0xe0, + 0x36, 0x18, 0xbd, 0x80, 0xd9, 0x1a, 0xe3, 0xc0, 0x29, 0x52, 0x68, 0x15, 0xca, 0x1d, 0xcf, 0xb7, + 0x09, 0xeb, 0x25, 0xf7, 0x5c, 0x4a, 0xf1, 0xe5, 0x76, 0x48, 0xc0, 0x31, 0x0f, 0x7a, 0x2f, 0x2e, + 0xce, 0xcd, 0x64, 0xbe, 0x53, 0x12, 0x63, 0xe6, 0x8e, 0x62, 0x72, 0x55, 0x6e, 0x1d, 0x16, 0xb8, + 0xc0, 0xfa, 0xce, 0x76, 0x58, 0xf6, 0x17, 0xcf, 0xef, 0x2e, 0x48, 0x11, 0x51, 0xf2, 0x8d, 0xc9, + 0x38, 0xc9, 0x6f, 0x7e, 0x56, 0x80, 0xe5, 0x94, 0x44, 0x2b, 0xba, 0xea, 0x30, 0x9e, 0xe6, 0xaa, + 0xe3, 0xcb, 0xb2, 0x84, 0x57, 0x61, 0xd6, 0xf5, 0x36, 0x2c, 0x7b, 0x9f, 0xc8, 0x6b, 0xe5, 0x68, + 0x8a, 0xee, 0x8b, 0x66, 0x1c, 0xd2, 0x43, 0xa3, 0x29, 0x9c, 0xc2, 0x68, 0xa6, 0x5e, 0xe8, 0x6f, + 0x86, 0xc9, 0x6e, 0xc7, 0xe9, 0x91, 0x1d, 0x2b, 0xd8, 0x97, 0xd5, 0xe1, 0x78, 0x67, 0x6a, 0x54, + 0x9c, 0xe0, 0x46, 0xdf, 0x82, 0xb2, 0x58, 0x1e, 0xbf, 0x4b, 0x33, 0x5c, 0xca, 0x44, 0x9d, 0x69, + 0x84, 0x42, 0x38, 0x96, 0x47, 0x03, 0xb8, 0xc0, 0xa3, 0x32, 0xe6, 0xaf, 0xfb, 0xce, 0x77, 0xf9, + 0xf6, 0x97, 0xaf, 0x5f, 0x44, 0xb9, 0xe9, 0x26, 0xcb, 0xed, 0xb6, 0xd3, 0x59, 0x1e, 0x4f, 0x26, + 0xe1, 0x49, 0xb0, 0xe6, 0x0f, 0x0c, 0x48, 0xbf, 0x4a, 0xd1, 0x07, 0x66, 0x3c, 0xe5, 0xc0, 0x5e, + 0x8e, 0x17, 0x5f, 0x94, 0x3e, 0x2b, 0x69, 0x0b, 0x6f, 0xfe, 0xb1, 0x01, 0xcb, 0x29, 0xb9, 0xe0, + 0x2f, 0xc6, 0xb9, 0xf1, 0x79, 0x2e, 0xd9, 0xb9, 0xad, 0x43, 0xe2, 0x06, 0xa7, 0xbb, 0xc0, 0xd9, + 0x12, 0xd7, 0x26, 0x39, 0x59, 0x01, 0xcd, 0x94, 0xc8, 0xf1, 0x5a, 0x9a, 0x7e, 0x5f, 0xf2, 0x14, + 0xee, 0x75, 0xf2, 0xfd, 0x5c, 0xe1, 0x79, 0xdf, 0xcf, 0x99, 0x7f, 0x6d, 0xc0, 0xbc, 0x7e, 0x2f, + 0x84, 0xbe, 0x0a, 0xf9, 0xa1, 0xef, 0xc8, 0x49, 0x8d, 0x7a, 0xff, 0x0e, 0xde, 0xc6, 0xac, 0x9d, + 0x91, 0x7d, 0xd2, 0x91, 0x2b, 0x16, 0x91, 0x31, 0xe9, 0x60, 0xd6, 0x8e, 0x08, 0x54, 0x06, 0xbe, + 0xf7, 0xf1, 0x91, 0x38, 0x8c, 0xa7, 0x78, 0xcb, 0xba, 0x13, 0x4b, 0xc5, 0x25, 0x37, 0xa5, 0x11, + 0xab, 0xb8, 0x3c, 0xcc, 0x19, 0x2f, 0x24, 0xfc, 0x62, 0x98, 0xeb, 0xdf, 0xe7, 0x60, 0x56, 0x1a, + 0x0d, 0xfa, 0x10, 0xe6, 0xbb, 0xda, 0xf4, 0x4e, 0xd1, 0xad, 0xc4, 0x7d, 0x5d, 0xe4, 0x17, 0xf5, + 0x76, 0x9c, 0x50, 0x80, 0x7e, 0x07, 0x96, 0xba, 0x4e, 0xa0, 0x8f, 0x69, 0x8a, 0xcb, 0xca, 0x3b, + 0x49, 0xd9, 0xc6, 0x45, 0xa9, 0x78, 0x69, 0x8c, 0x84, 0xc7, 0x35, 0xa1, 0x07, 0x50, 0xf0, 0x49, + 0x67, 0x9a, 0x07, 0x21, 0x6c, 0x4f, 0x91, 0x0e, 0xdf, 0x63, 0x51, 0x88, 0x84, 0x49, 0x87, 0x62, + 0x0e, 0x64, 0xfe, 0x9e, 0x58, 0xea, 0x44, 0x31, 0xe5, 0x7f, 0xe3, 0x79, 0xf9, 0x7f, 0x1b, 0x00, + 0x71, 0x67, 0x7f, 0xf9, 0xd6, 0xd6, 0xfc, 0xcb, 0x1c, 0x8c, 0x33, 0xb2, 0x7d, 0x61, 0x8b, 0x14, + 0xcf, 0x48, 0xfd, 0x4b, 0x87, 0xa4, 0xa2, 0x47, 0x30, 0x63, 0xf1, 0xff, 0x44, 0x4c, 0xd1, 0x63, + 0xa1, 0x6a, 0xc3, 0x73, 0x03, 0xdf, 0xeb, 0xbd, 0x43, 0x89, 0xaf, 0xfc, 0x11, 0x81, 0x63, 0x61, + 0x89, 0x89, 0x08, 0xcb, 0x21, 0xe4, 0xff, 0x1a, 0xa6, 0x78, 0x52, 0x3c, 0xae, 0x40, 0xc9, 0x27, + 0x24, 0x1c, 0x8e, 0x91, 0xa7, 0xb8, 0xe3, 0x33, 0xbf, 0x6f, 0xc0, 0x62, 0xb2, 0xf2, 0xc8, 0xe4, + 0x79, 0x44, 0xb0, 0xbd, 0x99, 0xac, 0xeb, 0x6e, 0x8b, 0x66, 0x1c, 0xd2, 0xd1, 0x5d, 0x98, 0x65, + 0x91, 0x21, 0x96, 0xde, 0x36, 0x63, 0x5c, 0xc9, 0xcf, 0xf7, 0xdb, 0x42, 0x0e, 0x87, 0x00, 0xe6, + 0x3f, 0x1a, 0x80, 0xc6, 0x6b, 0x53, 0x68, 0x07, 0xce, 0x89, 0x57, 0xeb, 0xf2, 0xc2, 0x75, 0x5b, + 0xeb, 0xda, 0x65, 0xd9, 0xb5, 0x73, 0xcd, 0x14, 0x1e, 0x9c, 0x2a, 0x19, 0x45, 0xc2, 0xb9, 0xd3, + 0x47, 0xc2, 0xaf, 0xc0, 0xcc, 0x80, 0xcd, 0x55, 0x5b, 0x86, 0xab, 0xd1, 0x8a, 0xef, 0xf0, 0x56, + 0x2c, 0xa9, 0xe6, 0xdf, 0xe4, 0xa0, 0x3a, 0xe9, 0xc9, 0xea, 0x97, 0x30, 0xb2, 0x47, 0xda, 0xc8, + 0xde, 0xcc, 0xfc, 0x3e, 0x22, 0xf0, 0x89, 0xd5, 0xdf, 0xb5, 0xba, 0x27, 0x27, 0x82, 0x7d, 0x58, + 0x50, 0xb4, 0x9e, 0xf2, 0xef, 0x09, 0x51, 0x22, 0xd3, 0xd4, 0xa1, 0x70, 0x12, 0xdb, 0x6c, 0x01, + 0xc4, 0x6f, 0xee, 0xd0, 0x15, 0x28, 0xb8, 0x56, 0x3f, 0x0c, 0xa4, 0xa2, 0xee, 0xf1, 0x3f, 0x21, + 0x71, 0x0a, 0x7a, 0x09, 0x8a, 0x87, 0x56, 0x6f, 0x18, 0xfe, 0xcb, 0x2b, 0x7a, 0x39, 0xfb, 0x90, + 0x35, 0x62, 0x41, 0x33, 0xff, 0x24, 0x07, 0x15, 0xe5, 0x4d, 0xc8, 0xb3, 0xca, 0x91, 0x5f, 0x80, + 0x9c, 0x45, 0x79, 0x4e, 0x52, 0x16, 0x97, 0x78, 0xeb, 0x14, 0xe7, 0x2c, 0x8a, 0xde, 0x85, 0xe2, + 0xc0, 0x0a, 0xf6, 0xc3, 0x77, 0xbf, 0xd7, 0xa6, 0x7b, 0xb1, 0xc2, 0x72, 0x88, 0x78, 0x1c, 0xec, + 0x8b, 0x62, 0x81, 0x97, 0x48, 0xc5, 0xf2, 0xcf, 0x2e, 0x15, 0x33, 0xbf, 0x67, 0xc0, 0x42, 0xa2, + 0x0f, 0xe8, 0x1a, 0x00, 0x8d, 0xbe, 0xe4, 0x12, 0x44, 0xd5, 0xae, 0x98, 0x0f, 0x2b, 0x5c, 0x4f, + 0x5d, 0xd5, 0xe8, 0xc1, 0x85, 0x09, 0xc6, 0xc9, 0xf2, 0x38, 0xb6, 0xe2, 0x74, 0x60, 0xd9, 0x24, + 0xf9, 0xbc, 0xf9, 0x7e, 0x48, 0xc0, 0x31, 0x4f, 0x64, 0x3c, 0xb9, 0x49, 0xc6, 0x63, 0xfe, 0x93, + 0x01, 0x97, 0x4f, 0xba, 0x38, 0x63, 0x99, 0xb9, 0xbc, 0x1d, 0x8b, 0x72, 0x41, 0x43, 0xcf, 0xcc, + 0xef, 0xea, 0x64, 0x9c, 0xe4, 0x47, 0x37, 0xa0, 0xa2, 0x34, 0xc9, 0xce, 0x44, 0x71, 0xa4, 0x22, + 0x8e, 0x55, 0xbe, 0xa7, 0x08, 0xe3, 0xcd, 0xbf, 0x33, 0xe0, 0x5c, 0x5a, 0x79, 0x0f, 0x75, 0xc3, + 0xf7, 0xe8, 0x22, 0x77, 0x6b, 0x9c, 0xb2, 0x4c, 0x58, 0xe7, 0xaf, 0xd2, 0xb7, 0xdc, 0xc0, 0x3f, + 0x4a, 0x7f, 0xa9, 0x7e, 0xe9, 0x16, 0x40, 0xcc, 0x83, 0x16, 0x21, 0x7f, 0x40, 0x8e, 0xc4, 0xc4, + 0x61, 0xf6, 0x13, 0x9d, 0xd3, 0x36, 0xad, 0xdc, 0xa5, 0x6f, 0xe6, 0x6e, 0x19, 0x6f, 0x96, 0xfe, + 0xf0, 0x4f, 0x6b, 0x67, 0x3e, 0xf9, 0xf9, 0x95, 0x33, 0xe6, 0x0f, 0x0d, 0x50, 0xa3, 0x6c, 0xf4, + 0x1a, 0x94, 0xf7, 0x83, 0x60, 0xc0, 0x9b, 0xe4, 0xf3, 0x17, 0xfe, 0x26, 0xfb, 0xed, 0xdd, 0xdd, + 0x1d, 0xde, 0x88, 0x63, 0x3a, 0xaa, 0x03, 0xb0, 0x0f, 0x2a, 0xb8, 0x0b, 0xf1, 0x93, 0x35, 0xc6, + 0xdd, 0x12, 0xec, 0x0a, 0x87, 0x48, 0x46, 0x05, 0xb3, 0xf8, 0x9b, 0x93, 0x4c, 0x46, 0x05, 0x67, + 0x48, 0x33, 0xff, 0xc2, 0x80, 0xa5, 0xb1, 0xe7, 0x56, 0x68, 0x27, 0x0a, 0xbf, 0xa7, 0xad, 0x10, + 0x4e, 0x08, 0xd4, 0x9f, 0x7a, 0x17, 0xdd, 0x82, 0x73, 0x02, 0x91, 0x6b, 0x8d, 0xb7, 0xd0, 0x13, + 0xdd, 0xa9, 0xf9, 0x67, 0x06, 0x40, 0x5c, 0xb3, 0x42, 0x7b, 0x30, 0x27, 0xba, 0xa4, 0xc5, 0x91, + 0xd9, 0x07, 0x78, 0x4e, 0xaa, 0x98, 0x6b, 0x29, 0x28, 0x58, 0xc3, 0x64, 0xfb, 0x9a, 0x97, 0x8a, + 0xf9, 0xee, 0xca, 0xe9, 0xfb, 0xfa, 0x5e, 0x48, 0xc0, 0x31, 0x8f, 0xf9, 0x49, 0x1e, 0x96, 0x53, + 0x2e, 0xf8, 0xff, 0x5f, 0x57, 0x3e, 0x5f, 0x85, 0x59, 0xf1, 0xe6, 0x9b, 0x26, 0xa3, 0x3b, 0xf1, + 0x24, 0x9c, 0xe2, 0x90, 0x8e, 0xd6, 0xa0, 0xe2, 0xb8, 0xb6, 0xb8, 0x08, 0xb1, 0xc2, 0x8a, 0x97, + 0xb8, 0xeb, 0x8b, 0x9b, 0xb1, 0xca, 0xa3, 0x97, 0xc8, 0x66, 0x9e, 0x5c, 0x22, 0x33, 0xbf, 0x0d, + 0x4b, 0x63, 0xf1, 0x69, 0xb6, 0xc3, 0x9a, 0xf0, 0xff, 0x03, 0x27, 0x0e, 0x6b, 0xf1, 0x37, 0x60, + 0x41, 0x33, 0x7f, 0x64, 0xc0, 0x7c, 0x22, 0x90, 0x3f, 0x55, 0x3d, 0xe5, 0x81, 0x5a, 0x4f, 0x39, + 0x5d, 0x12, 0xa2, 0x55, 0x56, 0xcc, 0xbb, 0x90, 0xfe, 0xac, 0x37, 0x39, 0xe3, 0xc6, 0x93, 0x67, + 0xdc, 0xfc, 0x49, 0x0e, 0xca, 0xd1, 0x6b, 0x28, 0xf4, 0x86, 0x36, 0x73, 0x17, 0xd5, 0x99, 0x7b, + 0x3c, 0xaa, 0x09, 0x46, 0x65, 0x1a, 0xdf, 0x87, 0x72, 0xf4, 0x9a, 0x2e, 0xaa, 0x17, 0x65, 0x0f, + 0xc6, 0xa2, 0xa5, 0x8d, 0x9e, 0xe8, 0xe1, 0x18, 0x8f, 0xc5, 0xa7, 0xe1, 0x73, 0xb7, 0x7b, 0x4e, + 0xaf, 0xe7, 0x50, 0x79, 0x55, 0x95, 0xe7, 0x57, 0x55, 0x51, 0x7c, 0xba, 0x99, 0xc2, 0x83, 0x53, + 0x25, 0xd1, 0x0e, 0x14, 0x69, 0x40, 0x06, 0x54, 0x56, 0x6f, 0x5f, 0xcb, 0xf4, 0x50, 0x8c, 0x0c, + 0x78, 0xde, 0x1d, 0x99, 0x08, 0x6b, 0xa1, 0x58, 0x00, 0x99, 0xff, 0x61, 0x40, 0x29, 0x64, 0x41, + 0xaf, 0x6b, 0x93, 0x57, 0x4d, 0x4c, 0x1e, 0xe7, 0xfb, 0x3f, 0x3b, 0x77, 0xe6, 0xc8, 0x80, 0x79, + 0xfd, 0xd2, 0x5b, 0xa9, 0xf6, 0x18, 0x27, 0x55, 0x7b, 0xd0, 0xeb, 0x50, 0xb2, 0x7a, 0x3d, 0xef, + 0xa3, 0x2d, 0xf7, 0x50, 0x56, 0x58, 0xa3, 0x5b, 0xdc, 0x75, 0xd9, 0x8e, 0x23, 0x0e, 0x74, 0x08, + 0x0b, 0x42, 0x2e, 0x7e, 0xce, 0x98, 0xcf, 0x7c, 0x99, 0x98, 0x76, 0xd8, 0x34, 0x96, 0x59, 0x78, + 0xd4, 0xd2, 0x31, 0x71, 0x52, 0x49, 0xe3, 0xea, 0x67, 0x5f, 0xac, 0x9c, 0xf9, 0xd9, 0x17, 0x2b, + 0x67, 0x3e, 0xff, 0x62, 0xe5, 0xcc, 0x27, 0xc7, 0x2b, 0xc6, 0x67, 0xc7, 0x2b, 0xc6, 0xcf, 0x8e, + 0x57, 0x8c, 0xcf, 0x8f, 0x57, 0x8c, 0x7f, 0x3b, 0x5e, 0x31, 0xfe, 0xe0, 0xdf, 0x57, 0xce, 0x7c, + 0x3b, 0x77, 0xb8, 0xf6, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x8e, 0x55, 0xa9, 0x0e, 0x68, 0x43, + 0x00, 0x00, } func (m *BinaryBuildRequestOptions) Marshal() (dAtA []byte, err error) { @@ -4336,27 +4368,17 @@ func (m *ImageChangeTriggerStatus) MarshalToSizedBuffer(dAtA []byte) (int, error i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 - i-- - if m.Paused { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x18 - if m.From != nil { - { - size, err := m.From.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) + dAtA[i] = 0x1a + { + size, err := m.From.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i-- - dAtA[i] = 0x12 + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x12 i -= len(m.LastTriggeredImageID) copy(dAtA[i:], m.LastTriggeredImageID) i = encodeVarintGenerated(dAtA, i, uint64(len(m.LastTriggeredImageID))) @@ -4499,6 +4521,39 @@ func (m *ImageSourcePath) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ImageStreamTagReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageStreamTagReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageStreamTagReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *JenkinsPipelineBuildStrategy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -5936,11 +5991,8 @@ func (m *ImageChangeTriggerStatus) Size() (n int) { _ = l l = len(m.LastTriggeredImageID) n += 1 + l + sovGenerated(uint64(l)) - if m.From != nil { - l = m.From.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - n += 2 + l = m.From.Size() + n += 1 + l + sovGenerated(uint64(l)) l = m.LastTriggerTime.Size() n += 1 + l + sovGenerated(uint64(l)) return n @@ -5999,6 +6051,19 @@ func (m *ImageSourcePath) Size() (n int) { return n } +func (m *ImageStreamTagReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *JenkinsPipelineBuildStrategy) Size() (n int) { if m == nil { return 0 @@ -6833,8 +6898,7 @@ func (this *ImageChangeTriggerStatus) String() string { } s := strings.Join([]string{`&ImageChangeTriggerStatus{`, `LastTriggeredImageID:` + fmt.Sprintf("%v", this.LastTriggeredImageID) + `,`, - `From:` + strings.Replace(fmt.Sprintf("%v", this.From), "ObjectReference", "v11.ObjectReference", 1) + `,`, - `Paused:` + fmt.Sprintf("%v", this.Paused) + `,`, + `From:` + strings.Replace(strings.Replace(this.From.String(), "ImageStreamTagReference", "ImageStreamTagReference", 1), `&`, ``, 1) + `,`, `LastTriggerTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTriggerTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -6880,6 +6944,17 @@ func (this *ImageSourcePath) String() string { }, "") return s } +func (this *ImageStreamTagReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageStreamTagReference{`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `}`, + }, "") + return s +} func (this *JenkinsPipelineBuildStrategy) String() string { if this == nil { return "nil" @@ -14168,34 +14243,11 @@ func (m *ImageChangeTriggerStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.From == nil { - m.From = &v11.ObjectReference{} - } if err := m.From.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Paused", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Paused = bool(v != 0) - case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field LastTriggerTime", wireType) } @@ -14662,6 +14714,120 @@ func (m *ImageSourcePath) Unmarshal(dAtA []byte) error { } return nil } +func (m *ImageStreamTagReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageStreamTagReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageStreamTagReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *JenkinsPipelineBuildStrategy) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/vendor/github.com/openshift/api/build/v1/generated.proto b/vendor/github.com/openshift/api/build/v1/generated.proto index 9b5bc9a21c..e3e947c623 100644 --- a/vendor/github.com/openshift/api/build/v1/generated.proto +++ b/vendor/github.com/openshift/api/build/v1/generated.proto @@ -146,7 +146,11 @@ message BuildConfigStatus { optional int64 lastVersion = 1; // ImageChangeTriggers is used to capture the runtime state of any ImageChangeTrigger specified in the BuildConfigSpec, - // including reconciled values of the lastTriggeredImageID and paused fields. + // including the value reconciled by the OpenShift APIServer for the lastTriggeredImageID. There will be a single entry + // in this array for each entry in the BuildConfigSpec.Triggers array where the BuildTriggerPolicy.ImageChange + // pointer is set to a non-nil value. The logical key for each entry in this array is expressed by the + // ImageStreamTagReference type. That type captures the required elements for identifying the ImageStreamTag referenced by the more + // generic ObjectReference BuildTriggerPolicy.ImageChange.From. repeated ImageChangeTriggerStatus imageChangeTriggers = 2; } @@ -878,20 +882,36 @@ message ImageChangeTrigger { // ImageChangeTriggerStatus tracks the latest resolved status of the associated ImageChangeTrigger policy // specified in the BuildConfigSpec.Triggers struct. message ImageChangeTriggerStatus { - // lastTriggeredImageID is the sha/id of the imageref cited in the 'from' field the last time this BuildConfig was triggered. - // It is not necessarily the sha/id of the image change that triggered a build. - // This field is updated for all image change triggers when any of them triggers a build. + // lastTriggeredImageID represents, at the last time a Build for this BuildConfig was instantiated, the sha/id of + // the image referenced by the the ImageStreamTag cited in the 'from' of this struct. + // The lastTriggeredImageID field will be updated by the OpenShift APIServer on all instantiations of a Build from + // the BuildConfig it processes, regardless of what is considered the cause of instantiation. + // Specifically, an instantiation of a Build could have been manually requested, or could have resulted from + // changes with any of the Triggers defined in BuildConfigSpec.Triggers. + // The reason for always updating this field across all ImageChangeTriggerStatus instances is to prevent + // multiple builds being instantiated concurrently when multiple ImageChangeTriggers fire concurrently. The system + // compares the the sha/id stored here with the associated ImageStreamTag's sha/id for the image. If they match, + // then this trigger is not a valid reason for instantiating a Build. So when ImageChangeTriggers fire concurrently, + // only one of them can "win", meaning selected as the cause for a Build instantiation request. + // Lastly, to clarify exactly what is meant by "Build instantiation", from a REST perspective, it is a HTTP POST of a + // BuildRequest object as the HTTP Body that is made to the OpenShift APIServer, where that HTTP POST also specifies + // the "buildconfigs" resource, "instantiate" subresource, as well as the namespace and name of the BuildConfig. optional string lastTriggeredImageID = 1; // from is the ImageStreamTag that is used as the source of the trigger. - // This can come from an ImageStream tag referenced in this BuildConfig's triggers, or the From image in this BuildConfig's build strategy. - optional k8s.io.api.core.v1.ObjectReference from = 2; - - // paused is true if this trigger is temporarily disabled, and the setting on the spec has been reconciled. Optional. - optional bool paused = 3; - - // lastTriggerTime is the last time the BuildConfig was triggered by a change in the ImageStreamTag associated with this trigger. - optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTriggerTime = 4; + // This can come from an ImageStream tag referenced in this BuildConfig's Spec ImageChange Triggers, or the "from" + // this BuildConfig's build strategy if it happens to be an ImageStreamTag (where the user has specified an + // ImageChange Trigger in the spec with a 'nil' for its 'from'. + optional ImageStreamTagReference from = 2; + + // lastTriggerTime is the last time this particular ImageChangeTrigger fired, and that trigger firing was chosen as the cause for the Build being instantiated + // from this BuildConfig. So on each Build instantiation, while lastTriggeredImageID will be updated regardless of + // whether this ImageChangeTrigger fired and deemed the cause for the Build Instantiation, this field is only updated + // when this trigger was in fact deemed the cause. As such, it is valid that this field may not be set across all the + // ImageChangeTriggers, as they may have not yet been deemed to be the cause of a Build instantiation. It is also + // valid that the times stored in lastTriggerTime will vary across all the ImageChangeTriggers, as the system + // explicitly picks only one trigger cause for a given Build. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTriggerTime = 3; } // ImageLabel represents a label applied to the resulting image. @@ -947,6 +967,18 @@ message ImageSourcePath { optional string destinationDir = 2; } +// ImageStreamTagReference captures the required elements for identifying the ImageStreamTag referenced by the more +// generic ObjectReference BuildTriggerPolicy.ImageChange.From. It is used by ImageChangeTriggerStatus, where a +// specific instance of ImageChangeTriggerStatus in maintained in BuildConfigStatus.ImageChangeTriggers for each entry +// in the BuildConfigSpec.Triggers array where the BuildTriggerPolicy.ImageChange pointer is set to a non-nil value +message ImageStreamTagReference { + // namespace is the namespace where the ImageStreamTag used for an ImageChangeTrigger is located + optional string namespace = 1; + + // name is the name of the ImageStreamTag used for an ImageChangeTrigger + optional string name = 2; +} + // JenkinsPipelineBuildStrategy holds parameters specific to a Jenkins Pipeline build. // Deprecated: use OpenShift Pipelines message JenkinsPipelineBuildStrategy { diff --git a/vendor/github.com/openshift/api/build/v1/types.go b/vendor/github.com/openshift/api/build/v1/types.go index 580fb5c3a7..cc57d56184 100644 --- a/vendor/github.com/openshift/api/build/v1/types.go +++ b/vendor/github.com/openshift/api/build/v1/types.go @@ -977,7 +977,11 @@ type BuildConfigStatus struct { LastVersion int64 `json:"lastVersion" protobuf:"varint,1,opt,name=lastVersion"` // ImageChangeTriggers is used to capture the runtime state of any ImageChangeTrigger specified in the BuildConfigSpec, - // including reconciled values of the lastTriggeredImageID and paused fields. + // including the value reconciled by the OpenShift APIServer for the lastTriggeredImageID. There will be a single entry + // in this array for each entry in the BuildConfigSpec.Triggers array where the BuildTriggerPolicy.ImageChange + // pointer is set to a non-nil value. The logical key for each entry in this array is expressed by the + // ImageStreamTagReference type. That type captures the required elements for identifying the ImageStreamTag referenced by the more + // generic ObjectReference BuildTriggerPolicy.ImageChange.From. ImageChangeTriggers []ImageChangeTriggerStatus `json:"imageChangeTriggers,omitempty" protobuf:"bytes,2,rep,name=imageChangeTriggers"` } @@ -1022,23 +1026,51 @@ type ImageChangeTrigger struct { Paused bool `json:"paused,omitempty" protobuf:"varint,3,opt,name=paused"` } +// ImageStreamTagReference captures the required elements for identifying the ImageStreamTag referenced by the more +// generic ObjectReference BuildTriggerPolicy.ImageChange.From. It is used by ImageChangeTriggerStatus, where a +// specific instance of ImageChangeTriggerStatus in maintained in BuildConfigStatus.ImageChangeTriggers for each entry +// in the BuildConfigSpec.Triggers array where the BuildTriggerPolicy.ImageChange pointer is set to a non-nil value +type ImageStreamTagReference struct { + // namespace is the namespace where the ImageStreamTag used for an ImageChangeTrigger is located + Namespace string `json:"namespace,omitempty" protobuf:"bytes,1,opt,name=namespace"` + + // name is the name of the ImageStreamTag used for an ImageChangeTrigger + Name string `json:"name,omitempty" protobuf:"bytes,2,opt,name=name"` +} + // ImageChangeTriggerStatus tracks the latest resolved status of the associated ImageChangeTrigger policy // specified in the BuildConfigSpec.Triggers struct. type ImageChangeTriggerStatus struct { - // lastTriggeredImageID is the sha/id of the imageref cited in the 'from' field the last time this BuildConfig was triggered. - // It is not necessarily the sha/id of the image change that triggered a build. - // This field is updated for all image change triggers when any of them triggers a build. + // lastTriggeredImageID represents, at the last time a Build for this BuildConfig was instantiated, the sha/id of + // the image referenced by the the ImageStreamTag cited in the 'from' of this struct. + // The lastTriggeredImageID field will be updated by the OpenShift APIServer on all instantiations of a Build from + // the BuildConfig it processes, regardless of what is considered the cause of instantiation. + // Specifically, an instantiation of a Build could have been manually requested, or could have resulted from + // changes with any of the Triggers defined in BuildConfigSpec.Triggers. + // The reason for always updating this field across all ImageChangeTriggerStatus instances is to prevent + // multiple builds being instantiated concurrently when multiple ImageChangeTriggers fire concurrently. The system + // compares the the sha/id stored here with the associated ImageStreamTag's sha/id for the image. If they match, + // then this trigger is not a valid reason for instantiating a Build. So when ImageChangeTriggers fire concurrently, + // only one of them can "win", meaning selected as the cause for a Build instantiation request. + // Lastly, to clarify exactly what is meant by "Build instantiation", from a REST perspective, it is a HTTP POST of a + // BuildRequest object as the HTTP Body that is made to the OpenShift APIServer, where that HTTP POST also specifies + // the "buildconfigs" resource, "instantiate" subresource, as well as the namespace and name of the BuildConfig. LastTriggeredImageID string `json:"lastTriggeredImageID,omitempty" protobuf:"bytes,1,opt,name=lastTriggeredImageID"` // from is the ImageStreamTag that is used as the source of the trigger. - // This can come from an ImageStream tag referenced in this BuildConfig's triggers, or the From image in this BuildConfig's build strategy. - From *corev1.ObjectReference `json:"from,omitempty" protobuf:"bytes,2,opt,name=from"` - - // paused is true if this trigger is temporarily disabled, and the setting on the spec has been reconciled. Optional. - Paused bool `json:"paused,omitempty" protobuf:"varint,3,opt,name=paused"` - - // lastTriggerTime is the last time the BuildConfig was triggered by a change in the ImageStreamTag associated with this trigger. - LastTriggerTime metav1.Time `json:"lastTriggerTime,omitempty" protobuf:"bytes,4,opt,name=lastTriggerTime"` + // This can come from an ImageStream tag referenced in this BuildConfig's Spec ImageChange Triggers, or the "from" + // this BuildConfig's build strategy if it happens to be an ImageStreamTag (where the user has specified an + // ImageChange Trigger in the spec with a 'nil' for its 'from'. + From ImageStreamTagReference `json:"from,omitempty" protobuf:"bytes,2,opt,name=from"` + + // lastTriggerTime is the last time this particular ImageChangeTrigger fired, and that trigger firing was chosen as the cause for the Build being instantiated + // from this BuildConfig. So on each Build instantiation, while lastTriggeredImageID will be updated regardless of + // whether this ImageChangeTrigger fired and deemed the cause for the Build Instantiation, this field is only updated + // when this trigger was in fact deemed the cause. As such, it is valid that this field may not be set across all the + // ImageChangeTriggers, as they may have not yet been deemed to be the cause of a Build instantiation. It is also + // valid that the times stored in lastTriggerTime will vary across all the ImageChangeTriggers, as the system + // explicitly picks only one trigger cause for a given Build. + LastTriggerTime metav1.Time `json:"lastTriggerTime,omitempty" protobuf:"bytes,3,opt,name=lastTriggerTime"` } // BuildTriggerPolicy describes a policy for a single trigger that results in a new Build. diff --git a/vendor/github.com/openshift/api/build/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/build/v1/zz_generated.deepcopy.go index 3d5bf33df1..bacecccb79 100644 --- a/vendor/github.com/openshift/api/build/v1/zz_generated.deepcopy.go +++ b/vendor/github.com/openshift/api/build/v1/zz_generated.deepcopy.go @@ -1150,11 +1150,7 @@ func (in *ImageChangeTrigger) DeepCopy() *ImageChangeTrigger { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ImageChangeTriggerStatus) DeepCopyInto(out *ImageChangeTriggerStatus) { *out = *in - if in.From != nil { - in, out := &in.From, &out.From - *out = new(corev1.ObjectReference) - **out = **in - } + out.From = in.From in.LastTriggerTime.DeepCopyInto(&out.LastTriggerTime) return } @@ -1233,6 +1229,22 @@ func (in *ImageSourcePath) DeepCopy() *ImageSourcePath { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageStreamTagReference) DeepCopyInto(out *ImageStreamTagReference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageStreamTagReference. +func (in *ImageStreamTagReference) DeepCopy() *ImageStreamTagReference { + if in == nil { + return nil + } + out := new(ImageStreamTagReference) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *JenkinsPipelineBuildStrategy) DeepCopyInto(out *JenkinsPipelineBuildStrategy) { *out = *in diff --git a/vendor/github.com/openshift/api/build/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/build/v1/zz_generated.swagger_doc_generated.go index fb8677b7f8..f4410e6d33 100644 --- a/vendor/github.com/openshift/api/build/v1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/build/v1/zz_generated.swagger_doc_generated.go @@ -101,7 +101,7 @@ func (BuildConfigSpec) SwaggerDoc() map[string]string { var map_BuildConfigStatus = map[string]string{ "": "BuildConfigStatus contains current state of the build config object.", "lastVersion": "lastVersion is used to inform about number of last triggered build.", - "imageChangeTriggers": "ImageChangeTriggers is used to capture the runtime state of any ImageChangeTrigger specified in the BuildConfigSpec, including reconciled values of the lastTriggeredImageID and paused fields.", + "imageChangeTriggers": "ImageChangeTriggers is used to capture the runtime state of any ImageChangeTrigger specified in the BuildConfigSpec, including the value reconciled by the OpenShift APIServer for the lastTriggeredImageID. There will be a single entry in this array for each entry in the BuildConfigSpec.Triggers array where the BuildTriggerPolicy.ImageChange pointer is set to a non-nil value. The logical key for each entry in this array is expressed by the ImageStreamTagReference type. That type captures the required elements for identifying the ImageStreamTag referenced by the more generic ObjectReference BuildTriggerPolicy.ImageChange.From.", } func (BuildConfigStatus) SwaggerDoc() map[string]string { @@ -470,10 +470,9 @@ func (ImageChangeTrigger) SwaggerDoc() map[string]string { var map_ImageChangeTriggerStatus = map[string]string{ "": "ImageChangeTriggerStatus tracks the latest resolved status of the associated ImageChangeTrigger policy specified in the BuildConfigSpec.Triggers struct.", - "lastTriggeredImageID": "lastTriggeredImageID is the sha/id of the imageref cited in the 'from' field the last time this BuildConfig was triggered. It is not necessarily the sha/id of the image change that triggered a build. This field is updated for all image change triggers when any of them triggers a build.", - "from": "from is the ImageStreamTag that is used as the source of the trigger. This can come from an ImageStream tag referenced in this BuildConfig's triggers, or the From image in this BuildConfig's build strategy.", - "paused": "paused is true if this trigger is temporarily disabled, and the setting on the spec has been reconciled. Optional.", - "lastTriggerTime": "lastTriggerTime is the last time the BuildConfig was triggered by a change in the ImageStreamTag associated with this trigger.", + "lastTriggeredImageID": "lastTriggeredImageID represents, at the last time a Build for this BuildConfig was instantiated, the sha/id of the image referenced by the the ImageStreamTag cited in the 'from' of this struct. The lastTriggeredImageID field will be updated by the OpenShift APIServer on all instantiations of a Build from the BuildConfig it processes, regardless of what is considered the cause of instantiation. Specifically, an instantiation of a Build could have been manually requested, or could have resulted from changes with any of the Triggers defined in BuildConfigSpec.Triggers. The reason for always updating this field across all ImageChangeTriggerStatus instances is to prevent multiple builds being instantiated concurrently when multiple ImageChangeTriggers fire concurrently. The system compares the the sha/id stored here with the associated ImageStreamTag's sha/id for the image. If they match, then this trigger is not a valid reason for instantiating a Build. So when ImageChangeTriggers fire concurrently, only one of them can \"win\", meaning selected as the cause for a Build instantiation request. Lastly, to clarify exactly what is meant by \"Build instantiation\", from a REST perspective, it is a HTTP POST of a BuildRequest object as the HTTP Body that is made to the OpenShift APIServer, where that HTTP POST also specifies the \"buildconfigs\" resource, \"instantiate\" subresource, as well as the namespace and name of the BuildConfig.", + "from": "from is the ImageStreamTag that is used as the source of the trigger. This can come from an ImageStream tag referenced in this BuildConfig's Spec ImageChange Triggers, or the \"from\"\n this BuildConfig's build strategy if it happens to be an ImageStreamTag (where the user has specified an\nImageChange Trigger in the spec with a 'nil' for its 'from'.", + "lastTriggerTime": "lastTriggerTime is the last time this particular ImageChangeTrigger fired, and that trigger firing was chosen as the cause for the Build being instantiated from this BuildConfig. So on each Build instantiation, while lastTriggeredImageID will be updated regardless of whether this ImageChangeTrigger fired and deemed the cause for the Build Instantiation, this field is only updated when this trigger was in fact deemed the cause. As such, it is valid that this field may not be set across all the ImageChangeTriggers, as they may have not yet been deemed to be the cause of a Build instantiation. It is also valid that the times stored in lastTriggerTime will vary across all the ImageChangeTriggers, as the system explicitly picks only one trigger cause for a given Build.", } func (ImageChangeTriggerStatus) SwaggerDoc() map[string]string { @@ -512,6 +511,16 @@ func (ImageSourcePath) SwaggerDoc() map[string]string { return map_ImageSourcePath } +var map_ImageStreamTagReference = map[string]string{ + "": "ImageStreamTagReference captures the required elements for identifying the ImageStreamTag referenced by the more generic ObjectReference BuildTriggerPolicy.ImageChange.From. It is used by ImageChangeTriggerStatus, where a specific instance of ImageChangeTriggerStatus in maintained in BuildConfigStatus.ImageChangeTriggers for each entry in the BuildConfigSpec.Triggers array where the BuildTriggerPolicy.ImageChange pointer is set to a non-nil value", + "namespace": "namespace is the namespace where the ImageStreamTag used for an ImageChangeTrigger is located", + "name": "name is the name of the ImageStreamTag used for an ImageChangeTrigger", +} + +func (ImageStreamTagReference) SwaggerDoc() map[string]string { + return map_ImageStreamTagReference +} + var map_JenkinsPipelineBuildStrategy = map[string]string{ "": "JenkinsPipelineBuildStrategy holds parameters specific to a Jenkins Pipeline build. Deprecated: use OpenShift Pipelines", "jenkinsfilePath": "JenkinsfilePath is the optional path of the Jenkinsfile that will be used to configure the pipeline relative to the root of the context (contextDir). If both JenkinsfilePath & Jenkinsfile are both not specified, this defaults to Jenkinsfile in the root of the specified contextDir.", diff --git a/vendor/github.com/openshift/api/cloudnetwork/OWNERS b/vendor/github.com/openshift/api/cloudnetwork/OWNERS new file mode 100644 index 0000000000..0bc20628a2 --- /dev/null +++ b/vendor/github.com/openshift/api/cloudnetwork/OWNERS @@ -0,0 +1,6 @@ +reviewers: + - danwinship + - dcbw + - knobunc + - squeed + - abhat diff --git a/vendor/github.com/openshift/api/cloudnetwork/install.go b/vendor/github.com/openshift/api/cloudnetwork/install.go new file mode 100644 index 0000000000..f839ebf00b --- /dev/null +++ b/vendor/github.com/openshift/api/cloudnetwork/install.go @@ -0,0 +1,26 @@ +package cloudnetwork + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + + cloudnetworkv1 "github.com/openshift/api/cloudnetwork/v1" +) + +const ( + GroupName = "cloud.network.openshift.io" +) + +var ( + schemeBuilder = runtime.NewSchemeBuilder(cloudnetworkv1.Install) + // Install is a function which adds every version of this group to a scheme + Install = schemeBuilder.AddToScheme +) + +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +func Kind(kind string) schema.GroupKind { + return schema.GroupKind{Group: GroupName, Kind: kind} +} diff --git a/vendor/github.com/openshift/api/cloudnetwork/v1/001-cloudprivateipconfig.crd.yaml b/vendor/github.com/openshift/api/cloudnetwork/v1/001-cloudprivateipconfig.crd.yaml new file mode 100644 index 0000000000..91c71ad51e --- /dev/null +++ b/vendor/github.com/openshift/api/cloudnetwork/v1/001-cloudprivateipconfig.crd.yaml @@ -0,0 +1,148 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: cloudprivateipconfig.cloud.network.openshift.io +spec: + group: cloud.network.openshift.io + names: + kind: CloudPrivateIPConfig + listKind: CloudPrivateIPConfigList + plural: cloudprivateipconfig + singular: cloudprivateipconfig + scope: Cluster + versions: + - name: v1 + schema: + openAPIV3Schema: + description: 'CloudPrivateIPConfig performs an assignment of a private IP + address to the primary NIC associated with cloud VMs. This is done by specifying + the IP and Kubernetes node which the IP should be assigned to. This CRD + is intended to be used by the network plugin which manages the cluster network. + The spec side represents the desired state requested by the network plugin, + and the status side represents the current state that this CRD''s controller + has executed. No users will have permission to modify it, and if a cluster-admin + decides to edit it for some reason, their changes will be overwritten the + next time the network plugin reconciles the object. Note: the CR''s name + must specify the requested private IP address (can be IPv4 or IPv6).' + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + properties: + name: + anyOf: + - format: ipv4 + - format: ipv6 + type: string + type: object + spec: + description: spec is the definition of the desired private IP request. + properties: + node: + description: 'node is the node name, as specified by the Kubernetes + field: node.metadata.name' + type: string + type: object + status: + description: status is the observed status of the desired private IP request. + Read-only. + properties: + conditions: + description: condition is the assignment condition of the private + IP and its status + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + type FooStatus struct{ // Represents the observations of a + foo's current state. // Known .status.conditions.type are: + \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type + \ // +patchStrategy=merge // +listType=map // +listMapKey=type + \ Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` + \n // other fields }" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers + of specific condition types may define expected values and + meanings for this field, and whether the values are considered + a guaranteed API. The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + node: + description: 'node is the node name, as specified by the Kubernetes + field: node.metadata.name' + type: string + required: + - conditions + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/vendor/github.com/openshift/api/cloudnetwork/v1/001-cloudprivateipconfig.crd.yaml-patch b/vendor/github.com/openshift/api/cloudnetwork/v1/001-cloudprivateipconfig.crd.yaml-patch new file mode 100644 index 0000000000..1239c05439 --- /dev/null +++ b/vendor/github.com/openshift/api/cloudnetwork/v1/001-cloudprivateipconfig.crd.yaml-patch @@ -0,0 +1,10 @@ +- op: add + path: /spec/versions/name=v1/schema/openAPIV3Schema/properties/metadata + value: + type: object + properties: + name: + type: string + anyOf: + - format: ipv4 + - format: ipv6 diff --git a/vendor/github.com/openshift/api/cloudnetwork/v1/doc.go b/vendor/github.com/openshift/api/cloudnetwork/v1/doc.go new file mode 100644 index 0000000000..1d495ee24c --- /dev/null +++ b/vendor/github.com/openshift/api/cloudnetwork/v1/doc.go @@ -0,0 +1,5 @@ +// Package v1 contains API Schema definitions for the cloud network v1 API group +// +k8s:deepcopy-gen=package,register +// +groupName=cloud.network.openshift.io +// +kubebuilder:validation:Optional +package v1 diff --git a/vendor/github.com/openshift/api/cloudnetwork/v1/generated.pb.go b/vendor/github.com/openshift/api/cloudnetwork/v1/generated.pb.go new file mode 100644 index 0000000000..d1938bb783 --- /dev/null +++ b/vendor/github.com/openshift/api/cloudnetwork/v1/generated.pb.go @@ -0,0 +1,1045 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: github.com/openshift/api/cloudnetwork/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func (m *CloudPrivateIPConfig) Reset() { *m = CloudPrivateIPConfig{} } +func (*CloudPrivateIPConfig) ProtoMessage() {} +func (*CloudPrivateIPConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_454253a7ab01c6d0, []int{0} +} +func (m *CloudPrivateIPConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CloudPrivateIPConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CloudPrivateIPConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_CloudPrivateIPConfig.Merge(m, src) +} +func (m *CloudPrivateIPConfig) XXX_Size() int { + return m.Size() +} +func (m *CloudPrivateIPConfig) XXX_DiscardUnknown() { + xxx_messageInfo_CloudPrivateIPConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_CloudPrivateIPConfig proto.InternalMessageInfo + +func (m *CloudPrivateIPConfigList) Reset() { *m = CloudPrivateIPConfigList{} } +func (*CloudPrivateIPConfigList) ProtoMessage() {} +func (*CloudPrivateIPConfigList) Descriptor() ([]byte, []int) { + return fileDescriptor_454253a7ab01c6d0, []int{1} +} +func (m *CloudPrivateIPConfigList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CloudPrivateIPConfigList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CloudPrivateIPConfigList) XXX_Merge(src proto.Message) { + xxx_messageInfo_CloudPrivateIPConfigList.Merge(m, src) +} +func (m *CloudPrivateIPConfigList) XXX_Size() int { + return m.Size() +} +func (m *CloudPrivateIPConfigList) XXX_DiscardUnknown() { + xxx_messageInfo_CloudPrivateIPConfigList.DiscardUnknown(m) +} + +var xxx_messageInfo_CloudPrivateIPConfigList proto.InternalMessageInfo + +func (m *CloudPrivateIPConfigSpec) Reset() { *m = CloudPrivateIPConfigSpec{} } +func (*CloudPrivateIPConfigSpec) ProtoMessage() {} +func (*CloudPrivateIPConfigSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_454253a7ab01c6d0, []int{2} +} +func (m *CloudPrivateIPConfigSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CloudPrivateIPConfigSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CloudPrivateIPConfigSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_CloudPrivateIPConfigSpec.Merge(m, src) +} +func (m *CloudPrivateIPConfigSpec) XXX_Size() int { + return m.Size() +} +func (m *CloudPrivateIPConfigSpec) XXX_DiscardUnknown() { + xxx_messageInfo_CloudPrivateIPConfigSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_CloudPrivateIPConfigSpec proto.InternalMessageInfo + +func (m *CloudPrivateIPConfigStatus) Reset() { *m = CloudPrivateIPConfigStatus{} } +func (*CloudPrivateIPConfigStatus) ProtoMessage() {} +func (*CloudPrivateIPConfigStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_454253a7ab01c6d0, []int{3} +} +func (m *CloudPrivateIPConfigStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CloudPrivateIPConfigStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CloudPrivateIPConfigStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_CloudPrivateIPConfigStatus.Merge(m, src) +} +func (m *CloudPrivateIPConfigStatus) XXX_Size() int { + return m.Size() +} +func (m *CloudPrivateIPConfigStatus) XXX_DiscardUnknown() { + xxx_messageInfo_CloudPrivateIPConfigStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_CloudPrivateIPConfigStatus proto.InternalMessageInfo + +func init() { + proto.RegisterType((*CloudPrivateIPConfig)(nil), "github.com.openshift.api.cloudnetwork.v1.CloudPrivateIPConfig") + proto.RegisterType((*CloudPrivateIPConfigList)(nil), "github.com.openshift.api.cloudnetwork.v1.CloudPrivateIPConfigList") + proto.RegisterType((*CloudPrivateIPConfigSpec)(nil), "github.com.openshift.api.cloudnetwork.v1.CloudPrivateIPConfigSpec") + proto.RegisterType((*CloudPrivateIPConfigStatus)(nil), "github.com.openshift.api.cloudnetwork.v1.CloudPrivateIPConfigStatus") +} + +func init() { + proto.RegisterFile("github.com/openshift/api/cloudnetwork/v1/generated.proto", fileDescriptor_454253a7ab01c6d0) +} + +var fileDescriptor_454253a7ab01c6d0 = []byte{ + // 482 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x92, 0x3f, 0x6f, 0xd3, 0x40, + 0x18, 0xc6, 0x7d, 0x69, 0x5a, 0x95, 0x2b, 0x20, 0x64, 0x31, 0x58, 0x19, 0xae, 0x51, 0xa6, 0x2c, + 0xdc, 0x91, 0x0a, 0xa1, 0x0e, 0x88, 0xc1, 0x61, 0xa9, 0xc4, 0x9f, 0xca, 0x6c, 0x88, 0x81, 0xcb, + 0xf9, 0xe2, 0x1c, 0xa9, 0xef, 0x2c, 0xdf, 0xd9, 0x88, 0x8d, 0x8f, 0xc0, 0x77, 0xe0, 0xcb, 0x64, + 0x60, 0xe8, 0xd8, 0x85, 0x8a, 0x98, 0x2f, 0x82, 0xee, 0xe2, 0x24, 0x56, 0x9b, 0xaa, 0x91, 0xb2, + 0xf9, 0x7d, 0xed, 0xe7, 0xf9, 0xbd, 0xef, 0xf3, 0x1a, 0x9e, 0x26, 0xc2, 0x4c, 0x8a, 0x11, 0x66, + 0x2a, 0x25, 0x2a, 0xe3, 0x52, 0x4f, 0xc4, 0xd8, 0x10, 0x9a, 0x09, 0xc2, 0x2e, 0x54, 0x11, 0x4b, + 0x6e, 0xbe, 0xa9, 0x7c, 0x4a, 0xca, 0x01, 0x49, 0xb8, 0xe4, 0x39, 0x35, 0x3c, 0xc6, 0x59, 0xae, + 0x8c, 0xf2, 0xfb, 0x6b, 0x25, 0x5e, 0x29, 0x31, 0xcd, 0x04, 0x6e, 0x2a, 0x71, 0x39, 0xe8, 0x3c, + 0x6b, 0x30, 0x12, 0x95, 0x28, 0xe2, 0x0c, 0x46, 0xc5, 0xd8, 0x55, 0xae, 0x70, 0x4f, 0x0b, 0xe3, + 0xce, 0x8b, 0xe9, 0xa9, 0xc6, 0x42, 0xd9, 0x21, 0x52, 0xca, 0x26, 0x42, 0xf2, 0xfc, 0x3b, 0xc9, + 0xa6, 0x89, 0x6d, 0x68, 0x92, 0x72, 0x43, 0x37, 0x8c, 0xd3, 0x21, 0x77, 0xa9, 0xf2, 0x42, 0x1a, + 0x91, 0xf2, 0x5b, 0x82, 0x97, 0xf7, 0x09, 0x34, 0x9b, 0xf0, 0x94, 0xde, 0xd4, 0xf5, 0x7e, 0xb7, + 0xe0, 0xd3, 0xa1, 0xdd, 0xf0, 0x3c, 0x17, 0x25, 0x35, 0xfc, 0xec, 0x7c, 0xa8, 0xe4, 0x58, 0x24, + 0xfe, 0x17, 0x78, 0x68, 0x87, 0x8b, 0xa9, 0xa1, 0x01, 0xe8, 0x82, 0xfe, 0xd1, 0xc9, 0x73, 0xbc, + 0x60, 0xe0, 0x26, 0x03, 0x67, 0xd3, 0xc4, 0x36, 0x34, 0xb6, 0x5f, 0xe3, 0x72, 0x80, 0x3f, 0x8c, + 0xbe, 0x72, 0x66, 0xde, 0x71, 0x43, 0x43, 0x7f, 0x76, 0x7d, 0xec, 0x55, 0xd7, 0xc7, 0x70, 0xdd, + 0x8b, 0x56, 0xae, 0x7e, 0x0c, 0xdb, 0x3a, 0xe3, 0x2c, 0x68, 0x39, 0xf7, 0x10, 0x6f, 0x7b, 0x01, + 0xbc, 0x69, 0xde, 0x8f, 0x19, 0x67, 0xe1, 0xc3, 0x9a, 0xd7, 0xb6, 0x55, 0xe4, 0xdc, 0xfd, 0x0b, + 0x78, 0xa0, 0x0d, 0x35, 0x85, 0x0e, 0xf6, 0x1c, 0xe7, 0xcd, 0x8e, 0x1c, 0xe7, 0x15, 0x3e, 0xae, + 0x49, 0x07, 0x8b, 0x3a, 0xaa, 0x19, 0xbd, 0x3f, 0x00, 0x06, 0x9b, 0x64, 0x6f, 0x85, 0x36, 0xfe, + 0xe7, 0x5b, 0x91, 0xe2, 0xed, 0x22, 0xb5, 0x6a, 0x17, 0xe8, 0x93, 0x1a, 0x7b, 0xb8, 0xec, 0x34, + 0xe2, 0x64, 0x70, 0x5f, 0x18, 0x9e, 0xea, 0xa0, 0xd5, 0xdd, 0xeb, 0x1f, 0x9d, 0xbc, 0xde, 0x6d, + 0xcf, 0xf0, 0x51, 0x8d, 0xda, 0x3f, 0xb3, 0xa6, 0xd1, 0xc2, 0xbb, 0xf7, 0x6a, 0xf3, 0x7a, 0x36, + 0x6f, 0xbf, 0x0b, 0xdb, 0x52, 0xc5, 0xdc, 0xad, 0xf6, 0x60, 0x7d, 0x8b, 0xf7, 0x2a, 0xe6, 0x91, + 0x7b, 0xd3, 0xfb, 0x05, 0x60, 0xe7, 0xee, 0x50, 0xef, 0x37, 0xf0, 0x19, 0x84, 0x4c, 0xc9, 0x58, + 0x18, 0xa1, 0xe4, 0x72, 0x51, 0xb2, 0x5d, 0x86, 0xc3, 0xa5, 0x6e, 0xfd, 0x57, 0xae, 0x5a, 0x3a, + 0x6a, 0xd8, 0x86, 0xfd, 0xd9, 0x1c, 0x79, 0x97, 0x73, 0xe4, 0x5d, 0xcd, 0x91, 0xf7, 0xa3, 0x42, + 0x60, 0x56, 0x21, 0x70, 0x59, 0x21, 0x70, 0x55, 0x21, 0xf0, 0xb7, 0x42, 0xe0, 0xe7, 0x3f, 0xe4, + 0x7d, 0x6a, 0x95, 0x83, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa5, 0xd1, 0x85, 0x90, 0x6f, 0x04, + 0x00, 0x00, +} + +func (m *CloudPrivateIPConfig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CloudPrivateIPConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CloudPrivateIPConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *CloudPrivateIPConfigList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CloudPrivateIPConfigList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CloudPrivateIPConfigList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *CloudPrivateIPConfigSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CloudPrivateIPConfigSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CloudPrivateIPConfigSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Node) + copy(dAtA[i:], m.Node) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Node))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *CloudPrivateIPConfigStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CloudPrivateIPConfigStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CloudPrivateIPConfigStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Node) + copy(dAtA[i:], m.Node) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Node))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *CloudPrivateIPConfig) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *CloudPrivateIPConfigList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *CloudPrivateIPConfigSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Node) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *CloudPrivateIPConfigStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Node) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *CloudPrivateIPConfig) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CloudPrivateIPConfig{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "CloudPrivateIPConfigSpec", "CloudPrivateIPConfigSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "CloudPrivateIPConfigStatus", "CloudPrivateIPConfigStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CloudPrivateIPConfigList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]CloudPrivateIPConfig{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "CloudPrivateIPConfig", "CloudPrivateIPConfig", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&CloudPrivateIPConfigList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *CloudPrivateIPConfigSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CloudPrivateIPConfigSpec{`, + `Node:` + fmt.Sprintf("%v", this.Node) + `,`, + `}`, + }, "") + return s +} +func (this *CloudPrivateIPConfigStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]Condition{" + for _, f := range this.Conditions { + repeatedStringForConditions += fmt.Sprintf("%v", f) + "," + } + repeatedStringForConditions += "}" + s := strings.Join([]string{`&CloudPrivateIPConfigStatus{`, + `Node:` + fmt.Sprintf("%v", this.Node) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *CloudPrivateIPConfig) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CloudPrivateIPConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CloudPrivateIPConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CloudPrivateIPConfigList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CloudPrivateIPConfigList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CloudPrivateIPConfigList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, CloudPrivateIPConfig{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CloudPrivateIPConfigSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CloudPrivateIPConfigSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CloudPrivateIPConfigSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Node", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Node = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CloudPrivateIPConfigStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CloudPrivateIPConfigStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CloudPrivateIPConfigStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Node", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Node = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, v1.Condition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") +) diff --git a/vendor/github.com/openshift/api/cloudnetwork/v1/generated.proto b/vendor/github.com/openshift/api/cloudnetwork/v1/generated.proto new file mode 100644 index 0000000000..18bba8a9fe --- /dev/null +++ b/vendor/github.com/openshift/api/cloudnetwork/v1/generated.proto @@ -0,0 +1,78 @@ + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = "proto2"; + +package github.com.openshift.api.cloudnetwork.v1; + +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// CloudPrivateIPConfig performs an assignment of a private IP address to the +// primary NIC associated with cloud VMs. This is done by specifying the IP and +// Kubernetes node which the IP should be assigned to. This CRD is intended to +// be used by the network plugin which manages the cluster network. The spec +// side represents the desired state requested by the network plugin, and the +// status side represents the current state that this CRD's controller has +// executed. No users will have permission to modify it, and if a cluster-admin +// decides to edit it for some reason, their changes will be overwritten the +// next time the network plugin reconciles the object. Note: the CR's name +// must specify the requested private IP address (can be IPv4 or IPv6). +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +k8s:openapi-gen=true +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:resource:path=cloudprivateipconfig,scope=Cluster +message CloudPrivateIPConfig { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // spec is the definition of the desired private IP request. + // +kubebuilder:validation:Required + // +required + optional CloudPrivateIPConfigSpec spec = 2; + + // status is the observed status of the desired private IP request. Read-only. + // +kubebuilder:validation:Optional + // +optional + optional CloudPrivateIPConfigStatus status = 3; +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +resource:path=cloudprivateipconfig +// CloudPrivateIPConfigList is the list of CloudPrivateIPConfigList. +message CloudPrivateIPConfigList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // List of CloudPrivateIPConfig. + repeated CloudPrivateIPConfig items = 2; +} + +// CloudPrivateIPConfigSpec consists of a node name which the private IP should be assigned to. +// +k8s:openapi-gen=true +message CloudPrivateIPConfigSpec { + // node is the node name, as specified by the Kubernetes field: node.metadata.name + // +kubebuilder:validation:Optional + // +optional + optional string node = 1; +} + +// CloudPrivateIPConfigStatus specifies the node assignment together with its assignment condition. +// +k8s:openapi-gen=true +message CloudPrivateIPConfigStatus { + // node is the node name, as specified by the Kubernetes field: node.metadata.name + // +kubebuilder:validation:Optional + // +optional + optional string node = 1; + + // condition is the assignment condition of the private IP and its status + // +kubebuilder:validation:Required + // +required + repeated k8s.io.apimachinery.pkg.apis.meta.v1.Condition conditions = 2; +} + diff --git a/vendor/github.com/openshift/api/cloudnetwork/v1/register.go b/vendor/github.com/openshift/api/cloudnetwork/v1/register.go new file mode 100644 index 0000000000..28eaf0d810 --- /dev/null +++ b/vendor/github.com/openshift/api/cloudnetwork/v1/register.go @@ -0,0 +1,32 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "cloud.network.openshift.io" + SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + Install = SchemeBuilder.AddToScheme + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = SchemeBuilder.AddToScheme +) + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &CloudPrivateIPConfig{}, + &CloudPrivateIPConfigList{}, + ) + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/vendor/github.com/openshift/api/cloudnetwork/v1/types.go b/vendor/github.com/openshift/api/cloudnetwork/v1/types.go new file mode 100644 index 0000000000..3f899f5598 --- /dev/null +++ b/vendor/github.com/openshift/api/cloudnetwork/v1/types.go @@ -0,0 +1,80 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// CloudPrivateIPConfig performs an assignment of a private IP address to the +// primary NIC associated with cloud VMs. This is done by specifying the IP and +// Kubernetes node which the IP should be assigned to. This CRD is intended to +// be used by the network plugin which manages the cluster network. The spec +// side represents the desired state requested by the network plugin, and the +// status side represents the current state that this CRD's controller has +// executed. No users will have permission to modify it, and if a cluster-admin +// decides to edit it for some reason, their changes will be overwritten the +// next time the network plugin reconciles the object. Note: the CR's name +// must specify the requested private IP address (can be IPv4 or IPv6). +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +k8s:openapi-gen=true +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:resource:path=cloudprivateipconfig,scope=Cluster +type CloudPrivateIPConfig struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // spec is the definition of the desired private IP request. + // +kubebuilder:validation:Required + // +required + Spec CloudPrivateIPConfigSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` + // status is the observed status of the desired private IP request. Read-only. + // +kubebuilder:validation:Optional + // +optional + Status CloudPrivateIPConfigStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// CloudPrivateIPConfigSpec consists of a node name which the private IP should be assigned to. +// +k8s:openapi-gen=true +type CloudPrivateIPConfigSpec struct { + // node is the node name, as specified by the Kubernetes field: node.metadata.name + // +kubebuilder:validation:Optional + // +optional + Node string `json:"node" protobuf:"bytes,1,opt,name=node"` +} + +// CloudPrivateIPConfigStatus specifies the node assignment together with its assignment condition. +// +k8s:openapi-gen=true +type CloudPrivateIPConfigStatus struct { + // node is the node name, as specified by the Kubernetes field: node.metadata.name + // +kubebuilder:validation:Optional + // +optional + Node string `json:"node" protobuf:"bytes,1,opt,name=node"` + // condition is the assignment condition of the private IP and its status + // +kubebuilder:validation:Required + // +required + Conditions []metav1.Condition `json:"conditions" protobuf:"bytes,2,rep,name=conditions"` +} + +// CloudPrivateIPConfigConditionType specifies the current condition type of the CloudPrivateIPConfig +type CloudPrivateIPConfigConditionType string + +const ( + // Assigned is the condition type of the cloud private IP request. + // It is paired with the following ConditionStatus: + // - True - in the case of a successful assignment + // - False - in the case of a failed assignment + // - Unknown - in the case of a pending assignment + Assigned CloudPrivateIPConfigConditionType = "Assigned" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +resource:path=cloudprivateipconfig +// CloudPrivateIPConfigList is the list of CloudPrivateIPConfigList. +type CloudPrivateIPConfigList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // List of CloudPrivateIPConfig. + Items []CloudPrivateIPConfig `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/vendor/github.com/openshift/api/cloudnetwork/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/cloudnetwork/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000..dc791b0fb2 --- /dev/null +++ b/vendor/github.com/openshift/api/cloudnetwork/v1/zz_generated.deepcopy.go @@ -0,0 +1,110 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CloudPrivateIPConfig) DeepCopyInto(out *CloudPrivateIPConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CloudPrivateIPConfig. +func (in *CloudPrivateIPConfig) DeepCopy() *CloudPrivateIPConfig { + if in == nil { + return nil + } + out := new(CloudPrivateIPConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CloudPrivateIPConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CloudPrivateIPConfigList) DeepCopyInto(out *CloudPrivateIPConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CloudPrivateIPConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CloudPrivateIPConfigList. +func (in *CloudPrivateIPConfigList) DeepCopy() *CloudPrivateIPConfigList { + if in == nil { + return nil + } + out := new(CloudPrivateIPConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CloudPrivateIPConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CloudPrivateIPConfigSpec) DeepCopyInto(out *CloudPrivateIPConfigSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CloudPrivateIPConfigSpec. +func (in *CloudPrivateIPConfigSpec) DeepCopy() *CloudPrivateIPConfigSpec { + if in == nil { + return nil + } + out := new(CloudPrivateIPConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CloudPrivateIPConfigStatus) DeepCopyInto(out *CloudPrivateIPConfigStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]metav1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CloudPrivateIPConfigStatus. +func (in *CloudPrivateIPConfigStatus) DeepCopy() *CloudPrivateIPConfigStatus { + if in == nil { + return nil + } + out := new(CloudPrivateIPConfigStatus) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/cloudnetwork/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/cloudnetwork/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000..849e579efe --- /dev/null +++ b/vendor/github.com/openshift/api/cloudnetwork/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,52 @@ +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_CloudPrivateIPConfig = map[string]string{ + "": "CloudPrivateIPConfig performs an assignment of a private IP address to the primary NIC associated with cloud VMs. This is done by specifying the IP and Kubernetes node which the IP should be assigned to. This CRD is intended to be used by the network plugin which manages the cluster network. The spec side represents the desired state requested by the network plugin, and the status side represents the current state that this CRD's controller has executed. No users will have permission to modify it, and if a cluster-admin decides to edit it for some reason, their changes will be overwritten the next time the network plugin reconciles the object. Note: the CR's name must specify the requested private IP address (can be IPv4 or IPv6).", + "spec": "spec is the definition of the desired private IP request.", + "status": "status is the observed status of the desired private IP request. Read-only.", +} + +func (CloudPrivateIPConfig) SwaggerDoc() map[string]string { + return map_CloudPrivateIPConfig +} + +var map_CloudPrivateIPConfigList = map[string]string{ + "": "CloudPrivateIPConfigList is the list of CloudPrivateIPConfigList.", + "items": "List of CloudPrivateIPConfig.", +} + +func (CloudPrivateIPConfigList) SwaggerDoc() map[string]string { + return map_CloudPrivateIPConfigList +} + +var map_CloudPrivateIPConfigSpec = map[string]string{ + "": "CloudPrivateIPConfigSpec consists of a node name which the private IP should be assigned to.", + "node": "node is the node name, as specified by the Kubernetes field: node.metadata.name", +} + +func (CloudPrivateIPConfigSpec) SwaggerDoc() map[string]string { + return map_CloudPrivateIPConfigSpec +} + +var map_CloudPrivateIPConfigStatus = map[string]string{ + "": "CloudPrivateIPConfigStatus specifies the node assignment together with its assignment condition.", + "node": "node is the node name, as specified by the Kubernetes field: node.metadata.name", + "conditions": "condition is the assignment condition of the private IP and its status", +} + +func (CloudPrivateIPConfigStatus) SwaggerDoc() map[string]string { + return map_CloudPrivateIPConfigStatus +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_console.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_console.crd.yaml index 69639c1d97..d7084ba8f7 100644 --- a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_console.crd.yaml +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_console.crd.yaml @@ -1,4 +1,4 @@ -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: consoles.config.openshift.io @@ -8,67 +8,66 @@ metadata: include.release.openshift.io/single-node-developer: "true" spec: scope: Cluster - preserveUnknownFields: false group: config.openshift.io names: kind: Console listKind: ConsoleList plural: consoles singular: console - subresources: - status: {} versions: - name: v1 served: true storage: true - "validation": - "openAPIV3Schema": - description: Console holds cluster-wide configuration for the web console, including - the logout URL, and reports the public URL of the console. The canonical name - is `cluster`. - type: object - required: - - spec - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: spec holds user settable values for configuration - type: object - properties: - authentication: - description: ConsoleAuthentication defines a list of optional configuration - for console authentication. - type: object - properties: - logoutRedirect: - description: 'An optional, absolute URL to redirect web browsers - to after logging out of the console. If not specified, it will - redirect to the default login page. This is required when using - an identity provider that supports single sign-on (SSO) such as: - - OpenID (Keycloak, Azure) - RequestHeader (GSSAPI, SSPI, SAML) - - OAuth (GitHub, GitLab, Google) Logging out of the console will - destroy the user''s token. The logoutRedirect provides the user - the option to perform single logout (SLO) through the identity - provider to destroy their single sign-on session.' - type: string - pattern: ^$|^((https):\/\/?)[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|\/?))$ - status: - description: status holds observed values from the cluster. They may not - be overridden. - type: object - properties: - consoleURL: - description: The URL for the console. This will be derived from the - host for the route that is created for the console. - type: string + subresources: + status: {} + schema: + openAPIV3Schema: + description: Console holds cluster-wide configuration for the web console, + including the logout URL, and reports the public URL of the console. The + canonical name is `cluster`. + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + authentication: + description: ConsoleAuthentication defines a list of optional configuration + for console authentication. + type: object + properties: + logoutRedirect: + description: 'An optional, absolute URL to redirect web browsers + to after logging out of the console. If not specified, it will + redirect to the default login page. This is required when using + an identity provider that supports single sign-on (SSO) such + as: - OpenID (Keycloak, Azure) - RequestHeader (GSSAPI, SSPI, + SAML) - OAuth (GitHub, GitLab, Google) Logging out of the console + will destroy the user''s token. The logoutRedirect provides + the user the option to perform single logout (SLO) through the + identity provider to destroy their single sign-on session.' + type: string + pattern: ^$|^((https):\/\/?)[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|\/?))$ + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object + properties: + consoleURL: + description: The URL for the console. This will be derived from the + host for the route that is created for the console. + type: string diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_dns.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_dns.crd.yaml index 8e6f86222e..c05562e64a 100644 --- a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_dns.crd.yaml +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_dns.crd.yaml @@ -1,4 +1,4 @@ -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: dnses.config.openshift.io @@ -14,91 +14,90 @@ spec: plural: dnses singular: dns scope: Cluster - preserveUnknownFields: false versions: - name: v1 served: true storage: true - subresources: - status: {} - "validation": - "openAPIV3Schema": - description: DNS holds cluster-wide information about DNS. The canonical name - is `cluster` - type: object - required: - - spec - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: spec holds user settable values for configuration - type: object - properties: - baseDomain: - description: "baseDomain is the base domain of the cluster. All managed - DNS records will be sub-domains of this base. \n For example, given - the base domain `openshift.example.com`, an API server DNS record - may be created for `cluster-api.openshift.example.com`. \n Once set, - this field cannot be changed." - type: string - privateZone: - description: "privateZone is the location where all the DNS records - that are only available internally to the cluster exist. \n If this - field is nil, no private records should be created. \n Once set, this - field cannot be changed." - type: object - properties: - id: - description: "id is the identifier that can be used to find the - DNS hosted zone. \n on AWS zone can be fetched using `ID` as id - in [1] on Azure zone can be fetched using `ID` as a pre-determined - name in [2], on GCP zone can be fetched using `ID` as a pre-determined - name in [3]. \n [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options - [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show - [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get" - type: string - tags: - description: "tags can be used to query the DNS hosted zone. \n - on AWS, resourcegroupstaggingapi [1] can be used to fetch a zone - using `Tags` as tag-filters, \n [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options" - type: object - additionalProperties: + subresources: + status: {} + "schema": + "openAPIV3Schema": + description: DNS holds cluster-wide information about DNS. The canonical name + is `cluster` + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + baseDomain: + description: "baseDomain is the base domain of the cluster. All managed + DNS records will be sub-domains of this base. \n For example, given + the base domain `openshift.example.com`, an API server DNS record + may be created for `cluster-api.openshift.example.com`. \n Once + set, this field cannot be changed." + type: string + privateZone: + description: "privateZone is the location where all the DNS records + that are only available internally to the cluster exist. \n If this + field is nil, no private records should be created. \n Once set, + this field cannot be changed." + type: object + properties: + id: + description: "id is the identifier that can be used to find the + DNS hosted zone. \n on AWS zone can be fetched using `ID` as + id in [1] on Azure zone can be fetched using `ID` as a pre-determined + name in [2], on GCP zone can be fetched using `ID` as a pre-determined + name in [3]. \n [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options + [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show + [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get" type: string - publicZone: - description: "publicZone is the location where all the DNS records that - are publicly accessible to the internet exist. \n If this field is - nil, no public records should be created. \n Once set, this field - cannot be changed." - type: object - properties: - id: - description: "id is the identifier that can be used to find the - DNS hosted zone. \n on AWS zone can be fetched using `ID` as id - in [1] on Azure zone can be fetched using `ID` as a pre-determined - name in [2], on GCP zone can be fetched using `ID` as a pre-determined - name in [3]. \n [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options - [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show - [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get" - type: string - tags: - description: "tags can be used to query the DNS hosted zone. \n - on AWS, resourcegroupstaggingapi [1] can be used to fetch a zone - using `Tags` as tag-filters, \n [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options" - type: object - additionalProperties: + tags: + description: "tags can be used to query the DNS hosted zone. \n + on AWS, resourcegroupstaggingapi [1] can be used to fetch a + zone using `Tags` as tag-filters, \n [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options" + type: object + additionalProperties: + type: string + publicZone: + description: "publicZone is the location where all the DNS records + that are publicly accessible to the internet exist. \n If this field + is nil, no public records should be created. \n Once set, this field + cannot be changed." + type: object + properties: + id: + description: "id is the identifier that can be used to find the + DNS hosted zone. \n on AWS zone can be fetched using `ID` as + id in [1] on Azure zone can be fetched using `ID` as a pre-determined + name in [2], on GCP zone can be fetched using `ID` as a pre-determined + name in [3]. \n [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options + [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show + [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get" type: string - status: - description: status holds observed values from the cluster. They may not - be overridden. - type: object + tags: + description: "tags can be used to query the DNS hosted zone. \n + on AWS, resourcegroupstaggingapi [1] can be used to fetch a + zone using `Tags` as tag-filters, \n [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options" + type: object + additionalProperties: + type: string + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_infrastructure.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_infrastructure.crd.yaml index 212c1e21f5..d8623cd85f 100644 --- a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_infrastructure.crd.yaml +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_infrastructure.crd.yaml @@ -248,6 +248,37 @@ spec: description: region holds the default AWS region for new AWS resources created by the cluster. type: string + resourceTags: + description: resourceTags is a list of additional tags to + apply to AWS resources created for the cluster. See https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html + for information on tagging AWS resources. AWS supports a + maximum of 50 tags per resource. OpenShift reserves 25 tags + for its use, leaving 25 tags available for the user. + type: array + maxItems: 25 + items: + description: AWSResourceTag is a tag to apply to AWS resources + created for the cluster. + type: object + required: + - key + - value + properties: + key: + description: key is the key of the tag + type: string + maxLength: 128 + minLength: 1 + pattern: ^[0-9A-Za-z_.:/=+-@]+$ + value: + description: value is the value of the tag. Some AWS + service do not support empty values. Since tags are + added to resources in many services, the length of + the tag value must meet the requirements of all services. + type: string + maxLength: 256 + minLength: 1 + pattern: ^[0-9A-Za-z_.:/=+-@]+$ serviceEndpoints: description: ServiceEndpoints list contains custom endpoints which will override default service endpoint of AWS Services. diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_ingress.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_ingress.crd.yaml index e464717320..7c1b4f6d7b 100644 --- a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_ingress.crd.yaml +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_ingress.crd.yaml @@ -1,4 +1,4 @@ -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: ingresses.config.openshift.io @@ -14,283 +14,286 @@ spec: plural: ingresses singular: ingress scope: Cluster - preserveUnknownFields: false versions: - name: v1 served: true storage: true - subresources: - status: {} - "validation": - "openAPIV3Schema": - description: Ingress holds cluster-wide information about ingress, including - the default ingress domain used for routes. The canonical name is `cluster`. - type: object - required: - - spec - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: spec holds user settable values for configuration - type: object - properties: - appsDomain: - description: appsDomain is an optional domain to use instead of the - one specified in the domain field when a Route is created without - specifying an explicit host. If appsDomain is nonempty, this value - is used to generate default host values for Route. Unlike domain, - appsDomain may be modified after installation. This assumes a new - ingresscontroller has been setup with a wildcard certificate. - type: string - componentRoutes: - description: "componentRoutes is an optional list of routes that are - managed by OpenShift components that a cluster-admin is able to configure - the hostname and serving certificate for. The namespace and name of - each route in this list should match an existing entry in the status.componentRoutes - list. \n To determine the set of configurable Routes, look at namespace - and name of entries in the .status.componentRoutes list, where participating - operators write the status of configurable routes." - type: array - items: - description: ComponentRouteSpec allows for configuration of a route's - hostname and serving certificate. - type: object - required: - - hostname - - name - - namespace - properties: - hostname: - description: hostname is the hostname that should be used by the - route. - type: string - format: hostname - name: - description: "name is the logical name of the route to customize. - \n The namespace and name of this componentRoute must match - a corresponding entry in the list of status.componentRoutes - if the route is to be customized." - type: string - maxLength: 256 - minLength: 1 - namespace: - description: "namespace is the namespace of the route to customize. - \n The namespace and name of this componentRoute must match - a corresponding entry in the list of status.componentRoutes - if the route is to be customized." - type: string - maxLength: 63 - minLength: 1 - pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ - servingCertKeyPairSecret: - description: servingCertKeyPairSecret is a reference to a secret - of type `kubernetes.io/tls` in the openshift-config namespace. - The serving cert/key pair must match and will be used by the - operator to fulfill the intent of serving with this name. If - the custom hostname uses the default routing suffix of the cluster, - the Secret specification for a serving certificate will not - be needed. - type: object - required: - - name - properties: - name: - description: name is the metadata.name of the referenced secret - type: string - domain: - description: "domain is used to generate a default host name for a route - when the route's host name is empty. The generated host name will - follow this pattern: \"..\". - \n It is also used as the default wildcard domain suffix for ingress. - The default ingresscontroller domain will follow this pattern: \"*.\". - \n Once set, changing domain is not currently supported." - type: string - status: - description: status holds observed values from the cluster. They may not - be overridden. - type: object - properties: - componentRoutes: - description: componentRoutes is where participating operators place - the current route status for routes whose hostnames and serving certificates - can be customized by the cluster-admin. - type: array - items: - description: ComponentRouteStatus contains information allowing configuration - of a route's hostname and serving certificate. - type: object - required: - - defaultHostname - - name - - namespace - - relatedObjects - properties: - conditions: - description: "conditions are used to communicate the state of - the componentRoutes entry. \n Supported conditions include Available, - Degraded and Progressing. \n If available is true, the content - served by the route can be accessed by users. This includes - cases where a default may continue to serve content while the - customized route specified by the cluster-admin is being configured. - \n If Degraded is true, that means something has gone wrong - trying to handle the componentRoutes entry. The currentHostnames - field may or may not be in effect. \n If Progressing is true, - that means the component is taking some action related to the - componentRoutes entry." - type: array - items: - description: "Condition contains details for one aspect of the - current state of this API Resource. --- This struct is intended - for direct use as an array at the field path .status.conditions. - \ For example, type FooStatus struct{ // Represents the - observations of a foo's current state. // Known .status.conditions.type - are: \"Available\", \"Progressing\", and \"Degraded\" // - +patchMergeKey=type // +patchStrategy=merge // +listType=map - \ // +listMapKey=type Conditions []metav1.Condition - `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" - protobuf:\"bytes,1,rep,name=conditions\"` \n // other - fields }" - type: object - required: - - lastTransitionTime - - message - - reason - - status - - type - properties: - lastTransitionTime: - description: lastTransitionTime is the last time the condition - transitioned from one status to another. This should be - when the underlying condition changed. If that is not - known, then using the time when the API field changed - is acceptable. - type: string - format: date-time - message: - description: message is a human readable message indicating - details about the transition. This may be an empty string. - type: string - maxLength: 32768 - observedGeneration: - description: observedGeneration represents the .metadata.generation - that the condition was set based upon. For instance, if - .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration - is 9, the condition is out of date with respect to the - current state of the instance. - type: integer - format: int64 - minimum: 0 - reason: - description: reason contains a programmatic identifier indicating - the reason for the condition's last transition. Producers - of specific condition types may define expected values - and meanings for this field, and whether the values are - considered a guaranteed API. The value should be a CamelCase - string. This field may not be empty. - type: string - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - status: - description: status of the condition, one of True, False, - Unknown. - type: string - enum: - - "True" - - "False" - - Unknown - type: - description: type of condition in CamelCase or in foo.example.com/CamelCase. - --- Many .condition.type values are consistent across - resources like Available, but because arbitrary conditions - can be useful (see .node.status.conditions), the ability - to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) - type: string - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - consumingUsers: - description: consumingUsers is a slice of ServiceAccounts that - need to have read permission on the servingCertKeyPairSecret - secret. - type: array - maxItems: 5 - items: - description: ConsumingUser is an alias for string which we add - validation to. Currently only service accounts are supported. + subresources: + status: {} + "schema": + "openAPIV3Schema": + description: Ingress holds cluster-wide information about ingress, including + the default ingress domain used for routes. The canonical name is `cluster`. + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + appsDomain: + description: appsDomain is an optional domain to use instead of the + one specified in the domain field when a Route is created without + specifying an explicit host. If appsDomain is nonempty, this value + is used to generate default host values for Route. Unlike domain, + appsDomain may be modified after installation. This assumes a new + ingresscontroller has been setup with a wildcard certificate. + type: string + componentRoutes: + description: "componentRoutes is an optional list of routes that are + managed by OpenShift components that a cluster-admin is able to + configure the hostname and serving certificate for. The namespace + and name of each route in this list should match an existing entry + in the status.componentRoutes list. \n To determine the set of configurable + Routes, look at namespace and name of entries in the .status.componentRoutes + list, where participating operators write the status of configurable + routes." + type: array + items: + description: ComponentRouteSpec allows for configuration of a route's + hostname and serving certificate. + type: object + required: + - hostname + - name + - namespace + properties: + hostname: + description: hostname is the hostname that should be used by + the route. type: string - maxLength: 512 + format: hostname + name: + description: "name is the logical name of the route to customize. + \n The namespace and name of this componentRoute must match + a corresponding entry in the list of status.componentRoutes + if the route is to be customized." + type: string + maxLength: 256 minLength: 1 - pattern: ^system:serviceaccount:[a-z0-9]([-a-z0-9]*[a-z0-9])?:[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ - currentHostnames: - description: currentHostnames is the list of current names used - by the route. Typically, this list should consist of a single - hostname, but if multiple hostnames are supported by the route - the operator may write multiple entries to this list. - type: array - minItems: 1 - items: - description: Hostname is an alias for hostname string validation. + namespace: + description: "namespace is the namespace of the route to customize. + \n The namespace and name of this componentRoute must match + a corresponding entry in the list of status.componentRoutes + if the route is to be customized." type: string - format: hostname - defaultHostname: - description: defaultHostname is the hostname of this route prior - to customization. - type: string - format: hostname - name: - description: "name is the logical name of the route to customize. - It does not have to be the actual name of a route resource but - it cannot be renamed. \n The namespace and name of this componentRoute - must match a corresponding entry in the list of spec.componentRoutes - if the route is to be customized." - type: string - maxLength: 256 - minLength: 1 - namespace: - description: "namespace is the namespace of the route to customize. - It must be a real namespace. Using an actual namespace ensures - that no two components will conflict and the same component - can be installed multiple times. \n The namespace and name of - this componentRoute must match a corresponding entry in the - list of spec.componentRoutes if the route is to be customized." - type: string - maxLength: 63 - minLength: 1 - pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ - relatedObjects: - description: relatedObjects is a list of resources which are useful - when debugging or inspecting how spec.componentRoutes is applied. - type: array - minItems: 1 - items: - description: ObjectReference contains enough information to - let you inspect or modify the referred object. + maxLength: 63 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + servingCertKeyPairSecret: + description: servingCertKeyPairSecret is a reference to a secret + of type `kubernetes.io/tls` in the openshift-config namespace. + The serving cert/key pair must match and will be used by the + operator to fulfill the intent of serving with this name. + If the custom hostname uses the default routing suffix of + the cluster, the Secret specification for a serving certificate + will not be needed. type: object required: - - group - name - - resource properties: - group: - description: group of the referent. - type: string name: - description: name of the referent. - type: string - namespace: - description: namespace of the referent. - type: string - resource: - description: resource of the referent. + description: name is the metadata.name of the referenced + secret type: string + domain: + description: "domain is used to generate a default host name for a + route when the route's host name is empty. The generated host name + will follow this pattern: \"..\". + \n It is also used as the default wildcard domain suffix for ingress. + The default ingresscontroller domain will follow this pattern: \"*.\". + \n Once set, changing domain is not currently supported." + type: string + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object + properties: + componentRoutes: + description: componentRoutes is where participating operators place + the current route status for routes whose hostnames and serving + certificates can be customized by the cluster-admin. + type: array + items: + description: ComponentRouteStatus contains information allowing + configuration of a route's hostname and serving certificate. + type: object + required: + - defaultHostname + - name + - namespace + - relatedObjects + properties: + conditions: + description: "conditions are used to communicate the state of + the componentRoutes entry. \n Supported conditions include + Available, Degraded and Progressing. \n If available is true, + the content served by the route can be accessed by users. + This includes cases where a default may continue to serve + content while the customized route specified by the cluster-admin + is being configured. \n If Degraded is true, that means something + has gone wrong trying to handle the componentRoutes entry. + The currentHostnames field may or may not be in effect. \n + If Progressing is true, that means the component is taking + some action related to the componentRoutes entry." + type: array + items: + description: "Condition contains details for one aspect of + the current state of this API Resource. --- This struct + is intended for direct use as an array at the field path + .status.conditions. For example, type FooStatus struct{ + \ // Represents the observations of a foo's current state. + \ // Known .status.conditions.type are: \"Available\", + \"Progressing\", and \"Degraded\" // +patchMergeKey=type + \ // +patchStrategy=merge // +listType=map // + +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` + \n // other fields }" + type: object + required: + - lastTransitionTime + - message + - reason + - status + - type + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should + be when the underlying condition changed. If that is + not known, then using the time when the API field changed + is acceptable. + type: string + format: date-time + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + type: string + maxLength: 32768 + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, + if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the + current state of the instance. + type: integer + format: int64 + minimum: 0 + reason: + description: reason contains a programmatic identifier + indicating the reason for the condition's last transition. + Producers of specific condition types may define expected + values and meanings for this field, and whether the + values are considered a guaranteed API. The value should + be a CamelCase string. This field may not be empty. + type: string + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + status: + description: status of the condition, one of True, False, + Unknown. + type: string + enum: + - "True" + - "False" + - Unknown + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across + resources like Available, but because arbitrary conditions + can be useful (see .node.status.conditions), the ability + to deconflict is important. The regex it matches is + (dns1123SubdomainFmt/)?(qualifiedNameFmt) + type: string + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + consumingUsers: + description: consumingUsers is a slice of ServiceAccounts that + need to have read permission on the servingCertKeyPairSecret + secret. + type: array + maxItems: 5 + items: + description: ConsumingUser is an alias for string which we + add validation to. Currently only service accounts are supported. + type: string + maxLength: 512 + minLength: 1 + pattern: ^system:serviceaccount:[a-z0-9]([-a-z0-9]*[a-z0-9])?:[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + currentHostnames: + description: currentHostnames is the list of current names used + by the route. Typically, this list should consist of a single + hostname, but if multiple hostnames are supported by the route + the operator may write multiple entries to this list. + type: array + minItems: 1 + items: + description: Hostname is an alias for hostname string validation. + type: string + format: hostname + defaultHostname: + description: defaultHostname is the hostname of this route prior + to customization. + type: string + format: hostname + name: + description: "name is the logical name of the route to customize. + It does not have to be the actual name of a route resource + but it cannot be renamed. \n The namespace and name of this + componentRoute must match a corresponding entry in the list + of spec.componentRoutes if the route is to be customized." + type: string + maxLength: 256 + minLength: 1 + namespace: + description: "namespace is the namespace of the route to customize. + It must be a real namespace. Using an actual namespace ensures + that no two components will conflict and the same component + can be installed multiple times. \n The namespace and name + of this componentRoute must match a corresponding entry in + the list of spec.componentRoutes if the route is to be customized." + type: string + maxLength: 63 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + relatedObjects: + description: relatedObjects is a list of resources which are + useful when debugging or inspecting how spec.componentRoutes + is applied. + type: array + minItems: 1 + items: + description: ObjectReference contains enough information to + let you inspect or modify the referred object. + type: object + required: + - group + - name + - resource + properties: + group: + description: group of the referent. + type: string + name: + description: name of the referent. + type: string + namespace: + description: namespace of the referent. + type: string + resource: + description: resource of the referent. + type: string diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_network.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_network.crd.yaml index 7390943a12..8d5c193efe 100644 --- a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_network.crd.yaml +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_network.crd.yaml @@ -144,6 +144,17 @@ spec: clusterNetworkMTU: description: ClusterNetworkMTU is the MTU for inter-pod networking. type: integer + migration: + description: Migration contains the cluster network migration configuration. + type: object + properties: + networkType: + description: 'NetworkType is the target plugin that is to be deployed. + Currently supported values are: OpenShiftSDN, OVNKubernetes' + type: string + enum: + - OpenShiftSDN + - OVNKubernetes networkType: description: NetworkType is the plugin that is deployed (e.g. OpenShiftSDN). type: string diff --git a/vendor/github.com/openshift/api/config/v1/types_feature.go b/vendor/github.com/openshift/api/config/v1/types_feature.go index e4ee3d19f3..b083e6d1f6 100644 --- a/vendor/github.com/openshift/api/config/v1/types_feature.go +++ b/vendor/github.com/openshift/api/config/v1/types_feature.go @@ -106,8 +106,10 @@ var FeatureSets = map[FeatureSet]*FeatureGateEnabledDisabled{ Disabled: []string{}, }, TechPreviewNoUpgrade: newDefaultFeatures(). - with("CSIDriverAzureDisk"). // sig-storage, jsafrane - with("CSIDriverVSphere"). // sig-storage, jsafrane + with("CSIDriverAzureDisk"). // sig-storage, jsafrane, OCP specific + with("CSIDriverVSphere"). // sig-storage, jsafrane, OCP specific + with("CSIMigrationAWS"). // sig-storage, jsafrane, Kubernetes feature gate + with("CSIMigrationOpenStack"). // sig-storage, jsafrane, Kubernetes feature gate toFeatures(), LatencySensitive: newDefaultFeatures(). with( diff --git a/vendor/github.com/openshift/api/config/v1/types_infrastructure.go b/vendor/github.com/openshift/api/config/v1/types_infrastructure.go index d5ebcc91c5..6e78d5ea6d 100644 --- a/vendor/github.com/openshift/api/config/v1/types_infrastructure.go +++ b/vendor/github.com/openshift/api/config/v1/types_infrastructure.go @@ -313,6 +313,34 @@ type AWSPlatformStatus struct { // There must be only one ServiceEndpoint for a service. // +optional ServiceEndpoints []AWSServiceEndpoint `json:"serviceEndpoints,omitempty"` + + // resourceTags is a list of additional tags to apply to AWS resources created for the cluster. + // See https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html for information on tagging AWS resources. + // AWS supports a maximum of 50 tags per resource. OpenShift reserves 25 tags for its use, leaving 25 tags + // available for the user. + // +kubebuilder:validation:MaxItems=25 + // +optional + ResourceTags []AWSResourceTag `json:"resourceTags,omitempty"` +} + +// AWSResourceTag is a tag to apply to AWS resources created for the cluster. +type AWSResourceTag struct { + // key is the key of the tag + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + // +kubebuilder:validation:MaxLength=128 + // +kubebuilder:validation:Pattern=`^[0-9A-Za-z_.:/=+-@]+$` + // +required + Key string `json:"key"` + // value is the value of the tag. + // Some AWS service do not support empty values. Since tags are added to resources in many services, the + // length of the tag value must meet the requirements of all services. + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + // +kubebuilder:validation:MaxLength=256 + // +kubebuilder:validation:Pattern=`^[0-9A-Za-z_.:/=+-@]+$` + // +required + Value string `json:"value"` } // AzurePlatformSpec holds the desired state of the Azure infrastructure provider. diff --git a/vendor/github.com/openshift/api/config/v1/types_network.go b/vendor/github.com/openshift/api/config/v1/types_network.go index 257b54b08d..ebfdf01626 100644 --- a/vendor/github.com/openshift/api/config/v1/types_network.go +++ b/vendor/github.com/openshift/api/config/v1/types_network.go @@ -76,6 +76,9 @@ type NetworkStatus struct { // ClusterNetworkMTU is the MTU for inter-pod networking. ClusterNetworkMTU int `json:"clusterNetworkMTU,omitempty"` + + // Migration contains the cluster network migration configuration. + Migration *NetworkMigration `json:"migration,omitempty"` } // ClusterNetworkEntry is a contiguous block of IP addresses from which pod IPs @@ -131,3 +134,11 @@ type NetworkList struct { Items []Network `json:"items"` } + +// NetworkMigration represents the cluster network configuration. +type NetworkMigration struct { + // NetworkType is the target plugin that is to be deployed. + // Currently supported values are: OpenShiftSDN, OVNKubernetes + // +kubebuilder:validation:Enum={"OpenShiftSDN","OVNKubernetes"} + NetworkType string `json:"networkType"` +} diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go index d1143545e8..cb933dac08 100644 --- a/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go +++ b/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go @@ -207,6 +207,11 @@ func (in *AWSPlatformStatus) DeepCopyInto(out *AWSPlatformStatus) { *out = make([]AWSServiceEndpoint, len(*in)) copy(*out, *in) } + if in.ResourceTags != nil { + in, out := &in.ResourceTags, &out.ResourceTags + *out = make([]AWSResourceTag, len(*in)) + copy(*out, *in) + } return } @@ -220,6 +225,22 @@ func (in *AWSPlatformStatus) DeepCopy() *AWSPlatformStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSResourceTag) DeepCopyInto(out *AWSResourceTag) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSResourceTag. +func (in *AWSResourceTag) DeepCopy() *AWSResourceTag { + if in == nil { + return nil + } + out := new(AWSResourceTag) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AWSServiceEndpoint) DeepCopyInto(out *AWSServiceEndpoint) { *out = *in @@ -2563,6 +2584,22 @@ func (in *NetworkList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkMigration) DeepCopyInto(out *NetworkMigration) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkMigration. +func (in *NetworkMigration) DeepCopy() *NetworkMigration { + if in == nil { + return nil + } + out := new(NetworkMigration) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NetworkSpec) DeepCopyInto(out *NetworkSpec) { *out = *in @@ -2607,6 +2644,11 @@ func (in *NetworkStatus) DeepCopyInto(out *NetworkStatus) { *out = make([]string, len(*in)) copy(*out, *in) } + if in.Migration != nil { + in, out := &in.Migration, &out.Migration + *out = new(NetworkMigration) + **out = **in + } return } diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go index ec4a37cb6c..22de664b22 100644 --- a/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go @@ -725,12 +725,23 @@ var map_AWSPlatformStatus = map[string]string{ "": "AWSPlatformStatus holds the current status of the Amazon Web Services infrastructure provider.", "region": "region holds the default AWS region for new AWS resources created by the cluster.", "serviceEndpoints": "ServiceEndpoints list contains custom endpoints which will override default service endpoint of AWS Services. There must be only one ServiceEndpoint for a service.", + "resourceTags": "resourceTags is a list of additional tags to apply to AWS resources created for the cluster. See https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html for information on tagging AWS resources. AWS supports a maximum of 50 tags per resource. OpenShift reserves 25 tags for its use, leaving 25 tags available for the user.", } func (AWSPlatformStatus) SwaggerDoc() map[string]string { return map_AWSPlatformStatus } +var map_AWSResourceTag = map[string]string{ + "": "AWSResourceTag is a tag to apply to AWS resources created for the cluster.", + "key": "key is the key of the tag", + "value": "value is the value of the tag. Some AWS service do not support empty values. Since tags are added to resources in many services, the length of the tag value must meet the requirements of all services.", +} + +func (AWSResourceTag) SwaggerDoc() map[string]string { + return map_AWSResourceTag +} + var map_AWSServiceEndpoint = map[string]string{ "": "AWSServiceEndpoint store the configuration of a custom url to override existing defaults of AWS Services.", "name": "name is the name of the AWS service. The list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html This must be provided and cannot be empty.", @@ -1087,6 +1098,15 @@ func (Network) SwaggerDoc() map[string]string { return map_Network } +var map_NetworkMigration = map[string]string{ + "": "NetworkMigration represents the cluster network configuration.", + "networkType": "NetworkType is the target plugin that is to be deployed. Currently supported values are: OpenShiftSDN, OVNKubernetes", +} + +func (NetworkMigration) SwaggerDoc() map[string]string { + return map_NetworkMigration +} + var map_NetworkSpec = map[string]string{ "": "NetworkSpec is the desired network configuration. As a general rule, this SHOULD NOT be read directly. Instead, you should consume the NetworkStatus, as it indicates the currently deployed configuration. Currently, most spec fields are immutable after installation. Please view the individual ones for further details on each.", "clusterNetwork": "IP address pool to use for pod IPs. This field is immutable after installation.", @@ -1106,6 +1126,7 @@ var map_NetworkStatus = map[string]string{ "serviceNetwork": "IP address pool for services. Currently, we only support a single entry here.", "networkType": "NetworkType is the plugin that is deployed (e.g. OpenShiftSDN).", "clusterNetworkMTU": "ClusterNetworkMTU is the MTU for inter-pod networking.", + "migration": "Migration contains the cluster network migration configuration.", } func (NetworkStatus) SwaggerDoc() map[string]string { diff --git a/vendor/github.com/openshift/api/install.go b/vendor/github.com/openshift/api/install.go index 9318743e71..00ec821f84 100644 --- a/vendor/github.com/openshift/api/install.go +++ b/vendor/github.com/openshift/api/install.go @@ -31,9 +31,11 @@ import ( kstoragev1beta1 "k8s.io/api/storage/v1beta1" "k8s.io/apimachinery/pkg/runtime" + "github.com/openshift/api/apiserver" "github.com/openshift/api/apps" "github.com/openshift/api/authorization" "github.com/openshift/api/build" + "github.com/openshift/api/cloudnetwork" "github.com/openshift/api/config" "github.com/openshift/api/helm" "github.com/openshift/api/image" @@ -61,6 +63,7 @@ import ( var ( schemeBuilder = runtime.NewSchemeBuilder( + apiserver.Install, apps.Install, authorization.Install, build.Install, @@ -69,6 +72,7 @@ var ( image.Install, imageregistry.Install, kubecontrolplane.Install, + cloudnetwork.Install, network.Install, networkoperator.Install, oauth.Install, diff --git a/vendor/github.com/openshift/api/network/v1/001-clusternetwork-crd.yaml b/vendor/github.com/openshift/api/network/v1/001-clusternetwork-crd.yaml index 773530104a..aa8c848749 100644 --- a/vendor/github.com/openshift/api/network/v1/001-clusternetwork-crd.yaml +++ b/vendor/github.com/openshift/api/network/v1/001-clusternetwork-crd.yaml @@ -10,7 +10,6 @@ spec: plural: clusternetworks singular: clusternetwork scope: Cluster - version: v1 versions: - name: v1 served: true diff --git a/vendor/github.com/openshift/api/network/v1/002-hostsubnet-crd.yaml b/vendor/github.com/openshift/api/network/v1/002-hostsubnet-crd.yaml index 61cd99c4a7..c101d06f91 100644 --- a/vendor/github.com/openshift/api/network/v1/002-hostsubnet-crd.yaml +++ b/vendor/github.com/openshift/api/network/v1/002-hostsubnet-crd.yaml @@ -10,7 +10,6 @@ spec: plural: hostsubnets singular: hostsubnet scope: Cluster - version: v1 versions: - name: v1 served: true diff --git a/vendor/github.com/openshift/api/network/v1/003-netnamespace-crd.yaml b/vendor/github.com/openshift/api/network/v1/003-netnamespace-crd.yaml index ac2772d542..4222976368 100644 --- a/vendor/github.com/openshift/api/network/v1/003-netnamespace-crd.yaml +++ b/vendor/github.com/openshift/api/network/v1/003-netnamespace-crd.yaml @@ -10,7 +10,6 @@ spec: plural: netnamespaces singular: netnamespace scope: Cluster - version: v1 versions: - name: v1 served: true diff --git a/vendor/github.com/openshift/api/network/v1/004-egressnetworkpolicy-crd.yaml b/vendor/github.com/openshift/api/network/v1/004-egressnetworkpolicy-crd.yaml index 7660739480..26bd4df1b6 100644 --- a/vendor/github.com/openshift/api/network/v1/004-egressnetworkpolicy-crd.yaml +++ b/vendor/github.com/openshift/api/network/v1/004-egressnetworkpolicy-crd.yaml @@ -10,7 +10,6 @@ spec: plural: egressnetworkpolicies singular: egressnetworkpolicy scope: Namespaced - version: v1 versions: - name: v1 served: true diff --git a/vendor/github.com/openshift/api/operator/v1/0000_70_cluster-network-operator_01_crd.yaml b/vendor/github.com/openshift/api/operator/v1/0000_70_cluster-network-operator_01_crd.yaml index 2320458115..2c9c04ea8d 100644 --- a/vendor/github.com/openshift/api/operator/v1/0000_70_cluster-network-operator_01_crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/0000_70_cluster-network-operator_01_crd.yaml @@ -494,6 +494,17 @@ spec: should manage the component type: string pattern: ^(Managed|Unmanaged|Force|Removed)$ + migration: + description: migration enables and configures the cluster network + migration. Setting this to the target network type to allow changing + the default network. If unset, the operation of changing cluster + default network plugin will be rejected. + type: object + properties: + networkType: + description: networkType is the target type of network migration + The supported values are OpenShiftSDN, OVNKubernetes + type: string observedConfig: description: observedConfig holds a sparse config that controller has observed from the cluster state. It exists in spec because diff --git a/vendor/github.com/openshift/api/operator/v1/0000_70_console-operator.crd.yaml b/vendor/github.com/openshift/api/operator/v1/0000_70_console-operator.crd.yaml index a6ca9d9a9a..d640e60388 100644 --- a/vendor/github.com/openshift/api/operator/v1/0000_70_console-operator.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/0000_70_console-operator.crd.yaml @@ -176,6 +176,17 @@ spec: type: array items: type: string + quickStarts: + description: quickStarts allows customization of available ConsoleQuickStart + resources in console. + type: object + properties: + disabled: + description: disabled is a list of ConsoleQuickStart resource + names that are not shown to users. + type: array + items: + type: string logLevel: description: "logLevel is an intent based logging for an overall component. \ It does not give fine grained control, but it is a simple way diff --git a/vendor/github.com/openshift/api/operator/v1/types_console.go b/vendor/github.com/openshift/api/operator/v1/types_console.go index e0ed656e52..866ce26faa 100644 --- a/vendor/github.com/openshift/api/operator/v1/types_console.go +++ b/vendor/github.com/openshift/api/operator/v1/types_console.go @@ -119,6 +119,10 @@ type ConsoleCustomization struct { // +kubebuilder:validation:Optional // +optional ProjectAccess ProjectAccess `json:"projectAccess,omitempty"` + // quickStarts allows customization of available ConsoleQuickStart resources in console. + // +kubebuilder:validation:Optional + // +optional + QuickStarts QuickStarts `json:"quickStarts,omitempty"` } // ProjectAccess contains options for project access roles @@ -171,6 +175,14 @@ type DeveloperConsoleCatalogCategory struct { Subcategories []DeveloperConsoleCatalogCategoryMeta `json:"subcategories,omitempty"` } +// QuickStarts allow cluster admins to customize available ConsoleQuickStart resources. +type QuickStarts struct { + // disabled is a list of ConsoleQuickStart resource names that are not shown to users. + // +kubebuilder:validation:Optional + // +optional + Disabled []string `json:"disabled,omitempty"` +} + // Brand is a specific supported brand within the console. // +kubebuilder:validation:Pattern=`^$|^(ocp|origin|okd|dedicated|online|azure)$` type Brand string diff --git a/vendor/github.com/openshift/api/operator/v1/types_network.go b/vendor/github.com/openshift/api/operator/v1/types_network.go index bb4e971ef7..d258773c2b 100644 --- a/vendor/github.com/openshift/api/operator/v1/types_network.go +++ b/vendor/github.com/openshift/api/operator/v1/types_network.go @@ -97,6 +97,19 @@ type NetworkSpec struct { // +optional // +kubebuilder:validation:MinProperties=1 ExportNetworkFlows *ExportNetworkFlows `json:"exportNetworkFlows,omitempty"` + + // migration enables and configures the cluster network migration. + // Setting this to the target network type to allow changing the default network. + // If unset, the operation of changing cluster default network plugin will be rejected. + // +optional + Migration *NetworkMigration `json:"migration,omitempty"` +} + +// NetworkMigration represents the cluster network configuration. +type NetworkMigration struct { + // networkType is the target type of network migration + // The supported values are OpenShiftSDN, OVNKubernetes + NetworkType NetworkType `json:"networkType"` } // ClusterNetworkEntry is a subnet from which to allocate PodIPs. A network of size diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go index dfa40efe76..9368a39d6d 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go @@ -656,6 +656,7 @@ func (in *ConsoleCustomization) DeepCopyInto(out *ConsoleCustomization) { out.CustomLogoFile = in.CustomLogoFile in.DeveloperCatalog.DeepCopyInto(&out.DeveloperCatalog) in.ProjectAccess.DeepCopyInto(&out.ProjectAccess) + in.QuickStarts.DeepCopyInto(&out.QuickStarts) return } @@ -2245,6 +2246,22 @@ func (in *NetworkList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkMigration) DeepCopyInto(out *NetworkMigration) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkMigration. +func (in *NetworkMigration) DeepCopy() *NetworkMigration { + if in == nil { + return nil + } + out := new(NetworkMigration) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NetworkSpec) DeepCopyInto(out *NetworkSpec) { *out = *in @@ -2292,6 +2309,11 @@ func (in *NetworkSpec) DeepCopyInto(out *NetworkSpec) { *out = new(ExportNetworkFlows) (*in).DeepCopyInto(*out) } + if in.Migration != nil { + in, out := &in.Migration, &out.Migration + *out = new(NetworkMigration) + **out = **in + } return } @@ -2877,6 +2899,27 @@ func (in *ProxyConfig) DeepCopy() *ProxyConfig { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *QuickStarts) DeepCopyInto(out *QuickStarts) { + *out = *in + if in.Disabled != nil { + in, out := &in.Disabled, &out.Disabled + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QuickStarts. +func (in *QuickStarts) DeepCopy() *QuickStarts { + if in == nil { + return nil + } + out := new(QuickStarts) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RouteAdmissionPolicy) DeepCopyInto(out *RouteAdmissionPolicy) { *out = *in diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go index e50ab77ee7..59c937c743 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go @@ -205,6 +205,7 @@ var map_ConsoleCustomization = map[string]string{ "customLogoFile": "customLogoFile replaces the default OpenShift logo in the masthead and about dialog. It is a reference to a ConfigMap in the openshift-config namespace. This can be created with a command like 'oc create configmap custom-logo --from-file=/path/to/file -n openshift-config'. Image size must be less than 1 MB due to constraints on the ConfigMap size. The ConfigMap key should include a file extension so that the console serves the file with the correct MIME type. Recommended logo specifications: Dimensions: Max height of 68px and max width of 200px SVG format preferred", "developerCatalog": "developerCatalog allows to configure the shown developer catalog categories.", "projectAccess": "projectAccess allows customizing the available list of ClusterRoles in the Developer perspective Project access page which can be used by a project admin to specify roles to other users and restrict access within the project. If set, the list will replace the default ClusterRole options.", + "quickStarts": "quickStarts allows customization of available ConsoleQuickStart resources in console.", } func (ConsoleCustomization) SwaggerDoc() map[string]string { @@ -278,6 +279,15 @@ func (ProjectAccess) SwaggerDoc() map[string]string { return map_ProjectAccess } +var map_QuickStarts = map[string]string{ + "": "QuickStarts allow cluster admins to customize available ConsoleQuickStart resources.", + "disabled": "disabled is a list of ConsoleQuickStart resource names that are not shown to users.", +} + +func (QuickStarts) SwaggerDoc() map[string]string { + return map_QuickStarts +} + var map_StatuspageProvider = map[string]string{ "": "StatuspageProvider provides identity for statuspage account.", "pageID": "pageID is the unique ID assigned by Statuspage for your page. This must be a public page.", @@ -900,6 +910,15 @@ func (NetworkList) SwaggerDoc() map[string]string { return map_NetworkList } +var map_NetworkMigration = map[string]string{ + "": "NetworkMigration represents the cluster network configuration.", + "networkType": "networkType is the target type of network migration The supported values are OpenShiftSDN, OVNKubernetes", +} + +func (NetworkMigration) SwaggerDoc() map[string]string { + return map_NetworkMigration +} + var map_NetworkSpec = map[string]string{ "": "NetworkSpec is the top-level network configuration object.", "clusterNetwork": "clusterNetwork is the IP address pool to use for pod IPs. Some network providers, e.g. OpenShift SDN, support multiple ClusterNetworks. Others only support one. This is equivalent to the cluster-cidr.", @@ -912,6 +931,7 @@ var map_NetworkSpec = map[string]string{ "disableNetworkDiagnostics": "disableNetworkDiagnostics specifies whether or not PodNetworkConnectivityCheck CRs from a test pod to every node, apiserver and LB should be disabled or not. If unset, this property defaults to 'false' and network diagnostics is enabled. Setting this to 'true' would reduce the additional load of the pods performing the checks.", "kubeProxyConfig": "kubeProxyConfig lets us configure desired proxy configuration. If not specified, sensible defaults will be chosen by OpenShift directly. Not consumed by all network providers - currently only openshift-sdn.", "exportNetworkFlows": "exportNetworkFlows enables and configures the export of network flow metadata from the pod network by using protocols NetFlow, SFlow or IPFIX. Currently only supported on OVN-Kubernetes plugin. If unset, flows will not be exported to any collector.", + "migration": "migration enables and configures the cluster network migration. Setting this to the target network type to allow changing the default network. If unset, the operation of changing cluster default network plugin will be rejected.", } func (NetworkSpec) SwaggerDoc() map[string]string { diff --git a/vendor/modules.txt b/vendor/modules.txt index 348dfb2371..d70db7d30b 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -153,15 +153,19 @@ github.com/matttproud/golang_protobuf_extensions/pbutil github.com/modern-go/concurrent # github.com/modern-go/reflect2 v1.0.1 github.com/modern-go/reflect2 -# github.com/openshift/api v0.0.0-20210405165116-47be53705a13 +# github.com/openshift/api v0.0.0-20210415190711-38058be7d6ef ## explicit github.com/openshift/api +github.com/openshift/api/apiserver +github.com/openshift/api/apiserver/v1 github.com/openshift/api/apps github.com/openshift/api/apps/v1 github.com/openshift/api/authorization github.com/openshift/api/authorization/v1 github.com/openshift/api/build github.com/openshift/api/build/v1 +github.com/openshift/api/cloudnetwork +github.com/openshift/api/cloudnetwork/v1 github.com/openshift/api/config github.com/openshift/api/config/v1 github.com/openshift/api/helm